linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Warren <swarren@wwwdotorg.org>
To: Thierry Reding <thierry.reding@avionic-design.de>
Cc: Mitch Bradley <wmb@firmworks.com>,
	Russell King <linux@arm.linux.org.uk>,
	linux-pci@vger.kernel.org, devicetree-discuss@lists.ozlabs.org,
	Rob Herring <rob.herring@calxeda.com>,
	Jesse Barnes <jbarnes@virtuousgeek.org>,
	Colin Cross <ccross@android.com>,
	linux-tegra@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 07/10] ARM: tegra: pcie: Add device tree support
Date: Thu, 14 Jun 2012 12:30:50 -0600	[thread overview]
Message-ID: <4FDA2DDA.1030704@wwwdotorg.org> (raw)
In-Reply-To: <20120614091905.GA9081@avionic-0098.mockup.avionic-design.de>

On 06/14/2012 03:19 AM, Thierry Reding wrote:
...
> Okay, so the new pcie-controller node looks like this:
> 
> pcie-controller { compatible = "nvidia,tegra20-pcie",
> "simple-bus"; reg = <0x80003000 0x00000800   /* PADS registers */ 
> 0x80003800 0x00000200   /* AFI registers */ 0x80004000 0x00100000
> /* configuration space */ 0x80104000 0x00100000>; /* extended
> configuration space */ interrupts = <0 98 0x04   /* controller
> interrupt */ 0 99 0x04>; /* MSI interrupt */ status = "disabled";
> 
> ranges = <0x80000000 0x80000000 0x00002000   /* 2 root ports */ 
> 0x80400000 0x80400000 0x00010000   /* downstream I/O */ 0x90000000
> 0x90000000 0x10000000   /* non-prefetchable memory */ 0xa0000000
> 0xa0000000 0x10000000>; /* prefetchable memory */

Do we actually need to specifically enumerate all the ranges; would
just "ranges;" be simpler?

> #address-cells = <1>; #size-cells = <1>;
> 
> pci@80000000 {

I'm still not convinced that using the address of the port's registers
is the correct way to represent each port. The port index seems much
more useful.

The main reason here is that there are a lot of registers that contain
fields for each port - far more than the combination of this node's
reg and ctrl-offset (which I assume is an address offset for just one
example of this issue) properties can describe. The bit position and
bit stride of these fields isn't necessarily the same in each
register. Do we want a property like ctrl-offset for every single type
of field in every single shared register that describes the location
of the relevant data, or just a single "port ID" bit that can be
applied to anything?

(Perhaps this isn't so obvious looking at the TRM since it doesn't
document all registers, and I'm also looking at the Tegra30
documentation too, which might be more exposed to this - I haven't
correlated all the documentation sources to be sure though)

> compatible = "nvidia,tegra20-pcie-port"; reg = <0x80000000
> 0x00001000>; status = "disabled";
> 
> #address-cells = <3>; #size-cells = <2>;
> 
> ranges = <0x81000000 0 0 0x80400000 0 0x00008000   /* I/O */ 
> 0x82000000 0 0 0x90000000 0 0x08000000   /* non-prefetchable memory
> */ 0xc2000000 0 0 0xa0000000 0 0x08000000>; /* prefetchable memory
> */

The values here appear identical for both ports. Surely they should
describe just the parts of the overall address space that have been
assigned/delegated to the individual port/bridge?

Note that initial indications are that the overall controller receives
transactions for those address ranges, and standard PCIe bridge
registers are used to steer chunks of these address ranges into the
individual downstream ports/busses. Hence, standard PCIe documentation
should indicate how to do this.

> nvidia,ctrl-offset = <0x110>; nvidia,num-lanes = <2>; };
> 
> pci@80001000 { compatible = "nvidia,tegra20-pcie-port"; reg =
> <0x80001000 0x00001000>; status = "disabled";
> 
> #address-cells = <3>; #size-cells = <2>;
> 
> ranges = <0x81000000 0 0 0x80408000 0 0x00008000   /* I/O */ 
> 0x82000000 0 0 0x98000000 0 0x08000000   /* non-prefetchable memory
> */ 0xc2000000 0 0 0xa8000000 0 0x08000000>; /* prefetchable memory
> */
> 
> nvidia,ctrl-offset = <0x118>; nvidia,num-lanes = <2>; }; };
> 
> While looking into some more code, trying to figure out how to hook
> this all up with the device tree I ran into a problem. I need to
> actually create a 'struct device' for each of the ports, so I added
> the "simple-bus" to the pcie-controller's "compatible" property.
> Furthermore, each PCI root port now becomes a platform_device,
> which are supported by a new tegra-pcie-port driver. I'm not sure
> if "port" is very common in PCI speek, so something like 
> tegra-pcie-bridge (compatible = "nvidia,tegra20-pcie-bridge") may
> be more appropriate?

