All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20161111085707.GC16907@hardcore>

diff --git a/a/2.txt b/N1/2.txt
index 6a48a28..8b13789 100644
--- a/a/2.txt
+++ b/N1/2.txt
@@ -1,38 +1 @@
->From 21a158efd0b6c5a08af8f1c1b078bc4b40291bbf Mon Sep 17 00:00:00 2001
-From: Jan Glauber <jglauber@cavium.com>
-Date: Fri, 11 Nov 2016 09:17:19 +0100
-Subject: [PATCH 1/3] i2c: octeon: thunderx: TWSI software reset in recovery
 
-I've seen i2c recovery reporting long loops of:
-
-[ 1035.887818] i2c i2c-4: SCL is stuck low, exit recovery
-[ 1037.999748] i2c i2c-4: SCL is stuck low, exit recovery
-[ 1040.111694] i2c i2c-4: SCL is stuck low, exit recovery
-...
-
-Add a TWSI software reset which clears the status and
-STA,STP,IFLG in SW_TWSI_EOP_TWSI_CTL.
-
-With this the recovery works fine and above message is not seen.
-
-Signed-off-by: Jan Glauber <jglauber@cavium.com>
----
- drivers/i2c/busses/i2c-octeon-core.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c
-index 419b54b..0b02070 100644
---- a/drivers/i2c/busses/i2c-octeon-core.c
-+++ b/drivers/i2c/busses/i2c-octeon-core.c
-@@ -791,6 +791,9 @@ static void octeon_i2c_prepare_recovery(struct i2c_adapter *adap)
- 	struct octeon_i2c *i2c = i2c_get_adapdata(adap);
- 
- 	octeon_i2c_hlc_disable(i2c);
-+	octeon_i2c_reg_write(i2c, SW_TWSI_EOP_TWSI_RST, 0);
-+	/* wait for software reset to settle */
-+	udelay(5);
- 
- 	/*
- 	 * Bring control register to a good state regardless
--- 
-1.9.1
diff --git a/a/3.hdr b/a/3.hdr
deleted file mode 100644
index fc050d7..0000000
--- a/a/3.hdr
+++ /dev/null
@@ -1,3 +0,0 @@
-Content-Type: text/x-diff; charset="us-ascii"
-Content-Disposition: attachment;
-	filename="0002-i2c-octeon-thunderx-Remove-polling-after-interrupt.patch"
diff --git a/a/3.txt b/a/3.txt
deleted file mode 100644
index c395530..0000000
--- a/a/3.txt
+++ /dev/null
@@ -1,109 +0,0 @@
->From d904526a298edcf1bfba173b1b71a677eb413677 Mon Sep 17 00:00:00 2001
-From: Jan Glauber <jglauber@cavium.com>
-Date: Fri, 11 Nov 2016 09:34:34 +0100
-Subject: [PATCH 2/3] i2c: octeon: thunderx: Remove polling after interrupt
-
-Remove the polling after the interrupt. In case the IFLG
-is not set although the interrupt occured we will run into
-a timeout and retry the operation. This should happen very
-seldom.
-
-Note: the default timeout (1s) can be changed via an ioclt
-per device.
-
-Signed-off-by: Jan Glauber <jglauber@cavium.com>
----
- drivers/i2c/busses/i2c-octeon-core.c | 43 ++----------------------------------
- 1 file changed, 2 insertions(+), 41 deletions(-)
-
-diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c
-index 0b02070..1d8775799 100644
---- a/drivers/i2c/busses/i2c-octeon-core.c
-+++ b/drivers/i2c/busses/i2c-octeon-core.c
-@@ -36,24 +36,6 @@ static bool octeon_i2c_test_iflg(struct octeon_i2c *i2c)
- 	return (octeon_i2c_ctl_read(i2c) & TWSI_CTL_IFLG);
- }
- 
--static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)
--{
--	if (octeon_i2c_test_iflg(i2c))
--		return true;
--
--	if (*first) {
--		*first = false;
--		return false;
--	}
--
--	/*
--	 * IRQ has signaled an event but IFLG hasn't changed.
--	 * Sleep and retry once.
--	 */
--	usleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);
--	return octeon_i2c_test_iflg(i2c);
--}
--
- /**
-  * octeon_i2c_wait - wait for the IFLG to be set
-  * @i2c: The struct octeon_i2c
-@@ -63,7 +45,6 @@ static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)
- static int octeon_i2c_wait(struct octeon_i2c *i2c)
- {
- 	long time_left;
--	bool first = true;
- 
- 	/*
- 	 * Some chip revisions don't assert the irq in the interrupt
-@@ -80,7 +61,7 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)
- 	}
- 
- 	i2c->int_enable(i2c);
--	time_left = wait_event_timeout(i2c->queue, octeon_i2c_test_ready(i2c, &first),
-+	time_left = wait_event_timeout(i2c->queue, octeon_i2c_test_iflg(i2c),
- 				       i2c->adap.timeout);
- 	i2c->int_disable(i2c);
- 
-@@ -102,25 +83,6 @@ static bool octeon_i2c_hlc_test_valid(struct octeon_i2c *i2c)
- 	return (__raw_readq(i2c->twsi_base + SW_TWSI(i2c)) & SW_TWSI_V) == 0;
- }
- 
--static bool octeon_i2c_hlc_test_ready(struct octeon_i2c *i2c, bool *first)
--{
--	/* check if valid bit is cleared */
--	if (octeon_i2c_hlc_test_valid(i2c))
--		return true;
--
--	if (*first) {
--		*first = false;
--		return false;
--	}
--
--	/*
--	 * IRQ has signaled an event but valid bit isn't cleared.
--	 * Sleep and retry once.
--	 */
--	usleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);
--	return octeon_i2c_hlc_test_valid(i2c);
--}
--
- static void octeon_i2c_hlc_int_clear(struct octeon_i2c *i2c)
- {
- 	/* clear ST/TS events, listen for neither */
-@@ -176,7 +138,6 @@ static void octeon_i2c_hlc_disable(struct octeon_i2c *i2c)
-  */
- static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)
- {
--	bool first = true;
- 	int time_left;
- 
- 	/*
-@@ -195,7 +156,7 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)
- 
- 	i2c->hlc_int_enable(i2c);
- 	time_left = wait_event_timeout(i2c->queue,
--				       octeon_i2c_hlc_test_ready(i2c, &first),
-+				       octeon_i2c_hlc_test_valid(i2c),
- 				       i2c->adap.timeout);
- 	i2c->hlc_int_disable(i2c);
- 	if (!time_left)
--- 
-1.9.1
diff --git a/a/4.hdr b/a/4.hdr
deleted file mode 100644
index ddd6fe3..0000000
--- a/a/4.hdr
+++ /dev/null
@@ -1,3 +0,0 @@
-Content-Type: text/x-diff; charset="us-ascii"
-Content-Disposition: attachment;
-	filename="0003-i2c-octeon-thunderx-Debug-prints-for-timeout-and-rec.patch"
diff --git a/a/4.txt b/a/4.txt
deleted file mode 100644
index 968b337..0000000
--- a/a/4.txt
+++ /dev/null
@@ -1,50 +0,0 @@
->From 45eae05b8d793f5652f77ab1d5faa62c30927a10 Mon Sep 17 00:00:00 2001
-From: Jan Glauber <jglauber@cavium.com>
-Date: Fri, 11 Nov 2016 09:40:15 +0100
-Subject: [PATCH 3/3] i2c: octeon: thunderx: Debug prints for timeout and
- recovery
-
-Signed-off-by: Jan Glauber <jglauber@cavium.com>
----
- drivers/i2c/busses/i2c-octeon-core.c | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c
-index 1d8775799..a2a92b6 100644
---- a/drivers/i2c/busses/i2c-octeon-core.c
-+++ b/drivers/i2c/busses/i2c-octeon-core.c
-@@ -72,9 +72,10 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)
- 		return 0;
- 	}
- 
--	if (!time_left)
-+	if (!time_left) {
-+		pr_err("%s: timed out\n", __func__);
- 		return -ETIMEDOUT;
--
-+	}
- 	return 0;
- }
- 
-@@ -169,8 +170,10 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)
- 		return 0;
- 	}
- 
--	if (!time_left)
-+	if (!time_left) {
-+		pr_err("%s: timed out\n", __func__);
- 		return -ETIMEDOUT;
-+	}
- 	return 0;
- }
- 
-@@ -280,6 +283,7 @@ static int octeon_i2c_start(struct octeon_i2c *i2c)
- 
- error:
- 	/* START failed, try to recover */
-+	pr_err("%s: try to recover from status: %d\n", __func__, stat);
- 	ret = octeon_i2c_recovery(i2c);
- 	return (ret) ? ret : -EAGAIN;
- }
--- 
-1.9.1
diff --git a/a/content_digest b/N1/content_digest
index b1857b3..b8fdc70 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -6,8 +6,8 @@
  "Subject\0Re: [PATCH 2/2] i2c: octeon: Fix waiting for operation completion\0"
  "Date\0Fri, 11 Nov 2016 09:57:07 +0100\0"
  "To\0Paul Burton <paul.burton@imgtec.com>\0"
