|
Linux Kernel
3.7.1
|
#include <linux/module.h>#include <linux/ctype.h>#include <linux/init.h>#include <linux/pci.h>#include <linux/pci_ids.h>#include <linux/slab.h>#include <linux/mmzone.h>#include <linux/edac.h>#include <asm/msr.h>#include "edac_core.h"#include "mce_amd.h"Go to the source code of this file.
Data Structures | |
| struct | error_injection |
| struct | reg_pair |
| struct | dram_range |
| struct | chip_select |
| struct | amd64_pvt |
| struct | ecc_settings |
| struct | ecc_settings::flags |
| struct | low_ops |
| struct | amd64_family_type |
Macros | |
| #define | amd64_debug(fmt, arg...) edac_printk(KERN_DEBUG, "amd64", fmt, ##arg) |
| #define | amd64_info(fmt, arg...) edac_printk(KERN_INFO, "amd64", fmt, ##arg) |
| #define | amd64_notice(fmt, arg...) edac_printk(KERN_NOTICE, "amd64", fmt, ##arg) |
| #define | amd64_warn(fmt, arg...) edac_printk(KERN_WARNING, "amd64", fmt, ##arg) |
| #define | amd64_err(fmt, arg...) edac_printk(KERN_ERR, "amd64", fmt, ##arg) |
| #define | amd64_mc_warn(mci, fmt, arg...) edac_mc_chipset_printk(mci, KERN_WARNING, "amd64", fmt, ##arg) |
| #define | amd64_mc_err(mci, fmt, arg...) edac_mc_chipset_printk(mci, KERN_ERR, "amd64", fmt, ##arg) |
| #define | EDAC_AMD64_VERSION "3.4.0" |
| #define | EDAC_MOD_STR "amd64_edac" |
| #define | K8_REV_D 1 |
| #define | K8_REV_E 2 |
| #define | K8_REV_F 4 |
| #define | NUM_CHIPSELECTS 8 |
| #define | DRAM_RANGES 8 |
| #define | ON true |
| #define | OFF false |
| #define | GENMASK(lo, hi) (((1ULL << ((hi) - (lo) + 1)) - 1) << (lo)) |
| #define | PCI_DEVICE_ID_AMD_15H_NB_F1 0x1601 |
| #define | PCI_DEVICE_ID_AMD_15H_NB_F2 0x1602 |
| #define | DRAM_BASE_LO 0x40 |
| #define | DRAM_LIMIT_LO 0x44 |
| #define | dram_intlv_en(pvt, i) ((u8)((pvt->ranges[i].base.lo >> 8) & 0x7)) |
| #define | dram_rw(pvt, i) ((u8)(pvt->ranges[i].base.lo & 0x3)) |
| #define | dram_intlv_sel(pvt, i) ((u8)((pvt->ranges[i].lim.lo >> 8) & 0x7)) |
| #define | dram_dst_node(pvt, i) ((u8)(pvt->ranges[i].lim.lo & 0x7)) |
| #define | DHAR 0xf0 |
| #define | dhar_valid(pvt) ((pvt)->dhar & BIT(0)) |
| #define | dhar_mem_hoist_valid(pvt) ((pvt)->dhar & BIT(1)) |
| #define | dhar_base(pvt) ((pvt)->dhar & 0xff000000) |
| #define | k8_dhar_offset(pvt) (((pvt)->dhar & 0x0000ff00) << 16) |
| #define | f10_dhar_offset(pvt) (((pvt)->dhar & 0x0000ff80) << 16) |
| #define | DCT_CFG_SEL 0x10C |
| #define | DRAM_LOCAL_NODE_BASE 0x120 |
| #define | DRAM_LOCAL_NODE_LIM 0x124 |
| #define | DRAM_BASE_HI 0x140 |
| #define | DRAM_LIMIT_HI 0x144 |
| #define | DCSB0 0x40 |
| #define | DCSB1 0x140 |
| #define | DCSB_CS_ENABLE BIT(0) |
| #define | DCSM0 0x60 |
| #define | DCSM1 0x160 |
| #define | csrow_enabled(i, dct, pvt) ((pvt)->csels[(dct)].csbases[(i)] & DCSB_CS_ENABLE) |
| #define | DBAM0 0x80 |
| #define | DBAM1 0x180 |
| #define | DBAM_DIMM(i, reg) ((((reg) >> (4*i))) & 0xF) |
| #define | DBAM_MAX_VALUE 11 |
| #define | DCLR0 0x90 |
| #define | DCLR1 0x190 |
| #define | REVE_WIDTH_128 BIT(16) |
| #define | WIDTH_128 BIT(11) |
| #define | DCHR0 0x94 |
| #define | DCHR1 0x194 |
| #define | DDR3_MODE BIT(8) |
| #define | DCT_SEL_LO 0x110 |
| #define | dct_sel_baseaddr(pvt) ((pvt)->dct_sel_lo & 0xFFFFF800) |
| #define | dct_sel_interleave_addr(pvt) (((pvt)->dct_sel_lo >> 6) & 0x3) |
| #define | dct_high_range_enabled(pvt) ((pvt)->dct_sel_lo & BIT(0)) |
| #define | dct_interleave_enabled(pvt) ((pvt)->dct_sel_lo & BIT(2)) |
| #define | dct_ganging_enabled(pvt) ((boot_cpu_data.x86 == 0x10) && ((pvt)->dct_sel_lo & BIT(4))) |
| #define | dct_data_intlv_enabled(pvt) ((pvt)->dct_sel_lo & BIT(5)) |
| #define | dct_memory_cleared(pvt) ((pvt)->dct_sel_lo & BIT(10)) |
| #define | SWAP_INTLV_REG 0x10c |
| #define | DCT_SEL_HI 0x114 |
| #define | NBCTL 0x40 |
| #define | NBCFG 0x44 |
| #define | NBCFG_CHIPKILL BIT(23) |
| #define | NBCFG_ECC_ENABLE BIT(22) |
| #define | F10_NBSL_EXT_ERR_ECC 0x8 |
| #define | NBSL_PP_OBS 0x2 |
| #define | SCRCTRL 0x58 |
| #define | F10_ONLINE_SPARE 0xB0 |
| #define | online_spare_swap_done(pvt, c) (((pvt)->online_spare >> (1 + 2 * (c))) & 0x1) |
| #define | online_spare_bad_dramcs(pvt, c) (((pvt)->online_spare >> (4 + 4 * (c))) & 0x7) |
| #define | F10_NB_ARRAY_ADDR 0xB8 |
| #define | F10_NB_ARRAY_DRAM_ECC BIT(31) |
| #define | SET_NB_ARRAY_ADDRESS(section) (((section) & 0x3) << 1) |
| #define | F10_NB_ARRAY_DATA 0xBC |
| #define | SET_NB_DRAM_INJECTION_WRITE(word, bits) |
| #define | SET_NB_DRAM_INJECTION_READ(word, bits) |
| #define | NBCAP 0xE8 |
| #define | NBCAP_CHIPKILL BIT(4) |
| #define | NBCAP_SECDED BIT(3) |
| #define | NBCAP_DCT_DUAL BIT(0) |
| #define | EXT_NB_MCA_CFG 0x180 |
| #define | MSR_MCGCTL_NBE BIT(4) |
| #define | amd64_read_pci_cfg(pdev, offset, val) __amd64_read_pci_cfg_dword(pdev, offset, val, __func__) |
| #define | amd64_write_pci_cfg(pdev, offset, val) __amd64_write_pci_cfg_dword(pdev, offset, val, __func__) |
| #define | amd64_read_dct_pci_cfg(pvt, offset, val) pvt->ops->read_dct_pci_cfg(pvt, offset, val, __func__) |
| #define | to_mci(k) container_of(k, struct mem_ctl_info, dev) |
Enumerations | |
| enum | amd_families { K8_CPUS = 0, F10_CPUS, F15_CPUS, NUM_FAMILIES } |
Functions | |
| int | __amd64_write_pci_cfg_dword (struct pci_dev *pdev, int offset, u32 val, const char *func) |
| int | amd64_get_dram_hole_info (struct mem_ctl_info *mci, u64 *hole_base, u64 *hole_offset, u64 *hole_size) |
| #define amd64_debug | ( | fmt, | |
| arg... | |||
| ) | edac_printk(KERN_DEBUG, "amd64", fmt, ##arg) |
Definition at line 77 of file amd64_edac.h.
| #define amd64_err | ( | fmt, | |
| arg... | |||
| ) | edac_printk(KERN_ERR, "amd64", fmt, ##arg) |
Definition at line 89 of file amd64_edac.h.
| #define amd64_info | ( | fmt, | |
| arg... | |||
| ) | edac_printk(KERN_INFO, "amd64", fmt, ##arg) |
Definition at line 80 of file amd64_edac.h.
| #define amd64_mc_err | ( | mci, | |
| fmt, | |||
| arg... | |||
| ) | edac_mc_chipset_printk(mci, KERN_ERR, "amd64", fmt, ##arg) |
Definition at line 95 of file amd64_edac.h.
| #define amd64_mc_warn | ( | mci, | |
| fmt, | |||
| arg... | |||
| ) | edac_mc_chipset_printk(mci, KERN_WARNING, "amd64", fmt, ##arg) |
Definition at line 92 of file amd64_edac.h.
| #define amd64_notice | ( | fmt, | |
| arg... | |||
| ) | edac_printk(KERN_NOTICE, "amd64", fmt, ##arg) |
Definition at line 83 of file amd64_edac.h.
| #define amd64_read_dct_pci_cfg | ( | pvt, | |
| offset, | |||
| val | |||
| ) | pvt->ops->read_dct_pci_cfg(pvt, offset, val, __func__) |
Definition at line 471 of file amd64_edac.h.
| #define amd64_read_pci_cfg | ( | pdev, | |
| offset, | |||
| val | |||
| ) | __amd64_read_pci_cfg_dword(pdev, offset, val, __func__) |
Definition at line 465 of file amd64_edac.h.
| #define amd64_warn | ( | fmt, | |
| arg... | |||
| ) | edac_printk(KERN_WARNING, "amd64", fmt, ##arg) |
Definition at line 86 of file amd64_edac.h.
| #define amd64_write_pci_cfg | ( | pdev, | |
| offset, | |||
| val | |||
| ) | __amd64_write_pci_cfg_dword(pdev, offset, val, __func__) |
Definition at line 468 of file amd64_edac.h.
| #define csrow_enabled | ( | i, | |
| dct, | |||
| pvt | |||
| ) | ((pvt)->csels[(dct)].csbases[(i)] & DCSB_CS_ENABLE) |
Definition at line 216 of file amd64_edac.h.
| #define DBAM0 0x80 |
Definition at line 218 of file amd64_edac.h.
| #define DBAM1 0x180 |
Definition at line 219 of file amd64_edac.h.
Definition at line 222 of file amd64_edac.h.
| #define DBAM_MAX_VALUE 11 |
Definition at line 224 of file amd64_edac.h.
| #define DCHR0 0x94 |
Definition at line 231 of file amd64_edac.h.
| #define DCHR1 0x194 |
Definition at line 232 of file amd64_edac.h.
| #define DCLR0 0x90 |
Definition at line 226 of file amd64_edac.h.
| #define DCLR1 0x190 |
Definition at line 227 of file amd64_edac.h.
| #define DCSB0 0x40 |
Definition at line 209 of file amd64_edac.h.
| #define DCSB1 0x140 |
Definition at line 210 of file amd64_edac.h.
| #define DCSB_CS_ENABLE BIT(0) |
Definition at line 211 of file amd64_edac.h.
| #define DCSM0 0x60 |
Definition at line 213 of file amd64_edac.h.
| #define DCSM1 0x160 |
Definition at line 214 of file amd64_edac.h.
| #define DCT_CFG_SEL 0x10C |
Definition at line 197 of file amd64_edac.h.
| #define dct_data_intlv_enabled | ( | pvt | ) | ((pvt)->dct_sel_lo & BIT(5)) |
Definition at line 243 of file amd64_edac.h.
| #define dct_ganging_enabled | ( | pvt | ) | ((boot_cpu_data.x86 == 0x10) && ((pvt)->dct_sel_lo & BIT(4))) |
Definition at line 241 of file amd64_edac.h.
| #define dct_high_range_enabled | ( | pvt | ) | ((pvt)->dct_sel_lo & BIT(0)) |
Definition at line 238 of file amd64_edac.h.
| #define dct_interleave_enabled | ( | pvt | ) | ((pvt)->dct_sel_lo & BIT(2)) |
Definition at line 239 of file amd64_edac.h.
| #define dct_memory_cleared | ( | pvt | ) | ((pvt)->dct_sel_lo & BIT(10)) |
Definition at line 244 of file amd64_edac.h.
| #define dct_sel_baseaddr | ( | pvt | ) | ((pvt)->dct_sel_lo & 0xFFFFF800) |
Definition at line 236 of file amd64_edac.h.
| #define DCT_SEL_HI 0x114 |
Definition at line 248 of file amd64_edac.h.
| #define dct_sel_interleave_addr | ( | pvt | ) | (((pvt)->dct_sel_lo >> 6) & 0x3) |
Definition at line 237 of file amd64_edac.h.
| #define DCT_SEL_LO 0x110 |
Definition at line 235 of file amd64_edac.h.
| #define DDR3_MODE BIT(8) |
Definition at line 233 of file amd64_edac.h.
| #define DHAR 0xf0 |
Definition at line 188 of file amd64_edac.h.
| #define dhar_base | ( | pvt | ) | ((pvt)->dhar & 0xff000000) |
Definition at line 191 of file amd64_edac.h.
| #define dhar_mem_hoist_valid | ( | pvt | ) | ((pvt)->dhar & BIT(1)) |
Definition at line 190 of file amd64_edac.h.
| #define dhar_valid | ( | pvt | ) | ((pvt)->dhar & BIT(0)) |
Definition at line 189 of file amd64_edac.h.
| #define DRAM_BASE_HI 0x140 |
Definition at line 202 of file amd64_edac.h.
| #define DRAM_BASE_LO 0x40 |
Definition at line 180 of file amd64_edac.h.
Definition at line 186 of file amd64_edac.h.
Definition at line 183 of file amd64_edac.h.
Definition at line 185 of file amd64_edac.h.
| #define DRAM_LIMIT_HI 0x144 |
Definition at line 203 of file amd64_edac.h.
| #define DRAM_LIMIT_LO 0x44 |
Definition at line 181 of file amd64_edac.h.
| #define DRAM_LOCAL_NODE_BASE 0x120 |
Definition at line 199 of file amd64_edac.h.
| #define DRAM_LOCAL_NODE_LIM 0x124 |
Definition at line 200 of file amd64_edac.h.
| #define DRAM_RANGES 8 |
Definition at line 157 of file amd64_edac.h.
Definition at line 184 of file amd64_edac.h.
| #define EDAC_AMD64_VERSION "3.4.0" |
Definition at line 147 of file amd64_edac.h.
| #define EDAC_MOD_STR "amd64_edac" |
Definition at line 148 of file amd64_edac.h.
| #define EXT_NB_MCA_CFG 0x180 |
Definition at line 288 of file amd64_edac.h.
| #define f10_dhar_offset | ( | pvt | ) | (((pvt)->dhar & 0x0000ff80) << 16) |
Definition at line 195 of file amd64_edac.h.
| #define F10_NB_ARRAY_ADDR 0xB8 |
Definition at line 269 of file amd64_edac.h.
| #define F10_NB_ARRAY_DATA 0xBC |
Definition at line 275 of file amd64_edac.h.
| #define F10_NB_ARRAY_DRAM_ECC BIT(31) |
Definition at line 270 of file amd64_edac.h.
| #define F10_NBSL_EXT_ERR_ECC 0x8 |
Definition at line 260 of file amd64_edac.h.
| #define F10_ONLINE_SPARE 0xB0 |
Definition at line 265 of file amd64_edac.h.
Definition at line 168 of file amd64_edac.h.
| #define k8_dhar_offset | ( | pvt | ) | (((pvt)->dhar & 0x0000ff00) << 16) |
Definition at line 192 of file amd64_edac.h.
| #define K8_REV_D 1 |
Definition at line 151 of file amd64_edac.h.
| #define K8_REV_E 2 |
Definition at line 152 of file amd64_edac.h.
| #define K8_REV_F 4 |
Definition at line 153 of file amd64_edac.h.
| #define MSR_MCGCTL_NBE BIT(4) |
Definition at line 291 of file amd64_edac.h.
| #define NBCAP 0xE8 |
Definition at line 283 of file amd64_edac.h.
| #define NBCAP_CHIPKILL BIT(4) |
Definition at line 284 of file amd64_edac.h.
| #define NBCAP_DCT_DUAL BIT(0) |
Definition at line 286 of file amd64_edac.h.
| #define NBCAP_SECDED BIT(3) |
Definition at line 285 of file amd64_edac.h.
| #define NBCFG 0x44 |
Definition at line 255 of file amd64_edac.h.
| #define NBCFG_CHIPKILL BIT(23) |
Definition at line 256 of file amd64_edac.h.
| #define NBCFG_ECC_ENABLE BIT(22) |
Definition at line 257 of file amd64_edac.h.
| #define NBCTL 0x40 |
Definition at line 253 of file amd64_edac.h.
| #define NBSL_PP_OBS 0x2 |
Definition at line 261 of file amd64_edac.h.
| #define NUM_CHIPSELECTS 8 |
Definition at line 156 of file amd64_edac.h.
| #define OFF false |
Definition at line 160 of file amd64_edac.h.
| #define ON true |
Definition at line 159 of file amd64_edac.h.
Definition at line 267 of file amd64_edac.h.
Definition at line 266 of file amd64_edac.h.
| #define PCI_DEVICE_ID_AMD_15H_NB_F1 0x1601 |
Definition at line 173 of file amd64_edac.h.
| #define PCI_DEVICE_ID_AMD_15H_NB_F2 0x1602 |
Definition at line 174 of file amd64_edac.h.
| #define REVE_WIDTH_128 BIT(16) |
Definition at line 228 of file amd64_edac.h.
| #define SCRCTRL 0x58 |
Definition at line 263 of file amd64_edac.h.
Definition at line 273 of file amd64_edac.h.
Definition at line 279 of file amd64_edac.h.
Definition at line 276 of file amd64_edac.h.
| #define SWAP_INTLV_REG 0x10c |
Definition at line 246 of file amd64_edac.h.
| #define to_mci | ( | k | ) | container_of(k, struct mem_ctl_info, dev) |
Definition at line 477 of file amd64_edac.h.
| #define WIDTH_128 BIT(11) |
Definition at line 229 of file amd64_edac.h.
| enum amd_families |
Definition at line 299 of file amd64_edac.h.
Definition at line 76 of file amd64_edac.c.
| int amd64_get_dram_hole_info | ( | struct mem_ctl_info * | mci, |
| u64 * | hole_base, | ||
| u64 * | hole_offset, | ||
| u64 * | hole_size | ||
| ) |
Definition at line 422 of file amd64_edac.c.
1.8.2