From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Daniel Scally <dan.scally@ideasonboard.com>,
linux-media@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, Anthony.McGivern@arm.com,
jacopo.mondi@ideasonboard.com, nayden.kanchev@arm.com,
robh+dt@kernel.org, mchehab@kernel.org,
krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org,
jerome.forissier@linaro.org, kieran.bingham@ideasonboard.com
Subject: Re: [PATCH v10 07/17] media: mali-c55: Add Mali-C55 ISP driver
Date: Mon, 30 Jun 2025 10:37:47 +0300 [thread overview]
Message-ID: <aGI+y4sOlPAQMzWI@svinhufvud> (raw)
In-Reply-To: <20250629183547.GF6260@pendragon.ideasonboard.com>
Hi Laurent,
On Sun, Jun 29, 2025 at 09:35:47PM +0300, Laurent Pinchart wrote:
> On Sat, Jun 28, 2025 at 11:06:54PM +0300, Sakari Ailus wrote:
> > On 6/24/25 13:21, Daniel Scally wrote:
>
> [snip]
>
> > > diff --git a/drivers/media/platform/arm/mali-c55/mali-c55-isp.c b/drivers/media/platform/arm/mali-c55/mali-c55-isp.c
> > > new file mode 100644
> > > index 0000000000000000000000000000000000000000..20d4d16c75fbf0d5519ecadb5ed1d080bdae05de
> > > --- /dev/null
> > > +++ b/drivers/media/platform/arm/mali-c55/mali-c55-isp.c
> > > @@ -0,0 +1,656 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * ARM Mali-C55 ISP Driver - Image signal processor
> > > + *
> > > + * Copyright (C) 2024 Ideas on Board Oy
> >
> > It's 2025 already.
> >
> > > + */
> > > +
> > > +#include <linux/delay.h>
> > > +#include <linux/iopoll.h>
> > > +#include <linux/property.h>
> > > +#include <linux/string.h>
> > > +
> > > +#include <linux/media/arm/mali-c55-config.h>
> >
> > If this is a UAPI header, please include uapi in the path, too.
> >
> > Earlier such headers have been under include/uapi/linux, I don't object
> > putting new ones elsewhere in principle though. Just check with Hans and
> > Laurent, too... I don't have an opinion yet really.
>
> With each new media header we add to include/uapi/linux/, I wish
> stronger and stronger that we had created include/uapi/linux/media/. We
> don't have to do it now, my regret will just grow stronger :-)
I'm fine with using include/uapi/linux/media/.
>
> > > +/* NOT const because the default needs to be filled in at runtime */
> > > +static struct v4l2_ctrl_config mali_c55_isp_v4l2_custom_ctrls[] = {
> > > + {
> > > + .ops = &mali_c55_isp_ctrl_ops,
> > > + .id = V4L2_CID_MALI_C55_CAPABILITIES,
> > > + .name = "Mali-C55 ISP Capabilities",
> > > + .type = V4L2_CTRL_TYPE_BITMASK,
> > > + .min = 0,
> > > + .max = MALI_C55_GPS_PONG_FITTED |
> > > + MALI_C55_GPS_WDR_FITTED |
> > > + MALI_C55_GPS_COMPRESSION_FITTED |
> > > + MALI_C55_GPS_TEMPER_FITTED |
> > > + MALI_C55_GPS_SINTER_LITE_FITTED |
> > > + MALI_C55_GPS_SINTER_FITTED |
> > > + MALI_C55_GPS_IRIDIX_LTM_FITTED |
> > > + MALI_C55_GPS_IRIDIX_GTM_FITTED |
> > > + MALI_C55_GPS_CNR_FITTED |
> > > + MALI_C55_GPS_FRSCALER_FITTED |
> > > + MALI_C55_GPS_DS_PIPE_FITTED,
> > > + .def = 0,
> > > + },
> > > +};
> > > +
> > > +static int mali_c55_isp_init_controls(struct mali_c55 *mali_c55)
> > > +{
> > > + struct v4l2_ctrl_handler *handler = &mali_c55->isp.handler;
> > > + struct v4l2_ctrl *capabilities;
> > > + int ret;
> > > +
> > > + ret = v4l2_ctrl_handler_init(handler, 1);
> > > + if (ret)
> > > + return ret;
> > > +
> > > + mali_c55_isp_v4l2_custom_ctrls[0].def = mali_c55->capabilities;
> >
> > The capabilities here are still specific to a device, not global, in
> > principle at least. Can you move it here, as a local variable?
> >
> > > +
> > > + capabilities = v4l2_ctrl_new_custom(handler,
> > > + &mali_c55_isp_v4l2_custom_ctrls[0],
> > > + NULL);
> > > + if (capabilities)
> > > + capabilities->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> > > +
> > > + if (handler->error) {
> > > + dev_err(mali_c55->dev, "failed to register capabilities control\n");
> > > + v4l2_ctrl_handler_free(handler);
> > > + return handler->error;
> >
> > v4l2_ctrl_handler_free() will return the error soon, presumably sooner
> > than the above code makes it to upstream. Before that, this pattern
> > won't work as v4l2_ctrl_handler_free() also resets the handler's error
> > field. :-)
> >
> > > diff --git a/drivers/media/platform/arm/mali-c55/mali-c55-registers.h b/drivers/media/platform/arm/mali-c55/mali-c55-registers.h
> > > new file mode 100644
> > > index 0000000000000000000000000000000000000000..36a81be0191a15da91809dd2da5d279716f6d725
> > > --- /dev/null
> > > +++ b/drivers/media/platform/arm/mali-c55/mali-c55-registers.h
> > > @@ -0,0 +1,318 @@
> > > +/* SPDX-License-Identifier: GPL-2.0 */
> > > +/*
> > > + * ARM Mali-C55 ISP Driver - Register definitions
> > > + *
> > > + * Copyright (C) 2024 Ideas on Board Oy
> > > + */
> > > +
> > > +#ifndef _MALI_C55_REGISTERS_H
> > > +#define _MALI_C55_REGISTERS_H
> > > +
> > > +#include <linux/bits.h>
> > > +
> > > +/* ISP Common 0x00000 - 0x000ff */
> > > +
> > > +#define MALI_C55_REG_API 0x00000
> > > +#define MALI_C55_REG_PRODUCT 0x00004
> > > +#define MALI_C55_REG_VERSION 0x00008
> > > +#define MALI_C55_REG_REVISION 0x0000c
> > > +#define MALI_C55_REG_PULSE_MODE 0x0003c
> > > +#define MALI_C55_REG_INPUT_MODE_REQUEST 0x0009c
> > > +#define MALI_C55_INPUT_SAFE_STOP 0x00
> > > +#define MALI_C55_INPUT_SAFE_START 0x01
> > > +#define MALI_C55_REG_MODE_STATUS 0x000a0
> > > +#define MALI_C55_REG_INTERRUPT_MASK_VECTOR 0x00030
> > > +#define MALI_C55_INTERRUPT_MASK_ALL GENMASK(31, 0)
> > > +
> > > +#define MALI_C55_REG_GLOBAL_MONITOR 0x00050
> > > +
> > > +#define MALI_C55_REG_GEN_VIDEO 0x00080
> > > +#define MALI_C55_REG_GEN_VIDEO_ON_MASK BIT(0)
> > > +#define MALI_C55_REG_GEN_VIDEO_MULTI_MASK BIT(1)
> > > +#define MALI_C55_REG_GEN_PREFETCH_MASK GENMASK(31, 16)
> > > +
> > > +#define MALI_C55_REG_MCU_CONFIG 0x00020
> > > +#define MALI_C55_REG_MCU_CONFIG_OVERRIDE_MASK BIT(0)
> > > +#define MALI_C55_REG_MCU_CONFIG_WRITE_MASK BIT(1)
> > > +#define MALI_C55_MCU_CONFIG_WRITE(x) ((x) << 1)
> >
> > Is x unsigned?
>
> Does it matter ? The reason why the BIT() macro uses (UL(1) << (nr))
> instead of (1 << (nr)) is (if I'm not mistaken) to avoid incorrect
> handling of bit 31. As long as x doesn't take negative values and
> doesn't extend to bit 31, it should be fine.
For that reason exactly. If you're unsure, maybe at least cast it as
unsigned?
>
> > > +#define MALI_C55_REG_MCU_CONFIG_WRITE_PING BIT(1)
> > > +#define MALI_C55_REG_MCU_CONFIG_WRITE_PONG 0x00
> > > +#define MALI_C55_REG_MULTI_CONTEXT_MODE_MASK BIT(8)
> > > +#define MALI_C55_REG_PING_PONG_READ 0x00024
> > > +#define MALI_C55_REG_PING_PONG_READ_MASK BIT(2)
> > > +#define MALI_C55_INTERRUPT_BIT(x) BIT(x)
> > > +
> > > +#define MALI_C55_REG_GLOBAL_PARAMETER_STATUS 0x00068
> > > +#define MALI_C55_GPS_PONG_FITTED BIT(0)
> > > +#define MALI_C55_GPS_WDR_FITTED BIT(1)
> > > +#define MALI_C55_GPS_COMPRESSION_FITTED BIT(2)
> > > +#define MALI_C55_GPS_TEMPER_FITTED BIT(3)
> > > +#define MALI_C55_GPS_SINTER_LITE_FITTED BIT(4)
> > > +#define MALI_C55_GPS_SINTER_FITTED BIT(5)
> > > +#define MALI_C55_GPS_IRIDIX_LTM_FITTED BIT(6)
> > > +#define MALI_C55_GPS_IRIDIX_GTM_FITTED BIT(7)
> > > +#define MALI_C55_GPS_CNR_FITTED BIT(8)
> > > +#define MALI_C55_GPS_FRSCALER_FITTED BIT(9)
> > > +#define MALI_C55_GPS_DS_PIPE_FITTED BIT(10)
> > > +
> > > +#define MALI_C55_REG_BLANKING 0x00084
> > > +#define MALI_C55_REG_HBLANK_MASK GENMASK(15, 0)
> > > +#define MALI_C55_REG_VBLANK_MASK GENMASK(31, 16)
> > > +#define MALI_C55_VBLANK(x) ((x) << 16)
> >
> > Same question for the bit shifts left elsewhere in the header.
> >
> > > +
> > > +#define MALI_C55_REG_HC_START 0x00088
> > > +#define MALI_C55_HC_START(h) (((h) & 0xffff) << 16)
> > > +#define MALI_C55_REG_HC_SIZE 0x0008c
> > > +#define MALI_C55_HC_SIZE(h) ((h) & 0xffff)
> > > +#define MALI_C55_REG_VC_START_SIZE 0x00094
> > > +#define MALI_C55_VC_START(v) ((v) & 0xffff)
> > > +#define MALI_C55_VC_SIZE(v) (((v) & 0xffff) << 16)
> > > +
> > > +/* Ping/Pong Configuration Space */
> > > +#define MALI_C55_REG_BASE_ADDR 0x18e88
> > > +#define MALI_C55_REG_BYPASS_0 0x18eac
> > > +#define MALI_C55_REG_BYPASS_0_VIDEO_TEST BIT(0)
> > > +#define MALI_C55_REG_BYPASS_0_INPUT_FMT BIT(1)
> > > +#define MALI_C55_REG_BYPASS_0_DECOMPANDER BIT(2)
> > > +#define MALI_C55_REG_BYPASS_0_SENSOR_OFFSET_WDR BIT(3)
> > > +#define MALI_C55_REG_BYPASS_0_GAIN_WDR BIT(4)
> > > +#define MALI_C55_REG_BYPASS_0_FRAME_STITCH BIT(5)
> > > +#define MALI_C55_REG_BYPASS_1 0x18eb0
> > > +#define MALI_C55_REG_BYPASS_1_DIGI_GAIN BIT(0)
> > > +#define MALI_C55_REG_BYPASS_1_FE_SENSOR_OFFS BIT(1)
> > > +#define MALI_C55_REG_BYPASS_1_FE_SQRT BIT(2)
> > > +#define MALI_C55_REG_BYPASS_1_RAW_FE BIT(3)
> > > +#define MALI_C55_REG_BYPASS_2 0x18eb8
> > > +#define MALI_C55_REG_BYPASS_2_SINTER BIT(0)
> > > +#define MALI_C55_REG_BYPASS_2_TEMPER BIT(1)
> > > +#define MALI_C55_REG_BYPASS_3 0x18ebc
> > > +#define MALI_C55_REG_BYPASS_3_SQUARE_BE BIT(0)
> > > +#define MALI_C55_REG_BYPASS_3_SENSOR_OFFSET_PRE_SH BIT(1)
> > > +#define MALI_C55_REG_BYPASS_3_MESH_SHADING BIT(3)
> > > +#define MALI_C55_REG_BYPASS_3_WHITE_BALANCE BIT(4)
> > > +#define MALI_C55_REG_BYPASS_3_IRIDIX BIT(5)
> > > +#define MALI_C55_REG_BYPASS_3_IRIDIX_GAIN BIT(6)
> > > +#define MALI_C55_REG_BYPASS_4 0x18ec0
> > > +#define MALI_C55_REG_BYPASS_4_DEMOSAIC_RGB BIT(1)
> > > +#define MALI_C55_REG_BYPASS_4_PF_CORRECTION BIT(3)
> > > +#define MALI_C55_REG_BYPASS_4_CCM BIT(4)
> > > +#define MALI_C55_REG_BYPASS_4_CNR BIT(5)
> > > +#define MALI_C55_REG_FR_BYPASS 0x18ec4
> > > +#define MALI_C55_REG_DS_BYPASS 0x18ec8
> > > +#define MALI_C55_BYPASS_CROP BIT(0)
> > > +#define MALI_C55_BYPASS_SCALER BIT(1)
> > > +#define MALI_C55_BYPASS_GAMMA_RGB BIT(2)
> > > +#define MALI_C55_BYPASS_SHARPEN BIT(3)
> > > +#define MALI_C55_BYPASS_CS_CONV BIT(4)
> > > +#define MALI_C55_REG_ISP_RAW_BYPASS 0x18ecc
> > > +#define MALI_C55_ISP_RAW_BYPASS_BYPASS_MASK BIT(0)
> > > +#define MALI_C55_ISP_RAW_BYPASS_FR_BYPASS_MASK GENMASK(9, 8)
> > > +#define MALI_C55_ISP_RAW_BYPASS_RAW_FR_BYPASS (2 << 8)
> > > +#define MALI_C55_ISP_RAW_BYPASS_RGB_FR_BYPASS (1 << 8)
> >
> > BIT() or make these unsigned.
>
> It's a 2 bits field, BIT() isn't appropriate.
That leaves us with the other alternative, doesn't it?
--
Kind regards,
Sakari Ailus
next prev parent reply other threads:[~2025-06-30 7:41 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-24 10:21 [PATCH v10 00/17] Add Arm Mali-C55 Image Signal Processor Driver Daniel Scally
2025-06-24 10:21 ` [PATCH v10 01/17] media: uapi: Add MEDIA_BUS_FMT_RGB202020_1X60 format code Daniel Scally
2025-06-24 10:21 ` [PATCH v10 02/17] media: uapi: Add 20-bit bayer formats Daniel Scally
2025-06-24 10:21 ` [PATCH v10 03/17] media: v4l2-common: Add RAW16 format info Daniel Scally
2025-06-24 10:21 ` [PATCH v10 04/17] media: v4l2-common: Add RAW14 " Daniel Scally
2025-06-24 10:21 ` [PATCH v10 05/17] dt-bindings: media: Add bindings for ARM mali-c55 Daniel Scally
2025-06-25 3:27 ` Rob Herring
2025-06-25 9:05 ` Krzysztof Kozlowski
2025-06-25 9:08 ` Krzysztof Kozlowski
2025-06-25 9:46 ` Dan Scally
2025-07-10 15:19 ` Dan Scally
2025-06-24 10:21 ` [PATCH v10 06/17] media: uapi: Add controls for Mali-C55 ISP Daniel Scally
2025-06-28 19:29 ` Sakari Ailus
2025-06-24 10:21 ` [PATCH v10 07/17] media: mali-c55: Add Mali-C55 ISP driver Daniel Scally
2025-06-28 20:06 ` Sakari Ailus
2025-06-29 18:35 ` Laurent Pinchart
2025-06-30 7:37 ` Sakari Ailus [this message]
2025-06-30 8:35 ` Laurent Pinchart
2025-06-30 10:16 ` Dan Scally
2025-06-30 10:29 ` Sakari Ailus
2025-06-30 10:14 ` Dan Scally
2025-06-24 10:21 ` [PATCH v10 08/17] media: Documentation: Add Mali-C55 ISP Documentation Daniel Scally
2025-06-24 10:21 ` [PATCH v10 09/17] MAINTAINERS: Add entry for mali-c55 driver Daniel Scally
2025-06-24 10:21 ` [PATCH v10 10/17] media: Add MALI_C55_3A_STATS meta format Daniel Scally
2025-06-24 10:21 ` [PATCH v10 11/17] media: uapi: Add 3a stats buffer for mali-c55 Daniel Scally
2025-06-24 10:21 ` [PATCH v10 12/17] media: platform: Add mali-c55 3a stats devnode Daniel Scally
2025-06-24 10:21 ` [PATCH v10 13/17] Documentation: mali-c55: Add Statistics documentation Daniel Scally
2025-06-24 10:21 ` [PATCH v10 14/17] media: mali-c55: Add image formats for Mali-C55 parameters buffer Daniel Scally
2025-06-24 10:21 ` [PATCH v10 15/17] media: uapi: Add parameters structs to mali-c55-config.h Daniel Scally
2025-06-24 10:21 ` [PATCH v10 16/17] media: platform: Add mali-c55 parameters video node Daniel Scally
2025-06-29 11:27 ` Sakari Ailus
2025-06-30 10:40 ` Dan Scally
2025-06-30 13:59 ` Jacopo Mondi
2025-06-30 14:52 ` Sakari Ailus
2025-06-24 10:21 ` [PATCH v10 17/17] Documentation: mali-c55: Document the mali-c55 parameter setting Daniel Scally
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=aGI+y4sOlPAQMzWI@svinhufvud \
--to=sakari.ailus@linux.intel.com \
--cc=Anthony.McGivern@arm.com \
--cc=conor+dt@kernel.org \
--cc=dan.scally@ideasonboard.com \
--cc=devicetree@vger.kernel.org \
--cc=jacopo.mondi@ideasonboard.com \
--cc=jerome.forissier@linaro.org \
--cc=kieran.bingham@ideasonboard.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=nayden.kanchev@arm.com \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.