* [PATCH i2c-next v4 0/3] i2c: aspeed: Add bus idle waiting logic for multi-master use cases
@ 2018-10-01 20:27 ` Jae Hyun Yoo
0 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: Brendan Higgins, Wolfram Sang, Benjamin Herrenschmidt,
Joel Stanley, Rob Herring, Mark Rutland, Andrew Jeffery,
linux-i2c, openbmc, devicetree, linux-arm-kernel, linux-aspeed,
linux-kernel
Cc: Jarkko Nikula, James Feist, Vernon Mauery, Jae Hyun Yoo
In multi-master environment, this driver's master cannot know
exactly when peer master sends data to this driver's slave so a
case can be happened that this master tries to send data through
the master_xfer function but slave data from peer master is still
being processed by this driver.
To prevent state corruption in the case, this patch adds checking
code if any slave operation is ongoing and it waits up to the
timeout duration before starting a master_xfer operation.
Please review this patch set.
Thanks,
-Jae
Changes since v3:
- Changed the property name to 'timeout' and made it use the
default setting in i2c-core when not specified.
Changes since v2:
- Changed the property name to 'aspeed,timeout' and made it to
update the adapter's timeout configuration.
Changes since v1:
- Changed define names of timeout related.
Jae Hyun Yoo (3):
dt-bindings: i2c: aspeed: Add 'timeout' property as an optional
property
i2c: aspeed: Add 'timeout' DT property reading code
i2c: aspeed: Add bus idle waiting logic for multi-master use cases
.../devicetree/bindings/i2c/i2c-aspeed.txt | 3 +
drivers/i2c/busses/i2c-aspeed.c | 70 ++++++++++++++-----
2 files changed, 57 insertions(+), 16 deletions(-)
--
2.19.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 0/3] i2c: aspeed: Add bus idle waiting logic for multi-master use cases
@ 2018-10-01 20:27 ` Jae Hyun Yoo
0 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: linux-arm-kernel
In multi-master environment, this driver's master cannot know
exactly when peer master sends data to this driver's slave so a
case can be happened that this master tries to send data through
the master_xfer function but slave data from peer master is still
being processed by this driver.
To prevent state corruption in the case, this patch adds checking
code if any slave operation is ongoing and it waits up to the
timeout duration before starting a master_xfer operation.
Please review this patch set.
Thanks,
-Jae
Changes since v3:
- Changed the property name to 'timeout' and made it use the
default setting in i2c-core when not specified.
Changes since v2:
- Changed the property name to 'aspeed,timeout' and made it to
update the adapter's timeout configuration.
Changes since v1:
- Changed define names of timeout related.
Jae Hyun Yoo (3):
dt-bindings: i2c: aspeed: Add 'timeout' property as an optional
property
i2c: aspeed: Add 'timeout' DT property reading code
i2c: aspeed: Add bus idle waiting logic for multi-master use cases
.../devicetree/bindings/i2c/i2c-aspeed.txt | 3 +
drivers/i2c/busses/i2c-aspeed.c | 70 ++++++++++++++-----
2 files changed, 57 insertions(+), 16 deletions(-)
--
2.19.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 1/3] dt-bindings: i2c: aspeed: Add 'timeout' property as an optional property
2018-10-01 20:27 ` Jae Hyun Yoo
@ 2018-10-01 20:27 ` Jae Hyun Yoo
-1 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: Brendan Higgins, Wolfram Sang, Benjamin Herrenschmidt,
Joel Stanley, Rob Herring, Mark Rutland, Andrew Jeffery,
linux-i2c, openbmc, devicetree, linux-arm-kernel, linux-aspeed,
linux-kernel
Cc: Jarkko Nikula, James Feist, Vernon Mauery, Jae Hyun Yoo
This commit adds 'timeout' property as an optional property which
can be used for setting 'timeout' value of 'struct i2c_adapter'.
With this patch, the bus timeout value can be set through this
DT property from the probing time of the module. Still the bus
timeout value can be set by an I2C_TIMEOUT ioctl on cdev at
runtime too.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
---
Documentation/devicetree/bindings/i2c/i2c-aspeed.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt b/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt
index 8fbd8633a387..1789502818c2 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt
@@ -17,6 +17,9 @@ Optional Properties:
specified
- multi-master : states that there is another master active on this bus.
+- timeout : I2C bus timeout in milliseconds defaults to 1 second when not
+ specified.
+
Example:
i2c {
--
2.19.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 1/3] dt-bindings: i2c: aspeed: Add 'timeout' property as an optional property
@ 2018-10-01 20:27 ` Jae Hyun Yoo
0 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: linux-arm-kernel
This commit adds 'timeout' property as an optional property which
can be used for setting 'timeout' value of 'struct i2c_adapter'.
With this patch, the bus timeout value can be set through this
DT property from the probing time of the module. Still the bus
timeout value can be set by an I2C_TIMEOUT ioctl on cdev at
runtime too.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
---
Documentation/devicetree/bindings/i2c/i2c-aspeed.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt b/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt
index 8fbd8633a387..1789502818c2 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-aspeed.txt
@@ -17,6 +17,9 @@ Optional Properties:
specified
- multi-master : states that there is another master active on this bus.
+- timeout : I2C bus timeout in milliseconds defaults to 1 second when not
+ specified.
+
Example:
i2c {
--
2.19.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code
2018-10-01 20:27 ` Jae Hyun Yoo
@ 2018-10-01 20:27 ` Jae Hyun Yoo
-1 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: Brendan Higgins, Wolfram Sang, Benjamin Herrenschmidt,
Joel Stanley, Rob Herring, Mark Rutland, Andrew Jeffery,
linux-i2c, openbmc, devicetree, linux-arm-kernel, linux-aspeed,
linux-kernel
Cc: Jarkko Nikula, James Feist, Vernon Mauery, Jae Hyun Yoo
This commit adds reading code of the 'timeout' DT property to set
bus timeout value in adapter configuration. This value still
can be configured through an I2C_TIMEOUT ioctl on cdev too.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
---
drivers/i2c/busses/i2c-aspeed.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
index 8dc9161ced38..6d31f54a6653 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -885,6 +885,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
struct clk *parent_clk;
struct resource *res;
int irq, ret;
+ u32 timeout_ms;
bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
if (!bus)
@@ -918,6 +919,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
bus->bus_frequency = 100000;
}
+ ret = of_property_read_u32(pdev->dev.of_node, "timeout",
+ &timeout_ms);
+ if (ret)
+ timeout_ms = 0; /* then adap.timeout will be set by i2c-core */
+
match = of_match_node(aspeed_i2c_bus_of_table, pdev->dev.of_node);
if (!match)
bus->get_clk_reg_val = aspeed_i2c_24xx_get_clk_reg_val;
@@ -930,7 +936,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
init_completion(&bus->cmd_complete);
bus->adap.owner = THIS_MODULE;
bus->adap.retries = 0;
- bus->adap.timeout = 5 * HZ;
+ bus->adap.timeout = timeout_ms ? msecs_to_jiffies(timeout_ms) : 0;
bus->adap.algo = &aspeed_i2c_algo;
bus->adap.dev.parent = &pdev->dev;
bus->adap.dev.of_node = pdev->dev.of_node;
--
2.19.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code
@ 2018-10-01 20:27 ` Jae Hyun Yoo
0 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: linux-arm-kernel
This commit adds reading code of the 'timeout' DT property to set
bus timeout value in adapter configuration. This value still
can be configured through an I2C_TIMEOUT ioctl on cdev too.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
---
drivers/i2c/busses/i2c-aspeed.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
index 8dc9161ced38..6d31f54a6653 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -885,6 +885,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
struct clk *parent_clk;
struct resource *res;
int irq, ret;
+ u32 timeout_ms;
bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
if (!bus)
@@ -918,6 +919,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
bus->bus_frequency = 100000;
}
+ ret = of_property_read_u32(pdev->dev.of_node, "timeout",
+ &timeout_ms);
+ if (ret)
+ timeout_ms = 0; /* then adap.timeout will be set by i2c-core */
+
match = of_match_node(aspeed_i2c_bus_of_table, pdev->dev.of_node);
if (!match)
bus->get_clk_reg_val = aspeed_i2c_24xx_get_clk_reg_val;
@@ -930,7 +936,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
init_completion(&bus->cmd_complete);
bus->adap.owner = THIS_MODULE;
bus->adap.retries = 0;
- bus->adap.timeout = 5 * HZ;
+ bus->adap.timeout = timeout_ms ? msecs_to_jiffies(timeout_ms) : 0;
bus->adap.algo = &aspeed_i2c_algo;
bus->adap.dev.parent = &pdev->dev;
bus->adap.dev.of_node = pdev->dev.of_node;
--
2.19.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 3/3] i2c: aspeed: Add bus idle waiting logic for multi-master use cases
2018-10-01 20:27 ` Jae Hyun Yoo
@ 2018-10-01 20:27 ` Jae Hyun Yoo
-1 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: Brendan Higgins, Wolfram Sang, Benjamin Herrenschmidt,
Joel Stanley, Rob Herring, Mark Rutland, Andrew Jeffery,
linux-i2c, openbmc, devicetree, linux-arm-kernel, linux-aspeed,
linux-kernel
Cc: Jarkko Nikula, James Feist, Vernon Mauery, Jae Hyun Yoo
In multi-master environment, this driver's master cannot know
exactly when peer master sends data to this driver's slave so a
case can be happened that this master tries to send data through
the master_xfer function but slave data from peer master is still
being processed by this driver.
To prevent state corruption in the case, this patch adds checking
code if any slave operation is ongoing and it waits up to the
timeout duration before starting a master_xfer operation. Since
the BUSY bit in the I2CD14 register doesn't cover the whole slave
sequence, it uses 'Transfer Mode State Machine' bit fields to
make up the problem of the BUSY bit.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
---
drivers/i2c/busses/i2c-aspeed.c | 62 +++++++++++++++++++++++++--------
1 file changed, 47 insertions(+), 15 deletions(-)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
index 6d31f54a6653..edb1944c867b 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -12,6 +12,7 @@
#include <linux/clk.h>
#include <linux/completion.h>
+#include <linux/delay.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/i2c.h>
@@ -99,6 +100,7 @@
ASPEED_I2CD_INTR_TX_ACK)
/* 0x14 : I2CD Command/Status Register */
+#define ASPEED_I2CD_XFER_MODE_STS_MASK GENMASK(22, 19)
#define ASPEED_I2CD_SCL_LINE_STS BIT(18)
#define ASPEED_I2CD_SDA_LINE_STS BIT(17)
#define ASPEED_I2CD_BUS_BUSY_STS BIT(16)
@@ -115,6 +117,9 @@
/* 0x18 : I2CD Slave Device Address Register */
#define ASPEED_I2CD_DEV_ADDR_MASK GENMASK(6, 0)
+/* Busy checking */
+#define ASPEED_I2C_BUS_BUSY_CHECK_INTERVAL_US (10 * 1000)
+
enum aspeed_i2c_master_state {
ASPEED_I2C_MASTER_INACTIVE,
ASPEED_I2C_MASTER_START,
@@ -156,6 +161,8 @@ struct aspeed_i2c_bus {
int cmd_err;
/* Protected only by i2c_lock_bus */
int master_xfer_result;
+ /* Multi-master */
+ bool multi_master;
#if IS_ENABLED(CONFIG_I2C_SLAVE)
struct i2c_client *slave;
enum aspeed_i2c_slave_state slave_state;
@@ -596,27 +603,50 @@ static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id)
return irq_remaining ? IRQ_NONE : IRQ_HANDLED;
}
+static int aspeed_i2c_check_bus_busy(struct aspeed_i2c_bus *bus)
+{
+ u32 status_check_mask = ASPEED_I2CD_BUS_BUSY_STS;
+ ktime_t timeout;
+
+ if (bus->multi_master) {
+ might_sleep();
+ timeout = ktime_add_ms(ktime_get(),
+ jiffies_to_msecs(bus->adap.timeout));
+ /*
+ * ASPEED_I2CD_XFER_MODE_STS_MASK is marked as
+ * 'for debugging purpose only' in datasheet but ASPEED
+ * confirmed that this reflects real information and good to be
+ * used in practical code. It will be used only in multi-master
+ * use cases.
+ */
+ status_check_mask |= ASPEED_I2CD_XFER_MODE_STS_MASK;
+ }
+
+ for (;;) {
+ if (!(readl(bus->base + ASPEED_I2C_CMD_REG) &
+ status_check_mask))
+ return 0;
+ if (!bus->multi_master)
+ break;
+ if (ktime_compare(ktime_get(), timeout) > 0)
+ break;
+ usleep_range((ASPEED_I2C_BUS_BUSY_CHECK_INTERVAL_US >> 2) + 1,
+ ASPEED_I2C_BUS_BUSY_CHECK_INTERVAL_US);
+ }
+
+ return aspeed_i2c_recover_bus(bus);
+}
+
static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
struct i2c_msg *msgs, int num)
{
struct aspeed_i2c_bus *bus = i2c_get_adapdata(adap);
unsigned long time_left, flags;
- int ret = 0;
- spin_lock_irqsave(&bus->lock, flags);
- bus->cmd_err = 0;
-
- /* If bus is busy, attempt recovery. We assume a single master
- * environment.
- */
- if (readl(bus->base + ASPEED_I2C_CMD_REG) & ASPEED_I2CD_BUS_BUSY_STS) {
- spin_unlock_irqrestore(&bus->lock, flags);
- ret = aspeed_i2c_recover_bus(bus);
- if (ret)
- return ret;
- spin_lock_irqsave(&bus->lock, flags);
- }
+ if (aspeed_i2c_check_bus_busy(bus))
+ return -EAGAIN;
+ spin_lock_irqsave(&bus->lock, flags);
bus->cmd_err = 0;
bus->msgs = msgs;
bus->msgs_index = 0;
@@ -827,7 +857,9 @@ static int aspeed_i2c_init(struct aspeed_i2c_bus *bus,
if (ret < 0)
return ret;
- if (!of_property_read_bool(pdev->dev.of_node, "multi-master"))
+ if (of_property_read_bool(pdev->dev.of_node, "multi-master"))
+ bus->multi_master = true;
+ else
fun_ctrl_reg |= ASPEED_I2CD_MULTI_MASTER_DIS;
/* Enable Master Mode */
--
2.19.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 3/3] i2c: aspeed: Add bus idle waiting logic for multi-master use cases
@ 2018-10-01 20:27 ` Jae Hyun Yoo
0 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-01 20:27 UTC (permalink / raw)
To: linux-arm-kernel
In multi-master environment, this driver's master cannot know
exactly when peer master sends data to this driver's slave so a
case can be happened that this master tries to send data through
the master_xfer function but slave data from peer master is still
being processed by this driver.
To prevent state corruption in the case, this patch adds checking
code if any slave operation is ongoing and it waits up to the
timeout duration before starting a master_xfer operation. Since
the BUSY bit in the I2CD14 register doesn't cover the whole slave
sequence, it uses 'Transfer Mode State Machine' bit fields to
make up the problem of the BUSY bit.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
---
drivers/i2c/busses/i2c-aspeed.c | 62 +++++++++++++++++++++++++--------
1 file changed, 47 insertions(+), 15 deletions(-)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
index 6d31f54a6653..edb1944c867b 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -12,6 +12,7 @@
#include <linux/clk.h>
#include <linux/completion.h>
+#include <linux/delay.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/i2c.h>
@@ -99,6 +100,7 @@
ASPEED_I2CD_INTR_TX_ACK)
/* 0x14 : I2CD Command/Status Register */
+#define ASPEED_I2CD_XFER_MODE_STS_MASK GENMASK(22, 19)
#define ASPEED_I2CD_SCL_LINE_STS BIT(18)
#define ASPEED_I2CD_SDA_LINE_STS BIT(17)
#define ASPEED_I2CD_BUS_BUSY_STS BIT(16)
@@ -115,6 +117,9 @@
/* 0x18 : I2CD Slave Device Address Register */
#define ASPEED_I2CD_DEV_ADDR_MASK GENMASK(6, 0)
+/* Busy checking */
+#define ASPEED_I2C_BUS_BUSY_CHECK_INTERVAL_US (10 * 1000)
+
enum aspeed_i2c_master_state {
ASPEED_I2C_MASTER_INACTIVE,
ASPEED_I2C_MASTER_START,
@@ -156,6 +161,8 @@ struct aspeed_i2c_bus {
int cmd_err;
/* Protected only by i2c_lock_bus */
int master_xfer_result;
+ /* Multi-master */
+ bool multi_master;
#if IS_ENABLED(CONFIG_I2C_SLAVE)
struct i2c_client *slave;
enum aspeed_i2c_slave_state slave_state;
@@ -596,27 +603,50 @@ static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id)
return irq_remaining ? IRQ_NONE : IRQ_HANDLED;
}
+static int aspeed_i2c_check_bus_busy(struct aspeed_i2c_bus *bus)
+{
+ u32 status_check_mask = ASPEED_I2CD_BUS_BUSY_STS;
+ ktime_t timeout;
+
+ if (bus->multi_master) {
+ might_sleep();
+ timeout = ktime_add_ms(ktime_get(),
+ jiffies_to_msecs(bus->adap.timeout));
+ /*
+ * ASPEED_I2CD_XFER_MODE_STS_MASK is marked as
+ * 'for debugging purpose only' in datasheet but ASPEED
+ * confirmed that this reflects real information and good to be
+ * used in practical code. It will be used only in multi-master
+ * use cases.
+ */
+ status_check_mask |= ASPEED_I2CD_XFER_MODE_STS_MASK;
+ }
+
+ for (;;) {
+ if (!(readl(bus->base + ASPEED_I2C_CMD_REG) &
+ status_check_mask))
+ return 0;
+ if (!bus->multi_master)
+ break;
+ if (ktime_compare(ktime_get(), timeout) > 0)
+ break;
+ usleep_range((ASPEED_I2C_BUS_BUSY_CHECK_INTERVAL_US >> 2) + 1,
+ ASPEED_I2C_BUS_BUSY_CHECK_INTERVAL_US);
+ }
+
+ return aspeed_i2c_recover_bus(bus);
+}
+
static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
struct i2c_msg *msgs, int num)
{
struct aspeed_i2c_bus *bus = i2c_get_adapdata(adap);
unsigned long time_left, flags;
- int ret = 0;
- spin_lock_irqsave(&bus->lock, flags);
- bus->cmd_err = 0;
-
- /* If bus is busy, attempt recovery. We assume a single master
- * environment.
- */
- if (readl(bus->base + ASPEED_I2C_CMD_REG) & ASPEED_I2CD_BUS_BUSY_STS) {
- spin_unlock_irqrestore(&bus->lock, flags);
- ret = aspeed_i2c_recover_bus(bus);
- if (ret)
- return ret;
- spin_lock_irqsave(&bus->lock, flags);
- }
+ if (aspeed_i2c_check_bus_busy(bus))
+ return -EAGAIN;
+ spin_lock_irqsave(&bus->lock, flags);
bus->cmd_err = 0;
bus->msgs = msgs;
bus->msgs_index = 0;
@@ -827,7 +857,9 @@ static int aspeed_i2c_init(struct aspeed_i2c_bus *bus,
if (ret < 0)
return ret;
- if (!of_property_read_bool(pdev->dev.of_node, "multi-master"))
+ if (of_property_read_bool(pdev->dev.of_node, "multi-master"))
+ bus->multi_master = true;
+ else
fun_ctrl_reg |= ASPEED_I2CD_MULTI_MASTER_DIS;
/* Enable Master Mode */
--
2.19.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code
2018-10-01 20:27 ` Jae Hyun Yoo
(?)
@ 2018-10-03 7:49 ` Joel Stanley
-1 siblings, 0 replies; 13+ messages in thread
From: Joel Stanley @ 2018-10-03 7:49 UTC (permalink / raw)
To: Jae Hyun Yoo
Cc: Brendan Higgins, Wolfram Sang, Benjamin Herrenschmidt,
Rob Herring, Mark Rutland, Andrew Jeffery, linux-i2c,
OpenBMC Maillist, devicetree, Linux ARM, linux-aspeed,
Linux Kernel Mailing List, jarkko.nikula, James Feist,
Vernon Mauery
Hello Jae,
On Mon, 1 Oct 2018 at 22:28, Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com> wrote:
>
> This commit adds reading code of the 'timeout' DT property to set
> bus timeout value in adapter configuration. This value still
> can be configured through an I2C_TIMEOUT ioctl on cdev too.
>
> Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
> ---
> drivers/i2c/busses/i2c-aspeed.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
> index 8dc9161ced38..6d31f54a6653 100644
> --- a/drivers/i2c/busses/i2c-aspeed.c
> +++ b/drivers/i2c/busses/i2c-aspeed.c
> @@ -885,6 +885,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
> struct clk *parent_clk;
> struct resource *res;
> int irq, ret;
> + u32 timeout_ms;
>
> bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
> if (!bus)
> @@ -918,6 +919,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
> bus->bus_frequency = 100000;
> }
>
> + ret = of_property_read_u32(pdev->dev.of_node, "timeout",
> + &timeout_ms);
> + if (ret)
> + timeout_ms = 0; /* then adap.timeout will be set by i2c-core */
Is it possible to implement the parsing of this property in the i2c
core instead?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code
@ 2018-10-03 7:49 ` Joel Stanley
0 siblings, 0 replies; 13+ messages in thread
From: Joel Stanley @ 2018-10-03 7:49 UTC (permalink / raw)
To: Jae Hyun Yoo
Cc: Brendan Higgins, Wolfram Sang, Benjamin Herrenschmidt,
Rob Herring, Mark Rutland, Andrew Jeffery, linux-i2c,
OpenBMC Maillist, devicetree, Linux ARM, linux-aspeed,
Linux Kernel Mailing List, jarkko.nikula, James Feist,
Vernon Mauery
Hello Jae,
On Mon, 1 Oct 2018 at 22:28, Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com> wrote:
>
> This commit adds reading code of the 'timeout' DT property to set
> bus timeout value in adapter configuration. This value still
> can be configured through an I2C_TIMEOUT ioctl on cdev too.
>
> Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
> ---
> drivers/i2c/busses/i2c-aspeed.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
> index 8dc9161ced38..6d31f54a6653 100644
> --- a/drivers/i2c/busses/i2c-aspeed.c
> +++ b/drivers/i2c/busses/i2c-aspeed.c
> @@ -885,6 +885,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
> struct clk *parent_clk;
> struct resource *res;
> int irq, ret;
> + u32 timeout_ms;
>
> bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
> if (!bus)
> @@ -918,6 +919,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
> bus->bus_frequency = 100000;
> }
>
> + ret = of_property_read_u32(pdev->dev.of_node, "timeout",
> + &timeout_ms);
> + if (ret)
> + timeout_ms = 0; /* then adap.timeout will be set by i2c-core */
Is it possible to implement the parsing of this property in the i2c
core instead?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code
@ 2018-10-03 7:49 ` Joel Stanley
0 siblings, 0 replies; 13+ messages in thread
From: Joel Stanley @ 2018-10-03 7:49 UTC (permalink / raw)
To: linux-arm-kernel
Hello Jae,
On Mon, 1 Oct 2018 at 22:28, Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com> wrote:
>
> This commit adds reading code of the 'timeout' DT property to set
> bus timeout value in adapter configuration. This value still
> can be configured through an I2C_TIMEOUT ioctl on cdev too.
>
> Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
> ---
> drivers/i2c/busses/i2c-aspeed.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
> index 8dc9161ced38..6d31f54a6653 100644
> --- a/drivers/i2c/busses/i2c-aspeed.c
> +++ b/drivers/i2c/busses/i2c-aspeed.c
> @@ -885,6 +885,7 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
> struct clk *parent_clk;
> struct resource *res;
> int irq, ret;
> + u32 timeout_ms;
>
> bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
> if (!bus)
> @@ -918,6 +919,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
> bus->bus_frequency = 100000;
> }
>
> + ret = of_property_read_u32(pdev->dev.of_node, "timeout",
> + &timeout_ms);
> + if (ret)
> + timeout_ms = 0; /* then adap.timeout will be set by i2c-core */
Is it possible to implement the parsing of this property in the i2c
core instead?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code
2018-10-03 7:49 ` Joel Stanley
@ 2018-10-03 17:10 ` Jae Hyun Yoo
-1 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-03 17:10 UTC (permalink / raw)
To: Joel Stanley
Cc: Brendan Higgins, Wolfram Sang, Benjamin Herrenschmidt,
Rob Herring, Mark Rutland, Andrew Jeffery, linux-i2c,
OpenBMC Maillist, devicetree, Linux ARM, linux-aspeed,
Linux Kernel Mailing List, jarkko.nikula, James Feist,
Vernon Mauery
Hi Joel,
On 10/3/2018 12:49 AM, Joel Stanley wrote:
> Hello Jae,
>
> On Mon, 1 Oct 2018 at 22:28, Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com> wrote:
>> @@ -918,6 +919,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
>> bus->bus_frequency = 100000;
>> }
>>
>> + ret = of_property_read_u32(pdev->dev.of_node, "timeout",
>> + &timeout_ms);
>> + if (ret)
>> + timeout_ms = 0; /* then adap.timeout will be set by i2c-core */
>
> Is it possible to implement the parsing of this property in the i2c
> core instead?
>
Yes, that's possible but I'm not sure that could be acceptable or not.
Let me try.
Thanks,
Jae
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code
@ 2018-10-03 17:10 ` Jae Hyun Yoo
0 siblings, 0 replies; 13+ messages in thread
From: Jae Hyun Yoo @ 2018-10-03 17:10 UTC (permalink / raw)
To: linux-arm-kernel
Hi Joel,
On 10/3/2018 12:49 AM, Joel Stanley wrote:
> Hello Jae,
>
> On Mon, 1 Oct 2018 at 22:28, Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com> wrote:
>> @@ -918,6 +919,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
>> bus->bus_frequency = 100000;
>> }
>>
>> + ret = of_property_read_u32(pdev->dev.of_node, "timeout",
>> + &timeout_ms);
>> + if (ret)
>> + timeout_ms = 0; /* then adap.timeout will be set by i2c-core */
>
> Is it possible to implement the parsing of this property in the i2c
> core instead?
>
Yes, that's possible but I'm not sure that could be acceptable or not.
Let me try.
Thanks,
Jae
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2018-10-03 17:11 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-01 20:27 [PATCH i2c-next v4 0/3] i2c: aspeed: Add bus idle waiting logic for multi-master use cases Jae Hyun Yoo
2018-10-01 20:27 ` Jae Hyun Yoo
2018-10-01 20:27 ` [PATCH i2c-next v4 1/3] dt-bindings: i2c: aspeed: Add 'timeout' property as an optional property Jae Hyun Yoo
2018-10-01 20:27 ` Jae Hyun Yoo
2018-10-01 20:27 ` [PATCH i2c-next v4 2/3] i2c: aspeed: Add 'timeout' DT property reading code Jae Hyun Yoo
2018-10-01 20:27 ` Jae Hyun Yoo
2018-10-03 7:49 ` Joel Stanley
2018-10-03 7:49 ` Joel Stanley
2018-10-03 7:49 ` Joel Stanley
2018-10-03 17:10 ` Jae Hyun Yoo
2018-10-03 17:10 ` Jae Hyun Yoo
2018-10-01 20:27 ` [PATCH i2c-next v4 3/3] i2c: aspeed: Add bus idle waiting logic for multi-master use cases Jae Hyun Yoo
2018-10-01 20:27 ` Jae Hyun Yoo
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.