All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hangxiang Ma <hangxiang.ma@oss.qualcomm.com>
To: sashiko-reviews@lists.linux.dev
Cc: neil.armstrong@linaro.org, vkoul@kernel.org,
	devicetree@vger.kernel.org, linux-phy@lists.infradead.org,
	media-ci@linuxtv.org, robh@kernel.org, olteanv@gmail.com,
	conor+dt@kernel.org
Subject: Re: [PATCH v17 06/11] media: qcom: camss: csid: Add support for CSID Gen4
Date: Wed, 30 Sep 2026 21:54:15 +0800	[thread overview]
Message-ID: <66b8dd1f-7aca-467d-9929-8598bea9fb04@oss.qualcomm.com> (raw)
In-Reply-To: <20260929061724.7E52C1F00893@smtp.kernel.org>

On 9/29/2026 2:17 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [High] media: qcom/camss: data race on csid->aup_update and rup_update
> - [Medium] media: qcom/camss: integer underflow in __csid_configure_rx
> --
> 
> commit 611abdeb4b5da574ae292d1ff736d0d71f2f4ed2
> Author: Hangxiang Ma <hangxiang.ma@oss.qualcomm.com>
> 
> media: qcom: camss: csid: Add support for CSID Gen4
>      
> Add support for the CSID Gen4 hardware found on Kaanapali SoC.
>      
> Introduce Gen4 resource descriptions and implement the hardware-specific
> register programming, reset sequence, and BUF_DONE interrupt handling.
>      
> Gen4 splits RUP and AUP updates into separate registers and uses a SET
> register to commit the updates. Update the CSID interface to support
> both this scheme and the legacy combined reg_update mechanism.
> 
>> diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen4.c b/drivers/media/platform/qcom/camss/camss-csid-gen4.c
>> new file mode 100644
>> index 0000000000000..4ff2f41f70f7e
>> --- /dev/null
>> +++ b/drivers/media/platform/qcom/camss/camss-csid-gen4.c
> [ ... ]
>> +static void __csid_aup_rup_clear(struct csid_device *csid, int port_id)
>> +{
>> +	/* Hardware clears the registers upon consuming the settings */
>> +	csid->aup_update &= ~CSID_RUP_AUP_RDI(port_id);
>> +	csid->rup_update &= ~CSID_RUP_AUP_RDI(port_id);
>> +}
>> +
>> +static void __csid_aup_update(struct csid_device *csid, int port_id)
>> +{
>> +	csid->aup_update |= CSID_RUP_AUP_RDI(port_id);
>> +	writel(csid->aup_update, csid->base + CSID_AUP_CMD);
>> +
>> +	__csid_aup_rup_trigger(csid);
>> +}
>> +
>> +static void __csid_reg_update(struct csid_device *csid, int port_id)
>> +{
>> +	csid->rup_update |= CSID_RUP_AUP_RDI(port_id);
>> +	writel(csid->rup_update, csid->base + CSID_RUP_CMD);
>> +
>> +	__csid_aup_rup_trigger(csid);
>> +}
> 
> [Severity: High]
> Does this introduce a data race on csid->aup_update and csid->rup_update?
> 
> If a stream is configured in process context via csid_set_stream(),
> __csid_aup_update() and __csid_reg_update() modify the shared state with
> non-atomic bitwise operations (|=).
> 
> If an interrupt (such as RUP_DONE) fires concurrently for an already running
> stream, csid_isr() will execute and call __csid_aup_rup_clear(), which modifies
> the same variables using non-atomic bitwise clear operations (&= ~).
> 
> Because these bitwise operations lack locking, could the interrupt's
> modifications be lost, causing the hardware to receive an invalid AUP/RUP
> command mask? This might lead to broken streaming when dynamically configuring
> multiple virtual channels.
> 
Ack

