From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Frank Li <Frank.Li@nxp.com>
Cc: conor.culhane@silvaco.com, alexandre.belloni@bootlin.com,
joe@perches.com, linux-i3c@lists.infradead.org,
linux-kernel@vger.kernel.org, imx@lists.linux.dev
Subject: Re: [PATCH 2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame
Date: Tue, 17 Oct 2023 16:21:32 +0200 [thread overview]
Message-ID: <20231017162132.361be2c3@xps-13> (raw)
In-Reply-To: <20231016153232.2851095-3-Frank.Li@nxp.com>
Hi Frank,
Frank.Li@nxp.com wrote on Mon, 16 Oct 2023 11:32:28 -0400:
> ┌─────┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┌─────
> SCL: ┘ └─────┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┘
> ───┐ ┌─────┐ ┌─────┐ ┌───────────┐
> SDA: └───────────────────────┘ └─────┘ └─────┘ └─────
> xxx╱ ╲╱ ╲╱ ╲╱ ╲╱ ╲
> : xxx╲IBI ╱╲ Addr(0x0a) ╱╲ RW ╱╲NACK╱╲ S ╱
>
> In-Band Interrupt (IBI) occurred and IBI work thread may not to be
If an In-Band... occurs and the IBI work thread is not
immediately scheduled, when svc... initiates an I3C transfer and
attempts...
> scheduled. When svc_i3c_master_priv_xfers() initiates the I3C transfer
> frame 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.
>
> IBIWON check has been added in svc_i3c_master_xfer(). In case this
Add IBIWON check in svc_...
> situation occurs, a failure is now returned to the driver.
return a failure...
>
> Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> 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 ebdb3ea1af9d..0f57a5f75e39 100644
> --- a/drivers/i3c/master/svc-i3c-master.c
> +++ b/drivers/i3c/master/svc-i3c-master.c
> @@ -1009,6 +1009,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 |
> @@ -1027,6 +1030,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 falure
> + * and yeild the above events handler.
Typos: yeild and falure
> + */
> + if (SVC_I3C_MSTATUS_IBIWON(reg)) {
> + ret = -ENXIO;
> + goto emit_stop;
> + }
> +
> if (rnw)
> ret = svc_i3c_master_read(master, in, xfer_len);
> else
With all the typos fixed:
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Thanks,
Miquèl
WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Frank Li <Frank.Li@nxp.com>
Cc: conor.culhane@silvaco.com, alexandre.belloni@bootlin.com,
joe@perches.com, linux-i3c@lists.infradead.org,
linux-kernel@vger.kernel.org, imx@lists.linux.dev
Subject: Re: [PATCH 2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame
Date: Tue, 17 Oct 2023 16:21:32 +0200 [thread overview]
Message-ID: <20231017162132.361be2c3@xps-13> (raw)
In-Reply-To: <20231016153232.2851095-3-Frank.Li@nxp.com>
Hi Frank,
Frank.Li@nxp.com wrote on Mon, 16 Oct 2023 11:32:28 -0400:
> ┌─────┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┏──┐ ┌─────
> SCL: ┘ └─────┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┛ └──┘
> ───┐ ┌─────┐ ┌─────┐ ┌───────────┐
> SDA: └───────────────────────┘ └─────┘ └─────┘ └─────
> xxx╱ ╲╱ ╲╱ ╲╱ ╲╱ ╲
> : xxx╲IBI ╱╲ Addr(0x0a) ╱╲ RW ╱╲NACK╱╲ S ╱
>
> In-Band Interrupt (IBI) occurred and IBI work thread may not to be
If an In-Band... occurs and the IBI work thread is not
immediately scheduled, when svc... initiates an I3C transfer and
attempts...
> scheduled. When svc_i3c_master_priv_xfers() initiates the I3C transfer
> frame 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.
>
> IBIWON check has been added in svc_i3c_master_xfer(). In case this
Add IBIWON check in svc_...
> situation occurs, a failure is now returned to the driver.
return a failure...
>
> Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> 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 ebdb3ea1af9d..0f57a5f75e39 100644
> --- a/drivers/i3c/master/svc-i3c-master.c
> +++ b/drivers/i3c/master/svc-i3c-master.c
> @@ -1009,6 +1009,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 |
> @@ -1027,6 +1030,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 falure
> + * and yeild the above events handler.
Typos: yeild and falure
> + */
> + if (SVC_I3C_MSTATUS_IBIWON(reg)) {
> + ret = -ENXIO;
> + goto emit_stop;
> + }
> +
> if (rnw)
> ret = svc_i3c_master_read(master, in, xfer_len);
> else
With all the typos fixed:
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
next prev parent reply other threads:[~2023-10-17 14:33 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-16 15:32 [PATCH 0/6] i3c: master: svc: collection of bugs fixes Frank Li
2023-10-16 15:32 ` Frank Li
2023-10-16 15:32 ` [PATCH 1/6] i3c: master: svc: fix race condition in ibi work thread Frank Li
2023-10-16 15:32 ` Frank Li
2023-10-17 13:33 ` kernel test robot
2023-10-17 13:33 ` kernel test robot
2023-10-17 14:16 ` Miquel Raynal
2023-10-17 14:16 ` Miquel Raynal
2023-10-17 14:37 ` Frank Li
2023-10-17 14:37 ` Frank Li
2023-10-17 14:49 ` Miquel Raynal
2023-10-17 14:49 ` Miquel Raynal
2023-10-17 15:10 ` Frank Li
2023-10-17 15:10 ` Frank Li
2023-10-17 15:23 ` Miquel Raynal
2023-10-17 15:23 ` Miquel Raynal
2023-10-16 15:32 ` [PATCH 2/6] i3c: master: svc: fix wrong data return when IBI happen during start frame Frank Li
2023-10-16 15:32 ` Frank Li
2023-10-17 14:21 ` Miquel Raynal [this message]
2023-10-17 14:21 ` Miquel Raynal
2023-10-16 15:32 ` [PATCH 3/6] i3c: master: svc: fix ibi may not return mandatory data byte Frank Li
2023-10-16 15:32 ` Frank Li
2023-10-17 14:27 ` Miquel Raynal
2023-10-17 14:27 ` Miquel Raynal
2023-10-17 20:55 ` Frank Li
2023-10-17 20:55 ` Frank Li
2023-10-16 15:32 ` [PATCH 4/6] i3c: master: svc: fix check wrong status register in irq handler Frank Li
2023-10-16 15:32 ` Frank Li
2023-10-17 14:28 ` Miquel Raynal
2023-10-17 14:28 ` Miquel Raynal
2023-10-16 15:32 ` [PATCH 5/6] i3c: master: svc: fix SDA keep low when polling IBIWON timeout happen Frank Li
2023-10-16 15:32 ` Frank Li
2023-10-17 14:29 ` Miquel Raynal
2023-10-17 14:29 ` Miquel Raynal
2023-10-16 15:32 ` [PATCH 6/6] i3c: master: svc: fix random hot join failure since timeout error Frank Li
2023-10-16 15:32 ` Frank Li
2023-10-17 14:33 ` Miquel Raynal
2023-10-17 14:33 ` Miquel Raynal
2023-10-17 14:45 ` Frank Li
2023-10-17 14:45 ` Frank Li
2023-10-17 15:06 ` Miquel Raynal
2023-10-17 15:06 ` Miquel Raynal
2023-10-17 15:25 ` Frank Li
2023-10-17 15:25 ` Frank Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231017162132.361be2c3@xps-13 \
--to=miquel.raynal@bootlin.com \
--cc=Frank.Li@nxp.com \
--cc=alexandre.belloni@bootlin.com \
--cc=conor.culhane@silvaco.com \
--cc=imx@lists.linux.dev \
--cc=joe@perches.com \
--cc=linux-i3c@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.