linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits
@ 2024-03-15 23:02 Ondřej Jirman
  2024-03-18  8:47 ` Paul Elder
  2024-06-12 12:58 ` Ondřej Jirman
  0 siblings, 2 replies; 4+ messages in thread
From: Ondřej Jirman @ 2024-03-15 23:02 UTC (permalink / raw)
  To: linux-kernel
  Cc: paul.elder, Ondrej Jirman, Dafna Hirschfeld, Laurent Pinchart,
	Mauro Carvalho Chehab, Heiko Stuebner,
	open list:ROCKCHIP ISP V1 DRIVER,
	open list:ROCKCHIP ISP V1 DRIVER,
	moderated list:ARM/Rockchip SoC support

From: Ondrej Jirman <megi@xff.cz>

- RK3399 has input/output limit of main path 4416 x 3312
- PX30 has input/output limit of main path 3264 x 2448
- i.MX8MP has input/output limit of main path 4096 x 3072

Use rkisp1_info struct to encode the limits.

Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
v2:
- adapt to i.MX8MP merged for v6.9

 drivers/media/platform/rockchip/rkisp1/rkisp1-common.h  | 6 ++++--
 drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c     | 5 +++--
 drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c     | 6 ++++++
 drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c     | 9 +++++----
 drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c | 4 ++--
 5 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 26573f6ae575..b4c958b93629 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -34,8 +34,6 @@ struct regmap;
 #define RKISP1_ISP_SD_SINK			BIT(1)
 
 /* min and max values for the widths and heights of the entities */
-#define RKISP1_ISP_MAX_WIDTH			4032
-#define RKISP1_ISP_MAX_HEIGHT			3024
 #define RKISP1_ISP_MIN_WIDTH			32
 #define RKISP1_ISP_MIN_HEIGHT			32
 
