Skip to content
  • Lorenzo Pieralisi's avatar
    linux/io.h: Add pci_remap_cfgspace() interface · cf9ea8ca
    Lorenzo Pieralisi authored
    
    
    The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and Posting")
    mandate non-posted configuration transactions. As further highlighted in
    the PCIe specifications (4.0 - Rev0.3, "Ordering Considerations for the
    Enhanced Configuration Access Mechanism"), through ECAM and ECAM-derivative
    configuration mechanism, the memory mapped transactions from the host CPU
    into Configuration Requests on the PCI express fabric may create ordering
    problems for software because writes to memory address are typically posted
    transactions (unless the architecture can enforce through virtual address
    mapping non-posted write transactions behaviour) but writes to
    Configuration Space are not posted on the PCI express fabric.
    
    Current DT and ACPI host bridge controllers map PCI configuration space
    (ECAM and ECAM-derivative) into the virtual address space through ioremap()
    calls, that are non-cacheable device accesses on most architectures, but
    may provide "bufferable" or "posted" write semantics in architecture like
    eg ARM/ARM64 that allow ioremap'ed regions writes to be buffered in the bus
    connecting the host CPU to the PCI fabric; this behaviour, as underlined in
    the PCIe specifications, may trigger transactions ordering rules and must
    be prevented.
    
    Introduce a new generic and explicit API to create a memory mapping for
    ECAM and ECAM-derivative config space area that defaults to
    ioremap_nocache() (which should provide a sane default behaviour) but still
    allowing architectures on which ioremap_nocache() results in posted write
    transactions to override the function call with an arch specific
    implementation that complies with the PCI specifications for configuration
    transactions.
    
    [bhelgaas: fold in #ifdef CONFIG_PCI wrapper]
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    cf9ea8ca