linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding@avionic-design.de>
To: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Andrew Murray <andrew.murray@arm.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>,
	Gregory Clement <gregory.clement@free-electrons.com>,
	Arnd Bergmann <arnd@arndb.de>, Maen Suleiman <maen@marvell.com>,
	Lior Amsalem <alior@marvell.com>,
	Eran Ben-Avi <benavi@marvell.com>,
	Nadav Haklai <nadavh@marvell.com>,
	Shadi Ammouri <shadi@marvell.com>,
	Tawfik Bayouk <tawfik@marvell.com>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Jason Gunthorpe <jgunthorpe@obsidianresearch.com>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>
Subject: Re: [PATCH v2 19/27] pci: PCIe driver for Marvell Armada 370/XP systems
Date: Tue, 29 Jan 2013 16:02:01 +0100	[thread overview]
Message-ID: <20130129150201.GA24101@avionic-0098.mockup.avionic-design.de> (raw)
In-Reply-To: <20130129152937.53ec9a9b@skate>

[-- Attachment #1: Type: text/plain, Size: 3104 bytes --]

On Tue, Jan 29, 2013 at 03:29:37PM +0100, Thomas Petazzoni wrote:
> Dear Thierry Reding,
> 
> On Tue, 29 Jan 2013 15:20:15 +0100, Thierry Reding wrote:
> 
> > If at all possible I think the right thing to do is reuse the generic
> > pcibios_get_phb_of_node() implementation. On Tegra this turned out to
> > require a minimal change to the DT bindings of the root port nodes to
> > make sure they provide the correct address in the reg property.
> 
> Could you detail the change that was needed? The DT bindings I use for
> the Marvell PCIe driver are very, very similar to the ones you use for
> Tegra, since I basically inspired my entire DT binding on your work.
> And still, I think of_irq_map_pci() wasn't working for me.

Now that I think about it, there were a few more changes needed.
For one, the reg property of the root port nodes need to be in the
format specified by the PCI DT binding. That is, 3 cells for the
address and 2 cells for the size.

So I end up with something like this:

	pcie-controller {
		...

		ranges = <0x00000800 0 0x80000000 0x80000000 0 0x00001000 /* port 0 registers */
			  0x00001000 0 0x80001000 0x80001000 0 0x00001000 /* port 1 registers */
			  ...>;

		pci@1,0 {
			reg = <0x000800 0 0x80000000 0 0x1000>;
			...
		};

		pci@2,0 {
			reg = <0x001000 0 0x80001000 0 0x1000>;
			...
		};
	};

So what happens here is that for each root port (pci@1,0 and pci@2,0),
the reg property is translated into the parent address space via the
pcie-controller's ranges property. pci@1,0 gets the memory region
0x80000000-0x80000fff and pci@2,0 gets 0x80001000-0x80001fff. (These are
actually windows through which the configuration space of the root ports
is accessed.)

At the same time this reg property maps both devices into the PCI
address space at addresses 0:01.0 and 0:02.0 respectively.

The second change is that you can't rely on ARM's default implementation
of the bus scan operation, which calls pci_scan_root_bus(), passing in a
NULL as the struct device which acts as the bus' parent. So on Tegra I
added a custom implementation which calls pci_create_root_bus(), passing
in the struct device of the PCI host bridge, whose .of_node field will
be set to the pcie-controller node above. Incidentally this also fixed
another issue where the PCI core and ARM's pci_common_init() both
eventually end up calling pci_bus_add_devices(). I don't remember the
exact symptoms but I think this was causing resource conflicts during
the second enumeration or so.

Because a proper struct device with the correct .of_node field is passed
into pci_create_root_bus(), the generic pcibios_get_phb_of_node() will
know how to find it by looking at bus->bridge->parent->of_node. After
that the generic matching code will search the bridge (pcie-controller)
node's children and relate them to the struct pci_dev by devfn. This is
done in pci_set_of_node() defined in drivers/pci/of.c, which calls
of_pci_find_child_device() from drivers/of/of_pci.c.

This is quite convoluted, but I hope it helps.

Thierry

[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

  reply	other threads:[~2013-01-29 15:03 UTC|newest]

Thread overview: 217+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-28 18:56 [PATCH v2] PCIe support for the Armada 370 and Armada XP SoCs Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 01/27] of/pci: Provide support for parsing PCI DT ranges property Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 02/27] of/pci: Add of_pci_get_devfn() function Thomas Petazzoni
2013-01-28 22:00   ` Stephen Warren
2013-01-28 22:16     ` Thierry Reding
2013-01-29 10:04       ` Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 03/27] of/pci: Add of_pci_parse_bus_range() function Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 04/27] ARM: pci: Allow passing per-controller private data Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 05/27] arm: pci: add a align_resource hook Thomas Petazzoni
2013-01-29 15:12   ` Thomas Petazzoni
2013-01-29 15:15     ` Russell King - ARM Linux
2013-01-29 15:23       ` Thomas Petazzoni
2013-01-29 15:25         ` Russell King - ARM Linux
2013-01-29 15:28           ` Thomas Petazzoni
2013-01-29 15:58     ` Russell King - ARM Linux
2013-01-29 16:20       ` Thomas Petazzoni
2013-01-29 16:45         ` Arnd Bergmann
2013-01-29 17:09           ` Thomas Petazzoni
2013-01-29 20:15             ` Arnd Bergmann
2013-01-29 20:33               ` Thomas Petazzoni
2013-01-29 21:59                 ` Thomas Petazzoni
2013-01-29 22:17                   ` Stephen Warren
2013-01-30  4:49                   ` Jason Gunthorpe
2013-01-29 22:54                 ` Arnd Bergmann
2013-01-30  4:21                   ` Jason Gunthorpe
2013-01-30  9:55                     ` Arnd Bergmann
2013-01-30 11:47                       ` Thomas Petazzoni
2013-01-30 16:17                         ` Arnd Bergmann
2013-01-30 16:38                           ` Thomas Petazzoni
2013-01-30 20:48                         ` Bjorn Helgaas
2013-01-30 21:06                           ` Jason Gunthorpe
2013-01-30  4:56           ` Jason Gunthorpe
2013-01-30  8:19             ` Thomas Petazzoni
2013-01-30  9:46             ` Arnd Bergmann
2013-01-30  9:54               ` Thomas Petazzoni
2013-01-30 10:03                 ` Arnd Bergmann
2013-01-30 11:42                   ` Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 06/27] lib: devres: don't enclose pcim_*() functions in CONFIG_HAS_IOPORT Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 07/27] PCI: Add software-emulated host bridge Thomas Petazzoni
2013-01-28 20:18   ` Arnd Bergmann
2013-01-28 22:03     ` Stephen Warren
2013-01-28 22:09       ` Jason Gunthorpe
2013-01-28 22:18         ` Thomas Petazzoni
2013-01-28 22:23           ` Jason Gunthorpe
2013-01-28 22:30             ` Thomas Petazzoni
2013-01-28 22:51               ` Jason Gunthorpe
2013-01-29 10:01                 ` Thomas Petazzoni
2013-01-29 17:42                   ` Jason Gunthorpe
2013-01-29 17:43                     ` Thomas Petazzoni
2013-01-29  2:40         ` Bjorn Helgaas
2013-01-29  6:16           ` Jason Gunthorpe
2013-01-28 22:09     ` Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 08/27] pci: implement an emulated PCI-to-PCI bridge Thomas Petazzoni
2013-01-28 19:35   ` Jason Gunthorpe
2013-01-28 19:39     ` Thomas Petazzoni
2013-01-28 19:55       ` Jason Gunthorpe
2013-01-28 22:06         ` Stephen Warren
2013-01-28 22:16           ` Jason Gunthorpe
2013-01-29 22:35   ` Bjorn Helgaas
2013-01-29 23:06     ` Arnd Bergmann
2013-01-30  4:12       ` Jason Gunthorpe
2013-01-28 18:56 ` [PATCH v2 09/27] pci: infrastructure to add drivers in drivers/pci/host Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 10/27] arm: mvebu: fix address-cells in mpic DT node Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 11/27] clk: mvebu: create parent-child relation for PCIe clocks on Armada 370 Thomas Petazzoni
2013-01-28 22:08   ` Stephen Warren
2013-01-28 22:21     ` Thomas Petazzoni
2013-01-28 22:27       ` Stephen Warren
2013-01-28 22:44         ` Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 12/27] clk: mvebu: add more PCIe clocks for Armada XP Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 13/27] arm: plat-orion: introduce WIN_CTRL_ENABLE in address mapping code Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 14/27] arm: plat-orion: refactor the orion_disable_wins() function Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 15/27] arm: plat-orion: introduce orion_{alloc,free}_cpu_win() functions Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 16/27] arm: mvebu: add functions to alloc/free PCIe decoding windows Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 17/27] arm: plat-orion: make common PCIe code usable on mvebu Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 18/27] arm: plat-orion: add more flexible PCI configuration space read/write functions Thomas Petazzoni
2013-01-28 19:51   ` Jason Gunthorpe
2013-01-29  8:40     ` Thomas Petazzoni
2013-01-29 17:40       ` Jason Gunthorpe
2013-01-28 18:56 ` [PATCH v2 19/27] pci: PCIe driver for Marvell Armada 370/XP systems Thomas Petazzoni
2013-01-28 22:21   ` Stephen Warren
2013-01-29  8:41     ` Thomas Petazzoni
2013-01-29  9:20       ` Thierry Reding
2013-01-29  9:21         ` Thomas Petazzoni
2013-02-07 10:24         ` Thomas Petazzoni
2013-02-07 15:46           ` Bjorn Helgaas
2013-02-07 16:00             ` Thomas Petazzoni
2013-02-07 18:08               ` Bjorn Helgaas
2013-02-07 18:15                 ` Jason Gunthorpe
2013-02-07 18:30                   ` Bjorn Helgaas
2013-02-07 18:43                 ` Thierry Reding
2013-01-29 19:47       ` Stephen Warren
2013-01-29  3:29   ` Bjorn Helgaas
2013-01-29  5:55     ` Jason Gunthorpe
2013-01-29  8:00       ` Thomas Petazzoni
2013-01-29 17:47       ` Bjorn Helgaas
2013-01-29 18:14         ` Thomas Petazzoni
2013-01-29 18:41         ` Jason Gunthorpe
2013-01-29 19:07           ` Bjorn Helgaas
2013-01-29 19:18             ` Jason Gunthorpe
2013-01-29 19:38               ` Bjorn Helgaas
2013-01-29 22:27                 ` Bjorn Helgaas
2013-01-30  4:24                   ` Jason Gunthorpe
2013-01-30  9:35                   ` Thomas Petazzoni
2013-01-30 18:52                     ` Bjorn Helgaas
2013-01-30 22:28                       ` Thomas Petazzoni
2013-01-30 23:10                         ` Jason Gunthorpe
2013-01-30 23:48                         ` Bjorn Helgaas
2013-01-31 16:04                       ` Thomas Petazzoni
2013-01-31 16:30                         ` Bjorn Helgaas
2013-01-31 16:33                           ` Thomas Petazzoni
2013-01-31 17:03                             ` Bjorn Helgaas
2013-01-31 16:42                           ` Russell King - ARM Linux
2013-01-29 13:22   ` Andrew Murray
2013-01-29 13:45     ` Thomas Petazzoni
2013-01-29 14:05       ` Andrew Murray
2013-01-29 14:20         ` Thierry Reding
2013-01-29 14:29           ` Thomas Petazzoni
2013-01-29 15:02             ` Thierry Reding [this message]
2013-01-29 15:08               ` Andrew Murray
2013-01-29 15:10               ` Thomas Petazzoni
2013-02-07 14:37     ` Thomas Petazzoni
2013-02-07 15:51       ` Andrew Murray
2013-02-07 16:19         ` Thomas Petazzoni
2013-02-07 16:40           ` Thomas Petazzoni
2013-02-07 16:53             ` Andrew Murray
2013-02-07 17:14               ` Thomas Petazzoni
2013-02-07 17:29                 ` Andrew Murray
2013-02-07 17:37                   ` Thomas Petazzoni
2013-02-07 18:21                     ` Jason Gunthorpe
2013-02-07 23:25                       ` Arnd Bergmann
2013-02-08  0:44                         ` Jason Gunthorpe
2013-02-09 22:23                           ` Arnd Bergmann
2013-02-12 19:26                             ` Jason Gunthorpe
2013-02-07 18:30                     ` Andrew Murray
2013-02-07 23:27                       ` Arnd Bergmann
2013-01-30 11:32   ` Russell King - ARM Linux
2013-01-30 11:37     ` Thomas Petazzoni
2013-01-30 12:03     ` Thierry Reding
2013-01-30 13:07       ` Thomas Petazzoni
2013-01-30 15:08       ` Russell King - ARM Linux
2013-01-30 15:19         ` Russell King - ARM Linux
2013-01-30 15:36           ` Thomas Petazzoni
2013-01-30 15:46             ` Russell King - ARM Linux
2013-01-31 14:30               ` Thomas Petazzoni
2013-01-31 14:50                 ` Russell King - ARM Linux
2013-01-31 14:57                   ` Thomas Petazzoni
2013-01-31 15:08                     ` Russell King - ARM Linux
2013-01-31 15:22                       ` Thomas Petazzoni
2013-01-31 15:36                         ` Russell King - ARM Linux
2013-01-31 15:47                           ` Thomas Petazzoni
2013-01-31 15:48                             ` Russell King - ARM Linux
2013-01-31 16:18                           ` Arnd Bergmann
2013-01-31 18:02                             ` Jason Gunthorpe
2013-01-31 20:46                               ` Arnd Bergmann
2013-01-31 22:44                                 ` Jason Gunthorpe
2013-02-01 11:30                                   ` Arnd Bergmann
2013-02-01 19:52                                     ` Jason Gunthorpe
2013-02-06 16:51                                   ` Thomas Petazzoni
2013-02-06 17:09                                     ` Jason Gunthorpe
2013-02-06 17:18                                       ` Thomas Petazzoni
2013-02-06 17:50                                         ` Jason Gunthorpe
2013-02-06 18:02                                           ` Thomas Petazzoni
2013-02-06 18:22                                           ` Stephen Warren
2013-02-06 18:39                                             ` Jason Gunthorpe
2013-02-06 18:42                                             ` Thomas Petazzoni
2013-02-06 22:04                                               ` Arnd Bergmann
2013-02-07 15:50                                           ` Giving special alignment/size constraints to the Linux PCI core? Thomas Petazzoni
2013-02-07 23:33                                             ` Arnd Bergmann
2013-02-08  4:21                                             ` Bjorn Helgaas
2013-02-08  8:14                                               ` Thomas Petazzoni
2013-02-12 16:00                                                 ` Arnd Bergmann
2013-02-12 18:41                                                   ` Jason Gunthorpe
2013-02-12 19:02                                                     ` Arnd Bergmann
2013-02-12 19:38                                                       ` Jason Gunthorpe
2013-02-12 23:05                                                         ` Arnd Bergmann
2013-02-13  0:32                                                           ` Jason Gunthorpe
2013-02-13 18:53                                                             ` Arnd Bergmann
2013-02-13 19:12                                                               ` Jason Gunthorpe
2013-02-13 19:51                                                                 ` Thomas Petazzoni
2013-02-13 21:10                                                                 ` Arnd Bergmann
2013-02-13 21:20                                                                   ` Yinghai Lu
2013-02-13 22:24                                                                     ` Arnd Bergmann
2013-02-13 21:02                                                             ` Yinghai Lu
2013-01-31  7:10           ` [PATCH v2 19/27] pci: PCIe driver for Marvell Armada 370/XP systems Thierry Reding
2013-02-01  0:34   ` Stephen Warren
2013-02-01  1:41     ` Jason Gunthorpe
2013-02-01  2:21       ` Stephen Warren
2013-02-01  3:51         ` Jason Gunthorpe
2013-02-01  9:03           ` Thomas Petazzoni
2013-02-01 16:07             ` Arnd Bergmann
2013-02-01 16:26               ` Russell King - ARM Linux
2013-02-01 17:45                 ` Arnd Bergmann
2013-02-01 19:58                   ` Jason Gunthorpe
2013-02-01  8:46         ` Thomas Petazzoni
2013-02-01 16:02           ` Arnd Bergmann
2013-02-01 17:57           ` Stephen Warren
2013-02-01 19:39             ` Jason Gunthorpe
2013-02-01 20:30               ` Stephen Warren
2013-01-28 18:56 ` [PATCH v2 20/27] arm: mvebu: PCIe support is now available on mvebu Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 21/27] arm: mvebu: add PCIe Device Tree informations for Armada 370 Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 22/27] arm: mvebu: add PCIe Device Tree informations for Armada XP Thomas Petazzoni
2013-02-06 22:41   ` Arnd Bergmann
2013-02-06 23:07     ` Thomas Petazzoni
2013-02-07  8:04       ` Arnd Bergmann
2013-02-07  8:45         ` Thomas Petazzoni
2013-02-07  9:09           ` Arnd Bergmann
2013-02-07  1:05     ` Jason Gunthorpe
2013-02-07  7:28       ` Thierry Reding
2013-02-07 17:49         ` Jason Gunthorpe
2013-02-07  8:24       ` Arnd Bergmann
2013-02-07 17:00         ` Jason Gunthorpe
2013-02-07 23:44           ` Arnd Bergmann
2013-01-28 18:56 ` [PATCH v2 23/27] arm: mvebu: PCIe Device Tree informations for OpenBlocks AX3-4 Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 24/27] arm: mvebu: PCIe Device Tree informations for Armada XP DB Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 25/27] arm: mvebu: PCIe Device Tree informations for Armada 370 Mirabox Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 26/27] arm: mvebu: PCIe Device Tree informations for Armada 370 DB Thomas Petazzoni
2013-01-28 18:56 ` [PATCH v2 27/27] arm: mvebu: update defconfig with PCI and USB support Thomas Petazzoni

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=20130129150201.GA24101@avionic-0098.mockup.avionic-design.de \
    --to=thierry.reding@avionic-design.de \
    --cc=alior@marvell.com \
    --cc=andrew.murray@arm.com \
    --cc=andrew@lunn.ch \
    --cc=arnd@arndb.de \
    --cc=benavi@marvell.com \
    --cc=bhelgaas@google.com \
    --cc=gregory.clement@free-electrons.com \
    --cc=jason@lakedaemon.net \
    --cc=jgunthorpe@obsidianresearch.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=maen@marvell.com \
    --cc=nadavh@marvell.com \
    --cc=shadi@marvell.com \
    --cc=swarren@wwwdotorg.org \
    --cc=tawfik@marvell.com \
    --cc=thomas.petazzoni@free-electrons.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).