mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
edac: Don't add __func__ or __FILE__ for debugf[0-9] msgs
The debug macro already adds that. Most of the work here was made by this small script: $f .=$_ while (<>); $f =~ s/(debugf[0-9]\s*\(\s*)__FILE__\s*": /\1"/g; $f =~ s/(debugf[0-9]\s*\(\s*)__FILE__\s*/\1/g; $f =~ s/(debugf[0-9]\s*\(\s*)__FILE__\s*"MC: /\1"/g; $f =~ s/(debugf[0-9]\s*\(\")\%s[\:\,\(\)]*\s*([^\"]*\s*[^\)]+)__func__\s*\,\s*/\1\2/g; $f =~ s/(debugf[0-9]\s*\(\")\%s[\:\,\(\)]*\s*([^\"]*\s*[^\)]+),\s*__func__\s*\)/\1\2)/g; $f =~ s/(debugf[0-9]\s*\(\"MC\:\s*)\%s[\:\,\(\)]*\s*([^\"]*\s*[^\)]+)__func__\s*\,\s*/\1\2/g; $f =~ s/(debugf[0-9]\s*\(\"MC\:\s*)\%s[\:\,\(\)]*\s*([^\"]*\s*[^\)]+),\s*__func__\s*\)/\1\2)/g; $f =~ s/\"MC\: \\n\"/"MC:\\n"/g; print $f; After running the script, manual cleanups were done to fix it the remaining places. While here, removed the __LINE__ on most places, as it doesn't actually give useful info on most places. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
2639c3ee29
commit
dd23cd6eb1
@ -180,7 +180,7 @@ static int amd76x_process_error_info(struct mem_ctl_info *mci,
|
|||||||
static void amd76x_check(struct mem_ctl_info *mci)
|
static void amd76x_check(struct mem_ctl_info *mci)
|
||||||
{
|
{
|
||||||
struct amd76x_error_info info;
|
struct amd76x_error_info info;
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
amd76x_get_error_info(mci, &info);
|
amd76x_get_error_info(mci, &info);
|
||||||
amd76x_process_error_info(mci, &info, 1);
|
amd76x_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -241,7 +241,7 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
u32 ems_mode;
|
u32 ems_mode;
|
||||||
struct amd76x_error_info discard;
|
struct amd76x_error_info discard;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
pci_read_config_dword(pdev, AMD76X_ECC_MODE_STATUS, &ems);
|
pci_read_config_dword(pdev, AMD76X_ECC_MODE_STATUS, &ems);
|
||||||
ems_mode = (ems >> 10) & 0x3;
|
ems_mode = (ems >> 10) & 0x3;
|
||||||
|
|
||||||
@ -256,7 +256,7 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("%s(): mci = %p\n", __func__, mci);
|
debugf0("mci = %p\n", mci);
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_RDDR;
|
mci->mtype_cap = MEM_FLAG_RDDR;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED;
|
||||||
@ -276,7 +276,7 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
* type of memory controller. The ID is therefore hardcoded to 0.
|
* type of memory controller. The ID is therefore hardcoded to 0.
|
||||||
*/
|
*/
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,7 +292,7 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@ -304,7 +304,7 @@ static int amd76x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
static int __devinit amd76x_init_one(struct pci_dev *pdev,
|
static int __devinit amd76x_init_one(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *ent)
|
const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* don't need to call pci_enable_device() */
|
/* don't need to call pci_enable_device() */
|
||||||
return amd76x_probe1(pdev, ent->driver_data);
|
return amd76x_probe1(pdev, ent->driver_data);
|
||||||
@ -322,7 +322,7 @@ static void __devexit amd76x_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (amd76x_pci)
|
if (amd76x_pci)
|
||||||
edac_pci_release_generic_ctl(amd76x_pci);
|
edac_pci_release_generic_ctl(amd76x_pci);
|
||||||
|
@ -316,13 +316,12 @@ static void get_total_mem(struct cpc925_mc_pdata *pdata)
|
|||||||
reg += aw;
|
reg += aw;
|
||||||
size = of_read_number(reg, sw);
|
size = of_read_number(reg, sw);
|
||||||
reg += sw;
|
reg += sw;
|
||||||
debugf1("%s: start 0x%lx, size 0x%lx\n", __func__,
|
debugf1("start 0x%lx, size 0x%lx\n", start, size);
|
||||||
start, size);
|
|
||||||
pdata->total_mem += size;
|
pdata->total_mem += size;
|
||||||
} while (reg < reg_end);
|
} while (reg < reg_end);
|
||||||
|
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
debugf0("%s: total_mem 0x%lx\n", __func__, pdata->total_mem);
|
debugf0("total_mem 0x%lx\n", pdata->total_mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cpc925_init_csrows(struct mem_ctl_info *mci)
|
static void cpc925_init_csrows(struct mem_ctl_info *mci)
|
||||||
@ -512,7 +511,7 @@ static void cpc925_mc_get_pfn(struct mem_ctl_info *mci, u32 mear,
|
|||||||
*offset = pa & (PAGE_SIZE - 1);
|
*offset = pa & (PAGE_SIZE - 1);
|
||||||
*pfn = pa >> PAGE_SHIFT;
|
*pfn = pa >> PAGE_SHIFT;
|
||||||
|
|
||||||
debugf0("%s: ECC physical address 0x%lx\n", __func__, pa);
|
debugf0("ECC physical address 0x%lx\n", pa);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cpc925_mc_find_channel(struct mem_ctl_info *mci, u16 syndrome)
|
static int cpc925_mc_find_channel(struct mem_ctl_info *mci, u16 syndrome)
|
||||||
@ -852,8 +851,8 @@ static void cpc925_add_edac_devices(void __iomem *vbase)
|
|||||||
goto err2;
|
goto err2;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf0("%s: Successfully added edac device for %s\n",
|
debugf0("Successfully added edac device for %s\n",
|
||||||
__func__, dev_info->ctl_name);
|
dev_info->ctl_name);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -884,8 +883,8 @@ static void cpc925_del_edac_devices(void)
|
|||||||
if (dev_info->exit)
|
if (dev_info->exit)
|
||||||
dev_info->exit(dev_info);
|
dev_info->exit(dev_info);
|
||||||
|
|
||||||
debugf0("%s: Successfully deleted edac device for %s\n",
|
debugf0("Successfully deleted edac device for %s\n",
|
||||||
__func__, dev_info->ctl_name);
|
dev_info->ctl_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -900,7 +899,7 @@ static int cpc925_get_sdram_scrub_rate(struct mem_ctl_info *mci)
|
|||||||
mscr = __raw_readl(pdata->vbase + REG_MSCR_OFFSET);
|
mscr = __raw_readl(pdata->vbase + REG_MSCR_OFFSET);
|
||||||
si = (mscr & MSCR_SI_MASK) >> MSCR_SI_SHIFT;
|
si = (mscr & MSCR_SI_MASK) >> MSCR_SI_SHIFT;
|
||||||
|
|
||||||
debugf0("%s, Mem Scrub Ctrl Register 0x%x\n", __func__, mscr);
|
debugf0("Mem Scrub Ctrl Register 0x%x\n", mscr);
|
||||||
|
|
||||||
if (((mscr & MSCR_SCRUB_MOD_MASK) != MSCR_BACKGR_SCRUB) ||
|
if (((mscr & MSCR_SCRUB_MOD_MASK) != MSCR_BACKGR_SCRUB) ||
|
||||||
(si == 0)) {
|
(si == 0)) {
|
||||||
@ -928,8 +927,7 @@ static int cpc925_mc_get_channels(void __iomem *vbase)
|
|||||||
((mbcr & MBCR_64BITBUS_MASK) == 0))
|
((mbcr & MBCR_64BITBUS_MASK) == 0))
|
||||||
dual = 1;
|
dual = 1;
|
||||||
|
|
||||||
debugf0("%s: %s channel\n", __func__,
|
debugf0("%s channel\n", (dual > 0) ? "Dual" : "Single");
|
||||||
(dual > 0) ? "Dual" : "Single");
|
|
||||||
|
|
||||||
return dual;
|
return dual;
|
||||||
}
|
}
|
||||||
@ -944,7 +942,7 @@ static int __devinit cpc925_probe(struct platform_device *pdev)
|
|||||||
struct resource *r;
|
struct resource *r;
|
||||||
int res = 0, nr_channels;
|
int res = 0, nr_channels;
|
||||||
|
|
||||||
debugf0("%s: %s platform device found!\n", __func__, pdev->name);
|
debugf0("%s platform device found!\n", pdev->name);
|
||||||
|
|
||||||
if (!devres_open_group(&pdev->dev, cpc925_probe, GFP_KERNEL)) {
|
if (!devres_open_group(&pdev->dev, cpc925_probe, GFP_KERNEL)) {
|
||||||
res = -ENOMEM;
|
res = -ENOMEM;
|
||||||
@ -1026,7 +1024,7 @@ static int __devinit cpc925_probe(struct platform_device *pdev)
|
|||||||
cpc925_add_edac_devices(vbase);
|
cpc925_add_edac_devices(vbase);
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf0("%s: success\n", __func__);
|
debugf0("success\n");
|
||||||
|
|
||||||
res = 0;
|
res = 0;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -309,7 +309,7 @@ static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci,
|
|||||||
u32 remap;
|
u32 remap;
|
||||||
struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
|
struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
if (page < pvt->tolm)
|
if (page < pvt->tolm)
|
||||||
return page;
|
return page;
|
||||||
@ -335,7 +335,7 @@ static void do_process_ce(struct mem_ctl_info *mci, u16 error_one,
|
|||||||
int i;
|
int i;
|
||||||
struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
|
struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
/* convert the addr to 4k page */
|
/* convert the addr to 4k page */
|
||||||
page = sec1_add >> (PAGE_SHIFT - 4);
|
page = sec1_add >> (PAGE_SHIFT - 4);
|
||||||
@ -394,7 +394,7 @@ static void do_process_ue(struct mem_ctl_info *mci, u16 error_one,
|
|||||||
int row;
|
int row;
|
||||||
struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
|
struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
if (error_one & 0x0202) {
|
if (error_one & 0x0202) {
|
||||||
error_2b = ded_add;
|
error_2b = ded_add;
|
||||||
@ -453,7 +453,7 @@ static inline void process_ue_no_info_wr(struct mem_ctl_info *mci,
|
|||||||
if (!handle_error)
|
if (!handle_error)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0,
|
edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0,
|
||||||
-1, -1, -1,
|
-1, -1, -1,
|
||||||
"e752x UE log memory write", "", NULL);
|
"e752x UE log memory write", "", NULL);
|
||||||
@ -982,7 +982,7 @@ static void e752x_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct e752x_error_info info;
|
struct e752x_error_info info;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
e752x_get_error_info(mci, &info);
|
e752x_get_error_info(mci, &info);
|
||||||
e752x_process_error_info(mci, &info, 1);
|
e752x_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -1102,7 +1102,7 @@ static void e752x_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
|
|||||||
pci_read_config_byte(pdev, E752X_DRB + index, &value);
|
pci_read_config_byte(pdev, E752X_DRB + index, &value);
|
||||||
/* convert a 128 or 64 MiB DRB to a page size. */
|
/* convert a 128 or 64 MiB DRB to a page size. */
|
||||||
cumul_size = value << (25 + drc_drbg - PAGE_SHIFT);
|
cumul_size = value << (25 + drc_drbg - PAGE_SHIFT);
|
||||||
debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index,
|
debugf3("(%d) cumul_size 0x%x\n", index,
|
||||||
cumul_size);
|
cumul_size);
|
||||||
if (cumul_size == last_cumul_size)
|
if (cumul_size == last_cumul_size)
|
||||||
continue; /* not populated */
|
continue; /* not populated */
|
||||||
@ -1270,7 +1270,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
int drc_chan; /* Number of channels 0=1chan,1=2chan */
|
int drc_chan; /* Number of channels 0=1chan,1=2chan */
|
||||||
struct e752x_error_info discard;
|
struct e752x_error_info discard;
|
||||||
|
|
||||||
debugf0("%s(): mci\n", __func__);
|
debugf0("mci\n");
|
||||||
debugf0("Starting Probe1\n");
|
debugf0("Starting Probe1\n");
|
||||||
|
|
||||||
/* check to see if device 0 function 1 is enabled; if it isn't, we
|
/* check to see if device 0 function 1 is enabled; if it isn't, we
|
||||||
@ -1301,7 +1301,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf3("%s(): init mci\n", __func__);
|
debugf3("init mci\n");
|
||||||
mci->mtype_cap = MEM_FLAG_RDDR;
|
mci->mtype_cap = MEM_FLAG_RDDR;
|
||||||
/* 3100 IMCH supports SECDEC only */
|
/* 3100 IMCH supports SECDEC only */
|
||||||
mci->edac_ctl_cap = (dev_idx == I3100) ? EDAC_FLAG_SECDED :
|
mci->edac_ctl_cap = (dev_idx == I3100) ? EDAC_FLAG_SECDED :
|
||||||
@ -1311,7 +1311,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
mci->mod_ver = E752X_REVISION;
|
mci->mod_ver = E752X_REVISION;
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
|
|
||||||
debugf3("%s(): init pvt\n", __func__);
|
debugf3("init pvt\n");
|
||||||
pvt = (struct e752x_pvt *)mci->pvt_info;
|
pvt = (struct e752x_pvt *)mci->pvt_info;
|
||||||
pvt->dev_info = &e752x_devs[dev_idx];
|
pvt->dev_info = &e752x_devs[dev_idx];
|
||||||
pvt->mc_symmetric = ((ddrcsr & 0x10) != 0);
|
pvt->mc_symmetric = ((ddrcsr & 0x10) != 0);
|
||||||
@ -1321,7 +1321,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("%s(): more mci init\n", __func__);
|
debugf3("more mci init\n");
|
||||||
mci->ctl_name = pvt->dev_info->ctl_name;
|
mci->ctl_name = pvt->dev_info->ctl_name;
|
||||||
mci->dev_name = pci_name(pdev);
|
mci->dev_name = pci_name(pdev);
|
||||||
mci->edac_check = e752x_check;
|
mci->edac_check = e752x_check;
|
||||||
@ -1343,7 +1343,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
mci->edac_cap = EDAC_FLAG_SECDED; /* the only mode supported */
|
mci->edac_cap = EDAC_FLAG_SECDED; /* the only mode supported */
|
||||||
else
|
else
|
||||||
mci->edac_cap |= EDAC_FLAG_NONE;
|
mci->edac_cap |= EDAC_FLAG_NONE;
|
||||||
debugf3("%s(): tolm, remapbase, remaplimit\n", __func__);
|
debugf3("tolm, remapbase, remaplimit\n");
|
||||||
|
|
||||||
/* load the top of low memory, remap base, and remap limit vars */
|
/* load the top of low memory, remap base, and remap limit vars */
|
||||||
pci_read_config_word(pdev, E752X_TOLM, &pci_data);
|
pci_read_config_word(pdev, E752X_TOLM, &pci_data);
|
||||||
@ -1360,7 +1360,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
* type of memory controller. The ID is therefore hardcoded to 0.
|
* type of memory controller. The ID is therefore hardcoded to 0.
|
||||||
*/
|
*/
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1378,7 +1378,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@ -1394,7 +1394,7 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
static int __devinit e752x_init_one(struct pci_dev *pdev,
|
static int __devinit e752x_init_one(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *ent)
|
const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* wake up and enable device */
|
/* wake up and enable device */
|
||||||
if (pci_enable_device(pdev) < 0)
|
if (pci_enable_device(pdev) < 0)
|
||||||
@ -1408,7 +1408,7 @@ static void __devexit e752x_remove_one(struct pci_dev *pdev)
|
|||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
struct e752x_pvt *pvt;
|
struct e752x_pvt *pvt;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (e752x_pci)
|
if (e752x_pci)
|
||||||
edac_pci_release_generic_ctl(e752x_pci);
|
edac_pci_release_generic_ctl(e752x_pci);
|
||||||
@ -1454,7 +1454,7 @@ static int __init e752x_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -1465,7 +1465,7 @@ static int __init e752x_init(void)
|
|||||||
|
|
||||||
static void __exit e752x_exit(void)
|
static void __exit e752x_exit(void)
|
||||||
{
|
{
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
pci_unregister_driver(&e752x_driver);
|
pci_unregister_driver(&e752x_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ static const struct e7xxx_dev_info e7xxx_devs[] = {
|
|||||||
/* FIXME - is this valid for both SECDED and S4ECD4ED? */
|
/* FIXME - is this valid for both SECDED and S4ECD4ED? */
|
||||||
static inline int e7xxx_find_channel(u16 syndrome)
|
static inline int e7xxx_find_channel(u16 syndrome)
|
||||||
{
|
{
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
if ((syndrome & 0xff00) == 0)
|
if ((syndrome & 0xff00) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -186,7 +186,7 @@ static unsigned long ctl_page_to_phys(struct mem_ctl_info *mci,
|
|||||||
u32 remap;
|
u32 remap;
|
||||||
struct e7xxx_pvt *pvt = (struct e7xxx_pvt *)mci->pvt_info;
|
struct e7xxx_pvt *pvt = (struct e7xxx_pvt *)mci->pvt_info;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
if ((page < pvt->tolm) ||
|
if ((page < pvt->tolm) ||
|
||||||
((page >= 0x100000) && (page < pvt->remapbase)))
|
((page >= 0x100000) && (page < pvt->remapbase)))
|
||||||
@ -208,7 +208,7 @@ static void process_ce(struct mem_ctl_info *mci, struct e7xxx_error_info *info)
|
|||||||
int row;
|
int row;
|
||||||
int channel;
|
int channel;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
/* read the error address */
|
/* read the error address */
|
||||||
error_1b = info->dram_celog_add;
|
error_1b = info->dram_celog_add;
|
||||||
/* FIXME - should use PAGE_SHIFT */
|
/* FIXME - should use PAGE_SHIFT */
|
||||||
@ -225,7 +225,7 @@ static void process_ce(struct mem_ctl_info *mci, struct e7xxx_error_info *info)
|
|||||||
|
|
||||||
static void process_ce_no_info(struct mem_ctl_info *mci)
|
static void process_ce_no_info(struct mem_ctl_info *mci)
|
||||||
{
|
{
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, -1, -1, -1,
|
edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, -1, -1, -1,
|
||||||
"e7xxx CE log register overflow", "", NULL);
|
"e7xxx CE log register overflow", "", NULL);
|
||||||
}
|
}
|
||||||
@ -235,7 +235,7 @@ static void process_ue(struct mem_ctl_info *mci, struct e7xxx_error_info *info)
|
|||||||
u32 error_2b, block_page;
|
u32 error_2b, block_page;
|
||||||
int row;
|
int row;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
/* read the error address */
|
/* read the error address */
|
||||||
error_2b = info->dram_uelog_add;
|
error_2b = info->dram_uelog_add;
|
||||||
/* FIXME - should use PAGE_SHIFT */
|
/* FIXME - should use PAGE_SHIFT */
|
||||||
@ -248,7 +248,7 @@ static void process_ue(struct mem_ctl_info *mci, struct e7xxx_error_info *info)
|
|||||||
|
|
||||||
static void process_ue_no_info(struct mem_ctl_info *mci)
|
static void process_ue_no_info(struct mem_ctl_info *mci)
|
||||||
{
|
{
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, -1, -1, -1,
|
edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, 0, 0, 0, -1, -1, -1,
|
||||||
"e7xxx UE log register overflow", "", NULL);
|
"e7xxx UE log register overflow", "", NULL);
|
||||||
@ -334,7 +334,7 @@ static void e7xxx_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct e7xxx_error_info info;
|
struct e7xxx_error_info info;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
e7xxx_get_error_info(mci, &info);
|
e7xxx_get_error_info(mci, &info);
|
||||||
e7xxx_process_error_info(mci, &info, 1);
|
e7xxx_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -383,7 +383,7 @@ static void e7xxx_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
|
|||||||
pci_read_config_byte(pdev, E7XXX_DRB + index, &value);
|
pci_read_config_byte(pdev, E7XXX_DRB + index, &value);
|
||||||
/* convert a 64 or 32 MiB DRB to a page size. */
|
/* convert a 64 or 32 MiB DRB to a page size. */
|
||||||
cumul_size = value << (25 + drc_drbg - PAGE_SHIFT);
|
cumul_size = value << (25 + drc_drbg - PAGE_SHIFT);
|
||||||
debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index,
|
debugf3("(%d) cumul_size 0x%x\n", index,
|
||||||
cumul_size);
|
cumul_size);
|
||||||
if (cumul_size == last_cumul_size)
|
if (cumul_size == last_cumul_size)
|
||||||
continue; /* not populated */
|
continue; /* not populated */
|
||||||
@ -430,7 +430,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
int drc_chan;
|
int drc_chan;
|
||||||
struct e7xxx_error_info discard;
|
struct e7xxx_error_info discard;
|
||||||
|
|
||||||
debugf0("%s(): mci\n", __func__);
|
debugf0("mci\n");
|
||||||
|
|
||||||
pci_read_config_dword(pdev, E7XXX_DRC, &drc);
|
pci_read_config_dword(pdev, E7XXX_DRC, &drc);
|
||||||
|
|
||||||
@ -453,7 +453,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf3("%s(): init mci\n", __func__);
|
debugf3("init mci\n");
|
||||||
mci->mtype_cap = MEM_FLAG_RDDR;
|
mci->mtype_cap = MEM_FLAG_RDDR;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED |
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED |
|
||||||
EDAC_FLAG_S4ECD4ED;
|
EDAC_FLAG_S4ECD4ED;
|
||||||
@ -461,7 +461,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
mci->mod_name = EDAC_MOD_STR;
|
mci->mod_name = EDAC_MOD_STR;
|
||||||
mci->mod_ver = E7XXX_REVISION;
|
mci->mod_ver = E7XXX_REVISION;
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
debugf3("%s(): init pvt\n", __func__);
|
debugf3("init pvt\n");
|
||||||
pvt = (struct e7xxx_pvt *)mci->pvt_info;
|
pvt = (struct e7xxx_pvt *)mci->pvt_info;
|
||||||
pvt->dev_info = &e7xxx_devs[dev_idx];
|
pvt->dev_info = &e7xxx_devs[dev_idx];
|
||||||
pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL,
|
pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL,
|
||||||
@ -474,14 +474,14 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
goto fail0;
|
goto fail0;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("%s(): more mci init\n", __func__);
|
debugf3("more mci init\n");
|
||||||
mci->ctl_name = pvt->dev_info->ctl_name;
|
mci->ctl_name = pvt->dev_info->ctl_name;
|
||||||
mci->dev_name = pci_name(pdev);
|
mci->dev_name = pci_name(pdev);
|
||||||
mci->edac_check = e7xxx_check;
|
mci->edac_check = e7xxx_check;
|
||||||
mci->ctl_page_to_phys = ctl_page_to_phys;
|
mci->ctl_page_to_phys = ctl_page_to_phys;
|
||||||
e7xxx_init_csrows(mci, pdev, dev_idx, drc);
|
e7xxx_init_csrows(mci, pdev, dev_idx, drc);
|
||||||
mci->edac_cap |= EDAC_FLAG_NONE;
|
mci->edac_cap |= EDAC_FLAG_NONE;
|
||||||
debugf3("%s(): tolm, remapbase, remaplimit\n", __func__);
|
debugf3("tolm, remapbase, remaplimit\n");
|
||||||
/* load the top of low memory, remap base, and remap limit vars */
|
/* load the top of low memory, remap base, and remap limit vars */
|
||||||
pci_read_config_word(pdev, E7XXX_TOLM, &pci_data);
|
pci_read_config_word(pdev, E7XXX_TOLM, &pci_data);
|
||||||
pvt->tolm = ((u32) pci_data) << 4;
|
pvt->tolm = ((u32) pci_data) << 4;
|
||||||
@ -500,7 +500,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
* type of memory controller. The ID is therefore hardcoded to 0.
|
* type of memory controller. The ID is therefore hardcoded to 0.
|
||||||
*/
|
*/
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail1;
|
goto fail1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -516,7 +516,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail1:
|
fail1:
|
||||||
@ -532,7 +532,7 @@ static int e7xxx_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
static int __devinit e7xxx_init_one(struct pci_dev *pdev,
|
static int __devinit e7xxx_init_one(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *ent)
|
const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* wake up and enable device */
|
/* wake up and enable device */
|
||||||
return pci_enable_device(pdev) ?
|
return pci_enable_device(pdev) ?
|
||||||
@ -544,7 +544,7 @@ static void __devexit e7xxx_remove_one(struct pci_dev *pdev)
|
|||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
struct e7xxx_pvt *pvt;
|
struct e7xxx_pvt *pvt;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (e7xxx_pci)
|
if (e7xxx_pci)
|
||||||
edac_pci_release_generic_ctl(e7xxx_pci);
|
edac_pci_release_generic_ctl(e7xxx_pci);
|
||||||
|
@ -82,8 +82,8 @@ struct edac_device_ctl_info *edac_device_alloc_ctl_info(
|
|||||||
void *pvt, *p;
|
void *pvt, *p;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
debugf4("%s() instances=%d blocks=%d\n",
|
debugf4("instances=%d blocks=%d\n",
|
||||||
__func__, nr_instances, nr_blocks);
|
nr_instances, nr_blocks);
|
||||||
|
|
||||||
/* Calculate the size of memory we need to allocate AND
|
/* Calculate the size of memory we need to allocate AND
|
||||||
* determine the offsets of the various item arrays
|
* determine the offsets of the various item arrays
|
||||||
@ -156,8 +156,8 @@ struct edac_device_ctl_info *edac_device_alloc_ctl_info(
|
|||||||
/* Name of this edac device */
|
/* Name of this edac device */
|
||||||
snprintf(dev_ctl->name,sizeof(dev_ctl->name),"%s",edac_device_name);
|
snprintf(dev_ctl->name,sizeof(dev_ctl->name),"%s",edac_device_name);
|
||||||
|
|
||||||
debugf4("%s() edac_dev=%p next after end=%p\n",
|
debugf4("edac_dev=%p next after end=%p\n",
|
||||||
__func__, dev_ctl, pvt + sz_private );
|
dev_ctl, pvt + sz_private );
|
||||||
|
|
||||||
/* Initialize every Instance */
|
/* Initialize every Instance */
|
||||||
for (instance = 0; instance < nr_instances; instance++) {
|
for (instance = 0; instance < nr_instances; instance++) {
|
||||||
@ -178,9 +178,9 @@ struct edac_device_ctl_info *edac_device_alloc_ctl_info(
|
|||||||
snprintf(blk->name, sizeof(blk->name),
|
snprintf(blk->name, sizeof(blk->name),
|
||||||
"%s%d", edac_block_name, block+offset_value);
|
"%s%d", edac_block_name, block+offset_value);
|
||||||
|
|
||||||
debugf4("%s() instance=%d inst_p=%p block=#%d "
|
debugf4("instance=%d inst_p=%p block=#%d "
|
||||||
"block_p=%p name='%s'\n",
|
"block_p=%p name='%s'\n",
|
||||||
__func__, instance, inst, block,
|
instance, inst, block,
|
||||||
blk, blk->name);
|
blk, blk->name);
|
||||||
|
|
||||||
/* if there are NO attributes OR no attribute pointer
|
/* if there are NO attributes OR no attribute pointer
|
||||||
@ -194,8 +194,8 @@ struct edac_device_ctl_info *edac_device_alloc_ctl_info(
|
|||||||
attrib_p = &dev_attrib[block*nr_instances*nr_attrib];
|
attrib_p = &dev_attrib[block*nr_instances*nr_attrib];
|
||||||
blk->block_attributes = attrib_p;
|
blk->block_attributes = attrib_p;
|
||||||
|
|
||||||
debugf4("%s() THIS BLOCK_ATTRIB=%p\n",
|
debugf4("THIS BLOCK_ATTRIB=%p\n",
|
||||||
__func__, blk->block_attributes);
|
blk->block_attributes);
|
||||||
|
|
||||||
/* Initialize every user specified attribute in this
|
/* Initialize every user specified attribute in this
|
||||||
* block with the data the caller passed in
|
* block with the data the caller passed in
|
||||||
@ -214,9 +214,9 @@ struct edac_device_ctl_info *edac_device_alloc_ctl_info(
|
|||||||
|
|
||||||
attrib->block = blk; /* up link */
|
attrib->block = blk; /* up link */
|
||||||
|
|
||||||
debugf4("%s() alloc-attrib=%p attrib_name='%s' "
|
debugf4("alloc-attrib=%p attrib_name='%s' "
|
||||||
"attrib-spec=%p spec-name=%s\n",
|
"attrib-spec=%p spec-name=%s\n",
|
||||||
__func__, attrib, attrib->attr.name,
|
attrib, attrib->attr.name,
|
||||||
&attrib_spec[attr],
|
&attrib_spec[attr],
|
||||||
attrib_spec[attr].attr.name
|
attrib_spec[attr].attr.name
|
||||||
);
|
);
|
||||||
@ -273,7 +273,7 @@ static struct edac_device_ctl_info *find_edac_device_by_dev(struct device *dev)
|
|||||||
struct edac_device_ctl_info *edac_dev;
|
struct edac_device_ctl_info *edac_dev;
|
||||||
struct list_head *item;
|
struct list_head *item;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
list_for_each(item, &edac_device_list) {
|
list_for_each(item, &edac_device_list) {
|
||||||
edac_dev = list_entry(item, struct edac_device_ctl_info, link);
|
edac_dev = list_entry(item, struct edac_device_ctl_info, link);
|
||||||
@ -408,7 +408,7 @@ static void edac_device_workq_function(struct work_struct *work_req)
|
|||||||
void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
|
void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
|
||||||
unsigned msec)
|
unsigned msec)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* take the arg 'msec' and set it into the control structure
|
/* take the arg 'msec' and set it into the control structure
|
||||||
* to used in the time period calculation
|
* to used in the time period calculation
|
||||||
@ -496,7 +496,7 @@ EXPORT_SYMBOL_GPL(edac_device_alloc_index);
|
|||||||
*/
|
*/
|
||||||
int edac_device_add_device(struct edac_device_ctl_info *edac_dev)
|
int edac_device_add_device(struct edac_device_ctl_info *edac_dev)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
#ifdef CONFIG_EDAC_DEBUG
|
#ifdef CONFIG_EDAC_DEBUG
|
||||||
if (edac_debug_level >= 3)
|
if (edac_debug_level >= 3)
|
||||||
@ -570,7 +570,7 @@ struct edac_device_ctl_info *edac_device_del_device(struct device *dev)
|
|||||||
{
|
{
|
||||||
struct edac_device_ctl_info *edac_dev;
|
struct edac_device_ctl_info *edac_dev;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
mutex_lock(&device_ctls_mutex);
|
mutex_lock(&device_ctls_mutex);
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ static void edac_device_ctrl_master_release(struct kobject *kobj)
|
|||||||
{
|
{
|
||||||
struct edac_device_ctl_info *edac_dev = to_edacdev(kobj);
|
struct edac_device_ctl_info *edac_dev = to_edacdev(kobj);
|
||||||
|
|
||||||
debugf4("%s() control index=%d\n", __func__, edac_dev->dev_idx);
|
debugf4("control index=%d\n", edac_dev->dev_idx);
|
||||||
|
|
||||||
/* decrement the EDAC CORE module ref count */
|
/* decrement the EDAC CORE module ref count */
|
||||||
module_put(edac_dev->owner);
|
module_put(edac_dev->owner);
|
||||||
@ -233,12 +233,12 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
|
|||||||
struct bus_type *edac_subsys;
|
struct bus_type *edac_subsys;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
/* get the /sys/devices/system/edac reference */
|
/* get the /sys/devices/system/edac reference */
|
||||||
edac_subsys = edac_get_sysfs_subsys();
|
edac_subsys = edac_get_sysfs_subsys();
|
||||||
if (edac_subsys == NULL) {
|
if (edac_subsys == NULL) {
|
||||||
debugf1("%s() no edac_subsys error\n", __func__);
|
debugf1("no edac_subsys error\n");
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
@ -264,8 +264,8 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
|
|||||||
&edac_subsys->dev_root->kobj,
|
&edac_subsys->dev_root->kobj,
|
||||||
"%s", edac_dev->name);
|
"%s", edac_dev->name);
|
||||||
if (err) {
|
if (err) {
|
||||||
debugf1("%s()Failed to register '.../edac/%s'\n",
|
debugf1("Failed to register '.../edac/%s'\n",
|
||||||
__func__, edac_dev->name);
|
edac_dev->name);
|
||||||
goto err_kobj_reg;
|
goto err_kobj_reg;
|
||||||
}
|
}
|
||||||
kobject_uevent(&edac_dev->kobj, KOBJ_ADD);
|
kobject_uevent(&edac_dev->kobj, KOBJ_ADD);
|
||||||
@ -274,8 +274,8 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
|
|||||||
* edac_device_unregister_sysfs_main_kobj() must be used
|
* edac_device_unregister_sysfs_main_kobj() must be used
|
||||||
*/
|
*/
|
||||||
|
|
||||||
debugf4("%s() Registered '.../edac/%s' kobject\n",
|
debugf4("Registered '.../edac/%s' kobject\n",
|
||||||
__func__, edac_dev->name);
|
edac_dev->name);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -296,9 +296,9 @@ int edac_device_register_sysfs_main_kobj(struct edac_device_ctl_info *edac_dev)
|
|||||||
*/
|
*/
|
||||||
void edac_device_unregister_sysfs_main_kobj(struct edac_device_ctl_info *dev)
|
void edac_device_unregister_sysfs_main_kobj(struct edac_device_ctl_info *dev)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
debugf4("%s() name of kobject is: %s\n",
|
debugf4("name of kobject is: %s\n",
|
||||||
__func__, kobject_name(&dev->kobj));
|
kobject_name(&dev->kobj));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unregister the edac device's kobject and
|
* Unregister the edac device's kobject and
|
||||||
@ -336,7 +336,7 @@ static void edac_device_ctrl_instance_release(struct kobject *kobj)
|
|||||||
{
|
{
|
||||||
struct edac_device_instance *instance;
|
struct edac_device_instance *instance;
|
||||||
|
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
/* map from this kobj to the main control struct
|
/* map from this kobj to the main control struct
|
||||||
* and then dec the main kobj count
|
* and then dec the main kobj count
|
||||||
@ -442,7 +442,7 @@ static void edac_device_ctrl_block_release(struct kobject *kobj)
|
|||||||
{
|
{
|
||||||
struct edac_device_block *block;
|
struct edac_device_block *block;
|
||||||
|
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
/* get the container of the kobj */
|
/* get the container of the kobj */
|
||||||
block = to_block(kobj);
|
block = to_block(kobj);
|
||||||
@ -524,10 +524,10 @@ static int edac_device_create_block(struct edac_device_ctl_info *edac_dev,
|
|||||||
struct edac_dev_sysfs_block_attribute *sysfs_attrib;
|
struct edac_dev_sysfs_block_attribute *sysfs_attrib;
|
||||||
struct kobject *main_kobj;
|
struct kobject *main_kobj;
|
||||||
|
|
||||||
debugf4("%s() Instance '%s' inst_p=%p block '%s' block_p=%p\n",
|
debugf4("Instance '%s' inst_p=%p block '%s' block_p=%p\n",
|
||||||
__func__, instance->name, instance, block->name, block);
|
instance->name, instance, block->name, block);
|
||||||
debugf4("%s() block kobj=%p block kobj->parent=%p\n",
|
debugf4("block kobj=%p block kobj->parent=%p\n",
|
||||||
__func__, &block->kobj, &block->kobj.parent);
|
&block->kobj, &block->kobj.parent);
|
||||||
|
|
||||||
/* init this block's kobject */
|
/* init this block's kobject */
|
||||||
memset(&block->kobj, 0, sizeof(struct kobject));
|
memset(&block->kobj, 0, sizeof(struct kobject));
|
||||||
@ -546,8 +546,8 @@ static int edac_device_create_block(struct edac_device_ctl_info *edac_dev,
|
|||||||
&instance->kobj,
|
&instance->kobj,
|
||||||
"%s", block->name);
|
"%s", block->name);
|
||||||
if (err) {
|
if (err) {
|
||||||
debugf1("%s() Failed to register instance '%s'\n",
|
debugf1("Failed to register instance '%s'\n",
|
||||||
__func__, block->name);
|
block->name);
|
||||||
kobject_put(main_kobj);
|
kobject_put(main_kobj);
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
@ -560,9 +560,8 @@ static int edac_device_create_block(struct edac_device_ctl_info *edac_dev,
|
|||||||
if (sysfs_attrib && block->nr_attribs) {
|
if (sysfs_attrib && block->nr_attribs) {
|
||||||
for (i = 0; i < block->nr_attribs; i++, sysfs_attrib++) {
|
for (i = 0; i < block->nr_attribs; i++, sysfs_attrib++) {
|
||||||
|
|
||||||
debugf4("%s() creating block attrib='%s' "
|
debugf4("creating block attrib='%s' "
|
||||||
"attrib->%p to kobj=%p\n",
|
"attrib->%p to kobj=%p\n",
|
||||||
__func__,
|
|
||||||
sysfs_attrib->attr.name,
|
sysfs_attrib->attr.name,
|
||||||
sysfs_attrib, &block->kobj);
|
sysfs_attrib, &block->kobj);
|
||||||
|
|
||||||
@ -647,14 +646,14 @@ static int edac_device_create_instance(struct edac_device_ctl_info *edac_dev,
|
|||||||
err = kobject_init_and_add(&instance->kobj, &ktype_instance_ctrl,
|
err = kobject_init_and_add(&instance->kobj, &ktype_instance_ctrl,
|
||||||
&edac_dev->kobj, "%s", instance->name);
|
&edac_dev->kobj, "%s", instance->name);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
debugf2("%s() Failed to register instance '%s'\n",
|
debugf2("Failed to register instance '%s'\n",
|
||||||
__func__, instance->name);
|
instance->name);
|
||||||
kobject_put(main_kobj);
|
kobject_put(main_kobj);
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf4("%s() now register '%d' blocks for instance %d\n",
|
debugf4("now register '%d' blocks for instance %d\n",
|
||||||
__func__, instance->nr_blocks, idx);
|
instance->nr_blocks, idx);
|
||||||
|
|
||||||
/* register all blocks of this instance */
|
/* register all blocks of this instance */
|
||||||
for (i = 0; i < instance->nr_blocks; i++) {
|
for (i = 0; i < instance->nr_blocks; i++) {
|
||||||
@ -670,8 +669,8 @@ static int edac_device_create_instance(struct edac_device_ctl_info *edac_dev,
|
|||||||
}
|
}
|
||||||
kobject_uevent(&instance->kobj, KOBJ_ADD);
|
kobject_uevent(&instance->kobj, KOBJ_ADD);
|
||||||
|
|
||||||
debugf4("%s() Registered instance %d '%s' kobject\n",
|
debugf4("Registered instance %d '%s' kobject\n",
|
||||||
__func__, idx, instance->name);
|
idx, instance->name);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -715,7 +714,7 @@ static int edac_device_create_instances(struct edac_device_ctl_info *edac_dev)
|
|||||||
int i, j;
|
int i, j;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* iterate over creation of the instances */
|
/* iterate over creation of the instances */
|
||||||
for (i = 0; i < edac_dev->nr_instances; i++) {
|
for (i = 0; i < edac_dev->nr_instances; i++) {
|
||||||
@ -817,12 +816,12 @@ int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev)
|
|||||||
int err;
|
int err;
|
||||||
struct kobject *edac_kobj = &edac_dev->kobj;
|
struct kobject *edac_kobj = &edac_dev->kobj;
|
||||||
|
|
||||||
debugf0("%s() idx=%d\n", __func__, edac_dev->dev_idx);
|
debugf0("idx=%d\n", edac_dev->dev_idx);
|
||||||
|
|
||||||
/* go create any main attributes callers wants */
|
/* go create any main attributes callers wants */
|
||||||
err = edac_device_add_main_sysfs_attributes(edac_dev);
|
err = edac_device_add_main_sysfs_attributes(edac_dev);
|
||||||
if (err) {
|
if (err) {
|
||||||
debugf0("%s() failed to add sysfs attribs\n", __func__);
|
debugf0("failed to add sysfs attribs\n");
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -832,8 +831,8 @@ int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev)
|
|||||||
err = sysfs_create_link(edac_kobj,
|
err = sysfs_create_link(edac_kobj,
|
||||||
&edac_dev->dev->kobj, EDAC_DEVICE_SYMLINK);
|
&edac_dev->dev->kobj, EDAC_DEVICE_SYMLINK);
|
||||||
if (err) {
|
if (err) {
|
||||||
debugf0("%s() sysfs_create_link() returned err= %d\n",
|
debugf0("sysfs_create_link() returned err= %d\n",
|
||||||
__func__, err);
|
err);
|
||||||
goto err_remove_main_attribs;
|
goto err_remove_main_attribs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -843,14 +842,14 @@ int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev)
|
|||||||
*/
|
*/
|
||||||
err = edac_device_create_instances(edac_dev);
|
err = edac_device_create_instances(edac_dev);
|
||||||
if (err) {
|
if (err) {
|
||||||
debugf0("%s() edac_device_create_instances() "
|
debugf0("edac_device_create_instances() "
|
||||||
"returned err= %d\n", __func__, err);
|
"returned err= %d\n", err);
|
||||||
goto err_remove_link;
|
goto err_remove_link;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
debugf4("%s() create-instances done, idx=%d\n",
|
debugf4("create-instances done, idx=%d\n",
|
||||||
__func__, edac_dev->dev_idx);
|
edac_dev->dev_idx);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -873,7 +872,7 @@ int edac_device_create_sysfs(struct edac_device_ctl_info *edac_dev)
|
|||||||
*/
|
*/
|
||||||
void edac_device_remove_sysfs(struct edac_device_ctl_info *edac_dev)
|
void edac_device_remove_sysfs(struct edac_device_ctl_info *edac_dev)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* remove any main attributes for this device */
|
/* remove any main attributes for this device */
|
||||||
edac_device_remove_main_sysfs_attributes(edac_dev);
|
edac_device_remove_main_sysfs_attributes(edac_dev);
|
||||||
|
@ -246,18 +246,18 @@ struct mem_ctl_info *edac_mc_alloc(unsigned mc_num,
|
|||||||
layer = edac_align_ptr(&ptr, sizeof(*layer), n_layers);
|
layer = edac_align_ptr(&ptr, sizeof(*layer), n_layers);
|
||||||
for (i = 0; i < n_layers; i++) {
|
for (i = 0; i < n_layers; i++) {
|
||||||
count *= layers[i].size;
|
count *= layers[i].size;
|
||||||
debugf4("%s: errcount layer %d size %d\n", __func__, i, count);
|
debugf4("errcount layer %d size %d\n", i, count);
|
||||||
ce_per_layer[i] = edac_align_ptr(&ptr, sizeof(u32), count);
|
ce_per_layer[i] = edac_align_ptr(&ptr, sizeof(u32), count);
|
||||||
ue_per_layer[i] = edac_align_ptr(&ptr, sizeof(u32), count);
|
ue_per_layer[i] = edac_align_ptr(&ptr, sizeof(u32), count);
|
||||||
tot_errcount += 2 * count;
|
tot_errcount += 2 * count;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf4("%s: allocating %d error counters\n", __func__, tot_errcount);
|
debugf4("allocating %d error counters\n", tot_errcount);
|
||||||
pvt = edac_align_ptr(&ptr, sz_pvt, 1);
|
pvt = edac_align_ptr(&ptr, sz_pvt, 1);
|
||||||
size = ((unsigned long)pvt) + sz_pvt;
|
size = ((unsigned long)pvt) + sz_pvt;
|
||||||
|
|
||||||
debugf1("%s(): allocating %u bytes for mci data (%d %s, %d csrows/channels)\n",
|
debugf1("allocating %u bytes for mci data (%d %s, %d csrows/channels)\n",
|
||||||
__func__, size,
|
size,
|
||||||
tot_dimms,
|
tot_dimms,
|
||||||
per_rank ? "ranks" : "dimms",
|
per_rank ? "ranks" : "dimms",
|
||||||
tot_csrows * tot_channels);
|
tot_csrows * tot_channels);
|
||||||
@ -326,7 +326,7 @@ struct mem_ctl_info *edac_mc_alloc(unsigned mc_num,
|
|||||||
memset(&pos, 0, sizeof(pos));
|
memset(&pos, 0, sizeof(pos));
|
||||||
row = 0;
|
row = 0;
|
||||||
chn = 0;
|
chn = 0;
|
||||||
debugf4("%s: initializing %d %s\n", __func__, tot_dimms,
|
debugf4("initializing %d %s\n", tot_dimms,
|
||||||
per_rank ? "ranks" : "dimms");
|
per_rank ? "ranks" : "dimms");
|
||||||
for (i = 0; i < tot_dimms; i++) {
|
for (i = 0; i < tot_dimms; i++) {
|
||||||
chan = mci->csrows[row]->channels[chn];
|
chan = mci->csrows[row]->channels[chn];
|
||||||
@ -340,8 +340,8 @@ struct mem_ctl_info *edac_mc_alloc(unsigned mc_num,
|
|||||||
mci->dimms[off] = dimm;
|
mci->dimms[off] = dimm;
|
||||||
dimm->mci = mci;
|
dimm->mci = mci;
|
||||||
|
|
||||||
debugf2("%s: %d: %s%i (%d:%d:%d): row %d, chan %d\n", __func__,
|
debugf2("%d: %s%i (%d:%d:%d): row %d, chan %d\n", i,
|
||||||
i, per_rank ? "rank" : "dimm", off,
|
per_rank ? "rank" : "dimm", off,
|
||||||
pos[0], pos[1], pos[2], row, chn);
|
pos[0], pos[1], pos[2], row, chn);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -427,7 +427,7 @@ EXPORT_SYMBOL_GPL(edac_mc_alloc);
|
|||||||
*/
|
*/
|
||||||
void edac_mc_free(struct mem_ctl_info *mci)
|
void edac_mc_free(struct mem_ctl_info *mci)
|
||||||
{
|
{
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
/* the mci instance is freed here, when the sysfs object is dropped */
|
/* the mci instance is freed here, when the sysfs object is dropped */
|
||||||
edac_unregister_sysfs(mci);
|
edac_unregister_sysfs(mci);
|
||||||
@ -447,7 +447,7 @@ struct mem_ctl_info *find_mci_by_dev(struct device *dev)
|
|||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
struct list_head *item;
|
struct list_head *item;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
list_for_each(item, &mc_devices) {
|
list_for_each(item, &mc_devices) {
|
||||||
mci = list_entry(item, struct mem_ctl_info, link);
|
mci = list_entry(item, struct mem_ctl_info, link);
|
||||||
@ -515,7 +515,7 @@ static void edac_mc_workq_function(struct work_struct *work_req)
|
|||||||
*/
|
*/
|
||||||
static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec)
|
static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* if this instance is not in the POLL state, then simply return */
|
/* if this instance is not in the POLL state, then simply return */
|
||||||
if (mci->op_state != OP_RUNNING_POLL)
|
if (mci->op_state != OP_RUNNING_POLL)
|
||||||
@ -542,8 +542,7 @@ static void edac_mc_workq_teardown(struct mem_ctl_info *mci)
|
|||||||
|
|
||||||
status = cancel_delayed_work(&mci->work);
|
status = cancel_delayed_work(&mci->work);
|
||||||
if (status == 0) {
|
if (status == 0) {
|
||||||
debugf0("%s() not canceled, flush the queue\n",
|
debugf0("not canceled, flush the queue\n");
|
||||||
__func__);
|
|
||||||
|
|
||||||
/* workq instance might be running, wait for it */
|
/* workq instance might be running, wait for it */
|
||||||
flush_workqueue(edac_workqueue);
|
flush_workqueue(edac_workqueue);
|
||||||
@ -690,7 +689,7 @@ EXPORT_SYMBOL(edac_mc_find);
|
|||||||
/* FIXME - should a warning be printed if no error detection? correction? */
|
/* FIXME - should a warning be printed if no error detection? correction? */
|
||||||
int edac_mc_add_mc(struct mem_ctl_info *mci)
|
int edac_mc_add_mc(struct mem_ctl_info *mci)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
#ifdef CONFIG_EDAC_DEBUG
|
#ifdef CONFIG_EDAC_DEBUG
|
||||||
if (edac_debug_level >= 3)
|
if (edac_debug_level >= 3)
|
||||||
@ -761,7 +760,7 @@ struct mem_ctl_info *edac_mc_del_mc(struct device *dev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
mutex_lock(&mem_ctls_mutex);
|
mutex_lock(&mem_ctls_mutex);
|
||||||
|
|
||||||
@ -799,7 +798,7 @@ static void edac_mc_scrub_block(unsigned long page, unsigned long offset,
|
|||||||
void *virt_addr;
|
void *virt_addr;
|
||||||
unsigned long flags = 0;
|
unsigned long flags = 0;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
/* ECC error page was not in our memory. Ignore it. */
|
/* ECC error page was not in our memory. Ignore it. */
|
||||||
if (!pfn_valid(page))
|
if (!pfn_valid(page))
|
||||||
@ -829,7 +828,7 @@ int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, unsigned long page)
|
|||||||
struct csrow_info **csrows = mci->csrows;
|
struct csrow_info **csrows = mci->csrows;
|
||||||
int row, i, j, n;
|
int row, i, j, n;
|
||||||
|
|
||||||
debugf1("MC%d: %s(): 0x%lx\n", mci->mc_idx, __func__, page);
|
debugf1("MC%d: 0x%lx\n", mci->mc_idx, page);
|
||||||
row = -1;
|
row = -1;
|
||||||
|
|
||||||
for (i = 0; i < mci->nr_csrows; i++) {
|
for (i = 0; i < mci->nr_csrows; i++) {
|
||||||
@ -842,8 +841,8 @@ int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, unsigned long page)
|
|||||||
if (n == 0)
|
if (n == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
debugf3("MC%d: %s(): first(0x%lx) page(0x%lx) last(0x%lx) "
|
debugf3("MC%d: first(0x%lx) page(0x%lx) last(0x%lx) "
|
||||||
"mask(0x%lx)\n", mci->mc_idx, __func__,
|
"mask(0x%lx)\n", mci->mc_idx,
|
||||||
csrow->first_page, page, csrow->last_page,
|
csrow->first_page, page, csrow->last_page,
|
||||||
csrow->page_mask);
|
csrow->page_mask);
|
||||||
|
|
||||||
@ -1049,7 +1048,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
|
|||||||
u16 error_count; /* FIXME: make it a parameter */
|
u16 error_count; /* FIXME: make it a parameter */
|
||||||
u8 grain_bits;
|
u8 grain_bits;
|
||||||
|
|
||||||
debugf3("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf3("MC%d\n", mci->mc_idx);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if the event report is consistent and if the memory
|
* Check if the event report is consistent and if the memory
|
||||||
@ -1127,8 +1126,7 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
|
|||||||
* get csrow/channel of the DIMM, in order to allow
|
* get csrow/channel of the DIMM, in order to allow
|
||||||
* incrementing the compat API counters
|
* incrementing the compat API counters
|
||||||
*/
|
*/
|
||||||
debugf4("%s: %s csrows map: (%d,%d)\n",
|
debugf4("%s csrows map: (%d,%d)\n",
|
||||||
__func__,
|
|
||||||
mci->mem_is_per_rank ? "rank" : "dimm",
|
mci->mem_is_per_rank ? "rank" : "dimm",
|
||||||
dimm->csrow, dimm->cschannel);
|
dimm->csrow, dimm->cschannel);
|
||||||
|
|
||||||
@ -1147,8 +1145,8 @@ void edac_mc_handle_error(const enum hw_event_mc_err_type type,
|
|||||||
if (!enable_per_layer_report) {
|
if (!enable_per_layer_report) {
|
||||||
strcpy(label, "any memory");
|
strcpy(label, "any memory");
|
||||||
} else {
|
} else {
|
||||||
debugf4("%s: csrow/channel to increment: (%d,%d)\n",
|
debugf4("csrow/channel to increment: (%d,%d)\n",
|
||||||
__func__, row, chan);
|
row, chan);
|
||||||
if (p == label)
|
if (p == label)
|
||||||
strcpy(label, "unknown memory");
|
strcpy(label, "unknown memory");
|
||||||
if (type == HW_EVENT_ERR_CORRECTED) {
|
if (type == HW_EVENT_ERR_CORRECTED) {
|
||||||
|
@ -376,8 +376,7 @@ static int edac_create_csrow_object(struct mem_ctl_info *mci,
|
|||||||
dev_set_name(&csrow->dev, "csrow%d", index);
|
dev_set_name(&csrow->dev, "csrow%d", index);
|
||||||
dev_set_drvdata(&csrow->dev, csrow);
|
dev_set_drvdata(&csrow->dev, csrow);
|
||||||
|
|
||||||
debugf0("%s(): creating (virtual) csrow node %s\n", __func__,
|
debugf0("creating (virtual) csrow node %s\n", dev_name(&csrow->dev));
|
||||||
dev_name(&csrow->dev));
|
|
||||||
|
|
||||||
err = device_add(&csrow->dev);
|
err = device_add(&csrow->dev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@ -623,8 +622,7 @@ static int edac_create_dimm_object(struct mem_ctl_info *mci,
|
|||||||
|
|
||||||
err = device_add(&dimm->dev);
|
err = device_add(&dimm->dev);
|
||||||
|
|
||||||
debugf0("%s(): creating rank/dimm device %s\n", __func__,
|
debugf0("creating rank/dimm device %s\n", dev_name(&dimm->dev));
|
||||||
dev_name(&dimm->dev));
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -981,8 +979,7 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
|
|||||||
dev_set_drvdata(&mci->dev, mci);
|
dev_set_drvdata(&mci->dev, mci);
|
||||||
pm_runtime_forbid(&mci->dev);
|
pm_runtime_forbid(&mci->dev);
|
||||||
|
|
||||||
debugf0("%s(): creating device %s\n", __func__,
|
debugf0("creating device %s\n", dev_name(&mci->dev));
|
||||||
dev_name(&mci->dev));
|
|
||||||
err = device_add(&mci->dev);
|
err = device_add(&mci->dev);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
bus_unregister(&mci->bus);
|
bus_unregister(&mci->bus);
|
||||||
@ -999,8 +996,8 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
|
|||||||
if (dimm->nr_pages == 0)
|
if (dimm->nr_pages == 0)
|
||||||
continue;
|
continue;
|
||||||
#ifdef CONFIG_EDAC_DEBUG
|
#ifdef CONFIG_EDAC_DEBUG
|
||||||
debugf1("%s creating dimm%d, located at ",
|
debugf1("creating dimm%d, located at ",
|
||||||
__func__, i);
|
i);
|
||||||
if (edac_debug_level >= 1) {
|
if (edac_debug_level >= 1) {
|
||||||
int lay;
|
int lay;
|
||||||
for (lay = 0; lay < mci->n_layers; lay++)
|
for (lay = 0; lay < mci->n_layers; lay++)
|
||||||
@ -1012,8 +1009,8 @@ int edac_create_sysfs_mci_device(struct mem_ctl_info *mci)
|
|||||||
#endif
|
#endif
|
||||||
err = edac_create_dimm_object(mci, dimm, i);
|
err = edac_create_dimm_object(mci, dimm, i);
|
||||||
if (err) {
|
if (err) {
|
||||||
debugf1("%s() failure: create dimm %d obj\n",
|
debugf1("failure: create dimm %d obj\n",
|
||||||
__func__, i);
|
i);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1051,7 +1048,7 @@ void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
#ifdef CONFIG_EDAC_DEBUG
|
#ifdef CONFIG_EDAC_DEBUG
|
||||||
debugfs_remove(mci->debugfs);
|
debugfs_remove(mci->debugfs);
|
||||||
@ -1064,8 +1061,7 @@ void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci)
|
|||||||
struct dimm_info *dimm = mci->dimms[i];
|
struct dimm_info *dimm = mci->dimms[i];
|
||||||
if (dimm->nr_pages == 0)
|
if (dimm->nr_pages == 0)
|
||||||
continue;
|
continue;
|
||||||
debugf0("%s(): removing device %s\n", __func__,
|
debugf0("removing device %s\n", dev_name(&dimm->dev));
|
||||||
dev_name(&dimm->dev));
|
|
||||||
put_device(&dimm->dev);
|
put_device(&dimm->dev);
|
||||||
device_del(&dimm->dev);
|
device_del(&dimm->dev);
|
||||||
}
|
}
|
||||||
@ -1105,7 +1101,7 @@ int __init edac_mc_sysfs_init(void)
|
|||||||
/* get the /sys/devices/system/edac subsys reference */
|
/* get the /sys/devices/system/edac subsys reference */
|
||||||
edac_subsys = edac_get_sysfs_subsys();
|
edac_subsys = edac_get_sysfs_subsys();
|
||||||
if (edac_subsys == NULL) {
|
if (edac_subsys == NULL) {
|
||||||
debugf1("%s() no edac_subsys\n", __func__);
|
debugf1("no edac_subsys\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ static int __init edac_init(void)
|
|||||||
*/
|
*/
|
||||||
static void __exit edac_exit(void)
|
static void __exit edac_exit(void)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* tear down the various subsystems */
|
/* tear down the various subsystems */
|
||||||
edac_workqueue_teardown();
|
edac_workqueue_teardown();
|
||||||
|
@ -45,7 +45,7 @@ struct edac_pci_ctl_info *edac_pci_alloc_ctl_info(unsigned int sz_pvt,
|
|||||||
void *p = NULL, *pvt;
|
void *p = NULL, *pvt;
|
||||||
unsigned int size;
|
unsigned int size;
|
||||||
|
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
pci = edac_align_ptr(&p, sizeof(*pci), 1);
|
pci = edac_align_ptr(&p, sizeof(*pci), 1);
|
||||||
pvt = edac_align_ptr(&p, 1, sz_pvt);
|
pvt = edac_align_ptr(&p, 1, sz_pvt);
|
||||||
@ -80,7 +80,7 @@ EXPORT_SYMBOL_GPL(edac_pci_alloc_ctl_info);
|
|||||||
*/
|
*/
|
||||||
void edac_pci_free_ctl_info(struct edac_pci_ctl_info *pci)
|
void edac_pci_free_ctl_info(struct edac_pci_ctl_info *pci)
|
||||||
{
|
{
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
edac_pci_remove_sysfs(pci);
|
edac_pci_remove_sysfs(pci);
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ static struct edac_pci_ctl_info *find_edac_pci_by_dev(struct device *dev)
|
|||||||
struct edac_pci_ctl_info *pci;
|
struct edac_pci_ctl_info *pci;
|
||||||
struct list_head *item;
|
struct list_head *item;
|
||||||
|
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
list_for_each(item, &edac_pci_list) {
|
list_for_each(item, &edac_pci_list) {
|
||||||
pci = list_entry(item, struct edac_pci_ctl_info, link);
|
pci = list_entry(item, struct edac_pci_ctl_info, link);
|
||||||
@ -122,7 +122,7 @@ static int add_edac_pci_to_global_list(struct edac_pci_ctl_info *pci)
|
|||||||
struct list_head *item, *insert_before;
|
struct list_head *item, *insert_before;
|
||||||
struct edac_pci_ctl_info *rover;
|
struct edac_pci_ctl_info *rover;
|
||||||
|
|
||||||
debugf1("%s()\n", __func__);
|
debugf1("\n");
|
||||||
|
|
||||||
insert_before = &edac_pci_list;
|
insert_before = &edac_pci_list;
|
||||||
|
|
||||||
@ -226,7 +226,7 @@ static void edac_pci_workq_function(struct work_struct *work_req)
|
|||||||
int msec;
|
int msec;
|
||||||
unsigned long delay;
|
unsigned long delay;
|
||||||
|
|
||||||
debugf3("%s() checking\n", __func__);
|
debugf3("checking\n");
|
||||||
|
|
||||||
mutex_lock(&edac_pci_ctls_mutex);
|
mutex_lock(&edac_pci_ctls_mutex);
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ static void edac_pci_workq_function(struct work_struct *work_req)
|
|||||||
static void edac_pci_workq_setup(struct edac_pci_ctl_info *pci,
|
static void edac_pci_workq_setup(struct edac_pci_ctl_info *pci,
|
||||||
unsigned int msec)
|
unsigned int msec)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
INIT_DELAYED_WORK(&pci->work, edac_pci_workq_function);
|
INIT_DELAYED_WORK(&pci->work, edac_pci_workq_function);
|
||||||
queue_delayed_work(edac_workqueue, &pci->work,
|
queue_delayed_work(edac_workqueue, &pci->work,
|
||||||
@ -276,7 +276,7 @@ static void edac_pci_workq_teardown(struct edac_pci_ctl_info *pci)
|
|||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
status = cancel_delayed_work(&pci->work);
|
status = cancel_delayed_work(&pci->work);
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
@ -293,7 +293,7 @@ static void edac_pci_workq_teardown(struct edac_pci_ctl_info *pci)
|
|||||||
void edac_pci_reset_delay_period(struct edac_pci_ctl_info *pci,
|
void edac_pci_reset_delay_period(struct edac_pci_ctl_info *pci,
|
||||||
unsigned long value)
|
unsigned long value)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
edac_pci_workq_teardown(pci);
|
edac_pci_workq_teardown(pci);
|
||||||
|
|
||||||
@ -333,7 +333,7 @@ EXPORT_SYMBOL_GPL(edac_pci_alloc_index);
|
|||||||
*/
|
*/
|
||||||
int edac_pci_add_device(struct edac_pci_ctl_info *pci, int edac_idx)
|
int edac_pci_add_device(struct edac_pci_ctl_info *pci, int edac_idx)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
pci->pci_idx = edac_idx;
|
pci->pci_idx = edac_idx;
|
||||||
pci->start_time = jiffies;
|
pci->start_time = jiffies;
|
||||||
@ -393,7 +393,7 @@ struct edac_pci_ctl_info *edac_pci_del_device(struct device *dev)
|
|||||||
{
|
{
|
||||||
struct edac_pci_ctl_info *pci;
|
struct edac_pci_ctl_info *pci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
mutex_lock(&edac_pci_ctls_mutex);
|
mutex_lock(&edac_pci_ctls_mutex);
|
||||||
|
|
||||||
@ -430,7 +430,7 @@ EXPORT_SYMBOL_GPL(edac_pci_del_device);
|
|||||||
*/
|
*/
|
||||||
static void edac_pci_generic_check(struct edac_pci_ctl_info *pci)
|
static void edac_pci_generic_check(struct edac_pci_ctl_info *pci)
|
||||||
{
|
{
|
||||||
debugf4("%s()\n", __func__);
|
debugf4("\n");
|
||||||
edac_pci_do_parity_check();
|
edac_pci_do_parity_check();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,7 +475,7 @@ struct edac_pci_ctl_info *edac_pci_create_generic_ctl(struct device *dev,
|
|||||||
pdata->edac_idx = edac_pci_idx++;
|
pdata->edac_idx = edac_pci_idx++;
|
||||||
|
|
||||||
if (edac_pci_add_device(pci, pdata->edac_idx) > 0) {
|
if (edac_pci_add_device(pci, pdata->edac_idx) > 0) {
|
||||||
debugf3("%s(): failed edac_pci_add_device()\n", __func__);
|
debugf3("failed edac_pci_add_device()\n");
|
||||||
edac_pci_free_ctl_info(pci);
|
edac_pci_free_ctl_info(pci);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -491,7 +491,7 @@ EXPORT_SYMBOL_GPL(edac_pci_create_generic_ctl);
|
|||||||
*/
|
*/
|
||||||
void edac_pci_release_generic_ctl(struct edac_pci_ctl_info *pci)
|
void edac_pci_release_generic_ctl(struct edac_pci_ctl_info *pci)
|
||||||
{
|
{
|
||||||
debugf0("%s() pci mod=%s\n", __func__, pci->mod_name);
|
debugf0("pci mod=%s\n", pci->mod_name);
|
||||||
|
|
||||||
edac_pci_del_device(pci->dev);
|
edac_pci_del_device(pci->dev);
|
||||||
edac_pci_free_ctl_info(pci);
|
edac_pci_free_ctl_info(pci);
|
||||||
|
@ -78,7 +78,7 @@ static void edac_pci_instance_release(struct kobject *kobj)
|
|||||||
{
|
{
|
||||||
struct edac_pci_ctl_info *pci;
|
struct edac_pci_ctl_info *pci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* Form pointer to containing struct, the pci control struct */
|
/* Form pointer to containing struct, the pci control struct */
|
||||||
pci = to_instance(kobj);
|
pci = to_instance(kobj);
|
||||||
@ -161,7 +161,7 @@ static int edac_pci_create_instance_kobj(struct edac_pci_ctl_info *pci, int idx)
|
|||||||
struct kobject *main_kobj;
|
struct kobject *main_kobj;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* First bump the ref count on the top main kobj, which will
|
/* First bump the ref count on the top main kobj, which will
|
||||||
* track the number of PCI instances we have, and thus nest
|
* track the number of PCI instances we have, and thus nest
|
||||||
@ -177,14 +177,14 @@ static int edac_pci_create_instance_kobj(struct edac_pci_ctl_info *pci, int idx)
|
|||||||
err = kobject_init_and_add(&pci->kobj, &ktype_pci_instance,
|
err = kobject_init_and_add(&pci->kobj, &ktype_pci_instance,
|
||||||
edac_pci_top_main_kobj, "pci%d", idx);
|
edac_pci_top_main_kobj, "pci%d", idx);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
debugf2("%s() failed to register instance pci%d\n",
|
debugf2("failed to register instance pci%d\n",
|
||||||
__func__, idx);
|
idx);
|
||||||
kobject_put(edac_pci_top_main_kobj);
|
kobject_put(edac_pci_top_main_kobj);
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
kobject_uevent(&pci->kobj, KOBJ_ADD);
|
kobject_uevent(&pci->kobj, KOBJ_ADD);
|
||||||
debugf1("%s() Register instance 'pci%d' kobject\n", __func__, idx);
|
debugf1("Register instance 'pci%d' kobject\n", idx);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ static int edac_pci_create_instance_kobj(struct edac_pci_ctl_info *pci, int idx)
|
|||||||
static void edac_pci_unregister_sysfs_instance_kobj(
|
static void edac_pci_unregister_sysfs_instance_kobj(
|
||||||
struct edac_pci_ctl_info *pci)
|
struct edac_pci_ctl_info *pci)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* Unregister the instance kobject and allow its release
|
/* Unregister the instance kobject and allow its release
|
||||||
* function release the main reference count and then
|
* function release the main reference count and then
|
||||||
@ -317,7 +317,7 @@ static struct edac_pci_dev_attribute *edac_pci_attr[] = {
|
|||||||
*/
|
*/
|
||||||
static void edac_pci_release_main_kobj(struct kobject *kobj)
|
static void edac_pci_release_main_kobj(struct kobject *kobj)
|
||||||
{
|
{
|
||||||
debugf0("%s() here to module_put(THIS_MODULE)\n", __func__);
|
debugf0("here to module_put(THIS_MODULE)\n");
|
||||||
|
|
||||||
kfree(kobj);
|
kfree(kobj);
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ static int edac_pci_main_kobj_setup(void)
|
|||||||
int err;
|
int err;
|
||||||
struct bus_type *edac_subsys;
|
struct bus_type *edac_subsys;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* check and count if we have already created the main kobject */
|
/* check and count if we have already created the main kobject */
|
||||||
if (atomic_inc_return(&edac_pci_sysfs_refcount) != 1)
|
if (atomic_inc_return(&edac_pci_sysfs_refcount) != 1)
|
||||||
@ -356,7 +356,7 @@ static int edac_pci_main_kobj_setup(void)
|
|||||||
*/
|
*/
|
||||||
edac_subsys = edac_get_sysfs_subsys();
|
edac_subsys = edac_get_sysfs_subsys();
|
||||||
if (edac_subsys == NULL) {
|
if (edac_subsys == NULL) {
|
||||||
debugf1("%s() no edac_subsys\n", __func__);
|
debugf1("no edac_subsys\n");
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto decrement_count_fail;
|
goto decrement_count_fail;
|
||||||
}
|
}
|
||||||
@ -366,7 +366,7 @@ static int edac_pci_main_kobj_setup(void)
|
|||||||
* level main kobj for EDAC PCI
|
* level main kobj for EDAC PCI
|
||||||
*/
|
*/
|
||||||
if (!try_module_get(THIS_MODULE)) {
|
if (!try_module_get(THIS_MODULE)) {
|
||||||
debugf1("%s() try_module_get() failed\n", __func__);
|
debugf1("try_module_get() failed\n");
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto mod_get_fail;
|
goto mod_get_fail;
|
||||||
}
|
}
|
||||||
@ -421,15 +421,14 @@ static int edac_pci_main_kobj_setup(void)
|
|||||||
*/
|
*/
|
||||||
static void edac_pci_main_kobj_teardown(void)
|
static void edac_pci_main_kobj_teardown(void)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* Decrement the count and only if no more controller instances
|
/* Decrement the count and only if no more controller instances
|
||||||
* are connected perform the unregisteration of the top level
|
* are connected perform the unregisteration of the top level
|
||||||
* main kobj
|
* main kobj
|
||||||
*/
|
*/
|
||||||
if (atomic_dec_return(&edac_pci_sysfs_refcount) == 0) {
|
if (atomic_dec_return(&edac_pci_sysfs_refcount) == 0) {
|
||||||
debugf0("%s() called kobject_put on main kobj\n",
|
debugf0("called kobject_put on main kobj\n");
|
||||||
__func__);
|
|
||||||
kobject_put(edac_pci_top_main_kobj);
|
kobject_put(edac_pci_top_main_kobj);
|
||||||
}
|
}
|
||||||
edac_put_sysfs_subsys();
|
edac_put_sysfs_subsys();
|
||||||
@ -446,7 +445,7 @@ int edac_pci_create_sysfs(struct edac_pci_ctl_info *pci)
|
|||||||
int err;
|
int err;
|
||||||
struct kobject *edac_kobj = &pci->kobj;
|
struct kobject *edac_kobj = &pci->kobj;
|
||||||
|
|
||||||
debugf0("%s() idx=%d\n", __func__, pci->pci_idx);
|
debugf0("idx=%d\n", pci->pci_idx);
|
||||||
|
|
||||||
/* create the top main EDAC PCI kobject, IF needed */
|
/* create the top main EDAC PCI kobject, IF needed */
|
||||||
err = edac_pci_main_kobj_setup();
|
err = edac_pci_main_kobj_setup();
|
||||||
@ -460,8 +459,8 @@ int edac_pci_create_sysfs(struct edac_pci_ctl_info *pci)
|
|||||||
|
|
||||||
err = sysfs_create_link(edac_kobj, &pci->dev->kobj, EDAC_PCI_SYMLINK);
|
err = sysfs_create_link(edac_kobj, &pci->dev->kobj, EDAC_PCI_SYMLINK);
|
||||||
if (err) {
|
if (err) {
|
||||||
debugf0("%s() sysfs_create_link() returned err= %d\n",
|
debugf0("sysfs_create_link() returned err= %d\n",
|
||||||
__func__, err);
|
err);
|
||||||
goto symlink_fail;
|
goto symlink_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -484,7 +483,7 @@ int edac_pci_create_sysfs(struct edac_pci_ctl_info *pci)
|
|||||||
*/
|
*/
|
||||||
void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci)
|
void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci)
|
||||||
{
|
{
|
||||||
debugf0("%s() index=%d\n", __func__, pci->pci_idx);
|
debugf0("index=%d\n", pci->pci_idx);
|
||||||
|
|
||||||
/* Remove the symlink */
|
/* Remove the symlink */
|
||||||
sysfs_remove_link(&pci->kobj, EDAC_PCI_SYMLINK);
|
sysfs_remove_link(&pci->kobj, EDAC_PCI_SYMLINK);
|
||||||
@ -496,7 +495,7 @@ void edac_pci_remove_sysfs(struct edac_pci_ctl_info *pci)
|
|||||||
* if this 'pci' is the last instance.
|
* if this 'pci' is the last instance.
|
||||||
* If it is, the main kobject will be unregistered as a result
|
* If it is, the main kobject will be unregistered as a result
|
||||||
*/
|
*/
|
||||||
debugf0("%s() calling edac_pci_main_kobj_teardown()\n", __func__);
|
debugf0("calling edac_pci_main_kobj_teardown()\n");
|
||||||
edac_pci_main_kobj_teardown();
|
edac_pci_main_kobj_teardown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,7 +670,7 @@ void edac_pci_do_parity_check(void)
|
|||||||
{
|
{
|
||||||
int before_count;
|
int before_count;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
/* if policy has PCI check off, leave now */
|
/* if policy has PCI check off, leave now */
|
||||||
if (!check_pci_errors)
|
if (!check_pci_errors)
|
||||||
|
@ -275,7 +275,7 @@ static void i3000_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct i3000_error_info info;
|
struct i3000_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
i3000_get_error_info(mci, &info);
|
i3000_get_error_info(mci, &info);
|
||||||
i3000_process_error_info(mci, &info, 1);
|
i3000_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -322,7 +322,7 @@ static int i3000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
unsigned long mchbar;
|
unsigned long mchbar;
|
||||||
void __iomem *window;
|
void __iomem *window;
|
||||||
|
|
||||||
debugf0("MC: %s()\n", __func__);
|
debugf0("MC:\n");
|
||||||
|
|
||||||
pci_read_config_dword(pdev, I3000_MCHBAR, (u32 *) & mchbar);
|
pci_read_config_dword(pdev, I3000_MCHBAR, (u32 *) & mchbar);
|
||||||
mchbar &= I3000_MCHBAR_MASK;
|
mchbar &= I3000_MCHBAR_MASK;
|
||||||
@ -366,7 +366,7 @@ static int i3000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (!mci)
|
if (!mci)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf3("MC: %s(): init mci\n", __func__);
|
debugf3("MC: init mci\n");
|
||||||
|
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_DDR2;
|
mci->mtype_cap = MEM_FLAG_DDR2;
|
||||||
@ -399,8 +399,8 @@ static int i3000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
cumul_size = value << (I3000_DRB_SHIFT - PAGE_SHIFT);
|
cumul_size = value << (I3000_DRB_SHIFT - PAGE_SHIFT);
|
||||||
if (interleaved)
|
if (interleaved)
|
||||||
cumul_size <<= 1;
|
cumul_size <<= 1;
|
||||||
debugf3("MC: %s(): (%d) cumul_size 0x%x\n",
|
debugf3("MC: (%d) cumul_size 0x%x\n",
|
||||||
__func__, i, cumul_size);
|
i, cumul_size);
|
||||||
if (cumul_size == last_cumul_size)
|
if (cumul_size == last_cumul_size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -429,7 +429,7 @@ static int i3000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
|
|
||||||
rc = -ENODEV;
|
rc = -ENODEV;
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("MC: %s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("MC: failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +445,7 @@ static int i3000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("MC: %s(): success\n", __func__);
|
debugf3("MC: success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@ -461,7 +461,7 @@ static int __devinit i3000_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("MC: %s()\n", __func__);
|
debugf0("MC:\n");
|
||||||
|
|
||||||
if (pci_enable_device(pdev) < 0)
|
if (pci_enable_device(pdev) < 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@ -477,7 +477,7 @@ static void __devexit i3000_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (i3000_pci)
|
if (i3000_pci)
|
||||||
edac_pci_release_generic_ctl(i3000_pci);
|
edac_pci_release_generic_ctl(i3000_pci);
|
||||||
@ -511,7 +511,7 @@ static int __init i3000_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf3("MC: %s()\n", __func__);
|
debugf3("MC:\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -552,7 +552,7 @@ static int __init i3000_init(void)
|
|||||||
|
|
||||||
static void __exit i3000_exit(void)
|
static void __exit i3000_exit(void)
|
||||||
{
|
{
|
||||||
debugf3("MC: %s()\n", __func__);
|
debugf3("MC:\n");
|
||||||
|
|
||||||
pci_unregister_driver(&i3000_driver);
|
pci_unregister_driver(&i3000_driver);
|
||||||
if (!i3000_registered) {
|
if (!i3000_registered) {
|
||||||
|
@ -245,7 +245,7 @@ static void i3200_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct i3200_error_info info;
|
struct i3200_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
i3200_get_and_clear_error_info(mci, &info);
|
i3200_get_and_clear_error_info(mci, &info);
|
||||||
i3200_process_error_info(mci, &info);
|
i3200_process_error_info(mci, &info);
|
||||||
}
|
}
|
||||||
@ -332,7 +332,7 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
void __iomem *window;
|
void __iomem *window;
|
||||||
struct i3200_priv *priv;
|
struct i3200_priv *priv;
|
||||||
|
|
||||||
debugf0("MC: %s()\n", __func__);
|
debugf0("MC:\n");
|
||||||
|
|
||||||
window = i3200_map_mchbar(pdev);
|
window = i3200_map_mchbar(pdev);
|
||||||
if (!window)
|
if (!window)
|
||||||
@ -352,7 +352,7 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (!mci)
|
if (!mci)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf3("MC: %s(): init mci\n", __func__);
|
debugf3("MC: init mci\n");
|
||||||
|
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_DDR2;
|
mci->mtype_cap = MEM_FLAG_DDR2;
|
||||||
@ -403,12 +403,12 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
|
|
||||||
rc = -ENODEV;
|
rc = -ENODEV;
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("MC: %s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("MC: failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("MC: %s(): success\n", __func__);
|
debugf3("MC: success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@ -424,7 +424,7 @@ static int __devinit i3200_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("MC: %s()\n", __func__);
|
debugf0("MC:\n");
|
||||||
|
|
||||||
if (pci_enable_device(pdev) < 0)
|
if (pci_enable_device(pdev) < 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@ -441,7 +441,7 @@ static void __devexit i3200_remove_one(struct pci_dev *pdev)
|
|||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
struct i3200_priv *priv;
|
struct i3200_priv *priv;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
mci = edac_mc_del_mc(&pdev->dev);
|
mci = edac_mc_del_mc(&pdev->dev);
|
||||||
if (!mci)
|
if (!mci)
|
||||||
@ -475,7 +475,7 @@ static int __init i3200_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf3("MC: %s()\n", __func__);
|
debugf3("MC:\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -516,7 +516,7 @@ static int __init i3200_init(void)
|
|||||||
|
|
||||||
static void __exit i3200_exit(void)
|
static void __exit i3200_exit(void)
|
||||||
{
|
{
|
||||||
debugf3("MC: %s()\n", __func__);
|
debugf3("MC:\n");
|
||||||
|
|
||||||
pci_unregister_driver(&i3200_driver);
|
pci_unregister_driver(&i3200_driver);
|
||||||
if (!i3200_registered) {
|
if (!i3200_registered) {
|
||||||
|
@ -779,7 +779,7 @@ static void i5000_clear_error(struct mem_ctl_info *mci)
|
|||||||
static void i5000_check_error(struct mem_ctl_info *mci)
|
static void i5000_check_error(struct mem_ctl_info *mci)
|
||||||
{
|
{
|
||||||
struct i5000_error_info info;
|
struct i5000_error_info info;
|
||||||
debugf4("MC%d: %s: %s()\n", mci->mc_idx, __FILE__, __func__);
|
debugf4("MC%d\n", mci->mc_idx);
|
||||||
i5000_get_error_info(mci, &info);
|
i5000_get_error_info(mci, &info);
|
||||||
i5000_process_error_info(mci, &info, 1);
|
i5000_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -1363,9 +1363,8 @@ static int i5000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
int num_channels;
|
int num_channels;
|
||||||
int num_dimms_per_channel;
|
int num_dimms_per_channel;
|
||||||
|
|
||||||
debugf0("MC: %s: %s(), pdev bus %u dev=0x%x fn=0x%x\n",
|
debugf0("MC: %s(), pdev bus %u dev=0x%x fn=0x%x\n",
|
||||||
__FILE__, __func__,
|
__FILE__, pdev->bus->number,
|
||||||
pdev->bus->number,
|
|
||||||
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
|
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
|
||||||
|
|
||||||
/* We only are looking for func 0 of the set */
|
/* We only are looking for func 0 of the set */
|
||||||
@ -1388,8 +1387,8 @@ static int i5000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
i5000_get_dimm_and_channel_counts(pdev, &num_dimms_per_channel,
|
i5000_get_dimm_and_channel_counts(pdev, &num_dimms_per_channel,
|
||||||
&num_channels);
|
&num_channels);
|
||||||
|
|
||||||
debugf0("MC: %s(): Number of Branches=2 Channels= %d DIMMS= %d\n",
|
debugf0("MC: Number of Branches=2 Channels= %d DIMMS= %d\n",
|
||||||
__func__, num_channels, num_dimms_per_channel);
|
num_channels, num_dimms_per_channel);
|
||||||
|
|
||||||
/* allocate a new MC control structure */
|
/* allocate a new MC control structure */
|
||||||
|
|
||||||
@ -1406,7 +1405,7 @@ static int i5000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("MC: %s: %s(): mci = %p\n", __FILE__, __func__, mci);
|
debugf0("MC: %s(): mci = %p\n", __FILE__, mci);
|
||||||
|
|
||||||
mci->pdev = &pdev->dev; /* record ptr to the generic device */
|
mci->pdev = &pdev->dev; /* record ptr to the generic device */
|
||||||
|
|
||||||
@ -1449,8 +1448,8 @@ static int i5000_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
|
|
||||||
/* add this new MC control structure to EDAC's list of MCs */
|
/* add this new MC control structure to EDAC's list of MCs */
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf0("MC: %s: %s(): failed edac_mc_add_mc()\n",
|
debugf0("MC: %s(): failed edac_mc_add_mc()\n",
|
||||||
__FILE__, __func__);
|
__FILE__);
|
||||||
/* FIXME: perhaps some code should go here that disables error
|
/* FIXME: perhaps some code should go here that disables error
|
||||||
* reporting if we just enabled it
|
* reporting if we just enabled it
|
||||||
*/
|
*/
|
||||||
@ -1494,7 +1493,7 @@ static int __devinit i5000_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("MC: %s: %s()\n", __FILE__, __func__);
|
debugf0("MC: %s()\n", __FILE__);
|
||||||
|
|
||||||
/* wake up device */
|
/* wake up device */
|
||||||
rc = pci_enable_device(pdev);
|
rc = pci_enable_device(pdev);
|
||||||
@ -1513,7 +1512,7 @@ static void __devexit i5000_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s: %s()\n", __FILE__, __func__);
|
debugf0("%s()\n", __FILE__);
|
||||||
|
|
||||||
if (i5000_pci)
|
if (i5000_pci)
|
||||||
edac_pci_release_generic_ctl(i5000_pci);
|
edac_pci_release_generic_ctl(i5000_pci);
|
||||||
@ -1559,7 +1558,7 @@ static int __init i5000_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf2("MC: %s: %s()\n", __FILE__, __func__);
|
debugf2("MC: %s()\n", __FILE__);
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -1575,7 +1574,7 @@ static int __init i5000_init(void)
|
|||||||
*/
|
*/
|
||||||
static void __exit i5000_exit(void)
|
static void __exit i5000_exit(void)
|
||||||
{
|
{
|
||||||
debugf2("MC: %s: %s()\n", __FILE__, __func__);
|
debugf2("MC: %s()\n", __FILE__);
|
||||||
pci_unregister_driver(&i5000_driver);
|
pci_unregister_driver(&i5000_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -700,7 +700,7 @@ static void i5400_clear_error(struct mem_ctl_info *mci)
|
|||||||
static void i5400_check_error(struct mem_ctl_info *mci)
|
static void i5400_check_error(struct mem_ctl_info *mci)
|
||||||
{
|
{
|
||||||
struct i5400_error_info info;
|
struct i5400_error_info info;
|
||||||
debugf4("MC%d: %s: %s()\n", mci->mc_idx, __FILE__, __func__);
|
debugf4("MC%d\n", mci->mc_idx);
|
||||||
i5400_get_error_info(mci, &info);
|
i5400_get_error_info(mci, &info);
|
||||||
i5400_process_error_info(mci, &info);
|
i5400_process_error_info(mci, &info);
|
||||||
}
|
}
|
||||||
@ -1203,8 +1203,7 @@ static int i5400_init_dimms(struct mem_ctl_info *mci)
|
|||||||
|
|
||||||
size_mb = pvt->dimm_info[slot][channel].megabytes;
|
size_mb = pvt->dimm_info[slot][channel].megabytes;
|
||||||
|
|
||||||
debugf2("%s: dimm (branch %d channel %d slot %d): %d.%03d GB\n",
|
debugf2("dimm (branch %d channel %d slot %d): %d.%03d GB\n",
|
||||||
__func__,
|
|
||||||
channel / 2, channel % 2, slot,
|
channel / 2, channel % 2, slot,
|
||||||
size_mb / 1000, size_mb % 1000);
|
size_mb / 1000, size_mb % 1000);
|
||||||
|
|
||||||
@ -1270,9 +1269,8 @@ static int i5400_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (dev_idx >= ARRAY_SIZE(i5400_devs))
|
if (dev_idx >= ARRAY_SIZE(i5400_devs))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
debugf0("MC: %s: %s(), pdev bus %u dev=0x%x fn=0x%x\n",
|
debugf0("MC: %s(), pdev bus %u dev=0x%x fn=0x%x\n",
|
||||||
__FILE__, __func__,
|
__FILE__, pdev->bus->number,
|
||||||
pdev->bus->number,
|
|
||||||
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
|
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
|
||||||
|
|
||||||
/* We only are looking for func 0 of the set */
|
/* We only are looking for func 0 of the set */
|
||||||
@ -1297,7 +1295,7 @@ static int i5400_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("MC: %s: %s(): mci = %p\n", __FILE__, __func__, mci);
|
debugf0("MC: %s(): mci = %p\n", __FILE__, mci);
|
||||||
|
|
||||||
mci->pdev = &pdev->dev; /* record ptr to the generic device */
|
mci->pdev = &pdev->dev; /* record ptr to the generic device */
|
||||||
|
|
||||||
@ -1340,8 +1338,8 @@ static int i5400_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
|
|
||||||
/* add this new MC control structure to EDAC's list of MCs */
|
/* add this new MC control structure to EDAC's list of MCs */
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf0("MC: %s: %s(): failed edac_mc_add_mc()\n",
|
debugf0("MC: %s(): failed edac_mc_add_mc()\n",
|
||||||
__FILE__, __func__);
|
__FILE__);
|
||||||
/* FIXME: perhaps some code should go here that disables error
|
/* FIXME: perhaps some code should go here that disables error
|
||||||
* reporting if we just enabled it
|
* reporting if we just enabled it
|
||||||
*/
|
*/
|
||||||
@ -1385,7 +1383,7 @@ static int __devinit i5400_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("MC: %s: %s()\n", __FILE__, __func__);
|
debugf0("MC: %s()\n", __FILE__);
|
||||||
|
|
||||||
/* wake up device */
|
/* wake up device */
|
||||||
rc = pci_enable_device(pdev);
|
rc = pci_enable_device(pdev);
|
||||||
@ -1404,7 +1402,7 @@ static void __devexit i5400_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s: %s()\n", __FILE__, __func__);
|
debugf0("%s()\n", __FILE__);
|
||||||
|
|
||||||
if (i5400_pci)
|
if (i5400_pci)
|
||||||
edac_pci_release_generic_ctl(i5400_pci);
|
edac_pci_release_generic_ctl(i5400_pci);
|
||||||
@ -1450,7 +1448,7 @@ static int __init i5400_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf2("MC: %s: %s()\n", __FILE__, __func__);
|
debugf2("MC: %s()\n", __FILE__);
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -1466,7 +1464,7 @@ static int __init i5400_init(void)
|
|||||||
*/
|
*/
|
||||||
static void __exit i5400_exit(void)
|
static void __exit i5400_exit(void)
|
||||||
{
|
{
|
||||||
debugf2("MC: %s: %s()\n", __FILE__, __func__);
|
debugf2("MC: %s()\n", __FILE__);
|
||||||
pci_unregister_driver(&i5400_driver);
|
pci_unregister_driver(&i5400_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1032,8 +1032,7 @@ static int __devinit i7300_init_one(struct pci_dev *pdev,
|
|||||||
if (rc == -EIO)
|
if (rc == -EIO)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
debugf0("MC: " __FILE__ ": %s(), pdev bus %u dev=0x%x fn=0x%x\n",
|
debugf0("MC: pdev bus %u dev=0x%x fn=0x%x\n",
|
||||||
__func__,
|
|
||||||
pdev->bus->number,
|
pdev->bus->number,
|
||||||
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
|
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
|
||||||
|
|
||||||
@ -1055,7 +1054,7 @@ static int __devinit i7300_init_one(struct pci_dev *pdev,
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("MC: " __FILE__ ": %s(): mci = %p\n", __func__, mci);
|
debugf0("MC: mci = %p\n", mci);
|
||||||
|
|
||||||
mci->pdev = &pdev->dev; /* record ptr to the generic device */
|
mci->pdev = &pdev->dev; /* record ptr to the generic device */
|
||||||
|
|
||||||
@ -1099,8 +1098,7 @@ static int __devinit i7300_init_one(struct pci_dev *pdev,
|
|||||||
|
|
||||||
/* add this new MC control structure to EDAC's list of MCs */
|
/* add this new MC control structure to EDAC's list of MCs */
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf0("MC: " __FILE__
|
debugf0("MC: failed edac_mc_add_mc()\n");
|
||||||
": %s(): failed edac_mc_add_mc()\n", __func__);
|
|
||||||
/* FIXME: perhaps some code should go here that disables error
|
/* FIXME: perhaps some code should go here that disables error
|
||||||
* reporting if we just enabled it
|
* reporting if we just enabled it
|
||||||
*/
|
*/
|
||||||
@ -1142,7 +1140,7 @@ static void __devexit i7300_remove_one(struct pci_dev *pdev)
|
|||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
debugf0(__FILE__ ": %s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (i7300_pci)
|
if (i7300_pci)
|
||||||
edac_pci_release_generic_ctl(i7300_pci);
|
edac_pci_release_generic_ctl(i7300_pci);
|
||||||
@ -1189,7 +1187,7 @@ static int __init i7300_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf2("MC: " __FILE__ ": %s()\n", __func__);
|
debugf2("\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -1204,7 +1202,7 @@ static int __init i7300_init(void)
|
|||||||
*/
|
*/
|
||||||
static void __exit i7300_exit(void)
|
static void __exit i7300_exit(void)
|
||||||
{
|
{
|
||||||
debugf2("MC: " __FILE__ ": %s()\n", __func__);
|
debugf2("\n");
|
||||||
pci_unregister_driver(&i7300_driver);
|
pci_unregister_driver(&i7300_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -824,7 +824,7 @@ static ssize_t i7core_inject_store_##param( \
|
|||||||
long value; \
|
long value; \
|
||||||
int rc; \
|
int rc; \
|
||||||
\
|
\
|
||||||
debugf1("%s()\n", __func__); \
|
debugf1("\n"); \
|
||||||
pvt = mci->pvt_info; \
|
pvt = mci->pvt_info; \
|
||||||
\
|
\
|
||||||
if (pvt->inject.enable) \
|
if (pvt->inject.enable) \
|
||||||
@ -852,7 +852,7 @@ static ssize_t i7core_inject_show_##param( \
|
|||||||
struct i7core_pvt *pvt; \
|
struct i7core_pvt *pvt; \
|
||||||
\
|
\
|
||||||
pvt = mci->pvt_info; \
|
pvt = mci->pvt_info; \
|
||||||
debugf1("%s() pvt=%p\n", __func__, pvt); \
|
debugf1("pvt=%p\n", pvt); \
|
||||||
if (pvt->inject.param < 0) \
|
if (pvt->inject.param < 0) \
|
||||||
return sprintf(data, "any\n"); \
|
return sprintf(data, "any\n"); \
|
||||||
else \
|
else \
|
||||||
@ -1059,7 +1059,7 @@ static ssize_t i7core_show_counter_##param( \
|
|||||||
struct mem_ctl_info *mci = to_mci(dev); \
|
struct mem_ctl_info *mci = to_mci(dev); \
|
||||||
struct i7core_pvt *pvt = mci->pvt_info; \
|
struct i7core_pvt *pvt = mci->pvt_info; \
|
||||||
\
|
\
|
||||||
debugf1("%s()\n", __func__); \
|
debugf1("\n"); \
|
||||||
if (!pvt->ce_count_available || (pvt->is_registered)) \
|
if (!pvt->ce_count_available || (pvt->is_registered)) \
|
||||||
return sprintf(data, "data unavailable\n"); \
|
return sprintf(data, "data unavailable\n"); \
|
||||||
return sprintf(data, "%lu\n", \
|
return sprintf(data, "%lu\n", \
|
||||||
@ -1190,8 +1190,7 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
|
|||||||
dev_set_name(pvt->addrmatch_dev, "inject_addrmatch");
|
dev_set_name(pvt->addrmatch_dev, "inject_addrmatch");
|
||||||
dev_set_drvdata(pvt->addrmatch_dev, mci);
|
dev_set_drvdata(pvt->addrmatch_dev, mci);
|
||||||
|
|
||||||
debugf1("%s(): creating %s\n", __func__,
|
debugf1("creating %s\n", dev_name(pvt->addrmatch_dev));
|
||||||
dev_name(pvt->addrmatch_dev));
|
|
||||||
|
|
||||||
rc = device_add(pvt->addrmatch_dev);
|
rc = device_add(pvt->addrmatch_dev);
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
@ -1213,8 +1212,7 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci)
|
|||||||
dev_set_name(pvt->chancounts_dev, "all_channel_counts");
|
dev_set_name(pvt->chancounts_dev, "all_channel_counts");
|
||||||
dev_set_drvdata(pvt->chancounts_dev, mci);
|
dev_set_drvdata(pvt->chancounts_dev, mci);
|
||||||
|
|
||||||
debugf1("%s(): creating %s\n", __func__,
|
debugf1("creating %s\n", dev_name(pvt->chancounts_dev));
|
||||||
dev_name(pvt->chancounts_dev));
|
|
||||||
|
|
||||||
rc = device_add(pvt->chancounts_dev);
|
rc = device_add(pvt->chancounts_dev);
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
@ -1254,7 +1252,7 @@ static void i7core_put_devices(struct i7core_dev *i7core_dev)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
debugf0(__FILE__ ": %s()\n", __func__);
|
debugf0("\n");
|
||||||
for (i = 0; i < i7core_dev->n_devs; i++) {
|
for (i = 0; i < i7core_dev->n_devs; i++) {
|
||||||
struct pci_dev *pdev = i7core_dev->pdev[i];
|
struct pci_dev *pdev = i7core_dev->pdev[i];
|
||||||
if (!pdev)
|
if (!pdev)
|
||||||
@ -1652,7 +1650,7 @@ static void i7core_udimm_check_mc_ecc_err(struct mem_ctl_info *mci)
|
|||||||
int new0, new1, new2;
|
int new0, new1, new2;
|
||||||
|
|
||||||
if (!pvt->pci_mcr[4]) {
|
if (!pvt->pci_mcr[4]) {
|
||||||
debugf0("%s MCR registers not found\n", __func__);
|
debugf0("MCR registers not found\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2190,8 +2188,7 @@ static void i7core_unregister_mci(struct i7core_dev *i7core_dev)
|
|||||||
struct i7core_pvt *pvt;
|
struct i7core_pvt *pvt;
|
||||||
|
|
||||||
if (unlikely(!mci || !mci->pvt_info)) {
|
if (unlikely(!mci || !mci->pvt_info)) {
|
||||||
debugf0("MC: " __FILE__ ": %s(): dev = %p\n",
|
debugf0("MC: dev = %p\n", &i7core_dev->pdev[0]->dev);
|
||||||
__func__, &i7core_dev->pdev[0]->dev);
|
|
||||||
|
|
||||||
i7core_printk(KERN_ERR, "Couldn't find mci handler\n");
|
i7core_printk(KERN_ERR, "Couldn't find mci handler\n");
|
||||||
return;
|
return;
|
||||||
@ -2199,8 +2196,7 @@ static void i7core_unregister_mci(struct i7core_dev *i7core_dev)
|
|||||||
|
|
||||||
pvt = mci->pvt_info;
|
pvt = mci->pvt_info;
|
||||||
|
|
||||||
debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
|
debugf0("MC: mci = %p, dev = %p\n", mci, &i7core_dev->pdev[0]->dev);
|
||||||
__func__, mci, &i7core_dev->pdev[0]->dev);
|
|
||||||
|
|
||||||
/* Disable scrubrate setting */
|
/* Disable scrubrate setting */
|
||||||
if (pvt->enable_scrub)
|
if (pvt->enable_scrub)
|
||||||
@ -2241,8 +2237,7 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev)
|
|||||||
if (unlikely(!mci))
|
if (unlikely(!mci))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
|
debugf0("MC: mci = %p, dev = %p\n", mci, &i7core_dev->pdev[0]->dev);
|
||||||
__func__, mci, &i7core_dev->pdev[0]->dev);
|
|
||||||
|
|
||||||
pvt = mci->pvt_info;
|
pvt = mci->pvt_info;
|
||||||
memset(pvt, 0, sizeof(*pvt));
|
memset(pvt, 0, sizeof(*pvt));
|
||||||
@ -2285,8 +2280,7 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev)
|
|||||||
|
|
||||||
/* add this new MC control structure to EDAC's list of MCs */
|
/* add this new MC control structure to EDAC's list of MCs */
|
||||||
if (unlikely(edac_mc_add_mc(mci))) {
|
if (unlikely(edac_mc_add_mc(mci))) {
|
||||||
debugf0("MC: " __FILE__
|
debugf0("MC: failed edac_mc_add_mc()\n");
|
||||||
": %s(): failed edac_mc_add_mc()\n", __func__);
|
|
||||||
/* FIXME: perhaps some code should go here that disables error
|
/* FIXME: perhaps some code should go here that disables error
|
||||||
* reporting if we just enabled it
|
* reporting if we just enabled it
|
||||||
*/
|
*/
|
||||||
@ -2295,8 +2289,7 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev)
|
|||||||
goto fail0;
|
goto fail0;
|
||||||
}
|
}
|
||||||
if (i7core_create_sysfs_devices(mci)) {
|
if (i7core_create_sysfs_devices(mci)) {
|
||||||
debugf0("MC: " __FILE__
|
debugf0("MC: failed to create sysfs nodes\n");
|
||||||
": %s(): failed to create sysfs nodes\n", __func__);
|
|
||||||
edac_mc_del_mc(mci->pdev);
|
edac_mc_del_mc(mci->pdev);
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
goto fail0;
|
goto fail0;
|
||||||
@ -2402,7 +2395,7 @@ static void __devexit i7core_remove(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct i7core_dev *i7core_dev;
|
struct i7core_dev *i7core_dev;
|
||||||
|
|
||||||
debugf0(__FILE__ ": %s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we have a trouble here: pdev value for removal will be wrong, since
|
* we have a trouble here: pdev value for removal will be wrong, since
|
||||||
@ -2451,7 +2444,7 @@ static int __init i7core_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf2("MC: " __FILE__ ": %s()\n", __func__);
|
debugf2("\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -2476,7 +2469,7 @@ static int __init i7core_init(void)
|
|||||||
*/
|
*/
|
||||||
static void __exit i7core_exit(void)
|
static void __exit i7core_exit(void)
|
||||||
{
|
{
|
||||||
debugf2("MC: " __FILE__ ": %s()\n", __func__);
|
debugf2("\n");
|
||||||
pci_unregister_driver(&i7core_driver);
|
pci_unregister_driver(&i7core_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ static void i82443bxgx_edacmc_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct i82443bxgx_edacmc_error_info info;
|
struct i82443bxgx_edacmc_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s: %s()\n", mci->mc_idx, __FILE__, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
i82443bxgx_edacmc_get_error_info(mci, &info);
|
i82443bxgx_edacmc_get_error_info(mci, &info);
|
||||||
i82443bxgx_edacmc_process_error_info(mci, &info, 1);
|
i82443bxgx_edacmc_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -201,13 +201,13 @@ static void i82443bxgx_init_csrows(struct mem_ctl_info *mci,
|
|||||||
dimm = csrow->channels[0]->dimm;
|
dimm = csrow->channels[0]->dimm;
|
||||||
|
|
||||||
pci_read_config_byte(pdev, I82443BXGX_DRB + index, &drbar);
|
pci_read_config_byte(pdev, I82443BXGX_DRB + index, &drbar);
|
||||||
debugf1("MC%d: %s: %s() Row=%d DRB = %#0x\n",
|
debugf1("MC%d: Row=%d DRB = %#0x\n",
|
||||||
mci->mc_idx, __FILE__, __func__, index, drbar);
|
mci->mc_idx,index, drbar);
|
||||||
row_high_limit = ((u32) drbar << 23);
|
row_high_limit = ((u32) drbar << 23);
|
||||||
/* find the DRAM Chip Select Base address and mask */
|
/* find the DRAM Chip Select Base address and mask */
|
||||||
debugf1("MC%d: %s: %s() Row=%d, "
|
debugf1("MC%d: Row=%d, "
|
||||||
"Boundary Address=%#0x, Last = %#0x\n",
|
"Boundary Address=%#0x, Last = %#0x\n",
|
||||||
mci->mc_idx, __FILE__, __func__, index, row_high_limit,
|
mci->mc_idx, index, row_high_limit,
|
||||||
row_high_limit_last);
|
row_high_limit_last);
|
||||||
|
|
||||||
/* 440GX goes to 2GB, represented with a DRB of 0. */
|
/* 440GX goes to 2GB, represented with a DRB of 0. */
|
||||||
@ -241,7 +241,7 @@ static int i82443bxgx_edacmc_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
enum mem_type mtype;
|
enum mem_type mtype;
|
||||||
enum edac_type edac_mode;
|
enum edac_type edac_mode;
|
||||||
|
|
||||||
debugf0("MC: %s: %s()\n", __FILE__, __func__);
|
debugf0("MC: %s()\n", __FILE__);
|
||||||
|
|
||||||
/* Something is really hosed if PCI config space reads from
|
/* Something is really hosed if PCI config space reads from
|
||||||
* the MC aren't working.
|
* the MC aren't working.
|
||||||
@ -259,7 +259,7 @@ static int i82443bxgx_edacmc_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("MC: %s: %s(): mci = %p\n", __FILE__, __func__, mci);
|
debugf0("MC: %s(): mci = %p\n", __FILE__, mci);
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_EDO | MEM_FLAG_SDR | MEM_FLAG_RDR;
|
mci->mtype_cap = MEM_FLAG_EDO | MEM_FLAG_SDR | MEM_FLAG_RDR;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED;
|
||||||
@ -305,8 +305,8 @@ static int i82443bxgx_edacmc_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
edac_mode = EDAC_SECDED;
|
edac_mode = EDAC_SECDED;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
debugf0("%s(): Unknown/reserved ECC state "
|
debugf0("Unknown/reserved ECC state "
|
||||||
"in NBXCFG register!\n", __func__);
|
"in NBXCFG register!\n");
|
||||||
edac_mode = EDAC_UNKNOWN;
|
edac_mode = EDAC_UNKNOWN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -330,7 +330,7 @@ static int i82443bxgx_edacmc_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
mci->ctl_page_to_phys = NULL;
|
mci->ctl_page_to_phys = NULL;
|
||||||
|
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ static int i82443bxgx_edacmc_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
__func__);
|
__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("MC: %s: %s(): success\n", __FILE__, __func__);
|
debugf3("MC: %s(): success\n", __FILE__);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@ -361,7 +361,7 @@ static int __devinit i82443bxgx_edacmc_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("MC: %s: %s()\n", __FILE__, __func__);
|
debugf0("MC: %s()\n", __FILE__);
|
||||||
|
|
||||||
/* don't need to call pci_enable_device() */
|
/* don't need to call pci_enable_device() */
|
||||||
rc = i82443bxgx_edacmc_probe1(pdev, ent->driver_data);
|
rc = i82443bxgx_edacmc_probe1(pdev, ent->driver_data);
|
||||||
@ -376,7 +376,7 @@ static void __devexit i82443bxgx_edacmc_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s: %s()\n", __FILE__, __func__);
|
debugf0("%s()\n", __FILE__);
|
||||||
|
|
||||||
if (i82443bxgx_pci)
|
if (i82443bxgx_pci)
|
||||||
edac_pci_release_generic_ctl(i82443bxgx_pci);
|
edac_pci_release_generic_ctl(i82443bxgx_pci);
|
||||||
|
@ -136,7 +136,7 @@ static void i82860_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct i82860_error_info info;
|
struct i82860_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
i82860_get_error_info(mci, &info);
|
i82860_get_error_info(mci, &info);
|
||||||
i82860_process_error_info(mci, &info, 1);
|
i82860_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -167,7 +167,7 @@ static void i82860_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev)
|
|||||||
pci_read_config_word(pdev, I82860_GBA + index * 2, &value);
|
pci_read_config_word(pdev, I82860_GBA + index * 2, &value);
|
||||||
cumul_size = (value & I82860_GBA_MASK) <<
|
cumul_size = (value & I82860_GBA_MASK) <<
|
||||||
(I82860_GBA_SHIFT - PAGE_SHIFT);
|
(I82860_GBA_SHIFT - PAGE_SHIFT);
|
||||||
debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index,
|
debugf3("(%d) cumul_size 0x%x\n", index,
|
||||||
cumul_size);
|
cumul_size);
|
||||||
|
|
||||||
if (cumul_size == last_cumul_size)
|
if (cumul_size == last_cumul_size)
|
||||||
@ -210,7 +210,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (!mci)
|
if (!mci)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf3("%s(): init mci\n", __func__);
|
debugf3("init mci\n");
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_DDR;
|
mci->mtype_cap = MEM_FLAG_DDR;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
||||||
@ -229,7 +229,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
* type of memory controller. The ID is therefore hardcoded to 0.
|
* type of memory controller. The ID is therefore hardcoded to 0.
|
||||||
*/
|
*/
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ static int i82860_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ static int __devinit i82860_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
i82860_printk(KERN_INFO, "i82860 init one\n");
|
i82860_printk(KERN_INFO, "i82860 init one\n");
|
||||||
|
|
||||||
if (pci_enable_device(pdev) < 0)
|
if (pci_enable_device(pdev) < 0)
|
||||||
@ -278,7 +278,7 @@ static void __devexit i82860_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (i82860_pci)
|
if (i82860_pci)
|
||||||
edac_pci_release_generic_ctl(i82860_pci);
|
edac_pci_release_generic_ctl(i82860_pci);
|
||||||
@ -311,7 +311,7 @@ static int __init i82860_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -352,7 +352,7 @@ static int __init i82860_init(void)
|
|||||||
|
|
||||||
static void __exit i82860_exit(void)
|
static void __exit i82860_exit(void)
|
||||||
{
|
{
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
pci_unregister_driver(&i82860_driver);
|
pci_unregister_driver(&i82860_driver);
|
||||||
|
|
||||||
|
@ -263,7 +263,7 @@ static void i82875p_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct i82875p_error_info info;
|
struct i82875p_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
i82875p_get_error_info(mci, &info);
|
i82875p_get_error_info(mci, &info);
|
||||||
i82875p_process_error_info(mci, &info, 1);
|
i82875p_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -371,7 +371,7 @@ static void i82875p_init_csrows(struct mem_ctl_info *mci,
|
|||||||
|
|
||||||
value = readb(ovrfl_window + I82875P_DRB + index);
|
value = readb(ovrfl_window + I82875P_DRB + index);
|
||||||
cumul_size = value << (I82875P_DRB_SHIFT - PAGE_SHIFT);
|
cumul_size = value << (I82875P_DRB_SHIFT - PAGE_SHIFT);
|
||||||
debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index,
|
debugf3("(%d) cumul_size 0x%x\n", index,
|
||||||
cumul_size);
|
cumul_size);
|
||||||
if (cumul_size == last_cumul_size)
|
if (cumul_size == last_cumul_size)
|
||||||
continue; /* not populated */
|
continue; /* not populated */
|
||||||
@ -405,7 +405,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
u32 nr_chans;
|
u32 nr_chans;
|
||||||
struct i82875p_error_info discard;
|
struct i82875p_error_info discard;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
ovrfl_pdev = pci_get_device(PCI_VEND_DEV(INTEL, 82875_6), NULL);
|
ovrfl_pdev = pci_get_device(PCI_VEND_DEV(INTEL, 82875_6), NULL);
|
||||||
|
|
||||||
@ -426,7 +426,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
goto fail0;
|
goto fail0;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("%s(): init mci\n", __func__);
|
debugf3("init mci\n");
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_DDR;
|
mci->mtype_cap = MEM_FLAG_DDR;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
||||||
@ -437,7 +437,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
mci->dev_name = pci_name(pdev);
|
mci->dev_name = pci_name(pdev);
|
||||||
mci->edac_check = i82875p_check;
|
mci->edac_check = i82875p_check;
|
||||||
mci->ctl_page_to_phys = NULL;
|
mci->ctl_page_to_phys = NULL;
|
||||||
debugf3("%s(): init pvt\n", __func__);
|
debugf3("init pvt\n");
|
||||||
pvt = (struct i82875p_pvt *)mci->pvt_info;
|
pvt = (struct i82875p_pvt *)mci->pvt_info;
|
||||||
pvt->ovrfl_pdev = ovrfl_pdev;
|
pvt->ovrfl_pdev = ovrfl_pdev;
|
||||||
pvt->ovrfl_window = ovrfl_window;
|
pvt->ovrfl_window = ovrfl_window;
|
||||||
@ -448,7 +448,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
* type of memory controller. The ID is therefore hardcoded to 0.
|
* type of memory controller. The ID is therefore hardcoded to 0.
|
||||||
*/
|
*/
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail1;
|
goto fail1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,7 +464,7 @@ static int i82875p_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail1:
|
fail1:
|
||||||
@ -485,7 +485,7 @@ static int __devinit i82875p_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
i82875p_printk(KERN_INFO, "i82875p init one\n");
|
i82875p_printk(KERN_INFO, "i82875p init one\n");
|
||||||
|
|
||||||
if (pci_enable_device(pdev) < 0)
|
if (pci_enable_device(pdev) < 0)
|
||||||
@ -504,7 +504,7 @@ static void __devexit i82875p_remove_one(struct pci_dev *pdev)
|
|||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
struct i82875p_pvt *pvt = NULL;
|
struct i82875p_pvt *pvt = NULL;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (i82875p_pci)
|
if (i82875p_pci)
|
||||||
edac_pci_release_generic_ctl(i82875p_pci);
|
edac_pci_release_generic_ctl(i82875p_pci);
|
||||||
@ -550,7 +550,7 @@ static int __init i82875p_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -593,7 +593,7 @@ static int __init i82875p_init(void)
|
|||||||
|
|
||||||
static void __exit i82875p_exit(void)
|
static void __exit i82875p_exit(void)
|
||||||
{
|
{
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
i82875p_remove_one(mci_pdev);
|
i82875p_remove_one(mci_pdev);
|
||||||
pci_dev_put(mci_pdev);
|
pci_dev_put(mci_pdev);
|
||||||
|
@ -331,7 +331,7 @@ static void i82975x_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct i82975x_error_info info;
|
struct i82975x_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
i82975x_get_error_info(mci, &info);
|
i82975x_get_error_info(mci, &info);
|
||||||
i82975x_process_error_info(mci, &info, 1);
|
i82975x_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -406,7 +406,7 @@ static void i82975x_init_csrows(struct mem_ctl_info *mci,
|
|||||||
*/
|
*/
|
||||||
if (csrow->nr_channels > 1)
|
if (csrow->nr_channels > 1)
|
||||||
cumul_size <<= 1;
|
cumul_size <<= 1;
|
||||||
debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index,
|
debugf3("(%d) cumul_size 0x%x\n", index,
|
||||||
cumul_size);
|
cumul_size);
|
||||||
|
|
||||||
nr_pages = cumul_size - last_cumul_size;
|
nr_pages = cumul_size - last_cumul_size;
|
||||||
@ -489,11 +489,11 @@ static int i82975x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
u8 c1drb[4];
|
u8 c1drb[4];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
pci_read_config_dword(pdev, I82975X_MCHBAR, &mchbar);
|
pci_read_config_dword(pdev, I82975X_MCHBAR, &mchbar);
|
||||||
if (!(mchbar & 1)) {
|
if (!(mchbar & 1)) {
|
||||||
debugf3("%s(): failed, MCHBAR disabled!\n", __func__);
|
debugf3("failed, MCHBAR disabled!\n");
|
||||||
goto fail0;
|
goto fail0;
|
||||||
}
|
}
|
||||||
mchbar &= 0xffffc000; /* bits 31:14 used for 16K window */
|
mchbar &= 0xffffc000; /* bits 31:14 used for 16K window */
|
||||||
@ -558,7 +558,7 @@ static int i82975x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
goto fail1;
|
goto fail1;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("%s(): init mci\n", __func__);
|
debugf3("init mci\n");
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_DDR2;
|
mci->mtype_cap = MEM_FLAG_DDR2;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
||||||
@ -569,7 +569,7 @@ static int i82975x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
mci->dev_name = pci_name(pdev);
|
mci->dev_name = pci_name(pdev);
|
||||||
mci->edac_check = i82975x_check;
|
mci->edac_check = i82975x_check;
|
||||||
mci->ctl_page_to_phys = NULL;
|
mci->ctl_page_to_phys = NULL;
|
||||||
debugf3("%s(): init pvt\n", __func__);
|
debugf3("init pvt\n");
|
||||||
pvt = (struct i82975x_pvt *) mci->pvt_info;
|
pvt = (struct i82975x_pvt *) mci->pvt_info;
|
||||||
pvt->mch_window = mch_window;
|
pvt->mch_window = mch_window;
|
||||||
i82975x_init_csrows(mci, pdev, mch_window);
|
i82975x_init_csrows(mci, pdev, mch_window);
|
||||||
@ -578,12 +578,12 @@ static int i82975x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
|
|
||||||
/* finalize this instance of memory controller with edac core */
|
/* finalize this instance of memory controller with edac core */
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail2;
|
goto fail2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail2:
|
fail2:
|
||||||
@ -601,7 +601,7 @@ static int __devinit i82975x_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (pci_enable_device(pdev) < 0)
|
if (pci_enable_device(pdev) < 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@ -619,7 +619,7 @@ static void __devexit i82975x_remove_one(struct pci_dev *pdev)
|
|||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
struct i82975x_pvt *pvt;
|
struct i82975x_pvt *pvt;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
mci = edac_mc_del_mc(&pdev->dev);
|
mci = edac_mc_del_mc(&pdev->dev);
|
||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
@ -655,7 +655,7 @@ static int __init i82975x_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -697,7 +697,7 @@ static int __init i82975x_init(void)
|
|||||||
|
|
||||||
static void __exit i82975x_exit(void)
|
static void __exit i82975x_exit(void)
|
||||||
{
|
{
|
||||||
debugf3("%s()\n", __func__);
|
debugf3("\n");
|
||||||
|
|
||||||
pci_unregister_driver(&i82975x_driver);
|
pci_unregister_driver(&i82975x_driver);
|
||||||
|
|
||||||
|
@ -280,7 +280,7 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *op)
|
|||||||
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_DR, ~0);
|
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_DR, ~0);
|
||||||
|
|
||||||
if (edac_pci_add_device(pci, pdata->edac_idx) > 0) {
|
if (edac_pci_add_device(pci, pdata->edac_idx) > 0) {
|
||||||
debugf3("%s(): failed edac_pci_add_device()\n", __func__);
|
debugf3("failed edac_pci_add_device()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +303,7 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
devres_remove_group(&op->dev, mpc85xx_pci_err_probe);
|
devres_remove_group(&op->dev, mpc85xx_pci_err_probe);
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
printk(KERN_INFO EDAC_MOD_STR " PCI err registered\n");
|
printk(KERN_INFO EDAC_MOD_STR " PCI err registered\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -321,7 +321,7 @@ static int mpc85xx_pci_err_remove(struct platform_device *op)
|
|||||||
struct edac_pci_ctl_info *pci = dev_get_drvdata(&op->dev);
|
struct edac_pci_ctl_info *pci = dev_get_drvdata(&op->dev);
|
||||||
struct mpc85xx_pci_pdata *pdata = pci->pvt_info;
|
struct mpc85xx_pci_pdata *pdata = pci->pvt_info;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_CAP_DR,
|
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_CAP_DR,
|
||||||
orig_pci_err_cap_dr);
|
orig_pci_err_cap_dr);
|
||||||
@ -582,7 +582,7 @@ static int __devinit mpc85xx_l2_err_probe(struct platform_device *op)
|
|||||||
pdata->edac_idx = edac_dev_idx++;
|
pdata->edac_idx = edac_dev_idx++;
|
||||||
|
|
||||||
if (edac_device_add_device(edac_dev) > 0) {
|
if (edac_device_add_device(edac_dev) > 0) {
|
||||||
debugf3("%s(): failed edac_device_add_device()\n", __func__);
|
debugf3("failed edac_device_add_device()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -610,7 +610,7 @@ static int __devinit mpc85xx_l2_err_probe(struct platform_device *op)
|
|||||||
|
|
||||||
devres_remove_group(&op->dev, mpc85xx_l2_err_probe);
|
devres_remove_group(&op->dev, mpc85xx_l2_err_probe);
|
||||||
|
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
printk(KERN_INFO EDAC_MOD_STR " L2 err registered\n");
|
printk(KERN_INFO EDAC_MOD_STR " L2 err registered\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -628,7 +628,7 @@ static int mpc85xx_l2_err_remove(struct platform_device *op)
|
|||||||
struct edac_device_ctl_info *edac_dev = dev_get_drvdata(&op->dev);
|
struct edac_device_ctl_info *edac_dev = dev_get_drvdata(&op->dev);
|
||||||
struct mpc85xx_l2_pdata *pdata = edac_dev->pvt_info;
|
struct mpc85xx_l2_pdata *pdata = edac_dev->pvt_info;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (edac_op_state == EDAC_OPSTATE_INT) {
|
if (edac_op_state == EDAC_OPSTATE_INT) {
|
||||||
out_be32(pdata->l2_vbase + MPC85XX_L2_ERRINTEN, 0);
|
out_be32(pdata->l2_vbase + MPC85XX_L2_ERRINTEN, 0);
|
||||||
@ -1037,7 +1037,7 @@ static int __devinit mpc85xx_mc_err_probe(struct platform_device *op)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("%s(): init mci\n", __func__);
|
debugf3("init mci\n");
|
||||||
mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_RDDR2 |
|
mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_RDDR2 |
|
||||||
MEM_FLAG_DDR | MEM_FLAG_DDR2;
|
MEM_FLAG_DDR | MEM_FLAG_DDR2;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
||||||
@ -1063,13 +1063,13 @@ static int __devinit mpc85xx_mc_err_probe(struct platform_device *op)
|
|||||||
out_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DETECT, ~0);
|
out_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DETECT, ~0);
|
||||||
|
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mpc85xx_create_sysfs_attributes(mci)) {
|
if (mpc85xx_create_sysfs_attributes(mci)) {
|
||||||
edac_mc_del_mc(mci->pdev);
|
edac_mc_del_mc(mci->pdev);
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1103,7 +1103,7 @@ static int __devinit mpc85xx_mc_err_probe(struct platform_device *op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
devres_remove_group(&op->dev, mpc85xx_mc_err_probe);
|
devres_remove_group(&op->dev, mpc85xx_mc_err_probe);
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
printk(KERN_INFO EDAC_MOD_STR " MC err registered\n");
|
printk(KERN_INFO EDAC_MOD_STR " MC err registered\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1121,7 +1121,7 @@ static int mpc85xx_mc_err_remove(struct platform_device *op)
|
|||||||
struct mem_ctl_info *mci = dev_get_drvdata(&op->dev);
|
struct mem_ctl_info *mci = dev_get_drvdata(&op->dev);
|
||||||
struct mpc85xx_mc_pdata *pdata = mci->pvt_info;
|
struct mpc85xx_mc_pdata *pdata = mci->pvt_info;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (edac_op_state == EDAC_OPSTATE_INT) {
|
if (edac_op_state == EDAC_OPSTATE_INT) {
|
||||||
out_be32(pdata->mc_vbase + MPC85XX_MC_ERR_INT_EN, 0);
|
out_be32(pdata->mc_vbase + MPC85XX_MC_ERR_INT_EN, 0);
|
||||||
|
@ -169,7 +169,7 @@ static int __devinit mv64x60_pci_err_probe(struct platform_device *pdev)
|
|||||||
MV64X60_PCIx_ERR_MASK_VAL);
|
MV64X60_PCIx_ERR_MASK_VAL);
|
||||||
|
|
||||||
if (edac_pci_add_device(pci, pdata->edac_idx) > 0) {
|
if (edac_pci_add_device(pci, pdata->edac_idx) > 0) {
|
||||||
debugf3("%s(): failed edac_pci_add_device()\n", __func__);
|
debugf3("failed edac_pci_add_device()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ static int __devinit mv64x60_pci_err_probe(struct platform_device *pdev)
|
|||||||
devres_remove_group(&pdev->dev, mv64x60_pci_err_probe);
|
devres_remove_group(&pdev->dev, mv64x60_pci_err_probe);
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ static int mv64x60_pci_err_remove(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct edac_pci_ctl_info *pci = platform_get_drvdata(pdev);
|
struct edac_pci_ctl_info *pci = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
edac_pci_del_device(&pdev->dev);
|
edac_pci_del_device(&pdev->dev);
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ static int __devinit mv64x60_sram_err_probe(struct platform_device *pdev)
|
|||||||
pdata->edac_idx = edac_dev_idx++;
|
pdata->edac_idx = edac_dev_idx++;
|
||||||
|
|
||||||
if (edac_device_add_device(edac_dev) > 0) {
|
if (edac_device_add_device(edac_dev) > 0) {
|
||||||
debugf3("%s(): failed edac_device_add_device()\n", __func__);
|
debugf3("failed edac_device_add_device()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,7 +363,7 @@ static int __devinit mv64x60_sram_err_probe(struct platform_device *pdev)
|
|||||||
devres_remove_group(&pdev->dev, mv64x60_sram_err_probe);
|
devres_remove_group(&pdev->dev, mv64x60_sram_err_probe);
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -379,7 +379,7 @@ static int mv64x60_sram_err_remove(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct edac_device_ctl_info *edac_dev = platform_get_drvdata(pdev);
|
struct edac_device_ctl_info *edac_dev = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
edac_device_del_device(&pdev->dev);
|
edac_device_del_device(&pdev->dev);
|
||||||
edac_device_free_ctl_info(edac_dev);
|
edac_device_free_ctl_info(edac_dev);
|
||||||
@ -531,7 +531,7 @@ static int __devinit mv64x60_cpu_err_probe(struct platform_device *pdev)
|
|||||||
pdata->edac_idx = edac_dev_idx++;
|
pdata->edac_idx = edac_dev_idx++;
|
||||||
|
|
||||||
if (edac_device_add_device(edac_dev) > 0) {
|
if (edac_device_add_device(edac_dev) > 0) {
|
||||||
debugf3("%s(): failed edac_device_add_device()\n", __func__);
|
debugf3("failed edac_device_add_device()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -558,7 +558,7 @@ static int __devinit mv64x60_cpu_err_probe(struct platform_device *pdev)
|
|||||||
devres_remove_group(&pdev->dev, mv64x60_cpu_err_probe);
|
devres_remove_group(&pdev->dev, mv64x60_cpu_err_probe);
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -574,7 +574,7 @@ static int mv64x60_cpu_err_remove(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct edac_device_ctl_info *edac_dev = platform_get_drvdata(pdev);
|
struct edac_device_ctl_info *edac_dev = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
edac_device_del_device(&pdev->dev);
|
edac_device_del_device(&pdev->dev);
|
||||||
edac_device_free_ctl_info(edac_dev);
|
edac_device_free_ctl_info(edac_dev);
|
||||||
@ -766,7 +766,7 @@ static int __devinit mv64x60_mc_err_probe(struct platform_device *pdev)
|
|||||||
goto err2;
|
goto err2;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("%s(): init mci\n", __func__);
|
debugf3("init mci\n");
|
||||||
mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_DDR;
|
mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_DDR;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
|
||||||
mci->edac_cap = EDAC_FLAG_SECDED;
|
mci->edac_cap = EDAC_FLAG_SECDED;
|
||||||
@ -790,7 +790,7 @@ static int __devinit mv64x60_mc_err_probe(struct platform_device *pdev)
|
|||||||
out_le32(pdata->mc_vbase + MV64X60_SDRAM_ERR_ECC_CNTL, ctl);
|
out_le32(pdata->mc_vbase + MV64X60_SDRAM_ERR_ECC_CNTL, ctl);
|
||||||
|
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -815,7 +815,7 @@ static int __devinit mv64x60_mc_err_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -831,7 +831,7 @@ static int mv64x60_mc_err_remove(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci = platform_get_drvdata(pdev);
|
struct mem_ctl_info *mci = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
edac_mc_del_mc(&pdev->dev);
|
edac_mc_del_mc(&pdev->dev);
|
||||||
edac_mc_free(mci);
|
edac_mc_free(mci);
|
||||||
|
@ -205,7 +205,7 @@ static void r82600_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct r82600_error_info info;
|
struct r82600_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
r82600_get_error_info(mci, &info);
|
r82600_get_error_info(mci, &info);
|
||||||
r82600_process_error_info(mci, &info, 1);
|
r82600_process_error_info(mci, &info, 1);
|
||||||
}
|
}
|
||||||
@ -236,13 +236,13 @@ static void r82600_init_csrows(struct mem_ctl_info *mci, struct pci_dev *pdev,
|
|||||||
/* find the DRAM Chip Select Base address and mask */
|
/* find the DRAM Chip Select Base address and mask */
|
||||||
pci_read_config_byte(pdev, R82600_DRBA + index, &drbar);
|
pci_read_config_byte(pdev, R82600_DRBA + index, &drbar);
|
||||||
|
|
||||||
debugf1("%s() Row=%d DRBA = %#0x\n", __func__, index, drbar);
|
debugf1("Row=%d DRBA = %#0x\n", index, drbar);
|
||||||
|
|
||||||
row_high_limit = ((u32) drbar << 24);
|
row_high_limit = ((u32) drbar << 24);
|
||||||
/* row_high_limit = ((u32)drbar << 24) | 0xffffffUL; */
|
/* row_high_limit = ((u32)drbar << 24) | 0xffffffUL; */
|
||||||
|
|
||||||
debugf1("%s() Row=%d, Boundary Address=%#0x, Last = %#0x\n",
|
debugf1("Row=%d, Boundary Address=%#0x, Last = %#0x\n",
|
||||||
__func__, index, row_high_limit, row_high_limit_last);
|
index, row_high_limit, row_high_limit_last);
|
||||||
|
|
||||||
/* Empty row [p.57] */
|
/* Empty row [p.57] */
|
||||||
if (row_high_limit == row_high_limit_last)
|
if (row_high_limit == row_high_limit_last)
|
||||||
@ -277,14 +277,13 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
u32 sdram_refresh_rate;
|
u32 sdram_refresh_rate;
|
||||||
struct r82600_error_info discard;
|
struct r82600_error_info discard;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
pci_read_config_byte(pdev, R82600_DRAMC, &dramcr);
|
pci_read_config_byte(pdev, R82600_DRAMC, &dramcr);
|
||||||
pci_read_config_dword(pdev, R82600_EAP, &eapr);
|
pci_read_config_dword(pdev, R82600_EAP, &eapr);
|
||||||
scrub_disabled = eapr & BIT(31);
|
scrub_disabled = eapr & BIT(31);
|
||||||
sdram_refresh_rate = dramcr & (BIT(0) | BIT(1));
|
sdram_refresh_rate = dramcr & (BIT(0) | BIT(1));
|
||||||
debugf2("%s(): sdram refresh rate = %#0x\n", __func__,
|
debugf2("sdram refresh rate = %#0x\n", sdram_refresh_rate);
|
||||||
sdram_refresh_rate);
|
debugf2("DRAMC register = %#0x\n", dramcr);
|
||||||
debugf2("%s(): DRAMC register = %#0x\n", __func__, dramcr);
|
|
||||||
layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
|
layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
|
||||||
layers[0].size = R82600_NR_CSROWS;
|
layers[0].size = R82600_NR_CSROWS;
|
||||||
layers[0].is_virt_csrow = true;
|
layers[0].is_virt_csrow = true;
|
||||||
@ -295,7 +294,7 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (mci == NULL)
|
if (mci == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("%s(): mci = %p\n", __func__, mci);
|
debugf0("mci = %p\n", mci);
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_DDR;
|
mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_DDR;
|
||||||
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED;
|
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED;
|
||||||
@ -311,8 +310,8 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
|
|
||||||
if (ecc_enabled(dramcr)) {
|
if (ecc_enabled(dramcr)) {
|
||||||
if (scrub_disabled)
|
if (scrub_disabled)
|
||||||
debugf3("%s(): mci = %p - Scrubbing disabled! EAP: "
|
debugf3("mci = %p - Scrubbing disabled! EAP: "
|
||||||
"%#0x\n", __func__, mci, eapr);
|
"%#0x\n", mci, eapr);
|
||||||
} else
|
} else
|
||||||
mci->edac_cap = EDAC_FLAG_NONE;
|
mci->edac_cap = EDAC_FLAG_NONE;
|
||||||
|
|
||||||
@ -329,15 +328,14 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
* type of memory controller. The ID is therefore hardcoded to 0.
|
* type of memory controller. The ID is therefore hardcoded to 0.
|
||||||
*/
|
*/
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("%s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
|
|
||||||
if (disable_hardware_scrub) {
|
if (disable_hardware_scrub) {
|
||||||
debugf3("%s(): Disabling Hardware Scrub (scrub on error)\n",
|
debugf3("Disabling Hardware Scrub (scrub on error)\n");
|
||||||
__func__);
|
|
||||||
pci_write_bits32(pdev, R82600_EAP, BIT(31), BIT(31));
|
pci_write_bits32(pdev, R82600_EAP, BIT(31), BIT(31));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,7 +350,7 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
__func__);
|
__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
debugf3("%s(): success\n", __func__);
|
debugf3("success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@ -364,7 +362,7 @@ static int r82600_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
static int __devinit r82600_init_one(struct pci_dev *pdev,
|
static int __devinit r82600_init_one(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *ent)
|
const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/* don't need to call pci_enable_device() */
|
/* don't need to call pci_enable_device() */
|
||||||
return r82600_probe1(pdev, ent->driver_data);
|
return r82600_probe1(pdev, ent->driver_data);
|
||||||
@ -374,7 +372,7 @@ static void __devexit r82600_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
if (r82600_pci)
|
if (r82600_pci)
|
||||||
edac_pci_release_generic_ctl(r82600_pci);
|
edac_pci_release_generic_ctl(r82600_pci);
|
||||||
|
@ -1064,7 +1064,7 @@ static void sbridge_put_devices(struct sbridge_dev *sbridge_dev)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
debugf0(__FILE__ ": %s()\n", __func__);
|
debugf0("\n");
|
||||||
for (i = 0; i < sbridge_dev->n_devs; i++) {
|
for (i = 0; i < sbridge_dev->n_devs; i++) {
|
||||||
struct pci_dev *pdev = sbridge_dev->pdev[i];
|
struct pci_dev *pdev = sbridge_dev->pdev[i];
|
||||||
if (!pdev)
|
if (!pdev)
|
||||||
@ -1592,8 +1592,7 @@ static void sbridge_unregister_mci(struct sbridge_dev *sbridge_dev)
|
|||||||
struct sbridge_pvt *pvt;
|
struct sbridge_pvt *pvt;
|
||||||
|
|
||||||
if (unlikely(!mci || !mci->pvt_info)) {
|
if (unlikely(!mci || !mci->pvt_info)) {
|
||||||
debugf0("MC: " __FILE__ ": %s(): dev = %p\n",
|
debugf0("MC: dev = %p\n", &sbridge_dev->pdev[0]->dev);
|
||||||
__func__, &sbridge_dev->pdev[0]->dev);
|
|
||||||
|
|
||||||
sbridge_printk(KERN_ERR, "Couldn't find mci handler\n");
|
sbridge_printk(KERN_ERR, "Couldn't find mci handler\n");
|
||||||
return;
|
return;
|
||||||
@ -1601,8 +1600,8 @@ static void sbridge_unregister_mci(struct sbridge_dev *sbridge_dev)
|
|||||||
|
|
||||||
pvt = mci->pvt_info;
|
pvt = mci->pvt_info;
|
||||||
|
|
||||||
debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
|
debugf0("MC: mci = %p, dev = %p\n",
|
||||||
__func__, mci, &sbridge_dev->pdev[0]->dev);
|
mci, &sbridge_dev->pdev[0]->dev);
|
||||||
|
|
||||||
mce_unregister_decode_chain(&sbridge_mce_dec);
|
mce_unregister_decode_chain(&sbridge_mce_dec);
|
||||||
|
|
||||||
@ -1640,8 +1639,8 @@ static int sbridge_register_mci(struct sbridge_dev *sbridge_dev)
|
|||||||
if (unlikely(!mci))
|
if (unlikely(!mci))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
|
debugf0("MC: mci = %p, dev = %p\n",
|
||||||
__func__, mci, &sbridge_dev->pdev[0]->dev);
|
mci, &sbridge_dev->pdev[0]->dev);
|
||||||
|
|
||||||
pvt = mci->pvt_info;
|
pvt = mci->pvt_info;
|
||||||
memset(pvt, 0, sizeof(*pvt));
|
memset(pvt, 0, sizeof(*pvt));
|
||||||
@ -1676,8 +1675,7 @@ static int sbridge_register_mci(struct sbridge_dev *sbridge_dev)
|
|||||||
|
|
||||||
/* add this new MC control structure to EDAC's list of MCs */
|
/* add this new MC control structure to EDAC's list of MCs */
|
||||||
if (unlikely(edac_mc_add_mc(mci))) {
|
if (unlikely(edac_mc_add_mc(mci))) {
|
||||||
debugf0("MC: " __FILE__
|
debugf0("MC: failed edac_mc_add_mc()\n");
|
||||||
": %s(): failed edac_mc_add_mc()\n", __func__);
|
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
goto fail0;
|
goto fail0;
|
||||||
}
|
}
|
||||||
@ -1755,7 +1753,7 @@ static void __devexit sbridge_remove(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct sbridge_dev *sbridge_dev;
|
struct sbridge_dev *sbridge_dev;
|
||||||
|
|
||||||
debugf0(__FILE__ ": %s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we have a trouble here: pdev value for removal will be wrong, since
|
* we have a trouble here: pdev value for removal will be wrong, since
|
||||||
@ -1804,7 +1802,7 @@ static int __init sbridge_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf2("MC: " __FILE__ ": %s()\n", __func__);
|
debugf2("\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -1826,7 +1824,7 @@ static int __init sbridge_init(void)
|
|||||||
*/
|
*/
|
||||||
static void __exit sbridge_exit(void)
|
static void __exit sbridge_exit(void)
|
||||||
{
|
{
|
||||||
debugf2("MC: " __FILE__ ": %s()\n", __func__);
|
debugf2("\n");
|
||||||
pci_unregister_driver(&sbridge_driver);
|
pci_unregister_driver(&sbridge_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ static void x38_check(struct mem_ctl_info *mci)
|
|||||||
{
|
{
|
||||||
struct x38_error_info info;
|
struct x38_error_info info;
|
||||||
|
|
||||||
debugf1("MC%d: %s()\n", mci->mc_idx, __func__);
|
debugf1("MC%d\n", mci->mc_idx);
|
||||||
x38_get_and_clear_error_info(mci, &info);
|
x38_get_and_clear_error_info(mci, &info);
|
||||||
x38_process_error_info(mci, &info);
|
x38_process_error_info(mci, &info);
|
||||||
}
|
}
|
||||||
@ -331,7 +331,7 @@ static int x38_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
bool stacked;
|
bool stacked;
|
||||||
void __iomem *window;
|
void __iomem *window;
|
||||||
|
|
||||||
debugf0("MC: %s()\n", __func__);
|
debugf0("MC:\n");
|
||||||
|
|
||||||
window = x38_map_mchbar(pdev);
|
window = x38_map_mchbar(pdev);
|
||||||
if (!window)
|
if (!window)
|
||||||
@ -352,7 +352,7 @@ static int x38_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
if (!mci)
|
if (!mci)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
debugf3("MC: %s(): init mci\n", __func__);
|
debugf3("MC: init mci\n");
|
||||||
|
|
||||||
mci->pdev = &pdev->dev;
|
mci->pdev = &pdev->dev;
|
||||||
mci->mtype_cap = MEM_FLAG_DDR2;
|
mci->mtype_cap = MEM_FLAG_DDR2;
|
||||||
@ -402,12 +402,12 @@ static int x38_probe1(struct pci_dev *pdev, int dev_idx)
|
|||||||
|
|
||||||
rc = -ENODEV;
|
rc = -ENODEV;
|
||||||
if (edac_mc_add_mc(mci)) {
|
if (edac_mc_add_mc(mci)) {
|
||||||
debugf3("MC: %s(): failed edac_mc_add_mc()\n", __func__);
|
debugf3("MC: failed edac_mc_add_mc()\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get this far and it's successful */
|
/* get this far and it's successful */
|
||||||
debugf3("MC: %s(): success\n", __func__);
|
debugf3("MC: success\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
@ -423,7 +423,7 @@ static int __devinit x38_init_one(struct pci_dev *pdev,
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
debugf0("MC: %s()\n", __func__);
|
debugf0("MC:\n");
|
||||||
|
|
||||||
if (pci_enable_device(pdev) < 0)
|
if (pci_enable_device(pdev) < 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@ -439,7 +439,7 @@ static void __devexit x38_remove_one(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct mem_ctl_info *mci;
|
struct mem_ctl_info *mci;
|
||||||
|
|
||||||
debugf0("%s()\n", __func__);
|
debugf0("\n");
|
||||||
|
|
||||||
mci = edac_mc_del_mc(&pdev->dev);
|
mci = edac_mc_del_mc(&pdev->dev);
|
||||||
if (!mci)
|
if (!mci)
|
||||||
@ -472,7 +472,7 @@ static int __init x38_init(void)
|
|||||||
{
|
{
|
||||||
int pci_rc;
|
int pci_rc;
|
||||||
|
|
||||||
debugf3("MC: %s()\n", __func__);
|
debugf3("MC:\n");
|
||||||
|
|
||||||
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
|
||||||
opstate_init();
|
opstate_init();
|
||||||
@ -513,7 +513,7 @@ static int __init x38_init(void)
|
|||||||
|
|
||||||
static void __exit x38_exit(void)
|
static void __exit x38_exit(void)
|
||||||
{
|
{
|
||||||
debugf3("MC: %s()\n", __func__);
|
debugf3("MC:\n");
|
||||||
|
|
||||||
pci_unregister_driver(&x38_driver);
|
pci_unregister_driver(&x38_driver);
|
||||||
if (!x38_registered) {
|
if (!x38_registered) {
|
||||||
|
Loading…
Reference in New Issue
Block a user