Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 293 lines 7.0 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. 4 */ 5 6#ifndef __IRIS_PLATFORM_COMMON_H__ 7#define __IRIS_PLATFORM_COMMON_H__ 8 9#include <linux/bits.h> 10#include "iris_buffer.h" 11 12struct iris_core; 13struct iris_inst; 14 15#define IRIS_PAS_ID 9 16#define HW_RESPONSE_TIMEOUT_VALUE (1000) /* milliseconds */ 17#define AUTOSUSPEND_DELAY_VALUE (HW_RESPONSE_TIMEOUT_VALUE + 500) /* milliseconds */ 18 19#define REGISTER_BIT_DEPTH(luma, chroma) ((luma) << 16 | (chroma)) 20#define BIT_DEPTH_8 REGISTER_BIT_DEPTH(8, 8) 21#define CODED_FRAMES_PROGRESSIVE 0x0 22#define DEFAULT_MAX_HOST_BUF_COUNT 64 23#define DEFAULT_MAX_HOST_BURST_BUF_COUNT 256 24#define DEFAULT_FPS 30 25#define MAXIMUM_FPS 480 26#define NUM_MBS_8K ((8192 * 4352) / 256) 27#define MIN_QP_8BIT 1 28#define MAX_QP 51 29#define MAX_QP_HEVC 63 30#define DEFAULT_QP 20 31#define BITRATE_DEFAULT 20000000 32 33enum stage_type { 34 STAGE_1 = 1, 35 STAGE_2 = 2, 36}; 37 38enum pipe_type { 39 PIPE_1 = 1, 40 PIPE_2 = 2, 41 PIPE_4 = 4, 42}; 43 44extern const struct iris_platform_data qcs8300_data; 45extern const struct iris_platform_data sc7280_data; 46extern const struct iris_platform_data sm8250_data; 47extern const struct iris_platform_data sm8550_data; 48extern const struct iris_platform_data sm8650_data; 49extern const struct iris_platform_data sm8750_data; 50 51enum platform_clk_type { 52 IRIS_AXI_CLK, /* AXI0 in case of platforms with multiple AXI clocks */ 53 IRIS_CTRL_CLK, 54 IRIS_AHB_CLK, 55 IRIS_HW_CLK, 56 IRIS_HW_AHB_CLK, 57 IRIS_AXI1_CLK, 58 IRIS_CTRL_FREERUN_CLK, 59 IRIS_HW_FREERUN_CLK, 60 IRIS_BSE_HW_CLK, 61 IRIS_VPP0_HW_CLK, 62 IRIS_VPP1_HW_CLK, 63 IRIS_APV_HW_CLK, 64}; 65 66struct platform_clk_data { 67 enum platform_clk_type clk_type; 68 const char *clk_name; 69}; 70 71struct tz_cp_config { 72 u32 cp_start; 73 u32 cp_size; 74 u32 cp_nonpixel_start; 75 u32 cp_nonpixel_size; 76}; 77 78struct ubwc_config_data { 79 u32 max_channels; 80 u32 mal_length; 81 u32 highest_bank_bit; 82 u32 bank_swzl_level; 83 u32 bank_swz2_level; 84 u32 bank_swz3_level; 85 u32 bank_spreading; 86}; 87 88struct platform_inst_caps { 89 u32 min_frame_width; 90 u32 max_frame_width; 91 u32 min_frame_height; 92 u32 max_frame_height; 93 u32 max_mbpf; 94 u32 mb_cycles_vsp; 95 u32 mb_cycles_vpp; 96 u32 mb_cycles_fw; 97 u32 mb_cycles_fw_vpp; 98 u32 num_comv; 99 u32 max_frame_rate; 100 u32 max_operating_rate; 101}; 102 103enum platform_inst_fw_cap_type { 104 PROFILE_H264 = 1, 105 PROFILE_HEVC, 106 PROFILE_VP9, 107 LEVEL_H264, 108 LEVEL_HEVC, 109 LEVEL_VP9, 110 PROFILE_AV1, 111 LEVEL_AV1, 112 TIER_AV1, 113 DRAP, 114 FILM_GRAIN, 115 SUPER_BLOCK, 116 ENH_LAYER_COUNT, 117 INPUT_BUF_HOST_MAX_COUNT, 118 OUTPUT_BUF_HOST_MAX_COUNT, 119 STAGE, 120 PIPE, 121 POC, 122 CODED_FRAMES, 123 BIT_DEPTH, 124 RAP_FRAME, 125 TIER, 126 HEADER_MODE, 127 PREPEND_SPSPPS_TO_IDR, 128 BITRATE, 129 BITRATE_PEAK, 130 BITRATE_MODE, 131 FRAME_SKIP_MODE, 132 FRAME_RC_ENABLE, 133 GOP_SIZE, 134 ENTROPY_MODE, 135 MIN_FRAME_QP_H264, 136 MIN_FRAME_QP_HEVC, 137 MAX_FRAME_QP_H264, 138 MAX_FRAME_QP_HEVC, 139 I_FRAME_MIN_QP_H264, 140 I_FRAME_MIN_QP_HEVC, 141 P_FRAME_MIN_QP_H264, 142 P_FRAME_MIN_QP_HEVC, 143 B_FRAME_MIN_QP_H264, 144 B_FRAME_MIN_QP_HEVC, 145 I_FRAME_MAX_QP_H264, 146 I_FRAME_MAX_QP_HEVC, 147 P_FRAME_MAX_QP_H264, 148 P_FRAME_MAX_QP_HEVC, 149 B_FRAME_MAX_QP_H264, 150 B_FRAME_MAX_QP_HEVC, 151 I_FRAME_QP_H264, 152 I_FRAME_QP_HEVC, 153 P_FRAME_QP_H264, 154 P_FRAME_QP_HEVC, 155 B_FRAME_QP_H264, 156 B_FRAME_QP_HEVC, 157 ROTATION, 158 HFLIP, 159 VFLIP, 160 IR_TYPE, 161 IR_PERIOD, 162 INST_FW_CAP_MAX, 163}; 164 165enum platform_inst_fw_cap_flags { 166 CAP_FLAG_DYNAMIC_ALLOWED = BIT(0), 167 CAP_FLAG_MENU = BIT(1), 168 CAP_FLAG_INPUT_PORT = BIT(2), 169 CAP_FLAG_OUTPUT_PORT = BIT(3), 170 CAP_FLAG_CLIENT_SET = BIT(4), 171 CAP_FLAG_BITMASK = BIT(5), 172 CAP_FLAG_VOLATILE = BIT(6), 173}; 174 175struct platform_inst_fw_cap { 176 enum platform_inst_fw_cap_type cap_id; 177 s64 min; 178 s64 max; 179 s64 step_or_mask; 180 s64 value; 181 u32 hfi_id; 182 enum platform_inst_fw_cap_flags flags; 183 int (*set)(struct iris_inst *inst, 184 enum platform_inst_fw_cap_type cap_id); 185}; 186 187struct bw_info { 188 u32 mbs_per_sec; 189 u32 bw_ddr; 190}; 191 192struct iris_core_power { 193 u64 clk_freq; 194 u64 icc_bw; 195}; 196 197struct iris_inst_power { 198 u64 min_freq; 199 u32 icc_bw; 200}; 201 202struct icc_vote_data { 203 u32 height, width; 204 u32 fps; 205}; 206 207enum platform_pm_domain_type { 208 IRIS_CTRL_POWER_DOMAIN, 209 IRIS_HW_POWER_DOMAIN, 210 IRIS_VPP0_HW_POWER_DOMAIN, 211 IRIS_VPP1_HW_POWER_DOMAIN, 212 IRIS_APV_HW_POWER_DOMAIN, 213}; 214 215struct iris_platform_data { 216 void (*init_hfi_command_ops)(struct iris_core *core); 217 void (*init_hfi_response_ops)(struct iris_core *core); 218 struct iris_inst *(*get_instance)(void); 219 u32 (*get_vpu_buffer_size)(struct iris_inst *inst, enum iris_buffer_type buffer_type); 220 const struct vpu_ops *vpu_ops; 221 void (*set_preset_registers)(struct iris_core *core); 222 const struct icc_info *icc_tbl; 223 unsigned int icc_tbl_size; 224 const struct bw_info *bw_tbl_dec; 225 unsigned int bw_tbl_dec_size; 226 const char * const *pmdomain_tbl; 227 unsigned int pmdomain_tbl_size; 228 const char * const *opp_pd_tbl; 229 unsigned int opp_pd_tbl_size; 230 const struct platform_clk_data *clk_tbl; 231 const char * const *opp_clk_tbl; 232 unsigned int clk_tbl_size; 233 const char * const *clk_rst_tbl; 234 unsigned int clk_rst_tbl_size; 235 const char * const *controller_rst_tbl; 236 unsigned int controller_rst_tbl_size; 237 u64 dma_mask; 238 const char *fwname; 239 u32 pas_id; 240 struct iris_fmt *inst_iris_fmts; 241 u32 inst_iris_fmts_size; 242 struct platform_inst_caps *inst_caps; 243 const struct platform_inst_fw_cap *inst_fw_caps_dec; 244 u32 inst_fw_caps_dec_size; 245 const struct platform_inst_fw_cap *inst_fw_caps_enc; 246 u32 inst_fw_caps_enc_size; 247 const struct tz_cp_config *tz_cp_config_data; 248 u32 tz_cp_config_data_size; 249 u32 core_arch; 250 u32 hw_response_timeout; 251 struct ubwc_config_data *ubwc_config; 252 u32 num_vpp_pipe; 253 bool no_aon; 254 u32 max_session_count; 255 /* max number of macroblocks per frame supported */ 256 u32 max_core_mbpf; 257 /* max number of macroblocks per second supported */ 258 u32 max_core_mbps; 259 const u32 *dec_input_config_params_default; 260 unsigned int dec_input_config_params_default_size; 261 const u32 *dec_input_config_params_hevc; 262 unsigned int dec_input_config_params_hevc_size; 263 const u32 *dec_input_config_params_vp9; 264 unsigned int dec_input_config_params_vp9_size; 265 const u32 *dec_input_config_params_av1; 266 unsigned int dec_input_config_params_av1_size; 267 const u32 *dec_output_config_params; 268 unsigned int dec_output_config_params_size; 269 const u32 *enc_input_config_params; 270 unsigned int enc_input_config_params_size; 271 const u32 *enc_output_config_params; 272 unsigned int enc_output_config_params_size; 273 const u32 *dec_input_prop; 274 unsigned int dec_input_prop_size; 275 const u32 *dec_output_prop_avc; 276 unsigned int dec_output_prop_avc_size; 277 const u32 *dec_output_prop_hevc; 278 unsigned int dec_output_prop_hevc_size; 279 const u32 *dec_output_prop_vp9; 280 unsigned int dec_output_prop_vp9_size; 281 const u32 *dec_output_prop_av1; 282 unsigned int dec_output_prop_av1_size; 283 const u32 *dec_ip_int_buf_tbl; 284 unsigned int dec_ip_int_buf_tbl_size; 285 const u32 *dec_op_int_buf_tbl; 286 unsigned int dec_op_int_buf_tbl_size; 287 const u32 *enc_ip_int_buf_tbl; 288 unsigned int enc_ip_int_buf_tbl_size; 289 const u32 *enc_op_int_buf_tbl; 290 unsigned int enc_op_int_buf_tbl_size; 291}; 292 293#endif