All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Hangxiang Ma" <hangxiang.ma@oss.qualcomm.com>
Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
	robh@kernel.org, conor+dt@kernel.org, media-ci@linuxtv.org,
	vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com
Subject: Re: [PATCH v24 10/15] media: qcom: camss: vfe: Add support for VFE 1080
Date: Mon, 02 Nov 2026 10:56:36 +0000	[thread overview]
Message-ID: <sashiko-outbox-193299@kernel.org> (raw)
In-Reply-To: <20261102-kaanapali-camss-v24-10-d6b8f3f6f66f@oss.qualcomm.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] media: qcom: camss: unsynchronized CSID RUP/AUP updates in vfe_ops_1080
--

commit fa6d43fd7f6f3cf7fc60f961a5b80cfe5e9e3b1c
Author: Hangxiang Ma <hangxiang.ma@oss.qualcomm.com>

media: qcom: camss: vfe: Add support for VFE 1080

This commit adds support for the VFE 1080 (TFE) hardware block found on the
Qualcomm Kaanapali SoC, including register configuration and subdevice
resource definitions.

> diff --git a/drivers/media/platform/qcom/camss/camss-vfe-1080.c b/drivers/media/platform/qcom/camss/camss-vfe-1080.c
> new file mode 100644
> index 0000000000000..68798f13fbea8
> --- /dev/null
> +++ b/drivers/media/platform/qcom/camss/camss-vfe-1080.c
> @@ -0,0 +1,213 @@

[ ... ]

> +static void vfe_reg_update(struct vfe_device *vfe, enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_reg_update(vfe->camss, vfe->id, port_id, false);
> +}
> +
> +static void vfe_reg_update_clear(struct vfe_device *vfe,
> +				 enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_reg_update(vfe->camss, vfe->id, port_id, true);
> +}
> +
> +static void vfe_addr_update(struct vfe_device *vfe, enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_addr_update(vfe->camss, vfe->id, port_id, false);
> +}
> +
> +static void vfe_addr_update_clear(struct vfe_device *vfe, enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_addr_update(vfe->camss, vfe->id, port_id, true);
> +}

[Severity: High]
As reported by Sashiko on v14 [1], can vfe_reg_update() and vfe_addr_update()
race with csid_isr() in drivers/media/platform/qcom/camss/camss-csid-1080.c
when updating csid->reg_update and csid->addr_update?

In drivers/media/platform/qcom/camss/camss-vfe.c, vfe_enable_output_v2(),
vfe_queue_buffer_v2(), and vfe_buf_done() invoke vfe_reg_update() and
vfe_addr_update() while holding vfe->output_lock. These forward through
camss_reg_update() and camss_addr_update() to __csid_reg_update() and
__csid_addr_update() in drivers/media/platform/qcom/camss/camss-csid-1080.c:

    static void __csid_addr_update(struct csid_device *csid, int port_id)
    {
            csid->addr_update |= CSID_RUP_AUP_RDI(port_id);
            writel(csid->addr_update, csid->base + CSID_AUP_CMD);

            __csid_aup_rup_trigger(csid);
    }

Concurrently, when an end-of-frame interrupt fires with INFO_RUP_DONE set,
csid_isr() in drivers/media/platform/qcom/camss/camss-csid-1080.c clears
those fields without holding vfe->output_lock or any CSID lock before calling
camss_buf_done():

    if (val & INFO_RUP_DONE) {
            __csid_addr_update_clear(csid, i);
            __csid_reg_update_clear(csid, i);
    }

If userspace queues a buffer via VIDIOC_QBUF -> vfe_queue_buffer_v2() when
output->gen2.active_num == 1 (or enables another RDI port on the same CSID
via VIDIOC_STREAMON -> vfe_enable_output_v2()) on one CPU while csid_isr()
processes INFO_RUP_DONE on another CPU, the unsynchronized read-modify-write
operations on csid->addr_update and csid->reg_update can clear a newly set
bit before writel() writes CSID_AUP_CMD or CSID_RUP_CMD, or clobber bits
across RDI ports. Would this cause the hardware to miss a buffer address
update while output->gen2.active_num is incremented, stalling capture?

