[v2,3/3] atomisp: sh_css_params: write the sp_group config according to the ISP model
Commit Message
Pick up the necessary part of sp_group configuration for both model and
then copy those parts into a tempetory buffer. This buffer is finally
written to the ISP with correct length.
Signed-off-by: Kate Hsuan <hpa@redhat.com>
---
.../staging/media/atomisp/pci/sh_css_params.c | 41 ++++++++++++++++++-
1 file changed, 39 insertions(+), 2 deletions(-)
Comments
Hi Kate,
On 6/12/23 07:57, Kate Hsuan wrote:
> Pick up the necessary part of sp_group configuration for both model and
> then copy those parts into a tempetory buffer. This buffer is finally
> written to the ISP with correct length.
>
> Signed-off-by: Kate Hsuan <hpa@redhat.com>
As mentioned in the review of patch 1/3 the sh_css_internal.h changes
from patch 1/3 should all be moved here.
Other then that this looks good to me.
Regards,
Hans
> ---
> .../staging/media/atomisp/pci/sh_css_params.c | 41 ++++++++++++++++++-
> 1 file changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_params.c b/drivers/staging/media/atomisp/pci/sh_css_params.c
> index 588f2adab058..22a9fed006f6 100644
> --- a/drivers/staging/media/atomisp/pci/sh_css_params.c
> +++ b/drivers/staging/media/atomisp/pci/sh_css_params.c
> @@ -3720,10 +3720,47 @@ struct ia_css_shading_table *ia_css_get_shading_table(struct ia_css_stream
>
> ia_css_ptr sh_css_store_sp_group_to_ddr(void)
> {
> + u8 *write_buf;
> + u8 *buf_ptr;
> +
> IA_CSS_ENTER_LEAVE_PRIVATE("void");
> +
> + write_buf = kzalloc(sizeof(struct sh_css_sp_group), GFP_KERNEL);
> + if (!write_buf)
> + return 0;
> +
> + buf_ptr = write_buf;
> + if (IS_ISP2401) {
> + memcpy(buf_ptr, &sh_css_sp_group.config, 3);
> + buf_ptr += 3;
> + memcpy(buf_ptr, &sh_css_sp_group.config.enable_isys_event_queue, 2);
> + buf_ptr += 2;
> + memset(buf_ptr, 0, 3);
> + buf_ptr += 3; /* Padding 3 bytes for struct sh_css_sp_config*/
> + } else {
> + memcpy(buf_ptr, &sh_css_sp_group.config, sizeof(sh_css_sp_group.config));
> + buf_ptr += sizeof(sh_css_sp_group.config);
> + }
> +
> + memcpy(buf_ptr, &sh_css_sp_group.pipe, sizeof(sh_css_sp_group.pipe));
> + buf_ptr += sizeof(sh_css_sp_group.pipe);
> +
> + if (IS_ISP2401) {
> + memcpy(buf_ptr, &sh_css_sp_group.pipe_io, sizeof(sh_css_sp_group.pipe_io));
> + buf_ptr += sizeof(sh_css_sp_group.pipe_io);
> + memcpy(buf_ptr, &sh_css_sp_group.pipe_io_status,
> + sizeof(sh_css_sp_group.pipe_io_status));
> + buf_ptr += sizeof(sh_css_sp_group.pipe_io_status);
> + }
> +
> + memcpy(buf_ptr, &sh_css_sp_group.debug, sizeof(sh_css_sp_group.debug));
> + buf_ptr += sizeof(sh_css_sp_group.debug);
> +
> hmm_store(xmem_sp_group_ptrs,
> - &sh_css_sp_group,
> - sizeof(struct sh_css_sp_group));
> + write_buf,
> + buf_ptr - write_buf);
> +
> + kfree(write_buf);
> return xmem_sp_group_ptrs;
> }
>
@@ -3720,10 +3720,47 @@ struct ia_css_shading_table *ia_css_get_shading_table(struct ia_css_stream
ia_css_ptr sh_css_store_sp_group_to_ddr(void)
{
+ u8 *write_buf;
+ u8 *buf_ptr;
+
IA_CSS_ENTER_LEAVE_PRIVATE("void");
+
+ write_buf = kzalloc(sizeof(struct sh_css_sp_group), GFP_KERNEL);
+ if (!write_buf)
+ return 0;
+
+ buf_ptr = write_buf;
+ if (IS_ISP2401) {
+ memcpy(buf_ptr, &sh_css_sp_group.config, 3);
+ buf_ptr += 3;
+ memcpy(buf_ptr, &sh_css_sp_group.config.enable_isys_event_queue, 2);
+ buf_ptr += 2;
+ memset(buf_ptr, 0, 3);
+ buf_ptr += 3; /* Padding 3 bytes for struct sh_css_sp_config*/
+ } else {
+ memcpy(buf_ptr, &sh_css_sp_group.config, sizeof(sh_css_sp_group.config));
+ buf_ptr += sizeof(sh_css_sp_group.config);
+ }
+
+ memcpy(buf_ptr, &sh_css_sp_group.pipe, sizeof(sh_css_sp_group.pipe));
+ buf_ptr += sizeof(sh_css_sp_group.pipe);
+
+ if (IS_ISP2401) {
+ memcpy(buf_ptr, &sh_css_sp_group.pipe_io, sizeof(sh_css_sp_group.pipe_io));
+ buf_ptr += sizeof(sh_css_sp_group.pipe_io);
+ memcpy(buf_ptr, &sh_css_sp_group.pipe_io_status,
+ sizeof(sh_css_sp_group.pipe_io_status));
+ buf_ptr += sizeof(sh_css_sp_group.pipe_io_status);
+ }
+
+ memcpy(buf_ptr, &sh_css_sp_group.debug, sizeof(sh_css_sp_group.debug));
+ buf_ptr += sizeof(sh_css_sp_group.debug);
+
hmm_store(xmem_sp_group_ptrs,
- &sh_css_sp_group,
- sizeof(struct sh_css_sp_group));
+ write_buf,
+ buf_ptr - write_buf);
+
+ kfree(write_buf);
return xmem_sp_group_ptrs;
}