Message ID | 1590493749-13823-3-git-send-email-zhangfei.gao@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Introduce PCI_FIXUP_IOMMU | expand |
On Tue, May 26, 2020 at 07:49:09PM +0800, Zhangfei Gao wrote: > Calling pci_fixup_iommu in iommu_fwspec_init, which alloc > iommu_fwnode. Some platform devices appear as PCI but are > actually on the AMBA bus, and they need fixup in > drivers/pci/quirks.c handling iommu_fwnode. > So calling pci_fixup_iommu after iommu_fwnode is allocated. > > Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org> > --- > drivers/iommu/iommu.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c > index 7b37542..fb84c42 100644 > --- a/drivers/iommu/iommu.c > +++ b/drivers/iommu/iommu.c > @@ -2418,6 +2418,10 @@ int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode, > fwspec->iommu_fwnode = iommu_fwnode; > fwspec->ops = ops; > dev_iommu_fwspec_set(dev, fwspec); > + > + if (dev_is_pci(dev)) > + pci_fixup_device(pci_fixup_iommu, to_pci_dev(dev)); Why can't the caller do this as it "knows" it is a PCI device at that point in time, right? thanks, greg k-h
On 2020/5/27 下午5:01, Greg Kroah-Hartman wrote: > On Tue, May 26, 2020 at 07:49:09PM +0800, Zhangfei Gao wrote: >> Calling pci_fixup_iommu in iommu_fwspec_init, which alloc >> iommu_fwnode. Some platform devices appear as PCI but are >> actually on the AMBA bus, and they need fixup in >> drivers/pci/quirks.c handling iommu_fwnode. >> So calling pci_fixup_iommu after iommu_fwnode is allocated. >> >> Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org> >> --- >> drivers/iommu/iommu.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c >> index 7b37542..fb84c42 100644 >> --- a/drivers/iommu/iommu.c >> +++ b/drivers/iommu/iommu.c >> @@ -2418,6 +2418,10 @@ int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode, >> fwspec->iommu_fwnode = iommu_fwnode; >> fwspec->ops = ops; >> dev_iommu_fwspec_set(dev, fwspec); >> + >> + if (dev_is_pci(dev)) >> + pci_fixup_device(pci_fixup_iommu, to_pci_dev(dev)); > Why can't the caller do this as it "knows" it is a PCI device at that > point in time, right? Putting fixup here is because 1. iommu_fwspec has been allocated 2. iommu_fwspec_init will be called by of_pci_iommu_init and iort_pci_iommu_init, covering both acpi and dt Thanks
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 7b37542..fb84c42 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -2418,6 +2418,10 @@ int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode, fwspec->iommu_fwnode = iommu_fwnode; fwspec->ops = ops; dev_iommu_fwspec_set(dev, fwspec); + + if (dev_is_pci(dev)) + pci_fixup_device(pci_fixup_iommu, to_pci_dev(dev)); + return 0; } EXPORT_SYMBOL_GPL(iommu_fwspec_init);
Calling pci_fixup_iommu in iommu_fwspec_init, which alloc iommu_fwnode. Some platform devices appear as PCI but are actually on the AMBA bus, and they need fixup in drivers/pci/quirks.c handling iommu_fwnode. So calling pci_fixup_iommu after iommu_fwnode is allocated. Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org> --- drivers/iommu/iommu.c | 4 ++++ 1 file changed, 4 insertions(+)