11414Scindi /* 21414Scindi * CDDL HEADER START 31414Scindi * 41414Scindi * The contents of this file are subject to the terms of the 51717Swesolows * Common Development and Distribution License (the "License"). 61717Swesolows * You may not use this file except in compliance with the License. 71414Scindi * 81414Scindi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 91414Scindi * or http://www.opensolaris.org/os/licensing. 101414Scindi * See the License for the specific language governing permissions 111414Scindi * and limitations under the License. 121414Scindi * 131414Scindi * When distributing Covered Code, include this CDDL HEADER in each 141414Scindi * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 151414Scindi * If applicable, add the following below this CDDL HEADER, with the 161414Scindi * fields enclosed by brackets "[]" replaced with your own identifying 171414Scindi * information: Portions Copyright [yyyy] [name of copyright owner] 181414Scindi * 191414Scindi * CDDL HEADER END 201414Scindi */ 211414Scindi 221414Scindi /* 231414Scindi * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 241414Scindi * Use is subject to license terms. 251414Scindi */ 261414Scindi 271414Scindi #ifndef _SYS_MCA_AMD_H 281414Scindi #define _SYS_MCA_AMD_H 291414Scindi 301414Scindi #pragma ident "%Z%%M% %I% %E% SMI" 311414Scindi 321414Scindi /* 331414Scindi * Constants the Memory Check Architecture as implemented on AMD CPUs. 341414Scindi */ 351414Scindi 361414Scindi #ifdef __cplusplus 371414Scindi extern "C" { 381414Scindi #endif 391414Scindi 401414Scindi #define AMD_MSR_MCG_CAP 0x179 411414Scindi #define AMD_MSR_MCG_STATUS 0x17a 421414Scindi #define AMD_MSR_MCG_CTL 0x17b 431414Scindi 441414Scindi #define AMD_MCA_BANK_DC 0 /* Data Cache */ 451414Scindi #define AMD_MCA_BANK_IC 1 /* Instruction Cache */ 461414Scindi #define AMD_MCA_BANK_BU 2 /* Bus Unit */ 471414Scindi #define AMD_MCA_BANK_LS 3 /* Load/Store Unit */ 481414Scindi #define AMD_MCA_BANK_NB 4 /* Northbridge */ 491414Scindi #define AMD_MCA_BANK_COUNT 5 501414Scindi 511414Scindi #define AMD_MSR_DC_CTL 0x400 521414Scindi #define AMD_MSR_DC_MASK 0xc0010044 531414Scindi #define AMD_MSR_DC_STATUS 0x401 541414Scindi #define AMD_MSR_DC_ADDR 0x402 55*2869Sgavinm #define AMD_MSR_DC_MISC 0x403 561414Scindi 571414Scindi #define AMD_MSR_IC_CTL 0x404 581414Scindi #define AMD_MSR_IC_MASK 0xc0010045 591414Scindi #define AMD_MSR_IC_STATUS 0x405 601414Scindi #define AMD_MSR_IC_ADDR 0x406 61*2869Sgavinm #define AMD_MSR_IC_MISC 0x407 621414Scindi 631414Scindi #define AMD_MSR_BU_CTL 0x408 641414Scindi #define AMD_MSR_BU_MASK 0xc0010046 651414Scindi #define AMD_MSR_BU_STATUS 0x409 661414Scindi #define AMD_MSR_BU_ADDR 0x40a 67*2869Sgavinm #define AMD_MSR_BU_MISC 0x40b 681414Scindi 691414Scindi #define AMD_MSR_LS_CTL 0x40c 701414Scindi #define AMD_MSR_LS_MASK 0xc0010047 711414Scindi #define AMD_MSR_LS_STATUS 0x40d 721414Scindi #define AMD_MSR_LS_ADDR 0x40e 73*2869Sgavinm #define AMD_MSR_LS_MISC 0x40f 741414Scindi 751414Scindi #define AMD_MSR_NB_CTL 0x410 761414Scindi #define AMD_MSR_NB_MASK 0xc0010048 771414Scindi #define AMD_MSR_NB_STATUS 0x411 781414Scindi #define AMD_MSR_NB_ADDR 0x412 79*2869Sgavinm #define AMD_MSR_NB_MISC 0x413 801414Scindi 811414Scindi #define AMD_MCG_EN_DC 0x01 821414Scindi #define AMD_MCG_EN_IC 0x02 831414Scindi #define AMD_MCG_EN_BU 0x04 841414Scindi #define AMD_MCG_EN_LS 0x08 851414Scindi #define AMD_MCG_EN_NB 0x10 861414Scindi #define AMD_MCG_EN_ALL \ 871414Scindi (AMD_MCG_EN_DC | AMD_MCG_EN_IC | AMD_MCG_EN_BU | AMD_MCG_EN_LS | \ 881414Scindi AMD_MCG_EN_NB) 891414Scindi 901414Scindi /* 911414Scindi * Data Cache (DC) bank error-detection enabling bits and CTL register 921414Scindi * initializer value. 931414Scindi */ 941414Scindi 951414Scindi #define AMD_DC_EN_ECCI 0x00000001ULL 961414Scindi #define AMD_DC_EN_ECCM 0x00000002ULL 971414Scindi #define AMD_DC_EN_DECC 0x00000004ULL 981414Scindi #define AMD_DC_EN_DMTP 0x00000008ULL 991414Scindi #define AMD_DC_EN_DSTP 0x00000010ULL 1001414Scindi #define AMD_DC_EN_L1TP 0x00000020ULL 1011414Scindi #define AMD_DC_EN_L2TP 0x00000040ULL 1021414Scindi 103*2869Sgavinm #define AMD_DC_CTL_INIT_CMN \ 1041414Scindi (AMD_DC_EN_ECCI | AMD_DC_EN_ECCM | AMD_DC_EN_DECC | AMD_DC_EN_DMTP | \ 1051414Scindi AMD_DC_EN_DSTP | AMD_DC_EN_L1TP | AMD_DC_EN_L2TP) 1061414Scindi 1071414Scindi /* 1081414Scindi * Instruction Cache (IC) bank error-detection enabling bits and CTL register 1091414Scindi * initializer value. 1101414Scindi * 1111414Scindi * The Northbridge will handle Read Data errors. Our initializer will enable 1121414Scindi * all but the RDDE detector. 1131414Scindi */ 1141414Scindi 1151414Scindi #define AMD_IC_EN_ECCI 0x00000001ULL 1161414Scindi #define AMD_IC_EN_ECCM 0x00000002ULL 1171414Scindi #define AMD_IC_EN_IDP 0x00000004ULL 1181414Scindi #define AMD_IC_EN_IMTP 0x00000008ULL 1191414Scindi #define AMD_IC_EN_ISTP 0x00000010ULL 1201414Scindi #define AMD_IC_EN_L1TP 0x00000020ULL 1211414Scindi #define AMD_IC_EN_L2TP 0x00000040ULL 1221414Scindi #define AMD_IC_EN_RDDE 0x00000200ULL 1231414Scindi 124*2869Sgavinm #define AMD_IC_CTL_INIT_CMN \ 1251414Scindi (AMD_IC_EN_ECCI | AMD_IC_EN_ECCM | AMD_IC_EN_IDP | AMD_IC_EN_IMTP | \ 1261414Scindi AMD_IC_EN_ISTP | AMD_IC_EN_L1TP | AMD_IC_EN_L2TP) 1271414Scindi 1281414Scindi /* 1291414Scindi * Bus Unit (BU) bank error-detection enabling bits and CTL register 1301414Scindi * initializer value. 1311414Scindi * 1321414Scindi * The Northbridge will handle Read Data errors. Our initializer will enable 1331414Scindi * all but the S_RDE_* detectors. 1341414Scindi */ 1351414Scindi 1361414Scindi #define AMD_BU_EN_S_RDE_HP 0x00000001ULL 1371414Scindi #define AMD_BU_EN_S_RDE_TLB 0x00000002ULL 1381414Scindi #define AMD_BU_EN_S_RDE_ALL 0x00000004ULL 1391414Scindi #define AMD_BU_EN_S_ECC1_TLB 0x00000008ULL 1401414Scindi #define AMD_BU_EN_S_ECC1_HP 0x00000010ULL 1411414Scindi #define AMD_BU_EN_S_ECCM_TLB 0x00000020ULL 1421414Scindi #define AMD_BU_EN_S_ECCM_HP 0x00000040ULL 1431414Scindi #define AMD_BU_EN_L2T_PAR_ICDC 0x00000080ULL 1441414Scindi #define AMD_BU_EN_L2T_PAR_TLB 0x00000100ULL 1451414Scindi #define AMD_BU_EN_L2T_PAR_SNP 0x00000200ULL 1461414Scindi #define AMD_BU_EN_L2T_PAR_CPB 0x00000400ULL 1471414Scindi #define AMD_BU_EN_L2T_PAR_SCR 0x00000800ULL 1481414Scindi #define AMD_BU_EN_L2D_ECC1_TLB 0x00001000ULL 1491414Scindi #define AMD_BU_EN_L2D_ECC1_SNP 0x00002000ULL 1501414Scindi #define AMD_BU_EN_L2D_ECC1_CPB 0x00004000ULL 1511414Scindi #define AMD_BU_EN_L2D_ECCM_TLB 0x00008000ULL 1521414Scindi #define AMD_BU_EN_L2D_ECCM_SNP 0x00010000ULL 1531414Scindi #define AMD_BU_EN_L2D_ECCM_CPB 0x00020000ULL 1541414Scindi #define AMD_BU_EN_L2T_ECC1_SCR 0x00040000ULL 1551414Scindi #define AMD_BU_EN_L2T_ECCM_SCR 0x00080000ULL 1561414Scindi 157*2869Sgavinm #define AMD_BU_CTL_INIT_CMN \ 1581414Scindi (AMD_BU_EN_S_ECC1_TLB | AMD_BU_EN_S_ECC1_HP | \ 1591414Scindi AMD_BU_EN_S_ECCM_TLB | AMD_BU_EN_S_ECCM_HP | \ 1601414Scindi AMD_BU_EN_L2T_PAR_ICDC | AMD_BU_EN_L2T_PAR_TLB | \ 1611414Scindi AMD_BU_EN_L2T_PAR_SNP | AMD_BU_EN_L2T_PAR_CPB | \ 1621414Scindi AMD_BU_EN_L2T_PAR_SCR | AMD_BU_EN_L2D_ECC1_TLB | \ 1631414Scindi AMD_BU_EN_L2D_ECC1_SNP | AMD_BU_EN_L2D_ECC1_CPB | \ 1641414Scindi AMD_BU_EN_L2D_ECCM_TLB | AMD_BU_EN_L2D_ECCM_SNP | \ 1651414Scindi AMD_BU_EN_L2D_ECCM_CPB | AMD_BU_EN_L2T_ECC1_SCR | \ 1661414Scindi AMD_BU_EN_L2T_ECCM_SCR) 1671414Scindi 1681414Scindi /* 1691414Scindi * Load/Store (LS) bank error-detection enabling bits and CTL register 1701414Scindi * initializer value. 1711414Scindi * 1721414Scindi * The Northbridge will handle Read Data errors. That's the only type of 1731414Scindi * error the LS unit can detect at present, so we won't be enabling any 1741414Scindi * LS detectors. 1751414Scindi */ 1761414Scindi 1771414Scindi #define AMD_LS_EN_S_RDE_S 0x00000001ULL 1781414Scindi #define AMD_LS_EN_S_RDE_L 0x00000002ULL 1791414Scindi 180*2869Sgavinm #define AMD_LS_CTL_INIT_CMN 0ULL 181*2869Sgavinm 182*2869Sgavinm /* 183*2869Sgavinm * NorthBridge (NB) MCi_MISC - DRAM Errors Threshold Register. 184*2869Sgavinm */ 185*2869Sgavinm #define AMD_NB_MISC_VALID (0x1ULL << 63) 186*2869Sgavinm #define AMD_NB_MISC_CTRP (0x1ULL << 62) 187*2869Sgavinm #define AMD_NB_MISC_LOCKED (0x1ULL << 61) 188*2869Sgavinm #define AMD_NB_MISC_CNTEN (0x1ULL << 51) 189*2869Sgavinm #define AMD_NB_MISC_INTTYPE (0x1ULL << 49) 190*2869Sgavinm #define AMD_NB_MISC_INTTYPE_MASK (0x3ULL << 49) 191*2869Sgavinm #define AMD_NB_MISC_OVRFLW (0x1ULL << 48) 192*2869Sgavinm #define AMD_NB_MISC_ERRCOUNT_MASK (0xfffULL << 32) 1931414Scindi 1941414Scindi /* 1951414Scindi * The Northbridge (NB) is configured using both the standard MCA CTL register 1961414Scindi * and a NB-specific configuration register (NB CFG). The AMD_NB_EN_* macros 1971414Scindi * are the detector enabling bits for the NB MCA CTL register. The 1981414Scindi * AMD_NB_CFG_* bits are for the NB CFG register. 1991414Scindi * 2001414Scindi * The CTL register can be initialized statically, but portions of the NB CFG 2011414Scindi * register must be initialized based on the current machine's configuration. 2021414Scindi * 203*2869Sgavinm * The MCA NB Control Register maps to MC4_CTL[31:0], but we initialize it 204*2869Sgavinm * via and MSR write of 64 bits so define all as ULL. 2051414Scindi * 2061414Scindi */ 207*2869Sgavinm #define AMD_NB_EN_CORRECC 0x00000001ULL 208*2869Sgavinm #define AMD_NB_EN_UNCORRECC 0x00000002ULL 209*2869Sgavinm #define AMD_NB_EN_CRCERR0 0x00000004ULL 210*2869Sgavinm #define AMD_NB_EN_CRCERR1 0x00000008ULL 211*2869Sgavinm #define AMD_NB_EN_CRCERR2 0x00000010ULL 212*2869Sgavinm #define AMD_NB_EN_SYNCPKT0 0x00000020ULL 213*2869Sgavinm #define AMD_NB_EN_SYNCPKT1 0x00000040ULL 214*2869Sgavinm #define AMD_NB_EN_SYNCPKT2 0x00000080ULL 215*2869Sgavinm #define AMD_NB_EN_MSTRABRT 0x00000100ULL 216*2869Sgavinm #define AMD_NB_EN_TGTABRT 0x00000200ULL 217*2869Sgavinm #define AMD_NB_EN_GARTTBLWK 0x00000400ULL 218*2869Sgavinm #define AMD_NB_EN_ATOMICRMW 0x00000800ULL 219*2869Sgavinm #define AMD_NB_EN_WCHDOGTMR 0x00001000ULL 220*2869Sgavinm #define AMD_NB_EN_DRAMPAR 0x00040000ULL /* revs F and G */ 2211414Scindi 222*2869Sgavinm #define AMD_NB_CTL_INIT_CMN /* Revs B to G; All but GARTTBLWK */ \ 2231414Scindi (AMD_NB_EN_CORRECC | AMD_NB_EN_UNCORRECC | \ 2241414Scindi AMD_NB_EN_CRCERR0 | AMD_NB_EN_CRCERR1 | AMD_NB_EN_CRCERR2 | \ 2251414Scindi AMD_NB_EN_SYNCPKT0 | AMD_NB_EN_SYNCPKT1 | AMD_NB_EN_SYNCPKT2 | \ 2261414Scindi AMD_NB_EN_MSTRABRT | AMD_NB_EN_TGTABRT | \ 2271414Scindi AMD_NB_EN_ATOMICRMW | AMD_NB_EN_WCHDOGTMR) 2281414Scindi 229*2869Sgavinm #define AMD_NB_CTL_INIT_REV_FG /* Additional bits for revs F and G */ \ 230*2869Sgavinm AMD_NB_EN_DRAMPAR 231*2869Sgavinm 232*2869Sgavinm /* 233*2869Sgavinm * NB MCA Configuration register 234*2869Sgavinm */ 235*2869Sgavinm #define AMD_NB_CFG_CPUECCERREN 0x00000001 236*2869Sgavinm #define AMD_NB_CFG_CPURDDATERREN 0x00000002 237*2869Sgavinm #define AMD_NB_CFG_SYNCONUCECCEN 0x00000004 238*2869Sgavinm #define AMD_NB_CFG_SYNCPKTGENDIS 0x00000008 239*2869Sgavinm #define AMD_NB_CFG_SYNCPKTPROPDIS 0x00000010 240*2869Sgavinm #define AMD_NB_CFG_IOMSTABORTDIS 0x00000020 241*2869Sgavinm #define AMD_NB_CFG_CPUERRDIS 0x00000040 242*2869Sgavinm #define AMD_NB_CFG_IOERRDIS 0x00000080 243*2869Sgavinm #define AMD_NB_CFG_WDOGTMRDIS 0x00000100 244*2869Sgavinm #define AMD_NB_CFG_SYNCONWDOGEN 0x00100000 245*2869Sgavinm #define AMD_NB_CFG_SYNCONANYERREN 0x00200000 246*2869Sgavinm #define AMD_NB_CFG_ECCEN 0x00400000 247*2869Sgavinm #define AMD_NB_CFG_CHIPKILLECCEN 0x00800000 248*2869Sgavinm #define AMD_NB_CFG_IORDDATERREN 0x01000000 249*2869Sgavinm #define AMD_NB_CFG_DISPCICFGCPUERRRSP 0x02000000 250*2869Sgavinm #define AMD_NB_CFG_NBMCATOMSTCPUEN 0x08000000 251*2869Sgavinm #define AMD_NB_CFG_DISTGTABTCPUERRRSP 0x10000000 252*2869Sgavinm #define AMD_NB_CFG_DISMSTABTCPUERRRSP 0x20000000 253*2869Sgavinm #define AMD_NB_CFG_SYNCONDRAMADRPARERREN 0x40000000 /* Revs F & G */ 254*2869Sgavinm 255*2869Sgavinm /* 256*2869Sgavinm * We do not initialize the NB config with an absolute value; instead we 257*2869Sgavinm * selectively add some bits and remove others. Note that 258*2869Sgavinm * AMD_NB_CFG_{ADD,REMOVE}_{CMN,REV_FG} below are not the whole 259*2869Sgavinm * story here - additional config is performed regarding the watchdog (see 260*2869Sgavinm * ao_mca.c for details). 261*2869Sgavinm */ 262*2869Sgavinm #define AMD_NB_CFG_ADD_CMN /* Revs B to G */ \ 263*2869Sgavinm (AMD_NB_CFG_DISPCICFGCPUERRRSP | AMD_NB_CFG_SYNCONUCECCEN | \ 264*2869Sgavinm AMD_NB_CFG_CPUECCERREN) 265*2869Sgavinm 266*2869Sgavinm #define AMD_NB_CFG_REMOVE_CMN /* Revs B to G */ \ 267*2869Sgavinm (AMD_NB_CFG_NBMCATOMSTCPUEN | \ 268*2869Sgavinm AMD_NB_CFG_IORDDATERREN | AMD_NB_CFG_SYNCONANYERREN | \ 269*2869Sgavinm AMD_NB_CFG_SYNCONWDOGEN | AMD_NB_CFG_IOERRDIS | \ 270*2869Sgavinm AMD_NB_CFG_IOMSTABORTDIS | AMD_NB_CFG_SYNCPKTPROPDIS | \ 271*2869Sgavinm AMD_NB_CFG_SYNCPKTGENDIS) 272*2869Sgavinm 273*2869Sgavinm #define AMD_NB_CFG_ADD_REV_FG /* Revs F and G */ \ 274*2869Sgavinm AMD_NB_CFG_SYNCONDRAMADRPARERREN 275*2869Sgavinm 276*2869Sgavinm #define AMD_NB_CFG_REMOVE_REV_FG 0x0 /* Revs F and G */ 2771414Scindi 2781414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_4095 0x00000000 2791414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_2047 0x00000200 2801414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_1023 0x00000400 2811414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_511 0x00000600 2821414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_255 0x00000800 2831414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_127 0x00000a00 2841414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_63 0x00000c00 2851414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_31 0x00000e00 2861414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_MASK 0x00000e00 2871414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_SHIFT 9 2881414Scindi 2891414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_1MS 0x00000000 2901414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_1US 0x00001000 2911414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_5NS 0x00002000 2921414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_MASK 0x00003000 2931414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_SHIFT 12 2941414Scindi 2951414Scindi #define AMD_NB_CFG_LDTLINKSEL_MASK 0x0000c000 2961414Scindi #define AMD_NB_CFG_LDTLINKSEL_SHIFT 14 2971414Scindi 2981414Scindi #define AMD_NB_CFG_GENCRCERRBYTE0 0x00010000 2991414Scindi #define AMD_NB_CFG_GENCRCERRBYTE1 0x00020000 3001414Scindi 3011414Scindi /* Generic bank status register bits */ 3021717Swesolows #define AMD_BANK_STAT_VALID 0x8000000000000000ULL 3031717Swesolows #define AMD_BANK_STAT_OVER 0x4000000000000000ULL 3041717Swesolows #define AMD_BANK_STAT_UC 0x2000000000000000ULL 3051717Swesolows #define AMD_BANK_STAT_EN 0x1000000000000000ULL 3061717Swesolows #define AMD_BANK_STAT_MISCV 0x0800000000000000ULL 3071717Swesolows #define AMD_BANK_STAT_ADDRV 0x0400000000000000ULL 3081717Swesolows #define AMD_BANK_STAT_PCC 0x0200000000000000ULL 3091414Scindi 3101717Swesolows #define AMD_BANK_STAT_CECC 0x0000400000000000ULL 3111717Swesolows #define AMD_BANK_STAT_UECC 0x0000200000000000ULL 3121717Swesolows #define AMD_BANK_STAT_SCRUB 0x0000010000000000ULL 3131414Scindi 3141717Swesolows /* syndrome[7:0] */ 3151717Swesolows #define AMD_BANK_STAT_SYND_MASK 0x007f800000000000ULL 3161414Scindi #define AMD_BANK_STAT_SYND_SHIFT 47 3171414Scindi 3181414Scindi #define AMD_BANK_SYND(stat) \ 3191414Scindi (((stat) & AMD_BANK_STAT_SYND_MASK) >> AMD_BANK_STAT_SYND_SHIFT) 3201414Scindi #define AMD_BANK_MKSYND(synd) \ 3211414Scindi (((uint64_t)(synd) << AMD_BANK_STAT_SYND_SHIFT) & \ 3221414Scindi AMD_BANK_STAT_SYND_MASK) 3231414Scindi 3241414Scindi /* northbridge (NB) status registers */ 3251414Scindi 3261414Scindi #define AMD_NB_FUNC 3 3271414Scindi #define AMD_NB_REG_CFG 0x44 3281414Scindi #define AMD_NB_REG_STLO 0x48 /* alias: NB_STATUS[0:31] */ 3291414Scindi #define AMD_NB_REG_STHI 0x4c /* alias: NB_STATUS[32:63] */ 3301414Scindi #define AMD_NB_REG_ADDRLO 0x50 /* alias: NB_ADDR[0:31] */ 3311414Scindi #define AMD_NB_REG_ADDRHI 0x54 /* alias: NB_ADDR[32:63] */ 3321414Scindi 3331414Scindi #define AMD_NB_REG_SCRUBCTL 0x58 3341414Scindi #define AMD_NB_REG_SCRUBADDR_LO 0x5c 3351414Scindi #define AMD_NB_REG_SCRUBADDR_HI 0x60 3361414Scindi 337*2869Sgavinm #define AMD_NB_REG_SPARECTL 0xb0 338*2869Sgavinm 339*2869Sgavinm #define AMD_NB_STAT_DRAMCHANNEL 0x0000020000000000ULL 340*2869Sgavinm #define AMD_NB_STAT_LDTLINK_MASK 0x0000007000000000ULL 3411414Scindi #define AMD_NB_STAT_LDTLINK_SHIFT 4 342*2869Sgavinm #define AMD_NB_STAT_ERRCPU1 0x0000000200000000ULL 343*2869Sgavinm #define AMD_NB_STAT_ERRCPU0 0x0000000100000000ULL 344*2869Sgavinm 3451414Scindi #define AMD_NB_STAT_CKSYND_MASK 0x00000000ff000000 /* syndrome[15:8] */ 3461414Scindi #define AMD_NB_STAT_CKSYND_SHIFT (24 - 8) /* shift [31:24] to [15:8] */ 3471414Scindi 3481414Scindi #define AMD_NB_STAT_CKSYND(stat) \ 3491414Scindi ((((stat) & AMD_NB_STAT_CKSYND_MASK) >> AMD_NB_STAT_CKSYND_SHIFT) | \ 3501414Scindi AMD_BANK_SYND((stat))) 3511414Scindi 3521414Scindi #define AMD_NB_STAT_MKCKSYND(synd) \ 3531414Scindi ((((uint64_t)(synd) << AMD_NB_STAT_CKSYND_SHIFT) & \ 3541414Scindi AMD_NB_STAT_CKSYND_MASK) | AMD_BANK_MKSYND(synd)) 3551414Scindi 356*2869Sgavinm #define AMD_ERRCODE_MASK 0x000000000000ffffULL 357*2869Sgavinm #define AMD_ERREXT_MASK 0x00000000000f0000ULL 3581414Scindi #define AMD_ERREXT_SHIFT 16 3591414Scindi 3601414Scindi #define AMD_ERRCODE_TT_MASK 0x000c 3611414Scindi #define AMD_ERRCODE_TT_SHIFT 2 3621414Scindi #define AMD_ERRCODE_TT_INSTR 0x0 3631414Scindi #define AMD_ERRCODE_TT_DATA 0x1 3641414Scindi #define AMD_ERRCODE_TT_GEN 0x2 3651414Scindi 3661414Scindi #define AMD_ERRCODE_LL_MASK 0x0003 3671414Scindi #define AMD_ERRCODE_LL_L0 0x0 3681414Scindi #define AMD_ERRCODE_LL_L1 0x1 3691414Scindi #define AMD_ERRCODE_LL_L2 0x2 3701414Scindi #define AMD_ERRCODE_LL_LG 0x3 3711414Scindi 3721414Scindi #define AMD_ERRCODE_R4_MASK 0x00f0 3731414Scindi #define AMD_ERRCODE_R4_SHIFT 4 3741414Scindi #define AMD_ERRCODE_R4_GEN 0x0 3751414Scindi #define AMD_ERRCODE_R4_RD 0x1 3761414Scindi #define AMD_ERRCODE_R4_WR 0x2 3771414Scindi #define AMD_ERRCODE_R4_DRD 0x3 3781414Scindi #define AMD_ERRCODE_R4_DWR 0x4 3791414Scindi #define AMD_ERRCODE_R4_IRD 0x5 3801414Scindi #define AMD_ERRCODE_R4_PREFETCH 0x6 3811414Scindi #define AMD_ERRCODE_R4_EVICT 0x7 3821414Scindi #define AMD_ERRCODE_R4_SNOOP 0x8 3831414Scindi 3841414Scindi #define AMD_ERRCODE_PP_MASK 0x0600 3851414Scindi #define AMD_ERRCODE_PP_SHIFT 9 3861414Scindi #define AMD_ERRCODE_PP_SRC 0x0 3871414Scindi #define AMD_ERRCODE_PP_RSP 0x1 3881414Scindi #define AMD_ERRCODE_PP_OBS 0x2 3891414Scindi #define AMD_ERRCODE_PP_GEN 0x3 3901414Scindi 3911414Scindi #define AMD_ERRCODE_T_MASK 0x0100 3921414Scindi #define AMD_ERRCODE_T_SHIFT 8 3931414Scindi #define AMD_ERRCODE_T_NONE 0x0 3941414Scindi #define AMD_ERRCODE_T_TIMEOUT 0x1 3951414Scindi 3961414Scindi #define AMD_ERRCODE_II_MASK 0x000c 3971414Scindi #define AMD_ERRCODE_II_SHIFT 2 3981414Scindi #define AMD_ERRCODE_II_MEM 0x0 3991414Scindi #define AMD_ERRCODE_II_IO 0x2 4001414Scindi #define AMD_ERRCODE_II_GEN 0x3 4011414Scindi 4021414Scindi #define AMD_ERRCODE_TLB_BIT 4 4031414Scindi #define AMD_ERRCODE_MEM_BIT 8 4041414Scindi #define AMD_ERRCODE_BUS_BIT 11 4051414Scindi 4061414Scindi #define AMD_ERRCODE_TLB_MASK 0xfff0 4071414Scindi #define AMD_ERRCODE_TLB_VAL 0x0010 4081414Scindi #define AMD_ERRCODE_MEM_MASK 0xff00 4091414Scindi #define AMD_ERRCODE_MEM_VAL 0x0100 4101414Scindi #define AMD_ERRCODE_BUS_MASK 0xf800 4111414Scindi #define AMD_ERRCODE_BUS_VAL 0x0800 4121414Scindi 4131414Scindi #define AMD_ERRCODE_MKTLB(tt, ll) \ 4141414Scindi (AMD_ERRCODE_TLB_VAL | \ 4151414Scindi (((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \ 4161414Scindi ((ll) & AMD_ERRCODE_LL_MASK)) 4171414Scindi #define AMD_ERRCODE_ISTLB(code) \ 4181414Scindi (((code) & AMD_ERRCODE_TLB_MASK) == AMD_ERRCODE_TLB_VAL) 4191414Scindi 4201414Scindi #define AMD_ERRCODE_MKMEM(r4, tt, ll) \ 4211414Scindi (AMD_ERRCODE_MEM_VAL | \ 4221414Scindi (((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \ 4231414Scindi (((tt) << AMD_ERRCODE_TT_SHIFT) & AMD_ERRCODE_TT_MASK) | \ 4241414Scindi ((ll) & AMD_ERRCODE_LL_MASK)) 4251414Scindi #define AMD_ERRCODE_ISMEM(code) \ 4261414Scindi (((code) & AMD_ERRCODE_MEM_MASK) == AMD_ERRCODE_MEM_VAL) 4271414Scindi 4281414Scindi #define AMD_ERRCODE_MKBUS(pp, t, r4, ii, ll) \ 4291414Scindi (AMD_ERRCODE_BUS_VAL | \ 4301414Scindi (((pp) << AMD_ERRCODE_PP_SHIFT) & AMD_ERRCODE_PP_MASK) | \ 4311414Scindi (((t) << AMD_ERRCODE_T_SHIFT) & AMD_ERRCODE_T_MASK) | \ 4321414Scindi (((r4) << AMD_ERRCODE_R4_SHIFT) & AMD_ERRCODE_R4_MASK) | \ 4331414Scindi (((ii) << AMD_ERRCODE_II_SHIFT) & AMD_ERRCODE_II_MASK) | \ 4341414Scindi ((ll) & AMD_ERRCODE_LL_MASK)) 4351414Scindi #define AMD_ERRCODE_ISBUS(code) \ 4361414Scindi (((code) & AMD_ERRCODE_BUS_MASK) == AMD_ERRCODE_BUS_VAL) 4371414Scindi 4381414Scindi #define AMD_NB_ADDRLO_MASK 0xfffffff8 4391414Scindi #define AMD_NB_ADDRHI_MASK 0x000000ff 4401414Scindi 4411414Scindi #define AMD_SYNDTYPE_ECC 0 4421414Scindi #define AMD_SYNDTYPE_CHIPKILL 1 4431414Scindi 4441414Scindi #define AMD_NB_SCRUBCTL_DRAM_MASK 0x0000001f 4451414Scindi #define AMD_NB_SCRUBCTL_DRAM_SHIFT 0 4461414Scindi #define AMD_NB_SCRUBCTL_L2_MASK 0x00001f00 4471414Scindi #define AMD_NB_SCRUBCTL_L2_SHIFT 8 4481414Scindi #define AMD_NB_SCRUBCTL_DC_MASK 0x001f0000 4491414Scindi #define AMD_NB_SCRUBCTL_DC_SHIFT 16 4501414Scindi 4511414Scindi #define AMD_NB_SCRUBCTL_RATE_NONE 0 4521414Scindi #define AMD_NB_SCRUBCTL_RATE_MAX 0x16 4531414Scindi 4541414Scindi #define AMD_NB_SCRUBADDR_LO_MASK 0xffffffc0 4551414Scindi #define AMD_NB_SCRUBADDR_LO_SCRUBREDIREN 0x1 4561414Scindi #define AMD_NB_SCRUBADDR_HI_MASK 0x000000ff 4571414Scindi 4581414Scindi #define AMD_NB_SCRUBADDR_MKLO(addr) \ 4591414Scindi ((addr) & AMD_NB_SCRUBADDR_LO_MASK) 4601414Scindi 4611414Scindi #define AMD_NB_SCRUBADDR_MKHI(addr) \ 4621414Scindi (((addr) >> 32) & AMD_NB_SCRUBADDR_HI_MASK) 4631414Scindi 4641414Scindi #define AMD_NB_MKSCRUBCTL(dc, l2, dr) ( \ 4651414Scindi (((dc) << AMD_NB_SCRUBCTL_DC_SHIFT) & AMD_NB_SCRUBCTL_DC_MASK) | \ 4661414Scindi (((l2) << AMD_NB_SCRUBCTL_L2_SHIFT) & AMD_NB_SCRUBCTL_L2_MASK) | \ 4671414Scindi (((dr) << AMD_NB_SCRUBCTL_DRAM_SHIFT) & AMD_NB_SCRUBCTL_DRAM_MASK)) 4681414Scindi 4691414Scindi #ifdef __cplusplus 4701414Scindi } 4711414Scindi #endif 4721414Scindi 4731414Scindi #endif /* _SYS_MCA_AMD_H */ 474