sparc64: Propagate PCI device archdata into OF device tree for EBUS.
authorDavid S. Miller <davem@davemloft.net>
Sat, 30 Aug 2008 05:42:34 +0000 (22:42 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 30 Aug 2008 05:42:34 +0000 (22:42 -0700)
In order to convert EBUS drivers doing DMA into pure OF drivers,
we need the of_device->dev.archdata setup properly.

EBUS instances that can provide DMA for device nodes sit on PCI,
so detect and propagate the information there.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/pci.c

index 9bb4b8cbcacbb437bd9af41d07aa7f9b237ff8eb..71d423a1c17a827059700073bd161fce32949d6e 100644 (file)
@@ -337,6 +337,7 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
                                  struct pci_bus *bus, int devfn)
 {
        struct dev_archdata *sd;
+       struct of_device *op;
        struct pci_dev *dev;
        const char *type;
        u32 class;
@@ -350,14 +351,17 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
        sd->stc = &pbm->stc;
        sd->host_controller = pbm;
        sd->prom_node = node;
-       sd->op = of_find_device_by_node(node);
+       sd->op = op = of_find_device_by_node(node);
        sd->numa_node = pbm->numa_node;
 
-       sd = &sd->op->dev.archdata;
+       sd = &op->dev.archdata;
        sd->iommu = pbm->iommu;
        sd->stc = &pbm->stc;
        sd->numa_node = pbm->numa_node;
 
+       if (!strcmp(node->name, "ebus"))
+               of_propagate_archdata(op);
+
        type = of_get_property(node, "device_type", NULL);
        if (type == NULL)
                type = "";