- "Cc\0linux-i2c@vger.kernel.org"
-  linux-mips@linux-mips.org
+ "Cc\0<linux-i2c@vger.kernel.org>"
+  <linux-mips@linux-mips.org>
   David Daney <david.daney@cavium.com>
   Peter Swain <pswain@cavium.com>
   Wolfram Sang <wsa@the-dreams.de>
@@ -38,208 +38,5 @@
  "\01:2\0"
  "fn\00001-i2c-octeon-thunderx-TWSI-software-reset-in-recovery.patch\0"
  "b\0"
- ">From 21a158efd0b6c5a08af8f1c1b078bc4b40291bbf Mon Sep 17 00:00:00 2001\n"
- "From: Jan Glauber <jglauber@cavium.com>\n"
- "Date: Fri, 11 Nov 2016 09:17:19 +0100\n"
- "Subject: [PATCH 1/3] i2c: octeon: thunderx: TWSI software reset in recovery\n"
- "\n"
- "I've seen i2c recovery reporting long loops of:\n"
- "\n"
- "[ 1035.887818] i2c i2c-4: SCL is stuck low, exit recovery\n"
- "[ 1037.999748] i2c i2c-4: SCL is stuck low, exit recovery\n"
- "[ 1040.111694] i2c i2c-4: SCL is stuck low, exit recovery\n"
- "...\n"
- "\n"
- "Add a TWSI software reset which clears the status and\n"
- "STA,STP,IFLG in SW_TWSI_EOP_TWSI_CTL.\n"
- "\n"
- "With this the recovery works fine and above message is not seen.\n"
- "\n"
- "Signed-off-by: Jan Glauber <jglauber@cavium.com>\n"
- "---\n"
- " drivers/i2c/busses/i2c-octeon-core.c | 3 +++\n"
- " 1 file changed, 3 insertions(+)\n"
- "\n"
- "diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "index 419b54b..0b02070 100644\n"
- "--- a/drivers/i2c/busses/i2c-octeon-core.c\n"
- "+++ b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "@@ -791,6 +791,9 @@ static void octeon_i2c_prepare_recovery(struct i2c_adapter *adap)\n"
- " \tstruct octeon_i2c *i2c = i2c_get_adapdata(adap);\n"
- " \n"
- " \tocteon_i2c_hlc_disable(i2c);\n"
- "+\tocteon_i2c_reg_write(i2c, SW_TWSI_EOP_TWSI_RST, 0);\n"
- "+\t/* wait for software reset to settle */\n"
- "+\tudelay(5);\n"
- " \n"
- " \t/*\n"
- " \t * Bring control register to a good state regardless\n"
- "-- \n"
- 1.9.1
- "\01:3\0"
- "fn\00002-i2c-octeon-thunderx-Remove-polling-after-interrupt.patch\0"
- "b\0"
- ">From d904526a298edcf1bfba173b1b71a677eb413677 Mon Sep 17 00:00:00 2001\n"
- "From: Jan Glauber <jglauber@cavium.com>\n"
- "Date: Fri, 11 Nov 2016 09:34:34 +0100\n"
- "Subject: [PATCH 2/3] i2c: octeon: thunderx: Remove polling after interrupt\n"
- "\n"
- "Remove the polling after the interrupt. In case the IFLG\n"
- "is not set although the interrupt occured we will run into\n"
- "a timeout and retry the operation. This should happen very\n"
- "seldom.\n"
- "\n"
- "Note: the default timeout (1s) can be changed via an ioclt\n"
- "per device.\n"
- "\n"
- "Signed-off-by: Jan Glauber <jglauber@cavium.com>\n"
- "---\n"
- " drivers/i2c/busses/i2c-octeon-core.c | 43 ++----------------------------------\n"
- " 1 file changed, 2 insertions(+), 41 deletions(-)\n"
- "\n"
- "diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "index 0b02070..1d8775799 100644\n"
- "--- a/drivers/i2c/busses/i2c-octeon-core.c\n"
- "+++ b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "@@ -36,24 +36,6 @@ static bool octeon_i2c_test_iflg(struct octeon_i2c *i2c)\n"
- " \treturn (octeon_i2c_ctl_read(i2c) & TWSI_CTL_IFLG);\n"
- " }\n"
- " \n"
- "-static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)\n"
- "-{\n"
- "-\tif (octeon_i2c_test_iflg(i2c))\n"
- "-\t\treturn true;\n"
- "-\n"
- "-\tif (*first) {\n"
- "-\t\t*first = false;\n"
- "-\t\treturn false;\n"
- "-\t}\n"
- "-\n"
- "-\t/*\n"
- "-\t * IRQ has signaled an event but IFLG hasn't changed.\n"
- "-\t * Sleep and retry once.\n"
- "-\t */\n"
- "-\tusleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);\n"
- "-\treturn octeon_i2c_test_iflg(i2c);\n"
- "-}\n"
- "-\n"
- " /**\n"
- "  * octeon_i2c_wait - wait for the IFLG to be set\n"
- "  * @i2c: The struct octeon_i2c\n"
- "@@ -63,7 +45,6 @@ static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)\n"
- " static int octeon_i2c_wait(struct octeon_i2c *i2c)\n"
- " {\n"
- " \tlong time_left;\n"
- "-\tbool first = true;\n"
- " \n"
- " \t/*\n"
- " \t * Some chip revisions don't assert the irq in the interrupt\n"
- "@@ -80,7 +61,7 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)\n"
- " \t}\n"
- " \n"
- " \ti2c->int_enable(i2c);\n"
- "-\ttime_left = wait_event_timeout(i2c->queue, octeon_i2c_test_ready(i2c, &first),\n"
- "+\ttime_left = wait_event_timeout(i2c->queue, octeon_i2c_test_iflg(i2c),\n"
- " \t\t\t\t       i2c->adap.timeout);\n"
- " \ti2c->int_disable(i2c);\n"
- " \n"
- "@@ -102,25 +83,6 @@ static bool octeon_i2c_hlc_test_valid(struct octeon_i2c *i2c)\n"
- " \treturn (__raw_readq(i2c->twsi_base + SW_TWSI(i2c)) & SW_TWSI_V) == 0;\n"
- " }\n"
- " \n"
- "-static bool octeon_i2c_hlc_test_ready(struct octeon_i2c *i2c, bool *first)\n"
- "-{\n"
- "-\t/* check if valid bit is cleared */\n"
- "-\tif (octeon_i2c_hlc_test_valid(i2c))\n"
- "-\t\treturn true;\n"
- "-\n"
- "-\tif (*first) {\n"
- "-\t\t*first = false;\n"
- "-\t\treturn false;\n"
- "-\t}\n"
- "-\n"
- "-\t/*\n"
- "-\t * IRQ has signaled an event but valid bit isn't cleared.\n"
- "-\t * Sleep and retry once.\n"
- "-\t */\n"
- "-\tusleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);\n"
- "-\treturn octeon_i2c_hlc_test_valid(i2c);\n"
- "-}\n"
- "-\n"
- " static void octeon_i2c_hlc_int_clear(struct octeon_i2c *i2c)\n"
- " {\n"
- " \t/* clear ST/TS events, listen for neither */\n"
- "@@ -176,7 +138,6 @@ static void octeon_i2c_hlc_disable(struct octeon_i2c *i2c)\n"
- "  */\n"
- " static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)\n"
- " {\n"
- "-\tbool first = true;\n"
- " \tint time_left;\n"
- " \n"
- " \t/*\n"
- "@@ -195,7 +156,7 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)\n"
- " \n"
- " \ti2c->hlc_int_enable(i2c);\n"
- " \ttime_left = wait_event_timeout(i2c->queue,\n"
- "-\t\t\t\t       octeon_i2c_hlc_test_ready(i2c, &first),\n"
- "+\t\t\t\t       octeon_i2c_hlc_test_valid(i2c),\n"
- " \t\t\t\t       i2c->adap.timeout);\n"
- " \ti2c->hlc_int_disable(i2c);\n"
- " \tif (!time_left)\n"
- "-- \n"
- 1.9.1
- "\01:4\0"
- "fn\00003-i2c-octeon-thunderx-Debug-prints-for-timeout-and-rec.patch\0"
- "b\0"
- ">From 45eae05b8d793f5652f77ab1d5faa62c30927a10 Mon Sep 17 00:00:00 2001\n"
- "From: Jan Glauber <jglauber@cavium.com>\n"
- "Date: Fri, 11 Nov 2016 09:40:15 +0100\n"
- "Subject: [PATCH 3/3] i2c: octeon: thunderx: Debug prints for timeout and\n"
- " recovery\n"
- "\n"
- "Signed-off-by: Jan Glauber <jglauber@cavium.com>\n"
- "---\n"
- " drivers/i2c/busses/i2c-octeon-core.c | 10 +++++++---\n"
- " 1 file changed, 7 insertions(+), 3 deletions(-)\n"
- "\n"
- "diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "index 1d8775799..a2a92b6 100644\n"
- "--- a/drivers/i2c/busses/i2c-octeon-core.c\n"
- "+++ b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "@@ -72,9 +72,10 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)\n"
- " \t\treturn 0;\n"
- " \t}\n"
- " \n"
- "-\tif (!time_left)\n"
- "+\tif (!time_left) {\n"
- "+\t\tpr_err(\"%s: timed out\\n\", __func__);\n"
- " \t\treturn -ETIMEDOUT;\n"
- "-\n"
- "+\t}\n"
- " \treturn 0;\n"
- " }\n"
- " \n"
- "@@ -169,8 +170,10 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)\n"
- " \t\treturn 0;\n"
- " \t}\n"
- " \n"
- "-\tif (!time_left)\n"
- "+\tif (!time_left) {\n"
- "+\t\tpr_err(\"%s: timed out\\n\", __func__);\n"
- " \t\treturn -ETIMEDOUT;\n"
- "+\t}\n"
- " \treturn 0;\n"
- " }\n"
- " \n"
- "@@ -280,6 +283,7 @@ static int octeon_i2c_start(struct octeon_i2c *i2c)\n"
- " \n"
- " error:\n"
- " \t/* START failed, try to recover */\n"
- "+\tpr_err(\"%s: try to recover from status: %d\\n\", __func__, stat);\n"
- " \tret = octeon_i2c_recovery(i2c);\n"
- " \treturn (ret) ? ret : -EAGAIN;\n"
- " }\n"
- "-- \n"
- 1.9.1
 
