[U-Boot] [PATCH v3 0/8] dm: pci: tegra: Convert Tegra PCI to driver model

This series converts all Tegra boards to use driver model for PCI. The net effect should be no change in functionality.
A few additional features are added to make this possible: - Helper functions to support accessing 8- and 16-bit values within a 32-bit word - Fixing a build error for CONFIG_CMD_PCI_ENUM - Decoding the PCI ranges property such that configuration ranges are ignored - Supporting bus-master devices on boards where RAM does not start at 0
This series is tested on beaver. It is available at u-boot-dm/tegra-working.
Changes in v3: - Rebase onto tegra/master
Changes in v2: - Update commit message to explain that the feature is not important - Drop the feature from tegra boards - Rename 'addr' to 'size' - Correct logic for use of gd->pci_ram_top - Update commit message to mention future work - Use the device_is_on_pci_bus() API - Leave pci_skip_dev() at the bottom of the file to reduce the diff size
Simon Glass (8): dm: tegra: pci: Move CONFIG_PCI_TEGRA to Kconfig dm: pci: Avoid a driver model build error with CONFIG_CMD_PCI_ENUM dm: pci: Set up the SDRAM mapping correctly dm: pci: Support decoding ranges with duplicate entries dm: pci: Add functions to emulate 8- and 16-bit access dm: pci: Add a function to get the controller for a bus dm: pci: Add a function to find the regions for a PCI bus dm: tegra: pci: Convert tegra boards to driver model for PCI
arch/arm/mach-tegra/Kconfig | 2 + common/cmd_pci.c | 4 + configs/apalis_t30_defconfig | 1 + configs/beaver_defconfig | 1 + configs/cardhu_defconfig | 1 + configs/jetson-tk1_defconfig | 1 + configs/trimslice_defconfig | 1 + drivers/pci/Kconfig | 10 + drivers/pci/pci-uclass.c | 105 +++++++++- drivers/pci/pci_tegra.c | 468 ++++++++++++++----------------------------- include/configs/apalis_t30.h | 2 - include/configs/beaver.h | 2 - include/configs/cardhu.h | 2 - include/configs/jetson-tk1.h | 2 - include/configs/trimslice.h | 2 - include/fdtdec.h | 4 - include/pci.h | 51 +++++ lib/fdtdec.c | 4 - 18 files changed, 317 insertions(+), 346 deletions(-)

On 11/12/2015 09:57 AM, Simon Glass wrote:
This series converts all Tegra boards to use driver model for PCI. The net effect should be no change in functionality.
I applied this series on top of current u-boot/master.
On Jetson TK1 (T124), I see the following errors when U-Boot starts:
Net: ERROR: tegra-pcie: failed to power on PHY: -110
at /home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/drivers/pci/pci_tegra.c:685/tegra_pcie_enable_controller() ERROR: tegra-pcie: failed to enable controller at /home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/drivers/pci/pci_tegra.c:997/pci_tegra_probe() No ethernet found.
I assume you can investigate that without issue, since you have that board.
On Jetson TX1 (T210), you need to squash the following into the final commit of the series:
diff --git a/drivers/pci/pci_tegra.c b/drivers/pci/pci_tegra.c index ecd4313501c4..f88bd0d2858b 100644 --- a/drivers/pci/pci_tegra.c +++ b/drivers/pci/pci_tegra.c @@ -1022,6 +1022,7 @@ static const struct udevice_id pci_tegra_ids[] = { { .compatible = "nvidia,tegra20-pcie", .data = TEGRA20_PCIE }, { .compatible = "nvidia,tegra30-pcie", .data = TEGRA30_PCIE }, { .compatible = "nvidia,tegra124-pcie", .data = TEGRA124_PCIE },
- { .compatible = "nvidia,tegra210-pcie", .data = TEGRA210_PCIE }, { }
};
and even with that fix, PCIe now doesn't work:
Net: RTL8169#0 Warning: RTL8169#0 using MAC address from net device
Hit any key to stop autoboot: 0 Tegra210 (P2371-2180) # dhcp zImage pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 1 pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 2 pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 3 pci_hose_bus_to_phys: invalid physical address
...
Perhaps there's some obvious mistake somewhere you can find by code inspection. Otherwise, let me know if you need me to debug that.

