All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Warren <swarren@wwwdotorg.org>
To: Thierry Reding <thierry.reding@avionic-design.de>,
	Russell King <linux@arm.linux.org.uk>
Cc: linux-tegra@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>,
	linux-pci@vger.kernel.org,
	Grant Likely <grant.likely@secretlab.ca>,
	Rob Herring <rob.herring@calxeda.com>,
	devicetree-discuss@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org,
	Colin Cross <ccross@android.com>, Olof Johansson <olof@lixom.net>,
	Mitch Bradley <wmb@firmworks.com>, Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH v3 00/10] ARM: tegra: Add PCIe device tree support
Date: Mon, 06 Aug 2012 13:42:21 -0600	[thread overview]
Message-ID: <50201E1D.5060200@wwwdotorg.org> (raw)
In-Reply-To: <1343332512-28762-1-git-send-email-thierry.reding@avionic-design.de>

On 07/26/2012 01:55 PM, Thierry Reding wrote:
> This patch series adds support for device tree based probing of the PCIe
> controller found on Tegra SoCs.

Thierry, I just tested all Tegra boards in v3.6-rc1, and noticed that
PCIe doesn't work on TrimSlice when booting use device tree. I think I
found the cause, and I can't see why the same problem doesn't affect
this series. Perhaps you can enlighten me?

When booting TrimSlice (or Harmony) using board files, Tegra's PCIe is
initialized using a subsys_initcall to tegra_pcie_init() directly (or
for Harmony to harmony_pcie_init() which then calls tegra_pcie_init()).

The final thing tegra_pcie_init() does is call pci_common_init(). This
calls pcibios_init_hw() which calls hw->scan() which calls
pci_scan_root_bus() which adds a device object for each device on the
PCIe bus. However, since this happens very early in the boot sequence, I
believe the enumerated PCIe devices don't immediately get probed.
Instead, control gets returned to pci_common_init() which I believe then
calls pci_bus_assign_resources() which actually sets up the resources
for those devices. Later, the PCIe devices actually get probed, and
everything works.

However, when booting using device tree, with the code currently in
v3.6-rc1, tegra_pcie_init() is called late in the boot sequence, and so
in the sequence described above, as soon as pci_scan_root_bus() adds a
device, it gets probed, before the device object's resources have been
set up, which results in the following failure:

PCI: Device 0000:01:00.0 not available because of resource collisions

... because of the following code in pcibios_enable_device():

