> -----Original Message----- > From: Arnd Bergmann [mailto:arnd@xxxxxxxx] > Sent: Saturday, February 26, 2011 9:16 PM > To: Guan Xuetao > Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-arch@xxxxxxxxxxxxxxx; 'Greg KH' > Subject: Re: [PATCH 09/12] unicore32 machine related files: hardware registers > > 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. Ok, I see. Please see following patch, __REG removed and __iomem added to io_p2v: diff --git a/arch/unicore32/include/mach/hardware.h b/arch/unicore32/include/mach/hardware.h index b71405a..b197b0b 100644 --- a/arch/unicore32/include/mach/hardware.h +++ b/arch/unicore32/include/mach/hardware.h @@ -17,13 +17,10 @@ #include "PKUnity.h" -#define io_p2v(x) ((x) - PKUNITY_MMIO_BASE) -#define io_v2p(x) ((x) + PKUNITY_MMIO_BASE) - #ifndef __ASSEMBLY__ - -# define __REG(x) (void __iomem *)io_p2v(x) - +#define io_p2v(x) (void __iomem *)((x) - PKUNITY_MMIO_BASE) +#else +#define io_p2v(x) ((x) - PKUNITY_MMIO_BASE) #endif #define PCIBIOS_MIN_IO 0x4000 /* should lower than 64KB */ > > Arnd Thanks & Regards. Guan Xuetao -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html