mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-31 08:04:55 +00:00
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: Dave Jiang <djiang@mvista.com> Signed-off-by: Doug Thompson <dougthompson@xmission.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
fcb19171d1
commit
f87bd330ed
@ -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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user