What is it that drives the need for each port to be a 'struct device'?
The current driver supports 2 host ports, yet there's only a single
struct device for it. Does the DT code assume a 1:1 mapping between
struct device and DT node that represents the child bus? If so,
perhaps it'd be better to rework that code to accept a DT node as a
parameter and call it multiple times, rather than accept a struct
device as a parameter and hence need multiple devices?

  reply	other threads:[~2012-06-14 18:30 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-11 15:05 [PATCH v2 00/10] ARM: tegra: Add PCIe device tree support Thierry Reding
2012-06-11 15:05 ` [PATCH v2 01/10] PCI: Keep pci_fixup_irqs() around after init Thierry Reding
2012-06-11 15:05 ` [PATCH v2 02/10] ARM: pci: Keep pci_common_init() " Thierry Reding
2012-06-11 15:05 ` [PATCH v2 03/10] ARM: pci: Allow passing per-controller private data Thierry Reding
2012-06-11 15:05 ` [PATCH v2 04/10] ARM: tegra: Move tegra_pcie_xclk_clamp() to PMC Thierry Reding
2012-06-11 15:05 ` [PATCH v2 05/10] ARM: tegra: Rewrite PCIe support as a driver Thierry Reding
2012-06-11 21:09   ` Stephen Warren
2012-06-12  6:41     ` Thierry Reding
2012-06-12  7:24       ` Thierry Reding
2012-06-12 16:00         ` Stephen Warren
2012-06-13  8:12           ` Thierry Reding
2012-06-11 21:22   ` Stephen Warren
2012-06-12  4:59     ` Thierry Reding
2012-06-11 15:05 ` [PATCH v2 06/10] ARM: tegra: pcie: Add MSI support Thierry Reding
2012-06-11 21:19   ` Stephen Warren
2012-06-12  5:07     ` Thierry Reding
2012-06-12  5:33       ` Stephen Warren
2012-06-12  5:41         ` Thierry Reding
2012-06-12  6:10       ` Thierry Reding
2012-06-12 15:40         ` Stephen Warren
2012-06-12 17:23           ` Thierry Reding
2012-06-11 15:05 ` [PATCH v2 07/10] ARM: tegra: pcie: Add device tree support Thierry Reding
2012-06-11 21:33   ` Stephen Warren
2012-06-12  6:21     ` Thierry Reding
2012-06-12 15:44       ` Stephen Warren
2012-06-12 17:20         ` Thierry Reding
     [not found]           ` <4FD7943E.60302@firmworks.com>
2012-06-12 19:46             ` Stephen Warren
2012-06-12 19:52               ` Mitch Bradley
2012-06-13  5:54                 ` Thierry Reding
2012-06-13  7:04                   ` Mitch Bradley
2012-06-12 20:15           ` Stephen Warren
2012-06-12 21:11             ` Mitch Bradley
2012-06-13  6:45               ` Thierry Reding
2012-06-13  7:28                 ` Mitch Bradley
2012-06-13  7:52                   ` Thierry Reding
2012-06-13  8:05                     ` Mitch Bradley
2012-06-13  8:19                       ` Thierry Reding
2012-06-13  8:36                         ` Mitch Bradley
2012-06-13  8:42                           ` Thierry Reding
2012-06-14  9:19                           ` Thierry Reding
2012-06-14 18:30                             ` Stephen Warren [this message]
2012-06-14 19:29                               ` Thierry Reding
2012-06-14 19:50                                 ` Stephen Warren
2012-06-15  6:12                                   ` Thierry Reding
2012-06-19 13:30                                     ` Thierry Reding
2012-06-19 16:40                                       ` Stephen Warren
2012-06-19 21:31                                       ` Mitch Bradley
2012-06-20 16:32                                         ` Stephen Warren
2012-06-20 17:41                                           ` Mitch Bradley
2012-06-20 17:47                                             ` Stephen Warren
2012-06-20 19:57                                         ` Arnd Bergmann
2012-06-20 20:19                                           ` Mitch Bradley
2012-06-21  6:47                                         ` Thierry Reding
2012-06-22 10:18                                           ` Bjorn Helgaas
2012-06-22 11:00                                             ` Thierry Reding
2012-06-22 11:46                                               ` Bjorn Helgaas
2012-06-22 12:43                                                 ` Thierry Reding
2012-06-22 13:03                                                   ` Arnd Bergmann
2012-06-22 16:49                                                     ` Bjorn Helgaas
2012-06-22 16:53                                                       ` Arnd Bergmann
2012-06-22 17:13                                                         ` Bjorn Helgaas
2012-06-22 21:08                                                           ` Arnd Bergmann
2012-06-22 17:14                                                         ` Arnd Bergmann
2012-06-22 17:00                                               ` Stephen Warren
2012-06-22 17:28                                                 ` Stephen Warren
2012-06-23 21:35                                                   ` Bjorn Helgaas
2012-06-25  6:34                                                   ` Thierry Reding
2012-06-26 17:22                                                     ` Stephen Warren
2012-06-27  6:19                                                       ` Thierry Reding
2012-06-22 16:20                                           ` Stephen Warren
2012-06-22 17:09                                           ` Mitch Bradley
2012-06-22 11:04                                         ` Thierry Reding
2012-06-22 13:22                                           ` Thierry Reding
2012-06-22 13:48                                             ` Arnd Bergmann
2012-06-22 14:02                                               ` Thierry Reding
2012-06-22 16:40                                                 ` Arnd Bergmann
2012-06-13 20:21                     ` Arnd Bergmann
2012-06-14  8:37                       ` Thierry Reding
2012-06-14 10:25                         ` Arnd Bergmann
2012-06-14 10:31                           ` Thierry Reding
2012-06-14 11:06                             ` Arnd Bergmann
2012-06-14 11:58                               ` Thierry Reding
2012-06-13  6:34             ` Thierry Reding
2012-06-13 16:20               ` Stephen Warren
2012-06-13 17:03               ` Stephen Warren
2012-06-11 15:05 ` [PATCH v2 08/10] ARM: tegra: harmony: Initialize regulators from DT Thierry Reding
2012-06-11 21:36   ` Stephen Warren
2012-06-12  6:13     ` Thierry Reding
2012-06-21 20:17   ` Stephen Warren
2012-06-22  6:06     ` Thierry Reding
2012-06-11 15:05 ` [PATCH v2 09/10] ARM: tegra: harmony: Initialize PCIe " Thierry Reding
2012-06-11 21:41   ` Stephen Warren
2012-06-12  5:48     ` Thierry Reding
2012-06-12 15:38       ` Stephen Warren
2012-06-11 15:05 ` [PATCH v2 10/10] ARM: tegra: trimslice: " Thierry Reding

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=4FDA2DDA.1030704@wwwdotorg.org \
    --to=swarren@wwwdotorg.org \
    --cc=ccross@android.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=jbarnes@virtuousgeek.org \
    --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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).