@@ -140,6 +138,8 @@ enum rkisp1_feature {
  * @isr_size: number of entries in the @isrs array
  * @isp_ver: ISP version
  * @features: bitmask of rkisp1_feature features implemented by the ISP
+ * @max_width: maximum input frame width
+ * @max_height: maximum input frame height
  *
  * This structure contains information about the ISP specific to a particular
  * ISP model, version, or integration in a particular SoC.
@@ -151,6 +151,8 @@ struct rkisp1_info {
 	unsigned int isr_size;
 	enum rkisp1_cif_isp_version isp_ver;
 	unsigned int features;
+	unsigned int max_width;
+	unsigned int max_height;
 };
 
 /*
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
index 4202642e0523..841e58c20f7f 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
@@ -307,6 +307,7 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
 			      struct v4l2_subdev_state *sd_state,
 			      struct v4l2_subdev_format *fmt)
 {
+	struct rkisp1_csi *csi = to_rkisp1_csi(sd);
 	const struct rkisp1_mbus_info *mbus_info;
 	struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
 
@@ -326,10 +327,10 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
 
 	sink_fmt->width = clamp_t(u32, fmt->format.width,
 				  RKISP1_ISP_MIN_WIDTH,
-				  RKISP1_ISP_MAX_WIDTH);
+				  csi->rkisp1->info->max_width);
 	sink_fmt->height = clamp_t(u32, fmt->format.height,
 				   RKISP1_ISP_MIN_HEIGHT,
-				   RKISP1_ISP_MAX_HEIGHT);
+				   csi->rkisp1->info->max_height);
 
 	fmt->format = *sink_fmt;
 
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
index bb0202386c70..0535ce57e862 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
@@ -510,6 +510,8 @@ static const struct rkisp1_info px30_isp_info = {
 	.features = RKISP1_FEATURE_MIPI_CSI2
 		  | RKISP1_FEATURE_SELF_PATH
 		  | RKISP1_FEATURE_DUAL_CROP,
+	.max_width = 3264,
+	.max_height = 2448,
 };
 
 static const char * const rk3399_isp_clks[] = {
@@ -531,6 +533,8 @@ static const struct rkisp1_info rk3399_isp_info = {
 	.features = RKISP1_FEATURE_MIPI_CSI2
 		  | RKISP1_FEATURE_SELF_PATH
 		  | RKISP1_FEATURE_DUAL_CROP,
+	.max_width = 4416,
+	.max_height = 3312,
 };
 
 static const char * const imx8mp_isp_clks[] = {
@@ -551,6 +555,8 @@ static const struct rkisp1_info imx8mp_isp_info = {
 	.isp_ver = RKISP1_V_IMX8MP,
 	.features = RKISP1_FEATURE_MAIN_STRIDE
 		  | RKISP1_FEATURE_DMA_34BIT,
+	.max_width = 4096,
+	.max_height = 3072,
 };
 
 static const struct of_device_id rkisp1_of_match[] = {
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
index e45a213baf49..f787a7e91e3e 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
@@ -517,6 +517,7 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
 				      struct v4l2_subdev_state *sd_state,
 				      struct v4l2_subdev_frame_size_enum *fse)
 {
+	struct rkisp1_isp *isp = to_rkisp1_isp(sd);
 	const struct rkisp1_mbus_info *mbus_info;
 
 	if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
@@ -539,9 +540,9 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
 		return -EINVAL;
 
 	fse->min_width = RKISP1_ISP_MIN_WIDTH;
-	fse->max_width = RKISP1_ISP_MAX_WIDTH;
+	fse->max_width = isp->rkisp1->info->max_width;
 	fse->min_height = RKISP1_ISP_MIN_HEIGHT;
-	fse->max_height = RKISP1_ISP_MAX_HEIGHT;
+	fse->max_height = isp->rkisp1->info->max_height;
 
 	return 0;
 }
@@ -772,10 +773,10 @@ static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
 
 	sink_fmt->width = clamp_t(u32, format->width,
 				  RKISP1_ISP_MIN_WIDTH,
-				  RKISP1_ISP_MAX_WIDTH);
+				  isp->rkisp1->info->max_width);
 	sink_fmt->height = clamp_t(u32, format->height,
 				   RKISP1_ISP_MIN_HEIGHT,
-				   RKISP1_ISP_MAX_HEIGHT);
+				   isp->rkisp1->info->max_height);
 
 	/*
 	 * Adjust the color space fields. Accept any color primaries and
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
index 6f3931ca5b51..e22cc2db24cf 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
@@ -494,10 +494,10 @@ static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
 
 	sink_fmt->width = clamp_t(u32, format->width,
 				  RKISP1_ISP_MIN_WIDTH,
-				  RKISP1_ISP_MAX_WIDTH);
+				  rsz->rkisp1->info->max_width);
 	sink_fmt->height = clamp_t(u32, format->height,
 				   RKISP1_ISP_MIN_HEIGHT,
-				   RKISP1_ISP_MAX_HEIGHT);
+				   rsz->rkisp1->info->max_height);
 
 	/*
 	 * Adjust the color space fields. Accept any color primaries and
-- 
2.44.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits
  2024-03-15 23:02 [PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits Ondřej Jirman
@ 2024-03-18  8:47 ` Paul Elder
  2024-06-12 12:58 ` Ondřej Jirman
  1 sibling, 0 replies; 4+ messages in thread
From: Paul Elder @ 2024-03-18  8:47 UTC (permalink / raw)
  To: Ondřej Jirman
  Cc: linux-kernel, Dafna Hirschfeld, Laurent Pinchart,
	Mauro Carvalho Chehab, Heiko Stuebner,
	open list:ROCKCHIP ISP V1 DRIVER,
	open list:ROCKCHIP ISP V1 DRIVER,
	moderated list:ARM/Rockchip SoC support

Hi Ondrej,

On Sat, Mar 16, 2024 at 12:02:41AM +0100, Ondřej Jirman wrote:
> From: Ondrej Jirman <megi@xff.cz>
> 
> - RK3399 has input/output limit of main path 4416 x 3312
> - PX30 has input/output limit of main path 3264 x 2448
> - i.MX8MP has input/output limit of main path 4096 x 3072
> 
> Use rkisp1_info struct to encode the limits.
> 
> Signed-off-by: Ondrej Jirman <megi@xff.cz>

Looks good to me.

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
> v2:
> - adapt to i.MX8MP merged for v6.9
> 
>  drivers/media/platform/rockchip/rkisp1/rkisp1-common.h  | 6 ++++--
>  drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c     | 5 +++--
>  drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c     | 6 ++++++
>  drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c     | 9 +++++----
>  drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c | 4 ++--
>  5 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index 26573f6ae575..b4c958b93629 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -34,8 +34,6 @@ struct regmap;
>  #define RKISP1_ISP_SD_SINK			BIT(1)
>  
>  /* min and max values for the widths and heights of the entities */
> -#define RKISP1_ISP_MAX_WIDTH			4032
> -#define RKISP1_ISP_MAX_HEIGHT			3024
>  #define RKISP1_ISP_MIN_WIDTH			32
>  #define RKISP1_ISP_MIN_HEIGHT			32
>  
> @@ -140,6 +138,8 @@ enum rkisp1_feature {
>   * @isr_size: number of entries in the @isrs array
>   * @isp_ver: ISP version
>   * @features: bitmask of rkisp1_feature features implemented by the ISP
> + * @max_width: maximum input frame width
> + * @max_height: maximum input frame height
>   *
>   * This structure contains information about the ISP specific to a particular
>   * ISP model, version, or integration in a particular SoC.
> @@ -151,6 +151,8 @@ struct rkisp1_info {
>  	unsigned int isr_size;
>  	enum rkisp1_cif_isp_version isp_ver;
>  	unsigned int features;
> +	unsigned int max_width;
> +	unsigned int max_height;
>  };
>  
>  /*
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> index 4202642e0523..841e58c20f7f 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> @@ -307,6 +307,7 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
>  			      struct v4l2_subdev_state *sd_state,
>  			      struct v4l2_subdev_format *fmt)
>  {
> +	struct rkisp1_csi *csi = to_rkisp1_csi(sd);
>  	const struct rkisp1_mbus_info *mbus_info;
>  	struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
>  
> @@ -326,10 +327,10 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
>  
>  	sink_fmt->width = clamp_t(u32, fmt->format.width,
>  				  RKISP1_ISP_MIN_WIDTH,
> -				  RKISP1_ISP_MAX_WIDTH);
> +				  csi->rkisp1->info->max_width);
>  	sink_fmt->height = clamp_t(u32, fmt->format.height,
>  				   RKISP1_ISP_MIN_HEIGHT,
> -				   RKISP1_ISP_MAX_HEIGHT);
> +				   csi->rkisp1->info->max_height);
>  
>  	fmt->format = *sink_fmt;
>  
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index bb0202386c70..0535ce57e862 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -510,6 +510,8 @@ static const struct rkisp1_info px30_isp_info = {
>  	.features = RKISP1_FEATURE_MIPI_CSI2
>  		  | RKISP1_FEATURE_SELF_PATH
>  		  | RKISP1_FEATURE_DUAL_CROP,
> +	.max_width = 3264,
> +	.max_height = 2448,
>  };
>  
>  static const char * const rk3399_isp_clks[] = {
> @@ -531,6 +533,8 @@ static const struct rkisp1_info rk3399_isp_info = {
>  	.features = RKISP1_FEATURE_MIPI_CSI2
>  		  | RKISP1_FEATURE_SELF_PATH
>  		  | RKISP1_FEATURE_DUAL_CROP,
> +	.max_width = 4416,
> +	.max_height = 3312,
>  };
>  
>  static const char * const imx8mp_isp_clks[] = {
> @@ -551,6 +555,8 @@ static const struct rkisp1_info imx8mp_isp_info = {
>  	.isp_ver = RKISP1_V_IMX8MP,
>  	.features = RKISP1_FEATURE_MAIN_STRIDE
>  		  | RKISP1_FEATURE_DMA_34BIT,
> +	.max_width = 4096,
> +	.max_height = 3072,
>  };
>  
>  static const struct of_device_id rkisp1_of_match[] = {
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> index e45a213baf49..f787a7e91e3e 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> @@ -517,6 +517,7 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>  				      struct v4l2_subdev_state *sd_state,
>  				      struct v4l2_subdev_frame_size_enum *fse)
>  {
> +	struct rkisp1_isp *isp = to_rkisp1_isp(sd);
>  	const struct rkisp1_mbus_info *mbus_info;
>  
>  	if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
> @@ -539,9 +540,9 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>  		return -EINVAL;
>  
>  	fse->min_width = RKISP1_ISP_MIN_WIDTH;
> -	fse->max_width = RKISP1_ISP_MAX_WIDTH;
> +	fse->max_width = isp->rkisp1->info->max_width;
>  	fse->min_height = RKISP1_ISP_MIN_HEIGHT;
> -	fse->max_height = RKISP1_ISP_MAX_HEIGHT;
> +	fse->max_height = isp->rkisp1->info->max_height;
>  
>  	return 0;
>  }
> @@ -772,10 +773,10 @@ static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
>  
>  	sink_fmt->width = clamp_t(u32, format->width,
>  				  RKISP1_ISP_MIN_WIDTH,
> -				  RKISP1_ISP_MAX_WIDTH);
> +				  isp->rkisp1->info->max_width);
>  	sink_fmt->height = clamp_t(u32, format->height,
>  				   RKISP1_ISP_MIN_HEIGHT,
> -				   RKISP1_ISP_MAX_HEIGHT);
> +				   isp->rkisp1->info->max_height);
>  
>  	/*
>  	 * Adjust the color space fields. Accept any color primaries and
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> index 6f3931ca5b51..e22cc2db24cf 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> @@ -494,10 +494,10 @@ static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
>  
>  	sink_fmt->width = clamp_t(u32, format->width,
>  				  RKISP1_ISP_MIN_WIDTH,
> -				  RKISP1_ISP_MAX_WIDTH);
> +				  rsz->rkisp1->info->max_width);
>  	sink_fmt->height = clamp_t(u32, format->height,
>  				   RKISP1_ISP_MIN_HEIGHT,
> -				   RKISP1_ISP_MAX_HEIGHT);
> +				   rsz->rkisp1->info->max_height);
>  
>  	/*
>  	 * Adjust the color space fields. Accept any color primaries and
> -- 
> 2.44.0
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits
  2024-03-15 23:02 [PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits Ondřej Jirman
  2024-03-18  8:47 ` Paul Elder
@ 2024-06-12 12:58 ` Ondřej Jirman
  2024-07-03  6:46   ` Laurent Pinchart
  1 sibling, 1 reply; 4+ messages in thread
From: Ondřej Jirman @ 2024-06-12 12:58 UTC (permalink / raw)
  To: linux-kernel
  Cc: paul.elder, Dafna Hirschfeld, Laurent Pinchart,
	Mauro Carvalho Chehab, Heiko Stuebner,
	open list:ROCKCHIP ISP V1 DRIVER,
	open list:ROCKCHIP ISP V1 DRIVER,
	moderated list:ARM/Rockchip SoC support

Hello,

On Sat, Mar 16, 2024 at 12:02:41AM GMT, megi xff wrote:
> From: Ondrej Jirman <megi@xff.cz>
> 
> - RK3399 has input/output limit of main path 4416 x 3312
> - PX30 has input/output limit of main path 3264 x 2448
> - i.MX8MP has input/output limit of main path 4096 x 3072
> 
> Use rkisp1_info struct to encode the limits.

It would be nice to get this merged. It's reviewed and ready.

Kind regards,
	o.

> Signed-off-by: Ondrej Jirman <megi@xff.cz>
> ---
> v2:
> - adapt to i.MX8MP merged for v6.9
> 
>  drivers/media/platform/rockchip/rkisp1/rkisp1-common.h  | 6 ++++--
>  drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c     | 5 +++--
>  drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c     | 6 ++++++
>  drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c     | 9 +++++----
>  drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c | 4 ++--
>  5 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> index 26573f6ae575..b4c958b93629 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> @@ -34,8 +34,6 @@ struct regmap;
>  #define RKISP1_ISP_SD_SINK			BIT(1)
>  
>  /* min and max values for the widths and heights of the entities */
> -#define RKISP1_ISP_MAX_WIDTH			4032
> -#define RKISP1_ISP_MAX_HEIGHT			3024
>  #define RKISP1_ISP_MIN_WIDTH			32
>  #define RKISP1_ISP_MIN_HEIGHT			32
>  
> @@ -140,6 +138,8 @@ enum rkisp1_feature {
>   * @isr_size: number of entries in the @isrs array
>   * @isp_ver: ISP version
>   * @features: bitmask of rkisp1_feature features implemented by the ISP
> + * @max_width: maximum input frame width
> + * @max_height: maximum input frame height
>   *
>   * This structure contains information about the ISP specific to a particular
>   * ISP model, version, or integration in a particular SoC.
> @@ -151,6 +151,8 @@ struct rkisp1_info {
>  	unsigned int isr_size;
>  	enum rkisp1_cif_isp_version isp_ver;
>  	unsigned int features;
> +	unsigned int max_width;
> +	unsigned int max_height;
>  };
>  
>  /*
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> index 4202642e0523..841e58c20f7f 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> @@ -307,6 +307,7 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
>  			      struct v4l2_subdev_state *sd_state,
>  			      struct v4l2_subdev_format *fmt)
>  {
> +	struct rkisp1_csi *csi = to_rkisp1_csi(sd);
>  	const struct rkisp1_mbus_info *mbus_info;
>  	struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
>  
> @@ -326,10 +327,10 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
>  
>  	sink_fmt->width = clamp_t(u32, fmt->format.width,
>  				  RKISP1_ISP_MIN_WIDTH,
> -				  RKISP1_ISP_MAX_WIDTH);
> +				  csi->rkisp1->info->max_width);
>  	sink_fmt->height = clamp_t(u32, fmt->format.height,
>  				   RKISP1_ISP_MIN_HEIGHT,
> -				   RKISP1_ISP_MAX_HEIGHT);
> +				   csi->rkisp1->info->max_height);
>  
>  	fmt->format = *sink_fmt;
>  
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> index bb0202386c70..0535ce57e862 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> @@ -510,6 +510,8 @@ static const struct rkisp1_info px30_isp_info = {
>  	.features = RKISP1_FEATURE_MIPI_CSI2
>  		  | RKISP1_FEATURE_SELF_PATH
>  		  | RKISP1_FEATURE_DUAL_CROP,
> +	.max_width = 3264,
> +	.max_height = 2448,
>  };
>  
>  static const char * const rk3399_isp_clks[] = {
> @@ -531,6 +533,8 @@ static const struct rkisp1_info rk3399_isp_info = {
>  	.features = RKISP1_FEATURE_MIPI_CSI2
>  		  | RKISP1_FEATURE_SELF_PATH
>  		  | RKISP1_FEATURE_DUAL_CROP,
> +	.max_width = 4416,
> +	.max_height = 3312,
>  };
>  
>  static const char * const imx8mp_isp_clks[] = {
> @@ -551,6 +555,8 @@ static const struct rkisp1_info imx8mp_isp_info = {
>  	.isp_ver = RKISP1_V_IMX8MP,
>  	.features = RKISP1_FEATURE_MAIN_STRIDE
>  		  | RKISP1_FEATURE_DMA_34BIT,
> +	.max_width = 4096,
> +	.max_height = 3072,
>  };
>  
>  static const struct of_device_id rkisp1_of_match[] = {
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> index e45a213baf49..f787a7e91e3e 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> @@ -517,6 +517,7 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>  				      struct v4l2_subdev_state *sd_state,
>  				      struct v4l2_subdev_frame_size_enum *fse)
>  {
> +	struct rkisp1_isp *isp = to_rkisp1_isp(sd);
>  	const struct rkisp1_mbus_info *mbus_info;
>  
>  	if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
> @@ -539,9 +540,9 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>  		return -EINVAL;
>  
>  	fse->min_width = RKISP1_ISP_MIN_WIDTH;
> -	fse->max_width = RKISP1_ISP_MAX_WIDTH;
> +	fse->max_width = isp->rkisp1->info->max_width;
>  	fse->min_height = RKISP1_ISP_MIN_HEIGHT;
> -	fse->max_height = RKISP1_ISP_MAX_HEIGHT;
> +	fse->max_height = isp->rkisp1->info->max_height;
>  
>  	return 0;
>  }
> @@ -772,10 +773,10 @@ static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
>  
>  	sink_fmt->width = clamp_t(u32, format->width,
>  				  RKISP1_ISP_MIN_WIDTH,
> -				  RKISP1_ISP_MAX_WIDTH);
> +				  isp->rkisp1->info->max_width);
>  	sink_fmt->height = clamp_t(u32, format->height,
>  				   RKISP1_ISP_MIN_HEIGHT,
> -				   RKISP1_ISP_MAX_HEIGHT);
> +				   isp->rkisp1->info->max_height);
>  
>  	/*
>  	 * Adjust the color space fields. Accept any color primaries and
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> index 6f3931ca5b51..e22cc2db24cf 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> @@ -494,10 +494,10 @@ static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
>  
>  	sink_fmt->width = clamp_t(u32, format->width,
>  				  RKISP1_ISP_MIN_WIDTH,
> -				  RKISP1_ISP_MAX_WIDTH);
> +				  rsz->rkisp1->info->max_width);
>  	sink_fmt->height = clamp_t(u32, format->height,
>  				   RKISP1_ISP_MIN_HEIGHT,
> -				   RKISP1_ISP_MAX_HEIGHT);
> +				   rsz->rkisp1->info->max_height);
>  
>  	/*
>  	 * Adjust the color space fields. Accept any color primaries and
> -- 
> 2.44.0
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits
  2024-06-12 12:58 ` Ondřej Jirman
@ 2024-07-03  6:46   ` Laurent Pinchart
  0 siblings, 0 replies; 4+ messages in thread
From: Laurent Pinchart @ 2024-07-03  6:46 UTC (permalink / raw)
  To: Ondřej Jirman
  Cc: linux-kernel, paul.elder, Dafna Hirschfeld, Mauro Carvalho Chehab,
	Heiko Stuebner, open list:ROCKCHIP ISP V1 DRIVER,
	open list:ROCKCHIP ISP V1 DRIVER,
	moderated list:ARM/Rockchip SoC support

Hi Ondřej,

On Wed, Jun 12, 2024 at 02:58:02PM +0200, Ondřej Jirman wrote:
> On Sat, Mar 16, 2024 at 12:02:41AM GMT, megi xff wrote:
> > From: Ondrej Jirman <megi@xff.cz>
> > 
> > - RK3399 has input/output limit of main path 4416 x 3312
> > - PX30 has input/output limit of main path 3264 x 2448
> > - i.MX8MP has input/output limit of main path 4096 x 3072
> > 
> > Use rkisp1_info struct to encode the limits.
> 
> It would be nice to get this merged. It's reviewed and ready.

All my apologies for the delay. I'm catching up with my patch queue.
Thanks for the ping, and thanks for upstreaming this change.

> > Signed-off-by: Ondrej Jirman <megi@xff.cz>
> > ---
> > v2:
> > - adapt to i.MX8MP merged for v6.9
> > 
> >  drivers/media/platform/rockchip/rkisp1/rkisp1-common.h  | 6 ++++--
> >  drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c     | 5 +++--
> >  drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c     | 6 ++++++
> >  drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c     | 9 +++++----
> >  drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c | 4 ++--
> >  5 files changed, 20 insertions(+), 10 deletions(-)
> > 
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > index 26573f6ae575..b4c958b93629 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
> > @@ -34,8 +34,6 @@ struct regmap;
> >  #define RKISP1_ISP_SD_SINK			BIT(1)
> >  
> >  /* min and max values for the widths and heights of the entities */

It's the min only now. I'll update this comment in my tree to

/*
 * Minimum values for the width and height of entities. The maximum values are
 * model-specific and stored in the rkisp1_info structure.
 */

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

and queued.

> > -#define RKISP1_ISP_MAX_WIDTH			4032
> > -#define RKISP1_ISP_MAX_HEIGHT			3024
> >  #define RKISP1_ISP_MIN_WIDTH			32
> >  #define RKISP1_ISP_MIN_HEIGHT			32
> >  
> > @@ -140,6 +138,8 @@ enum rkisp1_feature {
> >   * @isr_size: number of entries in the @isrs array
> >   * @isp_ver: ISP version
> >   * @features: bitmask of rkisp1_feature features implemented by the ISP
> > + * @max_width: maximum input frame width
> > + * @max_height: maximum input frame height
> >   *
> >   * This structure contains information about the ISP specific to a particular
> >   * ISP model, version, or integration in a particular SoC.
> > @@ -151,6 +151,8 @@ struct rkisp1_info {
> >  	unsigned int isr_size;
> >  	enum rkisp1_cif_isp_version isp_ver;
> >  	unsigned int features;
> > +	unsigned int max_width;
> > +	unsigned int max_height;
> >  };
> >  
> >  /*
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> > index 4202642e0523..841e58c20f7f 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-csi.c
> > @@ -307,6 +307,7 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
> >  			      struct v4l2_subdev_state *sd_state,
> >  			      struct v4l2_subdev_format *fmt)
> >  {
> > +	struct rkisp1_csi *csi = to_rkisp1_csi(sd);
> >  	const struct rkisp1_mbus_info *mbus_info;
> >  	struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
> >  
> > @@ -326,10 +327,10 @@ static int rkisp1_csi_set_fmt(struct v4l2_subdev *sd,
> >  
> >  	sink_fmt->width = clamp_t(u32, fmt->format.width,
> >  				  RKISP1_ISP_MIN_WIDTH,
> > -				  RKISP1_ISP_MAX_WIDTH);
> > +				  csi->rkisp1->info->max_width);
> >  	sink_fmt->height = clamp_t(u32, fmt->format.height,
> >  				   RKISP1_ISP_MIN_HEIGHT,
> > -				   RKISP1_ISP_MAX_HEIGHT);
> > +				   csi->rkisp1->info->max_height);
> >  
> >  	fmt->format = *sink_fmt;
> >  
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > index bb0202386c70..0535ce57e862 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-dev.c
> > @@ -510,6 +510,8 @@ static const struct rkisp1_info px30_isp_info = {
> >  	.features = RKISP1_FEATURE_MIPI_CSI2
> >  		  | RKISP1_FEATURE_SELF_PATH
> >  		  | RKISP1_FEATURE_DUAL_CROP,
> > +	.max_width = 3264,
> > +	.max_height = 2448,
> >  };
> >  
> >  static const char * const rk3399_isp_clks[] = {
> > @@ -531,6 +533,8 @@ static const struct rkisp1_info rk3399_isp_info = {
> >  	.features = RKISP1_FEATURE_MIPI_CSI2
> >  		  | RKISP1_FEATURE_SELF_PATH
> >  		  | RKISP1_FEATURE_DUAL_CROP,
> > +	.max_width = 4416,
> > +	.max_height = 3312,
> >  };
> >  
> >  static const char * const imx8mp_isp_clks[] = {
> > @@ -551,6 +555,8 @@ static const struct rkisp1_info imx8mp_isp_info = {
> >  	.isp_ver = RKISP1_V_IMX8MP,
> >  	.features = RKISP1_FEATURE_MAIN_STRIDE
> >  		  | RKISP1_FEATURE_DMA_34BIT,
> > +	.max_width = 4096,
> > +	.max_height = 3072,
> >  };
> >  
> >  static const struct of_device_id rkisp1_of_match[] = {
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > index e45a213baf49..f787a7e91e3e 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> > @@ -517,6 +517,7 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
> >  				      struct v4l2_subdev_state *sd_state,
> >  				      struct v4l2_subdev_frame_size_enum *fse)
> >  {
> > +	struct rkisp1_isp *isp = to_rkisp1_isp(sd);
> >  	const struct rkisp1_mbus_info *mbus_info;
> >  
> >  	if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
> > @@ -539,9 +540,9 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
> >  		return -EINVAL;
> >  
> >  	fse->min_width = RKISP1_ISP_MIN_WIDTH;
> > -	fse->max_width = RKISP1_ISP_MAX_WIDTH;
> > +	fse->max_width = isp->rkisp1->info->max_width;
> >  	fse->min_height = RKISP1_ISP_MIN_HEIGHT;
> > -	fse->max_height = RKISP1_ISP_MAX_HEIGHT;
> > +	fse->max_height = isp->rkisp1->info->max_height;
> >  
> >  	return 0;
> >  }
> > @@ -772,10 +773,10 @@ static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
> >  
> >  	sink_fmt->width = clamp_t(u32, format->width,
> >  				  RKISP1_ISP_MIN_WIDTH,
> > -				  RKISP1_ISP_MAX_WIDTH);
> > +				  isp->rkisp1->info->max_width);
> >  	sink_fmt->height = clamp_t(u32, format->height,
> >  				   RKISP1_ISP_MIN_HEIGHT,
> > -				   RKISP1_ISP_MAX_HEIGHT);
> > +				   isp->rkisp1->info->max_height);
> >  
> >  	/*
> >  	 * Adjust the color space fields. Accept any color primaries and
> > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> > index 6f3931ca5b51..e22cc2db24cf 100644
> > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
> > @@ -494,10 +494,10 @@ static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
> >  
> >  	sink_fmt->width = clamp_t(u32, format->width,
> >  				  RKISP1_ISP_MIN_WIDTH,
> > -				  RKISP1_ISP_MAX_WIDTH);
> > +				  rsz->rkisp1->info->max_width);
> >  	sink_fmt->height = clamp_t(u32, format->height,
> >  				   RKISP1_ISP_MIN_HEIGHT,
> > -				   RKISP1_ISP_MAX_HEIGHT);
> > +				   rsz->rkisp1->info->max_height);
> >  
> >  	/*
> >  	 * Adjust the color space fields. Accept any color primaries and

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-07-03  6:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-15 23:02 [PATCH v2] media: rkisp1: Adapt to different SoCs having different size limits Ondřej Jirman
2024-03-18  8:47 ` Paul Elder
2024-06-12 12:58 ` Ondřej Jirman
2024-07-03  6:46   ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).