[PATCH 00/14] Rewrite Tegra PCIe driver

Bjorn Helgaas bhelgaas at google.com
Tue Jan 29 05:15:34 EST 2013


On Wed, Jan 9, 2013 at 1:43 PM, Thierry Reding
<thierry.reding at avionic-design.de> wrote:
> This patch series contains an almost complete rewrite of the Tegra PCIe
> driver. The code is moved to the drivers/pci/host directory and turned
> into a proper platform driver, adding MSI and DT support while at it.
> Other PCI host controller drivers can be added to that directory in an
> attempt to make it easier to factor out common code.
>
> Patches 1 to 4 add generic OF helpers to parse a PCI node's ranges
> property as well as obtain the bus, device and function numbers from a
> node's reg property.
>
> Patch 5 provides an implementation of a cache for I/O mappings. This can
> be used in situations where a large physical memory region needs to be
> ioremap()'ed. On Tegra, the PCIe standard and extended configuration
> spaces can be accessed through a 256 MiB window. Mapping that in one
> chunk is wasteful and may not always work because the vmalloc area may
> not be large enough. The implementation in this patch uses an LRU based
> approach to map a limited amount of pages on an as-needed basis.
>
> Patches 6 and 7 prepare the ARM PCI code to enable PCI host controller
> drivers to load after the init stage, which can happen due to deferred
> probing, and to allow private data to be passed for each controller.
>
> Patches 8 and 9 move some of the Tegra specific code around to allow it
> to be used from outside the arch/arm/mach-tegra directory.
>
> Patch 10 moves the Tegra PCIe controller driver to the drivers/pci/host
> directory and turns it into a proper platform driver. It also adds MSI
> (based on patches by NVIDIA) and DT support.
>
> Patches 11 to 14 add device tree based probing for the TEC, Harmony and
> TrimSlice boards.
>
> Thierry
>
> Andrew Murray (1):
>   of/pci: Provide support for parsing PCI DT ranges property
>
> Thierry Reding (13):
>   of/pci: Add of_pci_get_devfn() function
>   of/pci: Add of_pci_get_bus() function
>   of/pci: Add of_pci_parse_bus_range() function
>   lib: Add I/O map cache implementation
>   ARM: pci: Keep pci_common_init() around after init
>   ARM: pci: Allow passing per-controller private data
>   ARM: tegra: Move tegra_pcie_xclk_clamp() to PMC
>   ARM: tegra: Move pmc.h to include/mach
>   PCI: tegra: Move PCIe driver to drivers/pci/host
>   ARM: tegra: tamonten: Add PCIe support
>   ARM: tegra: tec: Add PCIe support
>   ARM: tegra: harmony: Initialize PCIe from DT
>   ARM: tegra: trimslice: Initialize PCIe from DT
>
>  .../bindings/pci/nvidia,tegra20-pcie.txt           |  115 ++
>  arch/arm/Kconfig                                   |    2 +
>  arch/arm/boot/dts/tegra20-harmony.dts              |   20 +-
>  arch/arm/boot/dts/tegra20-tamonten.dtsi            |    2 +-
>  arch/arm/boot/dts/tegra20-tec.dts                  |  198 +++
>  arch/arm/boot/dts/tegra20-trimslice.dts            |   12 +
>  arch/arm/boot/dts/tegra20.dtsi                     |   45 +
>  arch/arm/include/asm/mach/pci.h                    |    1 +
>  arch/arm/kernel/bios32.c                           |    9 +-
>  arch/arm/mach-tegra/Kconfig                        |    5 -
>  arch/arm/mach-tegra/Makefile                       |    3 -
>  arch/arm/mach-tegra/board-dt-tegra20.c             |   24 -
>  arch/arm/mach-tegra/board-harmony-pcie.c           |   84 --
>  arch/arm/mach-tegra/board.h                        |    4 +-
>  arch/arm/mach-tegra/common.c                       |    2 +-
>  arch/arm/mach-tegra/include/mach/pmc.h             |   24 +
>  arch/arm/mach-tegra/iomap.h                        |    3 -
>  arch/arm/mach-tegra/pcie.c                         |  887 -------------
>  arch/arm/mach-tegra/pmc.c                          |   16 +
>  arch/arm/mach-tegra/pmc.h                          |   23 -
>  drivers/of/address.c                               |   63 +
>  drivers/of/of_pci.c                                |   78 +-
>  drivers/pci/Kconfig                                |    2 +
>  drivers/pci/Makefile                               |    3 +
>  drivers/pci/host/Kconfig                           |    8 +
>  drivers/pci/host/Makefile                          |    1 +
>  drivers/pci/host/pci-tegra.c                       | 1322 ++++++++++++++++++++
>  include/linux/io.h                                 |   12 +
>  include/linux/of_address.h                         |    9 +
>  include/linux/of_pci.h                             |    3 +
>  lib/ioremap.c                                      |  266 ++++
>  31 files changed, 2203 insertions(+), 1043 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt
>  delete mode 100644 arch/arm/mach-tegra/board-harmony-pcie.c
>  create mode 100644 arch/arm/mach-tegra/include/mach/pmc.h
>  delete mode 100644 arch/arm/mach-tegra/pcie.c
>  delete mode 100644 arch/arm/mach-tegra/pmc.h
>  create mode 100644 drivers/pci/host/Kconfig
>  create mode 100644 drivers/pci/host/Makefile
>  create mode 100644 drivers/pci/host/pci-tegra.c

Hi Thierry,

Since the bulk of this series affects ARM, I'm assuming this will be
merged via the ARM tree or at least some non-PCI route.  It looks like
[10/14] is the only one that touches drivers/pci, and since it's only
adding new stuff (the rewrite of the Tegra PCIe driver, if I
understand correctly), that's fine with me.

There have been enough comments that I assume you'll be posting an
updated series soon.  I'll watch for it and review and ack the
drivers/pci parts.  Let me know if you want me to do anything else.

Bjorn


More information about the devicetree-discuss mailing list