>> +
>> +static void __csid_configure_rx(struct csid_device *csid,
>> +				struct csid_phy_config *phy)
>> +{
>> +	int val;
>> +
>> +	val = (phy->lane_cnt - 1) << CSI2_RX_CFG0_NUM_ACTIVE_LANES;
>> +	val |= phy->lane_assign << CSI2_RX_CFG0_DL0_INPUT_SEL;
>> +	val |= (phy->csiphy_id + CSI2_RX_CFG0_PHY_SEL_BASE_IDX)
>> +	       << CSI2_RX_CFG0_PHY_NUM_SEL;
>> +	writel(val, csid->base + CSID_CSI2_RX_CFG0);
> 
> [Severity: Medium]
> Can this code underflow if phy->lane_cnt is 0?
> 
> If the device tree incorrectly omits the data-lanes property, phy->lane_cnt can
> evaluate to 0.
> 
> While __csid_configure_rdi_stream() provides a fallback for this scenario:
> 
>      if (!lane_cnt)
>          lane_cnt = 4;
> 
> __csid_configure_rx() omits this check. If phy->lane_cnt is 0,
> (phy->lane_cnt - 1) underflows to -1. This would result in writing 0xFFFFFFFF
> to CSID_CSI2_RX_CFG0, clobbering all its fields.
> 
> Should there be a similar fallback or validation check here to prevent
> hardware misconfiguration?
> 

Ack

Best Regards,
Hangxiang

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

WARNING: multiple messages have this Message-ID (diff)
From: Hangxiang Ma <hangxiang.ma@oss.qualcomm.com>
To: sashiko-reviews@lists.linux.dev
Cc: neil.armstrong@linaro.org, vkoul@kernel.org,
	devicetree@vger.kernel.org, linux-phy@lists.infradead.org,
	media-ci@linuxtv.org, robh@kernel.org, olteanv@gmail.com,
	conor+dt@kernel.org
Subject: Re: [PATCH v17 06/11] media: qcom: camss: csid: Add support for CSID Gen4
Date: Wed, 30 Sep 2026 21:54:15 +0800	[thread overview]
Message-ID: <66b8dd1f-7aca-467d-9929-8598bea9fb04@oss.qualcomm.com> (raw)
In-Reply-To: <20260929061724.7E52C1F00893@smtp.kernel.org>

On 9/29/2026 2:17 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [High] media: qcom/camss: data race on csid->aup_update and rup_update
> - [Medium] media: qcom/camss: integer underflow in __csid_configure_rx
> --
> 
> commit 611abdeb4b5da574ae292d1ff736d0d71f2f4ed2
> Author: Hangxiang Ma <hangxiang.ma@oss.qualcomm.com>
> 
> media: qcom: camss: csid: Add support for CSID Gen4
>      
> Add support for the CSID Gen4 hardware found on Kaanapali SoC.
>      
> Introduce Gen4 resource descriptions and implement the hardware-specific
> register programming, reset sequence, and BUF_DONE interrupt handling.
>      
> Gen4 splits RUP and AUP updates into separate registers and uses a SET
> register to commit the updates. Update the CSID interface to support
> both this scheme and the legacy combined reg_update mechanism.
> 
>> diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen4.c b/drivers/media/platform/qcom/camss/camss-csid-gen4.c
>> new file mode 100644
>> index 0000000000000..4ff2f41f70f7e
>> --- /dev/null
>> +++ b/drivers/media/platform/qcom/camss/camss-csid-gen4.c
> [ ... ]
>> +static void __csid_aup_rup_clear(struct csid_device *csid, int port_id)
>> +{
>> +	/* Hardware clears the registers upon consuming the settings */
>> +	csid->aup_update &= ~CSID_RUP_AUP_RDI(port_id);
>> +	csid->rup_update &= ~CSID_RUP_AUP_RDI(port_id);
>> +}
>> +
>> +static void __csid_aup_update(struct csid_device *csid, int port_id)
>> +{
>> +	csid->aup_update |= CSID_RUP_AUP_RDI(port_id);
>> +	writel(csid->aup_update, csid->base + CSID_AUP_CMD);
>> +
>> +	__csid_aup_rup_trigger(csid);
>> +}
>> +
>> +static void __csid_reg_update(struct csid_device *csid, int port_id)
>> +{
>> +	csid->rup_update |= CSID_RUP_AUP_RDI(port_id);
>> +	writel(csid->rup_update, csid->base + CSID_RUP_CMD);
>> +
>> +	__csid_aup_rup_trigger(csid);
>> +}
> 
> [Severity: High]
> Does this introduce a data race on csid->aup_update and csid->rup_update?
> 
> If a stream is configured in process context via csid_set_stream(),
> __csid_aup_update() and __csid_reg_update() modify the shared state with
> non-atomic bitwise operations (|=).
> 
> If an interrupt (such as RUP_DONE) fires concurrently for an already running
> stream, csid_isr() will execute and call __csid_aup_rup_clear(), which modifies
> the same variables using non-atomic bitwise clear operations (&= ~).
> 
> Because these bitwise operations lack locking, could the interrupt's
> modifications be lost, causing the hardware to receive an invalid AUP/RUP
> command mask? This might lead to broken streaming when dynamically configuring
> multiple virtual channels.
> 
Ack

>> +
>> +static void __csid_configure_rx(struct csid_device *csid,
>> +				struct csid_phy_config *phy)
>> +{
>> +	int val;
>> +
>> +	val = (phy->lane_cnt - 1) << CSI2_RX_CFG0_NUM_ACTIVE_LANES;
>> +	val |= phy->lane_assign << CSI2_RX_CFG0_DL0_INPUT_SEL;
>> +	val |= (phy->csiphy_id + CSI2_RX_CFG0_PHY_SEL_BASE_IDX)
>> +	       << CSI2_RX_CFG0_PHY_NUM_SEL;
>> +	writel(val, csid->base + CSID_CSI2_RX_CFG0);
> 
> [Severity: Medium]
> Can this code underflow if phy->lane_cnt is 0?
> 
> If the device tree incorrectly omits the data-lanes property, phy->lane_cnt can
> evaluate to 0.
> 
> While __csid_configure_rdi_stream() provides a fallback for this scenario:
> 
>      if (!lane_cnt)
>          lane_cnt = 4;
> 
> __csid_configure_rx() omits this check. If phy->lane_cnt is 0,
> (phy->lane_cnt - 1) underflows to -1. This would result in writing 0xFFFFFFFF
> to CSID_CSI2_RX_CFG0, clobbering all its fields.
> 
> Should there be a similar fallback or validation check here to prevent
> hardware misconfiguration?
> 

Ack

Best Regards,
Hangxiang

  reply	other threads:[~2026-09-30 13:54 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-29  6:00 [PATCH v17 00/11] media: qcom: camss: Add Kaanapali support Hangxiang Ma
2026-09-29  6:00 ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 01/11] dt-bindings: phy: qcom,x1e80100-csi2-phy: Add Kaanapali CSI2 PHY Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-30 10:33   ` Krzysztof Kozlowski
2026-09-30 10:33     ` Krzysztof Kozlowski
2026-09-29  6:00 ` [PATCH v17 02/11] media: dt-bindings: Add CAMSS device for Kaanapali Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:08   ` sashiko-bot
2026-09-29  6:08     ` sashiko-bot
2026-09-30 12:54     ` Hangxiang Ma
2026-09-30 12:54       ` Hangxiang Ma
2026-09-30 10:34   ` Krzysztof Kozlowski
2026-09-30 10:34     ` Krzysztof Kozlowski
2026-09-29  6:00 ` [PATCH v17 03/11] media: qcom: camss: Add Kaanapali compatible Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 04/11] phy: qcom-mipi-csi2: Parametrise the common status register offset Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 05/11] media: qcom: camss: csiphy: Add support for v2.4.0 two-phase CSIPHY Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:17   ` sashiko-bot
2026-09-29  6:17     ` sashiko-bot
2026-09-30 13:01     ` Hangxiang Ma
2026-09-30 13:01       ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 06/11] media: qcom: camss: csid: Add support for CSID Gen4 Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:17   ` sashiko-bot
2026-09-29  6:17     ` sashiko-bot
2026-09-30 13:54     ` Hangxiang Ma [this message]
2026-09-30 13:54       ` Hangxiang Ma
2026-10-03  5:32     ` Hangxiang Ma
2026-10-03  5:32       ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 07/11] media: qcom: camss: vfe: Add support for VFE Gen4 Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:17   ` sashiko-bot
2026-09-29  6:17     ` sashiko-bot
2026-09-30 14:07     ` Hangxiang Ma
2026-09-30 14:07       ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 08/11] media: qcom: camss: tpg: Add support for v2.4.0 TPG Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:12   ` sashiko-bot
2026-09-29  6:12     ` sashiko-bot
2026-09-30 14:12     ` Hangxiang Ma
2026-09-30 14:12       ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 09/11] arm64: dts: qcom: kaanapali: Add CAMSS and CSIPHY block definitions Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:11   ` sashiko-bot
2026-09-29  6:11     ` sashiko-bot
2026-09-30 14:17     ` Hangxiang Ma
2026-09-30 14:17       ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 10/11] arm64: dts: qcom: kaanapali: Add CCI controller nodes Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:00 ` [PATCH v17 11/11] arm64: dts: qcom: kaanapali: Add camera MCLK pinctrl Hangxiang Ma
2026-09-29  6:00   ` Hangxiang Ma
2026-09-29  6:07   ` sashiko-bot
2026-09-29  6:07     ` sashiko-bot
2026-09-30 14:23     ` Hangxiang Ma
2026-09-30 14:23       ` 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=66b8dd1f-7aca-467d-9929-8598bea9fb04@oss.qualcomm.com \
    --to=hangxiang.ma@oss.qualcomm.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --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.