-4741b4c185cc0fd3310be07e6df9b36b5b7050ffcb2c75cdee35b35793476bf7
+cef949e0d86af6603a7fad03d274b354a326370871916e78e0668ee0821c60db

diff --git a/a/2.txt b/N2/2.txt
index 6a48a28..8b13789 100644
--- a/a/2.txt
+++ b/N2/2.txt
@@ -1,38 +1 @@
->From 21a158efd0b6c5a08af8f1c1b078bc4b40291bbf Mon Sep 17 00:00:00 2001
-From: Jan Glauber <jglauber@cavium.com>
-Date: Fri, 11 Nov 2016 09:17:19 +0100
-Subject: [PATCH 1/3] i2c: octeon: thunderx: TWSI software reset in recovery
 
-I've seen i2c recovery reporting long loops of:
-
-[ 1035.887818] i2c i2c-4: SCL is stuck low, exit recovery
-[ 1037.999748] i2c i2c-4: SCL is stuck low, exit recovery
-[ 1040.111694] i2c i2c-4: SCL is stuck low, exit recovery
-...
-
-Add a TWSI software reset which clears the status and
-STA,STP,IFLG in SW_TWSI_EOP_TWSI_CTL.
-
-With this the recovery works fine and above message is not seen.
-
-Signed-off-by: Jan Glauber <jglauber@cavium.com>
----
- drivers/i2c/busses/i2c-octeon-core.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c
-index 419b54b..0b02070 100644
---- a/drivers/i2c/busses/i2c-octeon-core.c
-+++ b/drivers/i2c/busses/i2c-octeon-core.c
-@@ -791,6 +791,9 @@ static void octeon_i2c_prepare_recovery(struct i2c_adapter *adap)
- 	struct octeon_i2c *i2c = i2c_get_adapdata(adap);
- 
- 	octeon_i2c_hlc_disable(i2c);
-+	octeon_i2c_reg_write(i2c, SW_TWSI_EOP_TWSI_RST, 0);
-+	/* wait for software reset to settle */
-+	udelay(5);
- 
- 	/*
- 	 * Bring control register to a good state regardless
--- 
-1.9.1
diff --git a/a/3.hdr b/a/3.hdr
deleted file mode 100644
index fc050d7..0000000
--- a/a/3.hdr
+++ /dev/null
@@ -1,3 +0,0 @@
-Content-Type: text/x-diff; charset="us-ascii"
-Content-Disposition: attachment;
-	filename="0002-i2c-octeon-thunderx-Remove-polling-after-interrupt.patch"
diff --git a/a/3.txt b/a/3.txt
deleted file mode 100644
index c395530..0000000
--- a/a/3.txt
+++ /dev/null
@@ -1,109 +0,0 @@
->From d904526a298edcf1bfba173b1b71a677eb413677 Mon Sep 17 00:00:00 2001
-From: Jan Glauber <jglauber@cavium.com>
-Date: Fri, 11 Nov 2016 09:34:34 +0100
-Subject: [PATCH 2/3] i2c: octeon: thunderx: Remove polling after interrupt
-
-Remove the polling after the interrupt. In case the IFLG
-is not set although the interrupt occured we will run into
-a timeout and retry the operation. This should happen very
-seldom.
-
-Note: the default timeout (1s) can be changed via an ioclt
-per device.
-
-Signed-off-by: Jan Glauber <jglauber@cavium.com>
----
- drivers/i2c/busses/i2c-octeon-core.c | 43 ++----------------------------------
- 1 file changed, 2 insertions(+), 41 deletions(-)
-
-diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c
-index 0b02070..1d8775799 100644
---- a/drivers/i2c/busses/i2c-octeon-core.c
-+++ b/drivers/i2c/busses/i2c-octeon-core.c
-@@ -36,24 +36,6 @@ static bool octeon_i2c_test_iflg(struct octeon_i2c *i2c)
- 	return (octeon_i2c_ctl_read(i2c) & TWSI_CTL_IFLG);
- }
- 
--static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)
--{
--	if (octeon_i2c_test_iflg(i2c))
--		return true;
--
--	if (*first) {
--		*first = false;
--		return false;
--	}
--
--	/*
--	 * IRQ has signaled an event but IFLG hasn't changed.
--	 * Sleep and retry once.
--	 */
--	usleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);
--	return octeon_i2c_test_iflg(i2c);
--}
--
- /**
-  * octeon_i2c_wait - wait for the IFLG to be set
-  * @i2c: The struct octeon_i2c
-@@ -63,7 +45,6 @@ static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)
- static int octeon_i2c_wait(struct octeon_i2c *i2c)
- {
- 	long time_left;
--	bool first = true;
- 
- 	/*
- 	 * Some chip revisions don't assert the irq in the interrupt
-@@ -80,7 +61,7 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)
- 	}
- 
- 	i2c->int_enable(i2c);
--	time_left = wait_event_timeout(i2c->queue, octeon_i2c_test_ready(i2c, &first),
-+	time_left = wait_event_timeout(i2c->queue, octeon_i2c_test_iflg(i2c),
- 				       i2c->adap.timeout);
- 	i2c->int_disable(i2c);
- 
-@@ -102,25 +83,6 @@ static bool octeon_i2c_hlc_test_valid(struct octeon_i2c *i2c)
- 	return (__raw_readq(i2c->twsi_base + SW_TWSI(i2c)) & SW_TWSI_V) == 0;
- }
- 
--static bool octeon_i2c_hlc_test_ready(struct octeon_i2c *i2c, bool *first)
--{
--	/* check if valid bit is cleared */
--	if (octeon_i2c_hlc_test_valid(i2c))
--		return true;
--
--	if (*first) {
--		*first = false;
--		return false;
--	}
--
--	/*
--	 * IRQ has signaled an event but valid bit isn't cleared.
--	 * Sleep and retry once.
--	 */
--	usleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);
--	return octeon_i2c_hlc_test_valid(i2c);
--}
--
- static void octeon_i2c_hlc_int_clear(struct octeon_i2c *i2c)
- {
- 	/* clear ST/TS events, listen for neither */
-@@ -176,7 +138,6 @@ static void octeon_i2c_hlc_disable(struct octeon_i2c *i2c)
-  */
- static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)
- {
--	bool first = true;
- 	int time_left;
- 
- 	/*
-@@ -195,7 +156,7 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)
- 
- 	i2c->hlc_int_enable(i2c);
- 	time_left = wait_event_timeout(i2c->queue,
--				       octeon_i2c_hlc_test_ready(i2c, &first),
-+				       octeon_i2c_hlc_test_valid(i2c),
- 				       i2c->adap.timeout);
- 	i2c->hlc_int_disable(i2c);
- 	if (!time_left)
--- 
-1.9.1
diff --git a/a/4.hdr b/a/4.hdr
deleted file mode 100644
index ddd6fe3..0000000
--- a/a/4.hdr
+++ /dev/null
@@ -1,3 +0,0 @@
-Content-Type: text/x-diff; charset="us-ascii"
-Content-Disposition: attachment;
-	filename="0003-i2c-octeon-thunderx-Debug-prints-for-timeout-and-rec.patch"
diff --git a/a/4.txt b/a/4.txt
deleted file mode 100644
index 968b337..0000000
--- a/a/4.txt
+++ /dev/null
@@ -1,50 +0,0 @@
->From 45eae05b8d793f5652f77ab1d5faa62c30927a10 Mon Sep 17 00:00:00 2001
-From: Jan Glauber <jglauber@cavium.com>
-Date: Fri, 11 Nov 2016 09:40:15 +0100
-Subject: [PATCH 3/3] i2c: octeon: thunderx: Debug prints for timeout and
- recovery
-
-Signed-off-by: Jan Glauber <jglauber@cavium.com>
----
- drivers/i2c/busses/i2c-octeon-core.c | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c
-index 1d8775799..a2a92b6 100644
---- a/drivers/i2c/busses/i2c-octeon-core.c
-+++ b/drivers/i2c/busses/i2c-octeon-core.c
-@@ -72,9 +72,10 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)
- 		return 0;
- 	}
- 
--	if (!time_left)
-+	if (!time_left) {
-+		pr_err("%s: timed out\n", __func__);
- 		return -ETIMEDOUT;
--
-+	}
- 	return 0;
- }
- 
-@@ -169,8 +170,10 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)
- 		return 0;
- 	}
- 
--	if (!time_left)
-+	if (!time_left) {
-+		pr_err("%s: timed out\n", __func__);
- 		return -ETIMEDOUT;
-+	}
- 	return 0;
- }
- 
-@@ -280,6 +283,7 @@ static int octeon_i2c_start(struct octeon_i2c *i2c)
- 
- error:
- 	/* START failed, try to recover */
-+	pr_err("%s: try to recover from status: %d\n", __func__, stat);
- 	ret = octeon_i2c_recovery(i2c);
- 	return (ret) ? ret : -EAGAIN;
- }
--- 
-1.9.1
diff --git a/a/content_digest b/N2/content_digest
index b1857b3..96bdc46 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -38,208 +38,5 @@
  "\01:2\0"
  "fn\00001-i2c-octeon-thunderx-TWSI-software-reset-in-recovery.patch\0"
  "b\0"
