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 /* 233766Sgavinm * Copyright 2007 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 325254Sgavinm #include <sys/mca_x86.h> 335254Sgavinm 341414Scindi /* 355254Sgavinm * Constants for the Machine Check Architecture as implemented on AMD CPUs. 361414Scindi */ 371414Scindi 381414Scindi #ifdef __cplusplus 391414Scindi extern "C" { 401414Scindi #endif 411414Scindi 421414Scindi #define AMD_MSR_MCG_CAP 0x179 431414Scindi #define AMD_MSR_MCG_STATUS 0x17a 441414Scindi #define AMD_MSR_MCG_CTL 0x17b 451414Scindi 461414Scindi #define AMD_MCA_BANK_DC 0 /* Data Cache */ 471414Scindi #define AMD_MCA_BANK_IC 1 /* Instruction Cache */ 481414Scindi #define AMD_MCA_BANK_BU 2 /* Bus Unit */ 491414Scindi #define AMD_MCA_BANK_LS 3 /* Load/Store Unit */ 501414Scindi #define AMD_MCA_BANK_NB 4 /* Northbridge */ 511414Scindi #define AMD_MCA_BANK_COUNT 5 521414Scindi 531414Scindi #define AMD_MSR_DC_CTL 0x400 541414Scindi #define AMD_MSR_DC_MASK 0xc0010044 551414Scindi #define AMD_MSR_DC_STATUS 0x401 561414Scindi #define AMD_MSR_DC_ADDR 0x402 572869Sgavinm #define AMD_MSR_DC_MISC 0x403 581414Scindi 591414Scindi #define AMD_MSR_IC_CTL 0x404 601414Scindi #define AMD_MSR_IC_MASK 0xc0010045 611414Scindi #define AMD_MSR_IC_STATUS 0x405 621414Scindi #define AMD_MSR_IC_ADDR 0x406 632869Sgavinm #define AMD_MSR_IC_MISC 0x407 641414Scindi 651414Scindi #define AMD_MSR_BU_CTL 0x408 661414Scindi #define AMD_MSR_BU_MASK 0xc0010046 671414Scindi #define AMD_MSR_BU_STATUS 0x409 681414Scindi #define AMD_MSR_BU_ADDR 0x40a 692869Sgavinm #define AMD_MSR_BU_MISC 0x40b 701414Scindi 711414Scindi #define AMD_MSR_LS_CTL 0x40c 721414Scindi #define AMD_MSR_LS_MASK 0xc0010047 731414Scindi #define AMD_MSR_LS_STATUS 0x40d 741414Scindi #define AMD_MSR_LS_ADDR 0x40e 752869Sgavinm #define AMD_MSR_LS_MISC 0x40f 761414Scindi 771414Scindi #define AMD_MSR_NB_CTL 0x410 781414Scindi #define AMD_MSR_NB_MASK 0xc0010048 791414Scindi #define AMD_MSR_NB_STATUS 0x411 801414Scindi #define AMD_MSR_NB_ADDR 0x412 812869Sgavinm #define AMD_MSR_NB_MISC 0x413 821414Scindi 831414Scindi #define AMD_MCG_EN_DC 0x01 841414Scindi #define AMD_MCG_EN_IC 0x02 851414Scindi #define AMD_MCG_EN_BU 0x04 861414Scindi #define AMD_MCG_EN_LS 0x08 871414Scindi #define AMD_MCG_EN_NB 0x10 881414Scindi 891414Scindi /* 901414Scindi * Data Cache (DC) bank error-detection enabling bits and CTL register 911414Scindi * initializer value. 921414Scindi */ 931414Scindi 941414Scindi #define AMD_DC_EN_ECCI 0x00000001ULL 951414Scindi #define AMD_DC_EN_ECCM 0x00000002ULL 961414Scindi #define AMD_DC_EN_DECC 0x00000004ULL 971414Scindi #define AMD_DC_EN_DMTP 0x00000008ULL 981414Scindi #define AMD_DC_EN_DSTP 0x00000010ULL 991414Scindi #define AMD_DC_EN_L1TP 0x00000020ULL 1001414Scindi #define AMD_DC_EN_L2TP 0x00000040ULL 1011414Scindi 1022869Sgavinm #define AMD_DC_CTL_INIT_CMN \ 1031414Scindi (AMD_DC_EN_ECCI | AMD_DC_EN_ECCM | AMD_DC_EN_DECC | AMD_DC_EN_DMTP | \ 1041414Scindi AMD_DC_EN_DSTP | AMD_DC_EN_L1TP | AMD_DC_EN_L2TP) 1051414Scindi 1061414Scindi /* 1071414Scindi * Instruction Cache (IC) bank error-detection enabling bits and CTL register 1081414Scindi * initializer value. 1091414Scindi * 1101414Scindi * The Northbridge will handle Read Data errors. Our initializer will enable 1111414Scindi * all but the RDDE detector. 1121414Scindi */ 1131414Scindi 1141414Scindi #define AMD_IC_EN_ECCI 0x00000001ULL 1151414Scindi #define AMD_IC_EN_ECCM 0x00000002ULL 1161414Scindi #define AMD_IC_EN_IDP 0x00000004ULL 1171414Scindi #define AMD_IC_EN_IMTP 0x00000008ULL 1181414Scindi #define AMD_IC_EN_ISTP 0x00000010ULL 1191414Scindi #define AMD_IC_EN_L1TP 0x00000020ULL 1201414Scindi #define AMD_IC_EN_L2TP 0x00000040ULL 1211414Scindi #define AMD_IC_EN_RDDE 0x00000200ULL 1221414Scindi 1232869Sgavinm #define AMD_IC_CTL_INIT_CMN \ 1241414Scindi (AMD_IC_EN_ECCI | AMD_IC_EN_ECCM | AMD_IC_EN_IDP | AMD_IC_EN_IMTP | \ 1251414Scindi AMD_IC_EN_ISTP | AMD_IC_EN_L1TP | AMD_IC_EN_L2TP) 1261414Scindi 1271414Scindi /* 1281414Scindi * Bus Unit (BU) bank error-detection enabling bits and CTL register 1291414Scindi * initializer value. 1301414Scindi * 1311414Scindi * The Northbridge will handle Read Data errors. Our initializer will enable 1321414Scindi * all but the S_RDE_* detectors. 1331414Scindi */ 1341414Scindi 1351414Scindi #define AMD_BU_EN_S_RDE_HP 0x00000001ULL 1361414Scindi #define AMD_BU_EN_S_RDE_TLB 0x00000002ULL 1371414Scindi #define AMD_BU_EN_S_RDE_ALL 0x00000004ULL 1381414Scindi #define AMD_BU_EN_S_ECC1_TLB 0x00000008ULL 1391414Scindi #define AMD_BU_EN_S_ECC1_HP 0x00000010ULL 1401414Scindi #define AMD_BU_EN_S_ECCM_TLB 0x00000020ULL 1411414Scindi #define AMD_BU_EN_S_ECCM_HP 0x00000040ULL 1421414Scindi #define AMD_BU_EN_L2T_PAR_ICDC 0x00000080ULL 1431414Scindi #define AMD_BU_EN_L2T_PAR_TLB 0x00000100ULL 1441414Scindi #define AMD_BU_EN_L2T_PAR_SNP 0x00000200ULL 1451414Scindi #define AMD_BU_EN_L2T_PAR_CPB 0x00000400ULL 1461414Scindi #define AMD_BU_EN_L2T_PAR_SCR 0x00000800ULL 1471414Scindi #define AMD_BU_EN_L2D_ECC1_TLB 0x00001000ULL 1481414Scindi #define AMD_BU_EN_L2D_ECC1_SNP 0x00002000ULL 1491414Scindi #define AMD_BU_EN_L2D_ECC1_CPB 0x00004000ULL 1501414Scindi #define AMD_BU_EN_L2D_ECCM_TLB 0x00008000ULL 1511414Scindi #define AMD_BU_EN_L2D_ECCM_SNP 0x00010000ULL 1521414Scindi #define AMD_BU_EN_L2D_ECCM_CPB 0x00020000ULL 1531414Scindi #define AMD_BU_EN_L2T_ECC1_SCR 0x00040000ULL 1541414Scindi #define AMD_BU_EN_L2T_ECCM_SCR 0x00080000ULL 1551414Scindi 1562869Sgavinm #define AMD_BU_CTL_INIT_CMN \ 1571414Scindi (AMD_BU_EN_S_ECC1_TLB | AMD_BU_EN_S_ECC1_HP | \ 1581414Scindi AMD_BU_EN_S_ECCM_TLB | AMD_BU_EN_S_ECCM_HP | \ 1591414Scindi AMD_BU_EN_L2T_PAR_ICDC | AMD_BU_EN_L2T_PAR_TLB | \ 1601414Scindi AMD_BU_EN_L2T_PAR_SNP | AMD_BU_EN_L2T_PAR_CPB | \ 1611414Scindi AMD_BU_EN_L2T_PAR_SCR | AMD_BU_EN_L2D_ECC1_TLB | \ 1621414Scindi AMD_BU_EN_L2D_ECC1_SNP | AMD_BU_EN_L2D_ECC1_CPB | \ 1631414Scindi AMD_BU_EN_L2D_ECCM_TLB | AMD_BU_EN_L2D_ECCM_SNP | \ 1641414Scindi AMD_BU_EN_L2D_ECCM_CPB | AMD_BU_EN_L2T_ECC1_SCR | \ 1651414Scindi AMD_BU_EN_L2T_ECCM_SCR) 1661414Scindi 1671414Scindi /* 1681414Scindi * Load/Store (LS) bank error-detection enabling bits and CTL register 1691414Scindi * initializer value. 1701414Scindi * 1711414Scindi * The Northbridge will handle Read Data errors. That's the only type of 1721414Scindi * error the LS unit can detect at present, so we won't be enabling any 1731414Scindi * LS detectors. 1741414Scindi */ 1751414Scindi 1761414Scindi #define AMD_LS_EN_S_RDE_S 0x00000001ULL 1771414Scindi #define AMD_LS_EN_S_RDE_L 0x00000002ULL 1781414Scindi 1792869Sgavinm #define AMD_LS_CTL_INIT_CMN 0ULL 1802869Sgavinm 1812869Sgavinm /* 1822869Sgavinm * NorthBridge (NB) MCi_MISC - DRAM Errors Threshold Register. 1832869Sgavinm */ 1842869Sgavinm #define AMD_NB_MISC_VALID (0x1ULL << 63) 1852869Sgavinm #define AMD_NB_MISC_CTRP (0x1ULL << 62) 1862869Sgavinm #define AMD_NB_MISC_LOCKED (0x1ULL << 61) 1872869Sgavinm #define AMD_NB_MISC_CNTEN (0x1ULL << 51) 1882869Sgavinm #define AMD_NB_MISC_INTTYPE (0x1ULL << 49) 1892869Sgavinm #define AMD_NB_MISC_INTTYPE_MASK (0x3ULL << 49) 1902869Sgavinm #define AMD_NB_MISC_OVRFLW (0x1ULL << 48) 1912869Sgavinm #define AMD_NB_MISC_ERRCOUNT_MASK (0xfffULL << 32) 1921414Scindi 1931414Scindi /* 1941414Scindi * The Northbridge (NB) is configured using both the standard MCA CTL register 1951414Scindi * and a NB-specific configuration register (NB CFG). The AMD_NB_EN_* macros 1961414Scindi * are the detector enabling bits for the NB MCA CTL register. The 1971414Scindi * AMD_NB_CFG_* bits are for the NB CFG register. 1981414Scindi * 1991414Scindi * The CTL register can be initialized statically, but portions of the NB CFG 2001414Scindi * register must be initialized based on the current machine's configuration. 2011414Scindi * 2022869Sgavinm * The MCA NB Control Register maps to MC4_CTL[31:0], but we initialize it 2032869Sgavinm * via and MSR write of 64 bits so define all as ULL. 2041414Scindi * 2051414Scindi */ 2062869Sgavinm #define AMD_NB_EN_CORRECC 0x00000001ULL 2072869Sgavinm #define AMD_NB_EN_UNCORRECC 0x00000002ULL 2082869Sgavinm #define AMD_NB_EN_CRCERR0 0x00000004ULL 2092869Sgavinm #define AMD_NB_EN_CRCERR1 0x00000008ULL 2102869Sgavinm #define AMD_NB_EN_CRCERR2 0x00000010ULL 2112869Sgavinm #define AMD_NB_EN_SYNCPKT0 0x00000020ULL 2122869Sgavinm #define AMD_NB_EN_SYNCPKT1 0x00000040ULL 2132869Sgavinm #define AMD_NB_EN_SYNCPKT2 0x00000080ULL 2142869Sgavinm #define AMD_NB_EN_MSTRABRT 0x00000100ULL 2152869Sgavinm #define AMD_NB_EN_TGTABRT 0x00000200ULL 2162869Sgavinm #define AMD_NB_EN_GARTTBLWK 0x00000400ULL 2172869Sgavinm #define AMD_NB_EN_ATOMICRMW 0x00000800ULL 2182869Sgavinm #define AMD_NB_EN_WCHDOGTMR 0x00001000ULL 2192869Sgavinm #define AMD_NB_EN_DRAMPAR 0x00040000ULL /* revs F and G */ 2201414Scindi 2212869Sgavinm #define AMD_NB_CTL_INIT_CMN /* Revs B to G; All but GARTTBLWK */ \ 2221414Scindi (AMD_NB_EN_CORRECC | AMD_NB_EN_UNCORRECC | \ 2231414Scindi AMD_NB_EN_CRCERR0 | AMD_NB_EN_CRCERR1 | AMD_NB_EN_CRCERR2 | \ 2241414Scindi AMD_NB_EN_SYNCPKT0 | AMD_NB_EN_SYNCPKT1 | AMD_NB_EN_SYNCPKT2 | \ 2251414Scindi AMD_NB_EN_MSTRABRT | AMD_NB_EN_TGTABRT | \ 2261414Scindi AMD_NB_EN_ATOMICRMW | AMD_NB_EN_WCHDOGTMR) 2271414Scindi 2282869Sgavinm #define AMD_NB_CTL_INIT_REV_FG /* Additional bits for revs F and G */ \ 2292869Sgavinm AMD_NB_EN_DRAMPAR 2302869Sgavinm 2312869Sgavinm /* 2322869Sgavinm * NB MCA Configuration register 2332869Sgavinm */ 2342869Sgavinm #define AMD_NB_CFG_CPUECCERREN 0x00000001 2352869Sgavinm #define AMD_NB_CFG_CPURDDATERREN 0x00000002 2362869Sgavinm #define AMD_NB_CFG_SYNCONUCECCEN 0x00000004 2372869Sgavinm #define AMD_NB_CFG_SYNCPKTGENDIS 0x00000008 2382869Sgavinm #define AMD_NB_CFG_SYNCPKTPROPDIS 0x00000010 2392869Sgavinm #define AMD_NB_CFG_IOMSTABORTDIS 0x00000020 2402869Sgavinm #define AMD_NB_CFG_CPUERRDIS 0x00000040 2412869Sgavinm #define AMD_NB_CFG_IOERRDIS 0x00000080 2422869Sgavinm #define AMD_NB_CFG_WDOGTMRDIS 0x00000100 2432869Sgavinm #define AMD_NB_CFG_SYNCONWDOGEN 0x00100000 2442869Sgavinm #define AMD_NB_CFG_SYNCONANYERREN 0x00200000 2452869Sgavinm #define AMD_NB_CFG_ECCEN 0x00400000 2462869Sgavinm #define AMD_NB_CFG_CHIPKILLECCEN 0x00800000 2472869Sgavinm #define AMD_NB_CFG_IORDDATERREN 0x01000000 2482869Sgavinm #define AMD_NB_CFG_DISPCICFGCPUERRRSP 0x02000000 2492869Sgavinm #define AMD_NB_CFG_NBMCATOMSTCPUEN 0x08000000 2502869Sgavinm #define AMD_NB_CFG_DISTGTABTCPUERRRSP 0x10000000 2512869Sgavinm #define AMD_NB_CFG_DISMSTABTCPUERRRSP 0x20000000 2522869Sgavinm #define AMD_NB_CFG_SYNCONDRAMADRPARERREN 0x40000000 /* Revs F & G */ 2532869Sgavinm 2542869Sgavinm /* 2552869Sgavinm * We do not initialize the NB config with an absolute value; instead we 2562869Sgavinm * selectively add some bits and remove others. Note that 2572869Sgavinm * AMD_NB_CFG_{ADD,REMOVE}_{CMN,REV_FG} below are not the whole 2582869Sgavinm * story here - additional config is performed regarding the watchdog (see 2592869Sgavinm * ao_mca.c for details). 2602869Sgavinm */ 2612869Sgavinm #define AMD_NB_CFG_ADD_CMN /* Revs B to G */ \ 2622869Sgavinm (AMD_NB_CFG_DISPCICFGCPUERRRSP | AMD_NB_CFG_SYNCONUCECCEN | \ 2632869Sgavinm AMD_NB_CFG_CPUECCERREN) 2642869Sgavinm 2652869Sgavinm #define AMD_NB_CFG_REMOVE_CMN /* Revs B to G */ \ 2662869Sgavinm (AMD_NB_CFG_NBMCATOMSTCPUEN | \ 2672869Sgavinm AMD_NB_CFG_IORDDATERREN | AMD_NB_CFG_SYNCONANYERREN | \ 2682869Sgavinm AMD_NB_CFG_SYNCONWDOGEN | AMD_NB_CFG_IOERRDIS | \ 2692869Sgavinm AMD_NB_CFG_IOMSTABORTDIS | AMD_NB_CFG_SYNCPKTPROPDIS | \ 2702869Sgavinm AMD_NB_CFG_SYNCPKTGENDIS) 2712869Sgavinm 2722869Sgavinm #define AMD_NB_CFG_ADD_REV_FG /* Revs F and G */ \ 2732869Sgavinm AMD_NB_CFG_SYNCONDRAMADRPARERREN 2742869Sgavinm 2752869Sgavinm #define AMD_NB_CFG_REMOVE_REV_FG 0x0 /* Revs F and G */ 2761414Scindi 2771414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_4095 0x00000000 2781414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_2047 0x00000200 2791414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_1023 0x00000400 2801414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_511 0x00000600 2811414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_255 0x00000800 2821414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_127 0x00000a00 2831414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_63 0x00000c00 2841414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_31 0x00000e00 2851414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_MASK 0x00000e00 2861414Scindi #define AMD_NB_CFG_WDOGTMRCNTSEL_SHIFT 9 2871414Scindi 2881414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_1MS 0x00000000 2891414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_1US 0x00001000 2901414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_5NS 0x00002000 2911414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_MASK 0x00003000 2921414Scindi #define AMD_NB_CFG_WDOGTMRBASESEL_SHIFT 12 2931414Scindi 2941414Scindi #define AMD_NB_CFG_LDTLINKSEL_MASK 0x0000c000 2951414Scindi #define AMD_NB_CFG_LDTLINKSEL_SHIFT 14 2961414Scindi 2971414Scindi #define AMD_NB_CFG_GENCRCERRBYTE0 0x00010000 2981414Scindi #define AMD_NB_CFG_GENCRCERRBYTE1 0x00020000 2991414Scindi 3005254Sgavinm /* 3015254Sgavinm * The AMD extended error code is just one nibble of the upper 16 bits 3025254Sgavinm * of the bank status (the resy being used for syndrome etc). So we use 3035254Sgavinm * AMD_EXT_ERRCODE to retrieve that extended error code, not the generic 3045254Sgavinm * MCAX86_MSERRCODE. 3055254Sgavinm */ 3065254Sgavinm #define _AMD_ERREXT_MASK 0x00000000000f0000ULL 3075254Sgavinm #define _AMD_ERREXT_SHIFT 16 3085254Sgavinm #define AMD_EXT_ERRCODE(stat) \ 3095254Sgavinm (((stat) & _AMD_ERREXT_MASK) >> _AMD_ERREXT_SHIFT) 3105254Sgavinm #define AMD_EXT_MKERRCODE(errcode) \ 3115254Sgavinm (((errcode) << _AMD_ERREXT_SHIFT) & _AMD_ERREXT_MASK) 3121414Scindi 3131717Swesolows #define AMD_BANK_STAT_CECC 0x0000400000000000ULL 3141717Swesolows #define AMD_BANK_STAT_UECC 0x0000200000000000ULL 3151717Swesolows #define AMD_BANK_STAT_SCRUB 0x0000010000000000ULL 3161414Scindi 3171717Swesolows /* syndrome[7:0] */ 3181717Swesolows #define AMD_BANK_STAT_SYND_MASK 0x007f800000000000ULL 3191414Scindi #define AMD_BANK_STAT_SYND_SHIFT 47 3201414Scindi 3211414Scindi #define AMD_BANK_SYND(stat) \ 3221414Scindi (((stat) & AMD_BANK_STAT_SYND_MASK) >> AMD_BANK_STAT_SYND_SHIFT) 3231414Scindi #define AMD_BANK_MKSYND(synd) \ 3241414Scindi (((uint64_t)(synd) << AMD_BANK_STAT_SYND_SHIFT) & \ 3251414Scindi AMD_BANK_STAT_SYND_MASK) 3261414Scindi 3272869Sgavinm #define AMD_NB_STAT_DRAMCHANNEL 0x0000020000000000ULL 3282869Sgavinm #define AMD_NB_STAT_LDTLINK_MASK 0x0000007000000000ULL 3291414Scindi #define AMD_NB_STAT_LDTLINK_SHIFT 4 3302869Sgavinm #define AMD_NB_STAT_ERRCPU1 0x0000000200000000ULL 3312869Sgavinm #define AMD_NB_STAT_ERRCPU0 0x0000000100000000ULL 3322869Sgavinm 3331414Scindi #define AMD_NB_STAT_CKSYND_MASK 0x00000000ff000000 /* syndrome[15:8] */ 3341414Scindi #define AMD_NB_STAT_CKSYND_SHIFT (24 - 8) /* shift [31:24] to [15:8] */ 3351414Scindi 3361414Scindi #define AMD_NB_STAT_CKSYND(stat) \ 3371414Scindi ((((stat) & AMD_NB_STAT_CKSYND_MASK) >> AMD_NB_STAT_CKSYND_SHIFT) | \ 3381414Scindi AMD_BANK_SYND((stat))) 3391414Scindi 3401414Scindi #define AMD_NB_STAT_MKCKSYND(synd) \ 3411414Scindi ((((uint64_t)(synd) << AMD_NB_STAT_CKSYND_SHIFT) & \ 3421414Scindi AMD_NB_STAT_CKSYND_MASK) | AMD_BANK_MKSYND(synd)) 3431414Scindi 3442869Sgavinm #define AMD_ERREXT_MASK 0x00000000000f0000ULL 3451414Scindi #define AMD_ERREXT_SHIFT 16 3461414Scindi 3471414Scindi #define AMD_ERRCODE_TLB_BIT 4 3481414Scindi #define AMD_ERRCODE_MEM_BIT 8 3491414Scindi #define AMD_ERRCODE_BUS_BIT 11 3501414Scindi 3511414Scindi #define AMD_ERRCODE_TLB_MASK 0xfff0 3521414Scindi #define AMD_ERRCODE_MEM_MASK 0xff00 3531414Scindi #define AMD_ERRCODE_BUS_MASK 0xf800 3541414Scindi 3555254Sgavinm #define AMD_ERRCODE_MKTLB(tt, ll) MCAX86_MKERRCODE_TLB(tt, ll) 3565254Sgavinm #define AMD_ERRCODE_ISTLB(code) MCAX86_ERRCODE_ISTLB(code) 3571414Scindi 3585254Sgavinm #define AMD_ERRCODE_MKMEM(r4, tt, ll) MCAX86_MKERRCODE_MEMHIER(r4, tt, ll) 3595254Sgavinm #define AMD_ERRCODE_ISMEM(code) MCAX86_ERRCODE_ISMEMHIER(code) 3601414Scindi 3611414Scindi #define AMD_ERRCODE_MKBUS(pp, t, r4, ii, ll) \ 3625254Sgavinm MCAX86_MKERRCODE_BUS_INTERCONNECT(pp, t, r4, ii, ll) 3635254Sgavinm #define AMD_ERRCODE_ISBUS(code) MCAX86_ERRCODE_ISBUS_INTERCONNECT(code) 3641414Scindi 3651414Scindi #define AMD_NB_ADDRLO_MASK 0xfffffff8 3661414Scindi #define AMD_NB_ADDRHI_MASK 0x000000ff 3671414Scindi 3681414Scindi #define AMD_SYNDTYPE_ECC 0 3691414Scindi #define AMD_SYNDTYPE_CHIPKILL 1 3701414Scindi 3711414Scindi #define AMD_NB_SCRUBCTL_DRAM_MASK 0x0000001f 3721414Scindi #define AMD_NB_SCRUBCTL_DRAM_SHIFT 0 3731414Scindi #define AMD_NB_SCRUBCTL_L2_MASK 0x00001f00 3741414Scindi #define AMD_NB_SCRUBCTL_L2_SHIFT 8 3751414Scindi #define AMD_NB_SCRUBCTL_DC_MASK 0x001f0000 3761414Scindi #define AMD_NB_SCRUBCTL_DC_SHIFT 16 377*5327Sgavinm #define AMD_NB_SCRUBCTL_L3_MASK 0x1f000000 378*5327Sgavinm #define AMD_NB_SCRUBCTL_L3_SHIFT 24 3791414Scindi 3801414Scindi #define AMD_NB_SCRUBCTL_RATE_NONE 0 3811414Scindi #define AMD_NB_SCRUBCTL_RATE_MAX 0x16 3821414Scindi 3831414Scindi #define AMD_NB_SCRUBADDR_LO_MASK 0xffffffc0 3845254Sgavinm #define AMD_NB_SCRUBADDR_LO_SHIFT 6 3851414Scindi #define AMD_NB_SCRUBADDR_LO_SCRUBREDIREN 0x1 3861414Scindi #define AMD_NB_SCRUBADDR_HI_MASK 0x000000ff 3871414Scindi 3881414Scindi #define AMD_NB_SCRUBADDR_MKLO(addr) \ 3895254Sgavinm (((addr) & AMD_NB_SCRUBADDR_LO_MASK) >> AMD_NB_SCRUBADDR_LO_SHIFT) 3901414Scindi 3911414Scindi #define AMD_NB_SCRUBADDR_MKHI(addr) \ 3921414Scindi (((addr) >> 32) & AMD_NB_SCRUBADDR_HI_MASK) 3931414Scindi 394*5327Sgavinm #define AMD_NB_MKSCRUBCTL(l3, dc, l2, dr) ( \ 395*5327Sgavinm (((l3) << AMD_NB_SCRUBCTL_L3_SHIFT) & AMD_NB_SCRUBCTL_L3_MASK) | \ 3961414Scindi (((dc) << AMD_NB_SCRUBCTL_DC_SHIFT) & AMD_NB_SCRUBCTL_DC_MASK) | \ 3971414Scindi (((l2) << AMD_NB_SCRUBCTL_L2_SHIFT) & AMD_NB_SCRUBCTL_L2_MASK) | \ 3981414Scindi (((dr) << AMD_NB_SCRUBCTL_DRAM_SHIFT) & AMD_NB_SCRUBCTL_DRAM_MASK)) 3991414Scindi 4001414Scindi #ifdef __cplusplus 4011414Scindi } 4021414Scindi #endif 4031414Scindi 4041414Scindi #endif /* _SYS_MCA_AMD_H */ 405