Commit f87bd330 authored by Dave Jiang's avatar Dave Jiang Committed by Linus Torvalds

edac: mpc85xx fix pci ofdev 2nd pass

Convert PCI err device from platform to open firmware of_dev to comply
with powerpc schemes.

[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: default avatarDave Jiang <djiang@mvista.com>
Signed-off-by: default avatarDoug Thompson <dougthompson@xmission.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent fcb19171
...@@ -195,14 +195,15 @@ static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id) ...@@ -195,14 +195,15 @@ static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int __devinit mpc85xx_pci_err_probe(struct platform_device *pdev) static int __devinit mpc85xx_pci_err_probe(struct of_device *op,
const struct of_device_id *match)
{ {
struct edac_pci_ctl_info *pci; struct edac_pci_ctl_info *pci;
struct mpc85xx_pci_pdata *pdata; struct mpc85xx_pci_pdata *pdata;
struct resource *r; struct resource r;
int res = 0; int res = 0;
if (!devres_open_group(&pdev->dev, mpc85xx_pci_err_probe, GFP_KERNEL)) if (!devres_open_group(&op->dev, mpc85xx_pci_err_probe, GFP_KERNEL))
return -ENOMEM; return -ENOMEM;
pci = edac_pci_alloc_ctl_info(sizeof(*pdata), "mpc85xx_pci_err"); pci = edac_pci_alloc_ctl_info(sizeof(*pdata), "mpc85xx_pci_err");
...@@ -212,34 +213,37 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *pdev) ...@@ -212,34 +213,37 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *pdev)
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;
platform_set_drvdata(pdev, pci); dev_set_drvdata(&op->dev, pci);
pci->dev = &pdev->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 = pdev->dev.bus_id; pci->dev_name = op->dev.bus_id;
if (edac_op_state == EDAC_OPSTATE_POLL) if (edac_op_state == EDAC_OPSTATE_POLL)
pci->edac_check = mpc85xx_pci_check; pci->edac_check = mpc85xx_pci_check;
pdata->edac_idx = edac_pci_idx++; pdata->edac_idx = edac_pci_idx++;
r = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = of_address_to_resource(op->node, 0, &r);
if (!r) { if (res) {
printk(KERN_ERR "%s: Unable to get resource for " printk(KERN_ERR "%s: Unable to get resource for "
"PCI err regs\n", __func__); "PCI err regs\n", __func__);
goto err; goto err;
} }
if (!devm_request_mem_region(&pdev->dev, r->start, /* we only need the error registers */
r->end - r->start + 1, pdata->name)) { r.start += 0xe00;
if (!devm_request_mem_region(&op->dev, r.start,
r.end - r.start + 1, pdata->name)) {
printk(KERN_ERR "%s: Error while requesting mem region\n", printk(KERN_ERR "%s: Error while requesting mem region\n",
__func__); __func__);
res = -EBUSY; res = -EBUSY;
goto err; goto err;
} }
pdata->pci_vbase = devm_ioremap(&pdev->dev, r->start, pdata->pci_vbase = devm_ioremap(&op->dev, r.start,
r->end - r->start + 1); r.end - r.start + 1);
if (!pdata->pci_vbase) { if (!pdata->pci_vbase) {
printk(KERN_ERR "%s: Unable to setup PCI err regs\n", __func__); printk(KERN_ERR "%s: Unable to setup PCI err regs\n", __func__);
res = -ENOMEM; res = -ENOMEM;
...@@ -266,14 +270,15 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *pdev) ...@@ -266,14 +270,15 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *pdev)
} }
if (edac_op_state == EDAC_OPSTATE_INT) { if (edac_op_state == EDAC_OPSTATE_INT) {
pdata->irq = platform_get_irq(pdev, 0); pdata->irq = irq_of_parse_and_map(op->node, 0);
res = devm_request_irq(&pdev->dev, pdata->irq, res = devm_request_irq(&op->dev, pdata->irq,
mpc85xx_pci_isr, IRQF_DISABLED, mpc85xx_pci_isr, IRQF_DISABLED,
"[EDAC] PCI err", pci); "[EDAC] PCI err", pci);
if (res < 0) { if (res < 0) {
printk(KERN_ERR printk(KERN_ERR
"%s: Unable to requiest irq %d for " "%s: Unable to requiest irq %d for "
"MPC85xx PCI err\n", __func__, pdata->irq); "MPC85xx PCI err\n", __func__, pdata->irq);
irq_dispose_mapping(pdata->irq);
res = -ENODEV; res = -ENODEV;
goto err2; goto err2;
} }
...@@ -282,23 +287,23 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *pdev) ...@@ -282,23 +287,23 @@ static int __devinit mpc85xx_pci_err_probe(struct platform_device *pdev)
pdata->irq); pdata->irq);
} }
devres_remove_group(&pdev->dev, mpc85xx_pci_err_probe); devres_remove_group(&op->dev, mpc85xx_pci_err_probe);
debugf3("%s(): success\n", __func__); debugf3("%s(): success\n", __func__);
printk(KERN_INFO EDAC_MOD_STR " PCI err registered\n"); printk(KERN_INFO EDAC_MOD_STR " PCI err registered\n");
return 0; return 0;
err2: err2:
edac_pci_del_device(&pdev->dev); edac_pci_del_device(&op->dev);
err: err:
edac_pci_free_ctl_info(pci); edac_pci_free_ctl_info(pci);
devres_release_group(&pdev->dev, mpc85xx_pci_err_probe); devres_release_group(&op->dev, mpc85xx_pci_err_probe);
return res; return res;
} }
static int mpc85xx_pci_err_remove(struct platform_device *pdev) static int mpc85xx_pci_err_remove(struct of_device *op)
{ {
struct edac_pci_ctl_info *pci = platform_get_drvdata(pdev); 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("%s()\n", __func__);
...@@ -318,12 +323,26 @@ static int mpc85xx_pci_err_remove(struct platform_device *pdev) ...@@ -318,12 +323,26 @@ static int mpc85xx_pci_err_remove(struct platform_device *pdev)
return 0; return 0;
} }
static struct platform_driver mpc85xx_pci_err_driver = { static struct of_device_id mpc85xx_pci_err_of_match[] = {
{
.compatible = "fsl,mpc8540-pcix",
},
{
.compatible = "fsl,mpc8540-pci",
},
{},
};
static struct of_platform_driver mpc85xx_pci_err_driver = {
.owner = THIS_MODULE,
.name = "mpc85xx_pci_err",
.match_table = mpc85xx_pci_err_of_match,
.probe = mpc85xx_pci_err_probe, .probe = mpc85xx_pci_err_probe,
.remove = __devexit_p(mpc85xx_pci_err_remove), .remove = __devexit_p(mpc85xx_pci_err_remove),
.driver = { .driver = {
.name = "mpc85xx_pci_err", .name = "mpc85xx_pci_err",
} .owner = THIS_MODULE,
},
}; };
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI */
...@@ -1002,7 +1021,7 @@ static int __init mpc85xx_mc_init(void) ...@@ -1002,7 +1021,7 @@ static int __init mpc85xx_mc_init(void)
printk(KERN_WARNING EDAC_MOD_STR "L2 fails to register\n"); printk(KERN_WARNING EDAC_MOD_STR "L2 fails to register\n");
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
res = platform_driver_register(&mpc85xx_pci_err_driver); res = of_register_platform_driver(&mpc85xx_pci_err_driver);
if (res) if (res)
printk(KERN_WARNING EDAC_MOD_STR "PCI fails to register\n"); printk(KERN_WARNING EDAC_MOD_STR "PCI fails to register\n");
#endif #endif
...@@ -1025,7 +1044,7 @@ static void __exit mpc85xx_mc_exit(void) ...@@ -1025,7 +1044,7 @@ static void __exit mpc85xx_mc_exit(void)
{ {
mtspr(SPRN_HID1, orig_hid1); mtspr(SPRN_HID1, orig_hid1);
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
platform_driver_unregister(&mpc85xx_pci_err_driver); of_unregister_platform_driver(&mpc85xx_pci_err_driver);
#endif #endif
of_unregister_platform_driver(&mpc85xx_l2_err_driver); of_unregister_platform_driver(&mpc85xx_l2_err_driver);
of_unregister_platform_driver(&mpc85xx_mc_err_driver); of_unregister_platform_driver(&mpc85xx_mc_err_driver);
......
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