1*1414Scindi /* 2*1414Scindi * CDDL HEADER START 3*1414Scindi * 4*1414Scindi * The contents of this file are subject to the terms of the 5*1414Scindi * Common Development and Distribution License, Version 1.0 only 6*1414Scindi * (the "License"). You may not use this file except in compliance 7*1414Scindi * with the License. 8*1414Scindi * 9*1414Scindi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*1414Scindi * or http://www.opensolaris.org/os/licensing. 11*1414Scindi * See the License for the specific language governing permissions 12*1414Scindi * and limitations under the License. 13*1414Scindi * 14*1414Scindi * When distributing Covered Code, include this CDDL HEADER in each 15*1414Scindi * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*1414Scindi * If applicable, add the following below this CDDL HEADER, with the 17*1414Scindi * fields enclosed by brackets "[]" replaced with your own identifying 18*1414Scindi * information: Portions Copyright [yyyy] [name of copyright owner] 19*1414Scindi * 20*1414Scindi * CDDL HEADER END 21*1414Scindi */ 22*1414Scindi 23*1414Scindi /* 24*1414Scindi * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 25*1414Scindi * Use is subject to license terms. 26*1414Scindi */ 27*1414Scindi 28*1414Scindi #ifndef _SYS_MCA_AMD_H 29*1414Scindi #define _SYS_MCA_AMD_H 30*1414Scindi 31*1414Scindi #pragma ident "%Z%%M% %I% %E% SMI" 32*1414Scindi 33*1414Scindi /* 34*1414Scindi * Constants the Memory Check Architecture as implemented on AMD CPUs. 35*1414Scindi */ 36*1414Scindi 37*1414Scindi #ifdef __cplusplus 38*1414Scindi extern "C" { 39*1414Scindi #endif 40*1414Scindi 41*1414Scindi #define AMD_MSR_MCG_CAP 0x179 42*1414Scindi #define AMD_MSR_MCG_STATUS 0x17a 43*1414Scindi #define AMD_MSR_MCG_CTL 0x17b 44*1414Scindi 45*1414Scindi #define AMD_MCA_BANK_DC 0 /* Data Cache */ 46*1414Scindi #define AMD_MCA_BANK_IC 1 /* Instruction Cache */ 47*1414Scindi #define AMD_MCA_BANK_BU 2 /* Bus Unit */ 48*1414Scindi #define AMD_MCA_BANK_LS 3 /* Load/Store Unit */ 49*1414Scindi #define AMD_MCA_BANK_NB 4 /* Northbridge */ 50*1414Scindi #define AMD_MCA_BANK_COUNT 5 51*1414Scindi 52*1414Scindi #define AMD_MSR_DC_CTL 0x400 53*1414Scindi #define AMD_MSR_DC_MASK 0xc0010044 54*1414Scindi #define AMD_MSR_DC_STATUS 0x401 55*1414Scindi #define AMD_MSR_DC_ADDR 0x402 56*1414Scindi 57*1414Scindi #define AMD_MSR_IC_CTL 0x404 58*1414Scindi #define AMD_MSR_IC_MASK 0xc0010045 59*1414Scindi #define AMD_MSR_IC_STATUS 0x405 60*1414Scindi #define AMD_MSR_IC_ADDR 0x406 61*1414Scindi 62*1414Scindi #define AMD_MSR_BU_CTL 0x408 63*1414Scindi #define AMD_MSR_BU_MASK 0xc0010046 64*1414Scindi #define AMD_MSR_BU_STATUS 0x409 65*1414Scindi #define AMD_MSR_BU_ADDR 0x40a 66*1414Scindi 67*1414Scindi #define AMD_MSR_LS_CTL 0x40c 68*1414Scindi #define AMD_MSR_LS_MASK 0xc0010047 69*1414Scindi #define AMD_MSR_LS_STATUS 0x40d 70*1414Scindi #define AMD_MSR_LS_ADDR 0x40e 71*1414Scindi 72*1414Scindi #define AMD_MSR_NB_CTL 0x410 73*1414Scindi #define AMD_MSR_NB_MASK 0xc0010048 74*1414Scindi #define AMD_MSR_NB_STATUS 0x411 75*1414Scindi #define AMD_MSR_NB_ADDR 0x412 76*1414Scindi 77*1414Scindi #define AMD_MCG_EN_DC 0x01 78*1414Scindi #define AMD_MCG_EN_IC 0x02 79*1414Scindi #define AMD_MCG_EN_BU 0x04 80*1414Scindi #define AMD_MCG_EN_LS 0x08 81*1414Scindi #define AMD_MCG_EN_NB 0x10 82*1414Scindi #define AMD_MCG_EN_ALL \ 83*1414Scindi (AMD_MCG_EN_DC | AMD_MCG_EN_IC | AMD_MCG_EN_BU | AMD_MCG_EN_LS | \ 84*1414Scindi AMD_MCG_EN_NB) 85*1414Scindi 86*1414Scindi /* 87*1414Scindi * Data Cache (DC) bank error-detection enabling bits and CTL register 88*1414Scindi * initializer value. 89*1414Scindi */ 90*1414Scindi 91*1414Scindi #define AMD_DC_EN_ECCI 0x00000001ULL 92*1414Scindi #define AMD_DC_EN_ECCM 0x00000002ULL 93*1414Scindi #define AMD_DC_EN_DECC 0x00000004ULL 94*1414Scindi #define AMD_DC_EN_DMTP 0x00000008ULL 95*1414Scindi #define AMD_DC_EN_DSTP 0x00000010ULL 96*1414Scindi #define AMD_DC_EN_L1TP 0x00000020ULL 97*1414Scindi #define AMD_DC_EN_L2TP 0x00000040ULL 98*1414Scindi 99*1414Scindi #define AMD_DC_CTL_INIT \ 100*1414Scindi (AMD_DC_EN_ECCI | AMD_DC_EN_ECCM | AMD_DC_EN_DECC | AMD_DC_EN_DMTP | \ 101*1414Scindi AMD_DC_EN_DSTP | AMD_DC_EN_L1TP | AMD_DC_EN_L2TP) 102*1414Scindi 103*1414Scindi /* 104*1414Scindi * Instruction Cache (IC) bank error-detection enabling bits and CTL register 105*1414Scindi * initializer value. 106*1414Scindi * 107*1414Scindi * The Northbridge will handle Read Data errors. Our initializer will enable 108*1414Scindi * all but the RDDE detector. 109*1414Scindi */ 110*1414Scindi 111*1414Scindi #define AMD_IC_EN_ECCI 0x00000001ULL 112*1414Scindi #define AMD_IC_EN_ECCM 0x00000002ULL 113*1414Scindi #define AMD_IC_EN_IDP 0x00000004ULL 114*1414Scindi #define AMD_IC_EN_IMTP 0x00000008ULL 115*1414Scindi #define AMD_IC_EN_ISTP 0x00000010ULL 116*1414Scindi #define AMD_IC_EN_L1TP 0x00000020ULL 117*1414Scindi #define AMD_IC_EN_L2TP 0x00000040ULL 118*1414Scindi #define AMD_IC_EN_RDDE 0x00000200ULL 119*1414Scindi 120*1414Scindi #define AMD_IC_CTL_INIT \ 121*1414Scindi (AMD_IC_EN_ECCI | AMD_IC_EN_ECCM | AMD_IC_EN_IDP | AMD_IC_EN_IMTP | \ 122*1414Scindi AMD_IC_EN_ISTP | AMD_IC_EN_L1TP | AMD_IC_EN_L2TP) 123*1414Scindi 124*1414Scindi /* 125*1414Scindi * Bus Unit (BU) bank error-detection enabling bits and CTL register 126*1414Scindi * initializer value. 127*1414Scindi * 128*1414Scindi * The Northbridge will handle Read Data errors. Our initializer will enable 129*1414Scindi * all but the S_RDE_* detectors. 130*1414Scindi */ 131*1414Scindi 132*1414Scindi #define AMD_BU_EN_S_RDE_HP 0x00000001ULL 133*1414Scindi #define AMD_BU_EN_S_RDE_TLB 0x00000002ULL 134*1414Scindi #define AMD_BU_EN_S_RDE_ALL 0x00000004ULL 135*1414Scindi #define AMD_BU_EN_S_ECC1_TLB 0x00000008ULL 136*1414Scindi #define AMD_BU_EN_S_ECC1_HP 0x00000010ULL 137*1414Scindi #define AMD_BU_EN_S_ECCM_TLB 0x00000020ULL 138*1414Scindi #define AMD_BU_EN_S_ECCM_HP 0x00000040ULL 139*1414Scindi #define AMD_BU_EN_L2T_PAR_ICDC 0x00000080ULL 140*1414Scindi #define AMD_BU_EN_L2T_PAR_TLB 0x00000100ULL 141*1414Scindi #define AMD_BU_EN_L2T_PAR_SNP 0x00000200ULL 142*1414Scindi #define AMD_BU_EN_L2T_PAR_CPB 0x00000400ULL 143*1414Scindi #define AMD_BU_EN_L2T_PAR_SCR 0x00000800ULL 144*1414Scindi #define AMD_BU_EN_L2D_ECC1_TLB 0x00001000ULL 145*1414Scindi #define AMD_BU_EN_L2D_ECC1_SNP 0x00002000ULL 146*1414Scindi #define AMD_BU_EN_L2D_ECC1_CPB 0x00004000ULL 147*1414Scindi #define AMD_BU_EN_L2D_ECCM_TLB 0x00008000ULL 148*1414Scindi #define AMD_BU_EN_L2D_ECCM_SNP 0x00010000ULL 149*1414Scindi #define AMD_BU_EN_L2D_ECCM_CPB 0x00020000ULL 150*1414Scindi #define AMD_BU_EN_L2T_ECC1_SCR 0x00040000ULL 151*1414Scindi #define AMD_BU_EN_L2T_ECCM_SCR 0x00080000ULL 152*1414Scindi 153*1414Scindi #define AMD_BU_CTL_INIT \ 154*1414Scindi (AMD_BU_EN_S_ECC1_TLB | AMD_BU_EN_S_ECC1_HP | \ 155*1414Scindi AMD_BU_EN_S_ECCM_TLB | AMD_BU_EN_S_ECCM_HP | \ 156*1414Scindi AMD_BU_EN_L2T_PAR_ICDC | AMD_BU_EN_L2T_PAR_TLB | \ 157*1414Scindi AMD_BU_EN_L2T_PAR_SNP | AMD_BU_EN_L2T_PAR_CPB | \ 158*1414Scindi AMD_BU_EN_L2T_PAR_SCR | AMD_BU_EN_L2D_ECC1_TLB | \ 159*1414Scindi AMD_BU_EN_L2D_ECC1_SNP | AMD_BU_EN_L2D_ECC1_CPB | \ 160*1414Scindi AMD_BU_EN_L2D_ECCM_TLB | AMD_BU_EN_L2D_ECCM_SNP | \ 161*1414Scindi AMD_BU_EN_L2D_ECCM_CPB | AMD_BU_EN_L2T_ECC1_SCR | \ 162*1414Scindi AMD_BU_EN_L2T_ECCM_SCR) 163*1414Scindi 164*1414Scindi /* 165*1414Scindi * Load/Store (LS) bank error-detection enabling bits and CTL register 166*1414Scindi * initializer value. 167*1414Scindi * 168*1414Scindi * The Northbridge will handle Read Data errors. That's the only type of 169*1414Scindi * error the LS unit can detect at present, so we won't be enabling any 170*1414Scindi * LS detectors. 171*1414Scindi */ 172*1414Scindi 173*1414Scindi #define AMD_LS_EN_S_RDE_S 0x00000001ULL 174*1414Scindi #define AMD_LS_EN_S_RDE_L 0x00000002ULL 175*1414Scindi 176*1414Scindi #define AMD_LS_CTL_INIT 0ULL 177*1414Scindi 178*1414Scindi /* 179*1414Scindi * The Northbridge (NB) is configured using both the standard MCA CTL register 180*1414Scindi * and a NB-specific configuration register (NB CFG). The AMD_NB_EN_* macros 181*1414Scindi * are the detector enabling bits for the NB MCA CTL register. The 182*1414Scindi * AMD_NB_CFG_* bits are for the NB CFG register. 183*1414Scindi * 184*1414Scindi * The CTL register can be initialized statically, but portions of the NB CFG 185*1414Scindi * register must be initialized based on the current machine's configuration. 186*1414Scindi * 187*1414Scindi * The MCA NB Control Register maps to MC4_CTL[31:0]. 188*1414Scindi * 189*1414Scindi */ 190*1414Scindi #define AMD_NB_EN_CORRECC 0x00000001 191*1414Scindi #define AMD_NB_EN_UNCORRECC 0x00000002 192*1414Scindi #define AMD_NB_EN_CRCERR0 0x00000004 193*1414Scindi #define AMD_NB_EN_CRCERR1 0x00000008 194*1414Scindi #define AMD_NB_EN_CRCERR2 0x00000010 195*1414Scindi #define AMD_NB_EN_SYNCPKT0 0x00000020 196*1414Scindi #define AMD_NB_EN_SYNCPKT1 0x00000040 197*1414Scindi #define AMD_NB_EN_SYNCPKT2 0x00000080 198*1414Scindi #define AMD_NB_EN_MSTRABRT 0x00000100 199*1414Scindi #define AMD_NB_EN_TGTABRT 0x00000200 200*1414Scindi #define AMD_NB_EN_GARTTBLWK 0x00000400 201*1414Scindi #define AMD_NB_EN_ATOMICRMW 0x00000800 202*1414Scindi #define AMD_NB_EN_WCHDOGTMR 0x00001000 203*1414Scindi 204*1414Scindi #define AMD_NB_CTL_INIT /* All but GARTTBLWK */ \ 205*1414Scindi (AMD_NB_EN_CORRECC | AMD_NB_EN_UNCORRECC | \ 206*1414Scindi AMD_NB_EN_CRCERR0 | AMD_NB_EN_CRCERR1 | AMD_NB_EN_CRCERR2 | \ 207*1414Scindi AMD_NB_EN_SYNCPKT0 | AMD_NB_EN_SYNCPKT1 | AMD_NB_EN_SYNCPKT2 | \ 208*1414Scindi AMD_NB_EN_MSTRABRT | AMD_NB_EN_TGTABRT | \ 209*1414Scindi AMD_NB_EN_ATOMICRMW | AMD_NB_EN_WCHDOGTMR) 210*1414Scindi 211*1414Scindi #define AMD_NB_CFG_CPUECCERREN 0x00000001 212*1414Scindi #define AMD_NB_CFG_CPURDDATERREN 0x00000002 213*1414Scindi #define AMD_NB_CFG_SYNCONUCECCEN 0x00000004 214*1414Scindi #define AMD_NB_CFG_SYNCPKTGENDIS 0x00000008 215*1414Scindi #define AMD_NB_CFG_SYNCPKTPROPDIS 0x00000010 216*1414Scindi #define AMD_NB_CFG_IOMSTABORTDIS 0x00000020 217*1414Scindi #define AMD_NB_CFG_CPUERRDIS 0x00000040 218*1414Scindi #define AMD_NB_CFG_IOERRDIS 0x00000080 219*1414Scindi #define AMD_NB_CFG_WDOGTMRDIS 0x00000100 220*1414Scindi #define AMD_NB_CFG_SYNCONWDOGEN 0x00100000 221*1414Scindi #define AMD_NB_CFG_SYNCONANYERREN 0x00200000 222*1414Scindi #define AMD_NB_CFG_ECCEN 0x00400000 223*1414Scindi #define AMD_NB_CFG_CHIPKILLECCEN 0x00800000 224*1414Scindi #define AMD_NB_CFG_IORDDATERREN 0x01000000 225*1414Scindi #define AMD_NB_CFG_DISPCICFGCPUERRRSP 0x02000000 226*1414Scindi #define AMD_NB_CFG_NBMCATOMSTCPUEN 0x08000000 227*1414Scindi 228*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_4095 0x00000000 229*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_2047 0x00000200 230*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_1023 0x00000400 231*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_511 0x00000600 232*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_255 0x00000800 233*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_127 0x00000a00 234*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_63 0x00000c00 235*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_31 0x00000e00 236*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_MASK 0x00000e00 237*1414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_SHIFT 9 238*1414Scindi 239*1414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_1MS 0x00000000 240*1414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_1US 0x00001000 241*1414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_5NS 0x00002000 242*1414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_MASK 0x00003000 243*1414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_SHIFT 12 244*1414Scindi 245*1414Scindi #define AMD_NB_CFG_LDTLINKSEL_MASK 0x0000c000 246*1414Scindi #define AMD_NB_CFG_LDTLINKSEL_SHIFT 14 247*1414Scindi 248*1414Scindi #define AMD_NB_CFG_GENCRCERRBYTE0 0x00010000 249*1414Scindi #define AMD_NB_CFG_GENCRCERRBYTE1 0x00020000 250*1414Scindi 251*1414Scindi /* Generic bank status register bits */ 252*1414Scindi #define AMD_BANK_STAT_VALID 0x8000000000000000 253*1414Scindi #define AMD_BANK_STAT_OVER 0x4000000000000000 254*1414Scindi #define AMD_BANK_STAT_UC 0x2000000000000000 255*1414Scindi #define AMD_BANK_STAT_EN 0x1000000000000000 256*1414Scindi #define AMD_BANK_STAT_MISCV 0x0800000000000000 257*1414Scindi #define AMD_BANK_STAT_ADDRV 0x0400000000000000 258*1414Scindi #define AMD_BANK_STAT_PCC 0x0200000000000000 259*1414Scindi 260*1414Scindi #define AMD_BANK_STAT_CECC 0x0000400000000000 261*1414Scindi #define AMD_BANK_STAT_UECC 0x0000200000000000 262*1414Scindi #define AMD_BANK_STAT_SCRUB 0x0000010000000000 263*1414Scindi 264*1414Scindi #define AMD_BANK_STAT_SYND_MASK 0x007f800000000000 /* syndrome[7:0] */ 265*1414Scindi #define AMD_BANK_STAT_SYND_SHIFT 47 266*1414Scindi 267*1414Scindi #define AMD_BANK_SYND(stat) \ 268*1414Scindi (((stat) & AMD_BANK_STAT_SYND_MASK) >> AMD_BANK_STAT_SYND_SHIFT) 269*1414Scindi #define AMD_BANK_MKSYND(synd) \ 270*1414Scindi (((uint64_t)(synd) << AMD_BANK_STAT_SYND_SHIFT) & \ 271*1414Scindi AMD_BANK_STAT_SYND_MASK) 272*1414Scindi 273*1414Scindi /* northbridge (NB) status registers */ 274*1414Scindi 275*1414Scindi #define AMD_NB_FUNC 3 276*1414Scindi #define AMD_NB_REG_CFG 0x44 277*1414Scindi #define AMD_NB_REG_STLO 0x48 /* alias: NB_STATUS[0:31] */ 278*1414Scindi #define AMD_NB_REG_STHI 0x4c /* alias: NB_STATUS[32:63] */ 279*1414Scindi #define AMD_NB_REG_ADDRLO 0x50 /* alias: NB_ADDR[0:31] */ 280*1414Scindi #define AMD_NB_REG_ADDRHI 0x54 /* alias: NB_ADDR[32:63] */ 281*1414Scindi 282*1414Scindi #define AMD_NB_REG_SCRUBCTL 0x58 283*1414Scindi #define AMD_NB_REG_SCRUBADDR_LO 0x5c 284*1414Scindi #define AMD_NB_REG_SCRUBADDR_HI 0x60 285*1414Scindi 286*1414Scindi #define AMD_NB_STAT_LDTLINK_MASK 0x0000007000000000 287*1414Scindi #define AMD_NB_STAT_LDTLINK_SHIFT 4 288*1414Scindi #define AMD_NB_STAT_ERRCPU1 0x0000000200000000 289*1414Scindi #define AMD_NB_STAT_ERRCPU0 0x0000000100000000 290*1414Scindi #define AMD_NB_STAT_CKSYND_MASK 0x00000000ff000000 /* syndrome[15:8] */ 291*1414Scindi #define AMD_NB_STAT_CKSYND_SHIFT (24 - 8) /* shift [31:24] to [15:8] */ 292*1414Scindi 293*1414Scindi #define AMD_NB_STAT_CKSYND(stat) \ 294*1414Scindi ((((stat) & AMD_NB_STAT_CKSYND_MASK) >> AMD_NB_STAT_CKSYND_SHIFT) | \ 295*1414Scindi AMD_BANK_SYND((stat))) 296*1414Scindi 297*1414Scindi #define AMD_NB_STAT_MKCKSYND(synd) \ 298*1414Scindi ((((uint64_t)(synd) << AMD_NB_STAT_CKSYND_SHIFT) & \ 299*1414Scindi AMD_NB_STAT_CKSYND_MASK) | AMD_BANK_MKSYND(synd)) 300*1414Scindi 301*1414Scindi #define AMD_ERRCODE_MASK 0x000000000000ffff 302*1414Scindi #define AMD_ERREXT_MASK 0x00000000000f0000 303*1414Scindi #define AMD_ERREXT_SHIFT 16 304*1414Scindi 305*1414Scindi #define AMD_ERRCODE_TT_MASK 0x000c 306*1414Scindi #define AMD_ERRCODE_TT_SHIFT 2 307*1414Scindi #define AMD_ERRCODE_TT_INSTR 0x0 308*1414Scindi #define AMD_ERRCODE_TT_DATA 0x1 309*1414Scindi #define AMD_ERRCODE_TT_GEN 0x2 310*1414Scindi 311*1414Scindi #define AMD_ERRCODE_LL_MASK 0x0003 312*1414Scindi #define AMD_ERRCODE_LL_L0 0x0 313*1414Scindi #define AMD_ERRCODE_LL_L1 0x1 314*1414Scindi #define AMD_ERRCODE_LL_L2 0x2 315*1414Scindi #define AMD_ERRCODE_LL_LG 0x3 316*1414Scindi 317*1414Scindi #define AMD_ERRCODE_R4_MASK 0x00f0 318*1414Scindi #define AMD_ERRCODE_R4_SHIFT 4 319*1414Scindi #define AMD_ERRCODE_R4_GEN 0x0 320*1414Scindi #define AMD_ERRCODE_R4_RD 0x1 321*1414Scindi #define AMD_ERRCODE_R4_WR 0x2 322*1414Scindi #define AMD_ERRCODE_R4_DRD 0x3 323*1414Scindi #define AMD_ERRCODE_R4_DWR 0x4 324*1414Scindi #define AMD_ERRCODE_R4_IRD 0x5 325*1414Scindi #define AMD_ERRCODE_R4_PREFETCH 0x6 326*1414Scindi #define AMD_ERRCODE_R4_EVICT 0x7 327*1414Scindi #define AMD_ERRCODE_R4_SNOOP 0x8 328*1414Scindi 329*1414Scindi #define AMD_ERRCODE_PP_MASK 0x0600 330*1414Scindi #define AMD_ERRCODE_PP_SHIFT 9 331*1414Scindi #define AMD_ERRCODE_PP_SRC 0x0 332*1414Scindi #define AMD_ERRCODE_PP_RSP 0x1 333*1414Scindi #define AMD_ERRCODE_PP_OBS 0x2 334*1414Scindi #define AMD_ERRCODE_PP_GEN 0x3 335*1414Scindi 336*1414Scindi #define AMD_ERRCODE_T_MASK 0x0100 337*1414Scindi #define AMD_ERRCODE_T_SHIFT 8 338*1414Scindi #define AMD_ERRCODE_T_NONE 0x0 339*1414Scindi #define AMD_ERRCODE_T_TIMEOUT 0x1 340*1414Scindi 341*1414Scindi #define AMD_ERRCODE_II_MASK 0x000c 342*1414Scindi #define AMD_ERRCODE_II_SHIFT 2 343*1414Scindi #define AMD_ERRCODE_II_MEM 0x0 344*1414Scindi #define AMD_ERRCODE_II_IO 0x2 345*1414Scindi #define AMD_ERRCODE_II_GEN 0x3 346*1414Scindi 347*1414Scindi #define AMD_ERRCODE_TLB_BIT 4 348*1414Scindi #define AMD_ERRCODE_MEM_BIT 8 349*1414Scindi #define AMD_ERRCODE_BUS_BIT 11 350*1414Scindi 351*1414Scindi #define AMD_ERRCODE_TLB_MASK 0xfff0 352*1414Scindi #define AMD_ERRCODE_TLB_VAL 0x0010 353*1414Scindi #define AMD_ERRCODE_MEM_MASK 0xff00 354*1414Scindi #define AMD_ERRCODE_MEM_VAL 0x0100 355*1414Scindi #define AMD_ERRCODE_BUS_MASK 0xf800 356*1414Scindi #define AMD_ERRCODE_BUS_VAL 0x0800 357*1414Scindi 358*1414Scindi #define AMD_ERRCODE_MKTLB(tt, ll) \ 359*1414Scindi (AMD_ERRCODE_TLB_VAL | \ 360*1414Scindi (((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \ 361*1414Scindi ((ll) & AMD_ERRCODE_LL_MASK)) 362*1414Scindi #define AMD_ERRCODE_ISTLB(code) \ 363*1414Scindi (((code) & AMD_ERRCODE_TLB_MASK) == AMD_ERRCODE_TLB_VAL) 364*1414Scindi 365*1414Scindi #define AMD_ERRCODE_MKMEM(r4, tt, ll) \ 366*1414Scindi (AMD_ERRCODE_MEM_VAL | \ 367*1414Scindi (((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \ 368*1414Scindi (((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \ 369*1414Scindi ((ll) & AMD_ERRCODE_LL_MASK)) 370*1414Scindi #define AMD_ERRCODE_ISMEM(code) \ 371*1414Scindi (((code) & AMD_ERRCODE_MEM_MASK) == AMD_ERRCODE_MEM_VAL) 372*1414Scindi 373*1414Scindi #define AMD_ERRCODE_MKBUS(pp, t, r4, ii, ll) \ 374*1414Scindi (AMD_ERRCODE_BUS_VAL | \ 375*1414Scindi (((pp) << AMD_ERRCODE_PP_SHIFT) & AMD_ERRCODE_PP_MASK) | \ 376*1414Scindi (((t) << AMD_ERRCODE_T_SHIFT) & AMD_ERRCODE_T_MASK) | \ 377*1414Scindi (((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \ 378*1414Scindi (((ii) << AMD_ERRCODE_II_SHIFT) & AMD_ERRCODE_II_MASK) | \ 379*1414Scindi ((ll) & AMD_ERRCODE_LL_MASK)) 380*1414Scindi #define AMD_ERRCODE_ISBUS(code) \ 381*1414Scindi (((code) & AMD_ERRCODE_BUS_MASK) == AMD_ERRCODE_BUS_VAL) 382*1414Scindi 383*1414Scindi #define AMD_NB_ADDRLO_MASK 0xfffffff8 384*1414Scindi #define AMD_NB_ADDRHI_MASK 0x000000ff 385*1414Scindi 386*1414Scindi #define AMD_SYNDTYPE_ECC 0 387*1414Scindi #define AMD_SYNDTYPE_CHIPKILL 1 388*1414Scindi 389*1414Scindi #define AMD_NB_SCRUBCTL_DRAM_MASK 0x0000001f 390*1414Scindi #define AMD_NB_SCRUBCTL_DRAM_SHIFT 0 391*1414Scindi #define AMD_NB_SCRUBCTL_L2_MASK 0x00001f00 392*1414Scindi #define AMD_NB_SCRUBCTL_L2_SHIFT 8 393*1414Scindi #define AMD_NB_SCRUBCTL_DC_MASK 0x001f0000 394*1414Scindi #define AMD_NB_SCRUBCTL_DC_SHIFT 16 395*1414Scindi 396*1414Scindi #define AMD_NB_SCRUBCTL_RATE_NONE 0 397*1414Scindi #define AMD_NB_SCRUBCTL_RATE_MAX 0x16 398*1414Scindi 399*1414Scindi #define AMD_NB_SCRUBADDR_LO_MASK 0xffffffc0 400*1414Scindi #define AMD_NB_SCRUBADDR_LO_SCRUBREDIREN 0x1 401*1414Scindi #define AMD_NB_SCRUBADDR_HI_MASK 0x000000ff 402*1414Scindi 403*1414Scindi #define AMD_NB_SCRUBADDR_MKLO(addr) \ 404*1414Scindi ((addr) & AMD_NB_SCRUBADDR_LO_MASK) 405*1414Scindi 406*1414Scindi #define AMD_NB_SCRUBADDR_MKHI(addr) \ 407*1414Scindi (((addr) >> 32) & AMD_NB_SCRUBADDR_HI_MASK) 408*1414Scindi 409*1414Scindi #define AMD_NB_MKSCRUBCTL(dc, l2, dr) ( \ 410*1414Scindi (((dc) << AMD_NB_SCRUBCTL_DC_SHIFT) & AMD_NB_SCRUBCTL_DC_MASK) | \ 411*1414Scindi (((l2) << AMD_NB_SCRUBCTL_L2_SHIFT) & AMD_NB_SCRUBCTL_L2_MASK) | \ 412*1414Scindi (((dr) << AMD_NB_SCRUBCTL_DRAM_SHIFT) & AMD_NB_SCRUBCTL_DRAM_MASK)) 413*1414Scindi 414*1414Scindi #ifdef __cplusplus 415*1414Scindi } 416*1414Scindi #endif 417*1414Scindi 418*1414Scindi #endif /* _SYS_MCA_AMD_H */ 419