media: atomisp: refactoring and fixes for V4L2 compliance
Subsystems (4)
v3 cover media: atomisp: refactoring and fixes for V4L2 compliance
This patch series addresses maintainer feedback and fixes build errors in the atomisp driver.
Patch 1: Standardizes the 'Bridge' structs significantly by using v4l2_rect instead of custom shadow structs and aligning ia_css_region members with V4L2 conventions.
Patch 2: Introduces a helper function for statistics buffer allocation to reduce code duplication and centralize error handling logic. Patch 3: Adds missing error propagation for IRQ enable and XNR configuration to improve robustness.
Changes in v3:
- Fix extra new lines in commit messages (Dan Carpenter).
- Remove unnecessary s32/u32 casts in atomisp_cmd.c, keeping only the (long long) casts to prevent overflow (Dan Carpenter).
- Propagate error codes in atomisp_ioctl.c instead of returning hardcoded -ENOMEM (Dan Carpenter).
- Update commit message for Patch 3 to avoid "flooding" terminology (Dan Carpenter).
- Wrap cover letter and commit messages to 75 characters (Dan Carpenter).
- Sent as a new thread to avoid confusion.
Changes in v2:
- Split into a 3-patch series.
- Standardized internal CSS types.
- Fixed integer overflow safety.
This series is based on the latest staging/next tree and has been verified with checkpatch.pl --strict.
Karthikey D Kadati (3):
media: atomisp: replace shadow zoom structs with v4l2_rect
media: atomisp: consolidate statistics buffer allocation
media: atomisp: propagate errors from ISP xnr and IRQ enable
.../media/atomisp/include/linux/atomisp.h | 19 +-- .../staging/media/atomisp/pci/atomisp_cmd.c | 142 +++++++++--------- .../staging/media/atomisp/pci/atomisp_ioctl.c | 127 ++++++++++------ .../staging/media/atomisp/pci/ia_css_types.h | 6 +- .../staging/media/atomisp/pci/sh_css_params.c | 16 +- 5 files changed, 170 insertions(+), 140 deletions(-)
Signature · 1 line
2.43.0
PATCH v3 1/3 media: atomisp: replace shadow zoom structs with v4l2_rect
Remove custom atomisp_zoom_point and atomisp_zoom_region structs and usage
in favor of standard v4l2_rect within atomisp_dz_config.
This aligns the driver with V4L2 standards and removes unnecessary custom
types.
Also standardizes the internal ia_css_region struct members to match
V4L2 naming conventions (left, top, width, height) to facilitate the
bridge mapping.
Updates atomisp_cmd.c and sh_css_params.c to use the new member names
and ensures safe math using long long casts to prevent overflow during
resolution scaling.
--- .../media/atomisp/include/linux/atomisp.h | 19 +-- .../staging/media/atomisp/pci/atomisp_cmd.c | 130 +++++++++--------- .../staging/media/atomisp/pci/ia_css_types.h | 6 +- .../staging/media/atomisp/pci/sh_css_params.c | 16 +-- 4 files changed, 79 insertions(+), 92 deletions(-)
drivers/staging/media/atomisp/include/linux/atomisp.h +2 -17
@@ -326,27 +326,12 @@ struct atomisp_resolution {u32 height;/** Height */ }; -/* -* This specifies the coordinates (x,y) -*/ -struct atomisp_zoom_point { -s32 x;/** x coordinate */ -s32 y;/** y coordinate */ -}; - -/* -* This specifies the region -*/ -struct atomisp_zoom_region { -struct atomisp_zoom_point - origin;/* Starting point coordinates for the region */ -struct atomisp_resolution resolution;/* Region resolution */ -}; +#include <linux/videodev2.h> struct atomisp_dz_config {u32 dx;/** Horizontal zoom factor */ u32 dy;/** Vertical zoom factor */ -struct atomisp_zoom_region zoom_region;/** region for zoom */ +struct v4l2_rect zoom_region;/** region for zoom */ };struct atomisp_parm {
drivers/staging/media/atomisp/pci/atomisp_cmd.c +66 -64
181 lines not on this page · raw message
drivers/staging/media/atomisp/pci/ia_css_types.h +4 -2
@@ -431,8 +431,10 @@ struct ia_css_point {* This specifies the region */ struct ia_css_region { -struct ia_css_point origin;/** Starting point coordinates for the region */ -struct ia_css_resolution resolution;/** Region resolution */ +s32 left;/** Starting point coordinates for the region */ +s32 top; +s32 width;/** Region resolution */ +s32 height; };/**
drivers/staging/media/atomisp/pci/sh_css_params.c +7 -9
@@ -658,9 +658,7 @@ static const struct ia_css_dz_config default_dz_config = {HRT_GDC_N ,HRT_GDC_N , { - \ - {0, 0}, \ - {0, 0}, \ + 0, 0, 0, 0 } };
@@ -1210,8 +1208,8 @@ ia_css_process_zoom_and_motion( }assert (stage->stage_num <SH_CSS_MAX_STAGES ); -if (params->dz_config.zoom_region.resolution.width ==0 && - params->dz_config.zoom_region.resolution.height ==0 ) { +if (params->dz_config.zoom_region.width ==0 && + params->dz_config.zoom_region.height ==0 ) { sh_css_update_uds_and_crop_info( &info->sp, &binary->in_frame_info,
@@ -4096,10 +4094,10 @@ sh_css_update_uds_and_crop_info_based_on_zoom_region(assert (motion_vector);assert (uds);assert (sp_out_crop_pos); - x0 = zoom->zoom_region.origin.x; - y0 = zoom->zoom_region.origin.y; - x1 = zoom->zoom_region.resolution.width + x0; - y1 = zoom->zoom_region.resolution.height + y0; + x0 = zoom->zoom_region.left; + y0 = zoom->zoom_region.top; + x1 = zoom->zoom_region.width + x0; + y1 = zoom->zoom_region.height + y0;if ((x0 > x1) || (y0 > y1) || (x1 > pipe_in_res.width) || (y1 > pipe_in_res.height))return -EINVAL ;
Signature · 1 line
2.43.0
PATCH v3 2/3 media: atomisp: consolidate statistics buffer allocation
In reply to Karthikey D KadatiRefactor atomisp_alloc_css_stat_bufs() to use a new helper function
atomisp_alloc_stat_bufs_list().
This reduces code duplication for allocating 3A, DIS, and metadata
buffers and centralizes the allocation loop logic.
The helper returns the actual error code on failure (instead of
hardcoded -ENOMEM), triggering the existing cleanup path in the caller
which correctly frees any partially allocated lists.
--- .../staging/media/atomisp/pci/atomisp_ioctl.c | 127 ++++++++++++------ 1 file changed, 85 insertions(+), 42 deletions(-)
drivers/staging/media/atomisp/pci/atomisp_ioctl.c +85 -42
@@ -678,13 +678,82 @@ static int atomisp_g_fmt_cap(struct file *file, void *fh,return atomisp_try_fmt_cap (file, fh, f); } +static int atomisp_alloc_stat_bufs_list (struct atomisp_sub_device *asd, +u16 stream_id, +struct list_head *buf_list, +int count, +enum ia_css_buffer_type type) +{ +struct atomisp_s3a_buf *s3a_buf; +struct atomisp_dis_buf *dis_buf; +struct atomisp_metadata_buf *md_buf; +int ret; + +while (count--) { +switch (type) { +case IA_CSS_BUFFER_TYPE_3A_STATISTICS : + s3a_buf =kzalloc (sizeof (*s3a_buf),GFP_KERNEL ); +if (!s3a_buf) +return -ENOMEM ; + + ret =atomisp_css_allocate_stat_buffers (asd, + stream_id, + s3a_buf, +NULL , +NULL ); +if (ret) { +kfree (s3a_buf); +return ret; + } +list_add_tail (&s3a_buf->list, buf_list); +break ; +case IA_CSS_BUFFER_TYPE_DIS_STATISTICS : + dis_buf =kzalloc (sizeof (*dis_buf),GFP_KERNEL ); +if (!dis_buf) +return -ENOMEM ; + + ret =atomisp_css_allocate_stat_buffers (asd, + stream_id, +NULL , + dis_buf, +NULL ); +if (ret) { +kfree (dis_buf); +return ret; + } +list_add_tail (&dis_buf->list, buf_list); +break ; +case IA_CSS_BUFFER_TYPE_METADATA : + md_buf =kzalloc (sizeof (*md_buf),GFP_KERNEL ); +if (!md_buf) +return -ENOMEM ; + + ret =atomisp_css_allocate_stat_buffers (asd, + stream_id, +NULL , +NULL , + md_buf); +if (ret) { +kfree (md_buf); +return ret; + } +list_add_tail (&md_buf->list, buf_list); +break ; +default : +return -EINVAL ; + } + } + +return 0 ; +} +int atomisp_alloc_css_stat_bufs (struct atomisp_sub_device *asd, -uint16_t stream_id) +u16 stream_id) {struct atomisp_device *isp = asd->isp; -struct atomisp_s3a_buf *s3a_buf =NULL , *_s3a_buf; -struct atomisp_dis_buf *dis_buf =NULL , *_dis_buf; -struct atomisp_metadata_buf *md_buf =NULL , *_md_buf; +struct atomisp_dis_buf *dis_buf, *_dis_buf; +struct atomisp_s3a_buf *s3a_buf, *_s3a_buf; +struct atomisp_metadata_buf *md_buf, *_md_buf;int count;struct ia_css_dvs_grid_info *dvs_grid_info =atomisp_css_get_dvs_grid_info (&asd->params.curr_grid_info);
@@ -695,37 +764,20 @@ int atomisp_alloc_css_stat_bufs(struct atomisp_sub_device *asd, count =ATOMISP_CSS_Q_DEPTH +ATOMISP_S3A_BUF_QUEUE_DEPTH_FOR_HAL ;dev_dbg (isp->dev,"allocating %d 3a buffers\n" , count); -while (count--) { - s3a_buf =kzalloc (sizeof (struct atomisp_s3a_buf ),GFP_KERNEL ); -if (!s3a_buf) - goto error; - -if (atomisp_css_allocate_stat_buffers ( - asd, stream_id, s3a_buf,NULL ,NULL )) { -kfree (s3a_buf); - goto error; - } - -list_add_tail (&s3a_buf->list, &asd->s3a_stats); - } +if (atomisp_alloc_stat_bufs_list (asd, stream_id, + &asd->s3a_stats, count, +IA_CSS_BUFFER_TYPE_3A_STATISTICS )) + goto error; }if (list_empty (&asd->dis_stats) && dvs_grid_info && dvs_grid_info->enable) { count =ATOMISP_CSS_Q_DEPTH +1 ;dev_dbg (isp->dev,"allocating %d dis buffers\n" , count); -while (count--) { - dis_buf =kzalloc (sizeof (struct atomisp_dis_buf ),GFP_KERNEL ); -if (!dis_buf) - goto error; -if (atomisp_css_allocate_stat_buffers ( - asd, stream_id,NULL , dis_buf,NULL )) { -kfree (dis_buf); - goto error; - } - -list_add_tail (&dis_buf->list, &asd->dis_stats); - } +if (atomisp_alloc_stat_bufs_list (asd, stream_id, + &asd->dis_stats, count, +IA_CSS_BUFFER_TYPE_DIS_STATISTICS )) + goto error; }for (i =0 ; i <ATOMISP_METADATA_TYPE_NUM ; i++) {
@@ -736,19 +788,10 @@ int atomisp_alloc_css_stat_bufs(struct atomisp_sub_device *asd,ATOMISP_METADATA_QUEUE_DEPTH_FOR_HAL ;dev_dbg (isp->dev,"allocating %d metadata buffers for type %d\n" , count, i); -while (count--) { - md_buf =kzalloc (sizeof (struct atomisp_metadata_buf ), -GFP_KERNEL ); -if (!md_buf) - goto error; - -if (atomisp_css_allocate_stat_buffers ( - asd, stream_id,NULL ,NULL , md_buf)) { -kfree (md_buf); - goto error; - } -list_add_tail (&md_buf->list, &asd->metadata[i]); - } +if (atomisp_alloc_stat_bufs_list (asd, stream_id, + &asd->metadata[i], count, +IA_CSS_BUFFER_TYPE_METADATA )) + goto error; } }return 0 ;
Signature · 1 line
2.43.0
PATCH v3 3/3 media: atomisp: propagate errors from ISP xnr and IRQ enable
In reply to Karthikey D KadatiPropagate the return value of atomisp_css_capture_enable_xnr() in
atomisp_xnr().
Also print an error message if atomisp_css_irq_enable() fails.
--- drivers/staging/media/atomisp/pci/atomisp_cmd.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/staging/media/atomisp/pci/atomisp_cmd.c +6 -6
@@ -874,7 +874,8 @@ void atomisp_assert_recovery_work(struct work_struct *work)if (!isp->asd.streaming) goto out_unlock; -atomisp_css_irq_enable (isp,IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF , false); +if (atomisp_css_irq_enable (isp,IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF , false)) +dev_err_once (isp->dev,"atomisp_css_irq_enable failed\n" );spin_lock_irqsave (&isp->lock, flags); isp->asd.streaming = false;
@@ -925,8 +926,9 @@ void atomisp_assert_recovery_work(struct work_struct *work)atomisp_csi2_configure (&isp->asd); -atomisp_css_irq_enable (isp,IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF , -atomisp_css_valid_sof (isp)); +if (atomisp_css_irq_enable (isp,IA_CSS_IRQ_INFO_CSS_RECEIVER_SOF , +atomisp_css_valid_sof (isp))) +dev_err_once (isp->dev,"atomisp_css_irq_enable failed\n" );if (atomisp_freq_scaling (isp,ATOMISP_DFS_MODE_AUTO , true) <0 )dev_dbg (isp->dev,"DFS auto failed while recovering!\n" );
@@ -1196,9 +1198,7 @@ int atomisp_xnr(struct atomisp_sub_device *asd, int flag,return 0 ; } -atomisp_css_capture_enable_xnr (asd, !!*xnr_enable); - -return 0 ; +return atomisp_css_capture_enable_xnr (asd, !!*xnr_enable); }/*
Signature · 1 line
2.43.0
Quoted 11 lines · Karthikey D Kadati
This patch series addresses maintainer feedback and fixes build errors in the atomisp driver.
Patch 1: Standardizes the 'Bridge' structs significantly by using
v4l2_rectinstead of custom shadow structs and aligningia_css_regionmembers with V4L2 conventions.
Patch 2: Introduces a helper function for statistics buffer allocation to reduce code duplication and centralize error handling logic. Patch 3: Adds missing error propagation for IRQ enable and XNR configuration to improve robustness.
Quoted 2 lines
Changes in v3:
- Fix extra new lines in commit messages (Dan Carpenter).
The new lines are still there.
Quoted 2 lines
- Remove unnecessary s32/u32 casts in
atomisp_cmd.c, keeping only the (long long) casts to prevent overflow (Dan Carpenter).
If this is a real issue, then shouldn't it be in a commit by itself with a Fixes tag?
regards,
dan carpenter