From: jgunthorpe@obsidianresearch.com (Jason Gunthorpe)
To: linux-arm-kernel@lists.infradead.org
Subject: mvebu-mbus: defining a DT binding
Date: Fri, 5 Apr 2013 14:36:52 -0600 [thread overview]
Message-ID: <20130405203652.GA10505@obsidianresearch.com> (raw)
In-Reply-To: <201304052149.33533.arnd@arndb.de>
On Fri, Apr 05, 2013 at 09:49:33PM +0200, Arnd Bergmann wrote:
> > So, given all of this - can you write out an example PCI controller
> > DT binding that uses target id in ranges?
> >
> > This is why I suggested to include the PEX target IDs as meta-data in
> > the PEX nodes, rather than trying to encode them in ranges.
>
> I mean something like
Okay, I see now.. Bit more complex for the PCI driver.
Here is a version with more detail:
mbus {
ranges = <MAPDEF_INTERNAL 0xf1000000 0x100000
MAPDEF_PEX0 ...... 0xFFFFFFFF
MAPDEF_PEX0_IO ...... 0xFFFFFFFF
MAPDEF_PEX1 ...... 0xFFFFFFFF
MAPDEF_PEX1_IO ...... 0xFFFFFFFF>
pcie-controller {
compatible = "marvell,armada-370-pcie";
// Mandatory, we need to change to PCI 3dw addressing here
ranges = <
// For assigned-addresses
0x82000000 MAPDEF_INTERNAL 0 0x100000
// Non prefetchable memory
0x82000000 MAPDEF_PEX0 MAPDEF_PEX0 0 0xFFFFFFFF
0x82000000 MAPDEF_PEX1 MAPDEF_PEX1 0 0xFFFFFFFF
// IO memory
0x81000000 MAPDEF_PEX0_IO MAPDEF_PEX0_IO 0 0xFFFFFFFF
0x81000000 MAPDEF_PEX1_IO MAPDEF_PEX1_IO 0 0xFFFFFFFF>
pcie at 0,0 {
reg = <0x0800 0 0 0 0>;
/* Mandatory, the driver needs to parse this range to learn
the MAPDEF values. */
ranges = <0x82000000 0 0 0x82000000 MAPDEF_PEX0 0xFFFFFFFF
0x81000000 0 0 0x81000000 MAPDEF_PEX0_IO 0xFFFFFFFF>;
// The internal register block for this PEX
assigned-addresses = <0x82000800 MAPDEF_INTERNAL + 0x40000 0 0x2000>,
}
}
Notes
- The PEX link cannot be encoded in the highest DWORD due to the OF
PCI rules, lets just use the lower 2 dws instead. MAPDEP_X is a 2
dword value.
- The bridge ranges would be offset 0 length 4G-1 in the DT since
the value is not known. However firmware could do PCI address
assignment and fill in corrected values.
- Although unnecessary for Linux, the PCI driver could fill in the bridge
ranges to reflect the actual bridge setup.
- The top level mbus ranges can reflect the address translation:
MAPDEF_PEX0 + 0xC0000000 0xC0000000 0x10000 // Identity map MMIO
MAPDEF_PEX0_IO 0xD0000000 0x10000 // Translate 0xD0000000 to IO 0
- A full featured firmware could fill in the various ranges to
represent a working PCI bus configuration
So the PCI driver would now have to dynamically determine on its own a
host bridge aperture based on available space in the resource tree,
this is done instead of parsing ranges. I guess we could have a
'linux,host-aperture' or something as a stop gap.
The driver should create each root bridge by pulling
- reg = the device.fn of the config space
- assigned-addresess = the PEX internal register block
- ranges = The target ID's for the PEX
So there is no longer a need to assume in the DT binding that a
particular device.fn refers to a particular PEX.
If this is the way to go, I hope it can be a revision on top of the
existing PCI patch set?
Did I miss anything Arnd?
Jason
next prev parent reply other threads:[~2013-04-05 20:36 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-05 13:02 mvebu-mbus: defining a DT binding Thomas Petazzoni
2013-04-05 13:17 ` Arnd Bergmann
2013-04-05 13:51 ` Thomas Petazzoni
2013-04-05 14:36 ` Arnd Bergmann
2013-04-05 17:07 ` Jason Gunthorpe
2013-04-05 17:28 ` Arnd Bergmann
2013-04-05 17:48 ` Jason Gunthorpe
2013-04-05 19:49 ` Arnd Bergmann
2013-04-05 20:36 ` Jason Gunthorpe [this message]
2013-04-05 21:01 ` Arnd Bergmann
2013-04-05 21:21 ` Jason Gunthorpe
2013-04-06 8:39 ` Arnd Bergmann
2013-04-08 17:03 ` Jason Gunthorpe
2013-04-05 16:27 ` Jason Gunthorpe
2013-04-05 16:58 ` Arnd Bergmann
2013-04-05 17:29 ` Jason Gunthorpe
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=20130405203652.GA10505@obsidianresearch.com \
--to=jgunthorpe@obsidianresearch.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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.