All of lore.kernel.org
 help / color / mirror / Atom feed
* [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, 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, 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, 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, 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, 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, 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, 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, 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  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, 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, 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, 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

* 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, 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

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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.