linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH/RFC] sh: Use big endian ioread/write for SH2A platforms
@ 2011-10-03 14:16 Phil Edworthy
  2011-10-10 12:14 ` Yoshinori Sato
  0 siblings, 1 reply; 2+ messages in thread
From: Phil Edworthy @ 2011-10-03 14:16 UTC (permalink / raw)
  To: linux-sh

Commit 37b7a97884ba64bf7d403351ac2a9476ab4f1bba makes all ioread/iowrite
functions treat registers as little endian. For SH2A this is not the case,
they are big endian.

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
---
 arch/sh/include/asm/io.h |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h
index 28c5aa5..65f2d5a 100644
--- a/arch/sh/include/asm/io.h
+++ b/arch/sh/include/asm/io.h
@@ -35,6 +35,7 @@
 #define __raw_readl(a)		(__chk_io_ptr(a), *(volatile u32 __force *)(a))
 #define __raw_readq(a)		(__chk_io_ptr(a), *(volatile u64 __force *)(a))
 
+#ifndef CONFIG_CPU_SH2A
 #define readb_relaxed(c)	({ u8  __v = __raw_readb(c); __v; })
 #define readw_relaxed(c)	({ u16 __v = le16_to_cpu((__force __le16) \
 					__raw_readw(c)); __v; })
@@ -50,6 +51,23 @@
 					cpu_to_le32(v),c))
 #define writeq_relaxed(v,c)	((void)__raw_writeq((__force u64) \
 					cpu_to_le64(v),c))
+#else
+#define readb_relaxed(c)	({ u8  __v = __raw_readb(c); __v; })
+#define readw_relaxed(c)	({ u16 __v = be16_to_cpu((__force __be16) \
+					__raw_readw(c)); __v; })
+#define readl_relaxed(c)	({ u32 __v = be32_to_cpu((__force __be32) \
+					__raw_readl(c)); __v; })
+#define readq_relaxed(c)	({ u64 __v = be64_to_cpu((__force __be64) \
+					__raw_readq(c)); __v; })
+
+#define writeb_relaxed(v,c)	((void)__raw_writeb(v,c))
+#define writew_relaxed(v,c)	((void)__raw_writew((__force u16) \
+					cpu_to_be16(v),c))
+#define writel_relaxed(v,c)	((void)__raw_writel((__force u32) \
+					cpu_to_be32(v),c))
+#define writeq_relaxed(v,c)	((void)__raw_writeq((__force u64) \
+					cpu_to_be64(v),c))
+#endif
 
 #define readb(a)		({ u8  r_ = readb_relaxed(a); rmb(); r_; })
 #define readw(a)		({ u16 r_ = readw_relaxed(a); rmb(); r_; })
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH/RFC] sh: Use big endian ioread/write for SH2A platforms
  2011-10-03 14:16 [PATCH/RFC] sh: Use big endian ioread/write for SH2A platforms Phil Edworthy
@ 2011-10-10 12:14 ` Yoshinori Sato
  0 siblings, 0 replies; 2+ messages in thread
From: Yoshinori Sato @ 2011-10-10 12:14 UTC (permalink / raw)
  To: linux-sh

At Mon, 03 Oct 2011 15:16:29 +0100,
Phil Edworthy wrote:
> 
> Commit 37b7a97884ba64bf7d403351ac2a9476ab4f1bba makes all ioread/iowrite
> functions treat registers as little endian. For SH2A this is not the case,
> they are big endian.

I think it case use for CONFIG_CPU_SH2.
SH2 is only big-endian

Thanks.

> Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
> ---
>  arch/sh/include/asm/io.h |   18 ++++++++++++++++++
>  1 files changed, 18 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h
> index 28c5aa5..65f2d5a 100644
> --- a/arch/sh/include/asm/io.h
> +++ b/arch/sh/include/asm/io.h
> @@ -35,6 +35,7 @@
>  #define __raw_readl(a)		(__chk_io_ptr(a), *(volatile u32 __force *)(a))
>  #define __raw_readq(a)		(__chk_io_ptr(a), *(volatile u64 __force *)(a))
>  
> +#ifndef CONFIG_CPU_SH2A
>  #define readb_relaxed(c)	({ u8  __v = __raw_readb(c); __v; })
>  #define readw_relaxed(c)	({ u16 __v = le16_to_cpu((__force __le16) \
>  					__raw_readw(c)); __v; })
> @@ -50,6 +51,23 @@
>  					cpu_to_le32(v),c))
>  #define writeq_relaxed(v,c)	((void)__raw_writeq((__force u64) \
>  					cpu_to_le64(v),c))
> +#else
> +#define readb_relaxed(c)	({ u8  __v = __raw_readb(c); __v; })
> +#define readw_relaxed(c)	({ u16 __v = be16_to_cpu((__force __be16) \
> +					__raw_readw(c)); __v; })
> +#define readl_relaxed(c)	({ u32 __v = be32_to_cpu((__force __be32) \
> +					__raw_readl(c)); __v; })
> +#define readq_relaxed(c)	({ u64 __v = be64_to_cpu((__force __be64) \
> +					__raw_readq(c)); __v; })
> +
> +#define writeb_relaxed(v,c)	((void)__raw_writeb(v,c))
> +#define writew_relaxed(v,c)	((void)__raw_writew((__force u16) \
> +					cpu_to_be16(v),c))
> +#define writel_relaxed(v,c)	((void)__raw_writel((__force u32) \
> +					cpu_to_be32(v),c))
> +#define writeq_relaxed(v,c)	((void)__raw_writeq((__force u64) \
> +					cpu_to_be64(v),c))
> +#endif
>  
>  #define readb(a)		({ u8  r_ = readb_relaxed(a); rmb(); r_; })
>  #define readw(a)		({ u16 r_ = readw_relaxed(a); rmb(); r_; })
> -- 
> 1.7.0.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sh" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Yoshinori Sato
<ysato@users.sourceforge.jp>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-10-10 12:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-03 14:16 [PATCH/RFC] sh: Use big endian ioread/write for SH2A platforms Phil Edworthy
2011-10-10 12:14 ` Yoshinori Sato

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).