[PATCH 4/7] media: v4l2-isp: Use centrally-held data in framework

Daniel Scally dan.scally at ideasonboard.com
Wed Nov 4 04:28:19 PST 2026


Update the framework's APIs to use the centrally held data rather
than require users to pass data in to each function call.

Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
---
 drivers/media/platform/amlogic/c3/isp/c3-isp-params.c |  9 +++------
 drivers/media/platform/arm/mali-c55/mali-c55-params.c |  8 ++------
 drivers/media/platform/dreamchip/rppx1/rpp_params.c   |  7 ++-----
 .../media/platform/rockchip/rkisp1/rkisp1-params.c    |  9 +++------
 drivers/media/v4l2-core/v4l2-isp.c                    | 19 +++++++++----------
 include/media/v4l2-isp.h                              | 18 ++++++------------
 6 files changed, 25 insertions(+), 45 deletions(-)

diff --git a/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c b/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c
index 25f6a7d9bad9d61d641690f43faceaae0f938da5..f0b330520f97ad3bb701de3aed35670158508829 100644
--- a/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c
+++ b/drivers/media/platform/amlogic/c3/isp/c3-isp-params.c
@@ -809,8 +809,7 @@ static int c3_isp_params_vb2_buf_prepare(struct vb2_buffer *vb)
 	struct c3_isp_params_cfg *cfg = buf->cfg;
 	int ret;
 
-	ret = v4l2_isp_params_validate_buffer_size(params->isp->dev, vb,
-						   params->vfmt.fmt.meta.buffersize);
+	ret = v4l2_isp_params_validate_buffer_size(&params->v4l2_isp, vb);
 	if (ret)
 		return ret;
 
@@ -820,10 +819,8 @@ static int c3_isp_params_vb2_buf_prepare(struct vb2_buffer *vb)
 	 */
 	memcpy(cfg, usr_cfg, payload_size);
 
-	return v4l2_isp_params_validate_buffer(params->isp->dev, vb,
-					(struct v4l2_isp_params_buffer *)cfg,
-					c3_isp_params_block_types_info,
-					ARRAY_SIZE(c3_isp_params_block_types_info));
+	return v4l2_isp_params_validate_buffer(&params->v4l2_isp, vb,
+					(struct v4l2_isp_params_buffer *)cfg);
 }
 
 static int c3_isp_params_vb2_buf_init(struct vb2_buffer *vb)
diff --git a/drivers/media/platform/arm/mali-c55/mali-c55-params.c b/drivers/media/platform/arm/mali-c55/mali-c55-params.c
index 06509152a51a1d47355d3c7c9985112ce3c20450..7b9d2650ce8730ccc05eee0c9dc33a88d022acf1 100644
--- a/drivers/media/platform/arm/mali-c55/mali-c55-params.c
+++ b/drivers/media/platform/arm/mali-c55/mali-c55-params.c
@@ -707,14 +707,12 @@ static int mali_c55_params_buf_prepare(struct vb2_buffer *vb)
 	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
 	struct mali_c55_params_buf *buf = to_mali_c55_params_buf(vbuf);
 	struct v4l2_isp_params_buffer *config = vb2_plane_vaddr(vb, 0);
-	struct mali_c55 *mali_c55 = params->mali_c55;
 	int ret;
 
 	if (!config)
 		return -EFAULT;
 
-	ret = v4l2_isp_params_validate_buffer_size(mali_c55->dev, vb,
-			v4l2_isp_buffer_size(MALI_C55_PARAMS_MAX_SIZE));
+	ret = v4l2_isp_params_validate_buffer_size(&params->v4l2_isp, vb);
 	if (ret)
 		return ret;
 
@@ -726,9 +724,7 @@ static int mali_c55_params_buf_prepare(struct vb2_buffer *vb)
 
 	memcpy(buf->config, config, v4l2_isp_buffer_size(MALI_C55_PARAMS_MAX_SIZE));
 
-	return v4l2_isp_params_validate_buffer(mali_c55->dev, vb, buf->config,
-					       mali_c55_params_block_types_info,
-					       ARRAY_SIZE(mali_c55_params_block_types_info));
+	return v4l2_isp_params_validate_buffer(&params->v4l2_isp, vb, buf->config);
 }
 
 static void mali_c55_params_buf_queue(struct vb2_buffer *vb)
