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:
Xingang Wang
2024-11-07 13:29:15 +05:30
committed by Jon Hunter
parent 0bb94acbf9
commit 8ba39bd5f5
2 changed files with 7 additions and 2 deletions
-1
View File
@@ -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
View File
@@ -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;