1 /* SPDX-License-Identifier: Apache-2.0 */ 2 /* 3 * Copyright (c) 2025 Rockchip Electronics Co., Ltd. 4 */ 5 6 #ifndef __HAL_JPEGE_VEPU511_REG_H__ 7 #define __HAL_JPEGE_VEPU511_REG_H__ 8 9 #include "rk_type.h" 10 #include "vepu511_common.h" 11 12 typedef struct Vepu511JpegRoiRegion_t { 13 struct { 14 RK_U32 roi0_rdoq_start_x : 11; 15 RK_U32 roi0_rdoq_start_y : 11; 16 RK_U32 reserved : 3; 17 RK_U32 roi0_rdoq_level : 6; 18 RK_U32 roi0_rdoq_en : 1; 19 } roi_cfg0; 20 21 struct { 22 RK_U32 roi0_rdoq_width_m1 : 11; 23 RK_U32 roi0_rdoq_height_m1 : 11; 24 /* the below 10 bits only for roi0 */ 25 RK_U32 reserved : 3; 26 RK_U32 frm_rdoq_level : 6; 27 RK_U32 frm_rdoq_en : 1; 28 } roi_cfg1; 29 } Vepu511JpegRoiRegion; 30 31 /* 0x00000400 reg256 - 0x0000050c reg323*/ 32 typedef struct Vepu511JpegReg_t { 33 /* 0x00000400 reg256 */ 34 RK_U32 adr_bsbt; 35 36 /* 0x00000404 reg257 */ 37 RK_U32 adr_bsbb; 38 39 /* 0x00000408 reg258 */ 40 RK_U32 adr_bsbs; 41 42 /* 0x0000040c reg259 */ 43 RK_U32 adr_bsbr; 44 45 /* 0x00000410 reg260 */ 46 RK_U32 adr_vsy_b; 47 48 /* 0x00000414 reg261 */ 49 RK_U32 adr_vsc_b; 50 51 /* 0x00000418 reg262 */ 52 RK_U32 adr_vsy_t; 53 54 /* 0x0000041c reg263 */ 55 RK_U32 adr_vsc_t; 56 57 /* 0x00000420 reg264 */ 58 RK_U32 adr_src0; 59 60 /* 0x00000424 reg265 */ 61 RK_U32 adr_src1; 62 63 /* 0x00000428 reg266 */ 64 RK_U32 adr_src2; 65 66 /* 0x0000042c reg267 */ 67 RK_U32 bsp_size; 68 69 /* 0x430 - 0x43c */ 70 RK_U32 reserved268_271[4]; 71 72 /* 0x00000440 reg272 */ 73 struct { 74 RK_U32 pic_wd8_m1 : 11; 75 RK_U32 reserved : 1; 76 RK_U32 pp0_vnum_m1 : 4; 77 RK_U32 pic_hd8_m1 : 11; 78 RK_U32 reserved1 : 1; 79 RK_U32 pp0_jnum_m1 : 4; 80 } enc_rsl; 81 82 /* 0x00000444 reg273 */ 83 struct { 84 RK_U32 pic_wfill : 6; 85 RK_U32 reserved : 10; 86 RK_U32 pic_hfill : 6; 87 RK_U32 reserved1 : 10; 88 } src_fill; 89 90 /* 0x00000448 reg274 */ 91 struct { 92 RK_U32 alpha_swap : 1; 93 RK_U32 rbuv_swap : 1; 94 RK_U32 src_cfmt : 4; 95 RK_U32 reserved : 2; 96 RK_U32 src_range_trns_en : 1; 97 RK_U32 src_range_trns_sel : 1; 98 RK_U32 chroma_ds_mode : 1; 99 RK_U32 reserved1 : 21; 100 } src_fmt; 101 102 /* 0x0000044c reg275 */ 103 struct { 104 RK_U32 csc_wgt_b2y : 9; 105 RK_U32 csc_wgt_g2y : 9; 106 RK_U32 csc_wgt_r2y : 9; 107 RK_U32 reserved : 5; 108 } src_udfy; 109 110 /* 0x00000450 reg276 */ 111 struct { 112 RK_U32 csc_wgt_b2u : 9; 113 RK_U32 csc_wgt_g2u : 9; 114 RK_U32 csc_wgt_r2u : 9; 115 RK_U32 reserved : 5; 116 } src_udfu; 117 118 /* 0x00000454 reg277 */ 119 struct { 120 RK_U32 csc_wgt_b2v : 9; 121 RK_U32 csc_wgt_g2v : 9; 122 RK_U32 csc_wgt_r2v : 9; 123 RK_U32 reserved : 5; 124 } src_udfv; 125 126 /* 0x00000458 reg278 */ 127 struct { 128 RK_U32 csc_ofst_v : 8; 129 RK_U32 csc_ofst_u : 8; 130 RK_U32 csc_ofst_y : 5; 131 RK_U32 reserved : 11; 132 } src_udfo; 133 134 /* 0x0000045c reg279 */ 135 struct { 136 RK_U32 cr_force_value : 8; 137 RK_U32 cb_force_value : 8; 138 RK_U32 chroma_force_en : 1; 139 RK_U32 reserved : 9; 140 RK_U32 src_mirr : 1; 141 RK_U32 src_rot : 2; 142 RK_U32 reserved1 : 1; 143 RK_U32 rkfbcd_en : 1; 144 RK_U32 reserved2 : 1; 145 } src_proc; 146 147 /* 0x00000460 reg280 */ 148 struct { 149 RK_U32 pic_ofst_x : 14; 150 RK_U32 reserved : 2; 151 RK_U32 pic_ofst_y : 14; 152 RK_U32 reserved1 : 2; 153 } pic_ofst; 154 155 /* 0x00000464 reg281 */ 156 struct { 157 RK_U32 src_strd0 : 21; 158 RK_U32 reserved : 11; 159 } src_strd0; 160 161 /* 0x00000468 reg282 */ 162 struct { 163 RK_U32 src_strd1 : 16; 164 RK_U32 reserved : 16; 165 } src_strd1; 166 167 /* 0x0000046c reg283 */ 168 struct { 169 RK_U32 pp_corner_filter_strength : 2; 170 RK_U32 reserved : 2; 171 RK_U32 pp_edge_filter_strength : 2; 172 RK_U32 reserved1 : 2; 173 RK_U32 pp_internal_filter_strength : 2; 174 RK_U32 reserved2 : 22; 175 } src_flt_cfg; 176 177 /* 0x00000470 reg284 */ 178 struct { 179 RK_U32 bias_y : 15; 180 RK_U32 reserved : 17; 181 } y_cfg; 182 183 /* 0x00000474 reg285 */ 184 struct { 185 RK_U32 bias_u : 15; 186 RK_U32 reserved : 17; 187 } u_cfg; 188 189 /* 0x00000478 reg286 */ 190 struct { 191 RK_U32 bias_v : 15; 192 RK_U32 reserved : 17; 193 } v_cfg; 194 195 /* 0x0000047c reg287 */ 196 struct { 197 RK_U32 ri : 25; 198 RK_U32 out_mode : 1; 199 RK_U32 start_rst_m : 3; 200 RK_U32 pic_last_ecs : 1; 201 RK_U32 reserved : 1; 202 RK_U32 stnd : 1; 203 } base_cfg; 204 205 /* 0x00000480 reg288 */ 206 struct { 207 RK_U32 uvc_partition0_len : 12; 208 RK_U32 uvc_partition_len : 12; 209 RK_U32 uvc_skip_len : 6; 210 RK_U32 reserved : 2; 211 } uvc_cfg; 212 213 /* 0x00000484 reg289 */ 214 struct { 215 RK_U32 reserved : 4; 216 RK_U32 eslf_badr : 28; 217 } adr_eslf; 218 219 /* 0x00000488 reg290 */ 220 struct { 221 RK_U32 eslf_rptr : 10; 222 RK_U32 eslf_wptr : 10; 223 RK_U32 eslf_blen : 10; 224 RK_U32 eslf_updt : 2; 225 } eslf_buf; 226 227 /* 0x48c */ 228 RK_U32 reserved_291; 229 230 /* 0x00000490 reg292 - 0x0000050c reg323*/ 231 Vepu511JpegRoiRegion roi_regions[16]; 232 } Vepu511JpegReg; 233 234 /* 0x00002ca0 reg2856 - - 0x00002e1c reg2951 */ 235 typedef struct JpegVepu511Tab_t { 236 RK_U16 qua_tab0[64]; 237 RK_U16 qua_tab1[64]; 238 RK_U16 qua_tab2[64]; 239 } JpegVepu511Tab; 240 241 typedef struct Vepu511JpegOsdCfg_t { 242 /* 0x00003138 reg3150 */ 243 struct { 244 RK_U32 osd_en : 1; 245 RK_U32 reserved : 4; 246 RK_U32 osd_qp_adj_en : 1; 247 RK_U32 osd_range_trns_en : 1; 248 RK_U32 osd_range_trns_sel : 1; 249 RK_U32 osd_fmt : 4; 250 RK_U32 osd_alpha_swap : 1; 251 RK_U32 osd_rbuv_swap : 1; 252 RK_U32 reserved1 : 8; 253 RK_U32 osd_fg_alpha : 8; 254 RK_U32 osd_fg_alpha_sel : 2; 255 } osd_cfg0; 256 257 /* 0x0000313c reg3151 */ 258 struct { 259 RK_U32 osd_lt_xcrd : 14; 260 RK_U32 osd_lt_ycrd : 14; 261 RK_U32 osd_endn : 4; 262 } osd_cfg1; 263 264 /* 0x00003140 reg3152 */ 265 struct { 266 RK_U32 osd_rb_xcrd : 14; 267 RK_U32 osd_rb_ycrd : 14; 268 RK_U32 reserved : 4; 269 } osd_cfg2; 270 271 /* 0x00003144 reg3153 */ 272 RK_U32 osd_st_addr; 273 274 /* 0x3148 */ 275 RK_U32 reserved_3154; 276 277 /* 0x0000314c reg3155 */ 278 struct { 279 RK_U32 osd_stride : 17; 280 RK_U32 reserved : 8; 281 RK_U32 osd_ch_ds_mode : 1; 282 RK_U32 reserved1 : 6; 283 } osd_cfg5; 284 285 /* 0x00003150 reg3156 */ 286 struct { 287 RK_U32 osd_v_b_lut0 : 8; 288 RK_U32 osd_u_g_lut0 : 8; 289 RK_U32 osd_y_r_lut0 : 8; 290 RK_U32 osd_v_b_lut1 : 8; 291 } osd_cfg6; 292 293 /* 0x00003154 reg3157 */ 294 struct { 295 RK_U32 osd0_u_g_lut1 : 8; 296 RK_U32 osd0_y_r_lut1 : 8; 297 RK_U32 osd0_alpha_lut0 : 8; 298 RK_U32 osd0_alpha_lut1 : 8; 299 } osd_cfg7; 300 301 /* 0x3158 */ 302 RK_U32 reserved_3158; 303 } JpegVepu511Osd_cfg; 304 305 /* 0x00003138 reg3150 - - 0x00003264 reg3225 */ 306 typedef struct Vepu511JpegOsd_t { 307 JpegVepu511Osd_cfg osd_cfg[8]; 308 /* 0x00003258 reg3222 */ 309 struct { 310 RK_U32 osd_csc_yr : 9; 311 RK_U32 osd_csc_yg : 9; 312 RK_U32 osd_csc_yb : 9; 313 RK_U32 reserved : 5; 314 } osd_whi_cfg0; 315 316 /* 0x0000325c reg3223 */ 317 struct { 318 RK_U32 osd_csc_ur : 9; 319 RK_U32 osd_csc_ug : 9; 320 RK_U32 osd_csc_ub : 9; 321 RK_U32 reserved : 5; 322 } osd_whi_cfg1; 323 324 /* 0x00003260 reg3224 */ 325 struct { 326 RK_U32 osd_csc_vr : 9; 327 RK_U32 osd_csc_vg : 9; 328 RK_U32 osd_csc_vb : 9; 329 RK_U32 reserved : 5; 330 } osd_whi_cfg2; 331 332 /* 0x00003264 reg3225 */ 333 struct { 334 RK_U32 osd_csc_ofst_y : 8; 335 RK_U32 osd_csc_ofst_u : 8; 336 RK_U32 osd_csc_ofst_v : 8; 337 RK_U32 reserved : 8; 338 } osd_whi_cfg3; 339 } JpegVepu511Osd; 340 341 /* class: buffer/video syntax */ 342 /* 0x00000270 reg156 - 0x0000050c reg323 */ 343 typedef struct JpegVepu511Base_t { 344 /* 0x00000270 reg156 - 0x0000039c reg231 */ 345 Vepu511FrmCommon common; 346 347 /* 0x000003a0 reg232 - 0x000003f4 reg253*/ 348 RK_U32 reserved232_253[22]; 349 350 /* 0x000003f8 reg254 */ 351 struct { 352 RK_U32 slice_sta_x : 9; 353 RK_U32 reserved1 : 7; 354 RK_U32 slice_sta_y : 10; 355 RK_U32 reserved2 : 5; 356 RK_U32 slice_enc_ena : 1; 357 } slice_enc_cfg0; 358 359 /* 0x000003fc reg255 */ 360 struct { 361 RK_U32 slice_end_x : 9; 362 RK_U32 reserved : 7; 363 RK_U32 slice_end_y : 10; 364 RK_U32 reserved1 : 6; 365 } slice_enc_cfg1; 366 367 /* 0x00000400 reg256 - 0x0000050c reg323 */ 368 Vepu511JpegReg jpegReg; 369 } JpegVepu511Base; 370 371 typedef struct JpegV511RegSet_t { 372 Vepu511ControlCfg reg_ctl; 373 JpegVepu511Base reg_base; 374 JpegVepu511Tab jpeg_table; 375 Vepu511OsdRegs reg_osd; 376 Vepu511Dbg reg_dbg; 377 } JpegV511RegSet; 378 379 typedef struct JpegV511Status_t { 380 RK_U32 hw_status; 381 Vepu511Status st; 382 } JpegV511Status; 383 384 #endif 385