From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 01/15] ARM: mxs: Add core definitions
Date: Wed, 15 Dec 2010 18:51:06 +0100 [thread overview]
Message-ID: <201012151851.06217.arnd@arndb.de> (raw)
In-Reply-To: <20101215172305.GH9937@n2100.arm.linux.org.uk>
On Wednesday 15 December 2010, Russell King - ARM Linux wrote:
> On Wed, Dec 15, 2010 at 06:08:41PM +0100, Arnd Bergmann wrote:
> > On Wednesday 15 December 2010, Russell King - ARM Linux wrote:
> > > The alternative is we end up with:
> > >
> > > #define FOO_ASM_BASE 0xf0000000
> > > #define FOO_C_BASE ((void __force __iomem *)0xf0000000)
> >
> > But isn't a hardwire virtual I/O address something that should be
> > used only very rarely?
>
> You'd be surprised. With x86, the answer is clearly yes, because you
> have the special IO space.
>
> On architectures with no special IO space, everything is MMIO, including
> system peripherals. So when you come to the basics such as interrupt
> controllers and timers, which don't lend themselves to being ioremap()'d,
> you have to come up with a different scheme.
I don't know too much about x86, but on most architectures I've looked
at recently (powerpc, tile, microblaze, ...), the peripherals get
initialized way after the memory management, so actually everything
can get mapped using ioremap.
I understand that it's convenient for the system devices on ARM,
especially if they get used from assembly code, but I still thought
this would be an exception for stuff that is rather low-level.
> With statically mapped MMIO devices, we define the v:p mapping explicitly,
> and define constants above. And its these kinds of basic system
> peripherals that need to be accessed in one way or another from assembly
> code (eg, for stuff like sleep support.)
Right, I know.
> > I would assume that we only need to have the base address of the
> > mapping window defined somewhere and then use offsets:
> >
> > #ifdef __ASSEMBLY__
> > #define IOMEM_BASE 0xf0000000
> > #else
> > #define IOMEM_BASE ((void __iomem *)0xf0000000)
> > #endif
> >
> > #define FOO_BASE IOMEM_BASE + 0x18000
> > #define BAR_BASE IOMEM_BASE + 0x20000
>
> What if your interrupt controller and system controller are 1GB apart?
Well, we already map them them through a table, so we can always
define the table in a way that physically distinct ranges get mapped
to virtually contiguous locations.
> The reason I haven't done so is because it doesn't fit into an existing
> header file (we could create asm/iomem.h to contain it for people to
> include, but for the sake of five lines that's OTT.)
>
> Putting it in asm/io.h doesn't work because that's generally not safe
> for assembly code (and also causes issues with checkpatch wanting people
> rightfully to be using linux/io.h).
A lot of platforms have a mach/hardware.h file that defines the
actual addresses, so maybe an asm/hardware.h would work as a
place to keep definitions like this, and that includes the
underlying mach/hardware.h.
Arnd
next prev parent reply other threads:[~2010-12-15 17:51 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-13 12:54 [PATCH v6 00/15] ARM: mxs: Add initial support for MX23 and MX28 Shawn Guo
2010-12-13 12:54 ` [PATCH v6 01/15] ARM: mxs: Add core definitions Shawn Guo
2010-12-15 16:22 ` Arnd Bergmann
2010-12-15 16:40 ` Uwe Kleine-König
2010-12-15 16:58 ` Arnd Bergmann
2010-12-15 17:06 ` Uwe Kleine-König
2010-12-15 17:17 ` Arnd Bergmann
2010-12-15 17:27 ` Russell King - ARM Linux
2010-12-15 22:26 ` Arnd Bergmann
2010-12-15 18:49 ` Uwe Kleine-König
2010-12-16 1:37 ` Shawn Guo
2010-12-15 16:47 ` Russell King - ARM Linux
2010-12-15 17:08 ` Arnd Bergmann
2010-12-15 17:23 ` Russell King - ARM Linux
2010-12-15 17:51 ` Arnd Bergmann [this message]
2010-12-13 12:54 ` [PATCH v6 03/15] ARM: mxs: Add reset routines Shawn Guo
2010-12-13 12:55 ` [PATCH v6 06/15] ARM: mxs: Add timer support Shawn Guo
2010-12-13 13:53 ` Russell King - ARM Linux
2010-12-13 12:55 ` [PATCH v6 07/15] ARM: mxs: Add gpio support Shawn Guo
2010-12-13 12:55 ` [PATCH v6 08/15] ARM: mxs: Add iomux support Shawn Guo
2010-12-16 9:51 ` Uwe Kleine-König
2010-12-16 10:26 ` Shawn Guo
2010-12-13 12:55 ` [PATCH v6 15/15] ARM: mxs: Add build configuration for mxs Shawn Guo
2010-12-13 14:20 ` [PATCH v6 00/15] ARM: mxs: Add initial support for MX23 and MX28 Uwe Kleine-König
2010-12-14 8:31 ` [PATCH v6 00/15] ARM: mxs: Add initial support for MX23 andMX28 Shawn Guo
2010-12-14 13:00 ` Shawn Guo
2010-12-15 16:24 ` [PATCH v6 00/15] ARM: mxs: Add initial support for MX23 and MX28 Arnd Bergmann
2010-12-15 16:34 ` Uwe Kleine-König
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=201012151851.06217.arnd@arndb.de \
--to=arnd@arndb.de \
--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.