[1] https://lore.kernel.org/r/20260601164403.8CE831F00893@smtp.kernel.org

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261102-kaanapali-camss-v24-0-d6b8f3f6f66f@oss.qualcomm.com?part=10

WARNING: multiple messages have this Message-ID (diff)
From: sashiko-bot@kernel.org
To: "Hangxiang Ma" <hangxiang.ma@oss.qualcomm.com>
Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
	robh@kernel.org, conor+dt@kernel.org, media-ci@linuxtv.org,
	vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com
Subject: Re: [PATCH v24 10/15] media: qcom: camss: vfe: Add support for VFE 1080
Date: Mon, 02 Nov 2026 10:56:36 +0000	[thread overview]
Message-ID: <sashiko-outbox-193299@kernel.org> (raw)
In-Reply-To: <20261102-kaanapali-camss-v24-10-d6b8f3f6f66f@oss.qualcomm.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] media: qcom: camss: unsynchronized CSID RUP/AUP updates in vfe_ops_1080
--

commit fa6d43fd7f6f3cf7fc60f961a5b80cfe5e9e3b1c
Author: Hangxiang Ma <hangxiang.ma@oss.qualcomm.com>

media: qcom: camss: vfe: Add support for VFE 1080

This commit adds support for the VFE 1080 (TFE) hardware block found on the
Qualcomm Kaanapali SoC, including register configuration and subdevice
resource definitions.

> diff --git a/drivers/media/platform/qcom/camss/camss-vfe-1080.c b/drivers/media/platform/qcom/camss/camss-vfe-1080.c
> new file mode 100644
> index 0000000000000..68798f13fbea8
> --- /dev/null
> +++ b/drivers/media/platform/qcom/camss/camss-vfe-1080.c
> @@ -0,0 +1,213 @@

[ ... ]

> +static void vfe_reg_update(struct vfe_device *vfe, enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_reg_update(vfe->camss, vfe->id, port_id, false);
> +}
> +
> +static void vfe_reg_update_clear(struct vfe_device *vfe,
> +				 enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_reg_update(vfe->camss, vfe->id, port_id, true);
> +}
> +
> +static void vfe_addr_update(struct vfe_device *vfe, enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_addr_update(vfe->camss, vfe->id, port_id, false);
> +}
> +
> +static void vfe_addr_update_clear(struct vfe_device *vfe, enum vfe_line_id line_id)
> +{
> +	int port_id = line_id;
> +
> +	camss_addr_update(vfe->camss, vfe->id, port_id, true);
> +}

[Severity: High]
As reported by Sashiko on v14 [1], can vfe_reg_update() and vfe_addr_update()
race with csid_isr() in drivers/media/platform/qcom/camss/camss-csid-1080.c
when updating csid->reg_update and csid->addr_update?

In drivers/media/platform/qcom/camss/camss-vfe.c, vfe_enable_output_v2(),
vfe_queue_buffer_v2(), and vfe_buf_done() invoke vfe_reg_update() and
vfe_addr_update() while holding vfe->output_lock. These forward through
camss_reg_update() and camss_addr_update() to __csid_reg_update() and
__csid_addr_update() in drivers/media/platform/qcom/camss/camss-csid-1080.c:

    static void __csid_addr_update(struct csid_device *csid, int port_id)
    {
            csid->addr_update |= CSID_RUP_AUP_RDI(port_id);
            writel(csid->addr_update, csid->base + CSID_AUP_CMD);

            __csid_aup_rup_trigger(csid);
    }

