Message ID | 20240827014044.24673-2-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Commit | 798daf9eb0079e039ea79f909b14afb80178da27 |
Headers | show |
Series |
|
Related | show |
Hi Laurent On Tue, Aug 27, 2024 at 04:40:35AM GMT, Laurent Pinchart wrote: > From: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > Update the kernel headers with the definitions for the rkisp1 extensible > parameters format. > > The headers have been generated from the most recent linux-media stage > tree master branch, at commit a043ea54bbb9 ("Merge tag > 'next-media-rkisp1-20240814' of > git://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git"). Why not use the official git://linuxtv.org/media_stage.git ? > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Acked-by: Paul Elder <paul.elder@ideasonboard.com> > Acked-by: Stefan Klug <stefan.klug@ideasonboard.com> > --- > include/linux/README | 2 +- > include/linux/dma-heap.h | 2 +- > include/linux/drm_fourcc.h | 18 ++ > include/linux/rkisp1-config.h | 578 ++++++++++++++++++++++++++++++++++ > include/linux/v4l2-controls.h | 2 + > include/linux/videodev2.h | 5 +- > 6 files changed, 603 insertions(+), 4 deletions(-) > > diff --git a/include/linux/README b/include/linux/README > index b7795309a216..ef178681f6eb 100644 > --- a/include/linux/README > +++ b/include/linux/README > @@ -1,4 +1,4 @@ > # SPDX-License-Identifier: CC0-1.0 > > -Files in this directory are imported from v6.10-rc1 of the Linux kernel. Do not > +Files in this directory are imported from next-media-rkisp1-20240814-14-ga043ea54bbb9 of the Linux kernel. Do not > modify them manually. > diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h > index 96b90cf0f8f7..63b1e9ed5200 100644 > --- a/include/linux/dma-heap.h > +++ b/include/linux/dma-heap.h > @@ -19,7 +19,7 @@ > #define DMA_HEAP_VALID_FD_FLAGS (O_CLOEXEC | O_ACCMODE) > > /* Currently no heap flags */ > -#define DMA_HEAP_VALID_HEAP_FLAGS (0) > +#define DMA_HEAP_VALID_HEAP_FLAGS (0ULL) Is this related ? > > /** > * struct dma_heap_allocation_data - metadata passed from userspace for > diff --git a/include/linux/drm_fourcc.h b/include/linux/drm_fourcc.h > index d8e999400d85..db6798776663 100644 > --- a/include/linux/drm_fourcc.h > +++ b/include/linux/drm_fourcc.h > @@ -1556,6 +1556,7 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) > #define AMD_FMT_MOD_TILE_VER_GFX10 2 > #define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3 > #define AMD_FMT_MOD_TILE_VER_GFX11 4 > +#define AMD_FMT_MOD_TILE_VER_GFX12 5 > > /* > * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical > @@ -1566,6 +1567,8 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) > /* > * 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has > * GFX9 as canonical version. > + * > + * 64K_D_2D on GFX12 is identical to 64K_D on GFX11. > */ > #define AMD_FMT_MOD_TILE_GFX9_64K_D 10 > #define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25 > @@ -1573,6 +1576,21 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) > #define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27 > #define AMD_FMT_MOD_TILE_GFX11_256K_R_X 31 > > +/* Gfx12 swizzle modes: > + * 0 - LINEAR > + * 1 - 256B_2D - 2D block dimensions > + * 2 - 4KB_2D > + * 3 - 64KB_2D > + * 4 - 256KB_2D > + * 5 - 4KB_3D - 3D block dimensions > + * 6 - 64KB_3D > + * 7 - 256KB_3D > + */ > +#define AMD_FMT_MOD_TILE_GFX12_256B_2D 1 > +#define AMD_FMT_MOD_TILE_GFX12_4K_2D 2 > +#define AMD_FMT_MOD_TILE_GFX12_64K_2D 3 > +#define AMD_FMT_MOD_TILE_GFX12_256K_2D 4 > + I take this as an overall headers update, not just the rkisp1 bits. Is this intentional ? > #define AMD_FMT_MOD_DCC_BLOCK_64B 0 > #define AMD_FMT_MOD_DCC_BLOCK_128B 1 > #define AMD_FMT_MOD_DCC_BLOCK_256B 2 > diff --git a/include/linux/rkisp1-config.h b/include/linux/rkisp1-config.h > index f87c6bd49a5b..edbc6cb65d1c 100644 > --- a/include/linux/rkisp1-config.h > +++ b/include/linux/rkisp1-config.h > @@ -164,6 +164,11 @@ > #define RKISP1_CIF_ISP_DPF_MAX_NLF_COEFFS 17 > #define RKISP1_CIF_ISP_DPF_MAX_SPATIAL_COEFFS 6 > > +/* > + * Compand > + */ > +#define RKISP1_CIF_ISP_COMPAND_NUM_POINTS 64 > + > /* > * Measurement types > */ > @@ -851,6 +856,39 @@ struct rkisp1_params_cfg { > struct rkisp1_cif_isp_isp_other_cfg others; > }; > > +/** > + * struct rkisp1_cif_isp_compand_bls_config - Rockchip ISP1 Companding parameters (BLS) > + * @r: Fixed subtraction value for Bayer pattern R > + * @gr: Fixed subtraction value for Bayer pattern Gr > + * @gb: Fixed subtraction value for Bayer pattern Gb > + * @b: Fixed subtraction value for Bayer pattern B > + * > + * The values will be subtracted from the sensor values. Note that unlike the > + * dedicated BLS block, the BLS values in the compander are 20-bit unsigned. > + */ > +struct rkisp1_cif_isp_compand_bls_config { > + __u32 r; > + __u32 gr; > + __u32 gb; > + __u32 b; > +}; > + > +/** > + * struct rkisp1_cif_isp_compand_curve_config - Rockchip ISP1 Companding > + * parameters (expand and compression curves) > + * @px: Compand curve x-values. Each value stores the distance from the > + * previous x-value, expressed as log2 of the distance on 5 bits. > + * @x: Compand curve x-values. The functionality of these parameters are > + * unknown due to do a lack of hardware documentation, but these are left > + * here for future compatibility purposes. > + * @y: Compand curve y-values > + */ > +struct rkisp1_cif_isp_compand_curve_config { > + __u8 px[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; > + __u32 x[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; > + __u32 y[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; > +}; > + > /*---------- PART2: Measurement Statistics ------------*/ > > /** > @@ -996,4 +1034,544 @@ struct rkisp1_stat_buffer { > struct rkisp1_cif_isp_stat params; > }; > > +/*---------- PART3: Extensible Configuration Parameters ------------*/ > + > +/** > + * enum rkisp1_ext_params_block_type - RkISP1 extensible params block type > + * > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS: Black level subtraction > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC: Defect pixel cluster correction > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG: Sensor de-gamma > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN: Auto white balance gains > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT: ISP filtering > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM: Bayer de-mosaic > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK: Cross-talk correction > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC: Gamma out correction > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF: De-noise pre-filter > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH: De-noise pre-filter strength > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC: Color processing > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_IE: Image effects > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC: Lens shading correction > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS: Auto white balance statistics > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS: Histogram statistics > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS: Auto exposure statistics > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS: Auto-focus statistics > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS: BLS in the compand block > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND: Companding expand curve > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS: Companding compress curve > + */ > +enum rkisp1_ext_params_block_type { > + RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_IE, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND, > + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS, > +}; > + > +#define RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE (1U << 0) > +#define RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE (1U << 1) > + > +/** > + * struct rkisp1_ext_params_block_header - RkISP1 extensible parameters block > + * header > + * > + * This structure represents the common part of all the ISP configuration > + * blocks. Each parameters block shall embed an instance of this structure type > + * as its first member, followed by the block-specific configuration data. The > + * driver inspects this common header to discern the block type and its size and > + * properly handle the block content by casting it to the correct block-specific > + * type. > + * > + * The @type field is one of the values enumerated by > + * :c:type:`rkisp1_ext_params_block_type` and specifies how the data should be > + * interpreted by the driver. The @size field specifies the size of the > + * parameters block and is used by the driver for validation purposes. > + * > + * The @flags field is a bitmask of per-block flags RKISP1_EXT_PARAMS_FL_*. > + * > + * When userspace wants to configure and enable an ISP block it shall fully > + * populate the block configuration and set the > + * RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE bit in the @flags field. > + * > + * When userspace simply wants to disable an ISP block the > + * RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bit should be set in @flags field. The > + * driver ignores the rest of the block configuration structure in this case. > + * > + * If a new configuration of an ISP block has to be applied userspace shall > + * fully populate the ISP block configuration and omit setting the > + * RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE and RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bits > + * in the @flags field. > + * > + * Setting both the RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE and > + * RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bits in the @flags field is not allowed > + * and not accepted by the driver. > + * > + * Userspace is responsible for correctly populating the parameters block header > + * fields (@type, @flags and @size) and the block-specific parameters. > + * > + * For example: > + * > + * .. code-block:: c > + * > + * void populate_bls(struct rkisp1_ext_params_block_header *block) { > + * struct rkisp1_ext_params_bls_config *bls = > + * (struct rkisp1_ext_params_bls_config *)block; > + * > + * bls->header.type = RKISP1_EXT_PARAMS_BLOCK_ID_BLS; > + * bls->header.flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; > + * bls->header.size = sizeof(*bls); > + * > + * bls->config.enable_auto = 0; > + * bls->config.fixed_val.r = blackLevelRed_; > + * bls->config.fixed_val.gr = blackLevelGreenR_; > + * bls->config.fixed_val.gb = blackLevelGreenB_; > + * bls->config.fixed_val.b = blackLevelBlue_; > + * } > + * > + * @type: The parameters block type, see > + * :c:type:`rkisp1_ext_params_block_type` > + * @flags: A bitmask of block flags > + * @size: Size (in bytes) of the parameters block, including this header > + */ > +struct rkisp1_ext_params_block_header { > + __u16 type; > + __u16 flags; > + __u32 size; > +}; > + > +/** > + * struct rkisp1_ext_params_bls_config - RkISP1 extensible params BLS config > + * > + * RkISP1 extensible parameters Black Level Subtraction configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Black Level Subtraction configuration, see > + * :c:type:`rkisp1_cif_isp_bls_config` > + */ > +struct rkisp1_ext_params_bls_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_bls_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_dpcc_config - RkISP1 extensible params DPCC config > + * > + * RkISP1 extensible parameters Defective Pixel Cluster Correction configuration > + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Defective Pixel Cluster Correction configuration, see > + * :c:type:`rkisp1_cif_isp_dpcc_config` > + */ > +struct rkisp1_ext_params_dpcc_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_dpcc_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_sdg_config - RkISP1 extensible params SDG config > + * > + * RkISP1 extensible parameters Sensor Degamma configuration block. Identified > + * by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Sensor Degamma configuration, see > + * :c:type:`rkisp1_cif_isp_sdg_config` > + */ > +struct rkisp1_ext_params_sdg_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_sdg_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_lsc_config - RkISP1 extensible params LSC config > + * > + * RkISP1 extensible parameters Lens Shading Correction configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Lens Shading Correction configuration, see > + * :c:type:`rkisp1_cif_isp_lsc_config` > + */ > +struct rkisp1_ext_params_lsc_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_lsc_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_awb_gain_config - RkISP1 extensible params AWB > + * gain config > + * > + * RkISP1 extensible parameters Auto-White Balance Gains configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Auto-White Balance Gains configuration, see > + * :c:type:`rkisp1_cif_isp_awb_gain_config` > + */ > +struct rkisp1_ext_params_awb_gain_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_awb_gain_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_flt_config - RkISP1 extensible params FLT config > + * > + * RkISP1 extensible parameters Filter configuration block. Identified by > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Filter configuration, see :c:type:`rkisp1_cif_isp_flt_config` > + */ > +struct rkisp1_ext_params_flt_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_flt_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_bdm_config - RkISP1 extensible params BDM config > + * > + * RkISP1 extensible parameters Demosaicing configuration block. Identified by > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Demosaicing configuration, see :c:type:`rkisp1_cif_isp_bdm_config` > + */ > +struct rkisp1_ext_params_bdm_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_bdm_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_ctk_config - RkISP1 extensible params CTK config > + * > + * RkISP1 extensible parameters Cross-Talk configuration block. Identified by > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Cross-Talk configuration, see :c:type:`rkisp1_cif_isp_ctk_config` > + */ > +struct rkisp1_ext_params_ctk_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_ctk_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_goc_config - RkISP1 extensible params GOC config > + * > + * RkISP1 extensible parameters Gamma-Out configuration block. Identified by > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Gamma-Out configuration, see :c:type:`rkisp1_cif_isp_goc_config` > + */ > +struct rkisp1_ext_params_goc_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_goc_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_dpf_config - RkISP1 extensible params DPF config > + * > + * RkISP1 extensible parameters De-noise Pre-Filter configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: De-noise Pre-Filter configuration, see > + * :c:type:`rkisp1_cif_isp_dpf_config` > + */ > +struct rkisp1_ext_params_dpf_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_dpf_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_dpf_strength_config - RkISP1 extensible params DPF > + * strength config > + * > + * RkISP1 extensible parameters De-noise Pre-Filter strength configuration > + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: De-noise Pre-Filter strength configuration, see > + * :c:type:`rkisp1_cif_isp_dpf_strength_config` > + */ > +struct rkisp1_ext_params_dpf_strength_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_dpf_strength_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_cproc_config - RkISP1 extensible params CPROC config > + * > + * RkISP1 extensible parameters Color Processing configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Color processing configuration, see > + * :c:type:`rkisp1_cif_isp_cproc_config` > + */ > +struct rkisp1_ext_params_cproc_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_cproc_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_ie_config - RkISP1 extensible params IE config > + * > + * RkISP1 extensible parameters Image Effect configuration block. Identified by > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_IE`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Image Effect configuration, see :c:type:`rkisp1_cif_isp_ie_config` > + */ > +struct rkisp1_ext_params_ie_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_ie_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_awb_meas_config - RkISP1 extensible params AWB > + * Meas config > + * > + * RkISP1 extensible parameters Auto-White Balance Measurement configuration > + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Auto-White Balance measure configuration, see > + * :c:type:`rkisp1_cif_isp_awb_meas_config` > + */ > +struct rkisp1_ext_params_awb_meas_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_awb_meas_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_hst_config - RkISP1 extensible params Histogram config > + * > + * RkISP1 extensible parameters Histogram statistics configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Histogram statistics configuration, see > + * :c:type:`rkisp1_cif_isp_hst_config` > + */ > +struct rkisp1_ext_params_hst_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_hst_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_aec_config - RkISP1 extensible params AEC config > + * > + * RkISP1 extensible parameters Auto-Exposure statistics configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Auto-Exposure statistics configuration, see > + * :c:type:`rkisp1_cif_isp_aec_config` > + */ > +struct rkisp1_ext_params_aec_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_aec_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_afc_config - RkISP1 extensible params AFC config > + * > + * RkISP1 extensible parameters Auto-Focus statistics configuration block. > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Auto-Focus statistics configuration, see > + * :c:type:`rkisp1_cif_isp_afc_config` > + */ > +struct rkisp1_ext_params_afc_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_afc_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_compand_bls_config - RkISP1 extensible params > + * Compand BLS config > + * > + * RkISP1 extensible parameters Companding configuration block (black level > + * subtraction). Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Companding BLS configuration, see > + * :c:type:`rkisp1_cif_isp_compand_bls_config` > + */ > +struct rkisp1_ext_params_compand_bls_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_compand_bls_config config; > +} __attribute__((aligned(8))); > + > +/** > + * struct rkisp1_ext_params_compand_curve_config - RkISP1 extensible params > + * Compand curve config > + * > + * RkISP1 extensible parameters Companding configuration block (expand and > + * compression curves). Identified by > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND` or > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS`. > + * > + * @header: The RkISP1 extensible parameters header, see > + * :c:type:`rkisp1_ext_params_block_header` > + * @config: Companding curve configuration, see > + * :c:type:`rkisp1_cif_isp_compand_curve_config` > + */ > +struct rkisp1_ext_params_compand_curve_config { > + struct rkisp1_ext_params_block_header header; > + struct rkisp1_cif_isp_compand_curve_config config; > +} __attribute__((aligned(8))); > + > +/* > + * The rkisp1_ext_params_compand_curve_config structure is counted twice as it > + * is used for both the COMPAND_EXPAND and COMPAND_COMPRESS block types. > + */ > +#define RKISP1_EXT_PARAMS_MAX_SIZE \ > + (sizeof(struct rkisp1_ext_params_bls_config) +\ > + sizeof(struct rkisp1_ext_params_dpcc_config) +\ > + sizeof(struct rkisp1_ext_params_sdg_config) +\ > + sizeof(struct rkisp1_ext_params_lsc_config) +\ > + sizeof(struct rkisp1_ext_params_awb_gain_config) +\ > + sizeof(struct rkisp1_ext_params_flt_config) +\ > + sizeof(struct rkisp1_ext_params_bdm_config) +\ > + sizeof(struct rkisp1_ext_params_ctk_config) +\ > + sizeof(struct rkisp1_ext_params_goc_config) +\ > + sizeof(struct rkisp1_ext_params_dpf_config) +\ > + sizeof(struct rkisp1_ext_params_dpf_strength_config) +\ > + sizeof(struct rkisp1_ext_params_cproc_config) +\ > + sizeof(struct rkisp1_ext_params_ie_config) +\ > + sizeof(struct rkisp1_ext_params_awb_meas_config) +\ > + sizeof(struct rkisp1_ext_params_hst_config) +\ > + sizeof(struct rkisp1_ext_params_aec_config) +\ > + sizeof(struct rkisp1_ext_params_afc_config) +\ > + sizeof(struct rkisp1_ext_params_compand_bls_config) +\ > + sizeof(struct rkisp1_ext_params_compand_curve_config) +\ > + sizeof(struct rkisp1_ext_params_compand_curve_config)) > + > +/** > + * enum rksip1_ext_param_buffer_version - RkISP1 extensible parameters version > + * > + * @RKISP1_EXT_PARAM_BUFFER_V1: First version of RkISP1 extensible parameters > + */ > +enum rksip1_ext_param_buffer_version { > + RKISP1_EXT_PARAM_BUFFER_V1 = 1, > +}; > + > +/** > + * struct rkisp1_ext_params_cfg - RkISP1 extensible parameters configuration > + * > + * This struct contains the configuration parameters of the RkISP1 ISP > + * algorithms, serialized by userspace into a data buffer. Each configuration > + * parameter block is represented by a block-specific structure which contains a > + * :c:type:`rkisp1_ext_params_block_header` entry as first member. Userspace > + * populates the @data buffer with configuration parameters for the blocks that > + * it intends to configure. As a consequence, the data buffer effective size > + * changes according to the number of ISP blocks that userspace intends to > + * configure and is set by userspace in the @data_size field. > + * > + * The parameters buffer is versioned by the @version field to allow modifying > + * and extending its definition. Userspace shall populate the @version field to > + * inform the driver about the version it intends to use. The driver will parse > + * and handle the @data buffer according to the data layout specific to the > + * indicated version and return an error if the desired version is not > + * supported. > + * > + * Currently the single RKISP1_EXT_PARAM_BUFFER_V1 version is supported. > + * When a new format version will be added, a mechanism for userspace to query > + * the supported format versions will be implemented in the form of a read-only > + * V4L2 control. If such control is not available, userspace should assume only > + * RKISP1_EXT_PARAM_BUFFER_V1 is supported by the driver. > + * > + * For each ISP block that userspace wants to configure, a block-specific > + * structure is appended to the @data buffer, one after the other without gaps > + * in between nor overlaps. Userspace shall populate the @data_size field with > + * the effective size, in bytes, of the @data buffer. > + * > + * The expected memory layout of the parameters buffer is:: > + * > + * +-------------------- struct rkisp1_ext_params_cfg -------------------+ > + * | version = RKISP_EXT_PARAMS_BUFFER_V1; | > + * | data_size = sizeof(struct rkisp1_ext_params_bls_config) | > + * | + sizeof(struct rkisp1_ext_params_dpcc_config); | > + * | +------------------------- data ---------------------------------+ | > + * | | +------------- struct rkisp1_ext_params_bls_config -----------+ | | > + * | | | +-------- struct rkisp1_ext_params_block_header ---------+ | | | > + * | | | | type = RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS; | | | | > + * | | | | flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; | | | | > + * | | | | size = sizeof(struct rkisp1_ext_params_bls_config); | | | | > + * | | | +---------------------------------------------------------+ | | | > + * | | | +---------- struct rkisp1_cif_isp_bls_config -------------+ | | | > + * | | | | enable_auto = 0; | | | | > + * | | | | fixed_val.r = 256; | | | | > + * | | | | fixed_val.gr = 256; | | | | > + * | | | | fixed_val.gb = 256; | | | | > + * | | | | fixed_val.b = 256; | | | | > + * | | | +---------------------------------------------------------+ | | | > + * | | +------------ struct rkisp1_ext_params_dpcc_config -----------+ | | > + * | | | +-------- struct rkisp1_ext_params_block_header ---------+ | | | > + * | | | | type = RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC; | | | | > + * | | | | flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; | | | | > + * | | | | size = sizeof(struct rkisp1_ext_params_dpcc_config); | | | | > + * | | | +---------------------------------------------------------+ | | | > + * | | | +---------- struct rkisp1_cif_isp_dpcc_config ------------+ | | | > + * | | | | mode = RKISP1_CIF_ISP_DPCC_MODE_STAGE1_ENABLE; | | | | > + * | | | | output_mode = | | | | > + * | | | | RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_STAGE1_INCL_G_CENTER; | | | | > + * | | | | set_use = ... ; | | | | > + * | | | | ... = ... ; | | | | > + * | | | +---------------------------------------------------------+ | | | > + * | | +-------------------------------------------------------------+ | | > + * | +-----------------------------------------------------------------+ | > + * +---------------------------------------------------------------------+ > + * > + * @version: The RkISP1 extensible parameters buffer version, see > + * :c:type:`rksip1_ext_param_buffer_version` > + * @data_size: The RkISP1 configuration data effective size, excluding this > + * header > + * @data: The RkISP1 extensible configuration data blocks > + */ > +struct rkisp1_ext_params_cfg { > + __u32 version; > + __u32 data_size; > + __u8 data[RKISP1_EXT_PARAMS_MAX_SIZE]; > +}; > + > #endif /* _RKISP1_CONFIG_H */ > diff --git a/include/linux/v4l2-controls.h b/include/linux/v4l2-controls.h > index 1e6e816b34b4..882a81805783 100644 > --- a/include/linux/v4l2-controls.h > +++ b/include/linux/v4l2-controls.h > @@ -898,6 +898,8 @@ enum v4l2_mpeg_video_av1_level { > V4L2_MPEG_VIDEO_AV1_LEVEL_7_3 = 23 > }; > > +#define V4L2_CID_MPEG_VIDEO_AVERAGE_QP (V4L2_CID_CODEC_BASE + 657) > + > /* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ > #define V4L2_CID_CODEC_CX2341X_BASE (V4L2_CTRL_CLASS_CODEC | 0x1000) > #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_CODEC_CX2341X_BASE+0) > diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h > index 7fe522e85249..3829c0b60f52 100644 > --- a/include/linux/videodev2.h > +++ b/include/linux/videodev2.h > @@ -829,9 +829,10 @@ struct v4l2_pix_format { > /* Vendor specific - used for RK_ISP1 camera sub-system */ > #define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */ > #define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */ > +#define V4L2_META_FMT_RK_ISP1_EXT_PARAMS v4l2_fourcc('R', 'K', '1', 'E') /* Rockchip ISP1 3a Extensible Parameters */ > > -/* The metadata format identifier for BE configuration buffers. */ > -#define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') > +/* Vendor specific - used for RaspberryPi PiSP */ > +#define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') /* PiSP BE configuration */ > > /* The metadata format identifier for FE configuration buffers. */ > #define V4L2_META_FMT_RPI_FE_CFG v4l2_fourcc('R', 'P', 'F', 'C') > -- > Regards, > > Laurent Pinchart >
On Tue, Aug 27, 2024 at 08:47:08AM +0200, Jacopo Mondi wrote: > Hi Laurent > > On Tue, Aug 27, 2024 at 04:40:35AM GMT, Laurent Pinchart wrote: > > From: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > > > Update the kernel headers with the definitions for the rkisp1 extensible > > parameters format. > > > > The headers have been generated from the most recent linux-media stage > > tree master branch, at commit a043ea54bbb9 ("Merge tag > > 'next-media-rkisp1-20240814' of > > git://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git"). > > Why not use the official git://linuxtv.org/media_stage.git ? I did. That's the commit message of the master branch's HEAD in the stage tree :-) > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > Acked-by: Paul Elder <paul.elder@ideasonboard.com> > > Acked-by: Stefan Klug <stefan.klug@ideasonboard.com> > > --- > > include/linux/README | 2 +- > > include/linux/dma-heap.h | 2 +- > > include/linux/drm_fourcc.h | 18 ++ > > include/linux/rkisp1-config.h | 578 ++++++++++++++++++++++++++++++++++ > > include/linux/v4l2-controls.h | 2 + > > include/linux/videodev2.h | 5 +- > > 6 files changed, 603 insertions(+), 4 deletions(-) > > > > diff --git a/include/linux/README b/include/linux/README > > index b7795309a216..ef178681f6eb 100644 > > --- a/include/linux/README > > +++ b/include/linux/README > > @@ -1,4 +1,4 @@ > > # SPDX-License-Identifier: CC0-1.0 > > > > -Files in this directory are imported from v6.10-rc1 of the Linux kernel. Do not > > +Files in this directory are imported from next-media-rkisp1-20240814-14-ga043ea54bbb9 of the Linux kernel. Do not > > modify them manually. > > diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h > > index 96b90cf0f8f7..63b1e9ed5200 100644 > > --- a/include/linux/dma-heap.h > > +++ b/include/linux/dma-heap.h > > @@ -19,7 +19,7 @@ > > #define DMA_HEAP_VALID_FD_FLAGS (O_CLOEXEC | O_ACCMODE) > > > > /* Currently no heap flags */ > > -#define DMA_HEAP_VALID_HEAP_FLAGS (0) > > +#define DMA_HEAP_VALID_HEAP_FLAGS (0ULL) > > Is this related ? It comes from mainline, pulled by the update script. > > /** > > * struct dma_heap_allocation_data - metadata passed from userspace for > > diff --git a/include/linux/drm_fourcc.h b/include/linux/drm_fourcc.h > > index d8e999400d85..db6798776663 100644 > > --- a/include/linux/drm_fourcc.h > > +++ b/include/linux/drm_fourcc.h > > @@ -1556,6 +1556,7 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) > > #define AMD_FMT_MOD_TILE_VER_GFX10 2 > > #define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3 > > #define AMD_FMT_MOD_TILE_VER_GFX11 4 > > +#define AMD_FMT_MOD_TILE_VER_GFX12 5 > > > > /* > > * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical > > @@ -1566,6 +1567,8 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) > > /* > > * 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has > > * GFX9 as canonical version. > > + * > > + * 64K_D_2D on GFX12 is identical to 64K_D on GFX11. > > */ > > #define AMD_FMT_MOD_TILE_GFX9_64K_D 10 > > #define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25 > > @@ -1573,6 +1576,21 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) > > #define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27 > > #define AMD_FMT_MOD_TILE_GFX11_256K_R_X 31 > > > > +/* Gfx12 swizzle modes: > > + * 0 - LINEAR > > + * 1 - 256B_2D - 2D block dimensions > > + * 2 - 4KB_2D > > + * 3 - 64KB_2D > > + * 4 - 256KB_2D > > + * 5 - 4KB_3D - 3D block dimensions > > + * 6 - 64KB_3D > > + * 7 - 256KB_3D > > + */ > > +#define AMD_FMT_MOD_TILE_GFX12_256B_2D 1 > > +#define AMD_FMT_MOD_TILE_GFX12_4K_2D 2 > > +#define AMD_FMT_MOD_TILE_GFX12_64K_2D 3 > > +#define AMD_FMT_MOD_TILE_GFX12_256K_2D 4 > > + > > I take this as an overall headers update, not just the rkisp1 bits. Is > this intentional ? Yes it is. > > #define AMD_FMT_MOD_DCC_BLOCK_64B 0 > > #define AMD_FMT_MOD_DCC_BLOCK_128B 1 > > #define AMD_FMT_MOD_DCC_BLOCK_256B 2 > > diff --git a/include/linux/rkisp1-config.h b/include/linux/rkisp1-config.h > > index f87c6bd49a5b..edbc6cb65d1c 100644 > > --- a/include/linux/rkisp1-config.h > > +++ b/include/linux/rkisp1-config.h > > @@ -164,6 +164,11 @@ > > #define RKISP1_CIF_ISP_DPF_MAX_NLF_COEFFS 17 > > #define RKISP1_CIF_ISP_DPF_MAX_SPATIAL_COEFFS 6 > > > > +/* > > + * Compand > > + */ > > +#define RKISP1_CIF_ISP_COMPAND_NUM_POINTS 64 > > + > > /* > > * Measurement types > > */ > > @@ -851,6 +856,39 @@ struct rkisp1_params_cfg { > > struct rkisp1_cif_isp_isp_other_cfg others; > > }; > > > > +/** > > + * struct rkisp1_cif_isp_compand_bls_config - Rockchip ISP1 Companding parameters (BLS) > > + * @r: Fixed subtraction value for Bayer pattern R > > + * @gr: Fixed subtraction value for Bayer pattern Gr > > + * @gb: Fixed subtraction value for Bayer pattern Gb > > + * @b: Fixed subtraction value for Bayer pattern B > > + * > > + * The values will be subtracted from the sensor values. Note that unlike the > > + * dedicated BLS block, the BLS values in the compander are 20-bit unsigned. > > + */ > > +struct rkisp1_cif_isp_compand_bls_config { > > + __u32 r; > > + __u32 gr; > > + __u32 gb; > > + __u32 b; > > +}; > > + > > +/** > > + * struct rkisp1_cif_isp_compand_curve_config - Rockchip ISP1 Companding > > + * parameters (expand and compression curves) > > + * @px: Compand curve x-values. Each value stores the distance from the > > + * previous x-value, expressed as log2 of the distance on 5 bits. > > + * @x: Compand curve x-values. The functionality of these parameters are > > + * unknown due to do a lack of hardware documentation, but these are left > > + * here for future compatibility purposes. > > + * @y: Compand curve y-values > > + */ > > +struct rkisp1_cif_isp_compand_curve_config { > > + __u8 px[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; > > + __u32 x[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; > > + __u32 y[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; > > +}; > > + > > /*---------- PART2: Measurement Statistics ------------*/ > > > > /** > > @@ -996,4 +1034,544 @@ struct rkisp1_stat_buffer { > > struct rkisp1_cif_isp_stat params; > > }; > > > > +/*---------- PART3: Extensible Configuration Parameters ------------*/ > > + > > +/** > > + * enum rkisp1_ext_params_block_type - RkISP1 extensible params block type > > + * > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS: Black level subtraction > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC: Defect pixel cluster correction > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG: Sensor de-gamma > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN: Auto white balance gains > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT: ISP filtering > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM: Bayer de-mosaic > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK: Cross-talk correction > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC: Gamma out correction > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF: De-noise pre-filter > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH: De-noise pre-filter strength > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC: Color processing > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_IE: Image effects > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC: Lens shading correction > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS: Auto white balance statistics > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS: Histogram statistics > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS: Auto exposure statistics > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS: Auto-focus statistics > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS: BLS in the compand block > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND: Companding expand curve > > + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS: Companding compress curve > > + */ > > +enum rkisp1_ext_params_block_type { > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_IE, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND, > > + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS, > > +}; > > + > > +#define RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE (1U << 0) > > +#define RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE (1U << 1) > > + > > +/** > > + * struct rkisp1_ext_params_block_header - RkISP1 extensible parameters block > > + * header > > + * > > + * This structure represents the common part of all the ISP configuration > > + * blocks. Each parameters block shall embed an instance of this structure type > > + * as its first member, followed by the block-specific configuration data. The > > + * driver inspects this common header to discern the block type and its size and > > + * properly handle the block content by casting it to the correct block-specific > > + * type. > > + * > > + * The @type field is one of the values enumerated by > > + * :c:type:`rkisp1_ext_params_block_type` and specifies how the data should be > > + * interpreted by the driver. The @size field specifies the size of the > > + * parameters block and is used by the driver for validation purposes. > > + * > > + * The @flags field is a bitmask of per-block flags RKISP1_EXT_PARAMS_FL_*. > > + * > > + * When userspace wants to configure and enable an ISP block it shall fully > > + * populate the block configuration and set the > > + * RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE bit in the @flags field. > > + * > > + * When userspace simply wants to disable an ISP block the > > + * RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bit should be set in @flags field. The > > + * driver ignores the rest of the block configuration structure in this case. > > + * > > + * If a new configuration of an ISP block has to be applied userspace shall > > + * fully populate the ISP block configuration and omit setting the > > + * RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE and RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bits > > + * in the @flags field. > > + * > > + * Setting both the RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE and > > + * RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bits in the @flags field is not allowed > > + * and not accepted by the driver. > > + * > > + * Userspace is responsible for correctly populating the parameters block header > > + * fields (@type, @flags and @size) and the block-specific parameters. > > + * > > + * For example: > > + * > > + * .. code-block:: c > > + * > > + * void populate_bls(struct rkisp1_ext_params_block_header *block) { > > + * struct rkisp1_ext_params_bls_config *bls = > > + * (struct rkisp1_ext_params_bls_config *)block; > > + * > > + * bls->header.type = RKISP1_EXT_PARAMS_BLOCK_ID_BLS; > > + * bls->header.flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; > > + * bls->header.size = sizeof(*bls); > > + * > > + * bls->config.enable_auto = 0; > > + * bls->config.fixed_val.r = blackLevelRed_; > > + * bls->config.fixed_val.gr = blackLevelGreenR_; > > + * bls->config.fixed_val.gb = blackLevelGreenB_; > > + * bls->config.fixed_val.b = blackLevelBlue_; > > + * } > > + * > > + * @type: The parameters block type, see > > + * :c:type:`rkisp1_ext_params_block_type` > > + * @flags: A bitmask of block flags > > + * @size: Size (in bytes) of the parameters block, including this header > > + */ > > +struct rkisp1_ext_params_block_header { > > + __u16 type; > > + __u16 flags; > > + __u32 size; > > +}; > > + > > +/** > > + * struct rkisp1_ext_params_bls_config - RkISP1 extensible params BLS config > > + * > > + * RkISP1 extensible parameters Black Level Subtraction configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Black Level Subtraction configuration, see > > + * :c:type:`rkisp1_cif_isp_bls_config` > > + */ > > +struct rkisp1_ext_params_bls_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_bls_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_dpcc_config - RkISP1 extensible params DPCC config > > + * > > + * RkISP1 extensible parameters Defective Pixel Cluster Correction configuration > > + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Defective Pixel Cluster Correction configuration, see > > + * :c:type:`rkisp1_cif_isp_dpcc_config` > > + */ > > +struct rkisp1_ext_params_dpcc_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_dpcc_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_sdg_config - RkISP1 extensible params SDG config > > + * > > + * RkISP1 extensible parameters Sensor Degamma configuration block. Identified > > + * by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Sensor Degamma configuration, see > > + * :c:type:`rkisp1_cif_isp_sdg_config` > > + */ > > +struct rkisp1_ext_params_sdg_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_sdg_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_lsc_config - RkISP1 extensible params LSC config > > + * > > + * RkISP1 extensible parameters Lens Shading Correction configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Lens Shading Correction configuration, see > > + * :c:type:`rkisp1_cif_isp_lsc_config` > > + */ > > +struct rkisp1_ext_params_lsc_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_lsc_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_awb_gain_config - RkISP1 extensible params AWB > > + * gain config > > + * > > + * RkISP1 extensible parameters Auto-White Balance Gains configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Auto-White Balance Gains configuration, see > > + * :c:type:`rkisp1_cif_isp_awb_gain_config` > > + */ > > +struct rkisp1_ext_params_awb_gain_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_awb_gain_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_flt_config - RkISP1 extensible params FLT config > > + * > > + * RkISP1 extensible parameters Filter configuration block. Identified by > > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Filter configuration, see :c:type:`rkisp1_cif_isp_flt_config` > > + */ > > +struct rkisp1_ext_params_flt_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_flt_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_bdm_config - RkISP1 extensible params BDM config > > + * > > + * RkISP1 extensible parameters Demosaicing configuration block. Identified by > > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Demosaicing configuration, see :c:type:`rkisp1_cif_isp_bdm_config` > > + */ > > +struct rkisp1_ext_params_bdm_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_bdm_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_ctk_config - RkISP1 extensible params CTK config > > + * > > + * RkISP1 extensible parameters Cross-Talk configuration block. Identified by > > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Cross-Talk configuration, see :c:type:`rkisp1_cif_isp_ctk_config` > > + */ > > +struct rkisp1_ext_params_ctk_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_ctk_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_goc_config - RkISP1 extensible params GOC config > > + * > > + * RkISP1 extensible parameters Gamma-Out configuration block. Identified by > > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Gamma-Out configuration, see :c:type:`rkisp1_cif_isp_goc_config` > > + */ > > +struct rkisp1_ext_params_goc_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_goc_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_dpf_config - RkISP1 extensible params DPF config > > + * > > + * RkISP1 extensible parameters De-noise Pre-Filter configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: De-noise Pre-Filter configuration, see > > + * :c:type:`rkisp1_cif_isp_dpf_config` > > + */ > > +struct rkisp1_ext_params_dpf_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_dpf_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_dpf_strength_config - RkISP1 extensible params DPF > > + * strength config > > + * > > + * RkISP1 extensible parameters De-noise Pre-Filter strength configuration > > + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: De-noise Pre-Filter strength configuration, see > > + * :c:type:`rkisp1_cif_isp_dpf_strength_config` > > + */ > > +struct rkisp1_ext_params_dpf_strength_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_dpf_strength_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_cproc_config - RkISP1 extensible params CPROC config > > + * > > + * RkISP1 extensible parameters Color Processing configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Color processing configuration, see > > + * :c:type:`rkisp1_cif_isp_cproc_config` > > + */ > > +struct rkisp1_ext_params_cproc_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_cproc_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_ie_config - RkISP1 extensible params IE config > > + * > > + * RkISP1 extensible parameters Image Effect configuration block. Identified by > > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_IE`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Image Effect configuration, see :c:type:`rkisp1_cif_isp_ie_config` > > + */ > > +struct rkisp1_ext_params_ie_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_ie_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_awb_meas_config - RkISP1 extensible params AWB > > + * Meas config > > + * > > + * RkISP1 extensible parameters Auto-White Balance Measurement configuration > > + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Auto-White Balance measure configuration, see > > + * :c:type:`rkisp1_cif_isp_awb_meas_config` > > + */ > > +struct rkisp1_ext_params_awb_meas_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_awb_meas_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_hst_config - RkISP1 extensible params Histogram config > > + * > > + * RkISP1 extensible parameters Histogram statistics configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Histogram statistics configuration, see > > + * :c:type:`rkisp1_cif_isp_hst_config` > > + */ > > +struct rkisp1_ext_params_hst_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_hst_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_aec_config - RkISP1 extensible params AEC config > > + * > > + * RkISP1 extensible parameters Auto-Exposure statistics configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Auto-Exposure statistics configuration, see > > + * :c:type:`rkisp1_cif_isp_aec_config` > > + */ > > +struct rkisp1_ext_params_aec_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_aec_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_afc_config - RkISP1 extensible params AFC config > > + * > > + * RkISP1 extensible parameters Auto-Focus statistics configuration block. > > + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Auto-Focus statistics configuration, see > > + * :c:type:`rkisp1_cif_isp_afc_config` > > + */ > > +struct rkisp1_ext_params_afc_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_afc_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_compand_bls_config - RkISP1 extensible params > > + * Compand BLS config > > + * > > + * RkISP1 extensible parameters Companding configuration block (black level > > + * subtraction). Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Companding BLS configuration, see > > + * :c:type:`rkisp1_cif_isp_compand_bls_config` > > + */ > > +struct rkisp1_ext_params_compand_bls_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_compand_bls_config config; > > +} __attribute__((aligned(8))); > > + > > +/** > > + * struct rkisp1_ext_params_compand_curve_config - RkISP1 extensible params > > + * Compand curve config > > + * > > + * RkISP1 extensible parameters Companding configuration block (expand and > > + * compression curves). Identified by > > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND` or > > + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS`. > > + * > > + * @header: The RkISP1 extensible parameters header, see > > + * :c:type:`rkisp1_ext_params_block_header` > > + * @config: Companding curve configuration, see > > + * :c:type:`rkisp1_cif_isp_compand_curve_config` > > + */ > > +struct rkisp1_ext_params_compand_curve_config { > > + struct rkisp1_ext_params_block_header header; > > + struct rkisp1_cif_isp_compand_curve_config config; > > +} __attribute__((aligned(8))); > > + > > +/* > > + * The rkisp1_ext_params_compand_curve_config structure is counted twice as it > > + * is used for both the COMPAND_EXPAND and COMPAND_COMPRESS block types. > > + */ > > +#define RKISP1_EXT_PARAMS_MAX_SIZE \ > > + (sizeof(struct rkisp1_ext_params_bls_config) +\ > > + sizeof(struct rkisp1_ext_params_dpcc_config) +\ > > + sizeof(struct rkisp1_ext_params_sdg_config) +\ > > + sizeof(struct rkisp1_ext_params_lsc_config) +\ > > + sizeof(struct rkisp1_ext_params_awb_gain_config) +\ > > + sizeof(struct rkisp1_ext_params_flt_config) +\ > > + sizeof(struct rkisp1_ext_params_bdm_config) +\ > > + sizeof(struct rkisp1_ext_params_ctk_config) +\ > > + sizeof(struct rkisp1_ext_params_goc_config) +\ > > + sizeof(struct rkisp1_ext_params_dpf_config) +\ > > + sizeof(struct rkisp1_ext_params_dpf_strength_config) +\ > > + sizeof(struct rkisp1_ext_params_cproc_config) +\ > > + sizeof(struct rkisp1_ext_params_ie_config) +\ > > + sizeof(struct rkisp1_ext_params_awb_meas_config) +\ > > + sizeof(struct rkisp1_ext_params_hst_config) +\ > > + sizeof(struct rkisp1_ext_params_aec_config) +\ > > + sizeof(struct rkisp1_ext_params_afc_config) +\ > > + sizeof(struct rkisp1_ext_params_compand_bls_config) +\ > > + sizeof(struct rkisp1_ext_params_compand_curve_config) +\ > > + sizeof(struct rkisp1_ext_params_compand_curve_config)) > > + > > +/** > > + * enum rksip1_ext_param_buffer_version - RkISP1 extensible parameters version > > + * > > + * @RKISP1_EXT_PARAM_BUFFER_V1: First version of RkISP1 extensible parameters > > + */ > > +enum rksip1_ext_param_buffer_version { > > + RKISP1_EXT_PARAM_BUFFER_V1 = 1, > > +}; > > + > > +/** > > + * struct rkisp1_ext_params_cfg - RkISP1 extensible parameters configuration > > + * > > + * This struct contains the configuration parameters of the RkISP1 ISP > > + * algorithms, serialized by userspace into a data buffer. Each configuration > > + * parameter block is represented by a block-specific structure which contains a > > + * :c:type:`rkisp1_ext_params_block_header` entry as first member. Userspace > > + * populates the @data buffer with configuration parameters for the blocks that > > + * it intends to configure. As a consequence, the data buffer effective size > > + * changes according to the number of ISP blocks that userspace intends to > > + * configure and is set by userspace in the @data_size field. > > + * > > + * The parameters buffer is versioned by the @version field to allow modifying > > + * and extending its definition. Userspace shall populate the @version field to > > + * inform the driver about the version it intends to use. The driver will parse > > + * and handle the @data buffer according to the data layout specific to the > > + * indicated version and return an error if the desired version is not > > + * supported. > > + * > > + * Currently the single RKISP1_EXT_PARAM_BUFFER_V1 version is supported. > > + * When a new format version will be added, a mechanism for userspace to query > > + * the supported format versions will be implemented in the form of a read-only > > + * V4L2 control. If such control is not available, userspace should assume only > > + * RKISP1_EXT_PARAM_BUFFER_V1 is supported by the driver. > > + * > > + * For each ISP block that userspace wants to configure, a block-specific > > + * structure is appended to the @data buffer, one after the other without gaps > > + * in between nor overlaps. Userspace shall populate the @data_size field with > > + * the effective size, in bytes, of the @data buffer. > > + * > > + * The expected memory layout of the parameters buffer is:: > > + * > > + * +-------------------- struct rkisp1_ext_params_cfg -------------------+ > > + * | version = RKISP_EXT_PARAMS_BUFFER_V1; | > > + * | data_size = sizeof(struct rkisp1_ext_params_bls_config) | > > + * | + sizeof(struct rkisp1_ext_params_dpcc_config); | > > + * | +------------------------- data ---------------------------------+ | > > + * | | +------------- struct rkisp1_ext_params_bls_config -----------+ | | > > + * | | | +-------- struct rkisp1_ext_params_block_header ---------+ | | | > > + * | | | | type = RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS; | | | | > > + * | | | | flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; | | | | > > + * | | | | size = sizeof(struct rkisp1_ext_params_bls_config); | | | | > > + * | | | +---------------------------------------------------------+ | | | > > + * | | | +---------- struct rkisp1_cif_isp_bls_config -------------+ | | | > > + * | | | | enable_auto = 0; | | | | > > + * | | | | fixed_val.r = 256; | | | | > > + * | | | | fixed_val.gr = 256; | | | | > > + * | | | | fixed_val.gb = 256; | | | | > > + * | | | | fixed_val.b = 256; | | | | > > + * | | | +---------------------------------------------------------+ | | | > > + * | | +------------ struct rkisp1_ext_params_dpcc_config -----------+ | | > > + * | | | +-------- struct rkisp1_ext_params_block_header ---------+ | | | > > + * | | | | type = RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC; | | | | > > + * | | | | flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; | | | | > > + * | | | | size = sizeof(struct rkisp1_ext_params_dpcc_config); | | | | > > + * | | | +---------------------------------------------------------+ | | | > > + * | | | +---------- struct rkisp1_cif_isp_dpcc_config ------------+ | | | > > + * | | | | mode = RKISP1_CIF_ISP_DPCC_MODE_STAGE1_ENABLE; | | | | > > + * | | | | output_mode = | | | | > > + * | | | | RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_STAGE1_INCL_G_CENTER; | | | | > > + * | | | | set_use = ... ; | | | | > > + * | | | | ... = ... ; | | | | > > + * | | | +---------------------------------------------------------+ | | | > > + * | | +-------------------------------------------------------------+ | | > > + * | +-----------------------------------------------------------------+ | > > + * +---------------------------------------------------------------------+ > > + * > > + * @version: The RkISP1 extensible parameters buffer version, see > > + * :c:type:`rksip1_ext_param_buffer_version` > > + * @data_size: The RkISP1 configuration data effective size, excluding this > > + * header > > + * @data: The RkISP1 extensible configuration data blocks > > + */ > > +struct rkisp1_ext_params_cfg { > > + __u32 version; > > + __u32 data_size; > > + __u8 data[RKISP1_EXT_PARAMS_MAX_SIZE]; > > +}; > > + > > #endif /* _RKISP1_CONFIG_H */ > > diff --git a/include/linux/v4l2-controls.h b/include/linux/v4l2-controls.h > > index 1e6e816b34b4..882a81805783 100644 > > --- a/include/linux/v4l2-controls.h > > +++ b/include/linux/v4l2-controls.h > > @@ -898,6 +898,8 @@ enum v4l2_mpeg_video_av1_level { > > V4L2_MPEG_VIDEO_AV1_LEVEL_7_3 = 23 > > }; > > > > +#define V4L2_CID_MPEG_VIDEO_AVERAGE_QP (V4L2_CID_CODEC_BASE + 657) > > + > > /* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ > > #define V4L2_CID_CODEC_CX2341X_BASE (V4L2_CTRL_CLASS_CODEC | 0x1000) > > #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_CODEC_CX2341X_BASE+0) > > diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h > > index 7fe522e85249..3829c0b60f52 100644 > > --- a/include/linux/videodev2.h > > +++ b/include/linux/videodev2.h > > @@ -829,9 +829,10 @@ struct v4l2_pix_format { > > /* Vendor specific - used for RK_ISP1 camera sub-system */ > > #define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */ > > #define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */ > > +#define V4L2_META_FMT_RK_ISP1_EXT_PARAMS v4l2_fourcc('R', 'K', '1', 'E') /* Rockchip ISP1 3a Extensible Parameters */ > > > > -/* The metadata format identifier for BE configuration buffers. */ > > -#define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') > > +/* Vendor specific - used for RaspberryPi PiSP */ > > +#define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') /* PiSP BE configuration */ > > > > /* The metadata format identifier for FE configuration buffers. */ > > #define V4L2_META_FMT_RPI_FE_CFG v4l2_fourcc('R', 'P', 'F', 'C')
diff --git a/include/linux/README b/include/linux/README index b7795309a216..ef178681f6eb 100644 --- a/include/linux/README +++ b/include/linux/README @@ -1,4 +1,4 @@ # SPDX-License-Identifier: CC0-1.0 -Files in this directory are imported from v6.10-rc1 of the Linux kernel. Do not +Files in this directory are imported from next-media-rkisp1-20240814-14-ga043ea54bbb9 of the Linux kernel. Do not modify them manually. diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h index 96b90cf0f8f7..63b1e9ed5200 100644 --- a/include/linux/dma-heap.h +++ b/include/linux/dma-heap.h @@ -19,7 +19,7 @@ #define DMA_HEAP_VALID_FD_FLAGS (O_CLOEXEC | O_ACCMODE) /* Currently no heap flags */ -#define DMA_HEAP_VALID_HEAP_FLAGS (0) +#define DMA_HEAP_VALID_HEAP_FLAGS (0ULL) /** * struct dma_heap_allocation_data - metadata passed from userspace for diff --git a/include/linux/drm_fourcc.h b/include/linux/drm_fourcc.h index d8e999400d85..db6798776663 100644 --- a/include/linux/drm_fourcc.h +++ b/include/linux/drm_fourcc.h @@ -1556,6 +1556,7 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) #define AMD_FMT_MOD_TILE_VER_GFX10 2 #define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3 #define AMD_FMT_MOD_TILE_VER_GFX11 4 +#define AMD_FMT_MOD_TILE_VER_GFX12 5 /* * 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical @@ -1566,6 +1567,8 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) /* * 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has * GFX9 as canonical version. + * + * 64K_D_2D on GFX12 is identical to 64K_D on GFX11. */ #define AMD_FMT_MOD_TILE_GFX9_64K_D 10 #define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25 @@ -1573,6 +1576,21 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier) #define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27 #define AMD_FMT_MOD_TILE_GFX11_256K_R_X 31 +/* Gfx12 swizzle modes: + * 0 - LINEAR + * 1 - 256B_2D - 2D block dimensions + * 2 - 4KB_2D + * 3 - 64KB_2D + * 4 - 256KB_2D + * 5 - 4KB_3D - 3D block dimensions + * 6 - 64KB_3D + * 7 - 256KB_3D + */ +#define AMD_FMT_MOD_TILE_GFX12_256B_2D 1 +#define AMD_FMT_MOD_TILE_GFX12_4K_2D 2 +#define AMD_FMT_MOD_TILE_GFX12_64K_2D 3 +#define AMD_FMT_MOD_TILE_GFX12_256K_2D 4 + #define AMD_FMT_MOD_DCC_BLOCK_64B 0 #define AMD_FMT_MOD_DCC_BLOCK_128B 1 #define AMD_FMT_MOD_DCC_BLOCK_256B 2 diff --git a/include/linux/rkisp1-config.h b/include/linux/rkisp1-config.h index f87c6bd49a5b..edbc6cb65d1c 100644 --- a/include/linux/rkisp1-config.h +++ b/include/linux/rkisp1-config.h @@ -164,6 +164,11 @@ #define RKISP1_CIF_ISP_DPF_MAX_NLF_COEFFS 17 #define RKISP1_CIF_ISP_DPF_MAX_SPATIAL_COEFFS 6 +/* + * Compand + */ +#define RKISP1_CIF_ISP_COMPAND_NUM_POINTS 64 + /* * Measurement types */ @@ -851,6 +856,39 @@ struct rkisp1_params_cfg { struct rkisp1_cif_isp_isp_other_cfg others; }; +/** + * struct rkisp1_cif_isp_compand_bls_config - Rockchip ISP1 Companding parameters (BLS) + * @r: Fixed subtraction value for Bayer pattern R + * @gr: Fixed subtraction value for Bayer pattern Gr + * @gb: Fixed subtraction value for Bayer pattern Gb + * @b: Fixed subtraction value for Bayer pattern B + * + * The values will be subtracted from the sensor values. Note that unlike the + * dedicated BLS block, the BLS values in the compander are 20-bit unsigned. + */ +struct rkisp1_cif_isp_compand_bls_config { + __u32 r; + __u32 gr; + __u32 gb; + __u32 b; +}; + +/** + * struct rkisp1_cif_isp_compand_curve_config - Rockchip ISP1 Companding + * parameters (expand and compression curves) + * @px: Compand curve x-values. Each value stores the distance from the + * previous x-value, expressed as log2 of the distance on 5 bits. + * @x: Compand curve x-values. The functionality of these parameters are + * unknown due to do a lack of hardware documentation, but these are left + * here for future compatibility purposes. + * @y: Compand curve y-values + */ +struct rkisp1_cif_isp_compand_curve_config { + __u8 px[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; + __u32 x[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; + __u32 y[RKISP1_CIF_ISP_COMPAND_NUM_POINTS]; +}; + /*---------- PART2: Measurement Statistics ------------*/ /** @@ -996,4 +1034,544 @@ struct rkisp1_stat_buffer { struct rkisp1_cif_isp_stat params; }; +/*---------- PART3: Extensible Configuration Parameters ------------*/ + +/** + * enum rkisp1_ext_params_block_type - RkISP1 extensible params block type + * + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS: Black level subtraction + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC: Defect pixel cluster correction + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG: Sensor de-gamma + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN: Auto white balance gains + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT: ISP filtering + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM: Bayer de-mosaic + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK: Cross-talk correction + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC: Gamma out correction + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF: De-noise pre-filter + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH: De-noise pre-filter strength + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC: Color processing + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_IE: Image effects + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC: Lens shading correction + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS: Auto white balance statistics + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS: Histogram statistics + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS: Auto exposure statistics + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS: Auto-focus statistics + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS: BLS in the compand block + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND: Companding expand curve + * @RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS: Companding compress curve + */ +enum rkisp1_ext_params_block_type { + RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS, + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC, + RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG, + RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN, + RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT, + RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM, + RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK, + RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC, + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF, + RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH, + RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC, + RKISP1_EXT_PARAMS_BLOCK_TYPE_IE, + RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC, + RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS, + RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS, + RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS, + RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS, + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS, + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND, + RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS, +}; + +#define RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE (1U << 0) +#define RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE (1U << 1) + +/** + * struct rkisp1_ext_params_block_header - RkISP1 extensible parameters block + * header + * + * This structure represents the common part of all the ISP configuration + * blocks. Each parameters block shall embed an instance of this structure type + * as its first member, followed by the block-specific configuration data. The + * driver inspects this common header to discern the block type and its size and + * properly handle the block content by casting it to the correct block-specific + * type. + * + * The @type field is one of the values enumerated by + * :c:type:`rkisp1_ext_params_block_type` and specifies how the data should be + * interpreted by the driver. The @size field specifies the size of the + * parameters block and is used by the driver for validation purposes. + * + * The @flags field is a bitmask of per-block flags RKISP1_EXT_PARAMS_FL_*. + * + * When userspace wants to configure and enable an ISP block it shall fully + * populate the block configuration and set the + * RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE bit in the @flags field. + * + * When userspace simply wants to disable an ISP block the + * RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bit should be set in @flags field. The + * driver ignores the rest of the block configuration structure in this case. + * + * If a new configuration of an ISP block has to be applied userspace shall + * fully populate the ISP block configuration and omit setting the + * RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE and RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bits + * in the @flags field. + * + * Setting both the RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE and + * RKISP1_EXT_PARAMS_FL_BLOCK_DISABLE bits in the @flags field is not allowed + * and not accepted by the driver. + * + * Userspace is responsible for correctly populating the parameters block header + * fields (@type, @flags and @size) and the block-specific parameters. + * + * For example: + * + * .. code-block:: c + * + * void populate_bls(struct rkisp1_ext_params_block_header *block) { + * struct rkisp1_ext_params_bls_config *bls = + * (struct rkisp1_ext_params_bls_config *)block; + * + * bls->header.type = RKISP1_EXT_PARAMS_BLOCK_ID_BLS; + * bls->header.flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; + * bls->header.size = sizeof(*bls); + * + * bls->config.enable_auto = 0; + * bls->config.fixed_val.r = blackLevelRed_; + * bls->config.fixed_val.gr = blackLevelGreenR_; + * bls->config.fixed_val.gb = blackLevelGreenB_; + * bls->config.fixed_val.b = blackLevelBlue_; + * } + * + * @type: The parameters block type, see + * :c:type:`rkisp1_ext_params_block_type` + * @flags: A bitmask of block flags + * @size: Size (in bytes) of the parameters block, including this header + */ +struct rkisp1_ext_params_block_header { + __u16 type; + __u16 flags; + __u32 size; +}; + +/** + * struct rkisp1_ext_params_bls_config - RkISP1 extensible params BLS config + * + * RkISP1 extensible parameters Black Level Subtraction configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Black Level Subtraction configuration, see + * :c:type:`rkisp1_cif_isp_bls_config` + */ +struct rkisp1_ext_params_bls_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_bls_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_dpcc_config - RkISP1 extensible params DPCC config + * + * RkISP1 extensible parameters Defective Pixel Cluster Correction configuration + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Defective Pixel Cluster Correction configuration, see + * :c:type:`rkisp1_cif_isp_dpcc_config` + */ +struct rkisp1_ext_params_dpcc_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_dpcc_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_sdg_config - RkISP1 extensible params SDG config + * + * RkISP1 extensible parameters Sensor Degamma configuration block. Identified + * by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_SDG`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Sensor Degamma configuration, see + * :c:type:`rkisp1_cif_isp_sdg_config` + */ +struct rkisp1_ext_params_sdg_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_sdg_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_lsc_config - RkISP1 extensible params LSC config + * + * RkISP1 extensible parameters Lens Shading Correction configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_LSC`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Lens Shading Correction configuration, see + * :c:type:`rkisp1_cif_isp_lsc_config` + */ +struct rkisp1_ext_params_lsc_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_lsc_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_awb_gain_config - RkISP1 extensible params AWB + * gain config + * + * RkISP1 extensible parameters Auto-White Balance Gains configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_GAIN`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Auto-White Balance Gains configuration, see + * :c:type:`rkisp1_cif_isp_awb_gain_config` + */ +struct rkisp1_ext_params_awb_gain_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_awb_gain_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_flt_config - RkISP1 extensible params FLT config + * + * RkISP1 extensible parameters Filter configuration block. Identified by + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_FLT`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Filter configuration, see :c:type:`rkisp1_cif_isp_flt_config` + */ +struct rkisp1_ext_params_flt_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_flt_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_bdm_config - RkISP1 extensible params BDM config + * + * RkISP1 extensible parameters Demosaicing configuration block. Identified by + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_BDM`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Demosaicing configuration, see :c:type:`rkisp1_cif_isp_bdm_config` + */ +struct rkisp1_ext_params_bdm_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_bdm_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_ctk_config - RkISP1 extensible params CTK config + * + * RkISP1 extensible parameters Cross-Talk configuration block. Identified by + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_CTK`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Cross-Talk configuration, see :c:type:`rkisp1_cif_isp_ctk_config` + */ +struct rkisp1_ext_params_ctk_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_ctk_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_goc_config - RkISP1 extensible params GOC config + * + * RkISP1 extensible parameters Gamma-Out configuration block. Identified by + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_GOC`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Gamma-Out configuration, see :c:type:`rkisp1_cif_isp_goc_config` + */ +struct rkisp1_ext_params_goc_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_goc_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_dpf_config - RkISP1 extensible params DPF config + * + * RkISP1 extensible parameters De-noise Pre-Filter configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: De-noise Pre-Filter configuration, see + * :c:type:`rkisp1_cif_isp_dpf_config` + */ +struct rkisp1_ext_params_dpf_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_dpf_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_dpf_strength_config - RkISP1 extensible params DPF + * strength config + * + * RkISP1 extensible parameters De-noise Pre-Filter strength configuration + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_DPF_STRENGTH`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: De-noise Pre-Filter strength configuration, see + * :c:type:`rkisp1_cif_isp_dpf_strength_config` + */ +struct rkisp1_ext_params_dpf_strength_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_dpf_strength_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_cproc_config - RkISP1 extensible params CPROC config + * + * RkISP1 extensible parameters Color Processing configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_CPROC`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Color processing configuration, see + * :c:type:`rkisp1_cif_isp_cproc_config` + */ +struct rkisp1_ext_params_cproc_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_cproc_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_ie_config - RkISP1 extensible params IE config + * + * RkISP1 extensible parameters Image Effect configuration block. Identified by + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_IE`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Image Effect configuration, see :c:type:`rkisp1_cif_isp_ie_config` + */ +struct rkisp1_ext_params_ie_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_ie_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_awb_meas_config - RkISP1 extensible params AWB + * Meas config + * + * RkISP1 extensible parameters Auto-White Balance Measurement configuration + * block. Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AWB_MEAS`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Auto-White Balance measure configuration, see + * :c:type:`rkisp1_cif_isp_awb_meas_config` + */ +struct rkisp1_ext_params_awb_meas_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_awb_meas_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_hst_config - RkISP1 extensible params Histogram config + * + * RkISP1 extensible parameters Histogram statistics configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_HST_MEAS`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Histogram statistics configuration, see + * :c:type:`rkisp1_cif_isp_hst_config` + */ +struct rkisp1_ext_params_hst_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_hst_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_aec_config - RkISP1 extensible params AEC config + * + * RkISP1 extensible parameters Auto-Exposure statistics configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AEC_MEAS`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Auto-Exposure statistics configuration, see + * :c:type:`rkisp1_cif_isp_aec_config` + */ +struct rkisp1_ext_params_aec_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_aec_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_afc_config - RkISP1 extensible params AFC config + * + * RkISP1 extensible parameters Auto-Focus statistics configuration block. + * Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_AFC_MEAS`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Auto-Focus statistics configuration, see + * :c:type:`rkisp1_cif_isp_afc_config` + */ +struct rkisp1_ext_params_afc_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_afc_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_compand_bls_config - RkISP1 extensible params + * Compand BLS config + * + * RkISP1 extensible parameters Companding configuration block (black level + * subtraction). Identified by :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_BLS`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Companding BLS configuration, see + * :c:type:`rkisp1_cif_isp_compand_bls_config` + */ +struct rkisp1_ext_params_compand_bls_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_compand_bls_config config; +} __attribute__((aligned(8))); + +/** + * struct rkisp1_ext_params_compand_curve_config - RkISP1 extensible params + * Compand curve config + * + * RkISP1 extensible parameters Companding configuration block (expand and + * compression curves). Identified by + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_EXPAND` or + * :c:type:`RKISP1_EXT_PARAMS_BLOCK_TYPE_COMPAND_COMPRESS`. + * + * @header: The RkISP1 extensible parameters header, see + * :c:type:`rkisp1_ext_params_block_header` + * @config: Companding curve configuration, see + * :c:type:`rkisp1_cif_isp_compand_curve_config` + */ +struct rkisp1_ext_params_compand_curve_config { + struct rkisp1_ext_params_block_header header; + struct rkisp1_cif_isp_compand_curve_config config; +} __attribute__((aligned(8))); + +/* + * The rkisp1_ext_params_compand_curve_config structure is counted twice as it + * is used for both the COMPAND_EXPAND and COMPAND_COMPRESS block types. + */ +#define RKISP1_EXT_PARAMS_MAX_SIZE \ + (sizeof(struct rkisp1_ext_params_bls_config) +\ + sizeof(struct rkisp1_ext_params_dpcc_config) +\ + sizeof(struct rkisp1_ext_params_sdg_config) +\ + sizeof(struct rkisp1_ext_params_lsc_config) +\ + sizeof(struct rkisp1_ext_params_awb_gain_config) +\ + sizeof(struct rkisp1_ext_params_flt_config) +\ + sizeof(struct rkisp1_ext_params_bdm_config) +\ + sizeof(struct rkisp1_ext_params_ctk_config) +\ + sizeof(struct rkisp1_ext_params_goc_config) +\ + sizeof(struct rkisp1_ext_params_dpf_config) +\ + sizeof(struct rkisp1_ext_params_dpf_strength_config) +\ + sizeof(struct rkisp1_ext_params_cproc_config) +\ + sizeof(struct rkisp1_ext_params_ie_config) +\ + sizeof(struct rkisp1_ext_params_awb_meas_config) +\ + sizeof(struct rkisp1_ext_params_hst_config) +\ + sizeof(struct rkisp1_ext_params_aec_config) +\ + sizeof(struct rkisp1_ext_params_afc_config) +\ + sizeof(struct rkisp1_ext_params_compand_bls_config) +\ + sizeof(struct rkisp1_ext_params_compand_curve_config) +\ + sizeof(struct rkisp1_ext_params_compand_curve_config)) + +/** + * enum rksip1_ext_param_buffer_version - RkISP1 extensible parameters version + * + * @RKISP1_EXT_PARAM_BUFFER_V1: First version of RkISP1 extensible parameters + */ +enum rksip1_ext_param_buffer_version { + RKISP1_EXT_PARAM_BUFFER_V1 = 1, +}; + +/** + * struct rkisp1_ext_params_cfg - RkISP1 extensible parameters configuration + * + * This struct contains the configuration parameters of the RkISP1 ISP + * algorithms, serialized by userspace into a data buffer. Each configuration + * parameter block is represented by a block-specific structure which contains a + * :c:type:`rkisp1_ext_params_block_header` entry as first member. Userspace + * populates the @data buffer with configuration parameters for the blocks that + * it intends to configure. As a consequence, the data buffer effective size + * changes according to the number of ISP blocks that userspace intends to + * configure and is set by userspace in the @data_size field. + * + * The parameters buffer is versioned by the @version field to allow modifying + * and extending its definition. Userspace shall populate the @version field to + * inform the driver about the version it intends to use. The driver will parse + * and handle the @data buffer according to the data layout specific to the + * indicated version and return an error if the desired version is not + * supported. + * + * Currently the single RKISP1_EXT_PARAM_BUFFER_V1 version is supported. + * When a new format version will be added, a mechanism for userspace to query + * the supported format versions will be implemented in the form of a read-only + * V4L2 control. If such control is not available, userspace should assume only + * RKISP1_EXT_PARAM_BUFFER_V1 is supported by the driver. + * + * For each ISP block that userspace wants to configure, a block-specific + * structure is appended to the @data buffer, one after the other without gaps + * in between nor overlaps. Userspace shall populate the @data_size field with + * the effective size, in bytes, of the @data buffer. + * + * The expected memory layout of the parameters buffer is:: + * + * +-------------------- struct rkisp1_ext_params_cfg -------------------+ + * | version = RKISP_EXT_PARAMS_BUFFER_V1; | + * | data_size = sizeof(struct rkisp1_ext_params_bls_config) | + * | + sizeof(struct rkisp1_ext_params_dpcc_config); | + * | +------------------------- data ---------------------------------+ | + * | | +------------- struct rkisp1_ext_params_bls_config -----------+ | | + * | | | +-------- struct rkisp1_ext_params_block_header ---------+ | | | + * | | | | type = RKISP1_EXT_PARAMS_BLOCK_TYPE_BLS; | | | | + * | | | | flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; | | | | + * | | | | size = sizeof(struct rkisp1_ext_params_bls_config); | | | | + * | | | +---------------------------------------------------------+ | | | + * | | | +---------- struct rkisp1_cif_isp_bls_config -------------+ | | | + * | | | | enable_auto = 0; | | | | + * | | | | fixed_val.r = 256; | | | | + * | | | | fixed_val.gr = 256; | | | | + * | | | | fixed_val.gb = 256; | | | | + * | | | | fixed_val.b = 256; | | | | + * | | | +---------------------------------------------------------+ | | | + * | | +------------ struct rkisp1_ext_params_dpcc_config -----------+ | | + * | | | +-------- struct rkisp1_ext_params_block_header ---------+ | | | + * | | | | type = RKISP1_EXT_PARAMS_BLOCK_TYPE_DPCC; | | | | + * | | | | flags = RKISP1_EXT_PARAMS_FL_BLOCK_ENABLE; | | | | + * | | | | size = sizeof(struct rkisp1_ext_params_dpcc_config); | | | | + * | | | +---------------------------------------------------------+ | | | + * | | | +---------- struct rkisp1_cif_isp_dpcc_config ------------+ | | | + * | | | | mode = RKISP1_CIF_ISP_DPCC_MODE_STAGE1_ENABLE; | | | | + * | | | | output_mode = | | | | + * | | | | RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_STAGE1_INCL_G_CENTER; | | | | + * | | | | set_use = ... ; | | | | + * | | | | ... = ... ; | | | | + * | | | +---------------------------------------------------------+ | | | + * | | +-------------------------------------------------------------+ | | + * | +-----------------------------------------------------------------+ | + * +---------------------------------------------------------------------+ + * + * @version: The RkISP1 extensible parameters buffer version, see + * :c:type:`rksip1_ext_param_buffer_version` + * @data_size: The RkISP1 configuration data effective size, excluding this + * header + * @data: The RkISP1 extensible configuration data blocks + */ +struct rkisp1_ext_params_cfg { + __u32 version; + __u32 data_size; + __u8 data[RKISP1_EXT_PARAMS_MAX_SIZE]; +}; + #endif /* _RKISP1_CONFIG_H */ diff --git a/include/linux/v4l2-controls.h b/include/linux/v4l2-controls.h index 1e6e816b34b4..882a81805783 100644 --- a/include/linux/v4l2-controls.h +++ b/include/linux/v4l2-controls.h @@ -898,6 +898,8 @@ enum v4l2_mpeg_video_av1_level { V4L2_MPEG_VIDEO_AV1_LEVEL_7_3 = 23 }; +#define V4L2_CID_MPEG_VIDEO_AVERAGE_QP (V4L2_CID_CODEC_BASE + 657) + /* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ #define V4L2_CID_CODEC_CX2341X_BASE (V4L2_CTRL_CLASS_CODEC | 0x1000) #define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_CODEC_CX2341X_BASE+0) diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 7fe522e85249..3829c0b60f52 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h @@ -829,9 +829,10 @@ struct v4l2_pix_format { /* Vendor specific - used for RK_ISP1 camera sub-system */ #define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */ #define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */ +#define V4L2_META_FMT_RK_ISP1_EXT_PARAMS v4l2_fourcc('R', 'K', '1', 'E') /* Rockchip ISP1 3a Extensible Parameters */ -/* The metadata format identifier for BE configuration buffers. */ -#define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') +/* Vendor specific - used for RaspberryPi PiSP */ +#define V4L2_META_FMT_RPI_BE_CFG v4l2_fourcc('R', 'P', 'B', 'C') /* PiSP BE configuration */ /* The metadata format identifier for FE configuration buffers. */ #define V4L2_META_FMT_RPI_FE_CFG v4l2_fourcc('R', 'P', 'F', 'C')