|
@@ -245,6 +245,18 @@ static void pci_parse_of_addrs(struct platform_device *op,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static void pci_init_dev_archdata(struct dev_archdata *sd, void *iommu,
|
|
|
|
|
+ void *stc, void *host_controller,
|
|
|
|
|
+ struct platform_device *op,
|
|
|
|
|
+ int numa_node)
|
|
|
|
|
+{
|
|
|
|
|
+ sd->iommu = iommu;
|
|
|
|
|
+ sd->stc = stc;
|
|
|
|
|
+ sd->host_controller = host_controller;
|
|
|
|
|
+ sd->op = op;
|
|
|
|
|
+ sd->numa_node = numa_node;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
|
|
static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
|
|
|
struct device_node *node,
|
|
struct device_node *node,
|
|
|
struct pci_bus *bus, int devfn)
|
|
struct pci_bus *bus, int devfn)
|
|
@@ -259,13 +271,10 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
|
|
|
if (!dev)
|
|
if (!dev)
|
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
+ op = of_find_device_by_node(node);
|
|
|
sd = &dev->dev.archdata;
|
|
sd = &dev->dev.archdata;
|
|
|
- sd->iommu = pbm->iommu;
|
|
|
|
|
- sd->stc = &pbm->stc;
|
|
|
|
|
- sd->host_controller = pbm;
|
|
|
|
|
- sd->op = op = of_find_device_by_node(node);
|
|
|
|
|
- sd->numa_node = pbm->numa_node;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ pci_init_dev_archdata(sd, pbm->iommu, &pbm->stc, pbm, op,
|
|
|
|
|
+ pbm->numa_node);
|
|
|
sd = &op->dev.archdata;
|
|
sd = &op->dev.archdata;
|
|
|
sd->iommu = pbm->iommu;
|
|
sd->iommu = pbm->iommu;
|
|
|
sd->stc = &pbm->stc;
|
|
sd->stc = &pbm->stc;
|
|
@@ -1003,9 +1012,13 @@ int pcibios_add_device(struct pci_dev *dev)
|
|
|
* Copy dev_archdata from PF to VF
|
|
* Copy dev_archdata from PF to VF
|
|
|
*/
|
|
*/
|
|
|
if (dev->is_virtfn) {
|
|
if (dev->is_virtfn) {
|
|
|
|
|
+ struct dev_archdata *psd;
|
|
|
|
|
+
|
|
|
pdev = dev->physfn;
|
|
pdev = dev->physfn;
|
|
|
- memcpy(&dev->dev.archdata, &pdev->dev.archdata,
|
|
|
|
|
- sizeof(struct dev_archdata));
|
|
|
|
|
|
|
+ psd = &pdev->dev.archdata;
|
|
|
|
|
+ pci_init_dev_archdata(&dev->dev.archdata, psd->iommu,
|
|
|
|
|
+ psd->stc, psd->host_controller, NULL,
|
|
|
|
|
+ psd->numa_node);
|
|
|
}
|
|
}
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|