From nobody Mon Jun 15 01:54:19 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F3FB63A9D92; Tue, 7 Apr 2026 10:35:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558104; cv=none; b=Ij1ye+emZH57OEd5YhDsq7hpTfGE7tO5G+VrKGm0lu3Kk6pJkhrCeWqZRSbN/Ap71tJjSiqS7aX1ObofGPD08yTxUN3py2s5Na5aYJ3MG2nNcRhc92J/jZUuxIegkrY5ItlIJXqILhtnutojdjAbSrSILthPU3EsbmSEuXW3Yfw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558104; c=relaxed/simple; bh=LczvgmVduK2DwFXtQcsalQYjPbPqh+XB9zd4lRW7ozk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mX3/4cyHmEXgV7ow+SQ4f4dxUhGUmxNmGD1yWemSFXmDhkUZadevnHoa4Dj1/0lLE6tRiAtNlDPY4jTB2G70wSngn/sXGXoRDcHK7OIUOLIVx+h9sbrAXI4+FBYA/KkcMH9n0UENNjs4N8xWlRB9tqdzl2kRZPaPMHD+AfagCQs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ak0tfkqN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ak0tfkqN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 53D49C116C6; Tue, 7 Apr 2026 10:35:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775558103; bh=LczvgmVduK2DwFXtQcsalQYjPbPqh+XB9zd4lRW7ozk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ak0tfkqNlNvdbUPkm50rpH2w0t0BSWUcTWSurmpUMgeGAEC8sswW1gZWNSEG0W+2O SDTh9CSLtfBICSbvU4gVb876b+bmPx7TXTUcALV4U8WLssZGB+/uEdydryF0QPOB4x vIJwG/RnbxWADXPJnwEtuV7MSzOlgwMz1HZRH1fRj4NNjLJKB8cpdQ17ILWl5ON7ZS sc7S+2Yww0FRMvAufSLidppXE/Wwv3nbjQf9IWV/ZrImuhdQKoHzO8MkWDUibZ6sFn CiKoNNMhfptFpy2rZ+LqnlDdtib8XRmiRRUDLiQR9sqQOrwW3CyT1TNe1LmKWo2M3S VGxREgOZyZwpg== From: bod@kernel.org Date: Tue, 07 Apr 2026 11:34:51 +0100 Subject: [PATCH v3 1/5] media: qcom: camss: Fix RDI streaming for CSID 680 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260407-camss-rdi-fix-v3-1-08f72d1f3442@kernel.org> References: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> In-Reply-To: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Hans Verkuil , Loic Poulain , Hans Verkuil , Gjorgji Rosikopulos , Milen Mitkov , Depeng Shao , Yongsheng Li Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bryan O'Donoghue , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5408; i=bod@kernel.org; h=from:subject:message-id; bh=ViaAdF1MZqpL1Iav0tudKHi7jYp56SRTGHm2URLIlKc=; b=owEBbQKS/ZANAwAKASJxO7Ohjcg6AcsmYgBp1N3O2281QR3T9KeZUcJMjuMyprlUw5UudEWEe CUkSsl4wI+JAjMEAAEKAB0WIQTmk/sqq6Nt4Rerb7QicTuzoY3IOgUCadTdzgAKCRAicTuzoY3I OhnOD/928O+L/c+3241jPaZ51D4ME2zMT+/OVgKXwDjdaBRG/3oKaidzrniyz08mGynSccrgXGf WfEzDEZllSPdrcL/7ssGsnIUIq1pyr2WhtPySyCzlJoDK8gpAgCM4lk1j3W1s1sUjaKzhb+xujc VcqLCQBWzDyuRTr0Z0kVv4baPZesM3vZEUpCVLoJ//8SZnhBQ8YtipX82yKjCJi4w2hnYZt9rsL Whabp7PtKUFIKwabXaT+CtGE7L6NvwiYlsymLLfsLponCUoDBwkspv0Prnw6xRZiJ8G4y1lZnfG 8uZXqnOazwjEx99oEc0DAax47V7cV6F1+umCunwMxv+ryiqnrAduEtcoqRbMd/+qQP6WT7za8Wj 0wHlEHXeVnLkmmNpABa2evfppfY2YhbFK5yXqjRZlLjh7P+iPhCZRnVUwMARGwLa4qA5mdoLhDP d+TiaujtG/M/mQqUDczBs1o7TcxDHF7I/4w7lga9miyW2LXKbdDMNGXYSfWNcyOMZdlX7tUT0O+ bl6j0FD6s6UaVsvnV0WYeKJ4M13jtr44UrbO8ZVz8YeJg3QYzr/Irim4Klz3ehIHfeYdNsTZFN7 0yqhNFejlFq3Uv/2S9lD2XEa0g8HQemseeHfHXO5hSbprkBpQvFBKnGZ3jyoZ6fx7fAVQof0tjv Hie5bDgyoU3Jofg== X-Developer-Key: i=bod@kernel.org; a=openpgp; fpr=E693FB2AABA36DE117AB6FB422713BB3A18DC83A From: Bryan O'Donoghue Fix streaming to RDI1 and RDI2. csid->phy.en_vc contains a bitmask of enabled CSID ports not virtual channels. We cycle through the number of available CSID ports and test this value against the vc_en bitmask. We then use the passed value both as an index to the port configuration macros and as a virtual channel index. This is a very broken pattern. Reviewing the initial introduction of VC support it states that you can only map one CSID to one VFE. This is true however each CSID has multiple sources which can sink inside of the VFE - for example there is a "pixel" path for bayer stats which sources @ CSID(x):3 and sinks on VFE(x):pix. That is CSID port # 3 should drive VFE port #3. With our current setup only a sensor which drives virtual channel number #3 could possibly enable that setup. This is deeply wrong the virtual channel has no relevance to hooking CSID to VFE, a fact that is proven after this patch is applied allowing RDI0,RDI1 and RDI2 to function with VC0 whereas before only RDI1 worked. Another way the current model breaks is the DT field. A sensor driving different data-types on the same VC would not be able to separate the VC:DT pair to separate RDI outputs, thus breaking another feature of VCs in the MIPI data-stream. Default the VC back to zero. A follow on series will implement subdev streams to actually enable VCs without breaking CSID source to VFE sink. Fixes: 253314b20408 ("media: qcom: camss: Add CSID 680 support") Cc: stable@vger.kernel.org Signed-off-by: Bryan O'Donoghue Reviewed-by: Loic Poulain Reviewed-by: Vladimir Zapolskiy --- drivers/media/platform/qcom/camss/camss-csid-680.c | 30 +++++++++++-------= ---- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid-680.c b/drivers/m= edia/platform/qcom/camss/camss-csid-680.c index 3ad3a174bcfb8..edf01ba79907d 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-680.c +++ b/drivers/media/platform/qcom/camss/camss-csid-680.c @@ -219,9 +219,9 @@ static void __csid_configure_top(struct csid_device *cs= id) CSID_TOP_IO_PATH_CFG0(csid->id)); } =20 -static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 vc) +static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 port, u8 vc) { - struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + vc]; + struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + port]; const struct csid_format_info *format =3D csid_get_fmt_entry(csid->res->f= ormats->formats, csid->res->formats->nformats, input_format->code); @@ -233,28 +233,28 @@ static void __csid_configure_rdi_stream(struct csid_d= evice *csid, u8 enable, u8 lane_cnt =3D 4; =20 val =3D 0; - writel(val, csid->base + CSID_RDI_FRM_DROP_PERIOD(vc)); + writel(val, csid->base + CSID_RDI_FRM_DROP_PERIOD(port)); =20 /* * DT_ID is a two bit bitfield that is concatenated with * 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 */ - dt_id =3D vc & 0x03; + dt_id =3D port & 0x03; =20 /* note: for non-RDI path, this should be format->decode_format */ val |=3D DECODE_FORMAT_PAYLOAD_ONLY << RDI_CFG0_DECODE_FORMAT; val |=3D format->data_type << RDI_CFG0_DATA_TYPE; val |=3D vc << RDI_CFG0_VIRTUAL_CHANNEL; val |=3D dt_id << RDI_CFG0_DT_ID; - writel(val, csid->base + CSID_RDI_CFG0(vc)); + writel(val, csid->base + CSID_RDI_CFG0(port)); =20 val =3D RDI_CFG1_TIMESTAMP_STB_FRAME; val |=3D RDI_CFG1_BYTE_CNTR_EN; @@ -265,23 +265,23 @@ static void __csid_configure_rdi_stream(struct csid_d= evice *csid, u8 enable, u8 val |=3D RDI_CFG1_CROP_V_EN; val |=3D RDI_CFG1_PACKING_MIPI; =20 - writel(val, csid->base + CSID_RDI_CFG1(vc)); + writel(val, csid->base + CSID_RDI_CFG1(port)); =20 val =3D 0; - writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(vc)); + writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(port)); =20 val =3D 1; - writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(vc)); + writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(port)); =20 val =3D 0; - writel(val, csid->base + CSID_RDI_CTRL(vc)); + writel(val, csid->base + CSID_RDI_CTRL(port)); =20 - val =3D readl(csid->base + CSID_RDI_CFG0(vc)); + val =3D readl(csid->base + CSID_RDI_CFG0(port)); if (enable) val |=3D RDI_CFG0_ENABLE; else val &=3D ~RDI_CFG0_ENABLE; - writel(val, csid->base + CSID_RDI_CFG0(vc)); + writel(val, csid->base + CSID_RDI_CFG0(port)); } =20 static void csid_configure_stream(struct csid_device *csid, u8 enable) @@ -290,11 +290,11 @@ static void csid_configure_stream(struct csid_device = *csid, u8 enable) =20 __csid_configure_top(csid); =20 - /* Loop through all enabled VCs and configure stream for each */ + /* Loop through all enabled ports and configure a stream for each */ for (i =3D 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); } } --=20 2.52.0 From nobody Mon Jun 15 01:54:19 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4F123A9D92; Tue, 7 Apr 2026 10:35:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558107; cv=none; b=WV15FtIoIDM0/uoH8/jysO+9OQh4wemzlbzTY13XuxmYXA63sE+HzMFzlcnRFkG71zJGtAIHL1UjS5Ro0O7fiH5eqKhOLT/eSTyCKGHuYFz/tEBbRSkbAIfGgH4pdLz4I0n8RP7aFIwDEXwtdjWCOQqcwazyYzN1+jh+iE6Nff0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558107; c=relaxed/simple; bh=MJeBz0s3VcemoCjZGuG/mKj2+UW/3pCM/Y1AHVD6VxY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DllRhtX1JtuJi9ZIfgxdRki5UMfSizV6iGyghD0PKiNHPjf4jnmtcdrKmzEv14qMLWSvBNS/k1bVv9BHqaDD/G3XxVoQL15AxgNnjIr1+Tb/fiD/IAplUNQSCGJJtn8HA6BwOulmAoinQ6c2CcZVoi4dAdHqrTDgBATjymY5z7Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r0HfuMsi; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="r0HfuMsi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 081F3C2BCB0; Tue, 7 Apr 2026 10:35:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775558107; bh=MJeBz0s3VcemoCjZGuG/mKj2+UW/3pCM/Y1AHVD6VxY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=r0HfuMsiacIvn8RYPQ7HhG7EvEbNQXv3cTobTiLaD4kXQaBdYMSBsGcZctcXluEZd hL6ZF8UEyCAuyyles55sXEMJbQ8SWFU2k1kjfbhtSowrK3q9P9ZC4KpyhA7OsAGLxk aehrfY1Zxz37FdViEAMoIwB/n3T+p/usoLh7Yy/OkAY3MebK/O6DRKzc8P5mfEgE6u UeCK74Pm+Rnii7YFnwgBJc0ov07DzcLQmsnwlSHxAXWQnkFcMjtJpX4Usaz9Htk4Vr GikFQkwAwtOuRUgsMOMhDK5kO8xLvzjx756epvon1nPUY20DCrYp/jADRUoucjxiyL 7DH6vJfKzbHvQ== From: bod@kernel.org Date: Tue, 07 Apr 2026 11:34:52 +0100 Subject: [PATCH v3 2/5] media: qcom: camss: Fix RDI streaming for CSID 340 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260407-camss-rdi-fix-v3-2-08f72d1f3442@kernel.org> References: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> In-Reply-To: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Hans Verkuil , Loic Poulain , Hans Verkuil , Gjorgji Rosikopulos , Milen Mitkov , Depeng Shao , Yongsheng Li Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bryan O'Donoghue , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3352; i=bod@kernel.org; h=from:subject:message-id; bh=07KqTUJnW7DuczIx6kaVXwZN/TXvGEjkOuJ5qW2VS4E=; b=owEBbQKS/ZANAwAKASJxO7Ohjcg6AcsmYgBp1N3OgxaDnr4obNPic3ia64/Xd8u2aqveo5z6X cJNLvfi0SmJAjMEAAEKAB0WIQTmk/sqq6Nt4Rerb7QicTuzoY3IOgUCadTdzgAKCRAicTuzoY3I OhL1EACA1EvVuAaTAmjBMxY6wwln9S0t1MgvFPO99ttGiuxGaN2yY+8AdxAWERDBvm71hzJ1uJ3 Vb2CdCGothrzBGVdhOj+I7hMBbdV7GuXeNNV4+sc9y3/QpNviUz9THBrRS24Rxmh4I8zdCkv5mi OeP32H7XFiDbr0mp92tEXW1EQEP7IIUVECKjg8iIQWecX0W/GnTWwrKSB1t3h/180KYl7/Vrlxu 7iB/MoHZrDrgNNc4YqYbm0MRYPn7qdGwV+SDH4af4ZJ7mLQhXRedP47vs0NGi1vWJ1kINVC0sMm XfDcdcZLWbCDEpfMJY8BOk0+uCn2JFsGW2CyxKOLFUPsCcVu+JKbNxbnkSLfsW4ddVAa4F7WVEX 5seG2dnwDx4lRaVOwNTAdIKP+HpXERDRs2x6khDMcmjNupW8mEawQzPdW65ROKwV1wm/8t7m+pP slrY96zMUVQsx2oSb9W3vdsgW7PnkoJU376fuexY9m2FzODKDOyWIgCa0HudCH0FTyT+BnV0wOe GMicTBPTcXPMgjHuhcyW/s2faMS1aOX5Z3dhR9EnCCB+y9mwjKiqG2bMfGLBawYa9VibwFo8VpE QjO+cYH+mGREc1ZUCzxPjEOdubF4Qa9xXawPUCEjfHqUDYB3+wF/T/nJ7+4/036HcxabgUX+G53 MHjoqnDSepeMH1Q== X-Developer-Key: i=bod@kernel.org; a=openpgp; fpr=E693FB2AABA36DE117AB6FB422713BB3A18DC83A From: Bryan O'Donoghue 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 =3D 0 on CSIDn:RDI0 to VFEn:RDI0 works. Fix that for CSID 340 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: f0fc808a466a ("media: qcom: camss: Add CSID 340 support") Cc: stable@vger.kernel.org Signed-off-by: Bryan O'Donoghue Reviewed-by: Loic Poulain Reviewed-by: Vladimir Zapolskiy --- drivers/media/platform/qcom/camss/camss-csid-340.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid-340.c b/drivers/m= edia/platform/qcom/camss/camss-csid-340.c index 2b50f9b96a34e..0231985746edf 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-340.c +++ b/drivers/media/platform/qcom/camss/camss-csid-340.c @@ -74,9 +74,9 @@ static void __csid_ctrl_rdi(struct csid_device *csid, int= enable, u8 rdi) writel_relaxed(!!enable, csid->base + CSID_RDI_CTRL(rdi)); } =20 -static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 vc) +static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 port, u8 vc) { - struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + vc]; + struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + port]; const struct csid_format_info *format =3D csid_get_fmt_entry(csid->res->f= ormats->formats, csid->res->formats->nformats, input_format->code); @@ -88,14 +88,14 @@ static void __csid_configure_rdi_stream(struct csid_dev= ice *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 */ - dt_id =3D vc & 0x03; + dt_id =3D port & 0x03; =20 val =3D CSID_RDI_CFG0_DECODE_FORMAT_NOP; /* only for RDI path */ val |=3D FIELD_PREP(CSID_RDI_CFG0_DT_MASK, format->data_type); @@ -105,10 +105,11 @@ static void __csid_configure_rdi_stream(struct csid_d= evice *csid, u8 enable, u8 if (enable) val |=3D CSID_RDI_CFG0_ENABLE; =20 - dev_dbg(csid->camss->dev, "CSID%u: Stream %s (dt:0x%x vc=3D%u)\n", - csid->id, enable ? "enable" : "disable", format->data_type, vc); + dev_dbg(csid->camss->dev, "CSID%u: Stream %s (dt:0x%x port=3D%u vc=3D%u)\= n", + csid->id, enable ? "enable" : "disable", format->data_type, + port, vc); =20 - writel_relaxed(val, csid->base + CSID_RDI_CFG0(vc)); + writel_relaxed(val, csid->base + CSID_RDI_CFG0(port)); } =20 static void csid_configure_stream(struct csid_device *csid, u8 enable) @@ -117,9 +118,10 @@ static void csid_configure_stream(struct csid_device *= csid, u8 enable) =20 __csid_configure_rx(csid, &csid->phy); =20 + /* Loop through all enabled ports and configure a stream for each */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) { if (csid->phy.en_vc & BIT(i)) { - __csid_configure_rdi_stream(csid, enable, i); + __csid_configure_rdi_stream(csid, enable, i, 0); __csid_ctrl_rdi(csid, enable, i); } } --=20 2.52.0 From nobody Mon Jun 15 01:54:19 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C4023A8759; Tue, 7 Apr 2026 10:35:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558111; cv=none; b=JViwvrpVOri6iWb/uTyYDO1bAofiCzY1qAGfKD0/y0cCyGGjWEBZKw4rC1XHbPLb+q63OxANFpHUC+lXgsrELdzJ7nLbkucsZKSFabyKnY+GuPHoYVJ46zcKKRMUCbWwfmCqHG9UtICdsmyP7LElOWVLYapbVTAB0LI1UpoTM5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558111; c=relaxed/simple; bh=VX8Uug46LlSSH+i+14I1o4WqRRC22e9JL7NTJkdIL2o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HVu+OVHecBYo22Qb3GIp8ZyvgBPmCnPXjz0VQqyvmhrel8kjW5b4FiaucoB6oUJSK863wcA9fHYt/7psSISBWU1xb6lK9HHwYxUkkdh4p5nH1FXXUPcLNuvBQCC52s14BdXRPqkIj6X27T2F+rtHbWYvXWunQTXlrItUZKZPxd8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ays6wbuS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ays6wbuS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BAF1BC19421; Tue, 7 Apr 2026 10:35:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775558111; bh=VX8Uug46LlSSH+i+14I1o4WqRRC22e9JL7NTJkdIL2o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ays6wbuShv+Zw46EHBOLW6t9l9KD5B6v1ZwOm1syYlosSyLAa2DsuUa3lj80YpeG2 K/CS9XGmlhYgPKFLAS7t0XQSAXp+FOJcG4/gCJ/BvbegAZmH37Kqr6wbefODArksXL 09O3p+khVvhnh/iomu3NxvUgYuaqm+2xGtGBvxYFPyA1F0fRp8+nkp/N+dAf7kHv48 cPJ1p9zf3REhyaEuKURouWauA3EO5ro7lMvHe3WB9xDaTl7v7mt/pz+XY+/IvVEIQN 0/i7LHHXs0kl46f2MU3A7U1lPY84aI5VIPfOgyEPGIm7k62MUxYZ+IYrOLeiiZR2Ny gE4T12sV/FPoA== From: bod@kernel.org Date: Tue, 07 Apr 2026 11:34:53 +0100 Subject: [PATCH v3 3/5] media: qcom: camss: Fix RDI streaming for CSID GEN2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260407-camss-rdi-fix-v3-3-08f72d1f3442@kernel.org> References: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> In-Reply-To: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Hans Verkuil , Loic Poulain , Hans Verkuil , Gjorgji Rosikopulos , Milen Mitkov , Depeng Shao , Yongsheng Li Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bryan O'Donoghue , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6024; i=bod@kernel.org; h=from:subject:message-id; bh=hrKeKKgc331oZFhBS+mM9op8nYbhOMvFpP8gYBgb9YU=; b=owEBbQKS/ZANAwAKASJxO7Ohjcg6AcsmYgBp1N3P5tQ8w2t6ZyV0Nrb8rFuZ7jbNWJdxAGedV DAUdn13pSKJAjMEAAEKAB0WIQTmk/sqq6Nt4Rerb7QicTuzoY3IOgUCadTdzwAKCRAicTuzoY3I OvofD/oCT7GJ5UxSkaP4JQw0qOGNOhvm6YBvrTF3xCj3nVRV4knEWDSme/lBSyATa/lLUN235kO Zalfp2WcS+fXH4Q/vC45I1iBluOSG90GWDf14nHLjIRjRkH5l/izPEXM3pcRU8gkM7IkQ/GUuvB 0vUVG4A2pYRRrv/GjcKZUNWfSrLXnOk3zaxN2CkIGMcTxitfYjLWtXmh727huVLbTCbIXLMeQzX W7y4Z5irRAs29uhPrOrRDzk1APxmLN0InfMuOGWEl0MRsB9ve4gNa8IZgjdjCyFxnNbforwlzBK AFCqo9Qo9K1mgfzOq9S1/QUu8RIjsPQVVKhO173vauAWK9o1HDvPyFx1u3lnG0SGqnsFFGIiX+I ZKJl1KPGY4FommSBYERofZkDIquW1VFCgZobeSUeCcQoVX+roClRoFoZDunUJ9kK6y+NImpB4Qb dV93+e6SCbuQ2RHtOgc15u0E698fNXHji4NeyWtUTwIdcJCy8VGMBpz8IKih95EdgSEK+ia4QmH 6TfuR9yI2qUtdvx2kXp9kkbCrYEP1ld/1+eZTj5WX8c23PbD2zvRZk52wi1WOBNagv+x7P6kMt+ AciECIHQTo2KyiRSUHfnWmBTV+cMKex5nBKj+2wZHmhjnCWj+Nwa4LXovA/49w8bgDwhxQuutDQ kdzhxUS+4P2RqKA== X-Developer-Key: i=bod@kernel.org; a=openpgp; fpr=E693FB2AABA36DE117AB6FB422713BB3A18DC83A From: Bryan O'Donoghue 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 =3D 0 on CSIDn:RDI0 to VFEn:RDI0 works. Fix that for CSID gen2 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: 729fc005c8e2 ("media: qcom: camss: Split testgen, RDI and RX for CSI= D 170") Cc: stable@vger.kernel.org Signed-off-by: Bryan O'Donoghue Reviewed-by: Loic Poulain Reviewed-by: Vladimir Zapolskiy --- .../media/platform/qcom/camss/camss-csid-gen2.c | 47 +++++++++++-------= ---- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen2.c b/drivers/= media/platform/qcom/camss/camss-csid-gen2.c index 2a1746dcc1c5b..eadcb2f7e3aaa 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-gen2.c +++ b/drivers/media/platform/qcom/camss/camss-csid-gen2.c @@ -203,10 +203,10 @@ static void __csid_ctrl_rdi(struct csid_device *csid,= int enable, u8 rdi) writel_relaxed(val, csid->base + CSID_RDI_CTRL(rdi)); } =20 -static void __csid_configure_testgen(struct csid_device *csid, u8 enable, = u8 vc) +static void __csid_configure_testgen(struct csid_device *csid, u8 enable, = u8 port, u8 vc) { struct csid_testgen_config *tg =3D &csid->testgen; - struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + vc]; + struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + port]; const struct csid_format_info *format =3D csid_get_fmt_entry(csid->res->f= ormats->formats, csid->res->formats->nformats, input_format->code); @@ -253,10 +253,10 @@ static void __csid_configure_testgen(struct csid_devi= ce *csid, u8 enable, u8 vc) writel_relaxed(val, csid->base + CSID_TPG_CTRL); } =20 -static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 vc) +static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 port, u8 vc) { /* Source pads matching RDI channels on hardware. Pad 1 -> RDI0, Pad 2 ->= RDI1, etc. */ - struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + vc]; + struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + port]; const struct csid_format_info *format =3D csid_get_fmt_entry(csid->res->f= ormats->formats, csid->res->formats->nformats, input_format->code); @@ -267,14 +267,14 @@ static void __csid_configure_rdi_stream(struct csid_d= evice *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 =3D vc & 0x03; + u8 dt_id =3D port & 0x03; =20 val =3D 1 << RDI_CFG0_BYTE_CNTR_EN; val |=3D 1 << RDI_CFG0_FORMAT_MEASURE_EN; @@ -284,56 +284,57 @@ static void __csid_configure_rdi_stream(struct csid_d= evice *csid, u8 enable, u8 val |=3D format->data_type << RDI_CFG0_DATA_TYPE; val |=3D vc << RDI_CFG0_VIRTUAL_CHANNEL; val |=3D dt_id << RDI_CFG0_DT_ID; - writel_relaxed(val, csid->base + CSID_RDI_CFG0(vc)); + writel_relaxed(val, csid->base + CSID_RDI_CFG0(port)); =20 /* CSID_TIMESTAMP_STB_POST_IRQ */ val =3D 2 << RDI_CFG1_TIMESTAMP_STB_SEL; - writel_relaxed(val, csid->base + CSID_RDI_CFG1(vc)); + writel_relaxed(val, csid->base + CSID_RDI_CFG1(port)); =20 val =3D 1; - writel_relaxed(val, csid->base + CSID_RDI_FRM_DROP_PERIOD(vc)); + writel_relaxed(val, csid->base + CSID_RDI_FRM_DROP_PERIOD(port)); =20 val =3D 0; - writel_relaxed(val, csid->base + CSID_RDI_FRM_DROP_PATTERN(vc)); + writel_relaxed(val, csid->base + CSID_RDI_FRM_DROP_PATTERN(port)); =20 val =3D 1; - writel_relaxed(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(vc)); + writel_relaxed(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(port)); =20 val =3D 0; - writel_relaxed(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(vc)); + writel_relaxed(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(port)); =20 val =3D 1; - writel_relaxed(val, csid->base + CSID_RDI_RPP_PIX_DROP_PERIOD(vc)); + writel_relaxed(val, csid->base + CSID_RDI_RPP_PIX_DROP_PERIOD(port)); =20 val =3D 0; - writel_relaxed(val, csid->base + CSID_RDI_RPP_PIX_DROP_PATTERN(vc)); + writel_relaxed(val, csid->base + CSID_RDI_RPP_PIX_DROP_PATTERN(port)); =20 val =3D 1; - writel_relaxed(val, csid->base + CSID_RDI_RPP_LINE_DROP_PERIOD(vc)); + writel_relaxed(val, csid->base + CSID_RDI_RPP_LINE_DROP_PERIOD(port)); =20 val =3D 0; - writel_relaxed(val, csid->base + CSID_RDI_RPP_LINE_DROP_PATTERN(vc)); + writel_relaxed(val, csid->base + CSID_RDI_RPP_LINE_DROP_PATTERN(port)); =20 val =3D 0; - writel_relaxed(val, csid->base + CSID_RDI_CTRL(vc)); + writel_relaxed(val, csid->base + CSID_RDI_CTRL(port)); =20 - val =3D readl_relaxed(csid->base + CSID_RDI_CFG0(vc)); + val =3D readl_relaxed(csid->base + CSID_RDI_CFG0(port)); val |=3D enable << RDI_CFG0_ENABLE; - writel_relaxed(val, csid->base + CSID_RDI_CFG0(vc)); + writel_relaxed(val, csid->base + CSID_RDI_CFG0(port)); } =20 static void csid_configure_stream(struct csid_device *csid, u8 enable) { struct csid_testgen_config *tg =3D &csid->testgen; u8 i; - /* Loop through all enabled VCs and configure stream for each */ + + /* Loop through all enabled ports and configure a stream for each */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) if (csid->phy.en_vc & BIT(i)) { if (tg->enabled) - __csid_configure_testgen(csid, enable, i); + __csid_configure_testgen(csid, enable, i, 0); =20 - __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); } } --=20 2.52.0 From nobody Mon Jun 15 01:54:19 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 540913A7F46; Tue, 7 Apr 2026 10:35:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558115; cv=none; b=j2qJOPwfAey5+Lr4hsVSWNqkJR8Y4R+68MnUVPkq4af2i6O8IBsiTuEZvqWSRANaOoqkjvYocv9w989N3S1gJNigskxOCwO3yePJgOFRwcvewIi6lbvGT5RsTT6wW5cnOVg9BuzD/YHvGVmldy8rpLQawBlMGdAtn3yuxPYxFew= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558115; c=relaxed/simple; bh=Iw/0ZMUWO2zJVSR27I/5GetL9KxeKyvBcMMEYB7HZ5E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JzQZZVZsC8cYKzM5gEc/DrClkrbnj6hUmQCyukRfJaoCblXatjbIPmDK7xNiLvxLOHSP8zZyJh3Dn5W+tBfAWNPACoTGURncCGueNCCTl0CfEzOaXJjtw/c7qYLGbWib9SKDDVw9aEiIRbvtFpqT3u95jCra/PfqaFx2cAm4fgo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=S6JvjKHN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="S6JvjKHN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6D36AC116C6; Tue, 7 Apr 2026 10:35:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775558115; bh=Iw/0ZMUWO2zJVSR27I/5GetL9KxeKyvBcMMEYB7HZ5E=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=S6JvjKHNM2UHtrZlMGOU0vQE8t3ifHI72a1z7Fe6yM5HQglG7VUuO6NUvq6tLJlBa C6oIibc1QsyiADbt9HDKY2ARKrBsogP/ixIw8J6jmXDOKVdKu3SVcE9ci9lTFU00Wq L7cINQ1i/jr0jshNciD/l1j2TxN60lxYwQjOV6FBb0i374pTeJajhiHt/J8Zx7jiBS Veer/m+2N6ixvd6XKVfyK/HMLaqR8HQpPK9Vz2SsH7oE33mfV4GWfy0Q0OznC3PoIP n98cnhmn98eA2q9FBwy0z/x211cXDofi5fQSmaXtlRUfFcNFNXQwW7MYMKdgv6VsL2 K1joXLljddxgg== From: bod@kernel.org Date: Tue, 07 Apr 2026 11:34:54 +0100 Subject: [PATCH v3 4/5] media: qcom: camss: Fix RDI streaming for CSID GEN3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260407-camss-rdi-fix-v3-4-08f72d1f3442@kernel.org> References: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> In-Reply-To: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Hans Verkuil , Loic Poulain , Hans Verkuil , Gjorgji Rosikopulos , Milen Mitkov , Depeng Shao , Yongsheng Li Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bryan O'Donoghue , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4312; i=bod@kernel.org; h=from:subject:message-id; bh=s60sIJaXGpdYqv090mjDLH9kxg4goK1KRKFRBCPJ730=; b=owEBbQKS/ZANAwAKASJxO7Ohjcg6AcsmYgBp1N3PPcWeqJzFYPw054Mxzqik+A0Dt6Ff1PTB1 U7pAfMy6aCJAjMEAAEKAB0WIQTmk/sqq6Nt4Rerb7QicTuzoY3IOgUCadTdzwAKCRAicTuzoY3I Oo6lD/wJdiXDtmVuFU+C2RZZO1jj6iYhJG9i695vk/L5nMyL4sPMhl/wi98I75S/SmkhAxQp1Z0 /V5FgNqZZ6yNuQT95dJKTSIUHO4FPGAB0HG0btmlpT5GlO/7tHZ7gRbzZ3WAn/H1GMCih1HMnAD ee4PaKPUHksBruSQFvK+nqvBHkPnZduwZ7DFORowJa8Vd/9c2vHGPgZHbDSFhpY9MWaaRQyWm1Y WWeD2XHKlrN9vnMlpTs2nyzDL9PPc+6WJiliLeB/ibjnPR6KBGMcMZgZtYtigTBgHtARxjl06jR MpJ9mZxIoIjEIuUr8FGJxDYUGf7Qf13nm8xtDjGu9Gs7g9dlGiotlzKKbt0QqblbMtCqnQ6EmT6 EkN2WWtxSxI+74lwscxJP1kD0yNQZMAChocFHjPLE2WhQcr7smzDL6tvQBnB3yjWWA0+iF/E1bo wk/UBkKVRV0BiQjuZ/u2ZkyzsLXYby/utqdrJj5di+7tTn0rYxiw34wVyTD7VtoHKlT+NJrPPbJ FAw7WNnWJVqhSXxCZNjMMa46RI3pP2rtBU5DbSW9o+gIH3iVbcDx97IJOSiksT4ahhct1kkAY+x UTyRxacrUlDJFG1DFQVQiJ8oGuuXxr93sjpYB+p03U754sDBSol9l0kTCFzuVfniLuPQhbjvU7i M31EY+W+WmRO1Zw== X-Developer-Key: i=bod@kernel.org; a=openpgp; fpr=E693FB2AABA36DE117AB6FB422713BB3A18DC83A From: Bryan O'Donoghue 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 =3D 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 Reviewed-by: Loic Poulain Reviewed-by: Vladimir Zapolskiy --- .../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_devi= ce *csid) writel(val, csid->camss->csid_wrapper_base + CSID_IO_PATH_CFG0(csid->id)); } =20 -static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 vc) +static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enabl= e, u8 port, u8 vc) { u32 val; u8 lane_cnt =3D csid->phy.lane_cnt; /* Source pads matching RDI channels on hardware. Pad 1 -> RDI0, Pad 2 ->= RDI1, etc. */ - struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + vc]; + struct v4l2_mbus_framefmt *input_format =3D &csid->fmt[MSM_CSID_PAD_FIRST= _SRC + port]; const struct csid_format_info *format =3D csid_get_fmt_entry(csid->res->f= ormats->formats, csid->res->formats->nformats, input_format->code); @@ -163,14 +163,14 @@ static void __csid_configure_rdi_stream(struct csid_d= evice *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 =3D vc & 0x03; + u8 dt_id =3D port & 0x03; =20 val =3D RDI_CFG0_TIMESTAMP_EN; val |=3D RDI_CFG0_TIMESTAMP_STB_SEL; @@ -180,7 +180,7 @@ static void __csid_configure_rdi_stream(struct csid_dev= ice *csid, u8 enable, u8 val |=3D format->data_type << RDI_CFG0_DT; val |=3D dt_id << RDI_CFG0_DT_ID; =20 - writel(val, csid->base + CSID_RDI_CFG0(vc)); + writel(val, csid->base + CSID_RDI_CFG0(port)); =20 val =3D RDI_CFG1_PACKING_FORMAT_MIPI; val |=3D RDI_CFG1_PIX_STORE; @@ -189,22 +189,22 @@ static void __csid_configure_rdi_stream(struct csid_d= evice *csid, u8 enable, u8 val |=3D RDI_CFG1_CROP_H_EN; val |=3D RDI_CFG1_CROP_V_EN; =20 - writel(val, csid->base + CSID_RDI_CFG1(vc)); + writel(val, csid->base + CSID_RDI_CFG1(port)); =20 val =3D 0; - writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(vc)); + writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PERIOD(port)); =20 val =3D 1; - writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(vc)); + writel(val, csid->base + CSID_RDI_IRQ_SUBSAMPLE_PATTERN(port)); =20 val =3D 0; - writel(val, csid->base + CSID_RDI_CTRL(vc)); + writel(val, csid->base + CSID_RDI_CTRL(port)); =20 - val =3D readl(csid->base + CSID_RDI_CFG0(vc)); + val =3D readl(csid->base + CSID_RDI_CFG0(port)); =20 if (enable) val |=3D RDI_CFG0_EN; - writel(val, csid->base + CSID_RDI_CFG0(vc)); + writel(val, csid->base + CSID_RDI_CFG0(port)); } =20 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) =20 __csid_configure_wrapper(csid); =20 - /* Loop through all enabled VCs and configure stream for each */ + /* Loop through all enabled ports and configure a stream for each */ for (i =3D 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); } } --=20 2.52.0 From nobody Mon Jun 15 01:54:19 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E70C3A9DAF; Tue, 7 Apr 2026 10:35:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558119; cv=none; b=q/GJsLIbWmigkD4TtETxG6EaUtB9lT45Yhyp/cCcFYrtnExgp3Z7Qk6VMlQ2fmr+xdRyyCDdvHDVCTxmIrV2TdXj29AQpcqeAWqt0FlLW19QaHdM7Tn8YBpGj0tDldyCb+qXLNve1j3QFhV9WIQb7si+zMS1cdwikmou+TfY8co= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775558119; c=relaxed/simple; bh=7lN50TbBT65Qepzs7fCawSE17YeYK9JRukIRgilMah4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CBmEeVzvGAOFRZ2pJ/yzxlUSGx9S1BVXWZTfTdyE15EzyiVAvve+dFmxgN9l0e/TkpropPyBcIWNis4jsKJBFGfvW4vV0JgZdnBYsfPSjU84LTc7X5OisdbEiE41+P3ThUrIYnbV1qJXJvyKsn7VsCknVInsZ1vR9cIMVJs1dYc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jUfrKZXQ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jUfrKZXQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9F11CC116C6; Tue, 7 Apr 2026 10:35:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775558119; bh=7lN50TbBT65Qepzs7fCawSE17YeYK9JRukIRgilMah4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jUfrKZXQ949G0fIjm/2TEWdDkDXv7BUVmHOkCLUTEAGLClIGSCuTmhh1Z5Z3xago+ TJljnR7ZA/NuMV+zds6L9gG1/hmzH8hlg1nHNe8HMG5RuL58RTYO7mKdOSDHYb3Ww9 FGJW+8UVVf1we3QK2qZR/TyYKSvNuZA9DgkO9KoYZcIboJXWzH6BCfmPd3SXCvSnzi llx6eL7h2R+FJEHw0EjglLGMuQINFRVpbMHRWBHHlEE78s93pNfWNz3hbSAx6N0N5/ W/gmboMraBgfS98w930hi/dHrDooxGXGGtsQP0V3r0L48ktb02fq01exgXCntGbT8H OxV2wc5mJqs2Q== From: bod@kernel.org Date: Tue, 07 Apr 2026 11:34:55 +0100 Subject: [PATCH v3 5/5] media: qcom: camss: csid: Rename en_vc to en_port Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260407-camss-rdi-fix-v3-5-08f72d1f3442@kernel.org> References: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> In-Reply-To: <20260407-camss-rdi-fix-v3-0-08f72d1f3442@kernel.org> To: Robert Foss , Todor Tomov , Bryan O'Donoghue , Vladimir Zapolskiy , Mauro Carvalho Chehab , Hans Verkuil , Loic Poulain , Hans Verkuil , Gjorgji Rosikopulos , Milen Mitkov , Depeng Shao , Yongsheng Li Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bryan O'Donoghue X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6522; i=bod@kernel.org; h=from:subject:message-id; bh=2byFO2j/OAVOtiUOMFVNCQ+yFp860hOkzS7MmRPim40=; b=owEBbQKS/ZANAwAKASJxO7Ohjcg6AcsmYgBp1N3P/TvVf3jkbxyHorwNxV9GPW3bEPMG5YCBo b4uxw7JdImJAjMEAAEKAB0WIQTmk/sqq6Nt4Rerb7QicTuzoY3IOgUCadTdzwAKCRAicTuzoY3I OsyLD/9m/IdZYvnJBP5iaifnhVJbc6KGfNnW+PB2z23IyS/K+L71T1NL7qTo5t+VZFhB0V7XlQP GrAQX0IKBVKkDxS2D275OinReb8tH1iRLsF9fcVMoi3ZhYctnZMWiUccmyhNDZ3H+VwjDti161q nqUzPp5azu0dWrNpoEsGXf2kVMjPPmhMUGqrPmWY2dd/F9OzGS6FbP7UmBvtWf7qTdHlFel0xeH LJcR2X1xEbExzFIwSZGNNHv3yzfe6g1MgVlrg1g1586maHimMYQnYLJaNrlXxF761BTzP3rue1C cPgOOU5Jx4eCYxb2n24K+Ow+r4ZAXntpSD7GPShTSQfxugtz/VKVf9Llcywy1sUMepx0n8CADwR YVRIj+8DCOQ1P86L2EUY0WXtFGSOEOqXB1q2W3zFSxdKnLhLdkUBvWGiRxd4sWQ6PvYaEiLVu3Z v/YdksML7epIrER9fzc2ZXxacGogDhsBXUPmPiRn/n20SZqxxn2DczIStexXekoBFXx3jGE8Zuv 88jbGlpTMytad2IBXQwiIEsY8m4lzRJ/4yagSkGqTOf+eHifKdMDyyYbvM7m3Yg1nQaQQxK/wgy Z6Mu/yeGMcOxhdd97jBiAUEOlJG9xbu50JSneB6iYkvn5K4nBjIJnltVi/to/fX8zovO1gwjeEv 0nWMmLEEFkLN2VA== X-Developer-Key: i=bod@kernel.org; a=openpgp; fpr=E693FB2AABA36DE117AB6FB422713BB3A18DC83A From: Bryan O'Donoghue The en_vc mask has always also been an en_port mask. Name the variable for what it does a bitmask of ports. When implementing v4l2 subdev streams it probably makes more sense to have tuples for port/vc mappings. Such a change right now feels like putting the cart before the horse. Sanitise the name in the interregnum. Signed-off-by: Bryan O'Donoghue Reviewed-by: Loic Poulain Reviewed-by: Vladimir Zapolskiy --- drivers/media/platform/qcom/camss/camss-csid-340.c | 2 +- drivers/media/platform/qcom/camss/camss-csid-680.c | 2 +- drivers/media/platform/qcom/camss/camss-csid-gen2.c | 4 ++-- drivers/media/platform/qcom/camss/camss-csid-gen3.c | 6 +++--- drivers/media/platform/qcom/camss/camss-csid.c | 10 +++++----- drivers/media/platform/qcom/camss/camss-csid.h | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid-340.c b/drivers/m= edia/platform/qcom/camss/camss-csid-340.c index 0231985746edf..6827d76bef5dc 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-340.c +++ b/drivers/media/platform/qcom/camss/camss-csid-340.c @@ -120,7 +120,7 @@ static void csid_configure_stream(struct csid_device *c= sid, u8 enable) =20 /* Loop through all enabled ports and configure a stream for each */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) { - if (csid->phy.en_vc & BIT(i)) { + if (csid->phy.en_port & BIT(i)) { __csid_configure_rdi_stream(csid, enable, i, 0); __csid_ctrl_rdi(csid, enable, i); } diff --git a/drivers/media/platform/qcom/camss/camss-csid-680.c b/drivers/m= edia/platform/qcom/camss/camss-csid-680.c index edf01ba79907d..e530639456ee1 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-680.c +++ b/drivers/media/platform/qcom/camss/camss-csid-680.c @@ -292,7 +292,7 @@ static void csid_configure_stream(struct csid_device *c= sid, u8 enable) =20 /* Loop through all enabled ports and configure a stream for each */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) { - if (csid->phy.en_vc & BIT(i)) { + if (csid->phy.en_port & BIT(i)) { __csid_configure_rdi_stream(csid, enable, i, 0); __csid_configure_rx(csid, &csid->phy, 0); __csid_ctrl_rdi(csid, enable, i); diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen2.c b/drivers/= media/platform/qcom/camss/camss-csid-gen2.c index eadcb2f7e3aaa..0e0c44d118a59 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-gen2.c +++ b/drivers/media/platform/qcom/camss/camss-csid-gen2.c @@ -329,7 +329,7 @@ static void csid_configure_stream(struct csid_device *c= sid, u8 enable) =20 /* Loop through all enabled ports and configure a stream for each */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) - if (csid->phy.en_vc & BIT(i)) { + if (csid->phy.en_port & BIT(i)) { if (tg->enabled) __csid_configure_testgen(csid, enable, i, 0); =20 @@ -370,7 +370,7 @@ static irqreturn_t csid_isr(int irq, void *dev) =20 /* Read and clear IRQ status for each enabled RDI channel */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) - if (csid->phy.en_vc & BIT(i)) { + if (csid->phy.en_port & BIT(i)) { val =3D readl_relaxed(csid->base + CSID_CSI2_RDIN_IRQ_STATUS(i)); writel_relaxed(val, csid->base + CSID_CSI2_RDIN_IRQ_CLEAR(i)); } diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen3.c b/drivers/= media/platform/qcom/camss/camss-csid-gen3.c index ed5c5766efd36..cb6ca470dafa8 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-gen3.c +++ b/drivers/media/platform/qcom/camss/camss-csid-gen3.c @@ -215,7 +215,7 @@ static void csid_configure_stream(struct csid_device *c= sid, u8 enable) =20 /* Loop through all enabled ports and configure a stream for each */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) - if (csid->phy.en_vc & BIT(i)) { + if (csid->phy.en_port & BIT(i)) { __csid_configure_rdi_stream(csid, enable, i, 0); __csid_configure_rx(csid, &csid->phy, 0); __csid_ctrl_rdi(csid, enable, i); @@ -263,7 +263,7 @@ static irqreturn_t csid_isr(int irq, void *dev) =20 /* Read and clear IRQ status for each enabled RDI channel */ for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) - if (csid->phy.en_vc & BIT(i)) { + if (csid->phy.en_port & BIT(i)) { val =3D readl(csid->base + CSID_CSI2_RDIN_IRQ_STATUS(i)); writel(val, csid->base + CSID_CSI2_RDIN_IRQ_CLEAR(i)); =20 @@ -309,7 +309,7 @@ static int csid_reset(struct csid_device *csid) writel(1, csid->base + CSID_TOP_IRQ_MASK); =20 for (i =3D 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) - if (csid->phy.en_vc & BIT(i)) { + if (csid->phy.en_port & BIT(i)) { writel(BIT(BUF_DONE_IRQ_STATUS_RDI_OFFSET + i), csid->base + CSID_BUF_DONE_IRQ_CLEAR); writel(IRQ_CMD_CLEAR, csid->base + CSID_IRQ_CMD); diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media= /platform/qcom/camss/camss-csid.c index ed1820488c987..71a40c2cb350b 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -1278,21 +1278,21 @@ static int csid_link_setup(struct media_entity *ent= ity, csid->phy.lane_cnt =3D lane_cfg->num_data; csid->phy.lane_assign =3D csid_get_lane_assign(lane_cfg); } - /* Decide which virtual channels to enable based on which source pads are= enabled */ + /* Decide which ports to enable based on which source pads are enabled */ if (local->flags & MEDIA_PAD_FL_SOURCE) { struct v4l2_subdev *sd =3D media_entity_to_v4l2_subdev(entity); struct csid_device *csid =3D v4l2_get_subdevdata(sd); struct device *dev =3D csid->camss->dev; =20 if (flags & MEDIA_LNK_FL_ENABLED) - csid->phy.en_vc |=3D BIT(local->index - 1); + csid->phy.en_port |=3D BIT(local->index - 1); else - csid->phy.en_vc &=3D ~BIT(local->index - 1); + csid->phy.en_port &=3D ~BIT(local->index - 1); =20 csid->phy.need_vc_update =3D true; =20 - dev_dbg(dev, "%s: Enabled CSID virtual channels mask 0x%x\n", - __func__, csid->phy.en_vc); + dev_dbg(dev, "%s: Enabled CSID ports mask 0x%x\n", + __func__, csid->phy.en_port); } =20 return 0; diff --git a/drivers/media/platform/qcom/camss/camss-csid.h b/drivers/media= /platform/qcom/camss/camss-csid.h index aedc96ed84b2f..b227923ca5c15 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.h +++ b/drivers/media/platform/qcom/camss/camss-csid.h @@ -68,7 +68,7 @@ struct csid_phy_config { u8 csiphy_id; u8 lane_cnt; u32 lane_assign; - u32 en_vc; + u32 en_port; u8 need_vc_update; }; =20 --=20 2.52.0