• Lorenzo Pieralisi's avatar
    ACPI/IORT: Fix PCI ACS enablement · 37f6b42e
    Lorenzo Pieralisi authored
    commit f6810c15 ("iommu/arm-smmu: Clean up early-probing
    workarounds") removed kernel code that was allowing to initialize
    and probe the SMMU devices early (ie earlier than PCI devices, through
    linker script callback entries) in the boot process because it was not
    needed any longer in that the SMMU devices/drivers now support deferred
    probing.
    
    Since the SMMUs probe routines are also in charge of requesting global
    PCI ACS kernel enablement, commit f6810c15 ("iommu/arm-smmu: Clean
    up early-probing workarounds") also postponed PCI ACS enablement to
    SMMUs devices probe time, which is too late given that PCI devices needs
    to detect if PCI ACS is enabled to init the respective capability
    through the following call path:
    
    pci_device_add()
     -> pci_init_capabilities()
      -> pci_enable_acs()
    
    Add code in the ACPI IORT SMMU platform devices initialization path
    (that is called before ACPI PCI enumeration) to detect if there
    exists firmware mappings to map root complexes ids to SMMU ids
    and if so enable ACS for the system.
    
    Fixes: f6810c15 ("iommu/arm-smmu: Clean up early-probing workarounds")
    Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Tested-by: default avatarNate Watterson <nwatters@codeaurora.org>
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Hanjun Guo <hanjun.guo@linaro.org>
    Cc: Sudeep Holla <sudeep.holla@arm.com>
    Cc: Zhou Wang <wangzhou1@hisilicon.com>
    Cc: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    37f6b42e
iort.c 31.1 KB