diff --git a/drivers/media/platform/dreamchip/rppx1/rpp_params.c b/drivers/media/platform/dreamchip/rppx1/rpp_params.c
index 5b8b471198ec1d540f31c0ac1b15d0d54bd808fc..aff3f3a997b4134b753fd1e1faf2058216f4b939 100644
--- a/drivers/media/platform/dreamchip/rppx1/rpp_params.c
+++ b/drivers/media/platform/dreamchip/rppx1/rpp_params.c
@@ -57,16 +57,13 @@ int rppx1_params(struct rppx1 *rpp, struct vb2_buffer *vb,
 	size_t block_offset;
 	int ret;
 
-	ret = v4l2_isp_params_validate_buffer_size(rpp->dev, vb,
-				v4l2_isp_buffer_size(RPPX1_PARAMS_MAX_SIZE));
+	ret = v4l2_isp_params_validate_buffer_size(&rpp->isp, vb);
 	if (ret)
 		return ret;
 
 	cfg = vb2_plane_vaddr(&vbuf->vb2_buf, 0);
 
-	ret = v4l2_isp_params_validate_buffer(rpp->dev, vb, cfg,
-					      rppx1_ext_params_blocks_info,
-					      ARRAY_SIZE(rppx1_ext_params_blocks_info));
+	ret = v4l2_isp_params_validate_buffer(&rpp->isp, vb, cfg);
 	if (ret)
 		return ret;
 
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index 756332d8bd154c3175ad5d563f6e5cf615f42499..8974c520d1879f3f0f642819a41984f6ac3ee01d 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -2735,8 +2735,7 @@ static int rkisp1_params_prepare_ext_params(struct rkisp1_params *params,
 		vb2_plane_vaddr(&vbuf->vb2_buf, 0);
 	int ret;
 
-	ret = v4l2_isp_params_validate_buffer_size(params->rkisp1->dev, vb,
-						   params->metafmt->buffersize);
+	ret = v4l2_isp_params_validate_buffer_size(&params->v4l2_isp, vb);
 	if (ret)
 		return ret;
 
@@ -2746,10 +2745,8 @@ static int rkisp1_params_prepare_ext_params(struct rkisp1_params *params,
 	 */
 	memcpy(cfg, usr_cfg, payload_size);
 
-	return v4l2_isp_params_validate_buffer(params->rkisp1->dev, vb,
-				(struct v4l2_isp_params_buffer *)cfg,
-				rkisp1_ext_params_block_types_info,
-				ARRAY_SIZE(rkisp1_ext_params_block_types_info));
+	return v4l2_isp_params_validate_buffer(&params->v4l2_isp, vb,
+				(struct v4l2_isp_params_buffer *)cfg);
 }
 
 static int rkisp1_params_vb2_buf_prepare(struct vb2_buffer *vb)
diff --git a/drivers/media/v4l2-core/v4l2-isp.c b/drivers/media/v4l2-core/v4l2-isp.c
index a979c0690d19d9956a45657561b510546b3aa8c2..925632e1037db18f0948ceb0ce7c652e167516c9 100644
--- a/drivers/media/v4l2-core/v4l2-isp.c
+++ b/drivers/media/v4l2-core/v4l2-isp.c
@@ -54,15 +54,15 @@ int v4l2_isp_validate(struct v4l2_isp *isp)
 }
 EXPORT_SYMBOL_GPL(v4l2_isp_validate);
 
-int v4l2_isp_params_validate_buffer_size(struct device *dev,
-					 struct vb2_buffer *vb,
-					 size_t max_size)
+int v4l2_isp_params_validate_buffer_size(struct v4l2_isp *isp,
+					 struct vb2_buffer *vb)
 {
 	size_t header_size = offsetof(struct v4l2_isp_params_buffer, data);
 	size_t payload_size = vb2_get_plane_payload(vb, 0);
+	struct device *dev = isp->dev;
 
 	/* Payload size can't be greater than the destination buffer size */
-	if (payload_size > max_size) {
+	if (payload_size > isp->params.max_size) {
 		dev_dbg(dev, "Payload size is too large: %zu\n", payload_size);
 		return -EINVAL;
 	}
@@ -77,13 +77,12 @@ int v4l2_isp_params_validate_buffer_size(struct device *dev,
 }
 EXPORT_SYMBOL_GPL(v4l2_isp_params_validate_buffer_size);
 
-int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
-				    const struct v4l2_isp_params_buffer *buffer,
-				    const struct v4l2_isp_params_block_type_info *type_info,
-				    size_t num_block_types)
+int v4l2_isp_params_validate_buffer(struct v4l2_isp *isp, struct vb2_buffer *vb,
+				    const struct v4l2_isp_params_buffer *buffer)
 {
 	size_t header_size = offsetof(struct v4l2_isp_params_buffer, data);
 	size_t payload_size = vb2_get_plane_payload(vb, 0);
+	struct device *dev = isp->dev;
 	size_t block_offset = 0;
 	size_t buffer_size;
 
@@ -118,7 +117,7 @@ int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
 		block = (const struct v4l2_isp_params_block_header *)
 			(buffer->data + block_offset);
 
-		if (block->type >= num_block_types) {
+		if (block->type >= isp->params.num_block_types) {
 			dev_dbg(dev,
 				"Invalid block type %u at offset %zu\n",
 				block->type, block_offset);
@@ -147,7 +146,7 @@ int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
 		 * with data that a later kernel, once it implements the type,
 		 * would validate and possibly reject.
 		 */
-		info = &type_info[block->type];
+		info = &isp->params.types_info[block->type];
 		if (!info->size) {
 			dev_dbg(dev, "Unsupported block type %u at offset %zu\n",
 				block->type, block_offset);
diff --git a/include/media/v4l2-isp.h b/include/media/v4l2-isp.h
index dc3e612ef79ea510ec1535f483fc16c6ec3d4569..b758d9b0e7f5c29cd8c4197f4a4a86cf3e5334fc 100644
--- a/include/media/v4l2-isp.h
+++ b/include/media/v4l2-isp.h
@@ -91,9 +91,8 @@ int v4l2_isp_validate(struct v4l2_isp *isp);
 
 /**
  * v4l2_isp_params_validate_buffer_size - Validate a V4L2 ISP buffer sizes
- * @dev: the driver's device pointer
+ * @isp: the driver's &struct v4l2_isp pointer
  * @vb: the videobuf2 buffer
- * @max_size: the maximum allowed buffer size
  *
  * This function performs validation of the size of a V4L2 ISP parameters buffer
  * before the driver can access the actual data buffer content.
@@ -106,17 +105,14 @@ int v4l2_isp_validate(struct v4l2_isp *isp);
  * against @max_size and it's validated to be large enough to accommodate at
  * least one ISP configuration block.
  */
-int v4l2_isp_params_validate_buffer_size(struct device *dev,
-					 struct vb2_buffer *vb,
-					 size_t max_size);
+int v4l2_isp_params_validate_buffer_size(struct v4l2_isp *isp,
+					 struct vb2_buffer *vb);
 
 /**
  * v4l2_isp_params_validate_buffer - Validate a V4L2 ISP parameters buffer
- * @dev: the driver's device pointer
+ * @isp: the driver's &struct v4l2_isp pointer
  * @vb: the videobuf2 buffer
  * @buffer: the V4L2 ISP parameters buffer
- * @type_info: the array of per-block-type validation info
- * @num_block_types: the number of block types in the type_info array
  *
  * This function completes the validation of a V4L2 ISP parameters buffer,
  * verifying each configuration block correctness before the driver can use
@@ -129,10 +125,8 @@ int v4l2_isp_params_validate_buffer_size(struct device *dev,
  * to prevent userspace from modifying its content after it has been submitted
  * to the driver, and then call this function to complete validation.
  */
-int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb,
-				    const struct v4l2_isp_params_buffer *buffer,
-				    const struct v4l2_isp_params_block_type_info *type_info,
-				    size_t num_block_types);
+int v4l2_isp_params_validate_buffer(struct v4l2_isp *isp, struct vb2_buffer *vb,
+				    const struct v4l2_isp_params_buffer *buffer);
 
 /**
  * struct v4l2_isp_stats_block_type_info - V4L2 ISP stats per-block-type info

-- 
2.43.0




More information about the Linux-rockchip mailing list