From: Vijay Kumar Tumati <vijay.tumati@oss.qualcomm.com>
To: bod@kernel.org, Robert Foss <rfoss@kernel.org>,
Todor Tomov <todor.too@gmail.com>,
Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Hans Verkuil <hverkuil@kernel.org>,
Loic Poulain <loic.poulain@oss.qualcomm.com>,
Hans Verkuil <hverkuil+cisco@kernel.org>,
Gjorgji Rosikopulos <quic_grosikop@quicinc.com>,
Milen Mitkov <quic_mmitkov@quicinc.com>,
Depeng Shao <quic_depengs@quicinc.com>,
Yongsheng Li <quic_yon@quicinc.com>
Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH v3 4/5] media: qcom: camss: Fix RDI streaming for CSID GEN3
Date: Fri, 24 Apr 2026 14:49:34 -0700 [thread overview]
Message-ID: <5008f174-340e-41a7-9dcf-f09495c1fcf9@oss.qualcomm.com> (raw)
In-Reply-To: <20260407-camss-rdi-fix-v3-4-08f72d1f3442@kernel.org>
Hi Bryan,
On 4/7/2026 3:34 AM, bod@kernel.org wrote:
> From: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>
> Fix streaming from CSIDn RDI1 and RDI2 to VFEn RDI1 and RDI2. A pattern we
> have replicated throughout CAMSS where we use the VC number to populate
> both the VC fields and port fields of the CSID means that in practice only
> VC = 0 on CSIDn:RDI0 to VFEn:RDI0 works.
>
> Fix that for CSID gen3 by separating VC and port. Fix to VC zero as a
> bugfix we will look to properly populate the VC field with follow on
> patches later.
>
> Fixes: d96fe1808dcc ("media: qcom: camss: Add CSID 780 support")
> Cc: stable@vger.kernel.org
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
> .../media/platform/qcom/camss/camss-csid-gen3.c | 28 +++++++++++-----------
> 1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen3.c b/drivers/media/platform/qcom/camss/camss-csid-gen3.c
> index bd059243790ed..ed5c5766efd36 100644
> --- a/drivers/media/platform/qcom/camss/camss-csid-gen3.c
> +++ b/drivers/media/platform/qcom/camss/camss-csid-gen3.c
> @@ -145,12 +145,12 @@ static void __csid_configure_wrapper(struct csid_device *csid)
> writel(val, csid->camss->csid_wrapper_base + CSID_IO_PATH_CFG0(csid->id));
> }
>
> -static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enable, u8 vc)
> +static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enable, u8 port, u8 vc)
> {
> u32 val;
> u8 lane_cnt = csid->phy.lane_cnt;
> /* Source pads matching RDI channels on hardware. Pad 1 -> RDI0, Pad 2 -> RDI1, etc. */
> - struct v4l2_mbus_framefmt *input_format = &csid->fmt[MSM_CSID_PAD_FIRST_SRC + vc];
> + struct v4l2_mbus_framefmt *input_format = &csid->fmt[MSM_CSID_PAD_FIRST_SRC + port];
> const struct csid_format_info *format = csid_get_fmt_entry(csid->res->formats->formats,
> csid->res->formats->nformats,
> input_format->code);
> @@ -163,14 +163,14 @@ static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enable, u8
> * the four least significant bits of the five bit VC
> * bitfield to generate an internal CID value.
> *
> - * CSID_RDI_CFG0(vc)
> + * CSID_RDI_CFG0(port)
> * DT_ID : 28:27
> * VC : 26:22
> * DT : 21:16
> *
> * CID : VC 3:0 << 2 | DT_ID 1:0
> */
> - u8 dt_id = vc & 0x03;
> + u8 dt_id = port & 0x03;
Sorry if I was late, I think this is wrong. DT_ID is more to shrink the
data type of a stream from the sensor into 2 bits so that the number of
configurations to be maintained in the CSID are less, the way the HW
logic was on previous architectures. Now, the older SW logic of deriving
it from VC itself was wrong and making it port based that doesn't have
anything at all to the DT_ID or CID is making it worse. Do you want to
just maintain the older logic here?
>
> val = RDI_CFG0_TIMESTAMP_EN;
> val |= RDI_CFG0_TIMESTAMP_STB_SEL;
> @@ -180,7 +180,7 @@ static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enable, u8
> val |= format->data_type << RDI_CFG0_DT;
> val |= dt_id << RDI_CFG0_DT_ID;
>
> - writel(val, csid->base + CSID_RDI_CFG0(vc));
> + writel(val, csid->base + CSID_RDI_CFG0(port));
>
> val = RDI_CFG1_PACKING_FORMAT_MIPI;
> val |= RDI_CFG1_PIX_STORE;
> @@ -189,22 +189,22 @@ static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enable, u8
> val |= RDI_CFG1_CROP_H_EN;
> val |= RDI_CFG1_CROP_V_EN;
>
> - writel(val, csid->base + CSID_RDI_CFG1(vc));
> + writel(val, csid->base + CSID_RDI_CFG1(port));
>
> val = 0;
> - writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(vc));
> + writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(port));
>
> val = 1;
> - writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(vc));
> + writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(port));
>
> val = 0;
> - writel(val, csid->base + CSID_RDI_CTRL(vc));
> + writel(val, csid->base + CSID_RDI_CTRL(port));
>
> - val = readl(csid->base + CSID_RDI_CFG0(vc));
> + val = readl(csid->base + CSID_RDI_CFG0(port));
>
> if (enable)
> val |= RDI_CFG0_EN;
> - writel(val, csid->base + CSID_RDI_CFG0(vc));
> + writel(val, csid->base + CSID_RDI_CFG0(port));
> }
>
> static void csid_configure_stream(struct csid_device *csid, u8 enable)
> @@ -213,11 +213,11 @@ static void csid_configure_stream(struct csid_device *csid, u8 enable)
>
> __csid_configure_wrapper(csid);
>
> - /* Loop through all enabled VCs and configure stream for each */
> + /* Loop through all enabled ports and configure a stream for each */
> for (i = 0; i < MSM_CSID_MAX_SRC_STREAMS; i++)
> if (csid->phy.en_vc & BIT(i)) {
> - __csid_configure_rdi_stream(csid, enable, i);
> - __csid_configure_rx(csid, &csid->phy, i);
> + __csid_configure_rdi_stream(csid, enable, i, 0);
> + __csid_configure_rx(csid, &csid->phy, 0);
> __csid_ctrl_rdi(csid, enable, i);
> }
> }
>
Thanks,
Vijay.
next prev parent reply other threads:[~2026-04-24 21:49 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-07 10:34 [PATCH v3 0/5] media: qcom: camss: Fix RDI streaming for various CSIDs bod
2026-04-07 10:34 ` [PATCH v3 1/5] media: qcom: camss: Fix RDI streaming for CSID 680 bod
2026-04-07 13:28 ` Loic Poulain
2026-04-09 15:52 ` Vladimir Zapolskiy
2026-04-07 10:34 ` [PATCH v3 2/5] media: qcom: camss: Fix RDI streaming for CSID 340 bod
2026-04-07 13:28 ` Loic Poulain
2026-04-09 15:53 ` Vladimir Zapolskiy
2026-04-07 10:34 ` [PATCH v3 3/5] media: qcom: camss: Fix RDI streaming for CSID GEN2 bod
2026-04-07 13:29 ` Loic Poulain
2026-04-09 15:53 ` Vladimir Zapolskiy
2026-04-07 10:34 ` [PATCH v3 4/5] media: qcom: camss: Fix RDI streaming for CSID GEN3 bod
2026-04-07 13:29 ` Loic Poulain
2026-04-09 15:54 ` Vladimir Zapolskiy
2026-04-24 21:49 ` Vijay Kumar Tumati [this message]
2026-04-07 10:34 ` [PATCH v3 5/5] media: qcom: camss: csid: Rename en_vc to en_port bod
2026-04-07 13:30 ` Loic Poulain
2026-04-09 15:54 ` Vladimir Zapolskiy
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=5008f174-340e-41a7-9dcf-f09495c1fcf9@oss.qualcomm.com \
--to=vijay.tumati@oss.qualcomm.com \
--cc=bod@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=hverkuil+cisco@kernel.org \
--cc=hverkuil@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=loic.poulain@oss.qualcomm.com \
--cc=mchehab@kernel.org \
--cc=quic_depengs@quicinc.com \
--cc=quic_grosikop@quicinc.com \
--cc=quic_mmitkov@quicinc.com \
--cc=quic_yon@quicinc.com \
--cc=rfoss@kernel.org \
--cc=stable@vger.kernel.org \
--cc=todor.too@gmail.com \
--cc=vladimir.zapolskiy@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®