1*eb00b1c8SRobert Mustacchi /* 2*eb00b1c8SRobert Mustacchi * This file and its contents are supplied under the terms of the 3*eb00b1c8SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*eb00b1c8SRobert Mustacchi * You may only use this file in accordance with the terms of version 5*eb00b1c8SRobert Mustacchi * 1.0 of the CDDL. 6*eb00b1c8SRobert Mustacchi * 7*eb00b1c8SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*eb00b1c8SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*eb00b1c8SRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*eb00b1c8SRobert Mustacchi */ 11*eb00b1c8SRobert Mustacchi 12*eb00b1c8SRobert Mustacchi /* 13*eb00b1c8SRobert Mustacchi * Copyright 2019 Joyent, Inc. 14*eb00b1c8SRobert Mustacchi */ 15*eb00b1c8SRobert Mustacchi 16*eb00b1c8SRobert Mustacchi #include "imc_test.h" 17*eb00b1c8SRobert Mustacchi 18*eb00b1c8SRobert Mustacchi /* 19*eb00b1c8SRobert Mustacchi * This file does a bunch of tests to make sure that we correctly handle cases 20*eb00b1c8SRobert Mustacchi * where we're asked to decode the following types of addresses: 21*eb00b1c8SRobert Mustacchi * 22*eb00b1c8SRobert Mustacchi * - Legacy Reserved Addresses 23*eb00b1c8SRobert Mustacchi * - Between TOLM, TOHM 24*eb00b1c8SRobert Mustacchi * - Above TOHM 25*eb00b1c8SRobert Mustacchi */ 26*eb00b1c8SRobert Mustacchi 27*eb00b1c8SRobert Mustacchi /* 28*eb00b1c8SRobert Mustacchi * This IMC represents a basic case where we have a single 8 GiB dual rank DIMM. 29*eb00b1c8SRobert Mustacchi * We have system memory in the lower 2 GiB and then the remaining 6 GiB starts 30*eb00b1c8SRobert Mustacchi * at the bottom of high memory (4 GiB). 31*eb00b1c8SRobert Mustacchi */ 32*eb00b1c8SRobert Mustacchi static const imc_t imc_badaddr = { 33*eb00b1c8SRobert Mustacchi .imc_gen = IMC_GEN_SANDY, 34*eb00b1c8SRobert Mustacchi .imc_nsockets = 1, 35*eb00b1c8SRobert Mustacchi .imc_sockets[0] = { 36*eb00b1c8SRobert Mustacchi .isock_valid = IMC_SOCKET_V_VALID, 37*eb00b1c8SRobert Mustacchi .isock_sad = { 38*eb00b1c8SRobert Mustacchi .isad_flags = 0, 39*eb00b1c8SRobert Mustacchi .isad_valid = IMC_SAD_V_VALID, 40*eb00b1c8SRobert Mustacchi .isad_tolm = 0x80000000, /* 2 GiB */ 41*eb00b1c8SRobert Mustacchi .isad_tohm = 0x280000000ULL, /* 10 GiB */ 42*eb00b1c8SRobert Mustacchi .isad_nrules = 10, 43*eb00b1c8SRobert Mustacchi .isad_rules[0] = { 44*eb00b1c8SRobert Mustacchi .isr_enable = B_TRUE, 45*eb00b1c8SRobert Mustacchi .isr_limit = 0x80000000, 46*eb00b1c8SRobert Mustacchi .isr_imode = IMC_SAD_IMODE_8t6, 47*eb00b1c8SRobert Mustacchi .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, 48*eb00b1c8SRobert Mustacchi .isr_targets = { 0, 0, 0, 0, 0, 0, 0, 0 } 49*eb00b1c8SRobert Mustacchi }, 50*eb00b1c8SRobert Mustacchi .isad_rules[1] = { 51*eb00b1c8SRobert Mustacchi .isr_enable = B_TRUE, 52*eb00b1c8SRobert Mustacchi .isr_limit = 0x280000000ULL, 53*eb00b1c8SRobert Mustacchi .isr_imode = IMC_SAD_IMODE_8t6, 54*eb00b1c8SRobert Mustacchi .isr_ntargets = IMC_MAX_SAD_INTERLEAVE, 55*eb00b1c8SRobert Mustacchi .isr_targets = { 0, 0, 0, 0, 0, 0, 0, 0 } 56*eb00b1c8SRobert Mustacchi } 57*eb00b1c8SRobert Mustacchi }, 58*eb00b1c8SRobert Mustacchi .isock_ntad = 1, 59*eb00b1c8SRobert Mustacchi .isock_tad[0] = { 60*eb00b1c8SRobert Mustacchi .itad_flags = 0, 61*eb00b1c8SRobert Mustacchi .itad_nrules = 12, 62*eb00b1c8SRobert Mustacchi .itad_rules[0] = { 63*eb00b1c8SRobert Mustacchi .itr_base = 0x0, 64*eb00b1c8SRobert Mustacchi .itr_limit = 0x80000000, 65*eb00b1c8SRobert Mustacchi .itr_sock_way = 1, 66*eb00b1c8SRobert Mustacchi .itr_chan_way = 1, 67*eb00b1c8SRobert Mustacchi .itr_sock_gran = IMC_TAD_GRAN_64B, 68*eb00b1c8SRobert Mustacchi .itr_chan_gran = IMC_TAD_GRAN_64B, 69*eb00b1c8SRobert Mustacchi .itr_ntargets = 4, 70*eb00b1c8SRobert Mustacchi .itr_targets = { 0, 0, 0, 0 } 71*eb00b1c8SRobert Mustacchi }, 72*eb00b1c8SRobert Mustacchi .itad_rules[1] = { 73*eb00b1c8SRobert Mustacchi .itr_base = 0x80000000, 74*eb00b1c8SRobert Mustacchi .itr_limit = 0x280000000ULL, 75*eb00b1c8SRobert Mustacchi .itr_sock_way = 1, 76*eb00b1c8SRobert Mustacchi .itr_chan_way = 1, 77*eb00b1c8SRobert Mustacchi .itr_sock_gran = IMC_TAD_GRAN_64B, 78*eb00b1c8SRobert Mustacchi .itr_chan_gran = IMC_TAD_GRAN_64B, 79*eb00b1c8SRobert Mustacchi .itr_ntargets = 4, 80*eb00b1c8SRobert Mustacchi .itr_targets = { 0, 0, 0, 0 } 81*eb00b1c8SRobert Mustacchi } 82*eb00b1c8SRobert Mustacchi }, 83*eb00b1c8SRobert Mustacchi .isock_nimc = 1, 84*eb00b1c8SRobert Mustacchi .isock_imcs[0] = { 85*eb00b1c8SRobert Mustacchi .icn_nchannels = 1, 86*eb00b1c8SRobert Mustacchi .icn_dimm_type = IMC_DIMM_DDR3, 87*eb00b1c8SRobert Mustacchi .icn_ecc = B_TRUE, 88*eb00b1c8SRobert Mustacchi .icn_lockstep = B_FALSE, 89*eb00b1c8SRobert Mustacchi .icn_closed = B_FALSE, 90*eb00b1c8SRobert Mustacchi .icn_channels[0] = { 91*eb00b1c8SRobert Mustacchi .ich_ndimms = 1, 92*eb00b1c8SRobert Mustacchi .ich_dimms[0] = { 93*eb00b1c8SRobert Mustacchi .idimm_present = B_TRUE, 94*eb00b1c8SRobert Mustacchi .idimm_nbanks = 3, 95*eb00b1c8SRobert Mustacchi .idimm_width = 8, 96*eb00b1c8SRobert Mustacchi .idimm_density = 2, 97*eb00b1c8SRobert Mustacchi .idimm_nranks = 2, 98*eb00b1c8SRobert Mustacchi .idimm_nrows = 14, 99*eb00b1c8SRobert Mustacchi .idimm_ncolumns = 10, 100*eb00b1c8SRobert Mustacchi .idimm_size = 0x80000000 101*eb00b1c8SRobert Mustacchi }, 102*eb00b1c8SRobert Mustacchi .ich_ntad_offsets = 12, 103*eb00b1c8SRobert Mustacchi .ich_tad_offsets = { 0, 0x80000000, 0, 0, 0, 0, 104*eb00b1c8SRobert Mustacchi 0, 0, 0, 0, 0 }, 105*eb00b1c8SRobert Mustacchi .ich_nrankileaves = 8, 106*eb00b1c8SRobert Mustacchi .ich_rankileaves[0] = { 107*eb00b1c8SRobert Mustacchi .irle_enabled = B_TRUE, 108*eb00b1c8SRobert Mustacchi .irle_nways = 2, 109*eb00b1c8SRobert Mustacchi .irle_nwaysbits = 1, 110*eb00b1c8SRobert Mustacchi .irle_limit = 0x200000000ULL, 111*eb00b1c8SRobert Mustacchi .irle_nentries = 5, 112*eb00b1c8SRobert Mustacchi .irle_entries[0] = { 0x0, 0x0 }, 113*eb00b1c8SRobert Mustacchi .irle_entries[1] = { 0x1, 0x0 } 114*eb00b1c8SRobert Mustacchi } 115*eb00b1c8SRobert Mustacchi } 116*eb00b1c8SRobert Mustacchi } 117*eb00b1c8SRobert Mustacchi } 118*eb00b1c8SRobert Mustacchi }; 119*eb00b1c8SRobert Mustacchi 120*eb00b1c8SRobert Mustacchi const imc_test_case_t imc_test_badaddr[] = { { 121*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, legacy VGA (1)", 122*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 123*eb00b1c8SRobert Mustacchi .itc_pa = 0xa0000, 124*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 125*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 126*eb00b1c8SRobert Mustacchi }, { 127*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, legacy VGA (2)", 128*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 129*eb00b1c8SRobert Mustacchi .itc_pa = 0xbffff, 130*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 131*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 132*eb00b1c8SRobert Mustacchi }, { 133*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, legacy VGA (3)", 134*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 135*eb00b1c8SRobert Mustacchi .itc_pa = 0xafc89, 136*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 137*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 138*eb00b1c8SRobert Mustacchi }, { 139*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, legacy PAM (1)", 140*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 141*eb00b1c8SRobert Mustacchi .itc_pa = 0xc0000, 142*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 143*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 144*eb00b1c8SRobert Mustacchi }, { 145*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, legacy PAM (2)", 146*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 147*eb00b1c8SRobert Mustacchi .itc_pa = 0xfffff, 148*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 149*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 150*eb00b1c8SRobert Mustacchi }, { 151*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, Reserved (1)", 152*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 153*eb00b1c8SRobert Mustacchi .itc_pa = 0xffffff, 154*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 155*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 156*eb00b1c8SRobert Mustacchi }, { 157*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, Reserved (1)", 158*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 159*eb00b1c8SRobert Mustacchi .itc_pa = 0xffffff, 160*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 161*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 162*eb00b1c8SRobert Mustacchi }, { 163*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, System (1)", 164*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 165*eb00b1c8SRobert Mustacchi .itc_pa = 0x00fe000000, 166*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 167*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 168*eb00b1c8SRobert Mustacchi }, { 169*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, System (2)", 170*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 171*eb00b1c8SRobert Mustacchi .itc_pa = 0x00fe123446, 172*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 173*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 174*eb00b1c8SRobert Mustacchi }, { 175*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, System (3)", 176*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 177*eb00b1c8SRobert Mustacchi .itc_pa = 0x00ff000000, 178*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 179*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 180*eb00b1c8SRobert Mustacchi }, { 181*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, System (4)", 182*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 183*eb00b1c8SRobert Mustacchi .itc_pa = 0x00ffffffff, 184*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 185*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 186*eb00b1c8SRobert Mustacchi }, { 187*eb00b1c8SRobert Mustacchi .itc_desc = "Bad Address, System (5)", 188*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 189*eb00b1c8SRobert Mustacchi .itc_pa = 0x00ff5abc32, 190*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 191*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_LEGACY_RANGE 192*eb00b1c8SRobert Mustacchi }, { 193*eb00b1c8SRobert Mustacchi .itc_desc = "Outside TOLM (1)", 194*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 195*eb00b1c8SRobert Mustacchi .itc_pa = 0x80000000, 196*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 197*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_OUTSIDE_DRAM 198*eb00b1c8SRobert Mustacchi }, { 199*eb00b1c8SRobert Mustacchi .itc_desc = "Outside TOLM (2)", 200*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 201*eb00b1c8SRobert Mustacchi .itc_pa = 0xF0000000, 202*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 203*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_OUTSIDE_DRAM 204*eb00b1c8SRobert Mustacchi }, { 205*eb00b1c8SRobert Mustacchi .itc_desc = "Outside TOLM (3)", 206*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 207*eb00b1c8SRobert Mustacchi .itc_pa = 0xfdffffffULL, 208*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 209*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_OUTSIDE_DRAM 210*eb00b1c8SRobert Mustacchi }, { 211*eb00b1c8SRobert Mustacchi .itc_desc = "Outside TOHM (1)", 212*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 213*eb00b1c8SRobert Mustacchi .itc_pa = 0x280000000ULL, 214*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 215*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_OUTSIDE_DRAM 216*eb00b1c8SRobert Mustacchi }, { 217*eb00b1c8SRobert Mustacchi .itc_desc = "Outside TOHM (2)", 218*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 219*eb00b1c8SRobert Mustacchi .itc_pa = UINT64_MAX, 220*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 221*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_OUTSIDE_DRAM 222*eb00b1c8SRobert Mustacchi }, { 223*eb00b1c8SRobert Mustacchi .itc_desc = "Outside TOHM (1)", 224*eb00b1c8SRobert Mustacchi .itc_imc = &imc_badaddr, 225*eb00b1c8SRobert Mustacchi .itc_pa = 0x1280000000ULL, 226*eb00b1c8SRobert Mustacchi .itc_pass = B_FALSE, 227*eb00b1c8SRobert Mustacchi .itc_fail = IMC_DECODE_F_OUTSIDE_DRAM 228*eb00b1c8SRobert Mustacchi }, { 229*eb00b1c8SRobert Mustacchi .itc_desc = NULL 230*eb00b1c8SRobert Mustacchi } }; 231