• Niklas Cassel's avatar
    PCI: dwc: Make cpu_addr_fixup take struct dw_pcie as argument · b6900aeb
    Niklas Cassel authored
    The current cpu addr fixup mask for ARTPEC-6, GENMASK(27, 0), is wrong.
    The correct cpu addr fixup mask for ARTPEC-6 is GENMASK(28, 0).
    
    However, having a hardcoded cpu addr fixup mask in each driver is
    arguably wrong.
    A device tree property called something like "cpu-addr-fixup-mask"
    would have been a better solution.
    Introducing such a property is not needed though, since we already have
    pp->cfg0_base and ep->phys_base, which is derived from already existing
    device tree properties.
    
    It is also worth noting that for ARTPEC-7, hardcoding the cpu addr fixup
    mask is not possible, since it uses a High Address Bits Look Up Table,
    which means that it can, at runtime, map the PCIe window to an arbitrary
    address in the 32-bit address space.
    
    By using pp->cfg0_base and ep->phys_base, we avoid hardcoding a mask
    in each driver. This should work for ARTPEC-6, DRA7xx, and ARTPEC-7.
    I have not changed the code in DRA7xx though, since their existing
    code works, but if they want, they could use the same logic as
    artpec6_pcie_cpu_addr_fixup, and thus remove their hardcoded mask.
    
    The reason why the fixup mask is needed is explained in commit f4c55c5a
    ("PCI: designware: Program ATU with untranslated address").
    Signed-off-by: default avatarNiklas Cassel <niklas.cassel@axis.com>
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Acked-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
    b6900aeb
pcie-artpec6.c 11.2 KB