* [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes
@ 2023-10-23 16:16 Frank Li
2023-10-23 16:16 ` [PATCH v4 1/6] i3c: master: svc: fix race condition in ibi work thread Frank Li
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Frank Li @ 2023-10-23 16:16 UTC (permalink / raw)
To: miquel.raynal
Cc: Frank.li, alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
Each patch is indepedents. See commit message for detail.
Change from v1 to v4.
See each patch notes
If there are not notes between v2 to v4, that's means not change.
Frank Li (6):
i3c: master: svc: fix race condition in ibi work thread
i3c: master: svc: fix wrong data return when IBI happen during start
frame
i3c: master: svc: fix ibi may not return mandatory data byte
i3c: master: svc: fix check wrong status register in irq handler
i3c: master: svc: fix SDA keep low when polling IBIWON timeout happen
i3c: master: svc: fix random hot join failure since timeout error
drivers/i3c/master/svc-i3c-master.c | 54 ++++++++++++++++++++++++++++-
1 file changed, 53 insertions(+), 1 deletion(-)
--
2.34.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v4 1/6] i3c: master: svc: fix race condition in ibi work thread
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
@ 2023-10-23 16:16 ` Frank Li
2023-10-23 16:16 ` [PATCH v4 2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame Frank Li
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Frank Li @ 2023-10-23 16:16 UTC (permalink / raw)
To: miquel.raynal
Cc: Frank.li, alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
The ibi work thread operates asynchronously with other transfers, such as
svc_i3c_master_priv_xfers(). Introduce mutex protection to ensure the
completion of the entire i3c/i2c transaction.
Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
Cc: stable@vger.kernel.org
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Notes:
Change from v1 to v2
- update commit message
- Add Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/i3c/master/svc-i3c-master.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
index d29de5fe533e6..8cd708c965085 100644
--- a/drivers/i3c/master/svc-i3c-master.c
+++ b/drivers/i3c/master/svc-i3c-master.c
@@ -174,6 +174,7 @@ struct svc_i3c_regs_save {
* @ibi.slots: Available IBI slots
* @ibi.tbq_slot: To be queued IBI slot
* @ibi.lock: IBI lock
+ * @lock: Transfer lock, protect between IBI work thread and callbacks from master
*/
struct svc_i3c_master {
struct i3c_master_controller base;
@@ -202,6 +203,7 @@ struct svc_i3c_master {
/* Prevent races within IBI handlers */
spinlock_t lock;
} ibi;
+ struct mutex lock;
};
/**
@@ -383,6 +385,7 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)
u32 status, val;
int ret;
+ mutex_lock(&master->lock);
/* Acknowledge the incoming interrupt with the AUTOIBI mechanism */
writel(SVC_I3C_MCTRL_REQUEST_AUTO_IBI |
SVC_I3C_MCTRL_IBIRESP_AUTO,
@@ -459,6 +462,7 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)
reenable_ibis:
svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART);
+ mutex_unlock(&master->lock);
}
static irqreturn_t svc_i3c_master_irq_handler(int irq, void *dev_id)
@@ -1203,9 +1207,11 @@ static int svc_i3c_master_send_bdcast_ccc_cmd(struct svc_i3c_master *master,
cmd->read_len = 0;
cmd->continued = false;
+ mutex_lock(&master->lock);
svc_i3c_master_enqueue_xfer(master, xfer);
if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
svc_i3c_master_dequeue_xfer(master, xfer);
+ mutex_unlock(&master->lock);
ret = xfer->ret;
kfree(buf);
@@ -1249,9 +1255,11 @@ static int svc_i3c_master_send_direct_ccc_cmd(struct svc_i3c_master *master,
cmd->read_len = read_len;
cmd->continued = false;
+ mutex_lock(&master->lock);
svc_i3c_master_enqueue_xfer(master, xfer);
if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
svc_i3c_master_dequeue_xfer(master, xfer);
+ mutex_unlock(&master->lock);
if (cmd->read_len != xfer_len)
ccc->dests[0].payload.len = cmd->read_len;
@@ -1308,9 +1316,11 @@ static int svc_i3c_master_priv_xfers(struct i3c_dev_desc *dev,
cmd->continued = (i + 1) < nxfers;
}
+ mutex_lock(&master->lock);
svc_i3c_master_enqueue_xfer(master, xfer);
if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
svc_i3c_master_dequeue_xfer(master, xfer);
+ mutex_unlock(&master->lock);
ret = xfer->ret;
svc_i3c_master_free_xfer(xfer);
@@ -1346,9 +1356,11 @@ static int svc_i3c_master_i2c_xfers(struct i2c_dev_desc *dev,
cmd->continued = (i + 1 < nxfers);
}
+ mutex_lock(&master->lock);
svc_i3c_master_enqueue_xfer(master, xfer);
if (!wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000)))
svc_i3c_master_dequeue_xfer(master, xfer);
+ mutex_unlock(&master->lock);
ret = xfer->ret;
svc_i3c_master_free_xfer(xfer);
@@ -1539,6 +1551,8 @@ static int svc_i3c_master_probe(struct platform_device *pdev)
INIT_WORK(&master->hj_work, svc_i3c_master_hj_work);
INIT_WORK(&master->ibi_work, svc_i3c_master_ibi_work);
+ mutex_init(&master->lock);
+
ret = devm_request_irq(dev, master->irq, svc_i3c_master_irq_handler,
IRQF_NO_SUSPEND, "svc-i3c-irq", master);
if (ret)
--
2.34.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
2023-10-23 16:16 ` [PATCH v4 1/6] i3c: master: svc: fix race condition in ibi work thread Frank Li
@ 2023-10-23 16:16 ` Frank Li
2023-10-23 16:16 ` [PATCH v4 3/6] i3c: master: svc: fix ibi may not return mandatory data byte Frank Li
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Frank Li @ 2023-10-23 16:16 UTC (permalink / raw)
To: miquel.raynal
Cc: Frank.li, alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
┌─────┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┌─────
SCL: ┘ └─────┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┘
───┐ ┌─────┐ ┌─────┐ ┌───────────┐
SDA: └───────────────────────┘ └─────┘ └─────┘ └─────
xxx╱ ╲╱ ╲╱ ╲╱ ╲╱ ╲
: xxx╲IBI ╱╲ Addr(0x0a) ╱╲ RW ╱╲NACK╱╲ S ╱
If an In-Band Interrupt (IBI) occurs and IBI work thread is not immediately
scheduled, when svc_i3c_master_priv_xfers() initiates the I3C transfer and
attempts to send address 0x7e, the target interprets it as an
IBI handler and returns the target address 0x0a.
However, svc_i3c_master_priv_xfers() does not handle this case and proceeds
with other transfers, resulting in incorrect data being returned.
Add IBIWON check in svc_i3c_master_xfer(). In case this situation occurs,
return a failure to the driver.
Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
Cc: stable@vger.kernel.org
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Notes:
Change from v3 to v4
- When -> when
Change from v1 to v2
- update commit message
- fix typo yeild and falure
Change from v1 to v2
- update commit message
- fix typo yeild and falure
drivers/i3c/master/svc-i3c-master.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
index 8cd708c965085..abebef666b2bb 100644
--- a/drivers/i3c/master/svc-i3c-master.c
+++ b/drivers/i3c/master/svc-i3c-master.c
@@ -1010,6 +1010,9 @@ static int svc_i3c_master_xfer(struct svc_i3c_master *master,
u32 reg;
int ret;
+ /* clean SVC_I3C_MINT_IBIWON w1c bits */
+ writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS);
+
writel(SVC_I3C_MCTRL_REQUEST_START_ADDR |
xfer_type |
SVC_I3C_MCTRL_IBIRESP_NACK |
@@ -1028,6 +1031,23 @@ static int svc_i3c_master_xfer(struct svc_i3c_master *master,
goto emit_stop;
}
+ /*
+ * According to I3C spec ver 1.1.1, 5.1.2.2.3 Consequence of Controller Starting a Frame
+ * with I3C Target Address.
+ *
+ * The I3C Controller normally should start a Frame, the Address may be arbitrated, and so
+ * the Controller shall monitor to see whether an In-Band Interrupt request, a Controller
+ * Role Request (i.e., Secondary Controller requests to become the Active Controller), or
+ * a Hot-Join Request has been made.
+ *
+ * If missed IBIWON check, the wrong data will be return. When IBIWON happen, return failure
+ * and yield the above events handler.
+ */
+ if (SVC_I3C_MSTATUS_IBIWON(reg)) {
+ ret = -ENXIO;
+ goto emit_stop;
+ }
+
if (rnw)
ret = svc_i3c_master_read(master, in, xfer_len);
else
--
2.34.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 3/6] i3c: master: svc: fix ibi may not return mandatory data byte
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
2023-10-23 16:16 ` [PATCH v4 1/6] i3c: master: svc: fix race condition in ibi work thread Frank Li
2023-10-23 16:16 ` [PATCH v4 2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame Frank Li
@ 2023-10-23 16:16 ` Frank Li
2023-10-23 16:16 ` [PATCH v4 4/6] i3c: master: svc: fix check wrong status register in irq handler Frank Li
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Frank Li @ 2023-10-23 16:16 UTC (permalink / raw)
To: miquel.raynal
Cc: Frank.li, alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
MSTATUS[RXPEND] is only updated after the data transfer cycle started. This
creates an issue when the I3C clock is slow, and the CPU is running fast
enough that MSTATUS[RXPEND] may not be updated when the code reaches
checking point. As a result, mandatory data can be missed.
Add a wait for MSTATUS[COMPLETE] to ensure that all mandatory data is
already in FIFO. It also works without mandatory data.
Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
Cc: stable@vger.kernel.org
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Notes:
Change from v3 to v4
- add review tag Miquel
Change from v2 to v3
- update commit message and add no mandatory data in commits message
Change from v1 to v2
- update commit message
it also works without mandatory bytes
Change from v1 to v2
- update commit message
it also works without mandatory bytes
Change from v2 to v3
- update commit message and add no mandatory data in commits message
Change from v1 to v2
- update commit message
it also works without mandatory bytes
Change from v1 to v2
- update commit message
it also works without mandatory bytes
drivers/i3c/master/svc-i3c-master.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
index abebef666b2bb..dd06b7c9333f1 100644
--- a/drivers/i3c/master/svc-i3c-master.c
+++ b/drivers/i3c/master/svc-i3c-master.c
@@ -332,6 +332,7 @@ static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master,
struct i3c_ibi_slot *slot;
unsigned int count;
u32 mdatactrl;
+ int ret, val;
u8 *buf;
slot = i3c_generic_ibi_get_free_slot(data->ibi_pool);
@@ -341,6 +342,13 @@ static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master,
slot->len = 0;
buf = slot->data;
+ ret = readl_relaxed_poll_timeout(master->regs + SVC_I3C_MSTATUS, val,
+ SVC_I3C_MSTATUS_COMPLETE(val), 0, 1000);
+ if (ret) {
+ dev_err(master->dev, "Timeout when polling for COMPLETE\n");
+ return ret;
+ }
+
while (SVC_I3C_MSTATUS_RXPEND(readl(master->regs + SVC_I3C_MSTATUS)) &&
slot->len < SVC_I3C_FIFO_SIZE) {
mdatactrl = readl(master->regs + SVC_I3C_MDATACTRL);
--
2.34.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 4/6] i3c: master: svc: fix check wrong status register in irq handler
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
` (2 preceding siblings ...)
2023-10-23 16:16 ` [PATCH v4 3/6] i3c: master: svc: fix ibi may not return mandatory data byte Frank Li
@ 2023-10-23 16:16 ` Frank Li
2023-10-23 16:16 ` [PATCH v4 5/6] i3c: master: svc: fix SDA keep low when polling IBIWON timeout happen Frank Li
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Frank Li @ 2023-10-23 16:16 UTC (permalink / raw)
To: miquel.raynal
Cc: Frank.li, alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
svc_i3c_master_irq_handler() wrongly checks register SVC_I3C_MINTMASKED. It
should be SVC_I3C_MSTATUS.
Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
Cc: stable@vger.kernel.org
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Notes:
Change from v2 to v3
- 'wrong check' -> 'wrongly checks'
Change from v1 to v2
- Add Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Change from v1 to v2
- Add Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/i3c/master/svc-i3c-master.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
index dd06b7c9333f1..b113460f059c3 100644
--- a/drivers/i3c/master/svc-i3c-master.c
+++ b/drivers/i3c/master/svc-i3c-master.c
@@ -476,7 +476,7 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)
static irqreturn_t svc_i3c_master_irq_handler(int irq, void *dev_id)
{
struct svc_i3c_master *master = (struct svc_i3c_master *)dev_id;
- u32 active = readl(master->regs + SVC_I3C_MINTMASKED);
+ u32 active = readl(master->regs + SVC_I3C_MSTATUS);
if (!SVC_I3C_MSTATUS_SLVSTART(active))
return IRQ_NONE;
--
2.34.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 5/6] i3c: master: svc: fix SDA keep low when polling IBIWON timeout happen
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
` (3 preceding siblings ...)
2023-10-23 16:16 ` [PATCH v4 4/6] i3c: master: svc: fix check wrong status register in irq handler Frank Li
@ 2023-10-23 16:16 ` Frank Li
2023-10-23 16:16 ` [PATCH v4 6/6] i3c: master: svc: fix random hot join failure since timeout error Frank Li
2023-11-03 18:51 ` [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Alexandre Belloni
6 siblings, 0 replies; 9+ messages in thread
From: Frank Li @ 2023-10-23 16:16 UTC (permalink / raw)
To: miquel.raynal
Cc: Frank.li, alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
Upon IBIWON timeout, the SDA line will always be kept low if we don't emit
a stop. Calling svc_i3c_master_emit_stop() there will let the bus return to
idle state.
Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
Cc: stable@vger.kernel.org
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Notes:
Change from v3 to v4
- remove duplidate in commit message
Call svc_i3c_master_emit_stop() to let i3c bus come back to idle statue
when IBIWON timeout happen.
Change from v2 to v3
- Update commit message and add review tag
Change from v1 to v2
- Update commite message
Change from v1 to v2
- Update commite message
Change from v2 to v3
- Update commit message and add review tag
Change from v1 to v2
- Update commite message
Change from v1 to v2
- Update commite message
drivers/i3c/master/svc-i3c-master.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
index b113460f059c3..1a57fdebaa26d 100644
--- a/drivers/i3c/master/svc-i3c-master.c
+++ b/drivers/i3c/master/svc-i3c-master.c
@@ -404,6 +404,7 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)
SVC_I3C_MSTATUS_IBIWON(val), 0, 1000);
if (ret) {
dev_err(master->dev, "Timeout when polling for IBIWON\n");
+ svc_i3c_master_emit_stop(master);
goto reenable_ibis;
}
--
2.34.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v4 6/6] i3c: master: svc: fix random hot join failure since timeout error
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
` (4 preceding siblings ...)
2023-10-23 16:16 ` [PATCH v4 5/6] i3c: master: svc: fix SDA keep low when polling IBIWON timeout happen Frank Li
@ 2023-10-23 16:16 ` Frank Li
2023-10-23 19:10 ` Miquel Raynal
2023-11-03 18:51 ` [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Alexandre Belloni
6 siblings, 1 reply; 9+ messages in thread
From: Frank Li @ 2023-10-23 16:16 UTC (permalink / raw)
To: miquel.raynal
Cc: Frank.li, alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
master side report:
silvaco-i3c-master 44330000.i3c-master: Error condition: MSTATUS 0x020090c7, MERRWARN 0x00100000
BIT 20: TIMEOUT error
The module has stalled too long in a frame. This happens when:
- The TX FIFO or RX FIFO is not handled and the bus is stuck in the
middle of a message,
- No STOP was issued and between messages,
- IBI manual is used and no decision was made.
The maximum stall period is 100 μs.
This can be considered as being just a warning as the system IRQ latency
can easily be greater than 100us.
Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
Cc: stable@vger.kernel.org
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Notes:
Change from v3 to v4
- fixed missed update commit message
Add dev_dbg for TIMEOUT case
This can be considered as being just a warning as the system IRQ latency
can easily be greater than 100us.
Change from v2 to v3
- remove 10k at commit message
Change from v1 to v2
-none
Change from v1 to v2
-none
Change from v2 to v3
- remove 10k at commit message
Change from v1 to v2
-none
Change from v1 to v2
-none
drivers/i3c/master/svc-i3c-master.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
index 1a57fdebaa26d..6b6bdd163af4f 100644
--- a/drivers/i3c/master/svc-i3c-master.c
+++ b/drivers/i3c/master/svc-i3c-master.c
@@ -93,6 +93,7 @@
#define SVC_I3C_MINTMASKED 0x098
#define SVC_I3C_MERRWARN 0x09C
#define SVC_I3C_MERRWARN_NACK BIT(2)
+#define SVC_I3C_MERRWARN_TIMEOUT BIT(20)
#define SVC_I3C_MDMACTRL 0x0A0
#define SVC_I3C_MDATACTRL 0x0AC
#define SVC_I3C_MDATACTRL_FLUSHTB BIT(0)
@@ -226,6 +227,14 @@ static bool svc_i3c_master_error(struct svc_i3c_master *master)
if (SVC_I3C_MSTATUS_ERRWARN(mstatus)) {
merrwarn = readl(master->regs + SVC_I3C_MERRWARN);
writel(merrwarn, master->regs + SVC_I3C_MERRWARN);
+
+ /* Ignore timeout error */
+ if (merrwarn & SVC_I3C_MERRWARN_TIMEOUT) {
+ dev_dbg(master->dev, "Warning condition: MSTATUS 0x%08x, MERRWARN 0x%08x\n",
+ mstatus, merrwarn);
+ return false;
+ }
+
dev_err(master->dev,
"Error condition: MSTATUS 0x%08x, MERRWARN 0x%08x\n",
mstatus, merrwarn);
--
2.34.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v4 6/6] i3c: master: svc: fix random hot join failure since timeout error
2023-10-23 16:16 ` [PATCH v4 6/6] i3c: master: svc: fix random hot join failure since timeout error Frank Li
@ 2023-10-23 19:10 ` Miquel Raynal
0 siblings, 0 replies; 9+ messages in thread
From: Miquel Raynal @ 2023-10-23 19:10 UTC (permalink / raw)
To: Frank Li
Cc: alexandre.belloni, conor.culhane, imx, joe, linux-i3c,
linux-kernel
Hi Frank,
Frank.Li@nxp.com wrote on Mon, 23 Oct 2023 12:16:58 -0400:
> master side report:
> silvaco-i3c-master 44330000.i3c-master: Error condition: MSTATUS 0x020090c7, MERRWARN 0x00100000
>
> BIT 20: TIMEOUT error
> The module has stalled too long in a frame. This happens when:
> - The TX FIFO or RX FIFO is not handled and the bus is stuck in the
> middle of a message,
> - No STOP was issued and between messages,
> - IBI manual is used and no decision was made.
> The maximum stall period is 100 μs.
>
> This can be considered as being just a warning as the system IRQ latency
> can easily be greater than 100us.
>
> Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Thanks,
Miquèl
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
` (5 preceding siblings ...)
2023-10-23 16:16 ` [PATCH v4 6/6] i3c: master: svc: fix random hot join failure since timeout error Frank Li
@ 2023-11-03 18:51 ` Alexandre Belloni
6 siblings, 0 replies; 9+ messages in thread
From: Alexandre Belloni @ 2023-11-03 18:51 UTC (permalink / raw)
To: miquel.raynal, Frank Li
Cc: Frank.li, conor.culhane, imx, joe, linux-i3c, linux-kernel
On Mon, 23 Oct 2023 12:16:52 -0400, Frank Li wrote:
> Each patch is indepedents. See commit message for detail.
>
> Change from v1 to v4.
> See each patch notes
>
> If there are not notes between v2 to v4, that's means not change.
>
> [...]
Applied, thanks!
[1/6] i3c: master: svc: fix race condition in ibi work thread
commit: 6bf3fc268183816856c96b8794cd66146bc27b35
[2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame
commit: 5e5e3c92e748a6d859190e123b9193cf4911fcca
[3/6] i3c: master: svc: fix ibi may not return mandatory data byte
commit: c85e209b799f12d18a90ae6353b997b1bb1274a5
[4/6] i3c: master: svc: fix check wrong status register in irq handler
commit: 225d5ef048c4ed01a475c95d94833bd7dd61072d
[5/6] i3c: master: svc: fix SDA keep low when polling IBIWON timeout happen
commit: dfd7cd6aafdb1f5ba93828e97e56b38304b23a05
[6/6] i3c: master: svc: fix random hot join failure since timeout error
commit: 9aaeef113c55248ecf3ab941c2e4460aaa8b8b9a
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-11-03 18:51 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-23 16:16 [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Frank Li
2023-10-23 16:16 ` [PATCH v4 1/6] i3c: master: svc: fix race condition in ibi work thread Frank Li
2023-10-23 16:16 ` [PATCH v4 2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame Frank Li
2023-10-23 16:16 ` [PATCH v4 3/6] i3c: master: svc: fix ibi may not return mandatory data byte Frank Li
2023-10-23 16:16 ` [PATCH v4 4/6] i3c: master: svc: fix check wrong status register in irq handler Frank Li
2023-10-23 16:16 ` [PATCH v4 5/6] i3c: master: svc: fix SDA keep low when polling IBIWON timeout happen Frank Li
2023-10-23 16:16 ` [PATCH v4 6/6] i3c: master: svc: fix random hot join failure since timeout error Frank Li
2023-10-23 19:10 ` Miquel Raynal
2023-11-03 18:51 ` [PATCH v4 0/6] i3c: master: svc: collection of bugs fixes Alexandre Belloni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox