Re: [PATCH v3 3/3] media: atomisp: sh_css_internal: sh_css_params: Unifying sh_css_sp_group data structure

Hans de Goede
2023-06-21T19:08:12Z

Hi Kate,

Thank you for the new version. One small remark below.

On 6/19/23 07:24, Kate Hsuan wrote:
> Since some parts of the data structure elements are determined in compile
> time, the configuration data structure should be compiled for both two
> ISP models. In order to set the configuration for both ISP models in
> runtime, The sh_css_sp_group is unified to one data structure for the
> configuration to ensure the data structure can be used for both ISP2400
> and 2401 in runtime. Also, the unused codes for debug purpose are removed.
>
> Form the aspect of ISP setting, the length and the content of the
> configuration structure for ISP2400 and ISP2401 are different. So, we
> need to pick up the necessary part of sp_group configuration for both
> models and then copy those parts into a temporary buffer. This buffer
> is finally written to the ISP with the corresponding length.
>
> Signed-off-by: Kate Hsuan <hpa@redhat.com>
> ---
> .../media/atomisp/pci/sh_css_internal.h | 41 +------------------
> .../staging/media/atomisp/pci/sh_css_params.c | 41 ++++++++++++++++++-
> 2 files changed, 41 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_internal.h b/drivers/staging/media/atomisp/pci/sh_css_internal.h
> index d98f1323441e..2349eb4d3767 100644
> --- a/drivers/staging/media/atomisp/pci/sh_css_internal.h
> +++ b/drivers/staging/media/atomisp/pci/sh_css_internal.h
> @@ -22,9 +22,7 @@
> #include <platform_support.h>
> #include <linux/stdarg.h>
>
> -#if !defined(ISP2401)
> #include "input_formatter.h"
> -#endif
> #include "input_system.h"
>
> #include "ia_css_types.h"

The patch hunk starting here:

> @@ -86,31 +84,8 @@
> #define SH_CSS_MAX_IF_CONFIGS 3 /* Must match with IA_CSS_NR_OF_CONFIGS (not defined yet).*/
> #define SH_CSS_IF_CONFIG_NOT_NEEDED 0xFF
>
> -/*
> - * SH_CSS_MAX_SP_THREADS:
> - * sp threads visible to host with connected communication queues
> - * these threads are capable of running an image pipe
> - * SH_CSS_MAX_SP_INTERNAL_THREADS:
> - * internal sp service threads, no communication queues to host
> - * these threads can't be used as image pipe
> - */
> -
> -#if !defined(ISP2401)
> -#define SH_CSS_SP_INTERNAL_METADATA_THREAD 1
> -#else
> -#define SH_CSS_SP_INTERNAL_METADATA_THREAD 0
> -#endif
> -
> -#define SH_CSS_SP_INTERNAL_SERVICE_THREAD 1
> -
> #define SH_CSS_MAX_SP_THREADS 5
>
> -#define SH_CSS_MAX_SP_INTERNAL_THREADS (\
> - SH_CSS_SP_INTERNAL_SERVICE_THREAD +\
> - SH_CSS_SP_INTERNAL_METADATA_THREAD)
> -
> -#define SH_CSS_MAX_PIPELINES SH_CSS_MAX_SP_THREADS
> -
> /**
> * The C99 standard does not specify the exact object representation of structs;
> * the representation is compiler dependent.

And ending here.

Really belongs in: [PATCH v3 2/3] media: atomisp: Removed unused
HAS_WATCHDOG_SP_THREAD_DEBUG debug.

I have moved this patch hunk to patch 2/3 while merging this
series into my atomisp branch:

https://git.kernel.org/pub/scm/linux/kernel/git/hansg/linux.git/log/?h=media-atomisp

Regards,

Hans

> @@ -357,14 +332,12 @@ struct sh_css_sp_debug_command {
> u32 dma_sw_reg;
> };
>
> -#if !defined(ISP2401)
> /* SP input formatter configuration.*/
> struct sh_css_sp_input_formatter_set {
> u32 stream_format;
> input_formatter_cfg_t config_a;
> input_formatter_cfg_t config_b;
> };
> -#endif
>
> #define IA_CSS_MIPI_SIZE_CHECK_MAX_NOF_ENTRIES_PER_PORT (3)
>
> @@ -377,7 +350,7 @@ struct sh_css_sp_config {
> frames are locked when their EOF event is successfully sent to the
> host (true) or when they are passed to the preview/video pipe
> (false). */
> -#if !defined(ISP2401)
> +
> struct {
> u8 a_changed;
> u8 b_changed;
> @@ -385,15 +358,13 @@ struct sh_css_sp_config {
> struct sh_css_sp_input_formatter_set
> set[SH_CSS_MAX_IF_CONFIGS]; /* CSI-2 port is used as index. */
> } input_formatter;
> -#endif
> -#if !defined(ISP2401)
> +
> sync_generator_cfg_t sync_gen;
> tpg_cfg_t tpg;
> prbs_cfg_t prbs;
> input_system_cfg_t input_circuit;
> u8 input_circuit_cfg_changed;
> u32 mipi_sizes_for_check[N_CSI_PORTS][IA_CSS_MIPI_SIZE_CHECK_MAX_NOF_ENTRIES_PER_PORT];
> -#endif
> u8 enable_isys_event_queue;
> u8 disable_cont_vf;
> };
> @@ -409,7 +380,6 @@ enum sh_css_stage_type {
> #define SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS_MASK \
> ((SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS << SH_CSS_MAX_SP_THREADS) - 1)
>
> -#if defined(ISP2401)
> struct sh_css_sp_pipeline_terminal {
> union {
> /* Input System 2401 */
> @@ -442,7 +412,6 @@ struct sh_css_sp_pipeline_io_status {
> u32 running[N_INPUT_SYSTEM_CSI_PORT]; /** configured streams */
> };
>
> -#endif
> enum sh_css_port_dir {
> SH_CSS_PORT_INPUT = 0,
> SH_CSS_PORT_OUTPUT = 1
> @@ -641,10 +610,8 @@ struct sh_css_sp_stage {
> struct sh_css_sp_group {
> struct sh_css_sp_config config;
> struct sh_css_sp_pipeline pipe[SH_CSS_MAX_SP_THREADS];
> -#if defined(ISP2401)
> struct sh_css_sp_pipeline_io pipe_io[SH_CSS_MAX_SP_THREADS];
> struct sh_css_sp_pipeline_io_status pipe_io_status;
> -#endif
> struct sh_css_sp_debug_command debug;
> };
>
> @@ -922,13 +889,11 @@ sh_css_frame_info_set_width(struct ia_css_frame_info *info,
> unsigned int width,
> unsigned int aligned);
>
> -#if !defined(ISP2401)
>
> unsigned int
> sh_css_get_mipi_sizes_for_check(const unsigned int port,
> const unsigned int idx);
>
> -#endif
>
> ia_css_ptr
> sh_css_store_sp_group_to_ddr(void);
> @@ -971,11 +936,9 @@ sh_css_continuous_is_enabled(uint8_t pipe_num);
> struct ia_css_pipe *
> find_pipe_by_num(uint32_t pipe_num);
>
> -#ifdef ISP2401
> void
> ia_css_get_crop_offsets(
> struct ia_css_pipe *pipe,
> struct ia_css_frame_info *in_frame);
> -#endif
>
> #endif /* _SH_CSS_INTERNAL_H_ */
> diff --git a/drivers/staging/media/atomisp/pci/sh_css_params.c b/drivers/staging/media/atomisp/pci/sh_css_params.c
> index 588f2adab058..5667e855da76 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(u8) * 8192, 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;
> }
>