Skip to contentSkip to conversation

dm: pci: tegra: Convert Tegra PCI to driver model

PATCH Superseded Simon Glass 2 participants 4 messages Nov 12, 2015 – Nov 14, 2015

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index ecd4313501c4..f88bd0d2858b 100644
@@ -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 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.

#2 lore raw

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
index ecd4313501c4..f88bd0d2858b 100644
@@ -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 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

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

#3 lore raw

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
index ecd4313501c4..f88bd0d2858b 100644
@@ -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 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

...

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