From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 C70943EDADB; Tue, 31 Mar 2026 10:27:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952879; cv=none; b=CyxtYkQRYJHMndmPTWyuw8t6tj5rMmoHPNEMZKOscdhroP6XJuHm3lOyh6KUwXBlmc6+4FPNs4Op0d/pzK4wHlTZVY6kdFaCfjNTtixWFTBhoStcVZ/m79X+nmErNHitzGfie0aZIVyyfVpOPdiTrANNqbc8czrWbkRchsuYwIo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952879; c=relaxed/simple; bh=qjqN3UVBZddPw7k6SBUknSInyEUjzkn/TIchzSfs5R8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=huYAD9TS2/NDBY5Jle3kMRokp75aAcaqE8tx+cKVfSjg5A0bo9jz48KSe2rbTOgJ4nOfmlVJP6gItiblWjRS12/TJ9OjBUPtMEKL1rOT8SslrWbO6+8Jn5pT5HLgWl1rX+05HuG/u+va5xAhV0GJBW968zSNzqIxbtxhXEEyyAY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=RsHTDxub; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="RsHTDxub" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 72D5610D4; Tue, 31 Mar 2026 12:26:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952793; bh=qjqN3UVBZddPw7k6SBUknSInyEUjzkn/TIchzSfs5R8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RsHTDxub8mfkK4PFbVmxwh9/Pn4FDM5HLA0+cYSulzAfToHifVig9vDhxuYicaQ1x mDkCZyH2FJ77iHSI/u5As4A+IjWuFXWTumIxuiNchs4u36Xqd0pl1XSifGvwSImSRx tK0WY7+D648JgR1jhVAGCSyH8opPmmVZvgKl0TkY= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:31 +0200 Subject: [PATCH v2 01/15] media: rzg2l-cru: Skip ICnMC configuration when ICnSVC is used 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: <20260331-b4-cru-rework-v2-1-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , stable@vger.kernel.org, Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2714; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=yMSf/Uh8D73dR+HGREaX3F3oHZpFtzwWwYAbsWP52Ro=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GnXbqkbG+4f3JMYo1XhH3+2rgfcwcfs3sh5 cicvmSZrlOJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhpwAKCRByNAaPFqFW PC1GD/4717/irmi3QQw8GvRMYixn+0OWioLYu/XHeCGs2XlzKOMgi6/XzFKJeW+43LvZzx1Cpmq vQ35G70ouKk/r0kaDsFyn45quqKBawDwyXJxoAoow9mEYqNaTh7v0Q3DrZm4LbCWRqdqSTVbpkr mTDh2VJvJGEV1dnoOdNkD/CNAY8Rr5XttMi+WpZ3uOlh/BdZrpuiEELd+YwI1BSOHIZpVKr2dz6 ZX1wMLujDteJyFdb2lDUwxNe6qyZiuSrbll2STLMn2RrLU1rKYcCTmmQj9A9ZTuckIf6Q7L7uZX qN/F4A4aewZQhO1pcynN0XJVD/CFd431KWiyggUTv5MJevb/Dd6IjpV21wwPFzHxsx2D31/zUlz Y/tY4gseSCte2YKSFIC530hO0nzjs38D3iNOUEYyemDiTz0oKaoN8s9IJbRH/l2qxXu7l0w1Ukq KPm5bsIVGYfXA0KP9ijLErkCmc3WH161bkqQ/Ki3IPPFFnP9+MVZqqzf23aLjmiHjtsoPVoPSYP lJ5xawdDqwtzInf5/BrUb7vqpetzXQjPY4D13yz/bCEgF4rAIyUb8w4Pw04kCY1z4AWaD2cxC/1 1mLQEmNzGP9KEO7y4ZA3mc3X1S4bPN82z8gPLtH1QyvwZM22TjxilHZaNipc2DfIGqufd5aZFFl laHnHLO/GoPfa+Q== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Tommaso Merciai When the CRU is configured to use ICnSVC for virtual channel mapping, as on the RZ/{G3E, V2H/P} SoC, the ICnMC register must not be programmed. Return early after setting up ICnSVC to avoid overriding the ICnMC register, which is not applicable in this mode. This prevents unintended register programming when ICnSVC is enabled. Fixes: 3c5ca0a48bb0 ("media: rzg2l-cru: Drop function pointer to configure = CSI") Cc: stable@vger.kernel.org Signed-off-by: Tommaso Merciai [Rework to not break image format programming] Signed-off-by: Jacopo Mondi Reviewed-by: Lad Prabhakar --- .../media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h | 1 + drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 17 +++++++++++--= ---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h b/dr= ivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h index a5a57369ef0e..10e62f2646d0 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h @@ -60,6 +60,7 @@ #define ICnMC_CSCTHR BIT(5) #define ICnMC_INF(x) ((x) << 16) #define ICnMC_VCSEL(x) ((x) << 22) +#define ICnMC_VCSEL_MASK GENMASK(23, 22) #define ICnMC_INF_MASK GENMASK(21, 16) =20 #define ICnMS_IA BIT(2) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 162e2ace6931..6aea7c244df1 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -262,19 +262,24 @@ static void rzg2l_cru_csi2_setup(struct rzg2l_cru_dev= *cru, u8 csi_vc) { const struct rzg2l_cru_info *info =3D cru->info; - u32 icnmc =3D ICnMC_INF(ip_fmt->datatype); + u32 icnmc =3D rzg2l_cru_read(cru, info->image_conv) & ~(ICnMC_INF_MASK | + ICnMC_VCSEL_MASK); + icnmc |=3D ICnMC_INF(ip_fmt->datatype); =20 + /* + * VC filtering goes through SVC register on G3E/V2H. + * + * FIXME: virtual channel filtering is likely broken and only VC=3D0 + * works. + */ if (cru->info->regs[ICnSVC]) { rzg2l_cru_write(cru, ICnSVCNUM, csi_vc); rzg2l_cru_write(cru, ICnSVC, ICnSVC_SVC0(0) | ICnSVC_SVC1(1) | ICnSVC_SVC2(2) | ICnSVC_SVC3(3)); + } else { + icnmc |=3D ICnMC_VCSEL(csi_vc); } =20 - icnmc |=3D rzg2l_cru_read(cru, info->image_conv) & ~ICnMC_INF_MASK; - - /* Set virtual channel CSI2 */ - icnmc |=3D ICnMC_VCSEL(csi_vc); - rzg2l_cru_write(cru, info->image_conv, icnmc); } =20 --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 C03683EE1FD; Tue, 31 Mar 2026 10:27:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952880; cv=none; b=Y0ESIf59+Po6iZd/M1Sqp09V7fo5WtDcA9oTbEbRJfCUzRy0jXXtXs6ckO4r9qITGa7P9f3ucvtx+sI+EXfZ+eGRbkfSYyYnr5HlNitSKGNmMlpGToymSgLYkrYq2zdQPgFPKFoeGg2pWOcvZIKCBH7p/fmKKVqNK/Kc7nVrRR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952880; c=relaxed/simple; bh=dKfL8SDeByCJwIxnh7io1VO4wSbjh//UYruwHmngJBo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qa1I4VwhWH/ykhiHVI94OtxTtfm5MfDQRyoP4NGJwrcolGyf69x9jY/00hUMhmWZIJzE0xjC4gWhDG74aivmTHvg2Nqbc6n7x5JvzLfng7pr5QJsmhwg0n9jfBpAlsFxPnxvazBwe+V4ONdVOaWuu5M+WelINOGCBF70HgWjUzo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=hBWD/kgd; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="hBWD/kgd" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 3659E1E29; Tue, 31 Mar 2026 12:26:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952793; bh=dKfL8SDeByCJwIxnh7io1VO4wSbjh//UYruwHmngJBo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hBWD/kgd0roI51rKdICC9UEYKlWdnc254MWuQEwg7mOJhka4JvpRXY+YK+cEVAGWg O0DAJDRF6Mm5q7glRLgS4QhgDEHpNz1wjwhoaXB+dz6q7+rZztT/PePDIlOPuJzHL0 4x/Ybw2fbHnMSw+ET1vkSkAcQ3IwnRrjK1MClKqE= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:32 +0200 Subject: [PATCH v2 02/15] media: rzg2l-cru: Use only frame end interrupts 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: <20260331-b4-cru-rework-v2-2-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2924; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=+YRGaQp4yustsSxDKUNbqJZF34xK6G1kpDy+Avav1sY=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6Gn8oqHQfIQ5DUfDsx844Sd+3BPb6zSodzz5 5FpK1lx516JAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhpwAKCRByNAaPFqFW PMr+D/9IxIb4JNsLrujQd26mO2ovpzQQ0yOPdVAZ43nRUndupu662VvcxXI/qwHNzk3RM8LRAAN Jf/knnp9KUehWA38a6LaCmQ/7kkV3/stncTcD2/epAmzCgLj+/XmkH3PhzdqYVTlDffTWZgX9oE 5yCtXz+Hs6ME0FIyRxHh+B5RTZ3/OcD0rrWeesslG/eL4KzxFwNBjn620PK5Nklx9pXCo2q8Iv4 KwAvbvxUvHBjJxNFA6p8yYrcX+7J4dlyaxjSppz/fG/OkiBJU7Zd98xxbRW11C3I9cV5LGIbBBQ lbWxK5Y8fiKdetMnrsQ3Uko2dLtan/GnH/1G6rxvpmA86jfwtk5tJfSw/YA6z5uFizAAKFXIwkg 8H4WtTCulemb7L4EmxFKNa5YlkeQaENdZxHBthhHfW6yZzaleF2QPQKXzqb3HgEUKouJu2rIUwp iaLHVxpReQipc2HP5ifB2vMqj8Zs164ma5vmhXWcCA8dKwTdzJ0QcusCa7O9bk1wejH7Oa3emSn +ZAPH9H14xofRk9FG9rYjmBrNNZOU7bs7ImUu5qPrgmb0KDws5t6FPulk5Hm/eBRhZc9JsKfbWg tnoVA3h8ix7DQY0NxRbfRF0WwaBtLjmTbu+86jDINb7WFtjQoB/g7sCtFjQXOTxZgkFQbyxFLRl bX9ucwutSVNnPWg== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Tommaso Merciai On RZ/G3E the CRU driver relies on the frame end interrupt to detect the completion of an active frame transfer when stopping DMA. Update the driver to enable only frame end interrupts (CRUnIE2_FExE), dropping the usage of the frame start interrupts, which is not required for this operations flow. Fix the interrupt status handling in the DMA stopping state by checking the correct frame end status bits (FExS) instead of the frame start one (FSxS). Add a dedicated CRUnINTS2_FExS() macro to reflect the actual register bit layout and drop the now unused CRUnIE2_FSxE() and CRUnINTS2_FSxS() macros. This ensures that DMA stopping is triggered by the intended frame end events and avoids incorrect interrupt handling. Signed-off-by: Tommaso Merciai Signed-off-by: Jacopo Mondi Reviewed-by: Lad Prabhakar --- drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h | 3 +-- drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 9 ++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h b/dr= ivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h index 10e62f2646d0..23cb50ee8e57 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h @@ -14,12 +14,11 @@ =20 #define CRUnIE_EFE BIT(17) =20 -#define CRUnIE2_FSxE(x) BIT(((x) * 3)) #define CRUnIE2_FExE(x) BIT(((x) * 3) + 1) =20 #define CRUnINTS_SFS BIT(16) =20 -#define CRUnINTS2_FSxS(x) BIT(((x) * 3)) +#define CRUnINTS2_FExS(x) BIT(((x) * 3) + 1) =20 #define CRUnRST_VRESETN BIT(0) =20 diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 6aea7c244df1..98b6afbc708d 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -440,7 +440,6 @@ static int rzg2l_cru_get_virtual_channel(struct rzg2l_c= ru_dev *cru) =20 void rzg3e_cru_enable_interrupts(struct rzg2l_cru_dev *cru) { - rzg2l_cru_write(cru, CRUnIE2, CRUnIE2_FSxE(cru->svc_channel)); rzg2l_cru_write(cru, CRUnIE2, CRUnIE2_FExE(cru->svc_channel)); } =20 @@ -700,10 +699,10 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) } =20 if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPING) { - if (irq_status & CRUnINTS2_FSxS(0) || - irq_status & CRUnINTS2_FSxS(1) || - irq_status & CRUnINTS2_FSxS(2) || - irq_status & CRUnINTS2_FSxS(3)) + if (irq_status & CRUnINTS2_FExS(0) || + irq_status & CRUnINTS2_FExS(1) || + irq_status & CRUnINTS2_FExS(2) || + irq_status & CRUnINTS2_FExS(3)) dev_dbg(cru->dev, "IRQ while state stopping\n"); return IRQ_HANDLED; } --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 BAA623EE1F1; Tue, 31 Mar 2026 10:28:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952882; cv=none; b=ehwPNKxRmTMC25u3EdQy0luXaQBIokGd/3xUOU7MyJPDtl86VFskh+LmeBI6MNT/1LwuCnZdjEc9rCEg89pXod5XoNr98oI38lHQ2o/vI0vhA4RbM21ebaVtpWU65NVgB9hbiIrRWLFhEPADiIeIREb+GeSHJW1JGtOoP4HJTHM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952882; c=relaxed/simple; bh=KVv0I4gT3T6DEvh83auSr/5g+T2D21BfsE9EbJ4sjXY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Xp2FDrEuThQ0q9U31JwTGXRwV2eIIYlFXHvFDudPhCXQOxbHqas2YqSRpwKZwB5t2Em4W7hQBukwbm4NPFAjI7R354KCrNEVdk7P+aK0+P4NyrbCRG7sLmCNmpUinRmKpw6ReC6GafWBeE0AhL0c8eWGtUE2HeWan0VAcXd4X48= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=UAvfsgcR; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="UAvfsgcR" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E2C771E5A; Tue, 31 Mar 2026 12:26:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952794; bh=KVv0I4gT3T6DEvh83auSr/5g+T2D21BfsE9EbJ4sjXY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UAvfsgcRkcj5NVxWuYS0Uws0reTt0h9EPpOWbdLrBwaJssea25YExzsQfr/j/38eN S1xcBHQ8spAOPbzxvKUPseK6BgdhhSzeER9Zk33kudqfDYp/sxtGSL3ctsqUiemsoy OUmnNw8xU5eo14wgwFuxLQpf0a4Ax+n3D0/Uw2xU= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:33 +0200 Subject: [PATCH v2 03/15] media: rzg2l-cru: Modernize locking usage with guards 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: <20260331-b4-cru-rework-v2-3-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5377; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=sVM6fsVV9v0o37r6Zx0mwuIFdFQHSaVtywq2yH1u6/c=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GnDzSbOP4Yh+T/30y/q1PakaShGS4w8RB9f i7AUfdP/vSJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhpwAKCRByNAaPFqFW PKJmEACwEIG2a/S3hJCH+HofCwLXTS746tVQ61GuBQKvE5NRtVyFEupe48J3DctBdmKJNpIq9Sa HTibygbw7k7cChW6zyztjzQJnt9rZKQoarW06d8Xlq5VkKGxbL0Ql741z4BrFYkmn1xwPKh8x0j z8KP2ilZA5XT3w+socPO3iGZMdiEXG6fbqM+Z343qXYOyREeFGTA/DKMHaWVxLhCIxTDPPYz0RK 0eC+IdPZCKmnyU5CPT8aM89L+Y8C6aGdEOtxDMBmO5+VIgAwTxMYLyVR1RvHw322hicuAfaZLfs BIyIr9CHx/dt9wW2e9vF/q34bmewPnbwvFdSZj8whxMTIMBr/k6QS4lfHcRZspiSIGFIu3Ey2wM 8Uyo95XiiI1JqoQlbGUnqwWoYe/8yeH2ETVcVl28X4YBOBOtN19A2GSOoUdzzmPhMcLUXrtUeRc RzA/sejm5kPT61K7ilrXy+ldvy3X0PZuiJiiPiwLgq4ClWQ0OGrpJ3OK2LptBDXG9hkCt8Nmgiq N3SYdNpyVINE9B/DlyoUJqSzIsJSS5Rbddd0loW+5wTm/i1mACieTxnuO8p5FgHRW09jx5O70+T gJqiv9IPQ5yy4WVjyvVcGoKaYAOoKiemNW8sw2YbIGroKD6GxSoIil21oXy5h1gcwj6pbpbLy/U xRFODZuOIz6ecvA== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi Use more modern lock guard constructs to express the locking sequences in the rzg2l driver. Also include spinlock.h and mutex.h that were previously missing. Signed-off-by: Jacopo Mondi Reviewed-by: Lad Prabhakar Tested-by: Tommaso Merciai Reviewed-by: Tommaso Merciai Reviewed-by: Daniel Scally --- .../media/platform/renesas/rzg2l-cru/rzg2l-cru.h | 2 ++ .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 31 +++++++-----------= ---- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers= /media/platform/renesas/rzg2l-cru/rzg2l-cru.h index 3a200db15730..be4a9a4953d1 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h @@ -9,7 +9,9 @@ #define __RZG2L_CRU__ =20 #include +#include #include +#include =20 #include #include diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 98b6afbc708d..0739169f4439 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -110,10 +110,10 @@ static void return_unused_buffers(struct rzg2l_cru_de= v *cru, enum vb2_buffer_state state) { struct rzg2l_cru_buffer *buf, *node; - unsigned long flags; unsigned int i; =20 - spin_lock_irqsave(&cru->qlock, flags); + guard(spinlock_irqsave)(&cru->qlock); + for (i =3D 0; i < cru->num_buf; i++) { if (cru->queue_buf[i]) { vb2_buffer_done(&cru->queue_buf[i]->vb2_buf, @@ -126,7 +126,6 @@ static void return_unused_buffers(struct rzg2l_cru_dev = *cru, vb2_buffer_done(&buf->vb.vb2_buf, state); list_del(&buf->list); } - spin_unlock_irqrestore(&cru->qlock, flags); } =20 static int rzg2l_cru_queue_setup(struct vb2_queue *vq, unsigned int *nbuff= ers, @@ -165,13 +164,9 @@ static void rzg2l_cru_buffer_queue(struct vb2_buffer *= vb) { struct vb2_v4l2_buffer *vbuf =3D to_vb2_v4l2_buffer(vb); struct rzg2l_cru_dev *cru =3D vb2_get_drv_priv(vb->vb2_queue); - unsigned long flags; - - spin_lock_irqsave(&cru->qlock, flags); =20 + guard(spinlock_irqsave)(&cru->qlock); list_add_tail(to_buf_list(vbuf), &cru->buf_list); - - spin_unlock_irqrestore(&cru->qlock, flags); } =20 static void rzg2l_cru_set_slot_addr(struct rzg2l_cru_dev *cru, @@ -465,7 +460,6 @@ void rzg2l_cru_disable_interrupts(struct rzg2l_cru_dev = *cru) int rzg2l_cru_start_image_processing(struct rzg2l_cru_dev *cru) { struct v4l2_mbus_framefmt *fmt =3D rzg2l_cru_ip_get_src_fmt(cru); - unsigned long flags; u8 csi_vc; int ret; =20 @@ -475,7 +469,7 @@ int rzg2l_cru_start_image_processing(struct rzg2l_cru_d= ev *cru) csi_vc =3D ret; cru->svc_channel =3D csi_vc; =20 - spin_lock_irqsave(&cru->qlock, flags); + guard(spinlock_irqsave)(&cru->qlock); =20 /* Select a video input */ rzg2l_cru_write(cru, CRUnCTRL, CRUnCTRL_VINSEL(0)); @@ -492,7 +486,6 @@ int rzg2l_cru_start_image_processing(struct rzg2l_cru_d= ev *cru) /* Initialize image convert */ ret =3D rzg2l_cru_initialize_image_conv(cru, fmt, csi_vc); if (ret) { - spin_unlock_irqrestore(&cru->qlock, flags); return ret; } =20 @@ -502,8 +495,6 @@ int rzg2l_cru_start_image_processing(struct rzg2l_cru_d= ev *cru) /* Enable image processing reception */ rzg2l_cru_write(cru, ICnEN, ICnEN_ICEN); =20 - spin_unlock_irqrestore(&cru->qlock, flags); - return 0; } =20 @@ -573,16 +564,15 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) { struct rzg2l_cru_dev *cru =3D data; unsigned int handled =3D 0; - unsigned long flags; u32 irq_status; u32 amnmbs; int slot; =20 - spin_lock_irqsave(&cru->qlock, flags); + guard(spinlock_irqsave)(&cru->qlock); =20 irq_status =3D rzg2l_cru_read(cru, CRUnINTS); if (!irq_status) - goto done; + return IRQ_RETVAL(handled); =20 handled =3D 1; =20 @@ -591,14 +581,14 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) /* Nothing to do if capture status is 'RZG2L_CRU_DMA_STOPPED' */ if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPED) { dev_dbg(cru->dev, "IRQ while state stopped\n"); - goto done; + return IRQ_RETVAL(handled); } =20 /* Increase stop retries if capture status is 'RZG2L_CRU_DMA_STOPPING' */ if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPING) { if (irq_status & CRUnINTS_SFS) dev_dbg(cru->dev, "IRQ while state stopping\n"); - goto done; + return IRQ_RETVAL(handled); } =20 /* Prepare for capture and update state */ @@ -621,7 +611,7 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) if (cru->state =3D=3D RZG2L_CRU_DMA_STARTING) { if (slot !=3D 0) { dev_dbg(cru->dev, "Starting sync slot: %d\n", slot); - goto done; + return IRQ_RETVAL(handled); } =20 dev_dbg(cru->dev, "Capture start synced!\n"); @@ -646,9 +636,6 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) /* Prepare for next frame */ rzg2l_cru_fill_hw_slot(cru, slot); =20 -done: - spin_unlock_irqrestore(&cru->qlock, flags); - return IRQ_RETVAL(handled); } =20 --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 B789A3EF67D; Tue, 31 Mar 2026 10:28:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952883; cv=none; b=U7leGt7EYf6AEGV4Ihtx7tilp1B4eDzNu+NQYv0AKcpvqITWwp5qmGd8SFqAT/egIArFZHlkAEDmr549iOidmjoqvgWZhhElWDhjemE5l/ey/k3NmkIoQlP8UFHrHZaw+M2cWyqoek4hN5mrPOTZdejYusdqkYk+W0+nLbpirSI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952883; c=relaxed/simple; bh=ZTPtU/WiOSe7/sBWtLZCZ64MDdsRSjGNL46f0Wq93vo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AqKcT/PsfNmHbWe1ecgb/BKCpQnnlb0nV9trDbZd+IfBx9LzGqVCEGoTcLrGvCgGJWJAd2tKuU7Biv6DssfeyBrnkbg1byCHD20ft0IaCuFyQaFo5BrYUJMw3jsrv51g4arY1jySRYhPiIUC2Th7DCCqhEriR8bbFtFKgeHBJ60= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=eY1+SUQr; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="eY1+SUQr" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9FB311E63; Tue, 31 Mar 2026 12:26:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952795; bh=ZTPtU/WiOSe7/sBWtLZCZ64MDdsRSjGNL46f0Wq93vo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=eY1+SUQrdsVMXzNnAYDSc97EEhnTBltfKcJgcT4+ylRCxa5yajuo0QypoMK3dMdZC eHTFMhE3YV2FSPmfqbcNdd4dFqDAzxM3ZNFjFSkEFYPil/4+/RFiPJgbs0MwpLXK4Y IO+lhMT+g2Vz8lRXzRHmpSn3h3lCEWPQRZYh1nc4= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:34 +0200 Subject: [PATCH v2 04/15] media: rzg2l-cru: Use proper guard() in irq handler 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: <20260331-b4-cru-rework-v2-4-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4764; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=ugYj0aCV/XEn8nFgHcFfBuYSP9CMP9DN4nB/mzlgRr8=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6Gnp2ape08nZlm4JuPUDn5Wd0eCNJxGmJYit 4xH8N9RCaqJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhpwAKCRByNAaPFqFW PApkD/9ckOIrv1KS4wbcBXkyoAcR2SBnLBxF46H+CWJp6l+VgfIosnbYlt3fAtEwbWEOp85eGeh Qo2fmBpKgGqZ3FQaybLig3ebVL+5+p/QctlShFDXpWRp9zGJBLx3hcuoQpyDJPJnXiCoR2KtRUO yTAj6Mnn16uXzjiOlaK8IhegKTBc9YDYk4eeHw9jIkrSTUwcXpZoBYy2dk6SMhkipya8sBdPd8G cVgz0weQqxmXoLU8EJ+bUZQ0SjLKB+OiW4UMks0sTczpXT/gwDFVsnGcxOOsLxw6bfYVsHL0AW4 wDs3/HeOp7DoQpF1ALwFcmrbM2ZD1J5PAL+rWrpKo4X+wMfiSXYtJU4wn7/2cpCLE0tQclx9GzK hQi3qk+iTHi2VuCVIJBW3k4yyjKUF9YKZnyFtO2I8tF2dDW3vmg/vu3DVZBoExHYbozDvn/yX9B ihFtlapZpUZ2+CicGbDjW4HOCa7kuQhsXvVIVxjezUNYsze8DXu0lBHDA3ISS5d1I5rzsp4VEXc F2Cek9ey9ZN1jYvoFrHWGu2mq/ADZiseW6LZ9hB5dx/4nu5uS44nsGug41NhobRlWj6p8UwyJcK gAkHsQW7oreExqZ70d3QoSnVHjyomdLT37EIvpS2bUmHbkxHSkk8VQFypF3LYkDavxcm73ASaIE UQ+cGvIvTJ5GDJw== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi The irq handler uses a scoped_guard() that covers the whole function body. Replace it with a more appropriate guard() and reduce the indentation. Signed-off-by: Jacopo Mondi Reviewed-by: Lad Prabhakar Tested-by: Tommaso Merciai Reviewed-by: Tommaso Merciai Reviewed-by: Daniel Scally --- .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 104 ++++++++++-------= ---- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 0739169f4439..75928b0f48be 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -670,70 +670,70 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) u32 irq_status; int slot; =20 - scoped_guard(spinlock, &cru->qlock) { - irq_status =3D rzg2l_cru_read(cru, CRUnINTS2); - if (!irq_status) - return IRQ_NONE; + guard(spinlock)(&cru->qlock); =20 - dev_dbg(cru->dev, "CRUnINTS2 0x%x\n", irq_status); + irq_status =3D rzg2l_cru_read(cru, CRUnINTS2); + if (!irq_status) + return IRQ_NONE; =20 - rzg2l_cru_write(cru, CRUnINTS2, rzg2l_cru_read(cru, CRUnINTS2)); + dev_dbg(cru->dev, "CRUnINTS2 0x%x\n", irq_status); =20 - /* Nothing to do if capture status is 'RZG2L_CRU_DMA_STOPPED' */ - if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPED) { - dev_dbg(cru->dev, "IRQ while state stopped\n"); - return IRQ_HANDLED; - } + rzg2l_cru_write(cru, CRUnINTS2, rzg2l_cru_read(cru, CRUnINTS2)); =20 - if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPING) { - if (irq_status & CRUnINTS2_FExS(0) || - irq_status & CRUnINTS2_FExS(1) || - irq_status & CRUnINTS2_FExS(2) || - irq_status & CRUnINTS2_FExS(3)) - dev_dbg(cru->dev, "IRQ while state stopping\n"); - return IRQ_HANDLED; - } + /* Nothing to do if capture status is 'RZG2L_CRU_DMA_STOPPED' */ + if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPED) { + dev_dbg(cru->dev, "IRQ while state stopped\n"); + return IRQ_HANDLED; + } =20 - slot =3D rzg3e_cru_get_current_slot(cru); - if (slot < 0) - return IRQ_HANDLED; + if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPING) { + if (irq_status & CRUnINTS2_FExS(0) || + irq_status & CRUnINTS2_FExS(1) || + irq_status & CRUnINTS2_FExS(2) || + irq_status & CRUnINTS2_FExS(3)) + dev_dbg(cru->dev, "IRQ while state stopping\n"); + return IRQ_HANDLED; + } =20 - dev_dbg(cru->dev, "Current written slot: %d\n", slot); - cru->buf_addr[slot] =3D 0; - - /* - * To hand buffers back in a known order to userspace start - * to capture first from slot 0. - */ - if (cru->state =3D=3D RZG2L_CRU_DMA_STARTING) { - if (slot !=3D 0) { - dev_dbg(cru->dev, "Starting sync slot: %d\n", slot); - return IRQ_HANDLED; - } - dev_dbg(cru->dev, "Capture start synced!\n"); - cru->state =3D RZG2L_CRU_DMA_RUNNING; - } + slot =3D rzg3e_cru_get_current_slot(cru); + if (slot < 0) + return IRQ_HANDLED; =20 - /* Capture frame */ - if (cru->queue_buf[slot]) { - struct vb2_v4l2_buffer *buf =3D cru->queue_buf[slot]; - - buf->field =3D cru->format.field; - buf->sequence =3D cru->sequence; - buf->vb2_buf.timestamp =3D ktime_get_ns(); - vb2_buffer_done(&buf->vb2_buf, VB2_BUF_STATE_DONE); - cru->queue_buf[slot] =3D NULL; - } else { - /* Scratch buffer was used, dropping frame. */ - dev_dbg(cru->dev, "Dropping frame %u\n", cru->sequence); + dev_dbg(cru->dev, "Current written slot: %d\n", slot); + cru->buf_addr[slot] =3D 0; + + /* + * To hand buffers back in a known order to userspace start + * to capture first from slot 0. + */ + if (cru->state =3D=3D RZG2L_CRU_DMA_STARTING) { + if (slot !=3D 0) { + dev_dbg(cru->dev, "Starting sync slot: %d\n", slot); + return IRQ_HANDLED; } + dev_dbg(cru->dev, "Capture start synced!\n"); + cru->state =3D RZG2L_CRU_DMA_RUNNING; + } =20 - cru->sequence++; + /* Capture frame */ + if (cru->queue_buf[slot]) { + struct vb2_v4l2_buffer *buf =3D cru->queue_buf[slot]; =20 - /* Prepare for next frame */ - rzg2l_cru_fill_hw_slot(cru, slot); + buf->field =3D cru->format.field; + buf->sequence =3D cru->sequence; + buf->vb2_buf.timestamp =3D ktime_get_ns(); + vb2_buffer_done(&buf->vb2_buf, VB2_BUF_STATE_DONE); + cru->queue_buf[slot] =3D NULL; + } else { + /* Scratch buffer was used, dropping frame. */ + dev_dbg(cru->dev, "Dropping frame %u\n", cru->sequence); } =20 + cru->sequence++; + + /* Prepare for next frame */ + rzg2l_cru_fill_hw_slot(cru, slot); + return IRQ_HANDLED; } =20 --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 ADCBE3EDAC6; Tue, 31 Mar 2026 10:28:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952885; cv=none; b=IhO3oA2ta8TdTgN6qIurVvOrfula37cwz5V2AU3gg36mYTTWz/4ng3hJnaxEpXxe3GR3hPlDFeO6ykGf3T7WhNwkwNTheqFS79VEAZc7R18WkqTT3vH4vcIJtHNR3XVij0zISDCPVVChXyzRmR7xb7PFpowJ63UW4CAJEyW7Ex0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952885; c=relaxed/simple; bh=kX+ISnjO+wiRcsff0j8EClx9Y2S6Wmthb5WFQGtIgdw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bL2jDBao+zUNbfSTG1zQLNGbO7CTcwvM6IlHodbrGuOg2tDRrBMYITRLcazJnlygr/lOGO+fYI5divEL+e8wjbXO6Hrwn/saE2vGkFg37BqgvnsB6ygB9d/gDyEWZDKmspWlORcx3KKUPeanzSQ6yfjsLXLTTVPyOuob8ttR4yM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=I/ugPnnv; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="I/ugPnnv" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 575C920FF; Tue, 31 Mar 2026 12:26:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952795; bh=kX+ISnjO+wiRcsff0j8EClx9Y2S6Wmthb5WFQGtIgdw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=I/ugPnnvyn3obu7jouJ8xZW9xevFXuM+iTh23PUstfm18TRHrQDNKYacqfZ0wnKJH UCgmJun0TXryDZpEeVF8s6deW7pVAkgZmVOBaRXKTP4WsaXLH7ZI3/8wQ3sHgRKG82 eylSsNV4xwFu/8ESgQgx+u9ahI2wA5Xp6g7ryOH8= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:35 +0200 Subject: [PATCH v2 05/15] media: rzg2l-cru: Remove locking from start/stop routines 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: <20260331-b4-cru-rework-v2-5-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2737; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=Uuk7lcfbtpAjlHBBE22CWr+cqDkZ2gR9YusOOZ7JHJI=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GoQXJDm0RclbCA5qOpLwStSDFm6ehex9c1A kQyDm+Lg3iJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PDTTD/0Vk6wvKhqXOr1t1tX1tMaFOrZbNLdbV0VPcwsirtx7SQm9tFbS+EA4WZ88X2RQAx6b2An JthOobUc+VVOAb+t3ceT4ue4AYGqsDAjrKUfSxVtb2ARiPG+urXaCCxglOCufjTBsblTz4zmBAs 3gxKrA6DiZjuYeOvZ7yNOH68oXnffPhBk0uFX1vOAy6jBYczlE+gPfcqLCGodcjLra8hpe4j8WR khe7Kj9xGQj1PkbVwd4PworPQjmDyExLbKi36cmFiIKI4eIVZ14oivHrfXO8IzyhjMca2b31Yq6 x8dMtmAemnGBsBCea2n9MT961L192DDeW19SPUSHKos+d77kl1VCVKxLxkUEAbFWpfB7QKgudJj /UW1VWT6/Mrw3jdBUBNBEu6FRbf0urUcDpxxFdTwOsyOGOU0kU5jR+nFz+3EQlBdRR1wKXaNGz1 zM/k8zKnhk5aJFB95LjKLWHsFm07jTYGMHHQiMrMbYkxQcxeO+35CfzKyK93Aiye0dlu6rs9v3S UvqUBVO+BHvEp9Lkbq0aaGF5RgToo9y4R7DGbnn4WEHw5j1aO8tj2XSzXpbDX+xRDGoeruns5PX 0npmYyIfxAR5Wn+DlPDj9nhKu4dHtnoFafT1nnlFALKRgVuld91UwfwbDgJSR1LzE8lNfN71Eg7 f8RtM8ueb/NRMYg== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi The start/stop streaming routines do not need to lock the whole function body against possible concurrent accesses to the CRU buffers or hardware registers. The stop function starts by disabling interrupts, and only this portion needs to be protected not to race against a possible IRQ. Once interrupts are disabled, nothing in the video device driver can race and once the peripheral has been disabled we can release all pending buffers. Signed-off-by: Jacopo Mondi Reviewed-by: Lad Prabhakar Reviewed-by: Daniel Scally Tested-by: Tommaso Merciai Reviewed-by: Tommaso Merciai --- drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 18 +++++---------= ---- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 75928b0f48be..96c71f1357f8 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -340,23 +340,19 @@ bool rzg2l_fifo_empty(struct rzg2l_cru_dev *cru) void rzg2l_cru_stop_image_processing(struct rzg2l_cru_dev *cru) { unsigned int retries =3D 0; - unsigned long flags; u32 icnms; =20 - spin_lock_irqsave(&cru->qlock, flags); - - /* Disable and clear the interrupt */ - cru->info->disable_interrupts(cru); + scoped_guard(spinlock_irq, &cru->qlock) { + /* Disable and clear the interrupt */ + cru->info->disable_interrupts(cru); + } =20 /* Stop the operation of image conversion */ rzg2l_cru_write(cru, ICnEN, 0); =20 /* Wait for streaming to stop */ - while ((rzg2l_cru_read(cru, ICnMS) & ICnMS_IA) && retries++ < RZG2L_RETRI= ES) { - spin_unlock_irqrestore(&cru->qlock, flags); + while ((rzg2l_cru_read(cru, ICnMS) & ICnMS_IA) && retries++ < RZG2L_RETRI= ES) msleep(RZG2L_TIMEOUT_MS); - spin_lock_irqsave(&cru->qlock, flags); - } =20 icnms =3D rzg2l_cru_read(cru, ICnMS) & ICnMS_IA; if (icnms) @@ -400,8 +396,6 @@ void rzg2l_cru_stop_image_processing(struct rzg2l_cru_d= ev *cru) =20 /* Resets the image processing module */ rzg2l_cru_write(cru, CRUnRST, 0); - - spin_unlock_irqrestore(&cru->qlock, flags); } =20 static int rzg2l_cru_get_virtual_channel(struct rzg2l_cru_dev *cru) @@ -469,8 +463,6 @@ int rzg2l_cru_start_image_processing(struct rzg2l_cru_d= ev *cru) csi_vc =3D ret; cru->svc_channel =3D csi_vc; =20 - guard(spinlock_irqsave)(&cru->qlock); - /* Select a video input */ rzg2l_cru_write(cru, CRUnCTRL, CRUnCTRL_VINSEL(0)); =20 --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 912E53F0A85; Tue, 31 Mar 2026 10:28:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952885; cv=none; b=FO4Dh1vQBCODS8vZuXZkk+ocdXKWccDG2L1yLLGA7076IdkLEpiZS0AcCVM/Je7HqJFLNaxL7+gtOAc9hqte4bz9GV+etctm9/VmadSuWdMNf7VsB1iAiWEQy3EbRZRG4Pxt9zFkFySGE2PQl6BiOBWFxWGwPwLPyijHb3QTQ2s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952885; c=relaxed/simple; bh=9+DkOdmPSrP4JYMm1m74gDbtMNLLMgFNuSUFBiWA0U8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nTZz1vQQUvzq1RM1FKCAyXdL9juvZkhFFeF0LMVvCAA9ROs5vYjWwFBsiOvcCg9qpH4HfG8Nh69SDIhSX/AeUnU9Asglo0odPfdXTLiD7BiHW8M/BWUUyidqm2ZTdvwsR/CHJ7wjtyQ+F/6VrY4w+8XtbFbR+MqRA0dnbRu4XKk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=FKOI3QE2; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="FKOI3QE2" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 12FB423B9; Tue, 31 Mar 2026 12:26:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952796; bh=9+DkOdmPSrP4JYMm1m74gDbtMNLLMgFNuSUFBiWA0U8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=FKOI3QE2cEao1N+upbhcZinZ5peIDKmoX0AuxqFmMMYk0Dl0bU8sgZLSlA9drHY7j NmUVnVA8YD1zyq9x9pmwKZF5jGR1HNgTd4GYW3syxl98VW18XPUiNNjSLFTBx9/nHj i7V4iblAtbCTmjpIiIj6D+gUWkmc1/sEoX94GiTg= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:36 +0200 Subject: [PATCH v2 06/15] media: rzg2l-cru: Do not use irqsave when not needed 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: <20260331-b4-cru-rework-v2-6-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1586; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=fvrKTvFhlxX/fsq2GGPQYdxvVmmQtfy/A5/fGBE/O/Y=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GogViIbL9f/0ktxfsvsLoU2Q99rl2pDrWWo 6T2PTZnzJ2JAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PBjPD/0aBGgtwiwTZTXhSSrFspwpSqpw+sGk6KctamJf0WA6wa6ioaBF9WNkuhilZLBU+kNM6Bx wj1d+NDP2RcqUq8q51YuCp//YRQlbFfro+eiLzq7du928dqIibMkQv1heKnJr0MUajU7WFEZnjS tMMjhF2YDS2O6/S6R9GyfCcaHc7WYh7Iw3LW1m+ZXu23aP1jvkjtRpLqZrX8hzkfxPcZ31J/ulq GDlovtK3zOJl29SepeocRhjo7nWMnCH4IiYyZsrACFPC7O/eq5hqbOWSI4ecOs5iyYqkDQOzo2z IBqXFErMd3zVel3qu+ZWmmgBLyvwgm198QeetJh9y2JXLHwLlND5OK/N2kvUAGQpYRYGx9ZYm00 OYndWcKNTgTWWgZHgXY78bYW89UbkPjZTa2xNTUdpaZF6o46dJTOUjJ1LGgnWzgXumYcLzfZAmr cAcy6QBQISAsMgM8IuCadLW729StkdYk12mU+IJBkORVwU7fxsPIptUPalTPc/Fdq35UQBeUxRb 7tTOV5l/Vl516VOa/29s58Da5wHEnMOFL+yc/j/bZR24bHWcJYmqnIwsUA9I50aMObUkoDxHeql QEWVsdeRjrpNW1OFcP/U6zyrCdIbZIQkI3x4g1mewfuy18O69D5eY13H2OjlZ7TzwNksZ6+QkqZ ke/by4j56wOPsqQ== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi The return_unused_buffers() and rzg2l_cru_buffer_queue() functions are never called from an interrupt context, hence they do not need to use the irqsave version of the spinlock primitives. Signed-off-by: Jacopo Mondi Tested-by: Tommaso Merciai Reviewed-by: Tommaso Merciai Reviewed-by: Daniel Scally Reviewed-by: Lad Prabhakar --- drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 96c71f1357f8..b2d1b6a4aaaa 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -112,7 +112,7 @@ static void return_unused_buffers(struct rzg2l_cru_dev = *cru, struct rzg2l_cru_buffer *buf, *node; unsigned int i; =20 - guard(spinlock_irqsave)(&cru->qlock); + guard(spinlock_irq)(&cru->qlock); =20 for (i =3D 0; i < cru->num_buf; i++) { if (cru->queue_buf[i]) { @@ -165,7 +165,7 @@ static void rzg2l_cru_buffer_queue(struct vb2_buffer *v= b) struct vb2_v4l2_buffer *vbuf =3D to_vb2_v4l2_buffer(vb); struct rzg2l_cru_dev *cru =3D vb2_get_drv_priv(vb->vb2_queue); =20 - guard(spinlock_irqsave)(&cru->qlock); + guard(spinlock_irq)(&cru->qlock); list_add_tail(to_buf_list(vbuf), &cru->buf_list); } =20 --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 518793EE1D1; Tue, 31 Mar 2026 10:28:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952887; cv=none; b=Qz+VGJogfwt35/LwzD2y9imxoM6u+TjqMQ1n1JOUOQu/ig1ltjnnisNPyn5SnfcpkFKjVYAYr1EF2skFZTbc0WBGW8rOq+LispYw1kRQ5QFbQNP9hAeNeTWB6nszJRKjLFWfYngSq1mQe2bLNifyyIJtFDEJe7BODqGaJacRYdU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952887; c=relaxed/simple; bh=7xuKiQfXgTPjE0z6KBnOmpGIap5q6NxAqZ9TNd1vHNw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OWn/dgisaOv9kY2u1M8PhnGtCgif8WDTAfdLTyU+/BOvUUHdT3AdO4D+BdiuLCUj/qUlvQBKEDi6D1voO8wCKH/qlLWlJlr+j1+GIptwcnh3ERmTHzIBm//VPKwaTaELfPm3Po4VY70UpiF/a8wpyWtO/D7AUiRuRGHbcv/yhy8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=bK1y72IS; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="bK1y72IS" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C07E02443; Tue, 31 Mar 2026 12:26:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952797; bh=7xuKiQfXgTPjE0z6KBnOmpGIap5q6NxAqZ9TNd1vHNw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bK1y72ISKaf1pWU3htcoO/gM6YlhE39gVVB6lPO/ybrFmOIDLqyikCKIkjL1M24Va uHkZpw7568rBe5TAnRLjwfA4NNM6AZ/XMKcVp6xFEkp/AvUgiGzU8YS7Koah+yT9lT cmtGw3nBnrl8orULjEkVRwdaE3QwPCsWxWhXlc70= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:37 +0200 Subject: [PATCH v2 07/15] media: rzg2l-cru: Remove wrong locking comment 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: <20260331-b4-cru-rework-v2-7-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1175; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=WM8nzRvMFvdAOBZqJ2Wu99CcuFTnda0NCrG8kZ6B910=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GorJPaxmqAK48G/uBgZ0RyclnOZnqPt9J3K OEVtIOAO1yJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PIP0D/0cHo03v40wijyVWDV6xfJHMQfJ0tqSVPC0YFCd2hgMPFeSA7Lxmu6wa1/Ug7yuSLW3iuS hnMsgwnwy+o+tR1sogBje7A4V8ANrWRd9PC4pZehd81xUs3U+Xs8GIbpPVtZsHm8axCe7IeMK4g LNpZ+14M+5FvnxwI9KxknQQPMjIgc45VeCrS/Rjf7yNLz77lqsO3K3grJOO9+uwC6/5ltp28V0g UfdjjIW6OXVTjSV1De9fev+L2Et1z7ud8cSIiZmqGeMVn9gfVxT8qTx8yqomjupNCA8ii7it03w A4eYgIgNBUwPIrHo2gv7ECEdhem4SvUQpsRBbA811md4NfeHCq2eBJVJneqDoUne2nOiOG/KRBL wMQl8C+aAgt7quF+kR2+lidqv4Lu+IHC5tE9P22jEtcQy52OF+lmFxPWJ8dtfK3AYnGIPQf5w9X 6QC0WREyRrUePGvCOzqueYMyBy+XK3Mo5Xwg2G3prtxcZyHkDlRYi0DHzZs0d2uYLR57e0N6rNW fvFujf/q+6L3BLghnLVTrlQ39uIVaT/qMLwy6CSF/9daHUJqSGgor5j9I8FQ4MeUa6vFbJDJ3BM 028XGtewsZ8mOACJ6R40+dM7I9m2QxoL7h7+3kT2pXr+F2tTRSp3egVCIWGF5zXuIT5qLHgmXR4 yM39XrtG+yEpQ/Q== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi A function documented as "need to hold qlock before calling" actually takes the lock itself. Drop the comment and prepare to replace it with proper annotations where appropriate. Signed-off-by: Jacopo Mondi Reviewed-by: Tommaso Merciai Reviewed-by: Daniel Scally Reviewed-by: Lad Prabhakar --- drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index b2d1b6a4aaaa..c49131587679 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -105,7 +105,6 @@ __rzg2l_cru_read_constant(struct rzg2l_cru_dev *cru, u3= 2 offset) __rzg2l_cru_read_constant(cru, offset) : \ __rzg2l_cru_read(cru, offset)) =20 -/* Need to hold qlock before calling */ static void return_unused_buffers(struct rzg2l_cru_dev *cru, enum vb2_buffer_state state) { --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 599393EF0A8; Tue, 31 Mar 2026 10:28:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952888; cv=none; b=WUzU5VJh+KgWRIf7R9FRyNQJssBaUHseTd3hPa1Z2G/WJwUlQuyTC/lxmvb5JoIxeWlkSDplvWM3EsI9AEngpQrC7xkQ7c75BIydpPJCCMiwI/fnMcn5WCOc5jhZvSsQYEJx119yozcq09JIvjrNrsgpvohnjHritkFrFVhOyYg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952888; c=relaxed/simple; bh=aGgOUtZpPu8D2p+9E0s/7/z6ls6yAIaHNWmJOB1YDNc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Bq/xcm/r/CwJkR4wgZFLgUgwjdG1UT0xK44F3zRnp8a0H2HGprEwITVzT8yJ1w7AxEEWdarwRc5qfGfUbaNqdt0+/GdlG7f5ufYfvtCsGJvQ8+VIj4h1oWQdFXiuyAinwA5jtWpMahoknSK1mP8JOKiTumJNw6emacGeZ2vSEM8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=vjrdCgvP; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="vjrdCgvP" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 78CBFA98; Tue, 31 Mar 2026 12:26:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952798; bh=aGgOUtZpPu8D2p+9E0s/7/z6ls6yAIaHNWmJOB1YDNc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=vjrdCgvPgnaiROsvYgs+jvlHYm6ZrKOWskd/8HOCJSLD2KpltZLh9li37QdxvZZPN 4i63cbGrlthM/oR0S9nmw7u/WvbCLFph/IwQEtAQ9xJRVeLdG6BhqMYQ7pNr1Y/vW0 KpoAV0EXhfB/CwKdoifX64GbZsspN5KsSe3yWHCs= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:38 +0200 Subject: [PATCH v2 08/15] media: rz2gl-cru: Introduce a spinlock for hw operations 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: <20260331-b4-cru-rework-v2-8-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2978; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=G5LkoSyKo5n6vye2zZ26xv3NhIWc1wpfN9tFY4VYBSw=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GoU43Z4hcFMylGwczQLk42Rh6/PX0yTENXZ bGZwrzWFsCJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PO4nD/4wV4X/XuXpV3ae8NRfxYr0BdeEEwalGKNsEhjHRZjhaqJEaLgDFePnI3v26vYp6zUVm8N y5+s7zkgmWP8df33YhcZTmJmRdBzhQ8lOKeohHQjf+Mc9W/3b5XKdafSXDtc9cPcC7awasGwSUD EJ0KKur/VyvRcKFc/1lZEDXnognV75HFF6aQ21WVKqePixUv9EC0miCtFGnbO7eToMNdApRgT3m jq1OGsemQlyjPp6KqRBhHmAYSAjgteT36vlNa49fAsfmf6AqAxNi5x8sWaneDW/5Up67HsV2TwM NLJepP6nbdKpZHbJBC6Y0KmjdWcb4V1OhGAYwLGuRc8px4XNX1EsfVPfT/HZM32YteDu6RdSDgL N/M0Puf2+Uq0x9PCUCkD/BkzooBm1JTgooSLerOomWtgKwrqRjzMWq5oWntGPygoyOYYPE00pHf tX/XDyw/jxRFsSVYkPk36xahKMDeWFzTIhLs1Mb2a/fSW+uAeMPc5Mrq6LPlyj4iVsYeKBhkkGF Gm20EAY/PoxMcZgKTqGyvTbKOquoD6fn0qd35A2yTWdX7O+doTwuJj+5Kuv8it5vdG3gyBhihY7 fKsZfa6ERSR8YInqn1z3ud8g7xVlZXokopAllZ0vI7IoDw0yHyMt3Tm/X8uc018oaqTMW3IOUbB CTevOK1Eg0VU7wA== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi The CRU driver uses a single spinlock to protect the buffers queue and the hardware operations. This single spinlock is held for the whole duration of the interrupt handler, causing all other driver's operations to freeze. Under heavy system stress conditions with userspace not providing buffers fast enough, this causes loss of frames. Prepare to re-work the driver locking by introducing (but not using yet) a new spinlock to protect the hardware registers programming. Signed-off-by: Jacopo Mondi Reviewed-by: Tommaso Merciai Reviewed-by: Daniel Scally --- drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h | 10 +++++++--- drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers= /media/platform/renesas/rzg2l-cru/rzg2l-cru.h index be4a9a4953d1..12d574182eb8 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h @@ -111,7 +111,6 @@ struct rzg2l_cru_info { * @v4l2_dev: V4L2 device * @num_buf: Holds the current number of buffers enabled * @svc_channel: SVC0/1/2/3 to use for RZ/G3E - * @buf_addr: Memory addresses where current video data is written. * @notifier: V4L2 asynchronous subdevs notifier * * @ip: Image processing subdev info @@ -120,6 +119,10 @@ struct rzg2l_cru_info { * @mdev_lock: protects the count, notifier and csi members * @pad: media pad for the video device entity * + * @hw_lock: protects the slot counter, hardware programming of + * slot addresses and the @buf_addr[] list + * @buf_addr: Memory addresses where current video data is written + * * @lock: protects @queue * @queue: vb2 buffers queue * @scratch: cpu address for scratch buffer @@ -149,8 +152,6 @@ struct rzg2l_cru_dev { u8 num_buf; =20 u8 svc_channel; - dma_addr_t buf_addr[RZG2L_CRU_HW_BUFFER_DEFAULT]; - struct v4l2_async_notifier notifier; =20 struct rzg2l_cru_ip ip; @@ -159,6 +160,9 @@ struct rzg2l_cru_dev { struct mutex mdev_lock; struct media_pad pad; =20 + spinlock_t hw_lock; + dma_addr_t buf_addr[RZG2L_CRU_HW_BUFFER_DEFAULT]; + struct mutex lock; struct vb2_queue queue; void *scratch; diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index c49131587679..b6616d54f8a3 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -843,6 +843,7 @@ int rzg2l_cru_dma_register(struct rzg2l_cru_dev *cru) mutex_init(&cru->lock); INIT_LIST_HEAD(&cru->buf_list); =20 + spin_lock_init(&cru->hw_lock); spin_lock_init(&cru->qlock); =20 cru->state =3D RZG2L_CRU_DMA_STOPPED; --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 2A1FE3F23B7; Tue, 31 Mar 2026 10:28:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952891; cv=none; b=nJsQk+wsTYP6aZEOcEzkeToXRkNW2EDTgFR9JAV11ahGl61J1rVQn6tSPE/Q3kgfQSH194V2Q42gnNEdWAqufuMpxQsVIXu4HCh3pafkUYH7U2tX8iY/vvtulvdjo3z8b1eOFdWgrKRF/AzyQO8HC/UyVDV72xDDEGJFjGkqnX0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952891; c=relaxed/simple; bh=JhuvxZr5sOH3KpmF7NBUOHr84t3EAFBS+blvT4gf1HA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XaMrK1LoCp30agVUOUcZKq5SKHEpiYe2hegfswDxwhJYe0/TXbJZS6mXl/pMEXPfIUWzNgAdpGG38igI33FxzG+pjY1TFBagSojRYcrs5YiusFR7ou7gxBMvt0o0mb767AaJeFPDZe89p4qjgH9g1kPv+UGi41SS4v/ipXSol7U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=KEYgUoMk; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="KEYgUoMk" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 322EF10D4; Tue, 31 Mar 2026 12:26:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952798; bh=JhuvxZr5sOH3KpmF7NBUOHr84t3EAFBS+blvT4gf1HA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=KEYgUoMkcCRATyWsWnOP1NgW+/G2Xa9S0G72h5bkuux/A/or0TMmJ2D+FBYcXOIxx Ki+DTfAk0kf8EodlUnGE2zzSZBjLPV6Qi3DNHPKm4JROLlnbpzWca6WG3yQ55n8vxB nUN3twSn9AzO+wNGN0kcOvPdc5xNQegmja2E/fbQ= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:39 +0200 Subject: [PATCH v2 09/15] media: rzg2l-cru: Split hw locking from buffers 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: <20260331-b4-cru-rework-v2-9-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2812; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=scr6dlZ/9btOO7noH9KKzQJ8vft4/mEPKUiwqiSn9to=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GoBoiLzHaTKCfZp6UMZ3P/1emKcjg0kBLsx ZD3/uLmoTyJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PLw+D/4rDkfzcKD1rX1G9wPGiMT+DA8+b/dZlB6k5EUYls7T1i/9IY5fKJc9LjXur4b0GsYcCuH zNs0MrSDgT53WNpSzUPP73Nf8UjuTKiATrFMcdik1Yn5+Zq4y/sgpDdZKftfpVdwUk/BWZ1MWvw Ws4NP9JIRneDBkzEmx9LhU3DLFzRld7tLglbZsJkMc1T6fUwsTfb4V/A9FAdTC+IvBaGqMQPPnw i6HhJ2vME9TSEMpTmc4nL8GIs9cj8p00C2WtvWAmtb9mabipqVKG/Lfa2DA/5DZB+doRGa5jIHw 73BHK2r5EHNcyfXR2kc2z2qzs+K7FbiIThprLqrQx1FEQXBniVGdJ4l17N6XJPZxPaxGNEQIyvO +3AYHO+qpXMfSLuVJYXUZXzv1JFkX7+qnxntnm8Vwiyd+TZlmL81tO9YJ6jlRNJckGvYfTqCzUc 8WRE8Zv3cRkid9jqp7q0gtsi1gA4NRSe6ykQ2porvGjeXZpK6ATpcY18IRsrdr3P7BKPQJ6SJLd 8xL1Hg2HI3wzJsAzRqwBVsqnj4Z8vcrTecdWDJiGx/Xo+0oLSVWDO5XIwI8md4VEbZxvxtkgcra XV8GFjHNMJKPL34wh8rKqe4SmoDUhZbYGU6uK4tlJV+EVkahGEGcO6mFX+I1oXZdaexCVTTkZ2A Vm89n+GgAHdHh3A== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi Split the locking between a spinlock dedicated to protect the hardware slots programming (hw_lock) and one lock (qlock) to protect the queue of buffers submitted by userspace. Do not rework the locking strategy yet but start simply by splitting the locking in two. Signed-off-by: Jacopo Mondi --- .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 30 ++++++++++++------= ---- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index b6616d54f8a3..5769dbcbd084 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -111,19 +111,21 @@ static void return_unused_buffers(struct rzg2l_cru_de= v *cru, struct rzg2l_cru_buffer *buf, *node; unsigned int i; =20 - guard(spinlock_irq)(&cru->qlock); - - for (i =3D 0; i < cru->num_buf; i++) { - if (cru->queue_buf[i]) { - vb2_buffer_done(&cru->queue_buf[i]->vb2_buf, - state); - cru->queue_buf[i] =3D NULL; + scoped_guard(spinlock_irq, &cru->hw_lock) { + for (i =3D 0; i < cru->num_buf; i++) { + if (cru->queue_buf[i]) { + vb2_buffer_done(&cru->queue_buf[i]->vb2_buf, + state); + cru->queue_buf[i] =3D NULL; + } } } =20 - list_for_each_entry_safe(buf, node, &cru->buf_list, list) { - vb2_buffer_done(&buf->vb.vb2_buf, state); - list_del(&buf->list); + scoped_guard(spinlock_irq, &cru->qlock) { + list_for_each_entry_safe(buf, node, &cru->buf_list, list) { + vb2_buffer_done(&buf->vb.vb2_buf, state); + list_del(&buf->list); + } } } =20 @@ -203,6 +205,8 @@ static void rzg2l_cru_fill_hw_slot(struct rzg2l_cru_dev= *cru, int slot) =20 dev_dbg(cru->dev, "Filling HW slot: %d\n", slot); =20 + guard(spinlock)(&cru->qlock); + if (list_empty(&cru->buf_list)) { cru->queue_buf[slot] =3D NULL; phys_addr =3D cru->scratch_phys; @@ -341,7 +345,7 @@ void rzg2l_cru_stop_image_processing(struct rzg2l_cru_d= ev *cru) unsigned int retries =3D 0; u32 icnms; =20 - scoped_guard(spinlock_irq, &cru->qlock) { + scoped_guard(spinlock_irq, &cru->hw_lock) { /* Disable and clear the interrupt */ cru->info->disable_interrupts(cru); } @@ -559,7 +563,7 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) u32 amnmbs; int slot; =20 - guard(spinlock_irqsave)(&cru->qlock); + guard(spinlock_irqsave)(&cru->hw_lock); =20 irq_status =3D rzg2l_cru_read(cru, CRUnINTS); if (!irq_status) @@ -661,7 +665,7 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) u32 irq_status; int slot; =20 - guard(spinlock)(&cru->qlock); + guard(spinlock)(&cru->hw_lock); =20 irq_status =3D rzg2l_cru_read(cru, CRUnINTS2); if (!irq_status) --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 0B86E3F54A4; Tue, 31 Mar 2026 10:28:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952891; cv=none; b=WQ2FxWHJuIBKOjDmwP64j+0FSL7HmRFeuWfs6tfF90RjrPy4/wRDdUKxZDmp5PDKWkVqyhcA8y672JalJgxkalIlY2+sVGAGeWMQJgPb1jgPqYCk4+5xuW8jCZ5TEe7Eov5FuUCh37Hd4KYpvBpUU49WIuTcl8NAaYb13HX8s/w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952891; c=relaxed/simple; bh=qf2g31u0bwndi66xXFxx/Ola4B6Cn4PwKIM7cuvAdwQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=h5psKo992CvknllZkKv0r+PLXSUsgxdOOd5fARsl06idun1bnJVcSJQG6o7NigH3s9eZQ6z25Kql2RnvPwMZkbnkr3Ez2pr/O2IjRctpGTBAIkQxr4I/rzJ3FsHA4vuGJC8yCneJfqFJ7XZ5ztItZo6U0aYPWoUUcUB8lOWbXDg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=CmOsHh9m; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="CmOsHh9m" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DFD97244D; Tue, 31 Mar 2026 12:26:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952799; bh=qf2g31u0bwndi66xXFxx/Ola4B6Cn4PwKIM7cuvAdwQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CmOsHh9m2Nlyfl0gHLXBPcDwx/z0LTvsaMl1kw1RkQvQGNr2JUIqoyfYQqpnoNUGH 0JghC3cNu1w75vJDKHeYTdSdTMLQ1U7GS6CRABsGQxo+K3sh3EIv6P0yj+Zlj0/Y6x rrhnKmmV8Uv6TAqtEPGVhNBOQGaNKRwlOQ+2I0GA= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:40 +0200 Subject: [PATCH v2 10/15] media: rzg2l-cru: Manually track active slot number 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: <20260331-b4-cru-rework-v2-10-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4125; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=m18J3ltumDy3/Y8d2cVSeJ5oXxXGhI1khmxc8wX8oLs=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6Go182ZGIhwgGHPJTW/t5PlAJ8CAWk0Vkj2U TlyiKah4ImJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PJKZD/9hzzFdxisXpgSZaUT7zKFqo2J1li92mpcLBZITZVzDQxpkQ3+Z+8kQyKM9fQdaLn1vFT8 QRHXqgcblTKIPzG5Qw1TJB1x9CrgpxCETSO6NqDJKy0rZJYhw73uwVhNNKXD/1WB4vXo8aXTAbr m6Cp5I4DlE6m1N+Z5AAlrOzZYtHkKkPZsJ8PSwf1y7ihzDAfg7NYlsDjzRbuJ7ilYNvNSAZ3QOm /6XaQImYeuNpcD6Uo6Ed01tJaXNbakpq5IdkeZIVDvIpMjMHl0hjuFmZ1L2k7HRlUJ50+x+FF7D JRSFfFQ3l0ucKcBu2ETXjQOQHn9qNwJCGd23jIkbEqHNsSKgRynaPGMMfpMzQCAo3LRlkSC2oJz lMPgGOlu11fdC6yUMMG4h7wUBHv0oiZJAn5mrXYSAm0AV6gspRFD4Q++YWEhU5EK6du5yech40x byUeSXwOn31Ic1OGOcdJMyRQdPynMjFjmI3H9RqsvT67ux0hgyk5T9t+g6gTock60qLdgtf3GAC Th67042xGtlyl1P+DSiKoL/9+29wzKtdQ1jVdnXsiRztLyWeP/n9lov3F/MNRJzYhFc5quSInEs D8WlVH9jmbel3rmM7Hax4Pqq0gWjmNCQSsxiYjChjf2lZZgkPU6tEjqgxTiaoUlhi1IBBCdR0JD Po9HCp+voZB+PQQ== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi The CRU cycles over the hardware slots where the destination address for the next frame has to be programmed. The RZ/G2L version of the IP has a register that tells which is the last used slot by the hardware but, unfortunately, such register is not available on RZ/G3E and RZ/V2H(P). The driver currently compares the value of the AMnMADRSL/H register which report "the memory address which the current video data was written to" and compares it with the address programmed in the slots. This heuristic requires a bit of book keeping and proper locking. As the driver handles the FrameEnd interrupt, it's way easier to keep track of the slot that has been used by ourselves with a driver variable. Signed-off-by: Jacopo Mondi Tested-by: Tommaso Merciai Reviewed-by: Tommaso Merciai Reviewed-by: Daniel Scally Reviewed-by: Lad Prabhakar --- .../media/platform/renesas/rzg2l-cru/rzg2l-cru.h | 6 +++-- .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 31 +++---------------= ---- 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers= /media/platform/renesas/rzg2l-cru/rzg2l-cru.h index 12d574182eb8..25f17069585c 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h @@ -119,9 +119,10 @@ struct rzg2l_cru_info { * @mdev_lock: protects the count, notifier and csi members * @pad: media pad for the video device entity * - * @hw_lock: protects the slot counter, hardware programming of - * slot addresses and the @buf_addr[] list + * @hw_lock: protects the @active_slot counter, hardware programming + * of slot addresses and the @buf_addr[] list * @buf_addr: Memory addresses where current video data is written + * @active_slot: The slot in use * * @lock: protects @queue * @queue: vb2 buffers queue @@ -162,6 +163,7 @@ struct rzg2l_cru_dev { =20 spinlock_t hw_lock; dma_addr_t buf_addr[RZG2L_CRU_HW_BUFFER_DEFAULT]; + unsigned int active_slot; =20 struct mutex lock; struct vb2_queue queue; diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 5769dbcbd084..b02940369a18 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -634,31 +634,6 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) return IRQ_RETVAL(handled); } =20 -static int rzg3e_cru_get_current_slot(struct rzg2l_cru_dev *cru) -{ - u64 amnmadrs; - int slot; - - /* - * When AMnMADRSL is read, AMnMADRSH of the higher-order - * address also latches the address. - * - * AMnMADRSH must be read after AMnMADRSL has been read. - */ - amnmadrs =3D rzg2l_cru_read(cru, AMnMADRSL); - amnmadrs |=3D (u64)rzg2l_cru_read(cru, AMnMADRSH) << 32; - - /* Ensure amnmadrs is within this buffer range */ - for (slot =3D 0; slot < cru->num_buf; slot++) { - if (amnmadrs >=3D cru->buf_addr[slot] && - amnmadrs < cru->buf_addr[slot] + cru->format.sizeimage) - return slot; - } - - dev_err(cru->dev, "Invalid MB address 0x%llx (out of range)\n", amnmadrs); - return -EINVAL; -} - irqreturn_t rzg3e_cru_irq(int irq, void *data) { struct rzg2l_cru_dev *cru =3D data; @@ -690,9 +665,8 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) return IRQ_HANDLED; } =20 - slot =3D rzg3e_cru_get_current_slot(cru); - if (slot < 0) - return IRQ_HANDLED; + slot =3D cru->active_slot; + cru->active_slot =3D (cru->active_slot + 1) % cru->num_buf; =20 dev_dbg(cru->dev, "Current written slot: %d\n", slot); cru->buf_addr[slot] =3D 0; @@ -769,6 +743,7 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queu= e *vq, unsigned int count goto assert_presetn; } =20 + cru->active_slot =3D 0; cru->sequence =3D 0; =20 ret =3D rzg2l_cru_set_stream(cru, 1); --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 026DF3EC2FD; Tue, 31 Mar 2026 10:28:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952894; cv=none; b=mBuUac0ksQIXLqo/JAwdCPO4+zOecJ3Ipjtnm2rGjZTtOS4Zu98+3d16PBX3ZP6IWFdf5FxOQM3fJxYQZKOuNm4nF86sYcsRyk6T5++hajg55Pt/BlD9zI6Ygdyfswea5eitJr1ZXnZq1PZV+pcF13b5Hh7v4yCWgNNGs53r1VI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952894; c=relaxed/simple; bh=OoieGw6jzWNZjHjstsNnv/QsL4XDmWs/j7EO8XzjtSo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JS1hadBd8prfwToBr81cxxgpUluDnCoEQQvmFb6q2zTfbSly6G1dxHPBbKxaSk4FzKpCSDXMrW2cLvYDe95CK7lTXENnWNyoDAxwZEi4kgsS89PS1M28M7KFUjAlIpnhmHvWe/vgze8/98LDFoaZ4Y7ultL9a9JffHgnGUTaPDI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=iQGePsos; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="iQGePsos" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 98B0D2450; Tue, 31 Mar 2026 12:26:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952800; bh=OoieGw6jzWNZjHjstsNnv/QsL4XDmWs/j7EO8XzjtSo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=iQGePsoslXEfV9B6gn1ETnNOOkDFNWbO3xG5SNN1u9T9iUjP4Jbb47dVXL5erq8n1 T5q/hWPUnX4O03JNyXYiO6Oev4FPOAqS4yC+S6lJqjoOlHPw25e2xHL696ua0k5Bo7 i5ckkcL5neZGkYyn7c9AtEoL4XU/Dn9j+jfRY0go= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:41 +0200 Subject: [PATCH v2 11/15] media: rz2gl-cru: Return pending buffers in order 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: <20260331-b4-cru-rework-v2-11-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5845; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=A1FzSvYw84JOw3sSlYJVCkdw3sLrXGqFAB1yi5yUc3I=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6Go1zOuIloedcTIvyR5AgDpl0oGZIEbtnsU6 nE4JdnWgnCJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PFL0EACR4FfZHLbd4Csa8W8W8eHjDhRMWxGfg7EE2Kx0rY+C7bQtT4WgwcZ2euuR9qTU7zaoNKf Ib+vUwcNYuLxeLbbnSzEHsDUlDihex3vIGlKudxCwswAaGWiA5b/xVcbP0zhgvcX5IcUd1HD0RE TzsG6oezx/3mqiC/Xu62u6An8CD92+c74SiGUpnqm4vAeMvHI5mXXpI2jWYyb0Tg/ap8ggwNrf/ WNiI8nImHraBblvdp6bBdHVgTqUSHpTJOxbp/s1k6UEhSiILG02V5Xv7nPRCIA3QB4Cju1S7QkX RQjj1dyAqdpa/MAJ7pqoabafAPtSvMKxyMTLdoj4qODM1R9ujs8tzCCSJPi+3UitYmWpr+fJedh z6BvkhiZw9oxPvyKnQb3zL7KA2Rfz/i0kbj9sEUVpTIK+MxvyB9QXXLkYYp4YwZ7BCqzVeO2nqA wbXAK2PzblX0mpdHKq3H0wR5uhXQLgI/thH/lsRU0UNY1fgdWAhmR2rQ12dbG/ls4YR8gbB8/11 F5UyZ9I905ULU1HZ/uu1mrcVYVgUfMDhwydUYIuGdQBgyOP6p+nhAEjmnd4culYdKRdJUwXPXbW MBOzMsqHftawFOn0t6eokeQXm14MgNG+0UnPKjOL/Xr1n9CCdJUbFukRCGCqfoUWPLN++0821SZ RoO4mPx02EBVMeg== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi Buffers are programmed into slots in queueing order. When returning pending buffers we can't simply start from the first slot but we should actually iterate slots starting from the one is use. The rzg3e_cru_irq() handler already uses 'active_slot', make rzg2l_cru_irq() use it as well to know where to start iterating from. As the pattern of iterating over slots in order will be used for slots programming in the next patches, provide an helper macro to do that. While at it, rename return_unused_buffers() to rzg2l_cru_return_buffers(). Signed-off-by: Jacopo Mondi Tested-by: Tommaso Merciai Reviewed-by: Daniel Scally --- .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 68 +++++++++++++++---= ---- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index b02940369a18..a5197196a408 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -42,6 +42,24 @@ struct rzg2l_cru_buffer { #define to_buf_list(vb2_buffer) \ (&container_of(vb2_buffer, struct rzg2l_cru_buffer, vb)->list) =20 +/* + * The CRU hardware cycles over its slots when transferring frames. All dr= ivers + * structure that contains programming data for the slots, such as the mem= ory + * destination addresses have to be iterated as they were circular buffers. + * + * Provide here utilities to iterate over slots and the associated data. + */ +static inline unsigned int rzg2l_cru_slot_next(struct rzg2l_cru_dev *cru, + unsigned int slot) +{ + return (slot + 1) % cru->num_buf; +} + +/* Start cycling on cru slots from the one after 'start'. */ +#define for_each_cru_slot_from(cru, slot, start) \ + for (slot =3D rzg2l_cru_slot_next(cru, start); \ + slot !=3D start; slot =3D rzg2l_cru_slot_next(cru, slot)) + /* -----------------------------------------------------------------------= ------ * DMA operations */ @@ -105,28 +123,36 @@ __rzg2l_cru_read_constant(struct rzg2l_cru_dev *cru, = u32 offset) __rzg2l_cru_read_constant(cru, offset) : \ __rzg2l_cru_read(cru, offset)) =20 -static void return_unused_buffers(struct rzg2l_cru_dev *cru, - enum vb2_buffer_state state) +static void rzg2l_cru_return_buffers(struct rzg2l_cru_dev *cru, + enum vb2_buffer_state state) { struct rzg2l_cru_buffer *buf, *node; - unsigned int i; =20 scoped_guard(spinlock_irq, &cru->hw_lock) { - for (i =3D 0; i < cru->num_buf; i++) { - if (cru->queue_buf[i]) { - vb2_buffer_done(&cru->queue_buf[i]->vb2_buf, - state); - cru->queue_buf[i] =3D NULL; - } + /* Return the buffer in progress first, if not completed yet. */ + unsigned int slot =3D cru->active_slot; + + if (cru->queue_buf[slot]) { + vb2_buffer_done(&cru->queue_buf[slot]->vb2_buf, state); + cru->queue_buf[slot] =3D NULL; } - } =20 - scoped_guard(spinlock_irq, &cru->qlock) { - list_for_each_entry_safe(buf, node, &cru->buf_list, list) { - vb2_buffer_done(&buf->vb.vb2_buf, state); - list_del(&buf->list); + /* Return all the pending buffers after the active one. */ + for_each_cru_slot_from(cru, slot, cru->active_slot) { + if (!cru->queue_buf[slot]) + continue; + + vb2_buffer_done(&cru->queue_buf[slot]->vb2_buf, state); + cru->queue_buf[slot] =3D NULL; } } + + guard(spinlock_irq)(&cru->qlock); + + list_for_each_entry_safe(buf, node, &cru->buf_list, list) { + vb2_buffer_done(&buf->vb.vb2_buf, state); + list_del(&buf->list); + } } =20 static int rzg2l_cru_queue_setup(struct vb2_queue *vq, unsigned int *nbuff= ers, @@ -588,16 +614,16 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) =20 /* Prepare for capture and update state */ amnmbs =3D rzg2l_cru_read(cru, AMnMBS); - slot =3D amnmbs & AMnMBS_MBSTS; + cru->active_slot =3D amnmbs & AMnMBS_MBSTS; =20 /* * AMnMBS.MBSTS indicates the destination of Memory Bank (MB). * Recalculate to get the current transfer complete MB. */ - if (slot =3D=3D 0) + if (cru->active_slot =3D=3D 0) slot =3D cru->num_buf - 1; else - slot--; + slot =3D cru->active_slot - 1; =20 /* * To hand buffers back in a known order to userspace start @@ -666,7 +692,7 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) } =20 slot =3D cru->active_slot; - cru->active_slot =3D (cru->active_slot + 1) % cru->num_buf; + cru->active_slot =3D rzg2l_cru_slot_next(cru, cru->active_slot); =20 dev_dbg(cru->dev, "Current written slot: %d\n", slot); cru->buf_addr[slot] =3D 0; @@ -737,7 +763,7 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queu= e *vq, unsigned int count cru->scratch =3D dma_alloc_coherent(cru->dev, cru->format.sizeimage, &cru->scratch_phys, GFP_KERNEL); if (!cru->scratch) { - return_unused_buffers(cru, VB2_BUF_STATE_QUEUED); + rzg2l_cru_return_buffers(cru, VB2_BUF_STATE_QUEUED); dev_err(cru->dev, "Failed to allocate scratch buffer\n"); ret =3D -ENOMEM; goto assert_presetn; @@ -748,7 +774,7 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queu= e *vq, unsigned int count =20 ret =3D rzg2l_cru_set_stream(cru, 1); if (ret) { - return_unused_buffers(cru, VB2_BUF_STATE_QUEUED); + rzg2l_cru_return_buffers(cru, VB2_BUF_STATE_QUEUED); goto out; } =20 @@ -785,7 +811,7 @@ static void rzg2l_cru_stop_streaming_vq(struct vb2_queu= e *vq) dma_free_coherent(cru->dev, cru->format.sizeimage, cru->scratch, cru->scratch_phys); =20 - return_unused_buffers(cru, VB2_BUF_STATE_ERROR); + rzg2l_cru_return_buffers(cru, VB2_BUF_STATE_ERROR); =20 reset_control_assert(cru->presetn); clk_disable_unprepare(cru->vclk); --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 C2B423EF0C5; Tue, 31 Mar 2026 10:28:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952894; cv=none; b=kJs56cjN9IOsJid+xpqKElEBwWd7503JryV5H3jSic3EMU9al2n+F9ElWFCX8K5qtAfxZw/vJ9muCOdQy7fsc09ZsZyJbtotEhHenKLzC4hO91SPQM+90y098sZMTd4qMa+CrOtaROlbwV2M/gORaStAsMUcs02ICqmyGqqZ+Zw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952894; c=relaxed/simple; bh=zYg4t0QFqfPk2VEUXQT0ER5wde86B1SGB4VqvUVTbsI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VlorXqm+RCdHO5VHfTHXA8YqleDVaTrCVdymB6H4ieCW5ZwE5l2dbg+QBNtx2N5glSVDkAca6jtYICVZjt2wbA7y0usnELk3pdskxDNZJD/p7x5QPGYCaEQ6E1iKuEREffQLv1rswwByDsVwkLLAkI3qIjsf1hBNzF3U6+jhPQ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=AFYRF9lu; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="AFYRF9lu" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 543D22451; Tue, 31 Mar 2026 12:26:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952800; bh=zYg4t0QFqfPk2VEUXQT0ER5wde86B1SGB4VqvUVTbsI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AFYRF9lupazcQqRFnP69ibqx/oMe4UzZAZgIYcQvkN/LG70jYog0MPXawFLWu6k+6 1CP7LQl/zNQcOk+a/03Cxq1N/rmQYeXYHLQVHjk+TaJM20d50TdBuPZrGDYfUgqNvC 67zZ/E52mV8wkRax1bpllUOn0Nsnhbp+h5Hw/Dio= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:42 +0200 Subject: [PATCH v2 12/15] media: rzg2l-cru: Rework rzg2l_cru_fill_hw_slot() 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: <20260331-b4-cru-rework-v2-12-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Daniel Scally , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4933; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=f5fTjpSCrbaWr/zOJLhzz9RqGJBdVk0RDnNW9WYx95w=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GosxoxF8mNIsHRghxzX7kJg8213QQ9LJCKy HQu1ezeQR2JAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqAAKCRByNAaPFqFW PL2rEACjdZFRKHltK4TPwqjMXWiihYbWzBT5q7vcByvQgcwv57uEn1sZjxyG1MuutPr/Tu9J2z3 Xxa8BJeIdPGzb0nbv7bahhxI3IQvGdVAggAKeXlLD6M5tzKD0DGRGgSMvP+4DU/bqlEWQ+F7dTc QO9YM21v531h9mSz7KKTxL60PT8B503B0fclp08aWKJjktPAUIQZC7gkNH4/c+3VgWi9g1U0W3H lMKUaY7pH0YsVnni+QiHsegBQucfIRJCPuigFFC3AsgIGgn1o3OgGiDTH4UaWgXw4gGBGaR6Y8P mIBCR7nXX0BDIHjzwZH+H+skxdXL28RYb0MPktwVBeqFQoVsx/BI4gcvxwUYisorVMLLlhg9KVZ WNys6HszCu8osBrG2vQRevikukR56L87834Vp/xy3rxlwHgUbB2VyLnUNxbtQxeH7OyPZTErpF8 s/+Zd3xyatoaShohh2Rgr1INsY6SpFZml0iiqgqG5N4dYPC9wybuU7/sGZYBdvPFB9eXU+omWtZ oLD4DxsUYIvFt/LaHHcdkyK1JZJ4dHQelmqcpFx43H43vkkQsrG+FvUXRES5zHa+tQo4D8I5nGl cPraMOJlaBFhFFA7lAcRyo8degWOs3TMWMOLY1QEeWD+z+btyDGkjNUbQG6L+kWyrTwQ9lEv6oe 9WC09/C+cv15FjQ== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Daniel Scally The current implementation of rzg2l_cru_fill_hw_slot() results in the artificial loss of frames. At present whenever a frame-complete IRQ is received the driver fills the hardware slot that was just written to with the address of the next buffer in the driver's queue. If the queue is empty, that hardware slot's address is set to the address of the scratch buffer to enable the capture loop to keep running. There is a minimum of a two-frame delay before that slot will be written to however, and in the intervening period userspace may queue more buffers which could be used. To resolve the issue rework rzg2l_cru_fill_hw_slot() so that it iteratively fills all slots from the queue which currently do not have a buffer assigned, until the queue is empty. The scratch buffer is only resorted to in the event that the queue is empty and the next slot that will be written to does not already have a buffer assigned. Signed-off-by: Daniel Scally Signed-off-by: Jacopo Mondi --- .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 64 +++++++++++++-----= ---- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index a5197196a408..f061bee51ea8 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -214,47 +214,52 @@ static void rzg2l_cru_set_slot_addr(struct rzg2l_cru_= dev *cru, } =20 /* - * Moves a buffer from the queue to the HW slot. If no buffer is - * available use the scratch buffer. The scratch buffer is never - * returned to userspace, its only function is to enable the capture - * loop to keep running. + * Move as many buffers as possible from the queue to HW slots If no buffe= r is + * available use the scratch buffer. The scratch buffer is never returned = to + * userspace, its only function is to enable the capture loop to keep runn= ing. + * + * @cru: the CRU device + * @slot: the slot that has just completed */ static void rzg2l_cru_fill_hw_slot(struct rzg2l_cru_dev *cru, int slot) { - struct vb2_v4l2_buffer *vbuf; struct rzg2l_cru_buffer *buf; + struct vb2_v4l2_buffer *vbuf; + unsigned int next_slot; dma_addr_t phys_addr; =20 - /* A already populated slot shall never be overwritten. */ - if (WARN_ON(cru->queue_buf[slot])) - return; + lockdep_assert_held(&cru->hw_lock); =20 - dev_dbg(cru->dev, "Filling HW slot: %d\n", slot); + /* Find the next slot which hasn't a valid address programmed. */ + for_each_cru_slot_from(cru, next_slot, slot) { + if (cru->queue_buf[next_slot]) + continue; =20 - guard(spinlock)(&cru->qlock); + scoped_guard(spinlock_irqsave, &cru->qlock) { + buf =3D list_first_entry_or_null(&cru->buf_list, + struct rzg2l_cru_buffer, list); + if (buf) + list_del_init(&buf->list); + } =20 - if (list_empty(&cru->buf_list)) { - cru->queue_buf[slot] =3D NULL; - phys_addr =3D cru->scratch_phys; - } else { - /* Keep track of buffer we give to HW */ - buf =3D list_entry(cru->buf_list.next, - struct rzg2l_cru_buffer, list); - vbuf =3D &buf->vb; - list_del_init(to_buf_list(vbuf)); - cru->queue_buf[slot] =3D vbuf; + if (!buf) { + /* Direct frames to the scratch buffer. */ + phys_addr =3D cru->scratch_phys; + cru->queue_buf[next_slot] =3D NULL; + rzg2l_cru_set_slot_addr(cru, next_slot, phys_addr); + return; + } =20 - /* Setup DMA */ + vbuf =3D &buf->vb; + cru->queue_buf[next_slot] =3D vbuf; phys_addr =3D vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0); + rzg2l_cru_set_slot_addr(cru, next_slot, phys_addr); } - - rzg2l_cru_set_slot_addr(cru, slot, phys_addr); } =20 static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru) { const struct rzg2l_cru_info *info =3D cru->info; - unsigned int slot; u32 amnaxiattr; =20 /* @@ -263,8 +268,14 @@ static void rzg2l_cru_initialize_axi(struct rzg2l_cru_= dev *cru) */ rzg2l_cru_write(cru, AMnMBVALID, AMnMBVALID_MBVALID(cru->num_buf - 1)); =20 - for (slot =3D 0; slot < cru->num_buf; slot++) - rzg2l_cru_fill_hw_slot(cru, slot); + /* + * Program slot#0 with the first available buffer, if any. Pass to the + * function 'num_buf - 1' as rzg2l_cru_fill_hw_slot() calculates which + * is the next slot to program. + */ + scoped_guard(spinlock_irq, &cru->hw_lock) { + rzg2l_cru_fill_hw_slot(cru, cru->num_buf - 1); + } =20 if (info->has_stride) { u32 stride =3D cru->format.bytesperline; @@ -695,7 +706,6 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) cru->active_slot =3D rzg2l_cru_slot_next(cru, cru->active_slot); =20 dev_dbg(cru->dev, "Current written slot: %d\n", slot); - cru->buf_addr[slot] =3D 0; =20 /* * To hand buffers back in a known order to userspace start --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 DD7213F7AA1; Tue, 31 Mar 2026 10:28:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952897; cv=none; b=s/4tTS5poWTRC0y4pHHTso2vyhrQ7DVJSZIhFmlcMrpTAkys23ZwIHEBkQUp48DPJwmFAPZrXQ7AbzBIeqpL38GFtS83l0rZSwN/mx3jQRHf+KdJVkKUvsFHSIWZmQM7ablBUxIboCfcK6UHfCV+ZrkzsnIev+F44/6g32LztQU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952897; c=relaxed/simple; bh=qH4nCv8vXyo9/IPFH82Fal0ZJSpo50I0muPguZaT6k8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CiUXYGNHp+DAdI3sm3IYHZhH81+5q4RDk9DA/0rAe6UExhCgWaHV7zJbbEokKrsgW54rlos0gnkMzgqO9rngbxSE8UL0IWfLfFXf+e6/5bnP3WKBIjpmLVdpbXjLzcvmZzFjUiYEDkhFchpFv3+RQe9TcaPC34dsFMxZNhGPlPI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=QMEmwKSt; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="QMEmwKSt" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 1AB8A25B5; Tue, 31 Mar 2026 12:26:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952801; bh=qH4nCv8vXyo9/IPFH82Fal0ZJSpo50I0muPguZaT6k8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QMEmwKStJs7VvCRgcSozLd5YmmMmw/gpj4qNtlQ9+v0qsiHPC727VIisQnghe00Yg jjDYKgkVnCctR5aBAp0H/yZ3r04Suj3xlxJZ40Reu6CzxW3uuOjuxXbIyNrWdd8niO LCthb62CIiHClodMJzQlXp2vZsUIHQUF+ajWg0z0= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:43 +0200 Subject: [PATCH v2 13/15] media: rzg2l-cru: Remove the 'state' variable 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: <20260331-b4-cru-rework-v2-13-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6353; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=QxY8Z5F5lVXBXuCYF7kEh7KCYBVT9AiINb5jhs28FgY=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6Gplhmal/K0mu4J6lIZ26gzwG5S5mO6+UTEM EEcGQdCdGaJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqQAKCRByNAaPFqFW PGmbEACCItw5KabMCeXY6r3/MGulNUId0apEf8AnqTYnaKk/4y1rXBtQWbKiY2Rm+DUSUPsdeqI rh6pEDGpEPOLqeNhXdqn+GuA2tThDo5jHL6711pcbcIzwFk9NRQE0PtHTHi0p9NUPLxPM1TcVe4 r1UmALurtVs6WMzAGVNj4J27uX4CiCIk8NfmNLZ+gwono5Nb9aV8/YEE+GYgZqN/e7srjvpC1bE 8HL8Tc3kU4bPMzyiCwckpMnmi7zM6CI3WKsT9cPVWWVkAAWjSIySw7qXGPn3goKIZhe6vI7rdWE wRbNoUHFHjkQt4G0zLNBy4oertyAULRsS82U2BbWeqfwEPI5/k4/WpzwB8WvBHRMb5yOHTcMwMD gxM/wJp0c0rurNiIJMUKDfmSHWR17Uk3arddjgaQ5gsdZJO3VzY7IM4cYumzcgUAc7rJgd2UDuK PkTWaJiCO1OPwVq+UxofMywdgtQZxLenEReLFjMz/6/+p0Vp/gL+hNXMHe7cVfV5QiLoS/tsNOD AmA56I/kNgNdg0GbF4ee6e+yxr9XM2VKfhM/8SPoYiCev0a/1BN61dP6JZ3nBMmGb2jXFY5Vya1 5lSO9fKVKdLT28bxqmcPqntiJoaiXifGnuiC2hKRIt4EM4qGm/rqg31mR7f0Y9yR05W/mSa8TcP hv2FohSzKHlnCfw== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi The cru driver uses a 'state' variable for debugging purpose in the interrupt handler. The state is used to detect invalid usage conditions that are not meant to happen unless the driver has a bug in handling the stop and start conditions. Remove the state variable which seems to be a debugging leftover. Signed-off-by: Jacopo Mondi Reviewed-by: Daniel Scally --- .../media/platform/renesas/rzg2l-cru/rzg2l-cru.h | 15 ----- .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 71 +-----------------= ---- 2 files changed, 3 insertions(+), 83 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers= /media/platform/renesas/rzg2l-cru/rzg2l-cru.h index 25f17069585c..5bf334e173d2 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h @@ -38,20 +38,6 @@ enum rzg2l_csi2_pads { =20 struct rzg2l_cru_dev; =20 -/** - * enum rzg2l_cru_dma_state - DMA states - * @RZG2L_CRU_DMA_STOPPED: No operation in progress - * @RZG2L_CRU_DMA_STARTING: Capture starting up - * @RZG2L_CRU_DMA_RUNNING: Operation in progress have buffers - * @RZG2L_CRU_DMA_STOPPING: Stopping operation - */ -enum rzg2l_cru_dma_state { - RZG2L_CRU_DMA_STOPPED =3D 0, - RZG2L_CRU_DMA_STARTING, - RZG2L_CRU_DMA_RUNNING, - RZG2L_CRU_DMA_STOPPING, -}; - struct rzg2l_cru_csi { struct v4l2_async_connection *asd; struct v4l2_subdev *subdev; @@ -174,7 +160,6 @@ struct rzg2l_cru_dev { struct vb2_v4l2_buffer *queue_buf[RZG2L_CRU_HW_BUFFER_MAX]; struct list_head buf_list; unsigned int sequence; - enum rzg2l_cru_dma_state state; =20 struct v4l2_pix_format format; }; diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index f061bee51ea8..721057edca6b 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -398,8 +398,6 @@ void rzg2l_cru_stop_image_processing(struct rzg2l_cru_d= ev *cru) if (icnms) dev_err(cru->dev, "Failed stop HW, something is seriously broken\n"); =20 - cru->state =3D RZG2L_CRU_DMA_STOPPED; - /* Wait until the FIFO becomes empty */ for (retries =3D 5; retries > 0; retries--) { if (cru->info->fifo_empty(cru)) @@ -587,8 +585,6 @@ static int rzg2l_cru_set_stream(struct rzg2l_cru_dev *c= ru, int on) =20 static void rzg2l_cru_stop_streaming(struct rzg2l_cru_dev *cru) { - cru->state =3D RZG2L_CRU_DMA_STOPPING; - rzg2l_cru_set_stream(cru, 0); } =20 @@ -600,8 +596,6 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) u32 amnmbs; int slot; =20 - guard(spinlock_irqsave)(&cru->hw_lock); - irq_status =3D rzg2l_cru_read(cru, CRUnINTS); if (!irq_status) return IRQ_RETVAL(handled); @@ -610,20 +604,9 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) =20 rzg2l_cru_write(cru, CRUnINTS, rzg2l_cru_read(cru, CRUnINTS)); =20 - /* Nothing to do if capture status is 'RZG2L_CRU_DMA_STOPPED' */ - if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPED) { - dev_dbg(cru->dev, "IRQ while state stopped\n"); - return IRQ_RETVAL(handled); - } - - /* Increase stop retries if capture status is 'RZG2L_CRU_DMA_STOPPING' */ - if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPING) { - if (irq_status & CRUnINTS_SFS) - dev_dbg(cru->dev, "IRQ while state stopping\n"); - return IRQ_RETVAL(handled); - } + /* Calculate slot and prepare for new capture. */ + guard(spinlock_irqsave)(&cru->hw_lock); =20 - /* Prepare for capture and update state */ amnmbs =3D rzg2l_cru_read(cru, AMnMBS); cru->active_slot =3D amnmbs & AMnMBS_MBSTS; =20 @@ -636,20 +619,6 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) else slot =3D cru->active_slot - 1; =20 - /* - * To hand buffers back in a known order to userspace start - * to capture first from slot 0. - */ - if (cru->state =3D=3D RZG2L_CRU_DMA_STARTING) { - if (slot !=3D 0) { - dev_dbg(cru->dev, "Starting sync slot: %d\n", slot); - return IRQ_RETVAL(handled); - } - - dev_dbg(cru->dev, "Capture start synced!\n"); - cru->state =3D RZG2L_CRU_DMA_RUNNING; - } - /* Capture frame */ if (cru->queue_buf[slot]) { cru->queue_buf[slot]->field =3D cru->format.field; @@ -677,49 +646,18 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) u32 irq_status; int slot; =20 - guard(spinlock)(&cru->hw_lock); - irq_status =3D rzg2l_cru_read(cru, CRUnINTS2); if (!irq_status) return IRQ_NONE; =20 - dev_dbg(cru->dev, "CRUnINTS2 0x%x\n", irq_status); - rzg2l_cru_write(cru, CRUnINTS2, rzg2l_cru_read(cru, CRUnINTS2)); =20 - /* Nothing to do if capture status is 'RZG2L_CRU_DMA_STOPPED' */ - if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPED) { - dev_dbg(cru->dev, "IRQ while state stopped\n"); - return IRQ_HANDLED; - } - - if (cru->state =3D=3D RZG2L_CRU_DMA_STOPPING) { - if (irq_status & CRUnINTS2_FExS(0) || - irq_status & CRUnINTS2_FExS(1) || - irq_status & CRUnINTS2_FExS(2) || - irq_status & CRUnINTS2_FExS(3)) - dev_dbg(cru->dev, "IRQ while state stopping\n"); - return IRQ_HANDLED; - } - + guard(spinlock)(&cru->hw_lock); slot =3D cru->active_slot; cru->active_slot =3D rzg2l_cru_slot_next(cru, cru->active_slot); =20 dev_dbg(cru->dev, "Current written slot: %d\n", slot); =20 - /* - * To hand buffers back in a known order to userspace start - * to capture first from slot 0. - */ - if (cru->state =3D=3D RZG2L_CRU_DMA_STARTING) { - if (slot !=3D 0) { - dev_dbg(cru->dev, "Starting sync slot: %d\n", slot); - return IRQ_HANDLED; - } - dev_dbg(cru->dev, "Capture start synced!\n"); - cru->state =3D RZG2L_CRU_DMA_RUNNING; - } - /* Capture frame */ if (cru->queue_buf[slot]) { struct vb2_v4l2_buffer *buf =3D cru->queue_buf[slot]; @@ -788,7 +726,6 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queu= e *vq, unsigned int count goto out; } =20 - cru->state =3D RZG2L_CRU_DMA_STARTING; dev_dbg(cru->dev, "Starting to capture\n"); return 0; =20 @@ -861,8 +798,6 @@ int rzg2l_cru_dma_register(struct rzg2l_cru_dev *cru) spin_lock_init(&cru->hw_lock); spin_lock_init(&cru->qlock); =20 - cru->state =3D RZG2L_CRU_DMA_STOPPED; - for (i =3D 0; i < RZG2L_CRU_HW_BUFFER_MAX; i++) cru->queue_buf[i] =3D NULL; =20 --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 1D8F53F7AA9; Tue, 31 Mar 2026 10:28:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952897; cv=none; b=RGEE0q5U6JQRWBtk9Z36rZLp8dk7yJp3DsovLSF1VVSjFZ+/YxqNi2gpjxw1VojuFSpodFy7vGDh6rrvDT7PVV7Uu7MC+l74zmKLa2y3J4q0qJSAClubgo9M+nv1TbRduh0Dn3eQqCOm1n88AXp8dISEcZoLKh1U5xUb3vEmax0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952897; c=relaxed/simple; bh=87fafp0Vs8fZ27geephEAz0Fiq02SSizNzQI7pKZJgY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZlRoU4WN/2+ojnvJycxK7F1PBD/ERzje3kh4SiC8YgM4o8+WM1zSLWDzlO5/uLSLKwjN9kFSJNE33VqU2aNU46btrSgv9LQCb+s5Cgr78xSmYm2bPnGaaKM5ptJNueSK7EAwZ7Ax2U+8eNJ2uAp1l8PuASjNMZ6vscvAqFKn9m0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=beRnUmXf; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="beRnUmXf" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D66FE1E29; Tue, 31 Mar 2026 12:26:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952802; bh=87fafp0Vs8fZ27geephEAz0Fiq02SSizNzQI7pKZJgY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=beRnUmXfQf+ciqcEmkRimyoIg+QLIF2Hus7c/q1pQ3K7C2CC8TrJcQsNU7mVy8X93 lp7h/DJLsw6iAyADSzXenoZ60A41PAswaUJRPpAx9+Tas6b99ce6AX+DHj48ID7uwW tgPHEHTVJDlKRgoAYwqAcZpaM0FsFFp8yHN4ILZ4= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:44 +0200 Subject: [PATCH v2 14/15] media: rzg2l-cru: Remove debug printouts from irq 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: <20260331-b4-cru-rework-v2-14-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1900; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=87fafp0Vs8fZ27geephEAz0Fiq02SSizNzQI7pKZJgY=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GpvldPIgS+xTJ7wqWEQkM3y7iVVzhcFovSB pzItrRfu/qJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqQAKCRByNAaPFqFW POKgD/wI1TrMF3NGne+61Fsjm+uF8UrCjBTCaNR6XJQM9E4cILj0Poz26ZFNYW+O/2ftz+n4BVh G+2s8EVcRv8wAkCrJq7rtVhqMS0M12fCprXHqAlGH/6up347AYTuv0SQevlS+NLiSKgc7cPTO0t +xm6OlPV8mPifU0p9aNhGRHb9EHgKnDVPvaJFEXfxIsBECFqlJJl4dMG+DyIvzvfvsCoB631SpP tSWhicn7Jtszv3fEoOTYSH+8ylMN3UIdvocogu4mVT5qm+63UsIIr/EvDbZbzpxv6lVtXJSiRGD V+I6E2Dg0A4gzlhGbYyVVNZzVvWvhvF5o3qePxYa4z6iFALVnFlAYLd3fG1Ps5z3sOLy5vCTqQp VB2BuFzHeXYe+z3CfbpUgZvU+sq3EHqz9J+wOSqO6Lo0BdRZiLOmwB97LcekEnEAxmzMeELLd8m hWMmQAdpj+1f07yweUccMkyhk90zhLO4rpee8JX5KFKKijxY99cZP86XmWXnKS9pSOUXsJOXZki yiIKPU6L4shzNA6EUjmpPi7pGVE1gdnlHUGXJBwKZORB4Mw8gtA4OSHh29dObNmBAfo0ep0Zddz P2n1QlnSMV4Ny7Wd/MvAUwj/ByATsCl9gW3Sg/SvDo+KCIU1gRnPk9jEaOT9F+QBEq3sRP9CDqr WLezk9D2CBD3TaQ== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B Using dev_dbg() in irq handlers to debug per-frame events is marginally useful and possibly not the best idea, as using printk-based helpers introduce latencies that impact the drivers operations. If any tracing/debugging has to be performed around frame events in interrupt handlers, the tracing subsystem offers better alternatives. Drop dev_dgb() calls from the CRU interrupt handlers. Signed-off-by: Jacopo Mondi --- drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index 721057edca6b..e2073cc1afc6 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -627,9 +627,6 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) vb2_buffer_done(&cru->queue_buf[slot]->vb2_buf, VB2_BUF_STATE_DONE); cru->queue_buf[slot] =3D NULL; - } else { - /* Scratch buffer was used, dropping frame. */ - dev_dbg(cru->dev, "Dropping frame %u\n", cru->sequence); } =20 cru->sequence++; @@ -656,8 +653,6 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) slot =3D cru->active_slot; cru->active_slot =3D rzg2l_cru_slot_next(cru, cru->active_slot); =20 - dev_dbg(cru->dev, "Current written slot: %d\n", slot); - /* Capture frame */ if (cru->queue_buf[slot]) { struct vb2_v4l2_buffer *buf =3D cru->queue_buf[slot]; @@ -667,9 +662,6 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data) buf->vb2_buf.timestamp =3D ktime_get_ns(); vb2_buffer_done(&buf->vb2_buf, VB2_BUF_STATE_DONE); cru->queue_buf[slot] =3D NULL; - } else { - /* Scratch buffer was used, dropping frame. */ - dev_dbg(cru->dev, "Dropping frame %u\n", cru->sequence); } =20 cru->sequence++; --=20 2.53.0 From nobody Wed Apr 1 12:33:44 2026 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 B354F3F87FA; Tue, 31 Mar 2026 10:28:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952899; cv=none; b=LLN8usN+Wj5u0YgayuetVTkC98+O+yrC6uyNW1Qefj64/EFdRQEY6YIDsi7WwW48+X6vQQYq1MmlnoVBX5K4qB1Nhf7UpCx/8oej3tjbDlZLhcsCOe7w9ahqB34m+LKezTXFIDuMbSKtTAi2LufRxl0uSb040gCcCa+LOZIOxdo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774952899; c=relaxed/simple; bh=B7Z0qz1KWQYocWsu5+Ifr/zBqKWMWpNbiEUfrqDJ1y0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HMWij8hgVOHJOCaNGCefxWkQJyxa2jX0Wq0pknzMEIMlEGz4fX7HGrtpdyGR9CfAvh//eOKih4SCnsFAWcjCo504qhRcV902eiGXufa4Tn/QHdDC/f/JsnihTWVo4oufkw3AHYDO2/HH/kvlRpk6VDjfshJsrWqbCSXx3m4YXfI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=uGHuLUkK; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="uGHuLUkK" Received: from [100.93.44.16] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 86FEC1E5A; Tue, 31 Mar 2026 12:26:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1774952803; bh=B7Z0qz1KWQYocWsu5+Ifr/zBqKWMWpNbiEUfrqDJ1y0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=uGHuLUkKxTsTnGtpiiYF1BWIvURXijGXYVPjpChmh3J2a4oybz+s26EIj6RGUI9qH Q4zIj53OdP2fcqKtH/juUbN0+o6ZjtDuH1Kg5xQ0zd4qbiOR7RfzlZvWaY1qNrc5Uo SBAVvZL/iXoDwX/k705wYK2KlSDiAjmLKkfPzVcc= From: Jacopo Mondi Date: Tue, 31 Mar 2026 12:27:45 +0200 Subject: [PATCH v2 15/15] media: rzg2l-cru: Simplify irq return value handling 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: <20260331-b4-cru-rework-v2-15-f94b238b35d4@ideasonboard.com> References: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> In-Reply-To: <20260331-b4-cru-rework-v2-0-f94b238b35d4@ideasonboard.com> To: Mauro Carvalho Chehab , Laurent Pinchart , Biju Das , Hans Verkuil , Sakari Ailus , Tommaso Merciai Cc: Daniel Scally , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Lad Prabhakar , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1486; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=gRFkpLLIbDTTNqHG9UI0gnxHk9cmv8yF4XICpOXdbIg=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpy6GptX0NXeWwkVsBdoPnNxbbQihNQVJ2k/bNd ocdYo15KGaJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCacuhqQAKCRByNAaPFqFW PHF9D/9EG/1bQHgZrFVDNvKZA5OJlGK/QvlYAQziYV+ZWqXQ5QYLObYxht8QPLC4Pd6flhQjG/e cJxcNXfm9fHZv5tkOzZG9GaFgKR8sh6TbhUBYrB6vZyPk1ICMpB44WNRHDNhRSawwCl7UditUW5 S3ld2ExZW5oEqNO37TFmsGWF6VnTN06PVBqbvl3W0f2WPJFZMgAZ+tu1KvY3TrTLZtawuj50xgc N8TUGbMLqS6m8f0kCkcAa9yZjw/wB9Wtjfv+QNV8nhp4vClw9+dJsq4GUVwCo5zKBNwbYsLMHxR FkryAnKi70dfvrKO+M64BxWrg9LaqrOUiONuvIJV4opes8zFtIxw8i6Y7Do7JeARAHS6bJ4bTYm o8h4dqq6tdrFo545P7O1U+dylKNTWX1PglnhsTSPgpsgatoeJ7lHNWC3xcDtZKG+3kmdHReZacs rzg2rhKDnZhVu02vpQYw/wBpAyQefOCKki4fdgEoIW0ImcLLFZfm226EBPTXBTJFs0Yg6rsAEzb Yv1ep0O5oGFUfhwT1N8iy1uNspnWCsc++ALE594DgHNQP5KzkScbMTbKn/cIHiWbGm7GHSVg82r akmmM70EHnVKLXyeR8724T8AFt/bL92otYPSOZWtpUZ/Kq6+7sp9ijL0JbRPsJJqJsNMNTsK5ks B83MFJxzcL2i0Mw== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B From: Jacopo Mondi The rzg2l_cru_irq() irq handler uses a local variable to store the handler return value. Simplify it by using IRQ_NONE and IRQ_HANDLED. Signed-off-by: Jacopo Mondi Reviewed-by: Tommaso Merciai Reviewed-by: Daniel Scally --- drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drive= rs/media/platform/renesas/rzg2l-cru/rzg2l-video.c index e2073cc1afc6..3390e08cd868 100644 --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c @@ -591,16 +591,13 @@ static void rzg2l_cru_stop_streaming(struct rzg2l_cru= _dev *cru) irqreturn_t rzg2l_cru_irq(int irq, void *data) { struct rzg2l_cru_dev *cru =3D data; - unsigned int handled =3D 0; u32 irq_status; u32 amnmbs; int slot; =20 irq_status =3D rzg2l_cru_read(cru, CRUnINTS); if (!irq_status) - return IRQ_RETVAL(handled); - - handled =3D 1; + return IRQ_NONE; =20 rzg2l_cru_write(cru, CRUnINTS, rzg2l_cru_read(cru, CRUnINTS)); =20 @@ -634,7 +631,7 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data) /* Prepare for next frame */ rzg2l_cru_fill_hw_slot(cru, slot); =20 - return IRQ_RETVAL(handled); + return IRQ_HANDLED; } =20 irqreturn_t rzg3e_cru_irq(int irq, void *data) --=20 2.53.0