17aec1d6eScindi /* 27aec1d6eScindi * CDDL HEADER START 37aec1d6eScindi * 47aec1d6eScindi * The contents of this file are subject to the terms of the 580ab886dSwesolows * Common Development and Distribution License (the "License"). 680ab886dSwesolows * You may not use this file except in compliance with the License. 77aec1d6eScindi * 87aec1d6eScindi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97aec1d6eScindi * or http://www.opensolaris.org/os/licensing. 107aec1d6eScindi * See the License for the specific language governing permissions 117aec1d6eScindi * and limitations under the License. 127aec1d6eScindi * 137aec1d6eScindi * When distributing Covered Code, include this CDDL HEADER in each 147aec1d6eScindi * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157aec1d6eScindi * If applicable, add the following below this CDDL HEADER, with the 167aec1d6eScindi * fields enclosed by brackets "[]" replaced with your own identifying 177aec1d6eScindi * information: Portions Copyright [yyyy] [name of copyright owner] 187aec1d6eScindi * 197aec1d6eScindi * CDDL HEADER END 207aec1d6eScindi */ 217aec1d6eScindi 227aec1d6eScindi /* 23bb86c342Sgavinm * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 247aec1d6eScindi * Use is subject to license terms. 257aec1d6eScindi */ 267aec1d6eScindi 277aec1d6eScindi #ifndef _SYS_MCA_AMD_H 287aec1d6eScindi #define _SYS_MCA_AMD_H 297aec1d6eScindi 307aec1d6eScindi #pragma ident "%Z%%M% %I% %E% SMI" 317aec1d6eScindi 3220c794b3Sgavinm #include <sys/mca_x86.h> 3320c794b3Sgavinm 347aec1d6eScindi /* 3520c794b3Sgavinm * Constants for the Machine Check Architecture as implemented on AMD CPUs. 367aec1d6eScindi */ 377aec1d6eScindi 387aec1d6eScindi #ifdef __cplusplus 397aec1d6eScindi extern "C" { 407aec1d6eScindi #endif 417aec1d6eScindi 427aec1d6eScindi #define AMD_MSR_MCG_CAP 0x179 437aec1d6eScindi #define AMD_MSR_MCG_STATUS 0x17a 447aec1d6eScindi #define AMD_MSR_MCG_CTL 0x17b 457aec1d6eScindi 467aec1d6eScindi #define AMD_MCA_BANK_DC 0 /* Data Cache */ 477aec1d6eScindi #define AMD_MCA_BANK_IC 1 /* Instruction Cache */ 487aec1d6eScindi #define AMD_MCA_BANK_BU 2 /* Bus Unit */ 497aec1d6eScindi #define AMD_MCA_BANK_LS 3 /* Load/Store Unit */ 507aec1d6eScindi #define AMD_MCA_BANK_NB 4 /* Northbridge */ 517aec1d6eScindi #define AMD_MCA_BANK_COUNT 5 527aec1d6eScindi 537aec1d6eScindi #define AMD_MSR_DC_CTL 0x400 547aec1d6eScindi #define AMD_MSR_DC_MASK 0xc0010044 557aec1d6eScindi #define AMD_MSR_DC_STATUS 0x401 567aec1d6eScindi #define AMD_MSR_DC_ADDR 0x402 578a40a695Sgavinm #define AMD_MSR_DC_MISC 0x403 587aec1d6eScindi 597aec1d6eScindi #define AMD_MSR_IC_CTL 0x404 607aec1d6eScindi #define AMD_MSR_IC_MASK 0xc0010045 617aec1d6eScindi #define AMD_MSR_IC_STATUS 0x405 627aec1d6eScindi #define AMD_MSR_IC_ADDR 0x406 638a40a695Sgavinm #define AMD_MSR_IC_MISC 0x407 647aec1d6eScindi 657aec1d6eScindi #define AMD_MSR_BU_CTL 0x408 667aec1d6eScindi #define AMD_MSR_BU_MASK 0xc0010046 677aec1d6eScindi #define AMD_MSR_BU_STATUS 0x409 687aec1d6eScindi #define AMD_MSR_BU_ADDR 0x40a 698a40a695Sgavinm #define AMD_MSR_BU_MISC 0x40b 707aec1d6eScindi 717aec1d6eScindi #define AMD_MSR_LS_CTL 0x40c 727aec1d6eScindi #define AMD_MSR_LS_MASK 0xc0010047 737aec1d6eScindi #define AMD_MSR_LS_STATUS 0x40d 747aec1d6eScindi #define AMD_MSR_LS_ADDR 0x40e 758a40a695Sgavinm #define AMD_MSR_LS_MISC 0x40f 767aec1d6eScindi 777aec1d6eScindi #define AMD_MSR_NB_CTL 0x410 787aec1d6eScindi #define AMD_MSR_NB_MASK 0xc0010048 797aec1d6eScindi #define AMD_MSR_NB_STATUS 0x411 807aec1d6eScindi #define AMD_MSR_NB_ADDR 0x412 818a40a695Sgavinm #define AMD_MSR_NB_MISC 0x413 827aec1d6eScindi 837aec1d6eScindi #define AMD_MCG_EN_DC 0x01 847aec1d6eScindi #define AMD_MCG_EN_IC 0x02 857aec1d6eScindi #define AMD_MCG_EN_BU 0x04 867aec1d6eScindi #define AMD_MCG_EN_LS 0x08 877aec1d6eScindi #define AMD_MCG_EN_NB 0x10 887aec1d6eScindi 897aec1d6eScindi /* 907aec1d6eScindi * Data Cache (DC) bank error-detection enabling bits and CTL register 917aec1d6eScindi * initializer value. 927aec1d6eScindi */ 937aec1d6eScindi 947aec1d6eScindi #define AMD_DC_EN_ECCI 0x00000001ULL 957aec1d6eScindi #define AMD_DC_EN_ECCM 0x00000002ULL 967aec1d6eScindi #define AMD_DC_EN_DECC 0x00000004ULL 977aec1d6eScindi #define AMD_DC_EN_DMTP 0x00000008ULL 987aec1d6eScindi #define AMD_DC_EN_DSTP 0x00000010ULL 997aec1d6eScindi #define AMD_DC_EN_L1TP 0x00000020ULL 1007aec1d6eScindi #define AMD_DC_EN_L2TP 0x00000040ULL 1017aec1d6eScindi 1028a40a695Sgavinm #define AMD_DC_CTL_INIT_CMN \ 1037aec1d6eScindi (AMD_DC_EN_ECCI | AMD_DC_EN_ECCM | AMD_DC_EN_DECC | AMD_DC_EN_DMTP | \ 1047aec1d6eScindi AMD_DC_EN_DSTP | AMD_DC_EN_L1TP | AMD_DC_EN_L2TP) 1057aec1d6eScindi 1067aec1d6eScindi /* 1077aec1d6eScindi * Instruction Cache (IC) bank error-detection enabling bits and CTL register 1087aec1d6eScindi * initializer value. 1097aec1d6eScindi * 1107aec1d6eScindi * The Northbridge will handle Read Data errors. Our initializer will enable 1117aec1d6eScindi * all but the RDDE detector. 1127aec1d6eScindi */ 1137aec1d6eScindi 1147aec1d6eScindi #define AMD_IC_EN_ECCI 0x00000001ULL 1157aec1d6eScindi #define AMD_IC_EN_ECCM 0x00000002ULL 1167aec1d6eScindi #define AMD_IC_EN_IDP 0x00000004ULL 1177aec1d6eScindi #define AMD_IC_EN_IMTP 0x00000008ULL 1187aec1d6eScindi #define AMD_IC_EN_ISTP 0x00000010ULL 1197aec1d6eScindi #define AMD_IC_EN_L1TP 0x00000020ULL 1207aec1d6eScindi #define AMD_IC_EN_L2TP 0x00000040ULL 1217aec1d6eScindi #define AMD_IC_EN_RDDE 0x00000200ULL 1227aec1d6eScindi 1238a40a695Sgavinm #define AMD_IC_CTL_INIT_CMN \ 1247aec1d6eScindi (AMD_IC_EN_ECCI | AMD_IC_EN_ECCM | AMD_IC_EN_IDP | AMD_IC_EN_IMTP | \ 1257aec1d6eScindi AMD_IC_EN_ISTP | AMD_IC_EN_L1TP | AMD_IC_EN_L2TP) 1267aec1d6eScindi 1277aec1d6eScindi /* 1287aec1d6eScindi * Bus Unit (BU) bank error-detection enabling bits and CTL register 1297aec1d6eScindi * initializer value. 1307aec1d6eScindi * 1317aec1d6eScindi * The Northbridge will handle Read Data errors. Our initializer will enable 1327aec1d6eScindi * all but the S_RDE_* detectors. 1337aec1d6eScindi */ 1347aec1d6eScindi 1357aec1d6eScindi #define AMD_BU_EN_S_RDE_HP 0x00000001ULL 1367aec1d6eScindi #define AMD_BU_EN_S_RDE_TLB 0x00000002ULL 1377aec1d6eScindi #define AMD_BU_EN_S_RDE_ALL 0x00000004ULL 1387aec1d6eScindi #define AMD_BU_EN_S_ECC1_TLB 0x00000008ULL 1397aec1d6eScindi #define AMD_BU_EN_S_ECC1_HP 0x00000010ULL 1407aec1d6eScindi #define AMD_BU_EN_S_ECCM_TLB 0x00000020ULL 1417aec1d6eScindi #define AMD_BU_EN_S_ECCM_HP 0x00000040ULL 1427aec1d6eScindi #define AMD_BU_EN_L2T_PAR_ICDC 0x00000080ULL 1437aec1d6eScindi #define AMD_BU_EN_L2T_PAR_TLB 0x00000100ULL 1447aec1d6eScindi #define AMD_BU_EN_L2T_PAR_SNP 0x00000200ULL 1457aec1d6eScindi #define AMD_BU_EN_L2T_PAR_CPB 0x00000400ULL 1467aec1d6eScindi #define AMD_BU_EN_L2T_PAR_SCR 0x00000800ULL 1477aec1d6eScindi #define AMD_BU_EN_L2D_ECC1_TLB 0x00001000ULL 1487aec1d6eScindi #define AMD_BU_EN_L2D_ECC1_SNP 0x00002000ULL 1497aec1d6eScindi #define AMD_BU_EN_L2D_ECC1_CPB 0x00004000ULL 1507aec1d6eScindi #define AMD_BU_EN_L2D_ECCM_TLB 0x00008000ULL 1517aec1d6eScindi #define AMD_BU_EN_L2D_ECCM_SNP 0x00010000ULL 1527aec1d6eScindi #define AMD_BU_EN_L2D_ECCM_CPB 0x00020000ULL 1537aec1d6eScindi #define AMD_BU_EN_L2T_ECC1_SCR 0x00040000ULL 1547aec1d6eScindi #define AMD_BU_EN_L2T_ECCM_SCR 0x00080000ULL 1557aec1d6eScindi 1568a40a695Sgavinm #define AMD_BU_CTL_INIT_CMN \ 1577aec1d6eScindi (AMD_BU_EN_S_ECC1_TLB | AMD_BU_EN_S_ECC1_HP | \ 1587aec1d6eScindi AMD_BU_EN_S_ECCM_TLB | AMD_BU_EN_S_ECCM_HP | \ 1597aec1d6eScindi AMD_BU_EN_L2T_PAR_ICDC | AMD_BU_EN_L2T_PAR_TLB | \ 1607aec1d6eScindi AMD_BU_EN_L2T_PAR_SNP | AMD_BU_EN_L2T_PAR_CPB | \ 1617aec1d6eScindi AMD_BU_EN_L2T_PAR_SCR | AMD_BU_EN_L2D_ECC1_TLB | \ 1627aec1d6eScindi AMD_BU_EN_L2D_ECC1_SNP | AMD_BU_EN_L2D_ECC1_CPB | \ 1637aec1d6eScindi AMD_BU_EN_L2D_ECCM_TLB | AMD_BU_EN_L2D_ECCM_SNP | \ 1647aec1d6eScindi AMD_BU_EN_L2D_ECCM_CPB | AMD_BU_EN_L2T_ECC1_SCR | \ 1657aec1d6eScindi AMD_BU_EN_L2T_ECCM_SCR) 1667aec1d6eScindi 1677aec1d6eScindi /* 1687aec1d6eScindi * Load/Store (LS) bank error-detection enabling bits and CTL register 1697aec1d6eScindi * initializer value. 1707aec1d6eScindi * 1717aec1d6eScindi * The Northbridge will handle Read Data errors. That's the only type of 1727aec1d6eScindi * error the LS unit can detect at present, so we won't be enabling any 1737aec1d6eScindi * LS detectors. 1747aec1d6eScindi */ 1757aec1d6eScindi 1767aec1d6eScindi #define AMD_LS_EN_S_RDE_S 0x00000001ULL 1777aec1d6eScindi #define AMD_LS_EN_S_RDE_L 0x00000002ULL 1787aec1d6eScindi 1798a40a695Sgavinm #define AMD_LS_CTL_INIT_CMN 0ULL 1808a40a695Sgavinm 1818a40a695Sgavinm /* 1828a40a695Sgavinm * NorthBridge (NB) MCi_MISC - DRAM Errors Threshold Register. 1838a40a695Sgavinm */ 1848a40a695Sgavinm #define AMD_NB_MISC_VALID (0x1ULL << 63) 1858a40a695Sgavinm #define AMD_NB_MISC_CTRP (0x1ULL << 62) 1868a40a695Sgavinm #define AMD_NB_MISC_LOCKED (0x1ULL << 61) 1878a40a695Sgavinm #define AMD_NB_MISC_CNTEN (0x1ULL << 51) 1888a40a695Sgavinm #define AMD_NB_MISC_INTTYPE (0x1ULL << 49) 1898a40a695Sgavinm #define AMD_NB_MISC_INTTYPE_MASK (0x3ULL << 49) 1908a40a695Sgavinm #define AMD_NB_MISC_OVRFLW (0x1ULL << 48) 1918a40a695Sgavinm #define AMD_NB_MISC_ERRCOUNT_MASK (0xfffULL << 32) 1927aec1d6eScindi 1937aec1d6eScindi /* 1947aec1d6eScindi * The Northbridge (NB) is configured using both the standard MCA CTL register 1957aec1d6eScindi * and a NB-specific configuration register (NB CFG). The AMD_NB_EN_* macros 1967aec1d6eScindi * are the detector enabling bits for the NB MCA CTL register. The 1977aec1d6eScindi * AMD_NB_CFG_* bits are for the NB CFG register. 1987aec1d6eScindi * 1997aec1d6eScindi * The CTL register can be initialized statically, but portions of the NB CFG 2007aec1d6eScindi * register must be initialized based on the current machine's configuration. 2017aec1d6eScindi * 2028a40a695Sgavinm * The MCA NB Control Register maps to MC4_CTL[31:0], but we initialize it 2038a40a695Sgavinm * via and MSR write of 64 bits so define all as ULL. 2047aec1d6eScindi * 2057aec1d6eScindi */ 2068a40a695Sgavinm #define AMD_NB_EN_CORRECC 0x00000001ULL 2078a40a695Sgavinm #define AMD_NB_EN_UNCORRECC 0x00000002ULL 2088a40a695Sgavinm #define AMD_NB_EN_CRCERR0 0x00000004ULL 2098a40a695Sgavinm #define AMD_NB_EN_CRCERR1 0x00000008ULL 2108a40a695Sgavinm #define AMD_NB_EN_CRCERR2 0x00000010ULL 2118a40a695Sgavinm #define AMD_NB_EN_SYNCPKT0 0x00000020ULL 2128a40a695Sgavinm #define AMD_NB_EN_SYNCPKT1 0x00000040ULL 2138a40a695Sgavinm #define AMD_NB_EN_SYNCPKT2 0x00000080ULL 2148a40a695Sgavinm #define AMD_NB_EN_MSTRABRT 0x00000100ULL 2158a40a695Sgavinm #define AMD_NB_EN_TGTABRT 0x00000200ULL 2168a40a695Sgavinm #define AMD_NB_EN_GARTTBLWK 0x00000400ULL 2178a40a695Sgavinm #define AMD_NB_EN_ATOMICRMW 0x00000800ULL 2188a40a695Sgavinm #define AMD_NB_EN_WCHDOGTMR 0x00001000ULL 2198a40a695Sgavinm #define AMD_NB_EN_DRAMPAR 0x00040000ULL /* revs F and G */ 2207aec1d6eScindi 2218a40a695Sgavinm #define AMD_NB_CTL_INIT_CMN /* Revs B to G; All but GARTTBLWK */ \ 2227aec1d6eScindi (AMD_NB_EN_CORRECC | AMD_NB_EN_UNCORRECC | \ 2237aec1d6eScindi AMD_NB_EN_CRCERR0 | AMD_NB_EN_CRCERR1 | AMD_NB_EN_CRCERR2 | \ 2247aec1d6eScindi AMD_NB_EN_SYNCPKT0 | AMD_NB_EN_SYNCPKT1 | AMD_NB_EN_SYNCPKT2 | \ 2257aec1d6eScindi AMD_NB_EN_MSTRABRT | AMD_NB_EN_TGTABRT | \ 2267aec1d6eScindi AMD_NB_EN_ATOMICRMW | AMD_NB_EN_WCHDOGTMR) 2277aec1d6eScindi 2288a40a695Sgavinm #define AMD_NB_CTL_INIT_REV_FG /* Additional bits for revs F and G */ \ 2298a40a695Sgavinm AMD_NB_EN_DRAMPAR 2308a40a695Sgavinm 2318a40a695Sgavinm /* 2328a40a695Sgavinm * NB MCA Configuration register 2338a40a695Sgavinm */ 2347aec1d6eScindi #define AMD_NB_CFG_CPUECCERREN 0x00000001 2357aec1d6eScindi #define AMD_NB_CFG_CPURDDATERREN 0x00000002 2367aec1d6eScindi #define AMD_NB_CFG_SYNCONUCECCEN 0x00000004 2377aec1d6eScindi #define AMD_NB_CFG_SYNCPKTGENDIS 0x00000008 2387aec1d6eScindi #define AMD_NB_CFG_SYNCPKTPROPDIS 0x00000010 2397aec1d6eScindi #define AMD_NB_CFG_IOMSTABORTDIS 0x00000020 2407aec1d6eScindi #define AMD_NB_CFG_CPUERRDIS 0x00000040 2417aec1d6eScindi #define AMD_NB_CFG_IOERRDIS 0x00000080 2427aec1d6eScindi #define AMD_NB_CFG_WDOGTMRDIS 0x00000100 2437aec1d6eScindi #define AMD_NB_CFG_SYNCONWDOGEN 0x00100000 2447aec1d6eScindi #define AMD_NB_CFG_SYNCONANYERREN 0x00200000 2457aec1d6eScindi #define AMD_NB_CFG_ECCEN 0x00400000 2467aec1d6eScindi #define AMD_NB_CFG_CHIPKILLECCEN 0x00800000 2477aec1d6eScindi #define AMD_NB_CFG_IORDDATERREN 0x01000000 2487aec1d6eScindi #define AMD_NB_CFG_DISPCICFGCPUERRRSP 0x02000000 2497aec1d6eScindi #define AMD_NB_CFG_NBMCATOMSTCPUEN 0x08000000 2508a40a695Sgavinm #define AMD_NB_CFG_DISTGTABTCPUERRRSP 0x10000000 2518a40a695Sgavinm #define AMD_NB_CFG_DISMSTABTCPUERRRSP 0x20000000 2528a40a695Sgavinm #define AMD_NB_CFG_SYNCONDRAMADRPARERREN 0x40000000 /* Revs F & G */ 2538a40a695Sgavinm 2548a40a695Sgavinm /* 2558a40a695Sgavinm * We do not initialize the NB config with an absolute value; instead we 2568a40a695Sgavinm * selectively add some bits and remove others. Note that 2578a40a695Sgavinm * AMD_NB_CFG_{ADD,REMOVE}_{CMN,REV_FG} below are not the whole 2588a40a695Sgavinm * story here - additional config is performed regarding the watchdog (see 2598a40a695Sgavinm * ao_mca.c for details). 2608a40a695Sgavinm */ 2618a40a695Sgavinm #define AMD_NB_CFG_ADD_CMN /* Revs B to G */ \ 2628a40a695Sgavinm (AMD_NB_CFG_DISPCICFGCPUERRRSP | AMD_NB_CFG_SYNCONUCECCEN | \ 2638a40a695Sgavinm AMD_NB_CFG_CPUECCERREN) 2648a40a695Sgavinm 2658a40a695Sgavinm #define AMD_NB_CFG_REMOVE_CMN /* Revs B to G */ \ 2668a40a695Sgavinm (AMD_NB_CFG_NBMCATOMSTCPUEN | \ 2678a40a695Sgavinm AMD_NB_CFG_IORDDATERREN | AMD_NB_CFG_SYNCONANYERREN | \ 2688a40a695Sgavinm AMD_NB_CFG_SYNCONWDOGEN | AMD_NB_CFG_IOERRDIS | \ 2698a40a695Sgavinm AMD_NB_CFG_IOMSTABORTDIS | AMD_NB_CFG_SYNCPKTPROPDIS | \ 2708a40a695Sgavinm AMD_NB_CFG_SYNCPKTGENDIS) 2718a40a695Sgavinm 2728a40a695Sgavinm #define AMD_NB_CFG_ADD_REV_FG /* Revs F and G */ \ 2738a40a695Sgavinm AMD_NB_CFG_SYNCONDRAMADRPARERREN 2748a40a695Sgavinm 2758a40a695Sgavinm #define AMD_NB_CFG_REMOVE_REV_FG 0x0 /* Revs F and G */ 2767aec1d6eScindi 2777aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_4095 0x00000000 2787aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_2047 0x00000200 2797aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_1023 0x00000400 2807aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_511 0x00000600 2817aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_255 0x00000800 2827aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_127 0x00000a00 2837aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_63 0x00000c00 2847aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_31 0x00000e00 2857aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_MASK 0x00000e00 2867aec1d6eScindi #define AMD_NB_CFG_WDOGTMRCNTSEL_SHIFT 9 2877aec1d6eScindi 2887aec1d6eScindi #define AMD_NB_CFG_WDOGTMRBASESEL_1MS 0x00000000 2897aec1d6eScindi #define AMD_NB_CFG_WDOGTMRBASESEL_1US 0x00001000 2907aec1d6eScindi #define AMD_NB_CFG_WDOGTMRBASESEL_5NS 0x00002000 2917aec1d6eScindi #define AMD_NB_CFG_WDOGTMRBASESEL_MASK 0x00003000 2927aec1d6eScindi #define AMD_NB_CFG_WDOGTMRBASESEL_SHIFT 12 2937aec1d6eScindi 2947aec1d6eScindi #define AMD_NB_CFG_LDTLINKSEL_MASK 0x0000c000 2957aec1d6eScindi #define AMD_NB_CFG_LDTLINKSEL_SHIFT 14 2967aec1d6eScindi 2977aec1d6eScindi #define AMD_NB_CFG_GENCRCERRBYTE0 0x00010000 2987aec1d6eScindi #define AMD_NB_CFG_GENCRCERRBYTE1 0x00020000 2997aec1d6eScindi 30020c794b3Sgavinm /* 30120c794b3Sgavinm * The AMD extended error code is just one nibble of the upper 16 bits 30220c794b3Sgavinm * of the bank status (the resy being used for syndrome etc). So we use 30320c794b3Sgavinm * AMD_EXT_ERRCODE to retrieve that extended error code, not the generic 30420c794b3Sgavinm * MCAX86_MSERRCODE. 30520c794b3Sgavinm */ 30620c794b3Sgavinm #define _AMD_ERREXT_MASK 0x00000000000f0000ULL 30720c794b3Sgavinm #define _AMD_ERREXT_SHIFT 16 30820c794b3Sgavinm #define AMD_EXT_ERRCODE(stat) \ 30920c794b3Sgavinm (((stat) & _AMD_ERREXT_MASK) >> _AMD_ERREXT_SHIFT) 31020c794b3Sgavinm #define AMD_EXT_MKERRCODE(errcode) \ 31120c794b3Sgavinm (((errcode) << _AMD_ERREXT_SHIFT) & _AMD_ERREXT_MASK) 3127aec1d6eScindi 31380ab886dSwesolows #define AMD_BANK_STAT_CECC 0x0000400000000000ULL 31480ab886dSwesolows #define AMD_BANK_STAT_UECC 0x0000200000000000ULL 31580ab886dSwesolows #define AMD_BANK_STAT_SCRUB 0x0000010000000000ULL 3167aec1d6eScindi 31780ab886dSwesolows /* syndrome[7:0] */ 31880ab886dSwesolows #define AMD_BANK_STAT_SYND_MASK 0x007f800000000000ULL 3197aec1d6eScindi #define AMD_BANK_STAT_SYND_SHIFT 47 3207aec1d6eScindi 3217aec1d6eScindi #define AMD_BANK_SYND(stat) \ 3227aec1d6eScindi (((stat) & AMD_BANK_STAT_SYND_MASK) >> AMD_BANK_STAT_SYND_SHIFT) 3237aec1d6eScindi #define AMD_BANK_MKSYND(synd) \ 3247aec1d6eScindi (((uint64_t)(synd) << AMD_BANK_STAT_SYND_SHIFT) & \ 3257aec1d6eScindi AMD_BANK_STAT_SYND_MASK) 3267aec1d6eScindi 3278a40a695Sgavinm #define AMD_NB_STAT_DRAMCHANNEL 0x0000020000000000ULL 3288a40a695Sgavinm #define AMD_NB_STAT_LDTLINK_MASK 0x0000007000000000ULL 3297aec1d6eScindi #define AMD_NB_STAT_LDTLINK_SHIFT 4 3308a40a695Sgavinm #define AMD_NB_STAT_ERRCPU1 0x0000000200000000ULL 3318a40a695Sgavinm #define AMD_NB_STAT_ERRCPU0 0x0000000100000000ULL 3328a40a695Sgavinm 3337aec1d6eScindi #define AMD_NB_STAT_CKSYND_MASK 0x00000000ff000000 /* syndrome[15:8] */ 3347aec1d6eScindi #define AMD_NB_STAT_CKSYND_SHIFT (24 - 8) /* shift [31:24] to [15:8] */ 3357aec1d6eScindi 3367aec1d6eScindi #define AMD_NB_STAT_CKSYND(stat) \ 3377aec1d6eScindi ((((stat) & AMD_NB_STAT_CKSYND_MASK) >> AMD_NB_STAT_CKSYND_SHIFT) | \ 3387aec1d6eScindi AMD_BANK_SYND((stat))) 3397aec1d6eScindi 3407aec1d6eScindi #define AMD_NB_STAT_MKCKSYND(synd) \ 3417aec1d6eScindi ((((uint64_t)(synd) << AMD_NB_STAT_CKSYND_SHIFT) & \ 3427aec1d6eScindi AMD_NB_STAT_CKSYND_MASK) | AMD_BANK_MKSYND(synd)) 3437aec1d6eScindi 3448a40a695Sgavinm #define AMD_ERREXT_MASK 0x00000000000f0000ULL 3457aec1d6eScindi #define AMD_ERREXT_SHIFT 16 3467aec1d6eScindi 3477aec1d6eScindi #define AMD_ERRCODE_TLB_BIT 4 3487aec1d6eScindi #define AMD_ERRCODE_MEM_BIT 8 3497aec1d6eScindi #define AMD_ERRCODE_BUS_BIT 11 3507aec1d6eScindi 3517aec1d6eScindi #define AMD_ERRCODE_TLB_MASK 0xfff0 3527aec1d6eScindi #define AMD_ERRCODE_MEM_MASK 0xff00 3537aec1d6eScindi #define AMD_ERRCODE_BUS_MASK 0xf800 3547aec1d6eScindi 35520c794b3Sgavinm #define AMD_ERRCODE_MKTLB(tt, ll) MCAX86_MKERRCODE_TLB(tt, ll) 35620c794b3Sgavinm #define AMD_ERRCODE_ISTLB(code) MCAX86_ERRCODE_ISTLB(code) 3577aec1d6eScindi 35820c794b3Sgavinm #define AMD_ERRCODE_MKMEM(r4, tt, ll) MCAX86_MKERRCODE_MEMHIER(r4, tt, ll) 35920c794b3Sgavinm #define AMD_ERRCODE_ISMEM(code) MCAX86_ERRCODE_ISMEMHIER(code) 3607aec1d6eScindi 3617aec1d6eScindi #define AMD_ERRCODE_MKBUS(pp, t, r4, ii, ll) \ 36220c794b3Sgavinm MCAX86_MKERRCODE_BUS_INTERCONNECT(pp, t, r4, ii, ll) 36320c794b3Sgavinm #define AMD_ERRCODE_ISBUS(code) MCAX86_ERRCODE_ISBUS_INTERCONNECT(code) 3647aec1d6eScindi 3657aec1d6eScindi #define AMD_NB_ADDRLO_MASK 0xfffffff8 3667aec1d6eScindi #define AMD_NB_ADDRHI_MASK 0x000000ff 3677aec1d6eScindi 3687aec1d6eScindi #define AMD_SYNDTYPE_ECC 0 3697aec1d6eScindi #define AMD_SYNDTYPE_CHIPKILL 1 3707aec1d6eScindi 3717aec1d6eScindi #define AMD_NB_SCRUBCTL_DRAM_MASK 0x0000001f 3727aec1d6eScindi #define AMD_NB_SCRUBCTL_DRAM_SHIFT 0 3737aec1d6eScindi #define AMD_NB_SCRUBCTL_L2_MASK 0x00001f00 3747aec1d6eScindi #define AMD_NB_SCRUBCTL_L2_SHIFT 8 3757aec1d6eScindi #define AMD_NB_SCRUBCTL_DC_MASK 0x001f0000 3767aec1d6eScindi #define AMD_NB_SCRUBCTL_DC_SHIFT 16 377*25f47677Sgavinm #define AMD_NB_SCRUBCTL_L3_MASK 0x1f000000 378*25f47677Sgavinm #define AMD_NB_SCRUBCTL_L3_SHIFT 24 3797aec1d6eScindi 3807aec1d6eScindi #define AMD_NB_SCRUBCTL_RATE_NONE 0 3817aec1d6eScindi #define AMD_NB_SCRUBCTL_RATE_MAX 0x16 3827aec1d6eScindi 3837aec1d6eScindi #define AMD_NB_SCRUBADDR_LO_MASK 0xffffffc0 38420c794b3Sgavinm #define AMD_NB_SCRUBADDR_LO_SHIFT 6 3857aec1d6eScindi #define AMD_NB_SCRUBADDR_LO_SCRUBREDIREN 0x1 3867aec1d6eScindi #define AMD_NB_SCRUBADDR_HI_MASK 0x000000ff 3877aec1d6eScindi 3887aec1d6eScindi #define AMD_NB_SCRUBADDR_MKLO(addr) \ 38920c794b3Sgavinm (((addr) & AMD_NB_SCRUBADDR_LO_MASK) >> AMD_NB_SCRUBADDR_LO_SHIFT) 3907aec1d6eScindi 3917aec1d6eScindi #define AMD_NB_SCRUBADDR_MKHI(addr) \ 3927aec1d6eScindi (((addr) >> 32) & AMD_NB_SCRUBADDR_HI_MASK) 3937aec1d6eScindi 394*25f47677Sgavinm #define AMD_NB_MKSCRUBCTL(l3, dc, l2, dr) ( \ 395*25f47677Sgavinm (((l3) << AMD_NB_SCRUBCTL_L3_SHIFT) & AMD_NB_SCRUBCTL_L3_MASK) | \ 3967aec1d6eScindi (((dc) << AMD_NB_SCRUBCTL_DC_SHIFT) & AMD_NB_SCRUBCTL_DC_MASK) | \ 3977aec1d6eScindi (((l2) << AMD_NB_SCRUBCTL_L2_SHIFT) & AMD_NB_SCRUBCTL_L2_MASK) | \ 3987aec1d6eScindi (((dr) << AMD_NB_SCRUBCTL_DRAM_SHIFT) & AMD_NB_SCRUBCTL_DRAM_MASK)) 3997aec1d6eScindi 4007aec1d6eScindi #ifdef __cplusplus 4017aec1d6eScindi } 4027aec1d6eScindi #endif 4037aec1d6eScindi 4047aec1d6eScindi #endif /* _SYS_MCA_AMD_H */ 405