[PATCH v3 04/62] arm/acpi: Emulate io ports for arm
Arnd Bergmann
arnd at arndb.de
Wed Nov 18 00:24:54 PST 2015
On Wednesday 18 November 2015 15:01:26 Shannon Zhao wrote:
> Hi Arnd,
>
> On 2015/11/17 17:50, Arnd Bergmann wrote:
> > On Tuesday 17 November 2015 17:40:03 shannon.zhao at linaro.org wrote:
> >> +/*
> >> + * Emulate x86 io ports for arm.
> >> + */
> >> +#define __armio(addr) ( (void __iomem *)addr )
> >> +
> >> +#define inb(c) ( readb( __armio(c) ) )
> >> +#define inw(c) ( readw( __armio(c) ) )
> >> +#define inl(c) ( readl( __armio(c) ) )
> >> +
> >> +#define outb(v, c) ( writeb(v, __armio(c) ) )
> >> +#define outw(v, c) ( writew(v, __armio(c) ) )
> >> +#define outl(v, c) ( writel(v, __armio(c) ) )
> >> +
> >
> > This is almost certainly wrong. There might be I/O port accesses, but they
> > won't be in the same place as normal pointers.
> >
> Sorry, maybe I didn't get what you mean. Here it just wants emulate the
> in(b,w,l) and out(b,w,l) which exist on x86 while not on ARM. So it
> could introduce less change to the common ACPI codes, for example
> acpi_os_write_port().
>
> I see there is the same thing in Linux arch/arm/include/asm/io.h
The problem is that your definition of __armio() is wrong. If you want to
do it right, you need to first find the PCI I/O port ranges and map them
into a virtual address, and then define __armio() in a way to add
the virtual address you have mapped them to.
Alternatively, define the functions so they don't try to access the
pointers but instead just print a warning.
Arnd
More information about the linux-arm-kernel
mailing list