Commit 09854dde authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'edac_for_3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp

Pull EDAC updates from Borislav Petkov:
 - mpc85xx PCIe error interrupt support
 - misc small enhancements/fixes all over the place.

* tag 'edac_for_3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
  EDAC: Don't try to cancel workqueue when it's never setup
  e752x_edac: Fix pci_dev usage count
  sb_edac: Mark get_mci_for_node_id as static
  EDAC: Mark edac_create_debug_nodes as static
  amd64_edac: Remove "amd64" prefix from static functions
  amd64_edac: Simplify code around decode_bus_error
  amd64_edac: Mark amd64_decode_bus_error as static
  EDAC: Remove DEFINE_PCI_DEVICE_TABLE macro
  amd64_edac: Fix condition to verify max channels allowed for F15 M30h
  edac/85xx: Add PCIe error interrupt edac support
parents a1a3b3ef 881f0fce
This diff is collapsed.
...@@ -333,7 +333,7 @@ static void amd76x_remove_one(struct pci_dev *pdev) ...@@ -333,7 +333,7 @@ static void amd76x_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(amd76x_pci_tbl) = { static const struct pci_device_id amd76x_pci_tbl[] = {
{ {
PCI_VEND_DEV(AMD, FE_GATE_700C), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(AMD, FE_GATE_700C), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
AMD762}, AMD762},
......
...@@ -1182,9 +1182,11 @@ static int e752x_get_devs(struct pci_dev *pdev, int dev_idx, ...@@ -1182,9 +1182,11 @@ static int e752x_get_devs(struct pci_dev *pdev, int dev_idx,
pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL,
pvt->dev_info->err_dev, pvt->bridge_ck); pvt->dev_info->err_dev, pvt->bridge_ck);
if (pvt->bridge_ck == NULL) if (pvt->bridge_ck == NULL) {
pvt->bridge_ck = pci_scan_single_device(pdev->bus, pvt->bridge_ck = pci_scan_single_device(pdev->bus,
PCI_DEVFN(0, 1)); PCI_DEVFN(0, 1));
pci_dev_get(pvt->bridge_ck);
}
if (pvt->bridge_ck == NULL) { if (pvt->bridge_ck == NULL) {
e752x_printk(KERN_ERR, "error reporting device not found:" e752x_printk(KERN_ERR, "error reporting device not found:"
...@@ -1421,7 +1423,7 @@ static void e752x_remove_one(struct pci_dev *pdev) ...@@ -1421,7 +1423,7 @@ static void e752x_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(e752x_pci_tbl) = { static const struct pci_device_id e752x_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, 7520_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, 7520_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
E7520}, E7520},
......
...@@ -555,7 +555,7 @@ static void e7xxx_remove_one(struct pci_dev *pdev) ...@@ -555,7 +555,7 @@ static void e7xxx_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(e7xxx_pci_tbl) = { static const struct pci_device_id e7xxx_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, 7205_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, 7205_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
E7205}, E7205},
......
...@@ -437,6 +437,9 @@ void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev) ...@@ -437,6 +437,9 @@ void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev)
{ {
int status; int status;
if (!edac_dev->edac_check)
return;
status = cancel_delayed_work(&edac_dev->work); status = cancel_delayed_work(&edac_dev->work);
if (status == 0) { if (status == 0) {
/* workq instance might be running, wait for it */ /* workq instance might be running, wait for it */
......
...@@ -914,7 +914,7 @@ void __exit edac_debugfs_exit(void) ...@@ -914,7 +914,7 @@ void __exit edac_debugfs_exit(void)
debugfs_remove(edac_debugfs); debugfs_remove(edac_debugfs);
} }
int edac_create_debug_nodes(struct mem_ctl_info *mci) static int edac_create_debug_nodes(struct mem_ctl_info *mci)
{ {
struct dentry *d, *parent; struct dentry *d, *parent;
char name[80]; char name[80];
......
...@@ -487,7 +487,7 @@ static void i3000_remove_one(struct pci_dev *pdev) ...@@ -487,7 +487,7 @@ static void i3000_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(i3000_pci_tbl) = { static const struct pci_device_id i3000_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, 3000_HB), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, 3000_HB), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
I3000}, I3000},
......
...@@ -466,7 +466,7 @@ static void i3200_remove_one(struct pci_dev *pdev) ...@@ -466,7 +466,7 @@ static void i3200_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(i3200_pci_tbl) = { static const struct pci_device_id i3200_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, 3200_HB), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, 3200_HB), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
I3200}, I3200},
......
...@@ -1530,7 +1530,7 @@ static void i5000_remove_one(struct pci_dev *pdev) ...@@ -1530,7 +1530,7 @@ static void i5000_remove_one(struct pci_dev *pdev)
* *
* The "E500P" device is the first device supported. * The "E500P" device is the first device supported.
*/ */
static DEFINE_PCI_DEVICE_TABLE(i5000_pci_tbl) = { static const struct pci_device_id i5000_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_I5000_DEV16), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_I5000_DEV16),
.driver_data = I5000P}, .driver_data = I5000P},
......
...@@ -1213,7 +1213,7 @@ static void i5100_remove_one(struct pci_dev *pdev) ...@@ -1213,7 +1213,7 @@ static void i5100_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(i5100_pci_tbl) = { static const struct pci_device_id i5100_pci_tbl[] = {
/* Device 16, Function 0, Channel 0 Memory Map, Error Flag/Mask, ... */ /* Device 16, Function 0, Channel 0 Memory Map, Error Flag/Mask, ... */
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5100_16) }, { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5100_16) },
{ 0, } { 0, }
......
...@@ -1416,7 +1416,7 @@ static void i5400_remove_one(struct pci_dev *pdev) ...@@ -1416,7 +1416,7 @@ static void i5400_remove_one(struct pci_dev *pdev)
* *
* The "E500P" device is the first device supported. * The "E500P" device is the first device supported.
*/ */
static DEFINE_PCI_DEVICE_TABLE(i5400_pci_tbl) = { static const struct pci_device_id i5400_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5400_ERR)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5400_ERR)},
{0,} /* 0 terminated list. */ {0,} /* 0 terminated list. */
}; };
......
...@@ -1160,7 +1160,7 @@ static void i7300_remove_one(struct pci_dev *pdev) ...@@ -1160,7 +1160,7 @@ static void i7300_remove_one(struct pci_dev *pdev)
* *
* Has only 8086:360c PCI ID * Has only 8086:360c PCI ID
*/ */
static DEFINE_PCI_DEVICE_TABLE(i7300_pci_tbl) = { static const struct pci_device_id i7300_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_I7300_MCH_ERR)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_I7300_MCH_ERR)},
{0,} /* 0 terminated list. */ {0,} /* 0 terminated list. */
}; };
......
...@@ -394,7 +394,7 @@ static const struct pci_id_table pci_dev_table[] = { ...@@ -394,7 +394,7 @@ static const struct pci_id_table pci_dev_table[] = {
/* /*
* pci_device_id table for which devices we are looking for * pci_device_id table for which devices we are looking for
*/ */
static DEFINE_PCI_DEVICE_TABLE(i7core_pci_tbl) = { static const struct pci_device_id i7core_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_X58_HUB_MGMT)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_X58_HUB_MGMT)},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_LINK0)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_LINK0)},
{0,} /* 0 terminated list. */ {0,} /* 0 terminated list. */
......
...@@ -386,7 +386,7 @@ static void i82443bxgx_edacmc_remove_one(struct pci_dev *pdev) ...@@ -386,7 +386,7 @@ static void i82443bxgx_edacmc_remove_one(struct pci_dev *pdev)
EXPORT_SYMBOL_GPL(i82443bxgx_edacmc_remove_one); EXPORT_SYMBOL_GPL(i82443bxgx_edacmc_remove_one);
static DEFINE_PCI_DEVICE_TABLE(i82443bxgx_pci_tbl) = { static const struct pci_device_id i82443bxgx_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0)},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2)},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_0)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443GX_0)},
......
...@@ -288,7 +288,7 @@ static void i82860_remove_one(struct pci_dev *pdev) ...@@ -288,7 +288,7 @@ static void i82860_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(i82860_pci_tbl) = { static const struct pci_device_id i82860_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, 82860_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, 82860_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
I82860}, I82860},
......
...@@ -527,7 +527,7 @@ static void i82875p_remove_one(struct pci_dev *pdev) ...@@ -527,7 +527,7 @@ static void i82875p_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(i82875p_pci_tbl) = { static const struct pci_device_id i82875p_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, 82875_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, 82875_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
I82875P}, I82875P},
......
...@@ -628,7 +628,7 @@ static void i82975x_remove_one(struct pci_dev *pdev) ...@@ -628,7 +628,7 @@ static void i82975x_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(i82975x_pci_tbl) = { static const struct pci_device_id i82975x_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, 82975_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, 82975_0), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
I82975X I82975X
......
/* /*
* Freescale MPC85xx Memory Controller kenel module * Freescale MPC85xx Memory Controller kenel module
* *
* Parts Copyrighted (c) 2013 by Freescale Semiconductor, Inc.
*
* Author: Dave Jiang <djiang@mvista.com> * Author: Dave Jiang <djiang@mvista.com>
* *
* 2006-2007 (c) MontaVista Software, Inc. This file is licensed under * 2006-2007 (c) MontaVista Software, Inc. This file is licensed under
...@@ -196,6 +198,42 @@ static void mpc85xx_pci_check(struct edac_pci_ctl_info *pci) ...@@ -196,6 +198,42 @@ static void mpc85xx_pci_check(struct edac_pci_ctl_info *pci)
edac_pci_handle_npe(pci, pci->ctl_name); edac_pci_handle_npe(pci, pci->ctl_name);
} }
static void mpc85xx_pcie_check(struct edac_pci_ctl_info *pci)
{
struct mpc85xx_pci_pdata *pdata = pci->pvt_info;
u32 err_detect;
err_detect = in_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_DR);
pr_err("PCIe error(s) detected\n");
pr_err("PCIe ERR_DR register: 0x%08x\n", err_detect);
pr_err("PCIe ERR_CAP_STAT register: 0x%08x\n",
in_be32(pdata->pci_vbase + MPC85XX_PCI_GAS_TIMR));
pr_err("PCIe ERR_CAP_R0 register: 0x%08x\n",
in_be32(pdata->pci_vbase + MPC85XX_PCIE_ERR_CAP_R0));
pr_err("PCIe ERR_CAP_R1 register: 0x%08x\n",
in_be32(pdata->pci_vbase + MPC85XX_PCIE_ERR_CAP_R1));
pr_err("PCIe ERR_CAP_R2 register: 0x%08x\n",
in_be32(pdata->pci_vbase + MPC85XX_PCIE_ERR_CAP_R2));
pr_err("PCIe ERR_CAP_R3 register: 0x%08x\n",
in_be32(pdata->pci_vbase + MPC85XX_PCIE_ERR_CAP_R3));
/* clear error bits */
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_DR, err_detect);
}
static int mpc85xx_pcie_find_capability(struct device_node *np)
{
struct pci_controller *hose;
if (!np)
return -EINVAL;
hose = pci_find_hose_for_OF_device(np);
return early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP);
}
static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id) static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id)
{ {
struct edac_pci_ctl_info *pci = dev_id; struct edac_pci_ctl_info *pci = dev_id;
...@@ -207,6 +245,9 @@ static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id) ...@@ -207,6 +245,9 @@ static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id)
if (!err_detect) if (!err_detect)
return IRQ_NONE; return IRQ_NONE;
if (pdata->is_pcie)
mpc85xx_pcie_check(pci);
else
mpc85xx_pci_check(pci); mpc85xx_pci_check(pci);
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -239,14 +280,22 @@ int mpc85xx_pci_err_probe(struct platform_device *op) ...@@ -239,14 +280,22 @@ int mpc85xx_pci_err_probe(struct platform_device *op)
pdata = pci->pvt_info; pdata = pci->pvt_info;
pdata->name = "mpc85xx_pci_err"; pdata->name = "mpc85xx_pci_err";
pdata->irq = NO_IRQ; pdata->irq = NO_IRQ;
if (mpc85xx_pcie_find_capability(op->dev.of_node) > 0)
pdata->is_pcie = true;
dev_set_drvdata(&op->dev, pci); dev_set_drvdata(&op->dev, pci);
pci->dev = &op->dev; pci->dev = &op->dev;
pci->mod_name = EDAC_MOD_STR; pci->mod_name = EDAC_MOD_STR;
pci->ctl_name = pdata->name; pci->ctl_name = pdata->name;
pci->dev_name = dev_name(&op->dev); pci->dev_name = dev_name(&op->dev);
if (edac_op_state == EDAC_OPSTATE_POLL) if (edac_op_state == EDAC_OPSTATE_POLL) {
if (pdata->is_pcie)
pci->edac_check = mpc85xx_pcie_check;
else
pci->edac_check = mpc85xx_pci_check; pci->edac_check = mpc85xx_pci_check;
}
pdata->edac_idx = edac_pci_idx++; pdata->edac_idx = edac_pci_idx++;
...@@ -275,16 +324,26 @@ int mpc85xx_pci_err_probe(struct platform_device *op) ...@@ -275,16 +324,26 @@ int mpc85xx_pci_err_probe(struct platform_device *op)
goto err; goto err;
} }
if (pdata->is_pcie) {
orig_pci_err_cap_dr =
in_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_ADDR);
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_ADDR, ~0);
orig_pci_err_en =
in_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_EN);
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_EN, 0);
} else {
orig_pci_err_cap_dr = orig_pci_err_cap_dr =
in_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_CAP_DR); in_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_CAP_DR);
/* PCI master abort is expected during config cycles */ /* PCI master abort is expected during config cycles */
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_CAP_DR, 0x40); out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_CAP_DR, 0x40);
orig_pci_err_en = in_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_EN); orig_pci_err_en =
in_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_EN);
/* disable master abort reporting */ /* disable master abort reporting */
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_EN, ~0x40); out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_EN, ~0x40);
}
/* clear error bits */ /* clear error bits */
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_DR, ~0); out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_DR, ~0);
...@@ -297,7 +356,8 @@ int mpc85xx_pci_err_probe(struct platform_device *op) ...@@ -297,7 +356,8 @@ int mpc85xx_pci_err_probe(struct platform_device *op)
if (edac_op_state == EDAC_OPSTATE_INT) { if (edac_op_state == EDAC_OPSTATE_INT) {
pdata->irq = irq_of_parse_and_map(op->dev.of_node, 0); pdata->irq = irq_of_parse_and_map(op->dev.of_node, 0);
res = devm_request_irq(&op->dev, pdata->irq, res = devm_request_irq(&op->dev, pdata->irq,
mpc85xx_pci_isr, IRQF_DISABLED, mpc85xx_pci_isr,
IRQF_DISABLED | IRQF_SHARED,
"[EDAC] PCI err", pci); "[EDAC] PCI err", pci);
if (res < 0) { if (res < 0) {
printk(KERN_ERR printk(KERN_ERR
...@@ -312,6 +372,22 @@ int mpc85xx_pci_err_probe(struct platform_device *op) ...@@ -312,6 +372,22 @@ int mpc85xx_pci_err_probe(struct platform_device *op)
pdata->irq); pdata->irq);
} }
if (pdata->is_pcie) {
/*
* Enable all PCIe error interrupt & error detect except invalid
* PEX_CONFIG_ADDR/PEX_CONFIG_DATA access interrupt generation
* enable bit and invalid PEX_CONFIG_ADDR/PEX_CONFIG_DATA access
* detection enable bit. Because PCIe bus code to initialize and
* configure these PCIe devices on booting will use some invalid
* PEX_CONFIG_ADDR/PEX_CONFIG_DATA, edac driver prints the much
* notice information. So disable this detect to fix ugly print.
*/
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_EN, ~0
& ~PEX_ERR_ICCAIE_EN_BIT);
out_be32(pdata->pci_vbase + MPC85XX_PCI_ERR_ADDR, 0
| PEX_ERR_ICCAD_DISR_BIT);
}
devres_remove_group(&op->dev, mpc85xx_pci_err_probe); devres_remove_group(&op->dev, mpc85xx_pci_err_probe);
edac_dbg(3, "success\n"); edac_dbg(3, "success\n");
printk(KERN_INFO EDAC_MOD_STR " PCI err registered\n"); printk(KERN_INFO EDAC_MOD_STR " PCI err registered\n");
......
...@@ -134,13 +134,19 @@ ...@@ -134,13 +134,19 @@
#define MPC85XX_PCI_ERR_DR 0x0000 #define MPC85XX_PCI_ERR_DR 0x0000
#define MPC85XX_PCI_ERR_CAP_DR 0x0004 #define MPC85XX_PCI_ERR_CAP_DR 0x0004
#define MPC85XX_PCI_ERR_EN 0x0008 #define MPC85XX_PCI_ERR_EN 0x0008
#define PEX_ERR_ICCAIE_EN_BIT 0x00020000
#define MPC85XX_PCI_ERR_ATTRIB 0x000c #define MPC85XX_PCI_ERR_ATTRIB 0x000c
#define MPC85XX_PCI_ERR_ADDR 0x0010 #define MPC85XX_PCI_ERR_ADDR 0x0010
#define PEX_ERR_ICCAD_DISR_BIT 0x00020000
#define MPC85XX_PCI_ERR_EXT_ADDR 0x0014 #define MPC85XX_PCI_ERR_EXT_ADDR 0x0014
#define MPC85XX_PCI_ERR_DL 0x0018 #define MPC85XX_PCI_ERR_DL 0x0018
#define MPC85XX_PCI_ERR_DH 0x001c #define MPC85XX_PCI_ERR_DH 0x001c
#define MPC85XX_PCI_GAS_TIMR 0x0020 #define MPC85XX_PCI_GAS_TIMR 0x0020
#define MPC85XX_PCI_PCIX_TIMR 0x0024 #define MPC85XX_PCI_PCIX_TIMR 0x0024
#define MPC85XX_PCIE_ERR_CAP_R0 0x0028
#define MPC85XX_PCIE_ERR_CAP_R1 0x002c
#define MPC85XX_PCIE_ERR_CAP_R2 0x0030
#define MPC85XX_PCIE_ERR_CAP_R3 0x0034
struct mpc85xx_mc_pdata { struct mpc85xx_mc_pdata {
char *name; char *name;
...@@ -158,6 +164,7 @@ struct mpc85xx_l2_pdata { ...@@ -158,6 +164,7 @@ struct mpc85xx_l2_pdata {
struct mpc85xx_pci_pdata { struct mpc85xx_pci_pdata {
char *name; char *name;
bool is_pcie;
int edac_idx; int edac_idx;
void __iomem *pci_vbase; void __iomem *pci_vbase;
int irq; int irq;
......
...@@ -383,7 +383,7 @@ static void r82600_remove_one(struct pci_dev *pdev) ...@@ -383,7 +383,7 @@ static void r82600_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(r82600_pci_tbl) = { static const struct pci_device_id r82600_pci_tbl[] = {
{ {
PCI_DEVICE(PCI_VENDOR_ID_RADISYS, R82600_BRIDGE_ID) PCI_DEVICE(PCI_VENDOR_ID_RADISYS, R82600_BRIDGE_ID)
}, },
......
...@@ -461,7 +461,7 @@ static const struct pci_id_table pci_dev_descr_ibridge_table[] = { ...@@ -461,7 +461,7 @@ static const struct pci_id_table pci_dev_descr_ibridge_table[] = {
/* /*
* pci_device_id table for which devices we are looking for * pci_device_id table for which devices we are looking for
*/ */
static DEFINE_PCI_DEVICE_TABLE(sbridge_pci_tbl) = { static const struct pci_device_id sbridge_pci_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TA)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TA)},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA0_TA)}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA0_TA)},
{0,} /* 0 terminated list. */ {0,} /* 0 terminated list. */
...@@ -915,7 +915,7 @@ static void get_memory_layout(const struct mem_ctl_info *mci) ...@@ -915,7 +915,7 @@ static void get_memory_layout(const struct mem_ctl_info *mci)
} }
} }
struct mem_ctl_info *get_mci_for_node_id(u8 node_id) static struct mem_ctl_info *get_mci_for_node_id(u8 node_id)
{ {
struct sbridge_dev *sbridge_dev; struct sbridge_dev *sbridge_dev;
......
...@@ -448,7 +448,7 @@ static void x38_remove_one(struct pci_dev *pdev) ...@@ -448,7 +448,7 @@ static void x38_remove_one(struct pci_dev *pdev)
edac_mc_free(mci); edac_mc_free(mci);
} }
static DEFINE_PCI_DEVICE_TABLE(x38_pci_tbl) = { static const struct pci_device_id x38_pci_tbl[] = {
{ {
PCI_VEND_DEV(INTEL, X38_HB), PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_VEND_DEV(INTEL, X38_HB), PCI_ANY_ID, PCI_ANY_ID, 0, 0,
X38}, X38},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment