diff options
author | Magnus Damm <damm@igel.co.jp> | 2008-11-25 21:57:29 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2008-12-22 18:43:48 +0900 |
commit | 716777db7270255f1f7210fd87a7188b08c9a267 (patch) | |
tree | 01e65e44140231a2b16d7ebd273e7e7b280decb7 /arch/sh/include/asm/io.h | |
parent | 0c9122323acb0c3410dfbd219cb47f4c2e9305e3 (diff) | |
download | kernel_samsung_smdk4412-716777db7270255f1f7210fd87a7188b08c9a267.zip kernel_samsung_smdk4412-716777db7270255f1f7210fd87a7188b08c9a267.tar.gz kernel_samsung_smdk4412-716777db7270255f1f7210fd87a7188b08c9a267.tar.bz2 |
sh: P4 ioremap pass-through
This patch adds a pass-through case when ioremapping P4 addresses.
Addresses passed to ioremap() should be physical addresses, so the
best option is usually to convert the virtual address to a physical
address before calling ioremap. This will give you a virtual address
in P2 which matches the physical address and this works well for
most internal hardware blocks on the SuperH architecture.
However, some hardware blocks must be accessed through P4. Converting
the P4 address to a physical and then back to a P2 does not work. One
example of this is the sh7722 TMU block, it must be accessed through P4.
Without this patch P4 addresses will be mapped using PTEs which
requires the page allocator to be up and running.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include/asm/io.h')
-rw-r--r-- | arch/sh/include/asm/io.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h index 65eaae3..61f6dae 100644 --- a/arch/sh/include/asm/io.h +++ b/arch/sh/include/asm/io.h @@ -260,6 +260,10 @@ __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags) return (void __iomem *)P2SEGADDR(offset); } + + /* P4 above the store queues are always mapped. */ + if (unlikely(offset >= P3_ADDR_MAX)) + return (void __iomem *)P4SEGADDR(offset); #endif return __ioremap(offset, size, flags); |