[PATCH] ppc: ioremap() on PPC44x platforms now accepts 64bit addresses
Sergei Shtylyov
sshtylyov at ru.mvista.com
Mon Jan 29 23:45:14 EST 2007
Hello.
Stefan Roese wrote:
> [PATCH] ppc: ioremap() on PPC44x platforms now accepts 64bit addresses
> On systems that supply a real 64bit address (with
> CONFIG_RESOURCES_64BIT enabled), don't use the fixup function. This
> allows us to use the fixup function when no ERPN is specified and use
> the 64 bit address when the ERPN is supplied.
> Signed-off-by: Stefan Roese <sr at denx.de>
[...]
> diff --git a/arch/ppc/mm/pgtable.c b/arch/ppc/mm/pgtable.c
> index 354a940..2f9a311 100644
> --- a/arch/ppc/mm/pgtable.c
> +++ b/arch/ppc/mm/pgtable.c
> @@ -156,9 +156,19 @@ ioremap64(unsigned long long addr, unsigned long size)
> void __iomem *
> ioremap(phys_addr_t addr, unsigned long size)
> {
> - phys_addr_t addr64 = fixup_bigphys_addr(addr, size);
> -
> - return ioremap64(addr64, size);
> + /*
> + * On systems that supply a real 64bit address
> + * (with CONFIG_RESOURCES_64BIT enabled), don't use the
> + * fixup function.
> + * This allows us to use the fixup function when no ERPN
> + * is specified and use the 64 bit address when the ERPN
> + * is suppied.
> + */
> + if ((unsigned long long)addr & 0xffffffff00000000ULL)
> + return ioremap64(addr, size);
I'm sorry but is this actually needed? From looking at the
arch/ppc/syslib/ibm44x_common.c and include/asm-ppc/ibm44x.h I got an
impression that fixup_bigphys_addr() returns addresses >= 4GB intact anyway
> + else
> + return ioremap64(fixup_bigphys_addr(addr, size),
> + size);
> }
> #endif /* CONFIG_PHYS_64BIT */
WBR, Sergei
More information about the Linuxppc-embedded
mailing list