> 	for (idx = 0; idx < 6; idx++) {
> 		/* Only set up the requested stuff */
> 		if (!(mask & (1 << idx)))
> 			continue;
> 
> 		r = dev->resource + idx;
> 		if (!r->start && r->end) {
> 			printk(KERN_ERR "PCI: Device %s not available because"
> 			       " of resource collisions\n", pci_name(dev));

Doesn't this same problem exist when instantiating the PCIe device
itself from device tree as in your patch series? If not, can you explain
why?

Now, the obvious solution in v3.6 would be to simply have
tegra_pcie_init() be called at the same early stage in the boot process
when booting using device tree as it is when booting using board files.
This works for TrimSlice.

However, on Harmony, it doesn't work, because PCIe on Harmony depends on
regulators, and the regulators are accessed using an I2C bus that is
instantiated from DT, and the instantiation of the I2C bus happens
fairly late in the boot process so can't be found early during the boot
sequence. See harmony_regulator_init() for the failing code.

Does anyone have any good ideas (small, self-contained patches) for
solving this in v3.6 in such a way that PCIe works on both TrimSlice and
Harmony?

Thanks.

WARNING: multiple messages have this Message-ID (diff)
From: swarren@wwwdotorg.org (Stephen Warren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 00/10] ARM: tegra: Add PCIe device tree support
Date: Mon, 06 Aug 2012 13:42:21 -0600	[thread overview]
Message-ID: <50201E1D.5060200@wwwdotorg.org> (raw)
In-Reply-To: <1343332512-28762-1-git-send-email-thierry.reding@avionic-design.de>

On 07/26/2012 01:55 PM, Thierry Reding wrote:
> This patch series adds support for device tree based probing of the PCIe
> controller found on Tegra SoCs.

Thierry, I just tested all Tegra boards in v3.6-rc1, and noticed that
PCIe doesn't work on TrimSlice when booting use device tree. I think I
found the cause, and I can't see why the same problem doesn't affect
this series. Perhaps you can enlighten me?

When booting TrimSlice (or Harmony) using board files, Tegra's PCIe is
initialized using a subsys_initcall to tegra_pcie_init() directly (or
for Harmony to harmony_pcie_init() which then calls tegra_pcie_init()).

The final thing tegra_pcie_init() does is call pci_common_init(). This
calls pcibios_init_hw() which calls hw->scan() which calls
pci_scan_root_bus() which adds a device object for each device on the
PCIe bus. However, since this happens very early in the boot sequence, I
believe the enumerated PCIe devices don't immediately get probed.
Instead, control gets returned to pci_common_init() which I believe then
calls pci_bus_assign_resources() which actually sets up the resources
for those devices. Later, the PCIe devices actually get probed, and
everything works.

However, when booting using device tree, with the code currently in
v3.6-rc1, tegra_pcie_init() is called late in the boot sequence, and so
in the sequence described above, as soon as pci_scan_root_bus() adds a
device, it gets probed, before the device object's resources have been
set up, which results in the following failure:

PCI: Device 0000:01:00.0 not available because of resource collisions

... because of the following code in pcibios_enable_device():

> 	for (idx = 0; idx < 6; idx++) {
> 		/* Only set up the requested stuff */
> 		if (!(mask & (1 << idx)))
> 			continue;
> 
> 		r = dev->resource + idx;
> 		if (!r->start && r->end) {
> 			printk(KERN_ERR "PCI: Device %s not available because"
> 			       " of resource collisions\n", pci_name(dev));

Doesn't this same problem exist when instantiating the PCIe device
itself from device tree as in your patch series? If not, can you explain
why?

Now, the obvious solution in v3.6 would be to simply have
tegra_pcie_init() be called at the same early stage in the boot process
when booting using device tree as it is when booting using board files.
This works for TrimSlice.

However, on Harmony, it doesn't work, because PCIe on Harmony depends on
regulators, and the regulators are accessed using an I2C bus that is
instantiated from DT, and the instantiation of the I2C bus happens
fairly late in the boot process so can't be found early during the boot
sequence. See harmony_regulator_init() for the failing code.

Does anyone have any good ideas (small, self-contained patches) for
solving this in v3.6 in such a way that PCIe works on both TrimSlice and
Harmony?

Thanks.

  parent reply	other threads:[~2012-08-06 19:42 UTC|newest]

Thread overview: 209+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-26 19:55 [PATCH v3 00/10] ARM: tegra: Add PCIe device tree support Thierry Reding
2012-07-26 19:55 ` Thierry Reding
2012-07-26 19:55 ` [PATCH v3 01/10] PCI: Keep pci_fixup_irqs() around after init Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-08-14  5:06   ` Bjorn Helgaas
2012-08-14  5:06     ` Bjorn Helgaas
2012-08-14  5:37     ` Thierry Reding
2012-08-14  5:37       ` Thierry Reding
2012-08-14  5:37       ` Thierry Reding
2012-08-15 17:06   ` Bjorn Helgaas
2012-08-15 17:06     ` Bjorn Helgaas
2012-08-15 17:06     ` Bjorn Helgaas
2012-08-15 19:28     ` Thierry Reding
2012-08-15 19:28       ` Thierry Reding
2012-08-15 19:42       ` Bjorn Helgaas
2012-08-15 19:42         ` Bjorn Helgaas
2012-08-15 20:01         ` Thierry Reding
2012-08-15 20:01           ` Thierry Reding
2012-08-15 20:01           ` Thierry Reding
2012-09-07 16:19         ` Stephen Warren
2012-09-07 16:19           ` Stephen Warren
2012-09-07 16:19           ` Stephen Warren
2012-09-07 17:00           ` Thierry Reding
2012-09-07 17:00             ` Thierry Reding
2012-09-07 17:00             ` Thierry Reding
2012-09-07 17:22             ` Bjorn Helgaas
2012-09-07 17:22               ` Bjorn Helgaas
2012-09-14 18:55               ` Thierry Reding
2012-09-14 18:55                 ` Thierry Reding
2012-09-14 18:55                 ` Thierry Reding
2012-09-14 19:45                 ` Bjorn Helgaas
2012-09-14 19:45                   ` Bjorn Helgaas
2012-09-14 19:45                   ` Bjorn Helgaas
2012-07-26 19:55 ` [PATCH v3 02/10] ARM: pci: Keep pci_common_init() " Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55 ` [PATCH v3 03/10] ARM: pci: Allow passing per-controller private data Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55 ` [PATCH v3 04/10] ARM: tegra: Move tegra_pcie_xclk_clamp() to PMC Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55 ` [PATCH v3 05/10] resource: add PCI configuration space support Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-08-14  5:00   ` Bjorn Helgaas
2012-08-14  5:00     ` Bjorn Helgaas
2012-08-14  5:00     ` Bjorn Helgaas
2012-08-14  5:55     ` Thierry Reding
2012-08-14  5:55       ` Thierry Reding
2012-08-14  5:55       ` Thierry Reding
2012-08-14 17:38       ` Bjorn Helgaas
2012-08-14 17:38         ` Bjorn Helgaas
2012-08-14 18:01         ` Thierry Reding
2012-08-14 18:01           ` Thierry Reding
2012-08-14 18:01           ` Thierry Reding
2012-08-14 21:44           ` Bjorn Helgaas
2012-08-14 21:44             ` Bjorn Helgaas
2012-08-15  6:49             ` Thierry Reding
2012-08-15  6:49               ` Thierry Reding
2012-08-15  6:49               ` Thierry Reding
2012-08-16 15:18               ` Stephen Warren
2012-08-16 15:18                 ` Stephen Warren
2012-08-16 15:18                 ` Stephen Warren
2012-08-16 18:27                 ` Thierry Reding
2012-08-16 18:27                   ` Thierry Reding
2012-08-16 18:27                   ` Thierry Reding
2012-07-26 19:55 ` [PATCH v3 06/10] ARM: tegra: Rewrite PCIe support as a driver Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55 ` [PATCH v3 07/10] ARM: tegra: pcie: Add MSI support Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55 ` [PATCH v3 08/10] of/address: Handle #address-cells > 2 specially Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-31 20:18   ` Rob Herring
2012-07-31 20:18     ` Rob Herring
2012-07-31 20:18     ` Rob Herring
2012-08-15 20:06     ` Thierry Reding
2012-08-15 20:06       ` Thierry Reding
2012-09-07 16:24       ` Stephen Warren
2012-09-07 16:24         ` Stephen Warren
2012-09-07 16:24         ` Stephen Warren
2012-09-07 16:32         ` Rob Herring
2012-09-07 16:32           ` Rob Herring
2012-09-07 16:32           ` Rob Herring
2012-07-26 19:55 ` [PATCH v3 09/10] of: Add of_pci_parse_ranges() Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-07-31 20:07   ` Rob Herring
2012-07-31 20:07     ` Rob Herring
2012-08-01  6:54     ` Thierry Reding
2012-08-01  6:54       ` Thierry Reding
2012-08-01  6:54       ` Thierry Reding
2012-08-01 16:07       ` Stephen Warren
2012-08-01 16:07         ` Stephen Warren
2012-08-01 16:07         ` Stephen Warren
2012-07-26 19:55 ` [PATCH v3 10/10] ARM: tegra: pcie: Add device tree support Thierry Reding
2012-07-26 19:55   ` Thierry Reding
2012-08-14 20:12   ` Thierry Reding
2012-08-14 20:12     ` Thierry Reding
2012-08-14 20:12     ` Thierry Reding
2012-08-14 23:50     ` Bjorn Helgaas
2012-08-14 23:50       ` Bjorn Helgaas
2012-08-15  6:37       ` Thierry Reding
2012-08-15  6:37         ` Thierry Reding
2012-08-15 12:18         ` Bjorn Helgaas
2012-08-15 12:18           ` Bjorn Helgaas
2012-08-15 12:30           ` Thierry Reding
2012-08-15 12:30             ` Thierry Reding
2012-08-15 12:30             ` Thierry Reding
2012-08-15 14:36             ` Bjorn Helgaas
2012-08-15 14:36               ` Bjorn Helgaas
2012-08-15 14:36               ` Bjorn Helgaas
2012-08-15 14:57               ` Thierry Reding
2012-08-15 14:57                 ` Thierry Reding
2012-08-15 14:57                 ` Thierry Reding
2012-08-15 20:25                 ` Arnd Bergmann
2012-08-15 20:25                   ` Arnd Bergmann
2012-08-15 20:25                   ` Arnd Bergmann
2012-08-15 20:48                   ` Bjorn Helgaas
2012-08-15 20:48                     ` Bjorn Helgaas
2012-08-15 20:48                     ` Bjorn Helgaas
2012-08-16  4:55                   ` Thierry Reding
2012-08-16  4:55                     ` Thierry Reding
2012-08-16  4:55                     ` Thierry Reding
2012-08-16  7:03                     ` Arnd Bergmann
2012-08-16  7:03                       ` Arnd Bergmann
2012-08-16  7:03                       ` Arnd Bergmann
2012-08-16  7:47                       ` Thierry Reding
2012-08-16  7:47                         ` Thierry Reding
2012-08-16  7:47                         ` Thierry Reding
2012-08-16 12:15           ` Thierry Reding
2012-08-16 12:15             ` Thierry Reding
2012-08-16 12:15             ` Thierry Reding
2012-07-31 16:18 ` [PATCH v3 00/10] ARM: tegra: Add PCIe " Stephen Warren
2012-07-31 16:18   ` Stephen Warren
2012-07-31 16:18   ` Stephen Warren
2012-08-01  6:35   ` Thierry Reding
2012-08-01  6:35     ` Thierry Reding
2012-08-01  6:35     ` Thierry Reding
2012-08-01 17:02     ` Stephen Warren
2012-08-01 17:02       ` Stephen Warren
2012-08-01 17:02       ` Stephen Warren
2012-08-02  6:15       ` Thierry Reding
2012-08-02  6:15         ` Thierry Reding
2012-08-02  6:15         ` Thierry Reding
2012-08-06 19:42 ` Stephen Warren [this message]
2012-08-06 19:42   ` Stephen Warren
2012-08-07 18:20   ` Thierry Reding
2012-08-07 18:20     ` Thierry Reding
2012-08-13 17:40   ` Thierry Reding
2012-08-13 17:40     ` Thierry Reding
2012-08-13 18:47     ` Stephen Warren
2012-08-13 18:47       ` Stephen Warren
2012-08-13 18:47       ` Stephen Warren
2012-08-13 20:33       ` Thierry Reding
2012-08-13 20:33         ` Thierry Reding
2012-08-13 20:33         ` Thierry Reding
2012-08-13 21:38         ` Rob Herring
2012-08-13 21:38           ` Rob Herring
2012-08-14  6:14           ` Thierry Reding
2012-08-14  6:14             ` Thierry Reding
2012-08-13 23:18       ` Bjorn Helgaas
2012-08-13 23:18         ` Bjorn Helgaas
2012-08-13 23:18         ` Bjorn Helgaas
2012-08-14  6:29         ` Thierry Reding
2012-08-14  6:29           ` Thierry Reding
2012-08-14  6:29           ` Thierry Reding
2012-08-14 19:39         ` Stephen Warren
2012-08-14 19:39           ` Stephen Warren
2012-08-14 19:58           ` Thierry Reding
2012-08-14 19:58             ` Thierry Reding
2012-08-14 19:58             ` Thierry Reding
2012-08-14 21:55             ` Bjorn Helgaas
2012-08-14 21:55               ` Bjorn Helgaas
2012-08-14 21:55               ` Bjorn Helgaas
2012-08-14 22:58               ` Stephen Warren
2012-08-14 22:58                 ` Stephen Warren
2012-08-14 22:58                 ` Stephen Warren
2012-08-14 23:51                 ` Stephen Warren
2012-08-14 23:51                   ` Stephen Warren
2012-08-14 23:51                   ` Stephen Warren
2012-08-15 19:04                   ` Stephen Warren
2012-08-15 19:04                     ` Stephen Warren
2012-08-15 19:04                     ` Stephen Warren
2012-08-15 20:09                     ` Thierry Reding
2012-08-15 20:09                       ` Thierry Reding
2012-08-15 20:11                       ` Stephen Warren
2012-08-15 20:11                         ` Stephen Warren
2012-08-15 20:11                         ` Stephen Warren
2012-08-15 20:19                         ` Thierry Reding
2012-08-15 20:19                           ` Thierry Reding
2012-08-15 20:19                           ` Thierry Reding
2012-09-07 23:34                   ` Stephen Warren
2012-09-07 23:34                     ` Stephen Warren
2012-09-08  0:04                     ` Russell King - ARM Linux
2012-09-08  0:04                       ` Russell King - ARM Linux
2012-09-08  0:04                       ` Russell King - ARM Linux
2012-09-08  5:53                       ` Stephen Warren
2012-09-08  5:53                         ` Stephen Warren
2012-09-08  5:53                         ` Stephen Warren
2012-09-08 17:51                       ` Bjorn Helgaas
2012-09-08 17:51                         ` Bjorn Helgaas
2012-09-08 17:51                         ` Bjorn Helgaas
2012-09-18  6:33                         ` Thierry Reding
2012-09-18  6:33                           ` Thierry Reding
2012-09-18 15:56                           ` Bjorn Helgaas
2012-09-18 15:56                             ` Bjorn Helgaas
2012-08-15  0:08                 ` Bjorn Helgaas
2012-08-15  0:08                   ` Bjorn Helgaas
2012-08-15  0:08                   ` Bjorn Helgaas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50201E1D.5060200@wwwdotorg.org \
    --to=swarren@wwwdotorg.org \
    --cc=arnd@arndb.de \
    --cc=bhelgaas@google.com \
    --cc=ccross@android.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=grant.likely@secretlab.ca \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=olof@lixom.net \
    --cc=rob.herring@calxeda.com \
    --cc=thierry.reding@avionic-design.de \
    --cc=wmb@firmworks.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.