Concurrently, when an end-of-frame interrupt fires with INFO_RUP_DONE set,
csid_isr() in drivers/media/platform/qcom/camss/camss-csid-1080.c clears
those fields without holding vfe->output_lock or any CSID lock before calling
camss_buf_done():

    if (val & INFO_RUP_DONE) {
            __csid_addr_update_clear(csid, i);
            __csid_reg_update_clear(csid, i);
    }

If userspace queues a buffer via VIDIOC_QBUF -> vfe_queue_buffer_v2() when
output->gen2.active_num == 1 (or enables another RDI port on the same CSID
via VIDIOC_STREAMON -> vfe_enable_output_v2()) on one CPU while csid_isr()
processes INFO_RUP_DONE on another CPU, the unsynchronized read-modify-write
operations on csid->addr_update and csid->reg_update can clear a newly set
bit before writel() writes CSID_AUP_CMD or CSID_RUP_CMD, or clobber bits
across RDI ports. Would this cause the hardware to miss a buffer address
update while output->gen2.active_num is incremented, stalling capture?

[1] https://lore.kernel.org/r/20260601164403.8CE831F00893@smtp.kernel.org

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261102-kaanapali-camss-v24-0-d6b8f3f6f66f@oss.qualcomm.com?part=10

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

  reply	other threads:[~2026-11-02 10:56 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-02 10:42 [PATCH v24 00/15] media: qcom: camss: Add Kaanapali support Hangxiang Ma
2026-11-02 10:42 ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 01/15] dt-bindings: phy: qcom,x1e80100-csi2-phy: Add Kaanapali CSI2 PHY Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 02/15] phy: qcom-mipi-csi2: Parametrise the common status register offset Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 03/15] phy: qcom-mipi-csi2: Add Kaanapali support Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 04/15] media: qcom: camss: Add addr_update hooks and guard CSID reg_update Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 05/15] media: dt-bindings: Add CAMSS device for Kaanapali Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 06/15] media: qcom: camss: Add Kaanapali compatible Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 07/15] media: qcom: camss: Add PM clock definitions for Kaanapali Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 08/15] media: qcom: camss: Allow CSI2 PHY devices without CSIPHY resources Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 09/15] media: qcom: camss: csid: Add support for CSID 1080 Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 11:02   ` sashiko-bot
2026-11-02 11:02     ` sashiko-bot
2026-11-02 10:42 ` [PATCH v24 10/15] media: qcom: camss: vfe: Add support for VFE 1080 Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:56   ` sashiko-bot [this message]
2026-11-02 10:56     ` sashiko-bot
2026-11-02 10:42 ` [PATCH v24 11/15] media: qcom: camss: tpg: Add support for v2.4.0 TPG Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:52   ` sashiko-bot
2026-11-02 10:52     ` sashiko-bot
2026-11-02 10:42 ` [PATCH v24 12/15] arm64: dts: qcom: kaanapali: Add CAMSS and CSIPHY block definitions Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:57   ` sashiko-bot
2026-11-02 10:57     ` sashiko-bot
2026-11-02 10:42 ` [PATCH v24 13/15] arm64: dts: qcom: kaanapali: Add CCI controller nodes Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 12:17   ` Loic Poulain
2026-11-02 12:17     ` Loic Poulain
2026-11-02 10:42 ` [PATCH v24 14/15] arm64: dts: qcom: kaanapali: Add camera MCLK pinctrl Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma
2026-11-02 10:42 ` [PATCH v24 15/15] arm64: dts: qcom: kaanapali-mtp-camera-s5kjn5: Add DT overlay Hangxiang Ma
2026-11-02 10:42   ` Hangxiang Ma

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=sashiko-outbox-193299@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=hangxiang.ma@oss.qualcomm.com \
    --cc=linux-phy@lists.infradead.org \
    --cc=media-ci@linuxtv.org \
    --cc=neil.armstrong@linaro.org \
    --cc=olteanv@gmail.com \
    --cc=robh@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=vkoul@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.