iommu/of: Fix pci_request_acs() before enumerating PCI devices
When booting with devicetree, the pci_request_acs() is called after the
enumeration and initialization of PCI devices, thus the ACS is not
enabled. And ACS should be enabled when IOMMU is detected for the
PCI host bridge, so add check for IOMMU before probe of PCI host and call
pci_request_acs() to make sure ACS will be enabled when enumerating PCI
devices.
Change-Id: I4b9742de67850d51cdefd5217be0a82fb386a530
Fixes: 6bf6c24720 ("iommu/of: Request ACS from the PCI core when configuring IOMMU linkage")
Signed-off-by: Xingang Wang <wangxingang5@huawei.com>
Signed-off-by: Pavankumar Kondeti <quic_pkondeti@quicinc.com>
Reviewed-on: https://git-master.nvidia.com/r/c/3rdparty/canonical/linux-noble/+/3388469
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Tested-by: Jordan Niethe <jniethe@nvidia.com>
Reviewed-by: Pritesh Raithatha <praithatha@nvidia.com>
This commit is contained in:
@@ -152,7 +152,6 @@ int of_iommu_configure(struct device *dev, struct device_node *master_np,
|
||||
.np = master_np,
|
||||
};
|
||||
|
||||
pci_request_acs();
|
||||
err = pci_for_each_dma_alias(to_pci_dev(dev),
|
||||
of_pci_iommu_init, &info);
|
||||
of_pci_check_device_ats(dev, master_np);
|
||||
|
||||
+7
-1
@@ -639,9 +639,15 @@ static int pci_parse_request_of_pci_ranges(struct device *dev,
|
||||
|
||||
int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *bridge)
|
||||
{
|
||||
if (!dev->of_node)
|
||||
struct device_node *node = dev->of_node;
|
||||
|
||||
if (!node)
|
||||
return 0;
|
||||
|
||||
/* Detect IOMMU and make sure ACS will be enabled */
|
||||
if (of_property_read_bool(node, "iommu-map"))
|
||||
pci_request_acs();
|
||||
|
||||
bridge->swizzle_irq = pci_common_swizzle;
|
||||
bridge->map_irq = of_irq_parse_and_map_pci;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user