H8/300 read{b,w,l} / write{b,w,l} error fix
PATCH 1/1 H8/300 read{b,w,l} / write{b,w,l} error fix
Signed-off-by Yoshinori Sato <[email protected]>
include/asm-h8300/io.h +15 -6
@@ -70,15 +70,24 @@ }#define readb (addr) \ - ({ unsigned char __v = (*(volatile unsigned char *) ((addr) & 0x00ffffff)); __v; }) + ({ unsigned char __v = \ + *(volatile unsigned char *)((unsigned long)(addr) & 0x00ffffff); \ + __v; })#define readw (addr) \ - ({ unsigned short __v = (*(volatile unsigned short *) ((addr) & 0x00ffffff)); __v; }) + ({ unsigned short __v = \ + *(volatile unsigned short *)((unsigned long)(addr) & 0x00ffffff); \ + __v; })#define readl (addr) \ - ({ unsigned int __v = (*(volatile unsigned int *) ((addr) & 0x00ffffff)); __v; }) + ({ unsigned long __v = \ + *(volatile unsigned long *)((unsigned long)(addr) & 0x00ffffff); \ + __v; }) -#define writeb (b,addr) (void)((*(volatile unsigned char *) ((addr) & 0x00ffffff)) = (b)) -#define writew (b,addr) (void)((*(volatile unsigned short *) ((addr) & 0x00ffffff)) = (b)) -#define writel (b,addr) (void)((*(volatile unsigned int *) ((addr) & 0x00ffffff)) = (b)) +#define writeb (b,addr) (void)((*(volatile unsigned char *) \ + ((unsigned long)(addr) & 0x00ffffff)) = (b)) +#define writew (b,addr) (void)((*(volatile unsigned short *) \ + ((unsigned long)(addr) & 0x00ffffff)) = (b)) +#define writel (b,addr) (void)((*(volatile unsigned long *) \ + ((unsigned long)(addr) & 0x00ffffff)) = (b))#define readb_relaxed (addr) readb(addr)#define readw_relaxed (addr) readw(addr)#define readl_relaxed (addr) readl(addr)
Signature · 2 lines
Yoshinori Sato <[email protected]>
A message that is not in the archive (sent off-list or not yet received): [email protected]
At Fri, 12 Nov 2004 09:25:00 -0800,
Quoted 10 lines · Joe Perches
Review
Quoted 5 lines · Yoshinori Sato
#define readb(addr) \
(quoted diff) +3
-1- ({ unsigned char __v = (*(volatile unsigned char *) ((addr) & 0x00ffffff)); __v; }) + ({ unsigned char __v = \ + *(volatile unsigned char *)((unsigned long)(addr) & 0x00ffffff); \ + __v; })How about moving #define
IO_SPACE_LIMITup and using that instead?
It is so.
Signed-off-by Yoshinori Sato <[email protected]>
include/asm-h8300/io.h +18 -10
@@ -69,16 +69,27 @@#endif } +#define IO_SPACE_LIMIT 0xffffff +#define readb (addr) \ - ({ unsigned char __v = (*(volatile unsigned char *) ((addr) & 0x00ffffff)); __v; }) + ({ unsigned char __v = \ + *(volatile unsigned char *)((unsigned long)(addr) & IO_SPACE_LIMIT); \ + __v; })#define readw (addr) \ - ({ unsigned short __v = (*(volatile unsigned short *) ((addr) & 0x00ffffff)); __v; }) + ({ unsigned short __v = \ + *(volatile unsigned short *)((unsigned long)(addr) & IO_SPACE_LIMIT); \ + __v; })#define readl (addr) \ - ({ unsigned int __v = (*(volatile unsigned int *) ((addr) & 0x00ffffff)); __v; }) - -#define writeb (b,addr) (void)((*(volatile unsigned char *) ((addr) & 0x00ffffff)) = (b)) -#define writew (b,addr) (void)((*(volatile unsigned short *) ((addr) & 0x00ffffff)) = (b)) -#define writel (b,addr) (void)((*(volatile unsigned int *) ((addr) & 0x00ffffff)) = (b)) + ({ unsigned long __v = \ + *(volatile unsigned long *)((unsigned long)(addr) & IO_SPACE_LIMIT); \ + __v; }) + +#define writeb (b,addr) (void)((*(volatile unsigned char *) \ + ((unsigned long)(addr) & IO_SPACE_LIMIT)) = (b)) +#define writew (b,addr) (void)((*(volatile unsigned short *) \ + ((unsigned long)(addr) & IO_SPACE_LIMIT)) = (b)) +#define writel (b,addr) (void)((*(volatile unsigned long *) \ + ((unsigned long)(addr) & IO_SPACE_LIMIT)) = (b))#define readb_relaxed (addr) readb(addr)#define readw_relaxed (addr) readw(addr)#define readl_relaxed (addr) readl(addr)
@@ -224,9 +235,6 @@#define insb (a,b,l) io_insb(a,b,l)#define insw (a,b,l) io_insw(a,b,l)#define insl (a,b,l) io_insl(a,b,l) - -#define IO_SPACE_LIMIT 0xffffff -/* Values for nocacheflag and cmode */ #define IOMAP_FULL_CACHING 0
Signature · 2 lines
Yoshinori Sato <[email protected]>