dm: pci: tegra: Convert Tegra PCI to driver model
v3 cover 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(-)
Signature · 1 line
2.6.0.rc2.230.g3dd15c0
v3 cover dm: pci: tegra: Convert Tegra PCI to driver model
Quoted 2 lines · Simon Glass
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:
Quoted 6 lines
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:
drivers/pci/pci_tegra.c static const struct udevice_id pci_tegra_ids[] = { · line 1027
Quoted 11 lines
drivers/pci/pci_tegra.c +1
-0@@ -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:
Quoted 17 lines
Net: RTL8169#0
Warning: RTL8169#0 using MAC address from net deviceHit any key to stop autoboot: 0
Tegra210 (P2371-2180) # dhcp zImagepci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 1pci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 2pci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 3pci_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.
v3 cover dm: pci: tegra: Convert Tegra PCI to driver model
Hi Stephen,
Quoted 20 lines · Stephen Warren
Quoted 3 lines · Simon Glass
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:
Quoted 8 lines
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.
Quoted 1 line
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.
Quoted 37 lines
On Jetson TX1 (T210), you need to squash the following into the final commit of the series:
drivers/pci/pci_tegra.c static const struct udevice_id pci_tegra_ids[] = { · line 1027
Quoted 11 lines
drivers/pci/pci_tegra.c +1
-0@@ -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:
Quoted 17 lines
Net: RTL8169#0
Warning: RTL8169#0 using MAC address from net deviceHit any key to stop autoboot: 0
Tegra210 (P2371-2180) # dhcp zImagepci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 1pci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 2pci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 3pci_hose_bus_to_phys: invalid physical address
Quoted 4 lines
...
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
v3 cover dm: pci: tegra: Convert Tegra PCI to driver model
Hi Stephen,
Quoted 23 lines · Simon Glass
Hi Stephen,
Quoted 20 lines · Stephen Warren
Quoted 3 lines · Simon Glass
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:
Quoted 8 lines
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.
Quoted 4 lines
Quoted 1 line
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.
Quoted 40 lines
Quoted 40 lines
On Jetson TX1 (T210), you need to squash the following into the final commit of the series:
drivers/pci/pci_tegra.c static const struct udevice_id pci_tegra_ids[] = { · line 1027
Quoted 11 lines
drivers/pci/pci_tegra.c +1
-0@@ -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:
Quoted 17 lines
Net: RTL8169#0
Warning: RTL8169#0 using MAC address from net deviceHit any key to stop autoboot: 0
Tegra210 (P2371-2180) # dhcp zImagepci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical addresspci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 1pci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 2pci_hose_bus_to_phys: invalid physical address
BOOTP broadcast 3pci_hose_bus_to_phys: invalid physical address...
Quoted 7 lines
Quoted 2 lines
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