Subject: Re: [PATCH] ppc: ioremap() on PPC44x platforms now accepts 64bit addresses

From: Sergei Shtylyov <[email-masked]>
Date: Mon, 29 Jan 2007 15:45:14 +0300

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 <[email-masked]>

[...]

> 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