- ">From 21a158efd0b6c5a08af8f1c1b078bc4b40291bbf Mon Sep 17 00:00:00 2001\n"
- "From: Jan Glauber <jglauber@cavium.com>\n"
- "Date: Fri, 11 Nov 2016 09:17:19 +0100\n"
- "Subject: [PATCH 1/3] i2c: octeon: thunderx: TWSI software reset in recovery\n"
- "\n"
- "I've seen i2c recovery reporting long loops of:\n"
- "\n"
- "[ 1035.887818] i2c i2c-4: SCL is stuck low, exit recovery\n"
- "[ 1037.999748] i2c i2c-4: SCL is stuck low, exit recovery\n"
- "[ 1040.111694] i2c i2c-4: SCL is stuck low, exit recovery\n"
- "...\n"
- "\n"
- "Add a TWSI software reset which clears the status and\n"
- "STA,STP,IFLG in SW_TWSI_EOP_TWSI_CTL.\n"
- "\n"
- "With this the recovery works fine and above message is not seen.\n"
- "\n"
- "Signed-off-by: Jan Glauber <jglauber@cavium.com>\n"
- "---\n"
- " drivers/i2c/busses/i2c-octeon-core.c | 3 +++\n"
- " 1 file changed, 3 insertions(+)\n"
- "\n"
- "diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "index 419b54b..0b02070 100644\n"
- "--- a/drivers/i2c/busses/i2c-octeon-core.c\n"
- "+++ b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "@@ -791,6 +791,9 @@ static void octeon_i2c_prepare_recovery(struct i2c_adapter *adap)\n"
- " \tstruct octeon_i2c *i2c = i2c_get_adapdata(adap);\n"
- " \n"
- " \tocteon_i2c_hlc_disable(i2c);\n"
- "+\tocteon_i2c_reg_write(i2c, SW_TWSI_EOP_TWSI_RST, 0);\n"
- "+\t/* wait for software reset to settle */\n"
- "+\tudelay(5);\n"
- " \n"
- " \t/*\n"
- " \t * Bring control register to a good state regardless\n"
- "-- \n"
- 1.9.1
- "\01:3\0"
- "fn\00002-i2c-octeon-thunderx-Remove-polling-after-interrupt.patch\0"
- "b\0"
- ">From d904526a298edcf1bfba173b1b71a677eb413677 Mon Sep 17 00:00:00 2001\n"
- "From: Jan Glauber <jglauber@cavium.com>\n"
- "Date: Fri, 11 Nov 2016 09:34:34 +0100\n"
- "Subject: [PATCH 2/3] i2c: octeon: thunderx: Remove polling after interrupt\n"
- "\n"
- "Remove the polling after the interrupt. In case the IFLG\n"
- "is not set although the interrupt occured we will run into\n"
- "a timeout and retry the operation. This should happen very\n"
- "seldom.\n"
- "\n"
- "Note: the default timeout (1s) can be changed via an ioclt\n"
- "per device.\n"
- "\n"
- "Signed-off-by: Jan Glauber <jglauber@cavium.com>\n"
- "---\n"
- " drivers/i2c/busses/i2c-octeon-core.c | 43 ++----------------------------------\n"
- " 1 file changed, 2 insertions(+), 41 deletions(-)\n"
- "\n"
- "diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "index 0b02070..1d8775799 100644\n"
- "--- a/drivers/i2c/busses/i2c-octeon-core.c\n"
- "+++ b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "@@ -36,24 +36,6 @@ static bool octeon_i2c_test_iflg(struct octeon_i2c *i2c)\n"
- " \treturn (octeon_i2c_ctl_read(i2c) & TWSI_CTL_IFLG);\n"
- " }\n"
- " \n"
- "-static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)\n"
- "-{\n"
- "-\tif (octeon_i2c_test_iflg(i2c))\n"
- "-\t\treturn true;\n"
- "-\n"
- "-\tif (*first) {\n"
- "-\t\t*first = false;\n"
- "-\t\treturn false;\n"
- "-\t}\n"
- "-\n"
- "-\t/*\n"
- "-\t * IRQ has signaled an event but IFLG hasn't changed.\n"
- "-\t * Sleep and retry once.\n"
- "-\t */\n"
- "-\tusleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);\n"
- "-\treturn octeon_i2c_test_iflg(i2c);\n"
- "-}\n"
- "-\n"
- " /**\n"
- "  * octeon_i2c_wait - wait for the IFLG to be set\n"
- "  * @i2c: The struct octeon_i2c\n"
- "@@ -63,7 +45,6 @@ static bool octeon_i2c_test_ready(struct octeon_i2c *i2c, bool *first)\n"
- " static int octeon_i2c_wait(struct octeon_i2c *i2c)\n"
- " {\n"
- " \tlong time_left;\n"
- "-\tbool first = true;\n"
- " \n"
- " \t/*\n"
- " \t * Some chip revisions don't assert the irq in the interrupt\n"
- "@@ -80,7 +61,7 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)\n"
- " \t}\n"
- " \n"
- " \ti2c->int_enable(i2c);\n"
- "-\ttime_left = wait_event_timeout(i2c->queue, octeon_i2c_test_ready(i2c, &first),\n"
- "+\ttime_left = wait_event_timeout(i2c->queue, octeon_i2c_test_iflg(i2c),\n"
- " \t\t\t\t       i2c->adap.timeout);\n"
- " \ti2c->int_disable(i2c);\n"
- " \n"
- "@@ -102,25 +83,6 @@ static bool octeon_i2c_hlc_test_valid(struct octeon_i2c *i2c)\n"
- " \treturn (__raw_readq(i2c->twsi_base + SW_TWSI(i2c)) & SW_TWSI_V) == 0;\n"
- " }\n"
- " \n"
- "-static bool octeon_i2c_hlc_test_ready(struct octeon_i2c *i2c, bool *first)\n"
- "-{\n"
- "-\t/* check if valid bit is cleared */\n"
- "-\tif (octeon_i2c_hlc_test_valid(i2c))\n"
- "-\t\treturn true;\n"
- "-\n"
- "-\tif (*first) {\n"
- "-\t\t*first = false;\n"
- "-\t\treturn false;\n"
- "-\t}\n"
- "-\n"
- "-\t/*\n"
- "-\t * IRQ has signaled an event but valid bit isn't cleared.\n"
- "-\t * Sleep and retry once.\n"
- "-\t */\n"
- "-\tusleep_range(I2C_OCTEON_EVENT_WAIT, 2 * I2C_OCTEON_EVENT_WAIT);\n"
- "-\treturn octeon_i2c_hlc_test_valid(i2c);\n"
- "-}\n"
- "-\n"
- " static void octeon_i2c_hlc_int_clear(struct octeon_i2c *i2c)\n"
- " {\n"
- " \t/* clear ST/TS events, listen for neither */\n"
- "@@ -176,7 +138,6 @@ static void octeon_i2c_hlc_disable(struct octeon_i2c *i2c)\n"
- "  */\n"
- " static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)\n"
- " {\n"
- "-\tbool first = true;\n"
- " \tint time_left;\n"
- " \n"
- " \t/*\n"
- "@@ -195,7 +156,7 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)\n"
- " \n"
- " \ti2c->hlc_int_enable(i2c);\n"
- " \ttime_left = wait_event_timeout(i2c->queue,\n"
- "-\t\t\t\t       octeon_i2c_hlc_test_ready(i2c, &first),\n"
- "+\t\t\t\t       octeon_i2c_hlc_test_valid(i2c),\n"
- " \t\t\t\t       i2c->adap.timeout);\n"
- " \ti2c->hlc_int_disable(i2c);\n"
- " \tif (!time_left)\n"
- "-- \n"
- 1.9.1
- "\01:4\0"
- "fn\00003-i2c-octeon-thunderx-Debug-prints-for-timeout-and-rec.patch\0"
- "b\0"
- ">From 45eae05b8d793f5652f77ab1d5faa62c30927a10 Mon Sep 17 00:00:00 2001\n"
- "From: Jan Glauber <jglauber@cavium.com>\n"
- "Date: Fri, 11 Nov 2016 09:40:15 +0100\n"
- "Subject: [PATCH 3/3] i2c: octeon: thunderx: Debug prints for timeout and\n"
- " recovery\n"
- "\n"
- "Signed-off-by: Jan Glauber <jglauber@cavium.com>\n"
- "---\n"
- " drivers/i2c/busses/i2c-octeon-core.c | 10 +++++++---\n"
- " 1 file changed, 7 insertions(+), 3 deletions(-)\n"
- "\n"
- "diff --git a/drivers/i2c/busses/i2c-octeon-core.c b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "index 1d8775799..a2a92b6 100644\n"
- "--- a/drivers/i2c/busses/i2c-octeon-core.c\n"
- "+++ b/drivers/i2c/busses/i2c-octeon-core.c\n"
- "@@ -72,9 +72,10 @@ static int octeon_i2c_wait(struct octeon_i2c *i2c)\n"
- " \t\treturn 0;\n"
- " \t}\n"
- " \n"
- "-\tif (!time_left)\n"
- "+\tif (!time_left) {\n"
- "+\t\tpr_err(\"%s: timed out\\n\", __func__);\n"
- " \t\treturn -ETIMEDOUT;\n"
- "-\n"
- "+\t}\n"
- " \treturn 0;\n"
- " }\n"
- " \n"
- "@@ -169,8 +170,10 @@ static int octeon_i2c_hlc_wait(struct octeon_i2c *i2c)\n"
- " \t\treturn 0;\n"
- " \t}\n"
- " \n"
- "-\tif (!time_left)\n"
- "+\tif (!time_left) {\n"
- "+\t\tpr_err(\"%s: timed out\\n\", __func__);\n"
- " \t\treturn -ETIMEDOUT;\n"
- "+\t}\n"
- " \treturn 0;\n"
- " }\n"
- " \n"
- "@@ -280,6 +283,7 @@ static int octeon_i2c_start(struct octeon_i2c *i2c)\n"
- " \n"
- " error:\n"
- " \t/* START failed, try to recover */\n"
- "+\tpr_err(\"%s: try to recover from status: %d\\n\", __func__, stat);\n"
- " \tret = octeon_i2c_recovery(i2c);\n"
- " \treturn (ret) ? ret : -EAGAIN;\n"
- " }\n"
- "-- \n"
- 1.9.1
 
-4741b4c185cc0fd3310be07e6df9b36b5b7050ffcb2c75cdee35b35793476bf7
+4b182968f7d4a863758c1656ca3424076658e21aa7774c2cb39c14968173eda2

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.