[U-Boot] [PATCH] pci: tegra: Fix port information parsing

Bin Meng bmeng.cn at gmail.com
Wed Jan 21 03:37:07 CET 2015


Hi,

On Wed, Jan 21, 2015 at 3:05 AM, Simon Glass <sjg at chromium.org> wrote:
> Hi Sjoerd,
>
> On 20 January 2015 at 10:06, Sjoerd Simons
> <sjoerd.simons at collabora.co.uk> wrote:
>> commit a62e84d7b1824a202dd incorrectly changed the tegra pci code to the
>> new fdtdec pci helpers. To get the device index of the root port, the
>> "reg" property should be parsed from the dtb (as was previously the
>> case).
>>
>> With this patch i can successfully network boot my jetson tk1
>>
>> Signed-off-by: Sjoerd Simons <sjoerd.simons at collabora.co.uk>
>> ---
>>  drivers/pci/pci_tegra.c | 5 ++---
>>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> Can you also please take a look at this patch?
>
> http://patchwork.ozlabs.org/patch/430815/
>
> It tries to support both options.

Although I still don't see how the Tegra's dts is written, I feel this
patch is doing correctly.

>>
>> diff --git a/drivers/pci/pci_tegra.c b/drivers/pci/pci_tegra.c
>> index f9e05ad..67b5fdf 100644
>> --- a/drivers/pci/pci_tegra.c
>> +++ b/drivers/pci/pci_tegra.c
>> @@ -459,7 +459,6 @@ static int tegra_pcie_parse_port_info(const void *fdt, int node,
>>                                       unsigned int *lanes)
>>  {
>>         struct fdt_pci_addr addr;
>> -       pci_dev_t bdf;
>>         int err;
>>
>>         err = fdtdec_get_int(fdt, node, "nvidia,num-lanes", 0);
>> @@ -470,13 +469,13 @@ static int tegra_pcie_parse_port_info(const void *fdt, int node,
>>
>>         *lanes = err;
>>
>> -       err = fdtdec_get_pci_bdf(fdt, node, &addr, &bdf);
>> +       err = fdtdec_get_pci_addr(fdt, node, 0, "reg", &addr);

I suggest replace 0 to FDT_PCI_SPACE_CONFIG.

>>         if (err < 0) {
>>                 error("failed to parse \"reg\" property");
>>                 return err;
>>         }
>>
>> -       *index = PCI_DEV(bdf) - 1;
>> +       *index = PCI_DEV(addr.phys_hi) - 1;
>>
>>         return 0;
>>  }

Based on this patch, I think Tegra's dts just uses "reg" to encode the
device number into fdt_pci_addr.phys_hi. The bus number and function
number are not there.

Regards,
Bin


More information about the U-Boot mailing list