|
@@ -20,6 +20,7 @@
|
|
|
#include <linux/edac.h>
|
|
|
#include <linux/smp.h>
|
|
|
#include <linux/gfp.h>
|
|
|
+#include <linux/fsl/edac.h>
|
|
|
|
|
|
#include <linux/of_platform.h>
|
|
|
#include <linux/of_device.h>
|
|
@@ -238,10 +239,12 @@ static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id)
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
-int mpc85xx_pci_err_probe(struct platform_device *op)
|
|
|
+static int mpc85xx_pci_err_probe(struct platform_device *op)
|
|
|
{
|
|
|
struct edac_pci_ctl_info *pci;
|
|
|
struct mpc85xx_pci_pdata *pdata;
|
|
|
+ struct mpc85xx_edac_pci_plat_data *plat_data;
|
|
|
+ struct device_node *of_node;
|
|
|
struct resource r;
|
|
|
int res = 0;
|
|
|
|
|
@@ -266,7 +269,15 @@ int mpc85xx_pci_err_probe(struct platform_device *op)
|
|
|
pdata->name = "mpc85xx_pci_err";
|
|
|
pdata->irq = NO_IRQ;
|
|
|
|
|
|
- if (mpc85xx_pcie_find_capability(op->dev.of_node) > 0)
|
|
|
+ plat_data = op->dev.platform_data;
|
|
|
+ if (!plat_data) {
|
|
|
+ dev_err(&op->dev, "no platform data");
|
|
|
+ res = -ENXIO;
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+ of_node = plat_data->of_node;
|
|
|
+
|
|
|
+ if (mpc85xx_pcie_find_capability(of_node) > 0)
|
|
|
pdata->is_pcie = true;
|
|
|
|
|
|
dev_set_drvdata(&op->dev, pci);
|
|
@@ -284,7 +295,7 @@ int mpc85xx_pci_err_probe(struct platform_device *op)
|
|
|
|
|
|
pdata->edac_idx = edac_pci_idx++;
|
|
|
|
|
|
- res = of_address_to_resource(op->dev.of_node, 0, &r);
|
|
|
+ res = of_address_to_resource(of_node, 0, &r);
|
|
|
if (res) {
|
|
|
printk(KERN_ERR "%s: Unable to get resource for "
|
|
|
"PCI err regs\n", __func__);
|
|
@@ -339,7 +350,7 @@ int mpc85xx_pci_err_probe(struct platform_device *op)
|
|
|
}
|
|
|
|
|
|
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(of_node, 0);
|
|
|
res = devm_request_irq(&op->dev, pdata->irq,
|
|
|
mpc85xx_pci_isr,
|
|
|
IRQF_SHARED,
|
|
@@ -386,8 +397,22 @@ err:
|
|
|
devres_release_group(&op->dev, mpc85xx_pci_err_probe);
|
|
|
return res;
|
|
|
}
|
|
|
-EXPORT_SYMBOL(mpc85xx_pci_err_probe);
|
|
|
|
|
|
+static const struct platform_device_id mpc85xx_pci_err_match[] = {
|
|
|
+ {
|
|
|
+ .name = "mpc85xx-pci-edac"
|
|
|
+ },
|
|
|
+ {}
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_driver mpc85xx_pci_err_driver = {
|
|
|
+ .probe = mpc85xx_pci_err_probe,
|
|
|
+ .id_table = mpc85xx_pci_err_match,
|
|
|
+ .driver = {
|
|
|
+ .name = "mpc85xx_pci_err",
|
|
|
+ .suppress_bind_attrs = true,
|
|
|
+ },
|
|
|
+};
|
|
|
#endif /* CONFIG_PCI */
|
|
|
|
|
|
/**************************** L2 Err device ***************************/
|
|
@@ -1211,6 +1236,9 @@ static void __init mpc85xx_mc_clear_rfxe(void *data)
|
|
|
static struct platform_driver * const drivers[] = {
|
|
|
&mpc85xx_mc_err_driver,
|
|
|
&mpc85xx_l2_err_driver,
|
|
|
+#ifdef CONFIG_PCI
|
|
|
+ &mpc85xx_pci_err_driver,
|
|
|
+#endif
|
|
|
};
|
|
|
|
|
|
static int __init mpc85xx_mc_init(void)
|