Thread (49 messages) 49 messages, 11 authors, 2014-09-12

Re: [PATCH v10 07/10] OF: Introduce helper function for getting PCI domain_nr

From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2014-09-10 16:29:07
Also in: linux-arch, linux-arm-kernel, linux-pci, lkml

On Tue, Sep 09, 2014 at 10:16:04AM +0100, Arnd Bergmann wrote:
On Tuesday 09 September 2014 09:46:21 Liviu Dudau wrote:
quoted
On Tue, Sep 09, 2014 at 06:54:21AM +0100, Yijing Wang wrote:
quoted
quoted
quoted
quoted
on new requests. This function gets called quite a lot and I'm trying not to
make it too heavy weight.
Generally, nothing should be accessing the same DT value frequently.
It should get cached somewhere.
The problem appears for DTs that don't have the pci-domain info. Then the cached
value is left at the default non-valid value and attempts to rescan the DT will
be made every time the function is called.
quoted
I don't really understand how domains are used so it's hard to provide
a recommendation here. Do domains even belong in the DT?
ACPI calls them segments and the way Bjorn explained it to me at some moment was
that it was an attempt to split up a bus in different groups (or alternatively,
merge a few busses together). To be honest I haven't seen systems where the domain
is anything other than zero, but JasonG (or maybe Benjamin) were floating an
idea of using the domain number to identify physical slots.
PCI domain(or named segment) is provided by firmware, in ACPI system, we evaluated it
by method "_SEG". in IA64 with ACPI, PCI hostbridge driver retrieves the domain from ACPI,
if it's absent, the default domain is zero. So I wonder why in DTS, if it's absent, we get
a auto increment domain value.
Because you can have more than one hostbridge (rare, but not impossible) and unless you
want to join the two segments, you might want to give it a different domain.
I think you misunderstood the question. The difference is that in ACPI you
are required to specify the domain, while in DT it is optional with your
implementation.

I think in general it would be nice if we could mandate that in DT you also
have to always provide a domain number, however the problem is that we can't
change the existing DTB files that people are using that do not specify a
domain.

We could possibly make this an architecture specific setting though and
mandate that all ARM64 platforms have to set it, while ARM32 does not need
it.
We can assume that if a domain is not specified and there is a single
top level PCIe node, the domain defaults to 0. Are there any arm32
platforms that require multiple domains (and do not specify a number in
the DT)?

-- 
Catalin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help