All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.