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