[PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

Subsystems: dma generic offload engine subsystem, freescale dma driver, the rest

STALE2729d

8 messages, 3 authors, 2019-02-11 · open the first message on its own page

[PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Scott Wood <oss@buserror.net>
Date: 2018-12-22 04:36:51

Otherwise 64-bit PPC builds fail with undefined references
to these accessors.

Cc: Peng Ma <redacted>
Cc: Wen He <redacted>
Fixes: 68997fff94afa (" dmaengine: fsldma: Adding macro FSL_DMA_IN/OUT implement for ARM platform")
Signed-off-by: Scott Wood <oss@buserror.net>
---
Is there any reason why ioreadXXbe() etc can't be used on PPC as well?

 drivers/dma/fsldma.h | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
index 88db939c04a1..a9b12f82b5c3 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -202,7 +202,12 @@ struct fsldma_chan {
 #define fsl_iowrite32(v, p)	out_le32(p, v)
 #define fsl_iowrite32be(v, p)	out_be32(p, v)
 
-#ifndef __powerpc64__
+#ifdef __powerpc64__
+#define fsl_ioread64(p)		in_le64(p)
+#define fsl_ioread64be(p)	in_be64(p)
+#define fsl_iowrite64(v, p)	out_le64(p, v)
+#define fsl_iowrite64be(v, p)	out_be64(p, v)
+#else
 static u64 fsl_ioread64(const u64 __iomem *addr)
 {
 	u32 fsl_addr = lower_32_bits(addr);
-- 
2.17.1

RE: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Peng Ma <hidden>
Date: 2018-12-24 03:44:49

Hi Scott,

You are right, we should support powerpc64, so could I changed it as fallows:
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
index 88db939..057babf 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -202,35 +202,10 @@ struct fsldma_chan {
 #define fsl_iowrite32(v, p)    out_le32(p, v)
 #define fsl_iowrite32be(v, p)  out_be32(p, v)
 
-#ifndef __powerpc64__
-static u64 fsl_ioread64(const u64 __iomem *addr)
-{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_le32((u32 *)(fsl_addr + 1)) << 32;
-
-       return fsl_addr_hi | in_le32((u32 *)fsl_addr);
-}
-
-static void fsl_iowrite64(u64 val, u64 __iomem *addr)
-{
-       out_le32((u32 __iomem *)addr + 1, val >> 32);
-       out_le32((u32 __iomem *)addr, (u32)val);
-}
-
-static u64 fsl_ioread64be(const u64 __iomem *addr)
-{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_be32((u32 *)fsl_addr) << 32;
-
-       return fsl_addr_hi | in_be32((u32 *)(fsl_addr + 1));
-}
-
-static void fsl_iowrite64be(u64 val, u64 __iomem *addr)
-{
-       out_be32((u32 __iomem *)addr, val >> 32);
-       out_be32((u32 __iomem *)addr + 1, (u32)val);
-}
-#endif
+#define fsl_ioread64(p)                in_le64(p)
+#define fsl_ioread64be(p)      in_be64(p)
+#define fsl_iowrite64(v, p)    out_le64(p, v)
+#define fsl_iowrite64be(v, p)  out_be64(p, v)
 #endif
Best Regards,
Peng
quoted hunk
-----Original Message-----
From: Scott Wood <oss@buserror.net>
Sent: 2018年12月22日 12:35
To: Leo Li <redacted>; Zhang Wei <zw@zh-kernel.org>
Cc: linuxppc-dev@lists.ozlabs.org; dmaengine@vger.kernel.org; Peng Ma
[off-list ref]; Wen He [off-list ref]
Subject: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

Otherwise 64-bit PPC builds fail with undefined references to these accessors.

Cc: Peng Ma <redacted>
Cc: Wen He <redacted>
Fixes: 68997fff94afa (" dmaengine: fsldma: Adding macro FSL_DMA_IN/OUT
implement for ARM platform")
Signed-off-by: Scott Wood <oss@buserror.net>
---
Is there any reason why ioreadXXbe() etc can't be used on PPC as well?

drivers/dma/fsldma.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h index
88db939c04a1..a9b12f82b5c3 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -202,7 +202,12 @@ struct fsldma_chan {
#define fsl_iowrite32(v, p)	out_le32(p, v)
#define fsl_iowrite32be(v, p)	out_be32(p, v)

-#ifndef __powerpc64__
+#ifdef __powerpc64__
+#define fsl_ioread64(p)		in_le64(p)
+#define fsl_ioread64be(p)	in_be64(p)
+#define fsl_iowrite64(v, p)	out_le64(p, v)
+#define fsl_iowrite64be(v, p)	out_be64(p, v)
+#else
static u64 fsl_ioread64(const u64 __iomem *addr)  {
	u32 fsl_addr = lower_32_bits(addr);
--
2.17.1

Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Scott Wood <oss@buserror.net>
Date: 2018-12-24 04:47:47

On Mon, 2018-12-24 at 03:42 +0000, Peng Ma wrote:
quoted hunk
Hi Scott,

You are right, we should support powerpc64, so could I changed it as
fallows:
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
index 88db939..057babf 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -202,35 +202,10 @@ struct fsldma_chan {
 #define fsl_iowrite32(v, p)    out_le32(p, v)
 #define fsl_iowrite32be(v, p)  out_be32(p, v)
 
-#ifndef __powerpc64__
-static u64 fsl_ioread64(const u64 __iomem *addr)
-{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_le32((u32 *)(fsl_addr + 1)) << 32;
-
-       return fsl_addr_hi | in_le32((u32 *)fsl_addr);
-}
-
-static void fsl_iowrite64(u64 val, u64 __iomem *addr)
-{
-       out_le32((u32 __iomem *)addr + 1, val >> 32);
-       out_le32((u32 __iomem *)addr, (u32)val);
-}
-
-static u64 fsl_ioread64be(const u64 __iomem *addr)
-{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_be32((u32 *)fsl_addr) << 32;
-
-       return fsl_addr_hi | in_be32((u32 *)(fsl_addr + 1));
-}
-
-static void fsl_iowrite64be(u64 val, u64 __iomem *addr)
-{
-       out_be32((u32 __iomem *)addr, val >> 32);
-       out_be32((u32 __iomem *)addr + 1, (u32)val);
-}
-#endif
+#define fsl_ioread64(p)                in_le64(p)
+#define fsl_ioread64be(p)      in_be64(p)
+#define fsl_iowrite64(v, p)    out_le64(p, v)
+#define fsl_iowrite64be(v, p)  out_be64(p, v)
 #endif
Then you'll break 32-bit, assuming those fake-it-with-two-32-bit-accesses were
actually needed.

-Scott

RE: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Peng Ma <hidden>
Date: 2018-12-24 05:32:28

Hi Scott,

Oh, I did not see the in_XX64/out_XX64 supported only __powerpc64__ just now.
Thanks for your reminder.

#ifdef __powerpc64__

#ifdef __BIG_ENDIAN__
DEF_MMIO_OUT_D(out_be64, 64, std);
DEF_MMIO_IN_D(in_be64, 64, ld);

/* There is no asm instructions for 64 bits reverse loads and stores */
static inline u64 in_le64(const volatile u64 __iomem *addr)
{
        return swab64(in_be64(addr));
}

static inline void out_le64(volatile u64 __iomem *addr, u64 val)
{
        out_be64(addr, swab64(val));
}
#else
DEF_MMIO_OUT_D(out_le64, 64, std);
DEF_MMIO_IN_D(in_le64, 64, ld);

/* There is no asm instructions for 64 bits reverse loads and stores */
static inline u64 in_be64(const volatile u64 __iomem *addr)
{
        return swab64(in_le64(addr));
}

static inline void out_be64(volatile u64 __iomem *addr, u64 val)
{
        out_le64(addr, swab64(val));
}

#endif
#endif /* __powerpc64__ */

Best Regards,
Peng
-----Original Message-----
From: Scott Wood <oss@buserror.net>
Sent: 2018年12月24日 12:46
To: Peng Ma <redacted>; Leo Li <redacted>; Zhang Wei
[off-list ref]
Cc: linuxppc-dev@lists.ozlabs.org; dmaengine@vger.kernel.org; Wen He
[off-list ref]
Subject: Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for
powerpc64

On Mon, 2018-12-24 at 03:42 +0000, Peng Ma wrote:
quoted
Hi Scott,

You are right, we should support powerpc64, so could I changed it as
fallows:
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h index
88db939..057babf 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -202,35 +202,10 @@ struct fsldma_chan {
 #define fsl_iowrite32(v, p)    out_le32(p, v)
 #define fsl_iowrite32be(v, p)  out_be32(p, v)

-#ifndef __powerpc64__
-static u64 fsl_ioread64(const u64 __iomem *addr) -{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_le32((u32 *)(fsl_addr + 1)) << 32;
-
-       return fsl_addr_hi | in_le32((u32 *)fsl_addr);
-}
-
-static void fsl_iowrite64(u64 val, u64 __iomem *addr) -{
-       out_le32((u32 __iomem *)addr + 1, val >> 32);
-       out_le32((u32 __iomem *)addr, (u32)val);
-}
-
-static u64 fsl_ioread64be(const u64 __iomem *addr) -{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_be32((u32 *)fsl_addr) << 32;
-
-       return fsl_addr_hi | in_be32((u32 *)(fsl_addr + 1));
-}
-
-static void fsl_iowrite64be(u64 val, u64 __iomem *addr) -{
-       out_be32((u32 __iomem *)addr, val >> 32);
-       out_be32((u32 __iomem *)addr + 1, (u32)val);
-}
-#endif
+#define fsl_ioread64(p)                in_le64(p)
+#define fsl_ioread64be(p)      in_be64(p)
+#define fsl_iowrite64(v, p)    out_le64(p, v)
+#define fsl_iowrite64be(v, p)  out_be64(p, v)
 #endif
Then you'll break 32-bit, assuming those fake-it-with-two-32-bit-accesses
were actually needed.

-Scott

Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Vinod Koul <vkoul@kernel.org>
Date: 2019-01-19 13:02:10

On 24-12-18, 05:29, Peng Ma wrote:
Hi Scott,

Oh, I did not see the in_XX64/out_XX64 supported only __powerpc64__ just now.
Thanks for your reminder.
Can you send the formal patch for this...

FWIW, fsl patches were not merged last cycle because of reported
regression...
#ifdef __powerpc64__

#ifdef __BIG_ENDIAN__
DEF_MMIO_OUT_D(out_be64, 64, std);
DEF_MMIO_IN_D(in_be64, 64, ld);

/* There is no asm instructions for 64 bits reverse loads and stores */
static inline u64 in_le64(const volatile u64 __iomem *addr)
{
        return swab64(in_be64(addr));
}

static inline void out_le64(volatile u64 __iomem *addr, u64 val)
{
        out_be64(addr, swab64(val));
}
#else
DEF_MMIO_OUT_D(out_le64, 64, std);
DEF_MMIO_IN_D(in_le64, 64, ld);

/* There is no asm instructions for 64 bits reverse loads and stores */
static inline u64 in_be64(const volatile u64 __iomem *addr)
{
        return swab64(in_le64(addr));
}

static inline void out_be64(volatile u64 __iomem *addr, u64 val)
{
        out_le64(addr, swab64(val));
}

#endif
#endif /* __powerpc64__ */

Best Regards,
Peng
quoted
-----Original Message-----
From: Scott Wood <oss@buserror.net>
Sent: 2018年12月24日 12:46
To: Peng Ma <redacted>; Leo Li <redacted>; Zhang Wei
[off-list ref]
Cc: linuxppc-dev@lists.ozlabs.org; dmaengine@vger.kernel.org; Wen He
[off-list ref]
Subject: Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for
powerpc64

On Mon, 2018-12-24 at 03:42 +0000, Peng Ma wrote:
quoted
Hi Scott,

You are right, we should support powerpc64, so could I changed it as
fallows:
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h index
88db939..057babf 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -202,35 +202,10 @@ struct fsldma_chan {
 #define fsl_iowrite32(v, p)    out_le32(p, v)
 #define fsl_iowrite32be(v, p)  out_be32(p, v)

-#ifndef __powerpc64__
-static u64 fsl_ioread64(const u64 __iomem *addr) -{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_le32((u32 *)(fsl_addr + 1)) << 32;
-
-       return fsl_addr_hi | in_le32((u32 *)fsl_addr);
-}
-
-static void fsl_iowrite64(u64 val, u64 __iomem *addr) -{
-       out_le32((u32 __iomem *)addr + 1, val >> 32);
-       out_le32((u32 __iomem *)addr, (u32)val);
-}
-
-static u64 fsl_ioread64be(const u64 __iomem *addr) -{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_be32((u32 *)fsl_addr) << 32;
-
-       return fsl_addr_hi | in_be32((u32 *)(fsl_addr + 1));
-}
-
-static void fsl_iowrite64be(u64 val, u64 __iomem *addr) -{
-       out_be32((u32 __iomem *)addr, val >> 32);
-       out_be32((u32 __iomem *)addr + 1, (u32)val);
-}
-#endif
+#define fsl_ioread64(p)                in_le64(p)
+#define fsl_ioread64be(p)      in_be64(p)
+#define fsl_iowrite64(v, p)    out_le64(p, v)
+#define fsl_iowrite64be(v, p)  out_be64(p, v)
 #endif
Then you'll break 32-bit, assuming those fake-it-with-two-32-bit-accesses
were actually needed.

-Scott
-- 
~Vinod

RE: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Peng Ma <hidden>
Date: 2019-01-25 05:56:01

Hi Vinod,

Sorry to replay late.
1:This patch has already send to the patchwork.
	Please see the patch link: https://patchwork.kernel.org/patch/10741521/
2:I have already compile the fsl patches on arm and powerpc after patched https://patchwork.kernel.org/patch/10741521/
	The compile will successful, please let me know the reported regression results, thanks very much.

Best Regards,
Peng
-----Original Message-----
From: Vinod Koul <vkoul@kernel.org>
Sent: 2019年1月19日 20:59
To: Peng Ma <redacted>
Cc: Scott Wood <oss@buserror.net>; Leo Li <redacted>; Zhang Wei
[off-list ref]; linuxppc-dev@lists.ozlabs.org;
dmaengine@vger.kernel.org; Wen He [off-list ref]
Subject: Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for
powerpc64

On 24-12-18, 05:29, Peng Ma wrote:
quoted
Hi Scott,

Oh, I did not see the in_XX64/out_XX64 supported only __powerpc64__ just
now.
quoted
Thanks for your reminder.
Can you send the formal patch for this...

FWIW, fsl patches were not merged last cycle because of reported regression...
quoted
#ifdef __powerpc64__

#ifdef __BIG_ENDIAN__
DEF_MMIO_OUT_D(out_be64, 64, std);
DEF_MMIO_IN_D(in_be64, 64, ld);

/* There is no asm instructions for 64 bits reverse loads and stores
*/ static inline u64 in_le64(const volatile u64 __iomem *addr) {
        return swab64(in_be64(addr));
}

static inline void out_le64(volatile u64 __iomem *addr, u64 val) {
        out_be64(addr, swab64(val));
}
#else
DEF_MMIO_OUT_D(out_le64, 64, std);
DEF_MMIO_IN_D(in_le64, 64, ld);

/* There is no asm instructions for 64 bits reverse loads and stores
*/ static inline u64 in_be64(const volatile u64 __iomem *addr) {
        return swab64(in_le64(addr));
}

static inline void out_be64(volatile u64 __iomem *addr, u64 val) {
        out_le64(addr, swab64(val));
}

#endif
#endif /* __powerpc64__ */

Best Regards,
Peng
quoted
-----Original Message-----
From: Scott Wood <oss@buserror.net>
Sent: 2018年12月24日 12:46
To: Peng Ma <redacted>; Leo Li <redacted>; Zhang
Wei
quoted
quoted
[off-list ref]
Cc: linuxppc-dev@lists.ozlabs.org; dmaengine@vger.kernel.org; Wen He
[off-list ref]
Subject: Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for
powerpc64

On Mon, 2018-12-24 at 03:42 +0000, Peng Ma wrote:
quoted
Hi Scott,

You are right, we should support powerpc64, so could I changed it
as
fallows:
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h index
88db939..057babf 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -202,35 +202,10 @@ struct fsldma_chan {
 #define fsl_iowrite32(v, p)    out_le32(p, v)
 #define fsl_iowrite32be(v, p)  out_be32(p, v)

-#ifndef __powerpc64__
-static u64 fsl_ioread64(const u64 __iomem *addr) -{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_le32((u32 *)(fsl_addr + 1)) << 32;
-
-       return fsl_addr_hi | in_le32((u32 *)fsl_addr);
-}
-
-static void fsl_iowrite64(u64 val, u64 __iomem *addr) -{
-       out_le32((u32 __iomem *)addr + 1, val >> 32);
-       out_le32((u32 __iomem *)addr, (u32)val);
-}
-
-static u64 fsl_ioread64be(const u64 __iomem *addr) -{
-       u32 fsl_addr = lower_32_bits(addr);
-       u64 fsl_addr_hi = (u64)in_be32((u32 *)fsl_addr) << 32;
-
-       return fsl_addr_hi | in_be32((u32 *)(fsl_addr + 1));
-}
-
-static void fsl_iowrite64be(u64 val, u64 __iomem *addr) -{
-       out_be32((u32 __iomem *)addr, val >> 32);
-       out_be32((u32 __iomem *)addr + 1, (u32)val);
-}
-#endif
+#define fsl_ioread64(p)                in_le64(p)
+#define fsl_ioread64be(p)      in_be64(p)
+#define fsl_iowrite64(v, p)    out_le64(p, v)
+#define fsl_iowrite64be(v, p)  out_be64(p, v)
 #endif
Then you'll break 32-bit, assuming those
fake-it-with-two-32-bit-accesses were actually needed.

-Scott
--
~Vinod

Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Vinod Koul <vkoul@kernel.org>
Date: 2019-02-04 07:30:52

On 25-01-19, 05:54, Peng Ma wrote:
Hi Vinod,

Sorry to replay late.
1:This patch has already send to the patchwork.
	Please see the patch link: https://patchwork.kernel.org/patch/10741521/
2:I have already compile the fsl patches on arm and powerpc after patched https://patchwork.kernel.org/patch/10741521/
	The compile will successful, please let me know the reported regression results, thanks very much.
And I thought there were further comments  on this patch. I have applied
this, please watch for failures reported if any..
-- 
~Vinod

RE: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for powerpc64

From: Peng Ma <hidden>
Date: 2019-02-11 02:35:13

Hi Vinod,

Got it.

Best Regards
Peng
-----Original Message-----
From: Vinod Koul <vkoul@kernel.org>
Sent: 2019年2月4日 15:28
To: Peng Ma <redacted>
Cc: Scott Wood <oss@buserror.net>; Leo Li <redacted>; Zhang Wei
[off-list ref]; linuxppc-dev@lists.ozlabs.org;
dmaengine@vger.kernel.org; Wen He [off-list ref]
Subject: Re: [PATCH] dmaengine: fsldma: Add 64-bit I/O accessors for
powerpc64

On 25-01-19, 05:54, Peng Ma wrote:
quoted
Hi Vinod,

Sorry to replay late.
1:This patch has already send to the patchwork.
	Please see the patch link:
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpat
chwork.kernel.org%2Fpatch%2F10741521%2F&amp;data=02%7C01%7Cpeng.
ma%40n
quoted
xp.com%7C5d169e9bc5684a9d14c008d68a727589%7C686ea1d3bc2b4c6fa92
cd99c5c
quoted
301635%7C0%7C0%7C636848621546833095&amp;sdata=q1sTaC%2F4SqEtM
yFymzyvXe
quoted
qBOhCnBjyMcjPz8A9QRI4%3D&amp;reserved=0
2:I have already compile the fsl patches on arm and powerpc after patched
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch
work.kernel.org%2Fpatch%2F10741521%2F&amp;data=02%7C01%7Cpeng.ma
%40nxp.com%7C5d169e9bc5684a9d14c008d68a727589%7C686ea1d3bc2b4c
6fa92cd99c5c301635%7C0%7C0%7C636848621546833095&amp;sdata=q1sTa
C%2F4SqEtMyFymzyvXeqBOhCnBjyMcjPz8A9QRI4%3D&amp;reserved=0
quoted
	The compile will successful, please let me know the reported regression
results, thanks very much.

And I thought there were further comments  on this patch. I have applied this,
please watch for failures reported if any..
--
~Vinod
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help