/* * This file and its contents are supplied under the terms of the * Common Development and Distribution License ("CDDL"), version 1.0. * You may only use this file in accordance with the terms of version * 1.0 of the CDDL. * * A full copy of the text of the CDDL should have accompanied this * source. A copy of the CDDL is also available via the Internet at * http://www.illumos.org/license/CDDL. */ /* * Copyright 2019 Joyent, Inc. */ #include "imc_test.h" /* * This tests various aspects of the source address decoder. We need to test * several of the following: * * o SAD rules with different interleave options * - XOR (SNB->BRD) * - 10t8, 14t12, 32t30 (SKX) * o SAD rules with a7mode (IVB->BRD) * - And XOR * o Different SAD rules for different regions */ /* * This tests basics SAD interleaving with a 2 socket system that has a single * channel and DIMM. The other aspects are simplified to try and make life * easier. */ static const imc_t imc_sad_2s_basic = { .imc_gen = IMC_GEN_SANDY, .imc_nsockets = 2, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; /* * This is a 4 socket variants of the previous one. Each DIMM now has a much * smaller amount of memory in it. */ static const imc_t imc_sad_4s_basic = { .imc_gen = IMC_GEN_SANDY, .imc_nsockets = 4, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[2] = { .isock_nodeid = 2, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[3] = { .isock_nodeid = 3, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; /* * This is similar to imc_sad_2s_basic; however, it enables the XOR mode. */ static const imc_t imc_sad_2s_xor = { .imc_gen = IMC_GEN_IVY, .imc_nsockets = 2, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6XOR, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6XOR, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; static const imc_t imc_sad_2s_a7 = { .imc_gen = IMC_GEN_IVY, .imc_nsockets = 2, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; /* * This is a 4 socket variants of the previous one. Each DIMM now has a much * smaller amount of memory in it. */ static const imc_t imc_sad_4s_a7 = { .imc_gen = IMC_GEN_HASWELL, .imc_nsockets = 4, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[2] = { .isock_nodeid = 2, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[3] = { .isock_nodeid = 3, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 2, 3, 0, 1, 2, 3 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 4, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x20000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x20000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; /* * This is similar to imc_sad_2s_basic; however, it enables the XOR mode. */ static const imc_t imc_sad_2s_a7_xor = { .imc_gen = IMC_GEN_BROADWELL, .imc_nsockets = 2, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6XOR, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6XOR, .isr_a7mode = B_TRUE, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = IMC_TAD_FLAG_CHANSHIFT, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; /* * This constructs an IMC that has multiple SAD rules that change how we * interleave across different regions of memory. */ static const imc_t imc_sad_2s_multirule = { .imc_gen = IMC_GEN_SANDY, .imc_nsockets = 2, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x20000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } }, .isad_rules[1] = { .isr_enable = B_TRUE, .isr_limit = 0x40000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 1, 1, 1, 1, 1, 1, 1, 1 } }, .isad_rules[2] = { .isr_enable = B_TRUE, .isr_limit = 0x60000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 0, 0, 0, 0, 0, 0, 0 } }, .isad_rules[3] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 1, 0, 1, 0, 1, 0, 1, 0 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x20000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x20000000, .itr_limit = 0x60000000, .itr_sock_way = 1, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[2] = { .itr_base = 0x60000000, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0x30000000, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 10, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x20000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 1, 0, 1, 0, 1, 0, 1 } }, .isad_rules[1] = { .isr_enable = B_TRUE, .isr_limit = 0x40000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 1, 1, 1, 1, 1, 1, 1, 1 } }, .isad_rules[2] = { .isr_enable = B_TRUE, .isr_limit = 0x60000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 0, 0, 0, 0, 0, 0, 0 } }, .isad_rules[3] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_8t6, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 1, 0, 1, 0, 1, 0, 1, 0 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 12, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x20000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x20000000, .itr_limit = 0x60000000, .itr_sock_way = 1, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[2] = { .itr_base = 0x60000000, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_64B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR3, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0x10000000, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 8, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; static const imc_t imc_sad_2s_skx_10t8 = { .imc_gen = IMC_GEN_SKYLAKE, .imc_nsockets = 2, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 24, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_10t8, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 8, 1, 8, 1, 8, 1, 8, 1 } }, .isad_mcroute = { .ismc_nroutes = 6, .ismc_mcroutes[0] = { 0, 0 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_256B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 24, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_10t8, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 8, 0, 8, 0, 8, 0, 8 } }, .isad_mcroute = { .ismc_nroutes = 6, .ismc_mcroutes[0] = { 0, 0 } } }, .isock_ntad = 1, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_256B, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 1, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0x100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } } }; /* * This performs 2 way interleaving across memory controllers, rather than * across sockets. */ static const imc_t imc_sad_1s_skx_14t12 = { .imc_gen = IMC_GEN_SKYLAKE, .imc_nsockets = 1, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0, .isad_nrules = 24, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000, .isr_imode = IMC_SAD_IMODE_14t12, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 8, 9, 8, 9, 8, 9, 8, 9 } }, .isad_mcroute = { .ismc_nroutes = 6, .ismc_mcroutes[0] = { 0, 0 }, .ismc_mcroutes[1] = { 1, 0 } } }, .isock_ntad = 2, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_4KB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_tad[1] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 2, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_4KB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 2, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } }, .isock_imcs[1] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, }; static const imc_t imc_sad_4s_8w_skx_32t30 = { .imc_gen = IMC_GEN_SKYLAKE, .imc_nsockets = 4, .imc_sockets[0] = { .isock_nodeid = 0, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0x280000000ULL, .isad_nrules = 24, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 8, 9, 8, 9, 8, 9, 8, 9 } }, .isad_rules[1] = { .isr_enable = B_TRUE, .isr_limit = 0x280000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 3, 3, 0, 0, 1, 1, 2, 2 } }, .isad_mcroute = { .ismc_nroutes = 6, .ismc_mcroutes[0] = { 0, 0 }, .ismc_mcroutes[1] = { 1, 0 } } }, .isock_ntad = 2, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_tad[1] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 2, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } }, .isock_imcs[1] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[1] = { .isock_nodeid = 1, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0x280000000ULL, .isad_nrules = 24, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 0, 0, 0, 0, 0, 0, 0 } }, .isad_rules[1] = { .isr_enable = B_TRUE, .isr_limit = 0x280000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 3, 3, 0, 0, 8, 9, 2, 2 } }, .isad_mcroute = { .ismc_nroutes = 6, .ismc_mcroutes[0] = { 0, 0 }, .ismc_mcroutes[1] = { 1, 0 } } }, .isock_ntad = 2, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_tad[1] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 2, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } }, .isock_imcs[1] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[2] = { .isock_nodeid = 2, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0x280000000ULL, .isad_nrules = 24, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 0, 0, 0, 0, 0, 0, 0 } }, .isad_rules[1] = { .isr_enable = B_TRUE, .isr_limit = 0x280000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 3, 3, 0, 0, 1, 1, 8, 9 } }, .isad_mcroute = { .ismc_nroutes = 6, .ismc_mcroutes[0] = { 0, 0 }, .ismc_mcroutes[1] = { 1, 0 } } }, .isock_ntad = 2, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_tad[1] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 2, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } }, .isock_imcs[1] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, .imc_sockets[3] = { .isock_nodeid = 3, .isock_valid = IMC_SOCKET_V_VALID, .isock_sad = { .isad_flags = 0, .isad_valid = IMC_SAD_V_VALID, .isad_tolm = 0x80000000, .isad_tohm = 0x280000000ULL, .isad_nrules = 24, .isad_rules[0] = { .isr_enable = B_TRUE, .isr_limit = 0x80000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 0, 0, 0, 0, 0, 0, 0, 0 } }, .isad_rules[1] = { .isr_enable = B_TRUE, .isr_limit = 0x280000000ULL, .isr_imode = IMC_SAD_IMODE_32t30, .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, .isr_targets = { 8, 9, 0, 0, 1, 1, 2, 2 } }, .isad_mcroute = { .ismc_nroutes = 6, .ismc_mcroutes[0] = { 0, 0 }, .ismc_mcroutes[1] = { 1, 0 } } }, .isock_ntad = 2, .isock_tad[0] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_tad[1] = { .itad_flags = 0, .itad_nrules = 8, .itad_rules[0] = { .itr_base = 0x0, .itr_limit = 0x80000000, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } }, .itad_rules[1] = { .itr_base = 0x100000000ULL, .itr_limit = 0x280000000ULL, .itr_sock_way = 8, .itr_chan_way = 1, .itr_sock_gran = IMC_TAD_GRAN_1GB, .itr_chan_gran = IMC_TAD_GRAN_64B, .itr_ntargets = 4, .itr_targets = { 0, 0, 0, 0 } } }, .isock_nimc = 2, .isock_imcs[0] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0x200000000ULL, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } }, .isock_imcs[1] = { .icn_nchannels = 1, .icn_dimm_type = IMC_DIMM_DDR4, .icn_ecc = B_TRUE, .icn_lockstep = B_FALSE, .icn_closed = B_FALSE, .icn_channels[0] = { .ich_ndimms = 1, .ich_dimms[0] = { .idimm_present = B_TRUE, .idimm_nbanks = 3, .idimm_width = 8, .idimm_density = 2, .idimm_nranks = 2, .idimm_nrows = 14, .idimm_ncolumns = 10, .idimm_size = 0x40000000 }, .ich_ntad_offsets = 12, .ich_tad_offsets = { 0, 0x240000000ULL, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .ich_nrankileaves = 4, .ich_rankileaves[0] = { .irle_enabled = B_TRUE, .irle_nways = 1, .irle_nwaysbits = 1, .irle_limit = 0x40000000, .irle_nentries = 8, .irle_entries[0] = { 0x0, 0x0 }, } } } }, }; const imc_test_case_t imc_test_sad[] = { /* * This first set of tests just makes sure that we properly handle SAD * interleaving rules and get routed to the right socket. */ { .itc_desc = "2 Socket SAD 8-6 Interleave (1)", .itc_imc = &imc_sad_2s_basic, .itc_pa = 0x0, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0 }, { .itc_desc = "2 Socket SAD 8-6 Interleave (2)", .itc_imc = &imc_sad_2s_basic, .itc_pa = 0x12345678, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91a2b38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91a2b38 }, { .itc_desc = "2 Socket SAD 8-6 Interleave (3)", .itc_imc = &imc_sad_2s_basic, .itc_pa = 0x12345638, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91a2b38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91a2b38 }, /* * This is the same as above, but uses a 4-socket configuration instead. */ { .itc_desc = "4 Socket SAD 8-6 Interleave (1)", .itc_imc = &imc_sad_4s_basic, .itc_pa = 0x12345638, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x48d15b8, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x48d15b8 }, { .itc_desc = "4 Socket SAD 8-6 Interleave (2)", .itc_imc = &imc_sad_4s_basic, .itc_pa = 0x12345678, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x48d15b8, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x48d15b8 }, { .itc_desc = "4 Socket SAD 8-6 Interleave (3)", .itc_imc = &imc_sad_4s_basic, .itc_pa = 0x123456b8, .itc_pass = B_TRUE, .itc_nodeid = 2, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x48d15b8, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x48d15b8 }, { .itc_desc = "4 Socket SAD 8-6 Interleave (4)", .itc_imc = &imc_sad_4s_basic, .itc_pa = 0x123456f8, .itc_pass = B_TRUE, .itc_nodeid = 3, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x48d15b8, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x48d15b8 }, /* * This is a variant on the basic 2s tests. XOR mode is enabled, so we use that * to see that we actually have differences versus the basic 2s tests. */ { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (1)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12345638, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91a2b38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91a2b38 }, { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (2)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12345678, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91a2b38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91a2b38 }, { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (3)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12355638, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91aab38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91aab38 }, { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (4)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12355678, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91aab38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91aab38 }, { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (5)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12365638, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91b2b38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91b2b38 }, { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (6)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12365678, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91b2b38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91b2b38 }, { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (7)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12375638, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91bab38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91bab38 }, { .itc_desc = "2 Socket SAD 8-6 XOR Interleave (8)", .itc_imc = &imc_sad_2s_xor, .itc_pa = 0x12375678, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x91bab38, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x91bab38 }, /* * Next, we're going to repeat the same initial set of tests that we had, but * we're also going to turn on a7 mode. First up is the 2 socket case. */ { .itc_desc = "2 Socket SAD 8-6 A7 Interleave (1)", .itc_imc = &imc_sad_2s_a7, .itc_pa = 0x2342000f, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x11a1000f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x11a1000f }, { .itc_desc = "2 Socket SAD 8-6 A7 Interleave (2)", .itc_imc = &imc_sad_2s_a7, .itc_pa = 0x2342004f, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x11a1004f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x11a1004f }, { .itc_desc = "2 Socket SAD 8-6 A7 Interleave (3)", .itc_imc = &imc_sad_2s_a7, .itc_pa = 0x2342020f, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x11a1010f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x11a1010f }, { .itc_desc = "2 Socket SAD 8-6 A7 Interleave (4)", .itc_imc = &imc_sad_2s_a7, .itc_pa = 0x2342024f, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x11a1014f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x11a1014f }, /* * Next, we're going to repeat the same initial set of tests that we had, but * we're also going to turn on a7 mode. First up is the 4 socket case. */ { .itc_desc = "4 Socket SAD 8-6 A7 (1)", .itc_imc = &imc_sad_4s_a7, .itc_pa = 0x2342000f, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08d0800f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08d0800f }, { .itc_desc = "4 Socket SAD 8-6 A7 (2)", .itc_imc = &imc_sad_4s_a7, .itc_pa = 0x2342008f, .itc_pass = B_TRUE, .itc_nodeid = 2, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08d0800f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08d0800f }, { .itc_desc = "4 Socket SAD 8-6 A7 (3)", .itc_imc = &imc_sad_4s_a7, .itc_pa = 0x2342020f, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08d0808f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08d0808f }, { .itc_desc = "4 Socket SAD 8-6 A7 (4)", .itc_imc = &imc_sad_4s_a7, .itc_pa = 0x2342028f, .itc_pass = B_TRUE, .itc_nodeid = 3, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08d0808f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08d0808f }, { .itc_desc = "4 Socket SAD 8-6 A7 (5)", .itc_imc = &imc_sad_4s_a7, .itc_pa = 0x23420f8f, .itc_pass = B_TRUE, .itc_nodeid = 3, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08d0838f, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08d0838f }, /* * 2 Socket 8-6 XOR mode, with a7 set. Here, we'll end up working through all of * the XOR permutations to make sure that we're in good shape. */ { .itc_desc = "2 Socket SAD 8-6 XOR A7 (1)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4200000b, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2100000b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2100000b }, { .itc_desc = "2 Socket SAD 8-6 XOR A7 (2)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4200020b, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2100010b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2100010b }, { .itc_desc = "2 Socket SAD 8-6 XOR A7 (3)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4201000b, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2100800b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2100800b }, { .itc_desc = "2 Socket SAD 8-6 XOR A7 (4)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4201020b, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2100810b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2100810b }, { .itc_desc = "2 Socket SAD 8-6 XOR A7 (5)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4202000b, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2101000b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2101000b }, { .itc_desc = "2 Socket SAD 8-6 XOR A7 (6)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4202020b, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2101010b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2101010b }, { .itc_desc = "2 Socket SAD 8-6 XOR A7 (7)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4203000b, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2101800b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2101800b }, { .itc_desc = "2 Socket SAD 8-6 XOR A7 (8)", .itc_imc = &imc_sad_2s_a7_xor, .itc_pa = 0x4203020b, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2101810b, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2101810b }, /* * This is a multi-rule SAD that alternates how we target socket interleaving * depending on which address range we're at. */ { .itc_desc = "SAD Multi-rule (1)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x0ff60003, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x07fb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x07fb0003 }, { .itc_desc = "SAD Multi-rule (2)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x0ff60043, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x07fb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x07fb0003 }, { .itc_desc = "SAD Multi-rule (3)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x1ff60003, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0ffb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0ffb0003 }, { .itc_desc = "SAD Multi-rule (4)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x1ff60043, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0ffb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0ffb0003 }, { .itc_desc = "SAD Multi-rule (5)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x2ff60003, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x1ff60003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x1ff60003 }, { .itc_desc = "SAD Multi-rule (6)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x2ff60043, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x1ff60043, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x1ff60043 }, { .itc_desc = "SAD Multi-rule (7)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x3ff60003, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2ff60003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2ff60003 }, { .itc_desc = "SAD Multi-rule (8)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x3ff60043, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2ff60043, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2ff60043 }, { .itc_desc = "SAD Multi-rule (9)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x4ff60003, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x1ff60003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x1ff60003 }, { .itc_desc = "SAD Multi-rule (10)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x4ff60043, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x1ff60043, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x1ff60043 }, { .itc_desc = "SAD Multi-rule (11)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x5ff60003, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2ff60003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2ff60003 }, { .itc_desc = "SAD Multi-rule (12)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x5ff60043, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x2ff60043, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x2ff60043 }, { .itc_desc = "SAD Multi-rule (13)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x6ff60003, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x37fb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x37fb0003 }, { .itc_desc = "SAD Multi-rule (14)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x6ff60043, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x37fb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x37fb0003 }, { .itc_desc = "SAD Multi-rule (15)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x7ff60003, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x3ffb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x3ffb0003 }, { .itc_desc = "SAD Multi-rule (16)", .itc_imc = &imc_sad_2s_multirule, .itc_pa = 0x7ff60043, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x3ffb0003, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x3ffb0003 }, /* * Verify that SAD interleaving at 10-8 works. */ { .itc_desc = "SAD 2s SKX 10-8 (1)", .itc_imc = &imc_sad_2s_skx_10t8, .itc_pa = 0x11220000, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08910000, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08910000 }, { .itc_desc = "SAD 2s SKX 10-8 (2)", .itc_imc = &imc_sad_2s_skx_10t8, .itc_pa = 0x11220100, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08910000, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08910000 }, { .itc_desc = "SAD 2s SKX 10-8 (3)", .itc_imc = &imc_sad_2s_skx_10t8, .itc_pa = 0x112200ff, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x089100ff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x089100ff }, { .itc_desc = "SAD 2s SKX 10-8 (4)", .itc_imc = &imc_sad_2s_skx_10t8, .itc_pa = 0x112201ff, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x089100ff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x089100ff }, { .itc_desc = "SAD 2s SKX 10-8 (5)", .itc_imc = &imc_sad_2s_skx_10t8, .itc_pa = 0x7ffffeff, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x3fffffff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x3fffffff }, { .itc_desc = "SAD 2s SKX 10-8 (6)", .itc_imc = &imc_sad_2s_skx_10t8, .itc_pa = 0x7fffffff, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x3fffffff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x3fffffff }, /* * Again with SKX; however, now with 15-12. */ { .itc_desc = "SAD 2s SKX 14-12 (1)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x11220000, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08910000, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08910000 }, { .itc_desc = "SAD 2s SKX 14-12 (2)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x11220100, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x08910100, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08910100 }, { .itc_desc = "SAD 2s SKX 14-12 (3)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x112200ff, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x089100ff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x089100ff }, { .itc_desc = "SAD 2s SKX 14-12 (4)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x112201ff, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x089101ff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x089101ff }, { .itc_desc = "SAD 2s SKX 14-12 (5)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x11221000, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x08910000, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08910000 }, { .itc_desc = "SAD 2s SKX 14-12 (6)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x11221100, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x08910100, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x08910100 }, { .itc_desc = "SAD 2s SKX 14-12 (7)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x112210ff, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x089100ff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x089100ff }, { .itc_desc = "SAD 2s SKX 14-12 (8)", .itc_imc = &imc_sad_1s_skx_14t12, .itc_pa = 0x112211ff, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x089101ff, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x089101ff }, /* * This set covers using an 8-way socket granularity on Skylake. This means that * we have two IMCs per socket as well. We're also using 1 GiB granularity here. * So we want to verify that is working as well. */ { .itc_desc = "SAD 4s 8-way SKX 32-30 (1)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x0badcafe, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (2)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x4badcafe, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (3)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x10badcafeULL, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (4)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x14badcafeULL, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (5)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x18badcafeULL, .itc_pass = B_TRUE, .itc_nodeid = 2, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (6)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x1cbadcafeULL, .itc_pass = B_TRUE, .itc_nodeid = 2, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (7)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x20badcafeULL, .itc_pass = B_TRUE, .itc_nodeid = 3, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (8)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x24badcafeULL, .itc_pass = B_TRUE, .itc_nodeid = 3, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badcafe, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badcafe }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (9)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x0badca77, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (10)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x4badca77, .itc_pass = B_TRUE, .itc_nodeid = 0, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (11)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x10badca77ULL, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (12)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x14badca77ULL, .itc_pass = B_TRUE, .itc_nodeid = 1, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (13)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x18badca77ULL, .itc_pass = B_TRUE, .itc_nodeid = 2, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (14)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x1cbadca77ULL, .itc_pass = B_TRUE, .itc_nodeid = 2, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (15)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x20badca77ULL, .itc_pass = B_TRUE, .itc_nodeid = 3, .itc_tadid = 0, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = "SAD 4s 8-way SKX 32-30 (16)", .itc_imc = &imc_sad_4s_8w_skx_32t30, .itc_pa = 0x24badca77ULL, .itc_pass = B_TRUE, .itc_nodeid = 3, .itc_tadid = 1, .itc_channelid = 0, .itc_chanaddr = 0x0badca77, .itc_dimmid = 0, .itc_rankid = 0, .itc_rankaddr = 0x0badca77 }, { .itc_desc = NULL } };