From: Mark Kettenis <mark.kettenis@xs4all.nl>
To: Arnd Bergmann <arnd@kernel.org>
Cc: marcan@marcan.st, devicetree@vger.kernel.org, maz@kernel.org,
linux-kernel@vger.kernel.org, soc@kernel.org, robh+dt@kernel.org,
olof@lixom.net, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 13/18] arm64: ioremap: use nGnRnE mappings on platforms that require it
Date: Tue, 9 Feb 2021 00:20:25 +0100 (CET) [thread overview]
Message-ID: <c1bc2a087747c4d9@bloch.sibelius.xs4all.nl> (raw)
In-Reply-To: <CAK8P3a2Ad+xmmMWgznOHPpxgCXKWFYfpHBqt_49_UuxrwFSq+A@mail.gmail.com> (message from Arnd Bergmann on Mon, 8 Feb 2021 23:57:20 +0100)
> From: Arnd Bergmann <arnd@kernel.org>
> Date: Mon, 8 Feb 2021 23:57:20 +0100
>
> On Thu, Feb 4, 2021 at 9:39 PM Hector Martin <marcan@marcan.st> wrote:
>
> > (3) Do it at a lower level, in ioremap() itself. This requires that
> > ioremap() somehow discriminates based on address range to pick what
> > kind of mapping to make.
> >
> > Declaring these address ranges would be an issue. Options:
> >
> > a) An out of band list in a DT node, a la /reserved-memory
> >
> > b) Something based on the existing DT hierarchy, where we can scan
> > bus ranges and locate buses with a property that says "nGnRnE" or
> > "nGnRE" and dynamically build the list based on that.
> >
> > The advantage of this option is that it doesn't touch non-arch code.
> > The disadvantage is that it adds a complete new bespoke mechanism to
> > the DT, and that it does not let device drivers actually select the
> > IO mode, which might be desirable in the future anyway for some
> > devices.
>
> I tried investigating further what this would look like, but scanning through
> the ADT dump for what nodes use which register ranges. At first it seemed
> the range 0x200000000-0x2ffffffff is used for all normal devices, while
> the three PCI buses fall into the 0x380000000-0x4ffffffff,
> 0x500000000-0x67fffffff and 0x680000000-0x6ffffffff ranges
> respectively. This would allow a nice abstraction where one node
> contains all the devices in the 0x200000000-0x2ffffffff, and we do a
> translation in of_address_to_resource(), similar to what we have for
> pci and isa nodes with their special addresses.
>
> However, I did find that there are several nodes that use mmio
> addresses next to the PCI addresses, e.g. apciec0, dart-apciec0,
> apciec0-piodma, dart-acio0, acio0, acio-cpu0, atc0-dpin0, atc-phy0,
> dart-usb0, and usb-drd0 in the 0x380000000-0x3ffffffff range, just
> before the MMIO space of the first PCIe bus, so it gets a little
> more complicated.
>
> The actual device node could look something like
>
> #define MAP_NONPOSTED 0x80000000
>
> arm-io { /* name for adt, should be changed */
> compatible = "apple,m1-internal-bus";
> #address-cells = <2>; /* or maybe <3> if we want */
> #size-cells = <2>;
> ranges =
> /* on-chip MMIO */
> <(MAP_NONPOSTED | 0x2) 0x0 0x2 0x0 0x1 0x0>,
>
> /* first PCI: 2GB control, 4GB memory space */
> <(MAP_NONPOSTED | 0x3) 0x80000000 0x3 0x80000000 0x0 0x80000000>,
> <0x4 0x0 0x4 0x0 0x1 0x0>,
>
> /* second PCI: 2GB control, 4GB memory space */
> <(MAP_NONPOSTED | 0x5) 0x0 0x5 0x0 0x0 0x80000000>,
> <0x5 0x80000000 0x5 0x80000000 0x1>,
>
> /* third PCI 0.5GB control, 1.5GB memory space*/
> <(MAP_NONPOSTED | 0x6) 0x80000000 0x6 0x80000000 0x0 0x20000000>,
> <0x6 0xa0000000 0x6 0xa0000000 0x0 0x60000000>;
> }
>
> The MAP_NONPOSTED flag then gets interpreted by the .translate() and
> .get_flags() callbacks of "struct of_bus" in the kernel, where it is put into
> a "struct resource" flag, and interpreted when the resource gets mapped.
>
> The PCI host controller nests inside of the node above, and (in theory)
> uses the same trick to distinguish between prefetchable and non-prefetchable
> memory, except in practice this is handled in device drivers that already
> know whether to call ioremap() or ioremap_wc().
It is only PCI mmio space that needs to be nGnRE. The PCI host
controller register space itself needs nGnRnE just like all other
integrated peripherals (or at least it works that way).
For U-Boot I'm using the following memory map:
static struct mm_region apple_mem_map[] = {
{
/* I/O */
.virt = 0x200000000,
.phys = 0x200000000,
.size = 8UL * SZ_1G,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
/* I/O */
.virt = 0x500000000,
.phys = 0x500000000,
.size = 2UL * SZ_1G,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
/* I/O */
.virt = 0x680000000,
.phys = 0x680000000,
.size = SZ_512M,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
PTE_BLOCK_NON_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
/* PCIE */
.virt = 0x6a0000000,
.phys = 0x6a0000000,
.size = SZ_512M,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRE) |
PTE_BLOCK_INNER_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
/* PCIE */
.virt = 0x6c0000000,
.phys = 0x6c0000000,
.size = SZ_1G,
.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRE) |
PTE_BLOCK_INNER_SHARE |
PTE_BLOCK_PXN | PTE_BLOCK_UXN
}, {
/* RAM */
.virt = 0x800000000,
.phys = 0x800000000,
.size = 8UL * SZ_1G,
.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
PTE_BLOCK_INNER_SHARE
}, {
/* List terminator */
0,
}
};
struct mm_region *mem_map = apple_mem_map;
This seems to work so far. It only has the regions for one PCIe
controller. I suppose the other two are there to support the TB4
ports?
So there is one 512M region for "32-bit" mmio starting at 0x6a0000000
and one 1G region for "64-bit" mmio starting at 0x6c0000000.
Cheers,
Mark
next prev parent reply other threads:[~2021-02-08 23:28 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-04 20:39 [PATCH 00/18] Apple M1 SoC platform bring-up Hector Martin
2021-02-04 20:39 ` [PATCH 01/18] dt-bindings: vendor-prefixes: add AAPL prefix Hector Martin
2021-02-08 10:27 ` Krzysztof Kozlowski
2021-02-08 17:32 ` Rob Herring
2021-02-08 18:12 ` Krzysztof Kozlowski
2021-02-08 23:17 ` Hector Martin
2021-02-04 20:39 ` [PATCH 02/18] dt-bindings: arm: cpus: Add AAPL,firestorm & icestorm compatibles Hector Martin
2021-02-04 20:39 ` [PATCH 03/18] dt-bindings: arm: AAPL: Add bindings for Apple ARM platforms Hector Martin
2021-02-04 20:39 ` [PATCH 04/18] arm64: Kconfig: Introduce CONFIG_ARCH_APPLE Hector Martin
[not found] ` <87k0rll4i8.wl-maz@kernel.org>
2021-02-07 8:05 ` Hector Martin 'marcan'
2021-02-04 20:39 ` [PATCH 05/18] tty: serial: samsung_tty: add support for Apple UARTs Hector Martin
2021-02-04 23:55 ` kernel test robot
2021-02-05 9:44 ` Hector Martin 'marcan'
2021-02-05 2:19 ` kernel test robot
[not found] ` <87lfc1l4lo.wl-maz@kernel.org>
2021-02-07 9:12 ` Hector Martin 'marcan'
2021-02-07 9:26 ` Hector Martin 'marcan'
2021-02-08 9:36 ` Krzysztof Kozlowski
2021-02-08 16:14 ` Hector Martin
[not found] ` <73116feaa00de9173d1f2c35ce16e08f@kernel.org>
2021-02-08 16:18 ` Hector Martin
[not found] ` <YCFq3DqOzv4//6Vw@kroah.com>
2021-02-08 23:22 ` Hector Martin
2021-02-08 10:54 ` Krzysztof Kozlowski
2021-02-08 16:10 ` Hector Martin
2021-02-08 18:37 ` Krzysztof Kozlowski
2021-02-08 23:23 ` Hector Martin
2021-02-04 20:39 ` [PATCH 06/18] dt-bindings: serial: samsung: Add AAPL,s5l-uart compatible Hector Martin
2021-02-04 20:39 ` [PATCH 07/18] tty: serial: samsung_tty: enable for ARCH_APPLE Hector Martin
[not found] ` <CAK8P3a1n+C5V5J24myy_h67DVp2YTN5Hd=tCWjPUYZcrAX4hCg@mail.gmail.com>
2021-02-04 21:27 ` Hector Martin 'marcan'
2021-02-04 20:39 ` [PATCH 08/18] arm64: cpufeature: Add a feature for FIQ support Hector Martin
[not found] ` <87im75l2lp.wl-maz@kernel.org>
2021-02-07 8:28 ` Hector Martin 'marcan'
[not found] ` <87czxalrwc.wl-maz@kernel.org>
2021-02-08 15:51 ` Hector Martin
2021-02-04 20:39 ` [PATCH 09/18] arm64: cputype: Add CPU types for the Apple M1 big/little cores Hector Martin
2021-02-04 20:39 ` [PATCH 10/18] arm64: Introduce FIQ support Hector Martin
[not found] ` <87h7mpky0f.wl-maz@kernel.org>
[not found] ` <CAK8P3a0-Qk1WAUaCWeX8Zypphpadan3YAOES9t7LFYBOJkXKog@mail.gmail.com>
2021-02-07 8:36 ` Hector Martin 'marcan'
[not found] ` <CAK8P3a1R51_nqfMWG7SxScJNJEQ3qvp-cynABKEDaQ4O9REM=Q@mail.gmail.com>
2021-02-07 15:38 ` Hector Martin 'marcan'
[not found] ` <CAK8P3a1vmUJ0EpzU2+u2gy8WHCVV5ur9u-oTzU2BP=ddbXQeLQ@mail.gmail.com>
2021-02-08 23:34 ` Hector Martin
2021-02-07 8:47 ` Hector Martin 'marcan'
2021-02-04 20:39 ` [PATCH 11/18] arm64: Kconfig: Require FIQ support for ARCH_APPLE Hector Martin
[not found] ` <87ft29kxmp.wl-maz@kernel.org>
2021-02-07 9:23 ` Hector Martin 'marcan'
[not found] ` <2a93bf0df74df8cb022e61d69d1de88e@kernel.org>
2021-02-08 15:48 ` Hector Martin
2021-02-04 20:39 ` [PATCH 12/18] arm64: setup: Use nGnRnE IO mappings for fixmap on Apple platforms Hector Martin
2021-02-04 20:39 ` [PATCH 13/18] arm64: ioremap: use nGnRnE mappings on platforms that require it Hector Martin
[not found] ` <CAK8P3a2Ad+xmmMWgznOHPpxgCXKWFYfpHBqt_49_UuxrwFSq+A@mail.gmail.com>
2021-02-08 23:20 ` Mark Kettenis [this message]
2021-02-09 0:25 ` Hector Martin
[not found] ` <CAK8P3a043eO4p2o6tizR2x7a1TZHMqO7TdX53JC4bTZnbQd9iQ@mail.gmail.com>
2021-02-09 9:58 ` Mark Kettenis
2021-02-09 11:22 ` Hector Martin
2021-02-10 12:24 ` Hector Martin
2021-02-10 13:40 ` Mark Kettenis
2021-02-04 20:39 ` [PATCH 14/18] dt-bindings: interrupt-controller: Add DT bindings for apple-aic Hector Martin
2021-02-09 23:07 ` Rob Herring
2021-02-04 20:39 ` [PATCH 15/18] irqchip/apple-aic: Add support for the Apple Interrupt Controller Hector Martin
[not found] ` <CAK8P3a1zbLM0s_GwkJ0AJQ8cocS-zcsWWKhOB7B99OtRYyDE7g@mail.gmail.com>
2021-02-04 22:04 ` Hector Martin 'marcan'
[not found] ` <CAK8P3a14vsLkCujd_XBAOAjL2h878gxkaoKPpaxL4jddZZcc-A@mail.gmail.com>
2021-02-05 7:41 ` Hector Martin 'marcan'
2021-02-05 2:27 ` kernel test robot
2021-02-05 9:45 ` Hector Martin 'marcan'
[not found] ` <87eehqlxlr.wl-maz@kernel.org>
[not found] ` <CAK8P3a25eFFrMG-9QknFZ6Ckc3-gkiLK=jQdnyTMgn-z4X0RHQ@mail.gmail.com>
2021-02-08 11:13 ` Hector Martin 'marcan'
[not found] ` <87a6selrkt.wl-maz@kernel.org>
2021-02-08 15:31 ` Hector Martin
2021-02-09 6:20 ` Hector Martin
2021-02-04 20:39 ` [PATCH 16/18] irqchip/apple-aic: Add SMP / IPI support Hector Martin
2021-02-04 20:39 ` [PATCH 17/18] dt-bindings: display: add AAPL,simple-framebuffer Hector Martin
2021-02-04 20:39 ` [PATCH 18/18] arm64: apple: Add initial Mac Mini 2020 (M1) devicetree Hector Martin
[not found] ` <CAK8P3a3v6emxavbyjFhY+WdvH1t4EPMZSjEsSx0M+cRqjRCO1g@mail.gmail.com>
2021-02-04 21:44 ` Hector Martin 'marcan'
[not found] ` <CAK8P3a2DawQA-PD5aqbkVPB7UxuohN0oe9mJPe8488pUryotJQ@mail.gmail.com>
2021-02-05 7:11 ` Hector Martin 'marcan'
2021-02-08 11:04 ` Krzysztof Kozlowski
2021-02-08 11:56 ` Hector Martin 'marcan'
2021-02-08 12:13 ` Krzysztof Kozlowski
[not found] ` <CAK8P3a0yBC3dui6vcz+NByWD-3LqRj-2MF89jpjb_k8r5xmNRA@mail.gmail.com>
2021-02-08 14:12 ` Hector Martin
2021-02-08 17:58 ` Rob Herring
2021-02-09 0:32 ` Hector Martin
2021-02-08 19:14 ` Rob Herring
2021-02-09 0:49 ` Hector Martin
2021-02-10 10:19 ` Tony Lindgren
2021-02-10 11:07 ` Hector Martin
2021-02-10 11:34 ` Tony Lindgren
2021-02-10 11:43 ` Hector Martin
2021-02-10 12:24 ` Daniel Palmer
2021-02-10 12:54 ` Tony Lindgren
2021-02-10 12:56 ` Hector Martin
2021-02-10 12:55 ` Krzysztof Kozlowski
2021-02-10 13:19 ` Tony Lindgren
2021-02-10 13:25 ` Krzysztof Kozlowski
[not found] ` <a2825482e2f68c2f8cad7cb564414759@kernel.org>
2021-02-08 14:53 ` Hector Martin
2021-02-05 11:35 ` [PATCH 00/18] Apple M1 SoC platform bring-up Hector Martin 'marcan'
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=c1bc2a087747c4d9@bloch.sibelius.xs4all.nl \
--to=mark.kettenis@xs4all.nl \
--cc=arnd@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcan@marcan.st \
--cc=maz@kernel.org \
--cc=olof@lixom.net \
--cc=robh+dt@kernel.org \
--cc=soc@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;
as well as URLs for NNTP newsgroup(s).