From: Arnd Bergmann <arnd@arndb.de>
To: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>,
Tomasz Nowicki <tn@semihalf.com>,
Bjorn Helgaas <bhelgaas@google.com>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Marc Zyngier <marc.zyngier@arm.com>,
Hanjun Guo <hanjun.guo@linaro.org>,
Liviu Dudau <Liviu.Dudau@arm.com>,
linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org,
linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [Patch v7 4/7] PCI/ACPI: Add interface acpi_pci_root_create()
Date: Wed, 11 Nov 2015 21:55:37 +0100 [thread overview]
Message-ID: <4357616.eloqZ4oI6r@wuerfel> (raw)
In-Reply-To: <20151111174647.GA30051@red-moon>
On Wednesday 11 November 2015 17:46:47 Lorenzo Pieralisi wrote:
> On Tue, Nov 10, 2015 at 01:50:46PM +0800, Jiang Liu wrote:
> If we go with this approach though, you are not adding the offset to
> the resource when parsing the memory spaces in acpi_decode_space(), are we
> sure that's what we really want ?
>
> In DT, a host bridge range has a:
>
> - CPU physical address
> - PCI bus address
>
> We use that to compute the offset between primary bus (ie CPU physical
> address) and secondary bus (ie PCI bus address).
>
> The value ending up in the PCI resource struct (for memory space) is
> the CPU physical address, if you do not add the offset in acpi_decode_space
> that does not hold true on platforms where CPU<->PCI offset != 0 on ACPI,
> am I wrong ?
Sinan Kaya pointed out that SBSA mandates a 1:1 mapping for memory space.
> On arm64, IO_SPACE_LIMIT is 16M, which, AFAIK is a kernel limit, not
> a HW one. Comparing the resources parsed from the PCI bridge _CRS against
> the range 0..IO_SPACE_LIMIT is not necessarily meaningful (or at least
> not meaningful in its current form), on ia64 it works because IO_SPACE_LIMIT
> is bumped up to 4G, that's the reason why adding the offset to the ACPI IO
> resources work on ia64 as far as I understand.
>
> And that's why I pulled Arnd in this discussion since he knows better
> than me: what does ioport_resource _really_ represent on ARM64 ? It seems
> to me that it is a range of IO ports values (ie a window that defines
> the allowed offset in the virtual address space allocated to PCI IO) that
> has _nothing_ to do with the CPU physical address at which the IO space is
> actually mapped.
Right, the ioport_resource uses the same space as the CPU virtual address,
with an offset of PCI_IOBASE that is defined as
#define PCI_IOBASE ((void __iomem *)PCI_IO_VIRT_BASE)
#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
#define PCI_IO_END (MODULES_VADDR - SZ_2M)
#define PCI_IO_SIZE SZ_16M
> To sum it up for a, say, DWordIo/Memory descriptor:
>
> - AddressMinimum, AddressMaximum represent the PCI bus addresses defining
> the resource start..end
> - AddressTranslation is the offset that has to be added to AddressMinimum
> and AddressMaximum to get the window in CPU physical address space
>
> So:
>
> - Either we go with the patch attached (but please check my comment on
> the memory spaces)
> - Or we patch acpi_pci_root_validate_resources() to amend the way
> IORESOURCE_IO is currently checked against ioport_resource, it can't
> work on arm64 at present, I described why above
>
> Thoughts appreciated it is time we got this sorted and thanks for
> the patch.
The easiest way would be to assume that nobody is building a server
system that has multiple I/O spaces. SBSA explicitly makes I/O space
optional, and really the only reason anyone includes that feature these
days is for initializing GPUs through the BIOS POST method, so that
is not relevant for servers. Even when you do have multiple PCIe
host controllers that all support I/O space, the most logical implementation
would be to share one common space.
If that fails, there are still two cases you have to care about, and
it really depends on what hardware makers decide to use here (and whether
we have any influence over them). The easier way for us to do this is
if every hardware sets up the mapping between CPU physical and PCI I/O
in a way that the I/O space numbers are non-overlapping between the
host controllers. That way we can still make Linux ioport_resource
addresses the same as PCI I/O space addresses (using io_offset=0),
with the downside being that only the first PCIe host (as enumerated
by the bootloader) can have I/O space addresses below 1024 that may
be required for ISA compatibility on some hardware.
Arnd
next prev parent reply other threads:[~2015-11-11 20:55 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-14 6:29 [Patch v7 0/7] Consolidate ACPI PCI root common code into ACPI core Jiang Liu
2015-10-14 6:29 ` [Patch v7 1/7] ACPI/PCI: Enhance ACPI core to support sparse IO space Jiang Liu
2015-10-14 6:29 ` [Patch v7 2/7] ia64/PCI/ACPI: Use common ACPI resource parsing interface for host bridge Jiang Liu
2015-10-14 6:29 ` [Patch v7 3/7] ia64/PCI: Use common struct resource_entry to replace struct iospace_resource Jiang Liu
2015-10-14 6:29 ` [Patch v7 4/7] PCI/ACPI: Add interface acpi_pci_root_create() Jiang Liu
2015-10-15 20:47 ` Bjorn Helgaas
2015-10-21 9:57 ` Tomasz Nowicki
2015-10-21 11:02 ` Liviu Dudau
2015-10-21 11:27 ` Tomasz Nowicki
2015-10-21 11:42 ` Lorenzo Pieralisi
2015-10-21 12:16 ` Tomasz Nowicki
2015-10-21 11:48 ` Liviu Dudau
2015-10-21 11:49 ` Jiang Liu
2015-10-21 11:52 ` Liviu Dudau
2015-11-05 14:21 ` Tomasz Nowicki
2015-11-05 18:19 ` Lorenzo Pieralisi
2015-11-06 7:55 ` Jiang Liu
2015-11-06 8:52 ` Jiang Liu
2015-11-06 10:37 ` Tomasz Nowicki
2015-11-06 11:46 ` Jiang Liu
2015-11-06 12:40 ` Tomasz Nowicki
2015-11-06 13:22 ` Jiang Liu
2015-11-06 14:45 ` Lorenzo Pieralisi
2015-11-06 15:32 ` Jiang Liu
2015-11-06 15:44 ` Jiang Liu
2015-11-23 15:23 ` Sinan Kaya
2015-11-09 14:07 ` Tomasz Nowicki
2015-11-09 17:10 ` Lorenzo Pieralisi
2015-11-09 20:09 ` Arnd Bergmann
2015-11-10 5:50 ` Jiang Liu
2015-11-11 17:46 ` Lorenzo Pieralisi
2015-11-11 18:12 ` Liviu Dudau
2015-11-11 20:55 ` Arnd Bergmann [this message]
2015-11-12 12:08 ` Lorenzo Pieralisi
2015-11-12 8:43 ` Jiang Liu
2015-11-12 13:21 ` Tomasz Nowicki
2015-11-12 14:04 ` Jiang Liu
2015-11-12 14:45 ` Tomasz Nowicki
2015-11-12 15:05 ` Jiang Liu
2015-11-13 12:57 ` Tomasz Nowicki
2015-11-13 17:03 ` Lorenzo Pieralisi
2015-11-13 17:49 ` Jiang Liu
2015-11-20 10:18 ` Lorenzo Pieralisi
2015-11-27 6:59 ` Tomasz Nowicki
2015-11-06 12:51 ` Lorenzo Pieralisi
2015-11-06 10:18 ` Tomasz Nowicki
2015-11-06 7:51 ` Jiang Liu
2015-10-14 6:29 ` [Patch v7 5/7] ACPI, PCI: Reset acpi_root_dev->domain to 0 when pci_ignore_seg is set Jiang Liu
2015-10-14 6:29 ` [Patch v7 6/7] x86/PCI/ACPI: Use common interface to support PCI host bridge Jiang Liu
2015-10-15 20:46 ` Bjorn Helgaas
2015-10-14 6:29 ` [Patch v7 7/7] ia64/PCI/ACPI: " Jiang Liu
2015-10-15 20:48 ` [Patch v7 0/7] Consolidate ACPI PCI root common code into ACPI core Bjorn Helgaas
2015-10-15 21:49 ` Rafael J. Wysocki
2015-10-16 1:56 ` Jiang Liu
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=4357616.eloqZ4oI6r@wuerfel \
--to=arnd@arndb.de \
--cc=Liviu.Dudau@arm.com \
--cc=bhelgaas@google.com \
--cc=hanjun.guo@linaro.org \
--cc=jiang.liu@linux.intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=marc.zyngier@arm.com \
--cc=rafael.j.wysocki@intel.com \
--cc=tn@semihalf.com \
--cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox