Subject: Re: [PATCH 2/2] powerpc: MPC85xx EDAC device driver

From: Arnd Bergmann <[email-masked]>
Date: Sun, 29 Jul 2007 16:06:21 +0200

On Friday 27 July 2007, Dave Jiang wrote:
> +static struct of_device_id mpc85xx_pci_err_of_match[] = {
> +       {
> +        .type = "pci",
> +        .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,
> +       .remove = mpc85xx_pci_err_remove,
> +       .driver = {
> +                  .name = "mpc85xx_pci_err",
> +                  .owner = THIS_MODULE,
> +                  },
> +};

This is  a little problematic, if we want to make the PCI bus implementation
use the PCI code from arch/powerpc/kernel/of_platform.c in the future.
Right now this is not possible, because that code is still 64-bit only,
but that may change in the future. Since only one driver can bind
to the pci host bridge device, the mpc85xx_pci_err driver would conflict
with the PCI driver itself, which you probably don't intend.

I'd suggest either to integrate EDAC into the 85xx specific PCI code,
or to have an extra device in the device tree for this.

> +       res = of_register_platform_driver(&mpc85xx_mc_err_driver) ? : res;
> +
> +       res = of_register_platform_driver(&mpc85xx_l2_err_driver) ? : res;
> +
> +#ifdef CONFIG_PCI
> +       res = of_register_platform_driver(&mpc85xx_pci_err_driver) ? : res;
> +#endif
> +
> +       /*
> +        * need to clear HID1[RFXE] to disable machine check int
> +        * so we can catch it
> +        */
> +       if (edac_op_state == EDAC_OPSTATE_INT) {
> +               orig_hid1 = mfspr(SPRN_HID1);
> +
> +               mtspr(SPRN_HID1, (orig_hid1 & ~0x20000));
> +       }
> +
> +       return res;
> +}

The error handling could use some improvement here. In particular, you should
unregister the buses in the failure path, maybe you need to clean up other
parts as well.

	Arnd <><