* [PATCH v2] i2c: rcar: refactor TCYC handling
@ 2019-02-05 13:37 Wolfram Sang
2019-02-05 13:38 ` Wolfram Sang
2019-02-08 21:30 ` Wolfram Sang
0 siblings, 2 replies; 4+ messages in thread
From: Wolfram Sang @ 2019-02-05 13:37 UTC (permalink / raw)
To: linux-i2c; +Cc: linux-renesas-soc, Simon Horman, Wolfram Sang, Wolfram Sang
The latest documentation made it clear that we need to initialize the
TCYC value independently of DMA. The old code used TCYC06 (wrongly) for
non-DMA transfers. The new code sets TCYC up independently from DMA.
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
---
Change since v1: improve commit message per Simon's comment.
drivers/i2c/busses/i2c-rcar.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
index 498ba4b87833..dd52a068b140 100644
--- a/drivers/i2c/busses/i2c-rcar.c
+++ b/drivers/i2c/busses/i2c-rcar.c
@@ -39,8 +39,8 @@
#define ICSAR 0x1C /* slave address */
#define ICMAR 0x20 /* master address */
#define ICRXTX 0x24 /* data port */
-#define ICDMAER 0x3c /* DMA enable */
-#define ICFBSCR 0x38 /* first bit setup cycle */
+#define ICFBSCR 0x38 /* first bit setup cycle (Gen3) */
+#define ICDMAER 0x3c /* DMA enable (Gen3) */
/* ICSCR */
#define SDBS (1 << 3) /* slave data buffer select */
@@ -83,7 +83,6 @@
#define TMDMAE (1 << 0) /* DMA Master Transmitted Enable */
/* ICFBSCR */
-#define TCYC06 0x04 /* 6*Tcyc delay 1st bit between SDA and SCL */
#define TCYC17 0x0f /* 17*Tcyc delay 1st bit between SDA and SCL */
@@ -212,6 +211,10 @@ static void rcar_i2c_init(struct rcar_i2c_priv *priv)
rcar_i2c_write(priv, ICMSR, 0);
/* start clock */
rcar_i2c_write(priv, ICCCR, priv->icccr);
+
+ if (priv->devtype == I2C_RCAR_GEN3)
+ rcar_i2c_write(priv, ICFBSCR, TCYC17);
+
}
static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv)
@@ -363,9 +366,6 @@ static void rcar_i2c_dma_unmap(struct rcar_i2c_priv *priv)
/* Disable DMA Master Received/Transmitted */
rcar_i2c_write(priv, ICDMAER, 0);
- /* Reset default delay */
- rcar_i2c_write(priv, ICFBSCR, TCYC06);
-
dma_unmap_single(chan->device->dev, sg_dma_address(&priv->sg),
sg_dma_len(&priv->sg), priv->dma_direction);
@@ -461,9 +461,6 @@ static void rcar_i2c_dma(struct rcar_i2c_priv *priv)
return;
}
- /* Set delay for DMA operations */
- rcar_i2c_write(priv, ICFBSCR, TCYC17);
-
/* Enable DMA Master Received/Transmitted */
if (read)
rcar_i2c_write(priv, ICDMAER, RMDMAE);
--
2.19.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] i2c: rcar: refactor TCYC handling
2019-02-05 13:37 [PATCH v2] i2c: rcar: refactor TCYC handling Wolfram Sang
@ 2019-02-05 13:38 ` Wolfram Sang
2019-02-05 14:30 ` Simon Horman
2019-02-08 21:30 ` Wolfram Sang
1 sibling, 1 reply; 4+ messages in thread
From: Wolfram Sang @ 2019-02-05 13:38 UTC (permalink / raw)
To: Wolfram Sang; +Cc: linux-i2c, linux-renesas-soc, Simon Horman
[-- Attachment #1: Type: text/plain, Size: 2592 bytes --]
On Tue, Feb 05, 2019 at 02:37:25PM +0100, Wolfram Sang wrote:
> The latest documentation made it clear that we need to initialize the
> TCYC value independently of DMA. The old code used TCYC06 (wrongly) for
> non-DMA transfers. The new code sets TCYC up independently from DMA.
>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
The latter SoB shouldn't be there yet.
> ---
>
> Change since v1: improve commit message per Simon's comment.
>
> drivers/i2c/busses/i2c-rcar.c | 15 ++++++---------
> 1 file changed, 6 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
> index 498ba4b87833..dd52a068b140 100644
> --- a/drivers/i2c/busses/i2c-rcar.c
> +++ b/drivers/i2c/busses/i2c-rcar.c
> @@ -39,8 +39,8 @@
> #define ICSAR 0x1C /* slave address */
> #define ICMAR 0x20 /* master address */
> #define ICRXTX 0x24 /* data port */
> -#define ICDMAER 0x3c /* DMA enable */
> -#define ICFBSCR 0x38 /* first bit setup cycle */
> +#define ICFBSCR 0x38 /* first bit setup cycle (Gen3) */
> +#define ICDMAER 0x3c /* DMA enable (Gen3) */
>
> /* ICSCR */
> #define SDBS (1 << 3) /* slave data buffer select */
> @@ -83,7 +83,6 @@
> #define TMDMAE (1 << 0) /* DMA Master Transmitted Enable */
>
> /* ICFBSCR */
> -#define TCYC06 0x04 /* 6*Tcyc delay 1st bit between SDA and SCL */
> #define TCYC17 0x0f /* 17*Tcyc delay 1st bit between SDA and SCL */
>
>
> @@ -212,6 +211,10 @@ static void rcar_i2c_init(struct rcar_i2c_priv *priv)
> rcar_i2c_write(priv, ICMSR, 0);
> /* start clock */
> rcar_i2c_write(priv, ICCCR, priv->icccr);
> +
> + if (priv->devtype == I2C_RCAR_GEN3)
> + rcar_i2c_write(priv, ICFBSCR, TCYC17);
> +
> }
>
> static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv)
> @@ -363,9 +366,6 @@ static void rcar_i2c_dma_unmap(struct rcar_i2c_priv *priv)
> /* Disable DMA Master Received/Transmitted */
> rcar_i2c_write(priv, ICDMAER, 0);
>
> - /* Reset default delay */
> - rcar_i2c_write(priv, ICFBSCR, TCYC06);
> -
> dma_unmap_single(chan->device->dev, sg_dma_address(&priv->sg),
> sg_dma_len(&priv->sg), priv->dma_direction);
>
> @@ -461,9 +461,6 @@ static void rcar_i2c_dma(struct rcar_i2c_priv *priv)
> return;
> }
>
> - /* Set delay for DMA operations */
> - rcar_i2c_write(priv, ICFBSCR, TCYC17);
> -
> /* Enable DMA Master Received/Transmitted */
> if (read)
> rcar_i2c_write(priv, ICDMAER, RMDMAE);
> --
> 2.19.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] i2c: rcar: refactor TCYC handling
2019-02-05 13:38 ` Wolfram Sang
@ 2019-02-05 14:30 ` Simon Horman
0 siblings, 0 replies; 4+ messages in thread
From: Simon Horman @ 2019-02-05 14:30 UTC (permalink / raw)
To: Wolfram Sang; +Cc: Wolfram Sang, linux-i2c, linux-renesas-soc
On Tue, Feb 05, 2019 at 02:38:46PM +0100, Wolfram Sang wrote:
> On Tue, Feb 05, 2019 at 02:37:25PM +0100, Wolfram Sang wrote:
> > The latest documentation made it clear that we need to initialize the
> > TCYC value independently of DMA. The old code used TCYC06 (wrongly) for
> > non-DMA transfers. The new code sets TCYC up independently from DMA.
> >
> > Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> > Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
>
> The latter SoB shouldn't be there yet.
That aside,
Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] i2c: rcar: refactor TCYC handling
2019-02-05 13:37 [PATCH v2] i2c: rcar: refactor TCYC handling Wolfram Sang
2019-02-05 13:38 ` Wolfram Sang
@ 2019-02-08 21:30 ` Wolfram Sang
1 sibling, 0 replies; 4+ messages in thread
From: Wolfram Sang @ 2019-02-08 21:30 UTC (permalink / raw)
To: Wolfram Sang; +Cc: linux-i2c, linux-renesas-soc, Simon Horman
[-- Attachment #1: Type: text/plain, Size: 438 bytes --]
On Tue, Feb 05, 2019 at 02:37:25PM +0100, Wolfram Sang wrote:
> The latest documentation made it clear that we need to initialize the
> TCYC value independently of DMA. The old code used TCYC06 (wrongly) for
> non-DMA transfers. The new code sets TCYC up independently from DMA.
>
> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Applied to for-next, thanks!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-02-08 21:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-05 13:37 [PATCH v2] i2c: rcar: refactor TCYC handling Wolfram Sang
2019-02-05 13:38 ` Wolfram Sang
2019-02-05 14:30 ` Simon Horman
2019-02-08 21:30 ` Wolfram Sang
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).