All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed
@ 2019-03-05 11:16 Ismael Luceno Cortes
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 2/6] i2c: rcar_i2c: Add comments about registers & values Ismael Luceno Cortes
                   ` (5 more replies)
  0 siblings, 6 replies; 13+ messages in thread
From: Ismael Luceno Cortes @ 2019-03-05 11:16 UTC (permalink / raw)
  To: u-boot

It only needs to be done once.

Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
---
 drivers/i2c/rcar_i2c.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
index 10b0f8bad4..74643b085e 100644
--- a/drivers/i2c/rcar_i2c.c
+++ b/drivers/i2c/rcar_i2c.c
@@ -116,9 +116,7 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
 	writel(0, priv->base + RCAR_I2C_ICMSR);
 	writel(priv->icccr, priv->base + RCAR_I2C_ICCCR);
 
-	if (priv->type == RCAR_I2C_TYPE_GEN3)
-		writel(RCAR_I2C_ICFBSCR_TCYC17, priv->base + RCAR_I2C_ICFBSCR);
-
+	/* Wait for the bus */
 	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMCR,
 				RCAR_I2C_ICMCR_FSDA, false, 2, true);
 	if (ret) {
@@ -304,6 +302,10 @@ scgd_find:
 	priv->icccr = (scgd << RCAR_I2C_ICCCR_SCGD_OFF) | cdf;
 	writel(priv->icccr, priv->base + RCAR_I2C_ICCCR);
 
+	if (priv->type == RCAR_I2C_TYPE_GEN3)
+		/* Set SCL/SDA delay */
+		writel(RCAR_I2C_ICFBSCR_TCYC17, priv->base + RCAR_I2C_ICFBSCR);
+
 	return 0;
 }
 

base-commit: f08023c07d826fbc8e62fdd3367961b2f0b06844
prerequisite-patch-id: 9e5b0458bc15640eb483ccad91dbe85150f9f7be
-- 
2.19.1

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

* [U-Boot] [PATCH v2 2/6] i2c: rcar_i2c: Add comments about registers & values
  2019-03-05 11:16 [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Ismael Luceno Cortes
@ 2019-03-05 11:16 ` Ismael Luceno Cortes
  2019-03-05 18:28   ` Marek Vasut
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 3/6] i2c: rcar_i2c: Fix sending of slave addresses Ismael Luceno Cortes
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Ismael Luceno Cortes @ 2019-03-05 11:16 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
---

Notes:
    Changes since v1:
    - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")

 drivers/i2c/rcar_i2c.c | 45 +++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
index 74643b085e..c1a233b6e9 100644
--- a/drivers/i2c/rcar_i2c.c
+++ b/drivers/i2c/rcar_i2c.c
@@ -18,35 +18,36 @@
 #include <asm/io.h>
 #include <wait_bit.h>
 
-#define RCAR_I2C_ICSCR			0x00
-#define RCAR_I2C_ICMCR			0x04
-#define RCAR_I2C_ICMCR_MDBS		BIT(7)
-#define RCAR_I2C_ICMCR_FSCL		BIT(6)
-#define RCAR_I2C_ICMCR_FSDA		BIT(5)
-#define RCAR_I2C_ICMCR_OBPC		BIT(4)
-#define RCAR_I2C_ICMCR_MIE		BIT(3)
+#define RCAR_I2C_ICSCR			0x00   /* slave ctrl */
+#define RCAR_I2C_ICMCR			0x04   /* master ctrl */
+#define RCAR_I2C_ICMCR_MDBS		BIT(7) /* non-fifo mode switch */
+#define RCAR_I2C_ICMCR_FSCL		BIT(6) /* override SCL pin */
+#define RCAR_I2C_ICMCR_FSDA		BIT(5) /* override SDA pin */
+#define RCAR_I2C_ICMCR_OBPC		BIT(4) /* override pins */
+#define RCAR_I2C_ICMCR_MIE		BIT(3) /* master if enable */
 #define RCAR_I2C_ICMCR_TSBE		BIT(2)
-#define RCAR_I2C_ICMCR_FSB		BIT(1)
-#define RCAR_I2C_ICMCR_ESG		BIT(0)
-#define RCAR_I2C_ICSSR			0x08
-#define RCAR_I2C_ICMSR			0x0c
+#define RCAR_I2C_ICMCR_FSB		BIT(1) /* force stop bit */
+#define RCAR_I2C_ICMCR_ESG		BIT(0) /* enable start bit gen */
+#define RCAR_I2C_ICSSR			0x08   /* slave status */
+#define RCAR_I2C_ICMSR			0x0c   /* master status */
 #define RCAR_I2C_ICMSR_MASK		0x7f
-#define RCAR_I2C_ICMSR_MNR		BIT(6)
-#define RCAR_I2C_ICMSR_MAL		BIT(5)
-#define RCAR_I2C_ICMSR_MST		BIT(4)
+#define RCAR_I2C_ICMSR_MNR		BIT(6) /* Nack */
+#define RCAR_I2C_ICMSR_MAL		BIT(5) /* Arbitration lost */
+#define RCAR_I2C_ICMSR_MST		BIT(4) /* Stop */
 #define RCAR_I2C_ICMSR_MDE		BIT(3)
 #define RCAR_I2C_ICMSR_MDT		BIT(2)
 #define RCAR_I2C_ICMSR_MDR		BIT(1)
 #define RCAR_I2C_ICMSR_MAT		BIT(0)
-#define RCAR_I2C_ICSIER			0x10
-#define RCAR_I2C_ICMIER			0x14
-#define RCAR_I2C_ICCCR			0x18
+#define RCAR_I2C_ICSIER			0x10   /* slave irq enable */
+#define RCAR_I2C_ICMIER			0x14   /* master irq enable */
+#define RCAR_I2C_ICCCR			0x18   /* clock dividers */
 #define RCAR_I2C_ICCCR_SCGD_OFF		3
-#define RCAR_I2C_ICSAR			0x1c
-#define RCAR_I2C_ICMAR			0x20
-#define RCAR_I2C_ICRXD_ICTXD		0x24
-#define RCAR_I2C_ICFBSCR		0x38
-#define RCAR_I2C_ICFBSCR_TCYC17		0x0f
+#define RCAR_I2C_ICSAR			0x1c   /* slave address */
+#define RCAR_I2C_ICMAR			0x20   /* master address */
+#define RCAR_I2C_ICRXD_ICTXD		0x24   /* data port */
+#define RCAR_I2C_ICFBSCR		0x38   /* First Bit Setup Cycle (Gen3) */
+#define RCAR_I2C_ICFBSCR_TCYC17		0x0f   /* 17*Tcyc delay 1st bit
+						  between SDA and SCL */
 
 enum rcar_i2c_type {
 	RCAR_I2C_TYPE_GEN2,
-- 
2.19.1

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

* [U-Boot] [PATCH v2 3/6] i2c: rcar_i2c: Fix sending of slave addresses
  2019-03-05 11:16 [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Ismael Luceno Cortes
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 2/6] i2c: rcar_i2c: Add comments about registers & values Ismael Luceno Cortes
@ 2019-03-05 11:16 ` Ismael Luceno Cortes
  2019-03-05 18:28   ` Marek Vasut
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 4/6] i2c: rcar_i2c: Don't mask errors with EREMOTEIO at rcar_i2c_xfer Ismael Luceno Cortes
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Ismael Luceno Cortes @ 2019-03-05 11:16 UTC (permalink / raw)
  To: u-boot

Do the reset before clearing the MSR, otherwise it may result in a read
or write operation instead if the start condition is repeated.

Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
---

Notes:
    Changes since v1:
    - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")

 drivers/i2c/rcar_i2c.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
index c1a233b6e9..7131f0c994 100644
--- a/drivers/i2c/rcar_i2c.c
+++ b/drivers/i2c/rcar_i2c.c
@@ -130,9 +130,11 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
 	}
 
 	writel((chip << 1) | read, priv->base + RCAR_I2C_ICMAR);
-	writel(0, priv->base + RCAR_I2C_ICMSR);
+	/* Reset */
 	writel(RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE | RCAR_I2C_ICMCR_ESG,
 	       priv->base + RCAR_I2C_ICMCR);
+	/* Clear Status */
+	writel(0, priv->base + RCAR_I2C_ICMSR);
 
 	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMSR, mask,
 				true, 100, true);
-- 
2.19.1

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

* [U-Boot] [PATCH v2 4/6] i2c: rcar_i2c: Don't mask errors with EREMOTEIO at rcar_i2c_xfer
  2019-03-05 11:16 [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Ismael Luceno Cortes
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 2/6] i2c: rcar_i2c: Add comments about registers & values Ismael Luceno Cortes
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 3/6] i2c: rcar_i2c: Fix sending of slave addresses Ismael Luceno Cortes
@ 2019-03-05 11:16 ` Ismael Luceno Cortes
  2019-03-05 18:29   ` Marek Vasut
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 5/6] i2c: rcar_i2c: Set the slave address from rcar_i2c_xfer Ismael Luceno Cortes
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 13+ messages in thread
From: Ismael Luceno Cortes @ 2019-03-05 11:16 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
---

Notes:
    Changes since v1:
    - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")

 drivers/i2c/rcar_i2c.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
index 7131f0c994..d6b0418290 100644
--- a/drivers/i2c/rcar_i2c.c
+++ b/drivers/i2c/rcar_i2c.c
@@ -217,7 +217,7 @@ static int rcar_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
 			ret = rcar_i2c_write_common(dev, msg);
 
 		if (ret)
-			return -EREMOTEIO;
+			return ret;
 	}
 
 	return ret;
-- 
2.19.1

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

* [U-Boot] [PATCH v2 5/6] i2c: rcar_i2c: Set the slave address from rcar_i2c_xfer
  2019-03-05 11:16 [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Ismael Luceno Cortes
                   ` (2 preceding siblings ...)
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 4/6] i2c: rcar_i2c: Don't mask errors with EREMOTEIO at rcar_i2c_xfer Ismael Luceno Cortes
@ 2019-03-05 11:16 ` Ismael Luceno Cortes
  2019-03-05 18:29   ` Marek Vasut
  2019-03-05 11:23 ` [U-Boot] [PATCH v2 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover Ismael Luceno Cortes
  2019-03-05 18:25 ` [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Marek Vasut
  5 siblings, 1 reply; 13+ messages in thread
From: Ismael Luceno Cortes @ 2019-03-05 11:16 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
---

Notes:
    Changes since v1:
    - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")
    - Fixed masking of return value from rcar_i2c_set_addr

 drivers/i2c/rcar_i2c.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
index d6b0418290..4556b115bd 100644
--- a/drivers/i2c/rcar_i2c.c
+++ b/drivers/i2c/rcar_i2c.c
@@ -154,10 +154,6 @@ static int rcar_i2c_read_common(struct udevice *dev, struct i2c_msg *msg)
 	u32 icmcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE;
 	int i, ret = -EREMOTEIO;
 
-	ret = rcar_i2c_set_addr(dev, msg->addr, 1);
-	if (ret)
-		return ret;
-
 	for (i = 0; i < msg->len; i++) {
 		if (msg->len - 1 == i)
 			icmcr |= RCAR_I2C_ICMCR_FSB;
@@ -184,10 +180,6 @@ static int rcar_i2c_write_common(struct udevice *dev, struct i2c_msg *msg)
 	u32 icmcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE;
 	int i, ret = -EREMOTEIO;
 
-	ret = rcar_i2c_set_addr(dev, msg->addr, 0);
-	if (ret)
-		return ret;
-
 	for (i = 0; i < msg->len; i++) {
 		writel(msg->buf[i], priv->base + RCAR_I2C_ICRXD_ICTXD);
 		writel(icmcr, priv->base + RCAR_I2C_ICMCR);
@@ -211,6 +203,10 @@ static int rcar_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
 	int ret;
 
 	for (; nmsgs > 0; nmsgs--, msg++) {
+		ret = rcar_i2c_set_addr(dev, msg->addr, 1);
+		if (ret)
+			return ret;
+
 		if (msg->flags & I2C_M_RD)
 			ret = rcar_i2c_read_common(dev, msg);
 		else
@@ -220,7 +216,7 @@ static int rcar_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
 			return ret;
 	}
 
-	return ret;
+	return 0;
 }
 
 static int rcar_i2c_probe_chip(struct udevice *dev, uint addr, uint flags)
-- 
2.19.1

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

* [U-Boot] [PATCH v2 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover
  2019-03-05 11:16 [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Ismael Luceno Cortes
                   ` (3 preceding siblings ...)
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 5/6] i2c: rcar_i2c: Set the slave address from rcar_i2c_xfer Ismael Luceno Cortes
@ 2019-03-05 11:23 ` Ismael Luceno Cortes
  2019-03-05 18:32   ` Marek Vasut
  2019-03-05 18:25 ` [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Marek Vasut
  5 siblings, 1 reply; 13+ messages in thread
From: Ismael Luceno Cortes @ 2019-03-05 11:23 UTC (permalink / raw)
  To: u-boot

Cosmetic change.  Any call to the recover function would need to do the
same check afterwards, so it's sensible to make it part of the function.

Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
---

Notes:
    Changes since v1:
    - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")
    - Explained the change
    - Replaced C99-style variable declaration

 drivers/i2c/rcar_i2c.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
index 4556b115bd..21bcf09101 100644
--- a/drivers/i2c/rcar_i2c.c
+++ b/drivers/i2c/rcar_i2c.c
@@ -77,12 +77,13 @@ static int rcar_i2c_finish(struct udevice *dev)
 	return ret;
 }
 
-static void rcar_i2c_recover(struct udevice *dev)
+static int rcar_i2c_recover(struct udevice *dev)
 {
 	struct rcar_i2c_priv *priv = dev_get_priv(dev);
 	u32 mcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_OBPC;
 	u32 mcra = mcr | RCAR_I2C_ICMCR_FSDA;
 	int i;
+	u32 ret;
 
 	/* Send 9 SCL pulses */
 	for (i = 0; i < 9; i++) {
@@ -102,6 +103,9 @@ static void rcar_i2c_recover(struct udevice *dev)
 	udelay(5);
 	writel(mcra | RCAR_I2C_ICMCR_FSCL, priv->base + RCAR_I2C_ICMCR);
 	udelay(5);
+
+	ret = readl(priv->base + RCAR_I2C_ICMSR);
+	return ret & RCAR_I2C_ICMCR_FSDA;
 }
 
 static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
@@ -121,9 +125,7 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
 	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMCR,
 				RCAR_I2C_ICMCR_FSDA, false, 2, true);
 	if (ret) {
-		rcar_i2c_recover(dev);
-		val = readl(priv->base + RCAR_I2C_ICMSR);
-		if (val & RCAR_I2C_ICMCR_FSDA) {
+		if (rcar_i2c_recover(dev)) {
 			dev_err(dev, "Bus busy, aborting\n");
 			return ret;
 		}
-- 
2.19.1

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

* [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed
  2019-03-05 11:16 [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Ismael Luceno Cortes
                   ` (4 preceding siblings ...)
  2019-03-05 11:23 ` [U-Boot] [PATCH v2 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover Ismael Luceno Cortes
@ 2019-03-05 18:25 ` Marek Vasut
  5 siblings, 0 replies; 13+ messages in thread
From: Marek Vasut @ 2019-03-05 18:25 UTC (permalink / raw)
  To: u-boot

On 3/5/19 12:16 PM, Ismael Luceno Cortes wrote:
> It only needs to be done once.

As much as I hate to do it, I need to ask you to reword the commit
message again.

When I look at just the commit message and I read "It only needs to be
done once.", I literally have no clue what the change does. I need to
look into the patch.

> Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
> ---
>  drivers/i2c/rcar_i2c.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
> index 10b0f8bad4..74643b085e 100644
> --- a/drivers/i2c/rcar_i2c.c
> +++ b/drivers/i2c/rcar_i2c.c
> @@ -116,9 +116,7 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
>  	writel(0, priv->base + RCAR_I2C_ICMSR);
>  	writel(priv->icccr, priv->base + RCAR_I2C_ICCCR);
>  
> -	if (priv->type == RCAR_I2C_TYPE_GEN3)
> -		writel(RCAR_I2C_ICFBSCR_TCYC17, priv->base + RCAR_I2C_ICFBSCR);
> -
> +	/* Wait for the bus */
>  	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMCR,
>  				RCAR_I2C_ICMCR_FSDA, false, 2, true);
>  	if (ret) {
> @@ -304,6 +302,10 @@ scgd_find:
>  	priv->icccr = (scgd << RCAR_I2C_ICCCR_SCGD_OFF) | cdf;
>  	writel(priv->icccr, priv->base + RCAR_I2C_ICCCR);
>  
> +	if (priv->type == RCAR_I2C_TYPE_GEN3)
> +		/* Set SCL/SDA delay */
> +		writel(RCAR_I2C_ICFBSCR_TCYC17, priv->base + RCAR_I2C_ICFBSCR);

Please add brackets around the multi-line code, so it's obvious what is
in the if conditional and what is not.

>  	return 0;
>  }
>  
> 
> base-commit: f08023c07d826fbc8e62fdd3367961b2f0b06844
> prerequisite-patch-id: 9e5b0458bc15640eb483ccad91dbe85150f9f7be
> 


-- 
Best regards,
Marek Vasut

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

* [U-Boot] [PATCH v2 2/6] i2c: rcar_i2c: Add comments about registers & values
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 2/6] i2c: rcar_i2c: Add comments about registers & values Ismael Luceno Cortes
@ 2019-03-05 18:28   ` Marek Vasut
  0 siblings, 0 replies; 13+ messages in thread
From: Marek Vasut @ 2019-03-05 18:28 UTC (permalink / raw)
  To: u-boot

On 3/5/19 12:16 PM, Ismael Luceno Cortes wrote:

Commit message is missing :(

> Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
> ---
> 
> Notes:
>     Changes since v1:
>     - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")

Thanks!

>  drivers/i2c/rcar_i2c.c | 45 +++++++++++++++++++++---------------------
>  1 file changed, 23 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
> index 74643b085e..c1a233b6e9 100644
> --- a/drivers/i2c/rcar_i2c.c
> +++ b/drivers/i2c/rcar_i2c.c
> @@ -18,35 +18,36 @@
>  #include <asm/io.h>
>  #include <wait_bit.h>
>  
> -#define RCAR_I2C_ICSCR			0x00
> -#define RCAR_I2C_ICMCR			0x04
> -#define RCAR_I2C_ICMCR_MDBS		BIT(7)
> -#define RCAR_I2C_ICMCR_FSCL		BIT(6)
> -#define RCAR_I2C_ICMCR_FSDA		BIT(5)
> -#define RCAR_I2C_ICMCR_OBPC		BIT(4)
> -#define RCAR_I2C_ICMCR_MIE		BIT(3)
> +#define RCAR_I2C_ICSCR			0x00   /* slave ctrl */
> +#define RCAR_I2C_ICMCR			0x04   /* master ctrl */
> +#define RCAR_I2C_ICMCR_MDBS		BIT(7) /* non-fifo mode switch */
> +#define RCAR_I2C_ICMCR_FSCL		BIT(6) /* override SCL pin */
> +#define RCAR_I2C_ICMCR_FSDA		BIT(5) /* override SDA pin */
> +#define RCAR_I2C_ICMCR_OBPC		BIT(4) /* override pins */
> +#define RCAR_I2C_ICMCR_MIE		BIT(3) /* master if enable */
>  #define RCAR_I2C_ICMCR_TSBE		BIT(2)
> -#define RCAR_I2C_ICMCR_FSB		BIT(1)
> -#define RCAR_I2C_ICMCR_ESG		BIT(0)
> -#define RCAR_I2C_ICSSR			0x08
> -#define RCAR_I2C_ICMSR			0x0c
> +#define RCAR_I2C_ICMCR_FSB		BIT(1) /* force stop bit */
> +#define RCAR_I2C_ICMCR_ESG		BIT(0) /* enable start bit gen */
> +#define RCAR_I2C_ICSSR			0x08   /* slave status */
> +#define RCAR_I2C_ICMSR			0x0c   /* master status */
>  #define RCAR_I2C_ICMSR_MASK		0x7f
> -#define RCAR_I2C_ICMSR_MNR		BIT(6)
> -#define RCAR_I2C_ICMSR_MAL		BIT(5)
> -#define RCAR_I2C_ICMSR_MST		BIT(4)
> +#define RCAR_I2C_ICMSR_MNR		BIT(6) /* Nack */
> +#define RCAR_I2C_ICMSR_MAL		BIT(5) /* Arbitration lost */
> +#define RCAR_I2C_ICMSR_MST		BIT(4) /* Stop */
>  #define RCAR_I2C_ICMSR_MDE		BIT(3)
>  #define RCAR_I2C_ICMSR_MDT		BIT(2)
>  #define RCAR_I2C_ICMSR_MDR		BIT(1)
>  #define RCAR_I2C_ICMSR_MAT		BIT(0)
> -#define RCAR_I2C_ICSIER			0x10
> -#define RCAR_I2C_ICMIER			0x14
> -#define RCAR_I2C_ICCCR			0x18
> +#define RCAR_I2C_ICSIER			0x10   /* slave irq enable */
> +#define RCAR_I2C_ICMIER			0x14   /* master irq enable */
> +#define RCAR_I2C_ICCCR			0x18   /* clock dividers */
>  #define RCAR_I2C_ICCCR_SCGD_OFF		3
> -#define RCAR_I2C_ICSAR			0x1c
> -#define RCAR_I2C_ICMAR			0x20
> -#define RCAR_I2C_ICRXD_ICTXD		0x24
> -#define RCAR_I2C_ICFBSCR		0x38
> -#define RCAR_I2C_ICFBSCR_TCYC17		0x0f
> +#define RCAR_I2C_ICSAR			0x1c   /* slave address */
> +#define RCAR_I2C_ICMAR			0x20   /* master address */
> +#define RCAR_I2C_ICRXD_ICTXD		0x24   /* data port */
> +#define RCAR_I2C_ICFBSCR		0x38   /* First Bit Setup Cycle (Gen3) */
> +#define RCAR_I2C_ICFBSCR_TCYC17		0x0f   /* 17*Tcyc delay 1st bit
> +						  between SDA and SCL */
>  
>  enum rcar_i2c_type {
>  	RCAR_I2C_TYPE_GEN2,

Checkpatch is complaining:

WARNING: line over 80 characters
#137: FILE: drivers/i2c/rcar_i2c.c:47:
+#define RCAR_I2C_ICFBSCR               0x38   /* First Bit Setup Cycle
(Gen3) */

WARNING: Block comments use * on subsequent lines
#139: FILE: drivers/i2c/rcar_i2c.c:49:
+#define RCAR_I2C_ICFBSCR_TCYC17                0x0f   /* 17*Tcyc delay
1st bit
+                                                 between SDA and SCL */

WARNING: Block comments use a trailing */ on a separate line
#139: FILE: drivers/i2c/rcar_i2c.c:49:
+                                                 between SDA and SCL */

total: 1 errors, 3 warnings, 0 checks, 60 lines checked

Please fix and run scripts/checkpatch.pl on the patches before posting them.

-- 
Best regards,
Marek Vasut

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

* [U-Boot] [PATCH v2 3/6] i2c: rcar_i2c: Fix sending of slave addresses
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 3/6] i2c: rcar_i2c: Fix sending of slave addresses Ismael Luceno Cortes
@ 2019-03-05 18:28   ` Marek Vasut
  0 siblings, 0 replies; 13+ messages in thread
From: Marek Vasut @ 2019-03-05 18:28 UTC (permalink / raw)
  To: u-boot

On 3/5/19 12:16 PM, Ismael Luceno Cortes wrote:
> Do the reset before clearing the MSR, otherwise it may result in a read
> or write operation instead if the start condition is repeated.
> 
> Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>

Reviewed-by: Marek Vasut <marek.vasut+renesas@gmail.com>

> ---
> 
> Notes:
>     Changes since v1:
>     - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")
> 
>  drivers/i2c/rcar_i2c.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
> index c1a233b6e9..7131f0c994 100644
> --- a/drivers/i2c/rcar_i2c.c
> +++ b/drivers/i2c/rcar_i2c.c
> @@ -130,9 +130,11 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
>  	}
>  
>  	writel((chip << 1) | read, priv->base + RCAR_I2C_ICMAR);
> -	writel(0, priv->base + RCAR_I2C_ICMSR);
> +	/* Reset */
>  	writel(RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE | RCAR_I2C_ICMCR_ESG,
>  	       priv->base + RCAR_I2C_ICMCR);
> +	/* Clear Status */
> +	writel(0, priv->base + RCAR_I2C_ICMSR);
>  
>  	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMSR, mask,
>  				true, 100, true);
> 


-- 
Best regards,
Marek Vasut

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

* [U-Boot] [PATCH v2 4/6] i2c: rcar_i2c: Don't mask errors with EREMOTEIO at rcar_i2c_xfer
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 4/6] i2c: rcar_i2c: Don't mask errors with EREMOTEIO at rcar_i2c_xfer Ismael Luceno Cortes
@ 2019-03-05 18:29   ` Marek Vasut
  0 siblings, 0 replies; 13+ messages in thread
From: Marek Vasut @ 2019-03-05 18:29 UTC (permalink / raw)
  To: u-boot

On 3/5/19 12:16 PM, Ismael Luceno Cortes wrote:

Commit message is missing :-(

> Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
> ---
> 
> Notes:
>     Changes since v1:
>     - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")
> 
>  drivers/i2c/rcar_i2c.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
> index 7131f0c994..d6b0418290 100644
> --- a/drivers/i2c/rcar_i2c.c
> +++ b/drivers/i2c/rcar_i2c.c
> @@ -217,7 +217,7 @@ static int rcar_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
>  			ret = rcar_i2c_write_common(dev, msg);
>  
>  		if (ret)
> -			return -EREMOTEIO;
> +			return ret;
>  	}
>  
>  	return ret;
> 


-- 
Best regards,
Marek Vasut

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

* [U-Boot] [PATCH v2 5/6] i2c: rcar_i2c: Set the slave address from rcar_i2c_xfer
  2019-03-05 11:16 ` [U-Boot] [PATCH v2 5/6] i2c: rcar_i2c: Set the slave address from rcar_i2c_xfer Ismael Luceno Cortes
@ 2019-03-05 18:29   ` Marek Vasut
  0 siblings, 0 replies; 13+ messages in thread
From: Marek Vasut @ 2019-03-05 18:29 UTC (permalink / raw)
  To: u-boot

On 3/5/19 12:16 PM, Ismael Luceno Cortes wrote:

Commit message is missing :-(

The patch itself is fine though. Can you fill the commit message and do
a V3 of the series ?

> Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
> ---
> 
> Notes:
>     Changes since v1:
>     - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")
>     - Fixed masking of return value from rcar_i2c_set_addr
> 
>  drivers/i2c/rcar_i2c.c | 14 +++++---------
>  1 file changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
> index d6b0418290..4556b115bd 100644
> --- a/drivers/i2c/rcar_i2c.c
> +++ b/drivers/i2c/rcar_i2c.c
> @@ -154,10 +154,6 @@ static int rcar_i2c_read_common(struct udevice *dev, struct i2c_msg *msg)
>  	u32 icmcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE;
>  	int i, ret = -EREMOTEIO;
>  
> -	ret = rcar_i2c_set_addr(dev, msg->addr, 1);
> -	if (ret)
> -		return ret;
> -
>  	for (i = 0; i < msg->len; i++) {
>  		if (msg->len - 1 == i)
>  			icmcr |= RCAR_I2C_ICMCR_FSB;
> @@ -184,10 +180,6 @@ static int rcar_i2c_write_common(struct udevice *dev, struct i2c_msg *msg)
>  	u32 icmcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE;
>  	int i, ret = -EREMOTEIO;
>  
> -	ret = rcar_i2c_set_addr(dev, msg->addr, 0);
> -	if (ret)
> -		return ret;
> -
>  	for (i = 0; i < msg->len; i++) {
>  		writel(msg->buf[i], priv->base + RCAR_I2C_ICRXD_ICTXD);
>  		writel(icmcr, priv->base + RCAR_I2C_ICMCR);
> @@ -211,6 +203,10 @@ static int rcar_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
>  	int ret;
>  
>  	for (; nmsgs > 0; nmsgs--, msg++) {
> +		ret = rcar_i2c_set_addr(dev, msg->addr, 1);
> +		if (ret)
> +			return ret;
> +
>  		if (msg->flags & I2C_M_RD)
>  			ret = rcar_i2c_read_common(dev, msg);
>  		else
> @@ -220,7 +216,7 @@ static int rcar_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
>  			return ret;
>  	}
>  
> -	return ret;
> +	return 0;
>  }
>  
>  static int rcar_i2c_probe_chip(struct udevice *dev, uint addr, uint flags)
> 


-- 
Best regards,
Marek Vasut

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

* [U-Boot] [PATCH v2 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover
  2019-03-05 11:23 ` [U-Boot] [PATCH v2 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover Ismael Luceno Cortes
@ 2019-03-05 18:32   ` Marek Vasut
  2019-03-06  9:50     ` Ismael Luceno Cortes
  0 siblings, 1 reply; 13+ messages in thread
From: Marek Vasut @ 2019-03-05 18:32 UTC (permalink / raw)
  To: u-boot

On 3/5/19 12:23 PM, Ismael Luceno Cortes wrote:
> Cosmetic change.  Any call to the recover function would need to do the
> same check afterwards, so it's sensible to make it part of the function.
> 
> Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
> ---
> 
> Notes:
>     Changes since v1:
>     - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")
>     - Explained the change
>     - Replaced C99-style variable declaration
> 
>  drivers/i2c/rcar_i2c.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
> index 4556b115bd..21bcf09101 100644
> --- a/drivers/i2c/rcar_i2c.c
> +++ b/drivers/i2c/rcar_i2c.c
> @@ -77,12 +77,13 @@ static int rcar_i2c_finish(struct udevice *dev)
>  	return ret;
>  }
>  
> -static void rcar_i2c_recover(struct udevice *dev)
> +static int rcar_i2c_recover(struct udevice *dev)
>  {
>  	struct rcar_i2c_priv *priv = dev_get_priv(dev);
>  	u32 mcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_OBPC;
>  	u32 mcra = mcr | RCAR_I2C_ICMCR_FSDA;
>  	int i;
> +	u32 ret;

Can you change this to "reg" or something like that ? $ret is usually a
signed int return value, so this could be confusing.

>  
>  	/* Send 9 SCL pulses */
>  	for (i = 0; i < 9; i++) {
> @@ -102,6 +103,9 @@ static void rcar_i2c_recover(struct udevice *dev)
>  	udelay(5);
>  	writel(mcra | RCAR_I2C_ICMCR_FSCL, priv->base + RCAR_I2C_ICMCR);
>  	udelay(5);
> +
> +	ret = readl(priv->base + RCAR_I2C_ICMSR);
> +	return ret & RCAR_I2C_ICMCR_FSDA;

What about doing this instead

reg = readl...
if (reg & ...FSDA)
	return -EBUSY;

return 0;

That way, the code will use standard errno.h return values.

>  }
>  
>  static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
> @@ -121,9 +125,7 @@ static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
>  	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMCR,
>  				RCAR_I2C_ICMCR_FSDA, false, 2, true);
>  	if (ret) {
> -		rcar_i2c_recover(dev);
> -		val = readl(priv->base + RCAR_I2C_ICMSR);
> -		if (val & RCAR_I2C_ICMCR_FSDA) {
> +		if (rcar_i2c_recover(dev)) {
>  			dev_err(dev, "Bus busy, aborting\n");
>  			return ret;
>  		}
> 


-- 
Best regards,
Marek Vasut

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

* [U-Boot] [PATCH v2 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover
  2019-03-05 18:32   ` Marek Vasut
@ 2019-03-06  9:50     ` Ismael Luceno Cortes
  0 siblings, 0 replies; 13+ messages in thread
From: Ismael Luceno Cortes @ 2019-03-06  9:50 UTC (permalink / raw)
  To: u-boot

On 05/Mar/2019 19:32, Marek Vasut wrote:
> On 3/5/19 12:23 PM, Ismael Luceno Cortes wrote:
> > Cosmetic change.  Any call to the recover function would need to do the
> > same check afterwards, so it's sensible to make it part of the function.
> > 
> > Signed-off-by: Ismael Luceno <ismael.luceno@silicon-gears.com>
> > ---
> > 
> > Notes:
> >     Changes since v1:
> >     - Rebased on top of patch 1050650 ("i2c: rcar_i2c: Add Gen3 SoC support")
> >     - Explained the change
> >     - Replaced C99-style variable declaration
> > 
> >  drivers/i2c/rcar_i2c.c | 10 ++++++----
> >  1 file changed, 6 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
> > index 4556b115bd..21bcf09101 100644
> > --- a/drivers/i2c/rcar_i2c.c
> > +++ b/drivers/i2c/rcar_i2c.c
> > @@ -77,12 +77,13 @@ static int rcar_i2c_finish(struct udevice *dev)
> >  	return ret;
> >  }
> >  
> > -static void rcar_i2c_recover(struct udevice *dev)
> > +static int rcar_i2c_recover(struct udevice *dev)
> >  {
> >  	struct rcar_i2c_priv *priv = dev_get_priv(dev);
> >  	u32 mcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_OBPC;
> >  	u32 mcra = mcr | RCAR_I2C_ICMCR_FSDA;
> >  	int i;
> > +	u32 ret;
> 
> Can you change this to "reg" or something like that ? $ret is usually a
> signed int return value, so this could be confusing.

Ok.
 
> >  
> >  	/* Send 9 SCL pulses */
> >  	for (i = 0; i < 9; i++) {
> > @@ -102,6 +103,9 @@ static void rcar_i2c_recover(struct udevice *dev)
> >  	udelay(5);
> >  	writel(mcra | RCAR_I2C_ICMCR_FSCL, priv->base + RCAR_I2C_ICMCR);
> >  	udelay(5);
> > +
> > +	ret = readl(priv->base + RCAR_I2C_ICMSR);
> > +	return ret & RCAR_I2C_ICMCR_FSDA;
> 
> What about doing this instead
> 
> reg = readl...
> if (reg & ...FSDA)
> 	return -EBUSY;
> 
> return 0;
> 
> That way, the code will use standard errno.h return values.

Makes sense.

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

end of thread, other threads:[~2019-03-06  9:50 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-05 11:16 [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Ismael Luceno Cortes
2019-03-05 11:16 ` [U-Boot] [PATCH v2 2/6] i2c: rcar_i2c: Add comments about registers & values Ismael Luceno Cortes
2019-03-05 18:28   ` Marek Vasut
2019-03-05 11:16 ` [U-Boot] [PATCH v2 3/6] i2c: rcar_i2c: Fix sending of slave addresses Ismael Luceno Cortes
2019-03-05 18:28   ` Marek Vasut
2019-03-05 11:16 ` [U-Boot] [PATCH v2 4/6] i2c: rcar_i2c: Don't mask errors with EREMOTEIO at rcar_i2c_xfer Ismael Luceno Cortes
2019-03-05 18:29   ` Marek Vasut
2019-03-05 11:16 ` [U-Boot] [PATCH v2 5/6] i2c: rcar_i2c: Set the slave address from rcar_i2c_xfer Ismael Luceno Cortes
2019-03-05 18:29   ` Marek Vasut
2019-03-05 11:23 ` [U-Boot] [PATCH v2 6/6] i2c: rcar_i2c: Move FSDA check to rcar_i2c_recover Ismael Luceno Cortes
2019-03-05 18:32   ` Marek Vasut
2019-03-06  9:50     ` Ismael Luceno Cortes
2019-03-05 18:25 ` [U-Boot] [PATCH v2 1/6] i2c: rcar_i2c: Setup SCL/SDA delay at rcar_i2c_set_speed Marek Vasut

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.