1. 18 Oct, 2018 1 commit
    • Thomas Petazzoni's avatar
      PCI: Introduce PCI bridge emulated config space common logic · 23a5fba4
      Thomas Petazzoni authored and Lorenzo Pieralisi's avatar Lorenzo Pieralisi committed
      
      
      Some PCI host controllers do not expose a configuration space for the
      root port PCI bridge. Due to this, the Marvell Armada 370/38x/XP PCI
      controller driver (pci-mvebu) emulates a root port PCI bridge
      configuration space, and uses that to (among other things) dynamically
      create the memory windows that correspond to the PCI MEM and I/O
      regions.
      
      Since we now need to add a very similar logic for the Marvell Armada
      37xx PCI controller driver (pci-aardvark), instead of duplicating the
      code, we create in this commit a common logic called pci-bridge-emul.
      
      The idea of this logic is to emulate a root port PCI bridge
      configuration space by providing configuration space read/write
      operations, and faking behind the scenes the configuration space of a
      PCI bridge. A PCI host controller driver simply has to call
      pci_bridge_emul_conf_read() and pci_bridge_emul_conf_write() to
      read/write the configuration space of the bridge.
      
      By default, the PCI bridge configuration space is simply emulated by a
      chunk of memory, but the PCI host controller can override the behavior
      of the read and write operations on a per-register basis to do
      additional actions if needed. We take care of complying with the
      behavior of the PCI configuration space registers in terms of bits
      that are read-write, read-only, reserved and write-1-to-clear.
      
      Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@bootlin.com>
      Signed-off-by: Lorenzo Pieralisi's avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Acked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      23a5fba4