Messages in this thread | | | From | Arnd Bergmann <> | Subject | Re: [PATCH 09/12] unicore32 machine related files: hardware registers | Date | Sat, 26 Feb 2011 14:16:09 +0100 |
| |
On Saturday 26 February 2011, Guan Xuetao wrote: > > > #ifndef __ASSEMBLY__ > > > > > > -# define __REG(x) (*((volatile unsigned long *)io_p2v(x))) > > > -# define __PREG(x) (io_v2p((unsigned long)&(x))) > > > +# define __REG(x) (void __iomem *)io_p2v(x) > > > > The patch looks correct, but if you make the the definition for > > PKUNITY_MMIO_BASE contain the cast to (void __iomem *), you no > > longer need another cast. > > Because the io_p2v(x) calculate x and PKUNITY_IOSPACE_BASE, > all registers should be added with (void __iomem *). > So I prefer to remain the previous patch.
The problem with the definition of io_p2v is that it gives you an type that is impossible to use correctly, except in assembly code. Linux assumes that MMIO registers in virtual space are __iomem pointers, and we like that to be consistent.
If you have a function that returns a virtual address, it should really have the same type as any other function that uses a virtual address.
Arnd
| |