From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: tomm.merciai@gmail.com, linux-renesas-soc@vger.kernel.org,
linux-media@vger.kernel.org, biju.das.jz@bp.renesas.com,
prabhakar.mahadev-lad.rj@bp.renesas.com,
"Mauro Carvalho Chehab" <mchehab@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Magnus Damm" <magnus.damm@gmail.com>,
"Hans Verkuil" <hverkuil@xs4all.nl>,
"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 11/18] media: rzg2l-cru: Add register mapping support
Date: Tue, 25 Feb 2025 12:21:57 +0100 [thread overview]
Message-ID: <Z72n1XPofyYAzCKl@tom-desktop> (raw)
In-Reply-To: <20250224184416.GE6778@pendragon.ideasonboard.com>
On Mon, Feb 24, 2025 at 08:44:16PM +0200, Laurent Pinchart wrote:
> On Mon, Feb 24, 2025 at 02:46:24PM +0100, Tommaso Merciai wrote:
> > On Sun, Feb 23, 2025 at 09:52:32PM +0200, Laurent Pinchart wrote:
> > > On Fri, Feb 21, 2025 at 04:55:25PM +0100, Tommaso Merciai wrote:
> > > > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > > >
> > > > Prepare for adding support for RZ/G3E and RZ/V2HP SoCs, which have a
> > > > CRU-IP that is mostly identical to RZ/G2L but with different register
> > > > offsets and additional registers. Introduce a flexible register mapping
> > > > mechanism to handle these variations.
> > > >
> > > > Define the `rzg2l_cru_info` structure to store register mappings and
> > > > pass it as part of the OF match data. Update the read/write functions
> > > > to use indexed register offsets from `rzg2l_cru_info`, ensuring
> > > > compatibility across different SoC variants.
> > > >
> > > > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > > > Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> > > > ---
> > > > .../platform/renesas/rzg2l-cru/rzg2l-core.c | 46 ++++++++++++-
> > > > .../renesas/rzg2l-cru/rzg2l-cru-regs.h | 65 ++++++++++---------
> > > > .../platform/renesas/rzg2l-cru/rzg2l-cru.h | 4 ++
> > > > .../platform/renesas/rzg2l-cru/rzg2l-video.c | 12 ++--
> > > > 4 files changed, 92 insertions(+), 35 deletions(-)
> > > >
> > > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c
> > > > index eed9d2bd0841..abc2a979833a 100644
> > > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c
> > > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-core.c
> > > > @@ -22,6 +22,7 @@
> > > > #include <media/v4l2-mc.h>
> > > >
> > > > #include "rzg2l-cru.h"
> > > > +#include "rzg2l-cru-regs.h"
> > > >
> > > > static inline struct rzg2l_cru_dev *notifier_to_cru(struct v4l2_async_notifier *n)
> > > > {
> > > > @@ -269,6 +270,9 @@ static int rzg2l_cru_probe(struct platform_device *pdev)
> > > >
> > > > cru->dev = dev;
> > > > cru->info = of_device_get_match_data(dev);
> > > > + if (!cru->info)
> > > > + return dev_err_probe(dev, -EINVAL,
> > > > + "Failed to get OF match data\n");
> > > >
> > > > irq = platform_get_irq(pdev, 0);
> > > > if (irq < 0)
> > > > @@ -317,8 +321,48 @@ static void rzg2l_cru_remove(struct platform_device *pdev)
> > > > rzg2l_cru_dma_unregister(cru);
> > > > }
> > > >
> > > > +static const u16 rzg2l_cru_regs[] = {
> > > > + [CRUnCTRL] = 0x0,
> > > > + [CRUnIE] = 0x4,
> > > > + [CRUnINTS] = 0x8,
> > > > + [CRUnRST] = 0xc,
> > > > + [AMnMB1ADDRL] = 0x100,
> > > > + [AMnMB1ADDRH] = 0x104,
> > > > + [AMnMB2ADDRL] = 0x108,
> > > > + [AMnMB2ADDRH] = 0x10c,
> > > > + [AMnMB3ADDRL] = 0x110,
> > > > + [AMnMB3ADDRH] = 0x114,
> > > > + [AMnMB4ADDRL] = 0x118,
> > > > + [AMnMB4ADDRH] = 0x11c,
> > > > + [AMnMB5ADDRL] = 0x120,
> > > > + [AMnMB5ADDRH] = 0x124,
> > > > + [AMnMB6ADDRL] = 0x128,
> > > > + [AMnMB6ADDRH] = 0x12c,
> > > > + [AMnMB7ADDRL] = 0x130,
> > > > + [AMnMB7ADDRH] = 0x134,
> > > > + [AMnMB8ADDRL] = 0x138,
> > > > + [AMnMB8ADDRH] = 0x13c,
> > > > + [AMnMBVALID] = 0x148,
> > > > + [AMnMBS] = 0x14c,
> > > > + [AMnAXIATTR] = 0x158,
> > > > + [AMnFIFOPNTR] = 0x168,
> > > > + [AMnAXISTP] = 0x174,
> > > > + [AMnAXISTPACK] = 0x178,
> > > > + [ICnEN] = 0x200,
> > > > + [ICnMC] = 0x208,
> > > > + [ICnMS] = 0x254,
> > > > + [ICnDMR] = 0x26c,
> > > > +};
> > > > +
> > > > +static const struct rzg2l_cru_info rzgl2_cru_info = {
> > > > + .regs = rzg2l_cru_regs,
> > > > +};
> > > > +
> > > > static const struct of_device_id rzg2l_cru_of_id_table[] = {
> > > > - { .compatible = "renesas,rzg2l-cru", },
> > > > + {
> > > > + .compatible = "renesas,rzg2l-cru",
> > > > + .data = &rzgl2_cru_info,
> > > > + },
> > > > { /* sentinel */ }
> > > > };
> > > > MODULE_DEVICE_TABLE(of, rzg2l_cru_of_id_table);
> > > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h
> > > > index 1c9f22118a5d..82920db7134e 100644
> > > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h
> > > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru-regs.h
> > > > @@ -10,71 +10,76 @@
> > > >
> > > > /* HW CRU Registers Definition */
> > > >
> > > > -/* CRU Control Register */
> > > > -#define CRUnCTRL 0x0
> > > > #define CRUnCTRL_VINSEL(x) ((x) << 0)
> > > >
> > > > -/* CRU Interrupt Enable Register */
> > > > -#define CRUnIE 0x4
> > > > #define CRUnIE_EFE BIT(17)
> > > >
> > > > -/* CRU Interrupt Status Register */
> > > > -#define CRUnINTS 0x8
> > > > #define CRUnINTS_SFS BIT(16)
> > > >
> > > > -/* CRU Reset Register */
> > > > -#define CRUnRST 0xc
> > > > #define CRUnRST_VRESETN BIT(0)
> > > >
> > > > /* Memory Bank Base Address (Lower) Register for CRU Image Data */
> > > > -#define AMnMBxADDRL(x) (0x100 + ((x) * 8))
> > > > +#define AMnMBxADDRL(base, x) ((base) + (x) * 2)
> > > >
> > > > /* Memory Bank Base Address (Higher) Register for CRU Image Data */
> > > > -#define AMnMBxADDRH(x) (0x104 + ((x) * 8))
> > > > +#define AMnMBxADDRH(base, x) AMnMBxADDRL(base, x)
> > > >
> > > > -/* Memory Bank Enable Register for CRU Image Data */
> > > > -#define AMnMBVALID 0x148
> > > > #define AMnMBVALID_MBVALID(x) GENMASK(x, 0)
> > > >
> > > > -/* Memory Bank Status Register for CRU Image Data */
> > > > -#define AMnMBS 0x14c
> > > > #define AMnMBS_MBSTS 0x7
> > > >
> > > > -/* AXI Master Transfer Setting Register for CRU Image Data */
> > > > -#define AMnAXIATTR 0x158
> > > > #define AMnAXIATTR_AXILEN_MASK GENMASK(3, 0)
> > > > #define AMnAXIATTR_AXILEN (0xf)
> > > >
> > > > -/* AXI Master FIFO Pointer Register for CRU Image Data */
> > > > -#define AMnFIFOPNTR 0x168
> > > > #define AMnFIFOPNTR_FIFOWPNTR GENMASK(7, 0)
> > > > #define AMnFIFOPNTR_FIFORPNTR_Y GENMASK(23, 16)
> > > >
> > > > -/* AXI Master Transfer Stop Register for CRU Image Data */
> > > > -#define AMnAXISTP 0x174
> > > > #define AMnAXISTP_AXI_STOP BIT(0)
> > > >
> > > > -/* AXI Master Transfer Stop Status Register for CRU Image Data */
> > > > -#define AMnAXISTPACK 0x178
> > > > #define AMnAXISTPACK_AXI_STOP_ACK BIT(0)
> > > >
> > > > -/* CRU Image Processing Enable Register */
> > > > -#define ICnEN 0x200
> > > > #define ICnEN_ICEN BIT(0)
> > > >
> > > > -/* CRU Image Processing Main Control Register */
> > > > -#define ICnMC 0x208
> > > > #define ICnMC_CSCTHR BIT(5)
> > > > #define ICnMC_INF(x) ((x) << 16)
> > > > #define ICnMC_VCSEL(x) ((x) << 22)
> > > > #define ICnMC_INF_MASK GENMASK(21, 16)
> > > >
> > > > -/* CRU Module Status Register */
> > > > -#define ICnMS 0x254
> > > > #define ICnMS_IA BIT(2)
> > > >
> > > > -/* CRU Data Output Mode Register */
> > > > -#define ICnDMR 0x26c
> > > > #define ICnDMR_YCMODE_UYVY (1 << 4)
> > > >
> > > > +enum rzg2l_cru_common_regs {
> > > > + CRUnCTRL, /* CRU Control */
> > > > + CRUnIE, /* CRU Interrupt Enable */
> > > > + CRUnINTS, /* CRU Interrupt Status */
> > > > + CRUnRST, /* CRU Reset */
> > > > + AMnMB1ADDRL, /* Bank 1 Address (Lower) for CRU Image Data */
> > > > + AMnMB1ADDRH, /* Bank 1 Address (Higher) for CRU Image Data */
> > > > + AMnMB2ADDRL, /* Bank 2 Address (Lower) for CRU Image Data */
> > > > + AMnMB2ADDRH, /* Bank 2 Address (Higher) for CRU Image Data */
> > > > + AMnMB3ADDRL, /* Bank 3 Address (Lower) for CRU Image Data */
> > > > + AMnMB3ADDRH, /* Bank 3 Address (Higher) for CRU Image Data */
> > > > + AMnMB4ADDRL, /* Bank 4 Address (Lower) for CRU Image Data */
> > > > + AMnMB4ADDRH, /* Bank 4 Address (Higher) for CRU Image Data */
> > > > + AMnMB5ADDRL, /* Bank 5 Address (Lower) for CRU Image Data */
> > > > + AMnMB5ADDRH, /* Bank 5 Address (Higher) for CRU Image Data */
> > > > + AMnMB6ADDRL, /* Bank 6 Address (Lower) for CRU Image Data */
> > > > + AMnMB6ADDRH, /* Bank 6 Address (Higher) for CRU Image Data */
> > > > + AMnMB7ADDRL, /* Bank 7 Address (Lower) for CRU Image Data */
> > > > + AMnMB7ADDRH, /* Bank 7 Address (Higher) for CRU Image Data */
> > > > + AMnMB8ADDRL, /* Bank 8 Address (Lower) for CRU Image Data */
> > > > + AMnMB8ADDRH, /* Bank 8 Address (Higher) for CRU Image Data */
> > > > + AMnMBVALID, /* Memory Bank Enable for CRU Image Data */
> > > > + AMnMBS, /* Memory Bank Status for CRU Image Data */
> > > > + AMnAXIATTR, /* AXI Master Transfer Setting Register for CRU Image Data */
> > > > + AMnFIFOPNTR, /* AXI Master FIFO Pointer for CRU Image Data */
> > > > + AMnAXISTP, /* AXI Master Transfer Stop for CRU Image Data */
> > > > + AMnAXISTPACK, /* AXI Master Transfer Stop Status for CRU Image Data */
> > > > + ICnEN, /* CRU Image Processing Enable */
> > > > + ICnMC, /* CRU Image Processing Main Control */
> > > > + ICnMS, /* CRU Module Status */
> > > > + ICnDMR, /* CRU Data Output Mode */
> > > > +};
> > > > +
> > > > #endif /* __RZG2L_CRU_REGS_H__ */
> > > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h
> > > > index 8b898ce05b84..00c3f7458e20 100644
> > > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h
> > > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h
> > > > @@ -80,6 +80,10 @@ struct rzg2l_cru_ip_format {
> > > > bool yuv;
> > > > };
> > > >
> > > > +struct rzg2l_cru_info {
> > > > + const u16 *regs;
> > > > +};
> > > > +
> > > > /**
> > > > * struct rzg2l_cru_dev - Renesas CRU device structure
> > > > * @dev: (OF) device
> > > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > > index cd69c8a686d3..f25fd9b35c55 100644
> > > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > > @@ -44,12 +44,16 @@ struct rzg2l_cru_buffer {
> > > > */
> > > > static void rzg2l_cru_write(struct rzg2l_cru_dev *cru, u32 offset, u32 value)
> > > > {
> > > > - iowrite32(value, cru->base + offset);
> > > > + const u16 *regs = cru->info->regs;
> > > > +
> > > > + iowrite32(value, cru->base + regs[offset]);
> > >
> > > Should out-of-bound accesses be checked ? Ideally that should be done at
> > > build time, but in some cases that may be hard. Maybe rzg2l_cru_write()
> > > and rzg2l_cru_read() could implement compile-time checks, and
> > > __rzg2l_cru_write() and __rzg2l_cru_read() could be used for the cases
> > > where checks are not possible at compile time (for AMnMBxADDRL and
> > > AMnMBxADDRH as far as I can see).
> >
> > What about using:
> >
> > static void __rzg2l_cru_write(struct rzg2l_cru_dev *cru, u32 offset, u32 value)
> > {
> > const u16 *regs = cru->info->regs;
> >
> > if (WARN_ON(offset >= RZG2L_CRU_MAX_REG) ||
> > WARN_ON(offset != CRUnCTRL && regs[offset] == 0))
> > return;
> >
> > iowrite32(value, cru->base + regs[offset]);
> > }
> >
> > static u32 __rzg2l_cru_read(struct rzg2l_cru_dev *cru, u32 offset)
> > {
> > const u16 *regs = cru->info->regs;
> >
> > if (WARN_ON(offset >= RZG2L_CRU_MAX_REG) ||
> > WARN_ON(offset != CRUnCTRL && regs[offset] == 0))
> > return 0;
> >
> > return ioread32(cru->base + regs[offset]);
> > }
> >
> > static inline void rzg2l_cru_write(struct rzg2l_cru_dev *cru, u32 offset, u32 value)
> > {
> > BUILD_BUG_ON(offset >= RZG2L_CRU_MAX_REG);
> > __rzg2l_cru_write(cru, offset, value);
>
> If there's already a check at compile time, we shouldn't incur a
> performance impact at runtime. I'd do
>
> iowrite32(value, cru->base + cru->info->regs[offset]);
>
> here. Same below.
Got it, thank.
Will update that in v3.
>
> > }
> >
> > static u32 rzg2l_cru_read(struct rzg2l_cru_dev *cru, u32 offset)
> > {
> > BUILD_BUG_ON(offset >= RZG2L_CRU_MAX_REG);
> > return __rzg2l_cru_read(cru, offset);
> > }
> >
> > And use rzg2l_cru_write, rzg2l_cru_read where check can be done at build
> > time, and __read/__write functions where check can be only done at
> > runtime.
>
> Is there a way we could use a common macro (e.g. rzg2l_cru_write()) and
> use __builtin_constant_p() to dispatch to __rzg2l_cru_write_constant()
> or __rzg2l_cru_write() ?
As you suggested I'm going to use:
#define rzg2l_cru_write(cru, offset, value) \
(__builtin_constant_p(offset) ? \
__rzg2l_cru_write_constant(cru, offset, value) : \
__rzg2l_cru_write(cru, offset, value))
#define rzg2l_cru_read(cru, offset) \
(__builtin_constant_p(offset) ? \
__rzg2l_cru_read_constant(cru, offset) : \
__rzg2l_cru_read(cru, offset))
In v3, thanks.
>
> > > > }
> > > >
> > > > static u32 rzg2l_cru_read(struct rzg2l_cru_dev *cru, u32 offset)
> > > > {
> > > > - return ioread32(cru->base + offset);
> > > > + const u16 *regs = cru->info->regs;
> > > > +
> > > > + return ioread32(cru->base + regs[offset]);
> > > > }
> > > >
> > > > /* Need to hold qlock before calling */
> > > > @@ -132,8 +136,8 @@ static void rzg2l_cru_set_slot_addr(struct rzg2l_cru_dev *cru,
> > > > return;
> > > >
> > > > /* Currently, we just use the buffer in 32 bits address */
> > > > - rzg2l_cru_write(cru, AMnMBxADDRL(slot), addr);
> > > > - rzg2l_cru_write(cru, AMnMBxADDRH(slot), 0);
> > > > + rzg2l_cru_write(cru, AMnMBxADDRL(AMnMB1ADDRL, slot), addr);
> > > > + rzg2l_cru_write(cru, AMnMBxADDRH(AMnMB1ADDRH, slot), 0);
> > >
> > > This seems fairly error-prone. The first argument doesn't seem to be
> > > needed.
> >
> > Sorry I don't completely got this.
> > Please correct me if I'm wrong.
> >
> > I think cru argument is needed here has AMnMBxADDRH macro is returning an
> > index of rzg2l_cru_regs[] and not the real address.
>
> I meant the first argument to the AMnMBxADDRL() and AMnMBxADDRH(),
> sorry. Can it ever be something else than AMnMB1ADDRL or AMnMB1ADDRH
> respectively ?
Agree we can just use:
#define AMnMBxADDRL(x) (AMnMB1ADDRL + (x) * 2)
#define AMnMBxADDRH(x) (AMnMB1ADDRH + (x) * 2)
Will use this in v3.
Thanks.
>
> > Btw with the changes above here we can use:
> >
> > __rzg2l_cru_write(cru, AMnMBxADDRL(AMnMB1ADDRL, slot), addr);
> > __rzg2l_cru_write(cru, AMnMBxADDRH(AMnMB1ADDRH, slot), 0);
> >
> > That is checking for out-of-bound accesses at runtime.
> >
> > What do you think?
> > Thanks in advance.
> >
> > > > }
> > > >
> > > > /*
>
> --
> Regards,
>
> Laurent Pinchart
Regards,
Tommaso
next prev parent reply other threads:[~2025-02-25 11:22 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-21 15:55 [PATCH v2 00/18] media: rzg2l-cru: Add support for RZ/G3E (CSI2, CRU) Tommaso Merciai
2025-02-21 15:55 ` [PATCH v2 01/18] media: dt-bindings: renesas,rzg2l-csi2: Document Renesas RZ/V2H(P) SoC Tommaso Merciai
2025-02-23 18:08 ` Laurent Pinchart
2025-02-23 21:00 ` Lad, Prabhakar
2025-02-24 8:07 ` Tommaso Merciai
2025-02-24 9:00 ` Geert Uytterhoeven
2025-02-24 9:05 ` Geert Uytterhoeven
2025-02-24 9:09 ` Biju Das
2025-02-24 9:21 ` Geert Uytterhoeven
2025-02-24 17:25 ` Rob Herring (Arm)
2025-02-21 15:55 ` [PATCH v2 02/18] media: dt-bindings: renesas,rzg2l-csi2: Document Renesas RZ/G3E CSI-2 block Tommaso Merciai
2025-02-23 18:10 ` Laurent Pinchart
2025-02-23 21:11 ` Lad, Prabhakar
2025-02-24 8:11 ` Tommaso Merciai
2025-02-21 15:55 ` [PATCH v2 03/18] media: dt-bindings: renesas,rzg2l-cru: Document Renesas RZ/G3E SoC Tommaso Merciai
2025-02-24 17:27 ` Rob Herring (Arm)
2025-02-21 15:55 ` [PATCH v2 04/18] media: rzg2l-cru: csi2: Use local variable for struct device in rzg2l_csi2_probe() Tommaso Merciai
2025-02-23 18:13 ` Laurent Pinchart
2025-02-21 15:55 ` [PATCH v2 05/18] media: rzg2l-cru: csi2: Use devm_pm_runtime_enable() Tommaso Merciai
2025-02-23 21:13 ` Lad, Prabhakar
2025-02-21 15:55 ` [PATCH v2 06/18] media: rzg2l-cru: rzg2l-core: Use local variable for struct device in rzg2l_cru_probe() Tommaso Merciai
2025-02-21 15:55 ` [PATCH v2 07/18] media: rzg2l-cru: rzg2l-core: Use devm_pm_runtime_enable() Tommaso Merciai
2025-02-23 18:14 ` Laurent Pinchart
2025-02-23 21:14 ` Lad, Prabhakar
2025-02-21 15:55 ` [PATCH v2 08/18] media: rzg2l-cru: csi2: Introduce SoC-specific D-PHY handling Tommaso Merciai
2025-02-23 18:17 ` Laurent Pinchart
2025-02-23 21:21 ` Lad, Prabhakar
2025-02-21 15:55 ` [PATCH v2 09/18] media: rzg2l-cru: csi2: Make system clock optional for RZ/V2H(P) SoC Tommaso Merciai
2025-02-23 18:19 ` Laurent Pinchart
2025-02-23 20:57 ` Lad, Prabhakar
2025-02-21 15:55 ` [PATCH v2 10/18] media: rzg2l-cru: csi2: Add support " Tommaso Merciai
2025-02-23 18:24 ` Laurent Pinchart
2025-02-21 15:55 ` [PATCH v2 11/18] media: rzg2l-cru: Add register mapping support Tommaso Merciai
2025-02-23 19:52 ` Laurent Pinchart
2025-02-24 13:46 ` Tommaso Merciai
2025-02-24 18:44 ` Laurent Pinchart
2025-02-25 11:21 ` Tommaso Merciai [this message]
2025-02-21 15:55 ` [PATCH v2 12/18] media: rzg2l-cru: Pass resolution limits via OF data Tommaso Merciai
2025-02-23 19:54 ` Laurent Pinchart
2025-02-21 15:55 ` [PATCH v2 13/18] media: rzg2l-cru: Add image_conv offset to " Tommaso Merciai
2025-02-21 15:55 ` [PATCH v2 14/18] media: rzg2l-cru: Add IRQ handler " Tommaso Merciai
2025-02-23 19:55 ` Laurent Pinchart
2025-02-21 15:55 ` [PATCH v2 15/18] media: rzg2l-cru: Add function pointers to enable and disable interrupts Tommaso Merciai
2025-02-23 19:56 ` Laurent Pinchart
2025-02-21 15:55 ` [PATCH v2 16/18] media: rzg2l-cru: Add function pointer to check if FIFO is empty Tommaso Merciai
2025-02-23 20:00 ` Laurent Pinchart
2025-02-21 15:55 ` [PATCH v2 17/18] media: rzg2l-cru: Add function pointer to configure CSI Tommaso Merciai
2025-02-23 20:03 ` Laurent Pinchart
2025-02-21 15:55 ` [PATCH v2 18/18] media: rzg2l-cru: Add support for RZ/G3E SoC Tommaso Merciai
2025-02-23 20:32 ` Laurent Pinchart
2025-02-24 18:15 ` Tommaso Merciai
2025-02-24 18:38 ` Laurent Pinchart
2025-02-25 11:28 ` Tommaso Merciai
2025-02-25 10:52 ` Tommaso Merciai
2025-02-25 11:23 ` Laurent Pinchart
2025-02-25 11:30 ` Tommaso Merciai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z72n1XPofyYAzCKl@tom-desktop \
--to=tommaso.merciai.xr@bp.renesas.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=geert+renesas@glider.be \
--cc=hverkuil@xs4all.nl \
--cc=krzk+dt@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mchehab@kernel.org \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=robh@kernel.org \
--cc=tomm.merciai@gmail.com \
--cc=u.kleine-koenig@baylibre.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.