Hi Stephen,
On 13 November 2015 at 09:41, Stephen Warren swarren@wwwdotorg.org wrote:
On 11/12/2015 09:57 AM, Simon Glass wrote:
This series converts all Tegra boards to use driver model for PCI. The net effect should be no change in functionality.
I applied this series on top of current u-boot/master.
On Jetson TK1 (T124), I see the following errors when U-Boot starts:
Net: ERROR: tegra-pcie: failed to power on PHY: -110
at /home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/drivers/pci/pci_tegra.c:685/tegra_pcie_enable_controller() ERROR: tegra-pcie: failed to enable controller at /home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/drivers/pci/pci_tegra.c:997/pci_tegra_probe() No ethernet found.
I assume you can investigate that without issue, since you have that board.
It had a problem with the PMIC (I overwrote the contents) so I suspect I get that error always. But I'll try it.
On Jetson TX1 (T210), you need to squash the following into the final commit of the series:
diff --git a/drivers/pci/pci_tegra.c b/drivers/pci/pci_tegra.c index ecd4313501c4..f88bd0d2858b 100644 --- a/drivers/pci/pci_tegra.c +++ b/drivers/pci/pci_tegra.c @@ -1022,6 +1022,7 @@ static const struct udevice_id pci_tegra_ids[] = { { .compatible = "nvidia,tegra20-pcie", .data = TEGRA20_PCIE }, { .compatible = "nvidia,tegra30-pcie", .data = TEGRA30_PCIE }, { .compatible = "nvidia,tegra124-pcie", .data = TEGRA124_PCIE },
{ .compatible = "nvidia,tegra210-pcie", .data = TEGRA210_PCIE }, { }
};
and even with that fix, PCIe now doesn't work:
Net: RTL8169#0 Warning: RTL8169#0 using MAC address from net device
Hit any key to stop autoboot: 0 Tegra210 (P2371-2180) # dhcp zImage pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 1 pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 2 pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 3 pci_hose_bus_to_phys: invalid physical address
...
Perhaps there's some obvious mistake somewhere you can find by code inspection. Otherwise, let me know if you need me to debug that.
I'll take a look and let you know if I get stuck.
Regards, Simon

Hi Stephen,
On 13 November 2015 at 11:14, Simon Glass sjg@chromium.org wrote:
Hi Stephen,
On 13 November 2015 at 09:41, Stephen Warren swarren@wwwdotorg.org wrote:
On 11/12/2015 09:57 AM, Simon Glass wrote:
This series converts all Tegra boards to use driver model for PCI. The net effect should be no change in functionality.
I applied this series on top of current u-boot/master.
On Jetson TK1 (T124), I see the following errors when U-Boot starts:
Net: ERROR: tegra-pcie: failed to power on PHY: -110
at /home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/drivers/pci/pci_tegra.c:685/tegra_pcie_enable_controller() ERROR: tegra-pcie: failed to enable controller at /home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/drivers/pci/pci_tegra.c:997/pci_tegra_probe() No ethernet found.
I assume you can investigate that without issue, since you have that board.
It had a problem with the PMIC (I overwrote the contents) so I suspect I get that error always. But I'll try it.
Yes, Jetson doesn't work for me, but I found the problem and tested it on Beaver. It was a merge conflict. I'll send v4 when I finish build testing.
On Jetson TX1 (T210), you need to squash the following into the final commit of the series:
diff --git a/drivers/pci/pci_tegra.c b/drivers/pci/pci_tegra.c index ecd4313501c4..f88bd0d2858b 100644 --- a/drivers/pci/pci_tegra.c +++ b/drivers/pci/pci_tegra.c @@ -1022,6 +1022,7 @@ static const struct udevice_id pci_tegra_ids[] = { { .compatible = "nvidia,tegra20-pcie", .data = TEGRA20_PCIE }, { .compatible = "nvidia,tegra30-pcie", .data = TEGRA30_PCIE }, { .compatible = "nvidia,tegra124-pcie", .data = TEGRA124_PCIE },
{ .compatible = "nvidia,tegra210-pcie", .data = TEGRA210_PCIE }, { }
};
and even with that fix, PCIe now doesn't work:
Net: RTL8169#0 Warning: RTL8169#0 using MAC address from net device
Hit any key to stop autoboot: 0 Tegra210 (P2371-2180) # dhcp zImage pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 1 pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 2 pci_hose_bus_to_phys: invalid physical address BOOTP broadcast 3 pci_hose_bus_to_phys: invalid physical address
...
Perhaps there's some obvious mistake somewhere you can find by code inspection. Otherwise, let me know if you need me to debug that.
I'll take a look and let you know if I get stuck.
Regards, Simon
Regards, Simon
participants (2)
-
Simon Glass
-
Stephen Warren