* [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.