Commit 4ae0ff606e848fa4957ebf8f97e5db5fdeec27be broke dma setup for cardbus devices such as sata_sil, rt2500 and ath5k. This patch restores the default dma ops for cardbus devices. Tested with sata_sil on a powerbook G4.
bz#537176 Signed-off-by: Roger Blofeld <blofel...@yahoo.com> --- The inline patch is whitespace damaged by this mailer. The attachment should be ok, and passes checkpatch.pl diff -up linux-2.6.30.ppc/arch/powerpc/platforms/powermac/setup.c.orig linux-2.6.30.ppc/arch/powerpc/platforms/powermac/setup.c --- linux-2.6.30.ppc/arch/powerpc/platforms/powermac/setup.c.orig 2009-06-09 22:05:27.000000000 -0500 +++ linux-2.6.30.ppc/arch/powerpc/platforms/powermac/setup.c 2009-11-29 21:47:15.000000000 -0600 @@ -514,6 +514,44 @@ static void __init pmac_init_early(void) #endif } +#ifdef CONFIG_CARDBUS +static int pmac_cardbus_notify(struct notifier_block *nb, unsigned long action, + void *data) +{ + struct device *dev = data; + struct device *parent; + struct pci_dev *pdev = to_pci_dev(dev); + + /* We are only interested in device addition */ + if (action != BUS_NOTIFY_ADD_DEVICE) + return 0; + + parent = pdev->dev.parent; + + if (!parent->archdata.of_node) + return 0; + + if (!of_device_is_compatible(parent->archdata.of_node, + "cardbus-bridge")) + return 0; + + /* We use the direct ops for cardbus */ + dev->archdata.dma_ops = &dma_direct_ops; + + return 0; +} + +static struct notifier_block cardbus_notifier = { + .notifier_call = pmac_cardbus_notify, +}; + +static int __init pmac_cardbus_init(void) +{ + return bus_register_notifier(&pci_bus_type, &cardbus_notifier); +} +machine_device_initcall(powermac, pmac_cardbus_init); +#endif + static int __init pmac_declare_of_platform_devices(void) { struct device_node *np;
powermac-cardbus-dma-notifier.patch
Description: Binary data
_______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev