Subject: Re: [PATCH] powerpc: make ioport_map() handle already mapped ranges

From: Arnd Bergmann <[email-masked]>
Date: Sun, 13 May 2007 00:18:42 +0200

On Saturday 12 May 2007, Olof Johansson wrote:
> Make ioport_map() handle already mapped port range without trying
> to add _IO_BASE to them.
> 
> 
> Signed-off-by: Olof Johansson <[email-masked]>
> 
> Index: 2.6.21/arch/powerpc/kernel/iomap.c
> ===================================================================
> --- 2.6.21.orig/arch/powerpc/kernel/iomap.c
> +++ 2.6.21/arch/powerpc/kernel/iomap.c
> @@ -106,7 +106,13 @@ EXPORT_SYMBOL(iowrite32_rep);
>  
>  void __iomem *ioport_map(unsigned long port, unsigned int len)
>  {
> -       return (void __iomem *) (port + _IO_BASE);
> +       /* Do nothing if we're being asked to map an already
> +        * ioremapped() address
> +        */
> +       if (port >= IMALLOC_BASE && (port+len) < IMALLOC_END)
> +               return (void __iomem *) port;
> +       else
> +               return (void __iomem *) (port + _IO_BASE);
>  }

This patch looks wrong to me, it's an indication that either a driver
is confusing ioport and __iomem addresses, or that something went
wrong during the initialization of the primary PCI bus.

We have a bug on cell that would be fixed with this patch, so it
might be the same problem, see the patch that I suggested for
this at http://patchwork.ozlabs.org/linuxppc/patch?id=10840 .

	Arnd <><