[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