* [PATCH] arch: m32r: include: asm: add generic ioremap_wc() definition @ 2013-06-27 2:32 Chen Gang 2013-06-27 2:57 ` [PATCH] arch: m32r: include: asm: use 'readb' instead of 'read' Chen Gang 0 siblings, 1 reply; 12+ messages in thread From: Chen Gang @ 2013-06-27 2:32 UTC (permalink / raw) To: Hirokazu Takata Cc: linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch Add generic ioremap_wc() definition, or compiling failed. The related error (with allmodconfig): drivers/gpu/drm/drm_bufs.c: In function ‘drm_addmap_core’: drivers/gpu/drm/drm_bufs.c:219:5: error: implicit declaration of function ‘ioremap_wc’ [-Werror=implicit-function-declaration] drivers/gpu/drm/drm_bufs.c:219:17: warning: assignment makes pointer from integer without a cast [enabled by default] Signed-off-by: Chen Gang <gang.chen@asianux.com> --- arch/m32r/include/asm/io.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/arch/m32r/include/asm/io.h b/arch/m32r/include/asm/io.h index 4010f1f..f9f4fb6 100644 --- a/arch/m32r/include/asm/io.h +++ b/arch/m32r/include/asm/io.h @@ -67,6 +67,7 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size) extern void iounmap(volatile void __iomem *addr); #define ioremap_nocache(off,size) ioremap(off,size) +#define ioremap_wc ioremap_nocache /* * IO bus memory addresses are also 1:1 with the physical address -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] arch: m32r: include: asm: use 'readb' instead of 'read' 2013-06-27 2:32 [PATCH] arch: m32r: include: asm: add generic ioremap_wc() definition Chen Gang @ 2013-06-27 2:57 ` Chen Gang 2013-06-27 3:29 ` [PATCH] arch: m32r: include: asm: add ioread*be() and iowrite*be() Chen Gang 0 siblings, 1 reply; 12+ messages in thread From: Chen Gang @ 2013-06-27 2:57 UTC (permalink / raw) To: Hirokazu Takata Cc: linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch Need use 'readb' instead of 'read', it is a typo issue which found by compiler. The related error (with allmodconfig): drivers/i2c/busses/i2c-ocores.c: In function ‘oc_getreg_8’: drivers/i2c/busses/i2c-ocores.c:96:2: error: implicit declaration of function ‘read’ [-Werror=implicit-function-declaration] Signed-off-by: Chen Gang <gang.chen@asianux.com> --- arch/m32r/include/asm/io.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/m32r/include/asm/io.h b/arch/m32r/include/asm/io.h index 4010f1f..343ae4c 100644 --- a/arch/m32r/include/asm/io.h +++ b/arch/m32r/include/asm/io.h @@ -162,7 +162,7 @@ static inline void _writel(unsigned long l, unsigned long addr) #define __raw_writew writew #define __raw_writel writel -#define ioread8 read +#define ioread8 readb #define ioread16 readw #define ioread32 readl #define iowrite8 writeb -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] arch: m32r: include: asm: add ioread*be() and iowrite*be() 2013-06-27 2:57 ` [PATCH] arch: m32r: include: asm: use 'readb' instead of 'read' Chen Gang @ 2013-06-27 3:29 ` Chen Gang 2013-06-27 4:37 ` [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() Chen Gang 0 siblings, 1 reply; 12+ messages in thread From: Chen Gang @ 2013-06-27 3:29 UTC (permalink / raw) To: Hirokazu Takata Cc: linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch Add generic ioread*be() and iowrite*be(), or compiling fails. The related error (with allmodconfig): drivers/ipack/ipack.c: In function ‘ipack_device_read_id’: drivers/ipack/ipack.c:376:3: error: implicit declaration of function ‘ioread16be’ [-Werror=implicit-function-declaration] Signed-off-by: Chen Gang <gang.chen@asianux.com> --- arch/m32r/include/asm/io.h | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/arch/m32r/include/asm/io.h b/arch/m32r/include/asm/io.h index 4010f1f..9f9b609 100644 --- a/arch/m32r/include/asm/io.h +++ b/arch/m32r/include/asm/io.h @@ -164,10 +164,14 @@ static inline void _writel(unsigned long l, unsigned long addr) #define ioread8 read #define ioread16 readw +#define ioread16be(addr) __be16_to_cpu(__raw_readw(addr)) #define ioread32 readl +#define ioread32be(addr) __be32_to_cpu(__raw_readl(addr)) #define iowrite8 writeb #define iowrite16 writew +#define iowrite16be(v, addr) __raw_writew(__cpu_to_be16(v), addr) #define iowrite32 writel +#define iowrite32be(v, addr) __raw_writel(__cpu_to_be32(v), addr) #define mmiowb() -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 3:29 ` [PATCH] arch: m32r: include: asm: add ioread*be() and iowrite*be() Chen Gang @ 2013-06-27 4:37 ` Chen Gang 2013-06-27 4:42 ` Chen Gang 2013-06-27 7:07 ` Geert Uytterhoeven 0 siblings, 2 replies; 12+ messages in thread From: Chen Gang @ 2013-06-27 4:37 UTC (permalink / raw) To: Hirokazu Takata Cc: linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch add generic ioread*_rep() and iowrite*_rep(), or compiling failed. The related error (with allmodconfig): CC [M] drivers/mtd/nand/nand_base.o drivers/mtd/nand/nand_base.c: In function ‘nand_write_buf’: drivers/mtd/nand/nand_base.c:216:2: error: implicit declaration of function ‘iowrite8_rep’ [-Werror=implicit-function-declaration] drivers/mtd/nand/nand_base.c: In function ‘nand_read_buf’: drivers/mtd/nand/nand_base.c:231:2: error: implicit declaration of function ‘ioread8_rep’ [-Werror=implicit-function-declaration] drivers/mtd/nand/nand_base.c: In function ‘nand_write_buf16’: drivers/mtd/nand/nand_base.c:247:2: error: implicit declaration of function ‘iowrite16_rep’ [-Werror=implicit-function-declaration] drivers/mtd/nand/nand_base.c: In function ‘nand_read_buf16’: drivers/mtd/nand/nand_base.c:263:2: error: implicit declaration of function ‘ioread16_rep’ [-Werror=implicit-function-declaration] Signed-off-by: Chen Gang <gang.chen@asianux.com> --- arch/m32r/include/asm/io.h | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/arch/m32r/include/asm/io.h b/arch/m32r/include/asm/io.h index 4010f1f..167d6ed 100644 --- a/arch/m32r/include/asm/io.h +++ b/arch/m32r/include/asm/io.h @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) #define iowrite16 writew #define iowrite32 writel +#define ioread8_rep(p, dst, count) \ + insb((unsigned long) (p), (dst), (count)) +#define ioread16_rep(p, dst, count) \ + insw((unsigned long) (p), (dst), (count)) +#define ioread32_rep(p, dst, count) \ + insl((unsigned long) (p), (dst), (count)) + +#define iowrite8_rep(p, src, count) \ + outsb((unsigned long) (p), (src), (count)) +#define iowrite16_rep(p, src, count) \ + outsw((unsigned long) (p), (src), (count)) +#define iowrite32_rep(p, src, count) \ + outsl((unsigned long) (p), (src), (count)) + #define mmiowb() #define flush_write_buffers() do { } while (0) /* M32R_FIXME */ -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 4:37 ` [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() Chen Gang @ 2013-06-27 4:42 ` Chen Gang 2013-06-27 7:07 ` Geert Uytterhoeven 1 sibling, 0 replies; 12+ messages in thread From: Chen Gang @ 2013-06-27 4:42 UTC (permalink / raw) To: Hirokazu Takata Cc: linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch Hello Maintainers: If the related 4 patches for io.h pass your checking, it seems OK to merge them into one patch, the diff like below: --------------------------------diff begin------------------------------ diff --git a/arch/m32r/include/asm/io.h b/arch/m32r/include/asm/io.h index 4010f1f..5506d86 100644 --- a/arch/m32r/include/asm/io.h +++ b/arch/m32r/include/asm/io.h @@ -67,6 +67,7 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size) extern void iounmap(volatile void __iomem *addr); #define ioremap_nocache(off,size) ioremap(off,size) +#define ioremap_wc ioremap_nocache /* * IO bus memory addresses are also 1:1 with the physical address @@ -162,12 +163,30 @@ static inline void _writel(unsigned long l, unsigned long addr) #define __raw_writew writew #define __raw_writel writel -#define ioread8 read +#define ioread8 readb #define ioread16 readw +#define ioread16be(addr) __be16_to_cpu(__raw_readw(addr)) #define ioread32 readl +#define ioread32be(addr) __be32_to_cpu(__raw_readl(addr)) #define iowrite8 writeb #define iowrite16 writew +#define iowrite16be(v, addr) __raw_writew(__cpu_to_be16(v), addr) #define iowrite32 writel +#define iowrite32be(v, addr) __raw_writel(__cpu_to_be32(v), addr) + +#define ioread8_rep(p, dst, count) \ + insb((unsigned long) (p), (dst), (count)) +#define ioread16_rep(p, dst, count) \ + insw((unsigned long) (p), (dst), (count)) +#define ioread32_rep(p, dst, count) \ + insl((unsigned long) (p), (dst), (count)) + +#define iowrite8_rep(p, src, count) \ + outsb((unsigned long) (p), (src), (count)) +#define iowrite16_rep(p, src, count) \ + outsw((unsigned long) (p), (src), (count)) +#define iowrite32_rep(p, src, count) \ + outsl((unsigned long) (p), (src), (count)) #define mmiowb() --------------------------------diff end-------------------------------- Thanks. On 06/27/2013 12:37 PM, Chen Gang wrote: > add generic ioread*_rep() and iowrite*_rep(), or compiling failed. > > The related error (with allmodconfig): > > CC [M] drivers/mtd/nand/nand_base.o > drivers/mtd/nand/nand_base.c: In function ‘nand_write_buf’: > drivers/mtd/nand/nand_base.c:216:2: error: implicit declaration of function ‘iowrite8_rep’ [-Werror=implicit-function-declaration] > drivers/mtd/nand/nand_base.c: In function ‘nand_read_buf’: > drivers/mtd/nand/nand_base.c:231:2: error: implicit declaration of function ‘ioread8_rep’ [-Werror=implicit-function-declaration] > drivers/mtd/nand/nand_base.c: In function ‘nand_write_buf16’: > drivers/mtd/nand/nand_base.c:247:2: error: implicit declaration of function ‘iowrite16_rep’ [-Werror=implicit-function-declaration] > drivers/mtd/nand/nand_base.c: In function ‘nand_read_buf16’: > drivers/mtd/nand/nand_base.c:263:2: error: implicit declaration of function ‘ioread16_rep’ [-Werror=implicit-function-declaration] > > > Signed-off-by: Chen Gang <gang.chen@asianux.com> > --- > arch/m32r/include/asm/io.h | 14 ++++++++++++++ > 1 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/arch/m32r/include/asm/io.h b/arch/m32r/include/asm/io.h > index 4010f1f..167d6ed 100644 > --- a/arch/m32r/include/asm/io.h > +++ b/arch/m32r/include/asm/io.h > @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) > #define iowrite16 writew > #define iowrite32 writel > > +#define ioread8_rep(p, dst, count) \ > + insb((unsigned long) (p), (dst), (count)) > +#define ioread16_rep(p, dst, count) \ > + insw((unsigned long) (p), (dst), (count)) > +#define ioread32_rep(p, dst, count) \ > + insl((unsigned long) (p), (dst), (count)) > + > +#define iowrite8_rep(p, src, count) \ > + outsb((unsigned long) (p), (src), (count)) > +#define iowrite16_rep(p, src, count) \ > + outsw((unsigned long) (p), (src), (count)) > +#define iowrite32_rep(p, src, count) \ > + outsl((unsigned long) (p), (src), (count)) > + > #define mmiowb() > > #define flush_write_buffers() do { } while (0) /* M32R_FIXME */ > -- Chen Gang ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 4:37 ` [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() Chen Gang 2013-06-27 4:42 ` Chen Gang @ 2013-06-27 7:07 ` Geert Uytterhoeven 2013-06-27 8:25 ` Arnd Bergmann 2013-06-27 8:55 ` Chen Gang 1 sibling, 2 replies; 12+ messages in thread From: Geert Uytterhoeven @ 2013-06-27 7:07 UTC (permalink / raw) To: Chen Gang, Arnd Bergmann Cc: Hirokazu Takata, linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch On Thu, Jun 27, 2013 at 6:37 AM, Chen Gang <gang.chen@asianux.com> wrote: > --- a/arch/m32r/include/asm/io.h > +++ b/arch/m32r/include/asm/io.h > @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) > #define iowrite16 writew > #define iowrite32 writel > > +#define ioread8_rep(p, dst, count) \ > + insb((unsigned long) (p), (dst), (count)) As ioread8() is mapped to readb() (I/O memory space), not inb() (I/O port space), ioread8_rep() should map to readsb() (which m32r doesn't have yet BTW), not insb(). For m32r this does matter, as inb() and readb() use different mechanisms internally. It seems include/asm-generic/io.h also has this wrong? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 7:07 ` Geert Uytterhoeven @ 2013-06-27 8:25 ` Arnd Bergmann 2013-06-27 8:43 ` Geert Uytterhoeven 2013-06-28 2:19 ` Chen Gang 2013-06-27 8:55 ` Chen Gang 1 sibling, 2 replies; 12+ messages in thread From: Arnd Bergmann @ 2013-06-27 8:25 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Chen Gang, Hirokazu Takata, linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch On Thursday 27 June 2013 09:07:29 Geert Uytterhoeven wrote: > On Thu, Jun 27, 2013 at 6:37 AM, Chen Gang <gang.chen@asianux.com> wrote: > > --- a/arch/m32r/include/asm/io.h > > +++ b/arch/m32r/include/asm/io.h > > @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) > > #define iowrite16 writew > > #define iowrite32 writel > > > > +#define ioread8_rep(p, dst, count) \ > > + insb((unsigned long) (p), (dst), (count)) > > As ioread8() is mapped to readb() (I/O memory space), not inb() (I/O > port space), > ioread8_rep() should map to readsb() (which m32r doesn't have yet > BTW), not insb(). > For m32r this does matter, as inb() and readb() use different mechanisms > internally. > > It seems include/asm-generic/io.h also has this wrong? Yes, you are right. I thought we had fixed that long ago. Does the patch below look ok to you? Note that none of the architectures using asm-generic/io.h supports PIO access and it works by chance this way, but we should definitely fix it. Signed-off-by: Arnd Bergmann <arnd@arndb.de> diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h index d5afe96..8af7a64 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h @@ -161,108 +161,108 @@ static inline void outl(u32 b, unsigned long addr) #define outw_p(x, addr) outw((x), (addr)) #define outl_p(x, addr) outl((x), (addr)) -#ifndef insb -static inline void insb(unsigned long addr, void *buffer, int count) +#ifndef CONFIG_GENERIC_IOMAP +#define ioread8(addr) readb(addr) +#define ioread16(addr) readw(addr) +#define ioread16be(addr) __be16_to_cpu(__raw_readw(addr)) +#define ioread32(addr) readl(addr) +#define ioread32be(addr) __be32_to_cpu(__raw_readl(addr)) + +#define iowrite8(v, addr) writeb((v), (addr)) +#define iowrite16(v, addr) writew((v), (addr)) +#define iowrite16be(v, addr) __raw_writew(__cpu_to_be16(v), addr) +#define iowrite32(v, addr) writel((v), (addr)) +#define iowrite32be(v, addr) __raw_writel(__cpu_to_be32(v), addr) + +static inline void ioread8_rep(void __iomem *addr, void *buffer, int count) { if (count) { u8 *buf = buffer; do { - u8 x = __raw_readb(addr + PCI_IOBASE); + u8 x = __raw_readb(addr); *buf++ = x; } while (--count); } } -#endif -#ifndef insw -static inline void insw(unsigned long addr, void *buffer, int count) +static inline void ioread16_rep(void __iomem *addr, void *buffer, int count) { if (count) { u16 *buf = buffer; do { - u16 x = __raw_readw(addr + PCI_IOBASE); + u16 x = __raw_readw(addr); *buf++ = x; } while (--count); } } -#endif -#ifndef insl -static inline void insl(unsigned long addr, void *buffer, int count) +static inline void ioread32_rep(void __iomem *addr, void *buffer, int count) { if (count) { u32 *buf = buffer; do { - u32 x = __raw_readl(addr + PCI_IOBASE); + u32 x = __raw_readl(addr); *buf++ = x; } while (--count); } } -#endif -#ifndef outsb -static inline void outsb(unsigned long addr, const void *buffer, int count) +static inline void iowrite8_rep(void __iomem *addr, const void *buffer, int count) { if (count) { const u8 *buf = buffer; do { - __raw_writeb(*buf++, addr + PCI_IOBASE); + __raw_writeb(*buf++, addr); } while (--count); } } -#endif -#ifndef outsw -static inline void outsw(unsigned long addr, const void *buffer, int count) +static inline void iowrite16_rep(void __iomem *addr, const void *buffer, int count) { if (count) { const u16 *buf = buffer; do { - __raw_writew(*buf++, addr + PCI_IOBASE); + __raw_writew(*buf++, addr); } while (--count); } } -#endif -#ifndef outsl -static inline void outsl(unsigned long addr, const void *buffer, int count) +static inline void iowrite32_rep(void __iomem *addr, const void *buffer, int count) { if (count) { const u32 *buf = buffer; do { - __raw_writel(*buf++, addr + PCI_IOBASE); + __raw_writel(*buf++, addr); } while (--count); } } -#endif - -#ifndef CONFIG_GENERIC_IOMAP -#define ioread8(addr) readb(addr) -#define ioread16(addr) readw(addr) -#define ioread16be(addr) __be16_to_cpu(__raw_readw(addr)) -#define ioread32(addr) readl(addr) -#define ioread32be(addr) __be32_to_cpu(__raw_readl(addr)) +#endif /* CONFIG_GENERIC_IOMAP */ -#define iowrite8(v, addr) writeb((v), (addr)) -#define iowrite16(v, addr) writew((v), (addr)) -#define iowrite16be(v, addr) __raw_writew(__cpu_to_be16(v), addr) -#define iowrite32(v, addr) writel((v), (addr)) -#define iowrite32be(v, addr) __raw_writel(__cpu_to_be32(v), addr) +#ifndef insb +#define insb(a, dst, count) \ + ioread8_rep((a) + PCI_IOBASE, (dst), (count)) +#endif +#ifndef insw +#define insw(a, dst, count) \ + ioread16_rep((a) + PCI_IOBASE, (dst), (count)) +#endif +#ifndef insl +#define insl(a, dst, count) \ + ioread32_rep((a) + PCI_IOBASE, (dst), (count)) +#endif -#define ioread8_rep(p, dst, count) \ - insb((unsigned long) (p), (dst), (count)) -#define ioread16_rep(p, dst, count) \ - insw((unsigned long) (p), (dst), (count)) -#define ioread32_rep(p, dst, count) \ - insl((unsigned long) (p), (dst), (count)) - -#define iowrite8_rep(p, src, count) \ - outsb((unsigned long) (p), (src), (count)) -#define iowrite16_rep(p, src, count) \ - outsw((unsigned long) (p), (src), (count)) -#define iowrite32_rep(p, src, count) \ - outsl((unsigned long) (p), (src), (count)) -#endif /* CONFIG_GENERIC_IOMAP */ +#ifndef outsb +#define outsb(a, src, count) \ + iowrite8_rep((a) + PCI_IOBASE, (src), (count)) +#endif +#ifndef outsw +#define outsw(a, src, count) \ + iowrite16_rep((a) + PCI_IOBASE, (src), (count)) +#endif +#ifndef outsl +#define outsl(a, src, count) \ + iowrite32_rep((a) + PCI_IOBASE, (src), (count)) +#endif #ifndef IO_SPACE_LIMIT #define IO_SPACE_LIMIT 0xffff ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 8:25 ` Arnd Bergmann @ 2013-06-27 8:43 ` Geert Uytterhoeven 2013-06-28 2:19 ` Chen Gang 1 sibling, 0 replies; 12+ messages in thread From: Geert Uytterhoeven @ 2013-06-27 8:43 UTC (permalink / raw) To: Arnd Bergmann Cc: Chen Gang, Hirokazu Takata, linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch On Thu, Jun 27, 2013 at 10:25 AM, Arnd Bergmann <arnd@arndb.de> wrote: > On Thursday 27 June 2013 09:07:29 Geert Uytterhoeven wrote: >> On Thu, Jun 27, 2013 at 6:37 AM, Chen Gang <gang.chen@asianux.com> wrote: >> > --- a/arch/m32r/include/asm/io.h >> > +++ b/arch/m32r/include/asm/io.h >> > @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) >> > #define iowrite16 writew >> > #define iowrite32 writel >> > >> > +#define ioread8_rep(p, dst, count) \ >> > + insb((unsigned long) (p), (dst), (count)) >> >> As ioread8() is mapped to readb() (I/O memory space), not inb() (I/O >> port space), >> ioread8_rep() should map to readsb() (which m32r doesn't have yet >> BTW), not insb(). >> For m32r this does matter, as inb() and readb() use different mechanisms >> internally. >> >> It seems include/asm-generic/io.h also has this wrong? > > Yes, you are right. I thought we had fixed that long ago. > > Does the patch below look ok to you? Note that none of the architectures > using asm-generic/io.h supports PIO access and it works by chance > this way, but we should definitely fix it. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 8:25 ` Arnd Bergmann 2013-06-27 8:43 ` Geert Uytterhoeven @ 2013-06-28 2:19 ` Chen Gang 1 sibling, 0 replies; 12+ messages in thread From: Chen Gang @ 2013-06-28 2:19 UTC (permalink / raw) To: Arnd Bergmann Cc: Geert Uytterhoeven, Hirokazu Takata, linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch On 06/27/2013 04:25 PM, Arnd Bergmann wrote: > On Thursday 27 June 2013 09:07:29 Geert Uytterhoeven wrote: >> > On Thu, Jun 27, 2013 at 6:37 AM, Chen Gang <gang.chen@asianux.com> wrote: >>> > > --- a/arch/m32r/include/asm/io.h >>> > > +++ b/arch/m32r/include/asm/io.h >>> > > @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) >>> > > #define iowrite16 writew >>> > > #define iowrite32 writel >>> > > >>> > > +#define ioread8_rep(p, dst, count) \ >>> > > + insb((unsigned long) (p), (dst), (count)) >> > >> > As ioread8() is mapped to readb() (I/O memory space), not inb() (I/O >> > port space), >> > ioread8_rep() should map to readsb() (which m32r doesn't have yet >> > BTW), not insb(). >> > For m32r this does matter, as inb() and readb() use different mechanisms >> > internally. >> > >> > It seems include/asm-generic/io.h also has this wrong? > Yes, you are right. I thought we had fixed that long ago. > > Does the patch below look ok to you? Note that none of the architectures > using asm-generic/io.h supports PIO access and it works by chance > this way, but we should definitely fix it. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > Is it better to let the code block (from "#ifndef CONFIG_GENERIC_IOMAP to #endif) in an individual file (e.g. iomap_inline.h)? So that many architectures (m32r, tile, ...) can include the individual file to get these necessary code, and not need consider the confilict about the other code in generic io.h ? Thanks. > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h > index d5afe96..8af7a64 100644 > --- a/include/asm-generic/io.h > +++ b/include/asm-generic/io.h > @@ -161,108 +161,108 @@ static inline void outl(u32 b, unsigned long addr) > #define outw_p(x, addr) outw((x), (addr)) > #define outl_p(x, addr) outl((x), (addr)) > > -#ifndef insb > -static inline void insb(unsigned long addr, void *buffer, int count) > +#ifndef CONFIG_GENERIC_IOMAP > +#define ioread8(addr) readb(addr) > +#define ioread16(addr) readw(addr) > +#define ioread16be(addr) __be16_to_cpu(__raw_readw(addr)) > +#define ioread32(addr) readl(addr) > +#define ioread32be(addr) __be32_to_cpu(__raw_readl(addr)) > + > +#define iowrite8(v, addr) writeb((v), (addr)) > +#define iowrite16(v, addr) writew((v), (addr)) > +#define iowrite16be(v, addr) __raw_writew(__cpu_to_be16(v), addr) > +#define iowrite32(v, addr) writel((v), (addr)) > +#define iowrite32be(v, addr) __raw_writel(__cpu_to_be32(v), addr) > + > +static inline void ioread8_rep(void __iomem *addr, void *buffer, int count) > { > if (count) { > u8 *buf = buffer; > do { > - u8 x = __raw_readb(addr + PCI_IOBASE); > + u8 x = __raw_readb(addr); > *buf++ = x; > } while (--count); > } > } > -#endif > > -#ifndef insw > -static inline void insw(unsigned long addr, void *buffer, int count) > +static inline void ioread16_rep(void __iomem *addr, void *buffer, int count) > { > if (count) { > u16 *buf = buffer; > do { > - u16 x = __raw_readw(addr + PCI_IOBASE); > + u16 x = __raw_readw(addr); > *buf++ = x; > } while (--count); > } > } > -#endif > > -#ifndef insl > -static inline void insl(unsigned long addr, void *buffer, int count) > +static inline void ioread32_rep(void __iomem *addr, void *buffer, int count) > { > if (count) { > u32 *buf = buffer; > do { > - u32 x = __raw_readl(addr + PCI_IOBASE); > + u32 x = __raw_readl(addr); > *buf++ = x; > } while (--count); > } > } > -#endif > > -#ifndef outsb > -static inline void outsb(unsigned long addr, const void *buffer, int count) > +static inline void iowrite8_rep(void __iomem *addr, const void *buffer, int count) > { > if (count) { > const u8 *buf = buffer; > do { > - __raw_writeb(*buf++, addr + PCI_IOBASE); > + __raw_writeb(*buf++, addr); > } while (--count); > } > } > -#endif > > -#ifndef outsw > -static inline void outsw(unsigned long addr, const void *buffer, int count) > +static inline void iowrite16_rep(void __iomem *addr, const void *buffer, int count) > { > if (count) { > const u16 *buf = buffer; > do { > - __raw_writew(*buf++, addr + PCI_IOBASE); > + __raw_writew(*buf++, addr); > } while (--count); > } > } > -#endif > > -#ifndef outsl > -static inline void outsl(unsigned long addr, const void *buffer, int count) > +static inline void iowrite32_rep(void __iomem *addr, const void *buffer, int count) > { > if (count) { > const u32 *buf = buffer; > do { > - __raw_writel(*buf++, addr + PCI_IOBASE); > + __raw_writel(*buf++, addr); > } while (--count); > } > } > -#endif > - > -#ifndef CONFIG_GENERIC_IOMAP > -#define ioread8(addr) readb(addr) > -#define ioread16(addr) readw(addr) > -#define ioread16be(addr) __be16_to_cpu(__raw_readw(addr)) > -#define ioread32(addr) readl(addr) > -#define ioread32be(addr) __be32_to_cpu(__raw_readl(addr)) > +#endif /* CONFIG_GENERIC_IOMAP */ > > -#define iowrite8(v, addr) writeb((v), (addr)) > -#define iowrite16(v, addr) writew((v), (addr)) > -#define iowrite16be(v, addr) __raw_writew(__cpu_to_be16(v), addr) > -#define iowrite32(v, addr) writel((v), (addr)) > -#define iowrite32be(v, addr) __raw_writel(__cpu_to_be32(v), addr) > +#ifndef insb > +#define insb(a, dst, count) \ > + ioread8_rep((a) + PCI_IOBASE, (dst), (count)) > +#endif > +#ifndef insw > +#define insw(a, dst, count) \ > + ioread16_rep((a) + PCI_IOBASE, (dst), (count)) > +#endif > +#ifndef insl > +#define insl(a, dst, count) \ > + ioread32_rep((a) + PCI_IOBASE, (dst), (count)) > +#endif > > -#define ioread8_rep(p, dst, count) \ > - insb((unsigned long) (p), (dst), (count)) > -#define ioread16_rep(p, dst, count) \ > - insw((unsigned long) (p), (dst), (count)) > -#define ioread32_rep(p, dst, count) \ > - insl((unsigned long) (p), (dst), (count)) > - > -#define iowrite8_rep(p, src, count) \ > - outsb((unsigned long) (p), (src), (count)) > -#define iowrite16_rep(p, src, count) \ > - outsw((unsigned long) (p), (src), (count)) > -#define iowrite32_rep(p, src, count) \ > - outsl((unsigned long) (p), (src), (count)) > -#endif /* CONFIG_GENERIC_IOMAP */ > +#ifndef outsb > +#define outsb(a, src, count) \ > + iowrite8_rep((a) + PCI_IOBASE, (src), (count)) > +#endif > +#ifndef outsw > +#define outsw(a, src, count) \ > + iowrite16_rep((a) + PCI_IOBASE, (src), (count)) > +#endif > +#ifndef outsl > +#define outsl(a, src, count) \ > + iowrite32_rep((a) + PCI_IOBASE, (src), (count)) > +#endif > > #ifndef IO_SPACE_LIMIT > #define IO_SPACE_LIMIT 0xffff -- Chen Gang ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 7:07 ` Geert Uytterhoeven 2013-06-27 8:25 ` Arnd Bergmann @ 2013-06-27 8:55 ` Chen Gang 2013-06-27 9:28 ` Geert Uytterhoeven 1 sibling, 1 reply; 12+ messages in thread From: Chen Gang @ 2013-06-27 8:55 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Arnd Bergmann, Hirokazu Takata, linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch On 06/27/2013 03:07 PM, Geert Uytterhoeven wrote: > On Thu, Jun 27, 2013 at 6:37 AM, Chen Gang <gang.chen@asianux.com> wrote: >> --- a/arch/m32r/include/asm/io.h >> +++ b/arch/m32r/include/asm/io.h >> @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) >> #define iowrite16 writew >> #define iowrite32 writel >> >> +#define ioread8_rep(p, dst, count) \ >> + insb((unsigned long) (p), (dst), (count)) > > As ioread8() is mapped to readb() (I/O memory space), not inb() (I/O > port space), > ioread8_rep() should map to readsb() (which m32r doesn't have yet > BTW), not insb(). > For m32r this does matter, as inb() and readb() use different mechanisms > internally. > Reasonable, but excuse me, I am not quite familiar with it, can any other members (or maintainer) to help implement it ? Thanks firstly. :-) > It seems include/asm-generic/io.h also has this wrong? > I think it need improvement, if readsb has been defined, it should use readsb() instead, or just use insb(). Thank you to provide a good chance to send another generic patch. ;-) -- Chen Gang ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 8:55 ` Chen Gang @ 2013-06-27 9:28 ` Geert Uytterhoeven 2013-06-27 9:32 ` Chen Gang 0 siblings, 1 reply; 12+ messages in thread From: Geert Uytterhoeven @ 2013-06-27 9:28 UTC (permalink / raw) To: Chen Gang Cc: Arnd Bergmann, Hirokazu Takata, linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch On Thu, Jun 27, 2013 at 10:55 AM, Chen Gang <gang.chen@asianux.com> wrote: > On 06/27/2013 03:07 PM, Geert Uytterhoeven wrote: >> On Thu, Jun 27, 2013 at 6:37 AM, Chen Gang <gang.chen@asianux.com> wrote: >>> --- a/arch/m32r/include/asm/io.h >>> +++ b/arch/m32r/include/asm/io.h >>> @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) >>> #define iowrite16 writew >>> #define iowrite32 writel >>> >>> +#define ioread8_rep(p, dst, count) \ >>> + insb((unsigned long) (p), (dst), (count)) >> >> As ioread8() is mapped to readb() (I/O memory space), not inb() (I/O >> port space), >> ioread8_rep() should map to readsb() (which m32r doesn't have yet >> BTW), not insb(). >> For m32r this does matter, as inb() and readb() use different mechanisms >> internally. >> > > Reasonable, but excuse me, I am not quite familiar with it, can any > other members (or maintainer) to help implement it ? > > Thanks firstly. > > :-) > >> It seems include/asm-generic/io.h also has this wrong? >> > > I think it need improvement, if readsb has been defined, it should use > readsb() instead, or just use insb(). I think m32r can mostly use asm-generic/io.h. I.e. arch/m32r/include/asm/io.h has to #define all the operations it implements itself, and defer the rest to asm-generic/io.h. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() 2013-06-27 9:28 ` Geert Uytterhoeven @ 2013-06-27 9:32 ` Chen Gang 0 siblings, 0 replies; 12+ messages in thread From: Chen Gang @ 2013-06-27 9:32 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Arnd Bergmann, Hirokazu Takata, linux-m32r, linux-m32r-ja, linux-kernel@vger.kernel.org, Linux-Arch On 06/27/2013 05:28 PM, Geert Uytterhoeven wrote: > On Thu, Jun 27, 2013 at 10:55 AM, Chen Gang <gang.chen@asianux.com> wrote: >> > On 06/27/2013 03:07 PM, Geert Uytterhoeven wrote: >>> >> On Thu, Jun 27, 2013 at 6:37 AM, Chen Gang <gang.chen@asianux.com> wrote: >>>> >>> --- a/arch/m32r/include/asm/io.h >>>> >>> +++ b/arch/m32r/include/asm/io.h >>>> >>> @@ -169,6 +169,20 @@ static inline void _writel(unsigned long l, unsigned long addr) >>>> >>> #define iowrite16 writew >>>> >>> #define iowrite32 writel >>>> >>> >>>> >>> +#define ioread8_rep(p, dst, count) \ >>>> >>> + insb((unsigned long) (p), (dst), (count)) >>> >> >>> >> As ioread8() is mapped to readb() (I/O memory space), not inb() (I/O >>> >> port space), >>> >> ioread8_rep() should map to readsb() (which m32r doesn't have yet >>> >> BTW), not insb(). >>> >> For m32r this does matter, as inb() and readb() use different mechanisms >>> >> internally. >>> >> >> > >> > Reasonable, but excuse me, I am not quite familiar with it, can any >> > other members (or maintainer) to help implement it ? >> > >> > Thanks firstly. >> > >> > :-) >> > >>> >> It seems include/asm-generic/io.h also has this wrong? >>> >> >> > >> > I think it need improvement, if readsb has been defined, it should use >> > readsb() instead, or just use insb(). > I think m32r can mostly use asm-generic/io.h. > I.e. arch/m32r/include/asm/io.h has to #define all the operations it implements > itself, and defer the rest to asm-generic/io.h. Really it is, if Arnd's patch for asm-generic/io.h pass checking and is applied, thanks. Hello Arnd: Can you help to send the related patch too, since you have already send the patch for asm-generic/io.h, which this patch depends on. Thanks. -- Chen Gang ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2013-06-28 2:20 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-06-27 2:32 [PATCH] arch: m32r: include: asm: add generic ioremap_wc() definition Chen Gang 2013-06-27 2:57 ` [PATCH] arch: m32r: include: asm: use 'readb' instead of 'read' Chen Gang 2013-06-27 3:29 ` [PATCH] arch: m32r: include: asm: add ioread*be() and iowrite*be() Chen Gang 2013-06-27 4:37 ` [PATCH] arch: m32r: include: asm: add ioread*_rep() and iowrite*_rep() Chen Gang 2013-06-27 4:42 ` Chen Gang 2013-06-27 7:07 ` Geert Uytterhoeven 2013-06-27 8:25 ` Arnd Bergmann 2013-06-27 8:43 ` Geert Uytterhoeven 2013-06-28 2:19 ` Chen Gang 2013-06-27 8:55 ` Chen Gang 2013-06-27 9:28 ` Geert Uytterhoeven 2013-06-27 9:32 ` Chen Gang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox