1 /* 2 * Copyright 2021 Rockchip Electronics Co. LTD 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __HAL_H265E_VEPU540C_REG_H__ 18 #define __HAL_H265E_VEPU540C_REG_H__ 19 20 #include "rk_type.h" 21 #include "vepu540c_common.h" 22 /* class: control/link */ 23 /* 0x00000000 reg0 - 0x00000120 reg72 */ 24 typedef struct HevcVepu540cControlCfg_t { 25 /* 0x00000000 reg0 */ 26 struct { 27 RK_U32 sub_ver : 8; 28 RK_U32 h264_cap : 1; 29 RK_U32 hevc_cap : 1; 30 RK_U32 reserved : 2; 31 RK_U32 res_cap : 4; 32 RK_U32 osd_cap : 2; 33 RK_U32 filtr_cap : 2; 34 RK_U32 bfrm_cap : 1; 35 RK_U32 fbc_cap : 2; 36 RK_U32 reserved1 : 1; 37 RK_U32 ip_id : 8; 38 } reg0001_version; 39 40 /* 0x4 - 0xc */ 41 RK_U32 reserved1_3[3]; 42 43 /* 0x00000010 reg4 */ 44 struct { 45 RK_U32 lkt_num : 8; 46 RK_U32 vepu_cmd : 3; 47 RK_U32 reserved : 21; 48 } reg0004_enc_strt; 49 50 /* 0x00000014 reg5 */ 51 struct { 52 RK_U32 safe_clr : 1; 53 RK_U32 force_clr : 1; 54 RK_U32 reserved : 30; 55 } reg0005_enc_clr; 56 57 /* 0x18 */ 58 struct { 59 RK_U32 vswm_lcnt_soft : 14; 60 RK_U32 vswm_fcnt_soft : 8; 61 RK_U32 reserved : 2; 62 RK_U32 dvbm_ack_soft : 1; 63 RK_U32 dvbm_ack_sel : 1; 64 RK_U32 dvbm_inf_sel : 1; 65 RK_U32 reserved1 : 5; 66 } reg0006_vs_ldly; 67 68 /* 0x1c */ 69 RK_U32 reserved007; 70 71 /* 0x00000020 reg8 */ 72 struct { 73 RK_U32 enc_done_en : 1; 74 RK_U32 lkt_node_done_en : 1; 75 RK_U32 sclr_done_en : 1; 76 RK_U32 vslc_done_en : 1; 77 RK_U32 vbsf_oflw_en : 1; 78 RK_U32 vbuf_lens_en : 1; 79 RK_U32 enc_err_en : 1; 80 RK_U32 dvbm_fcfg_en : 1; 81 RK_U32 wdg_en : 1; 82 RK_U32 lkt_err_int_en : 1; 83 RK_U32 lkt_err_stop_en : 1; 84 RK_U32 lkt_force_stop_en : 1; 85 RK_U32 jslc_done_en : 1; 86 RK_U32 jbsf_oflw_en : 1; 87 RK_U32 jbuf_lens_en : 1; 88 RK_U32 dvbm_dcnt_en : 1; 89 RK_U32 reserved : 16; 90 } reg0008_int_en; 91 92 /* 0x00000024 reg9 */ 93 struct { 94 RK_U32 enc_done_msk : 1; 95 RK_U32 lkt_node_done_msk : 1; 96 RK_U32 sclr_done_msk : 1; 97 RK_U32 vslc_done_msk : 1; 98 RK_U32 vbsf_oflw_msk : 1; 99 RK_U32 vbuf_lens_msk : 1; 100 RK_U32 enc_err_msk : 1; 101 RK_U32 dvbm_fcfg_msk : 1; 102 RK_U32 wdg_msk : 1; 103 RK_U32 lkt_err_int_msk : 1; 104 RK_U32 lkt_err_stop_msk : 1; 105 RK_U32 lkt_force_stop_msk : 1; 106 RK_U32 jslc_done_msk : 1; 107 RK_U32 jbsf_oflw_msk : 1; 108 RK_U32 jbuf_lens_msk : 1; 109 RK_U32 dvbm_dcnt_msk : 1; 110 RK_U32 reserved : 16; 111 } reg0009_int_msk; 112 113 /* 0x00000028 reg10 */ 114 struct { 115 RK_U32 enc_done_clr : 1; 116 RK_U32 lkt_node_done_clr : 1; 117 RK_U32 sclr_done_clr : 1; 118 RK_U32 vslc_done_clr : 1; 119 RK_U32 vbsf_oflw_clr : 1; 120 RK_U32 vbuf_lens_clr : 1; 121 RK_U32 enc_err_clr : 1; 122 RK_U32 dvbm_fcfg_clr : 1; 123 RK_U32 wdg_clr : 1; 124 RK_U32 lkt_err_int_clr : 1; 125 RK_U32 lkt_err_stop_clr : 1; 126 RK_U32 lkt_force_stop_clr : 1; 127 RK_U32 jslc_done_clr : 1; 128 RK_U32 jbsf_oflw_clr : 1; 129 RK_U32 jbuf_lens_clr : 1; 130 RK_U32 dvbm_dcnt_clr : 1; 131 RK_U32 reserved : 16; 132 } reg0010_int_clr; 133 134 /* 0x0000002c reg11 */ 135 struct { 136 RK_U32 enc_done_sta : 1; 137 RK_U32 lkt_node_done_sta : 1; 138 RK_U32 sclr_done_sta : 1; 139 RK_U32 vslc_done_sta : 1; 140 RK_U32 vbsf_oflw_sta : 1; 141 RK_U32 vbuf_lens_sta : 1; 142 RK_U32 enc_err_sta : 1; 143 RK_U32 dvbm_fcfg_sta : 1; 144 RK_U32 wdg_sta : 1; 145 RK_U32 lkt_err_int_sta : 1; 146 RK_U32 lkt_err_stop_sta : 1; 147 RK_U32 lkt_force_stop_sta : 1; 148 RK_U32 jslc_done_sta : 1; 149 RK_U32 jbsf_oflw_sta : 1; 150 RK_U32 jbuf_lens_sta : 1; 151 RK_U32 dvbm_dcnt_sta : 1; 152 RK_U32 reserved : 16; 153 } reg0011_int_sta; 154 155 /* 0x00000030 reg12 */ 156 struct { 157 RK_U32 jpeg_bus_edin : 4; 158 RK_U32 src_bus_edin : 4; 159 RK_U32 meiw_bus_edin : 4; 160 RK_U32 bsw_bus_edin : 4; 161 RK_U32 lktr_bus_edin : 4; 162 RK_U32 roir_bus_edin : 4; 163 RK_U32 lktw_bus_edin : 4; 164 RK_U32 rec_nfbc_bus_edin : 4; 165 } reg0012_dtrns_map; 166 167 /* 0x00000034 reg13 */ 168 struct { 169 RK_U32 reserved : 16; 170 RK_U32 axi_brsp_cke : 10; 171 RK_U32 reserved1 : 6; 172 } reg0013_dtrns_cfg; 173 174 /* 0x00000038 reg14 */ 175 struct { 176 RK_U32 vs_load_thd : 24; 177 RK_U32 rfp_load_thd : 8; 178 } reg0014_enc_wdg; 179 180 /* 0x0000003c reg15 */ 181 struct { 182 RK_U32 hurry_en : 1; 183 RK_U32 hurry_low : 3; 184 RK_U32 hurry_mid : 3; 185 RK_U32 hurry_high : 3; 186 RK_U32 reserved : 22; 187 } reg0015_qos_cfg; 188 189 /* 0x00000040 reg16 */ 190 struct { 191 RK_U32 qos_period : 16; 192 RK_U32 reserved : 16; 193 } reg0016_qos_perd; 194 195 /* 0x00000044 reg17 */ 196 RK_U32 reg0017_hurry_thd_low; 197 198 /* 0x00000048 reg18 */ 199 RK_U32 reg0018_hurry_thd_mid; 200 201 /* 0x0000004c reg19 */ 202 RK_U32 reg0019_hurry_thd_high; 203 204 /* 0x00000050 reg20 */ 205 struct { 206 RK_U32 idle_en_core : 1; 207 RK_U32 idle_en_axi : 1; 208 RK_U32 idle_en_ahb : 1; 209 RK_U32 reserved : 29; 210 } reg0020_enc_idle_en; 211 212 /* 0x00000054 reg21 */ 213 struct { 214 RK_U32 cke : 1; 215 RK_U32 resetn_hw_en : 1; 216 RK_U32 enc_done_tmvp_en : 1; 217 RK_U32 sram_ckg_en : 1; 218 RK_U32 link_err_stop : 1; 219 RK_U32 reserved : 27; 220 } reg0021_func_en; 221 222 /* 0x00000058 reg22 */ 223 struct { 224 RK_U32 recon32_ckg : 1; 225 RK_U32 iqit32_ckg : 1; 226 RK_U32 q32_ckg : 1; 227 RK_U32 t32_ckg : 1; 228 RK_U32 cabac32_ckg : 1; 229 RK_U32 recon16_ckg : 1; 230 RK_U32 iqit16_ckg : 1; 231 RK_U32 q16_ckg : 1; 232 RK_U32 t16_ckg : 1; 233 RK_U32 cabac16_ckg : 1; 234 RK_U32 recon8_ckg : 1; 235 RK_U32 iqit8_ckg : 1; 236 RK_U32 q8_ckg : 1; 237 RK_U32 t8_ckg : 1; 238 RK_U32 cabac8_ckg : 1; 239 RK_U32 recon4_ckg : 1; 240 RK_U32 iqit4_ckg : 1; 241 RK_U32 q4_ckg : 1; 242 RK_U32 t4_ckg : 1; 243 RK_U32 cabac4_ckg : 1; 244 RK_U32 intra32_ckg : 1; 245 RK_U32 intra16_ckg : 1; 246 RK_U32 intra8_ckg : 1; 247 RK_U32 intra4_ckg : 1; 248 RK_U32 inter_pred_ckg : 1; 249 RK_U32 reserved : 7; 250 } reg0022_rdo_ckg; 251 252 /* 0x0000005c reg23 */ 253 struct { 254 RK_U32 core_id : 2; 255 RK_U32 reserved : 30; 256 } reg0023_enc_id; 257 258 259 /* 0x00000060 reg24 */ 260 struct { 261 RK_U32 dvbm_en : 1; 262 RK_U32 src_badr_sel : 1; 263 RK_U32 vinf_frm_match : 1; 264 RK_U32 reserved : 1; 265 RK_U32 vrsp_half_cycle : 4; 266 RK_U32 reserved1 : 24; 267 } reg0024_dvbm_cfg; 268 269 /* 0x00000064 - 0x6c*/ 270 RK_U32 reg025_027[3]; 271 272 /* 0x00000070*/ 273 struct { 274 RK_U32 reserved : 4; 275 RK_U32 lkt_addr : 28; 276 } reg0028_lkt_base_addr; 277 278 /* 0x74 - 0xfc */ 279 RK_U32 reserved29_63[35]; 280 281 struct { 282 RK_U32 node_core_id : 2; 283 RK_U32 node_int : 1; 284 RK_U32 reserved : 1; 285 RK_U32 task_id : 12; 286 RK_U32 reserved1 : 16; 287 } reg0064_lkt_node_cfg; 288 289 /* 0x00000104 reg65 */ 290 struct { 291 RK_U32 pcfg_rd_en : 1; 292 RK_U32 reserved : 3; 293 RK_U32 lkt_addr_pcfg : 28; 294 } reg0065_lkt_addr_pcfg; 295 296 /* 0x00000108 reg66 */ 297 struct { 298 RK_U32 rc_cfg_rd_en : 1; 299 RK_U32 reserved : 3; 300 RK_U32 lkt_addr_rc_cfg : 28; 301 } reg0066_lkt_addr_rc_cfg; 302 303 /* 0x0000010c reg67 */ 304 struct { 305 RK_U32 par_cfg_rd_en : 1; 306 RK_U32 reserved : 3; 307 RK_U32 lkt_addr_par_cfg : 28; 308 } reg0067_lkt_addr_par_cfg; 309 310 /* 0x00000110 reg68 */ 311 struct { 312 RK_U32 sqi_cfg_rd_en : 1; 313 RK_U32 reserved : 3; 314 RK_U32 lkt_addr_sqi_cfg : 28; 315 } reg0068_lkt_addr_sqi_cfg; 316 317 /* 0x00000114 reg69 */ 318 struct { 319 RK_U32 scal_cfg_rd_en : 1; 320 RK_U32 reserved : 3; 321 RK_U32 lkt_addr_scal_cfg : 28; 322 } reg0069_lkt_addr_scal_cfg; 323 324 /* 0x00000118 reg70 */ 325 struct { 326 RK_U32 pp_cfg_rd_en : 1; 327 RK_U32 reserved : 3; 328 RK_U32 lkt_addr_pp_cfg : 28; 329 } reg0070_lkt_addr_osd_cfg; 330 331 /* 0x0000011c reg71 */ 332 struct { 333 RK_U32 st_out_en : 1; 334 RK_U32 reserved : 3; 335 RK_U32 lkt_addr_st : 28; 336 } reg0071_lkt_addr_st; 337 338 /* 0x00000120 reg72 */ 339 struct { 340 RK_U32 nxt_node_vld : 1; 341 RK_U32 reserved : 3; 342 RK_U32 lkt_addr_nxt : 28; 343 } reg0072_lkt_addr_nxt; 344 } hevc_vepu540c_control_cfg; 345 346 /* class: buffer/video syntax */ 347 /* 0x00000280 reg160 - 0x000003f4 reg253*/ 348 typedef struct HevcVepu540cBase_t { 349 vepu540c_online online_addr; 350 /* 0x00000280 reg160 */ 351 RK_U32 reg0160_adr_src0; 352 353 /* 0x00000284 reg161 */ 354 RK_U32 reg0161_adr_src1; 355 356 /* 0x00000288 reg162 */ 357 RK_U32 reg0162_adr_src2; 358 359 /* 0x0000028c reg163 */ 360 RK_U32 reg0163_rfpw_h_addr; 361 362 /* 0x00000290 reg164 */ 363 RK_U32 reg0164_rfpw_b_addr; 364 365 /* 0x00000294 reg165 */ 366 RK_U32 reg0165_rfpr_h_addr; 367 368 /* 0x00000298 reg166 */ 369 RK_U32 reg0166_rfpr_b_addr; 370 371 /* 0x0000029c reg167 */ 372 RK_U32 reg0167_cmvw_addr; 373 374 /* 0x000002a0 reg168 */ 375 RK_U32 reg0168_cmvr_addr; 376 377 /* 0x000002a4 reg169 */ 378 RK_U32 reg0169_dspw_addr; 379 380 /* 0x000002a8 reg170 */ 381 RK_U32 reg0170_dspr_addr; 382 383 /* 0x000002ac reg171 */ 384 RK_U32 reg0171_meiw_addr; 385 386 /* 0x000002b0 reg172 */ 387 RK_U32 reg0172_bsbt_addr; 388 389 /* 0x000002b4 reg173 */ 390 RK_U32 reg0173_bsbb_addr; 391 392 /* 0x000002b8 reg174 */ 393 RK_U32 reg0174_adr_bsbs; 394 395 /* 0x000002bc reg175 */ 396 RK_U32 reg0175_bsbr_addr; 397 398 /* 0x000002c0 reg176 */ 399 RK_U32 reg0176_lpfw_addr; 400 401 /* 0x000002c4 reg177 */ 402 RK_U32 reg0177_lpfr_addr; 403 404 /* 0x000002c8 reg178 */ 405 RK_U32 reg0178_adr_ebuft; 406 407 /* 0x000002cc reg179 */ 408 RK_U32 reg0179_adr_ebufb; 409 410 /* 0x000002d0 reg180 */ 411 RK_U32 reg0180_adr_rfpt_h; 412 413 /* 0x000002d4 reg181 */ 414 RK_U32 reg0181_adr_rfpb_h; 415 416 /* 0x000002d8 reg182 */ 417 RK_U32 reg0182_adr_rfpt_b; 418 419 /* 0x000002dc reg183 */ 420 RK_U32 reg0183_adr_rfpb_b; 421 422 /* 0x000002e0 reg184 */ 423 RK_U32 reg0184_adr_smr_rd; 424 425 /* 0x000002e4 reg185 */ 426 RK_U32 reg0185_adr_smr_wr; 427 428 /* 0x000002e8 reg186 */ 429 RK_U32 reg0186_adr_roir; 430 431 /* 0x2ec - 0x2fc */ 432 RK_U32 reserved187_191[5]; 433 434 /* 0x00000300 reg192 */ 435 struct { 436 RK_U32 enc_stnd : 2; 437 RK_U32 cur_frm_ref : 1; 438 RK_U32 mei_stor : 1; 439 RK_U32 bs_scp : 1; 440 RK_U32 reserved : 3; 441 RK_U32 pic_qp : 6; 442 RK_U32 num_pic_tot_cur : 5; 443 RK_U32 log2_ctu_num : 5; 444 RK_U32 reserved1 : 6; 445 RK_U32 slen_fifo : 1; 446 RK_U32 rec_fbc_dis : 1; 447 } reg0192_enc_pic; 448 449 450 /* 0x304 */ 451 RK_U32 reserved_193; 452 453 /* 0x00000308 reg194 */ 454 struct { 455 RK_U32 frame_id : 8; 456 RK_U32 reserved : 8; 457 RK_U32 ch_id : 2; 458 RK_U32 vrsp_rtn_en : 1; 459 RK_U32 reserved1 : 13; 460 } reg0194_dvbm_id; 461 462 /* 0x0000030c reg195 */ 463 RK_U32 bsp_size; 464 465 /* 0x00000310 reg196 */ 466 struct { 467 RK_U32 pic_wd8_m1 : 11; 468 RK_U32 reserved : 5; 469 RK_U32 pic_hd8_m1 : 11; 470 RK_U32 reserved1 : 5; 471 } reg0196_enc_rsl; 472 473 /* 0x00000314 reg197 */ 474 struct { 475 RK_U32 pic_wfill : 6; 476 RK_U32 reserved : 10; 477 RK_U32 pic_hfill : 6; 478 RK_U32 reserved1 : 10; 479 } reg0197_src_fill; 480 481 /* 0x00000318 reg198 */ 482 struct { 483 RK_U32 alpha_swap : 1; 484 RK_U32 rbuv_swap : 1; 485 RK_U32 src_cfmt : 4; 486 RK_U32 src_rcne : 1; 487 RK_U32 out_fmt : 1; 488 RK_U32 src_range_trns_en : 1; 489 RK_U32 src_range_trns_sel : 1; 490 RK_U32 chroma_ds_mode : 1; 491 RK_U32 reserved : 21; 492 } reg0198_src_fmt; 493 494 /* 0x0000031c reg199 */ 495 struct { 496 RK_U32 csc_wgt_b2y : 9; 497 RK_U32 csc_wgt_g2y : 9; 498 RK_U32 csc_wgt_r2y : 9; 499 RK_U32 reserved : 5; 500 } reg0199_src_udfy; 501 502 /* 0x00000320 reg200 */ 503 struct { 504 RK_U32 csc_wgt_b2u : 9; 505 RK_U32 csc_wgt_g2u : 9; 506 RK_U32 csc_wgt_r2u : 9; 507 RK_U32 reserved : 5; 508 } reg0200_src_udfu; 509 510 /* 0x00000324 reg201 */ 511 struct { 512 RK_U32 csc_wgt_b2v : 9; 513 RK_U32 csc_wgt_g2v : 9; 514 RK_U32 csc_wgt_r2v : 9; 515 RK_U32 reserved : 5; 516 } reg0201_src_udfv; 517 518 /* 0x00000328 reg202 */ 519 struct { 520 RK_U32 csc_ofst_v : 8; 521 RK_U32 csc_ofst_u : 8; 522 RK_U32 csc_ofst_y : 5; 523 RK_U32 reserved : 11; 524 } reg0202_src_udfo; 525 526 /* 0x0000032c reg203 */ 527 struct { 528 RK_U32 reserved : 26; 529 RK_U32 src_mirr : 1; 530 RK_U32 src_rot : 2; 531 RK_U32 reserved1 : 3; 532 } reg0203_src_proc; 533 534 /* 0x00000330 reg204 */ 535 struct { 536 RK_U32 pic_ofst_x : 14; 537 RK_U32 reserved : 2; 538 RK_U32 pic_ofst_y : 14; 539 RK_U32 reserved1 : 2; 540 } reg0204_pic_ofst; 541 542 /* 0x00000334 reg205 */ 543 struct { 544 RK_U32 src_strd0 : 17; 545 RK_U32 reserved : 15; 546 } reg0205_src_strd0; 547 548 /* 0x00000338 reg206 */ 549 struct { 550 RK_U32 src_strd1 : 16; 551 RK_U32 reserved : 16; 552 } reg0206_src_strd1; 553 554 /* 0x0000033c reg207 */ 555 struct { 556 RK_U32 pp_corner_filter_strength : 2; 557 RK_U32 reserved : 2; 558 RK_U32 pp_edge_filter_strength : 2; 559 RK_U32 reserved1 : 2; 560 RK_U32 pp_internal_filter_strength : 2; 561 RK_U32 reserved2 : 22; 562 } reg0207_src_flt_cfg; 563 564 /* 0x340 - 0x34c */ 565 RK_U32 reserved208_211[4]; 566 567 /* 0x00000350 reg212 */ 568 struct { 569 RK_U32 rc_en : 1; 570 RK_U32 aq_en : 1; 571 RK_U32 aq_mode : 1; 572 RK_U32 reserved : 9; 573 RK_U32 rc_ctu_num : 20; 574 } reg212_rc_cfg; 575 576 /* 0x00000354 reg213 */ 577 struct { 578 RK_U32 reserved : 16; 579 RK_U32 rc_qp_range : 4; 580 RK_U32 rc_max_qp : 6; 581 RK_U32 rc_min_qp : 6; 582 } reg213_rc_qp; 583 584 /* 0x00000358 reg214 */ 585 struct { 586 RK_U32 ctu_ebit : 20; 587 RK_U32 reserved : 12; 588 } reg214_rc_tgt; 589 590 /* 0x35c */ 591 RK_U32 reserved_215; 592 593 /* 0x00000360 reg216 */ 594 struct { 595 RK_U32 sli_splt : 1; 596 RK_U32 sli_splt_mode : 1; 597 RK_U32 sli_splt_cpst : 1; 598 RK_U32 reserved : 12; 599 RK_U32 sli_flsh : 1; 600 RK_U32 sli_max_num_m1 : 15; 601 RK_U32 reserved1 : 1; 602 } reg0216_sli_splt; 603 604 /* 0x00000364 reg217 */ 605 struct { 606 RK_U32 sli_splt_byte : 20; 607 RK_U32 reserved : 12; 608 } reg0217_sli_byte; 609 610 /* 0x00000368 reg218 */ 611 struct { 612 RK_U32 sli_splt_cnum_m1 : 20; 613 RK_U32 reserved : 12; 614 } reg0218_sli_cnum; 615 616 /* 0x0000036c reg219 */ 617 struct { 618 RK_U32 uvc_partition0_len : 12; 619 RK_U32 uvc_partition_len : 12; 620 RK_U32 uvc_skip_len : 6; 621 RK_U32 reserved : 2; 622 } reg0218_uvc_cfg; 623 624 /* 0x00000370 reg220 */ 625 struct { 626 RK_U32 cime_srch_dwnh : 4; 627 RK_U32 cime_srch_uph : 4; 628 RK_U32 cime_srch_rgtw : 4; 629 RK_U32 cime_srch_lftw : 4; 630 RK_U32 dlt_frm_num : 16; 631 } reg0220_me_rnge; 632 633 /* 0x00000374 reg221 */ 634 struct { 635 RK_U32 srgn_max_num : 7; 636 RK_U32 cime_dist_thre : 13; 637 RK_U32 rme_srch_h : 2; 638 RK_U32 rme_srch_v : 2; 639 RK_U32 rme_dis : 3; 640 RK_U32 reserved1 : 1; 641 RK_U32 fme_dis : 3; 642 RK_U32 reserved2 : 1; 643 } reg0221_me_cfg; 644 645 /* 0x00000378 reg222 */ 646 struct { 647 RK_U32 cime_size_rama : 10; 648 RK_U32 reserved : 1; 649 RK_U32 cime_hgt_rama : 5; 650 RK_U32 reserved1 : 2; 651 RK_U32 cme_linebuf_w : 10; 652 RK_U32 fme_prefsu_en : 2; 653 RK_U32 colmv_stor : 1; 654 RK_U32 colmv_load : 1; 655 } reg0222_me_cach; 656 657 658 /* 0x37c - 0x39c */ 659 RK_U32 reserved223_231[9]; 660 661 /* 0x000003a0 reg232 */ 662 struct { 663 RK_U32 ltm_col : 1; 664 RK_U32 ltm_idx0l0 : 1; 665 RK_U32 chrm_spcl : 1; 666 RK_U32 cu_inter_e : 12; 667 RK_U32 reserved : 4; 668 RK_U32 cu_intra_e : 4; 669 RK_U32 ccwa_e : 1; 670 RK_U32 scl_lst_sel : 2; 671 RK_U32 lambda_qp_use_avg_cu16_flag : 1; 672 RK_U32 yuvskip_calc_en : 1; 673 RK_U32 atf_e : 1; 674 RK_U32 atr_e : 1; 675 RK_U32 reserved1 : 2; 676 } reg0232_rdo_cfg; 677 678 /* 0x000003a4 reg233 */ 679 struct { 680 RK_U32 rdo_mark_mode : 9; 681 RK_U32 reserved : 23; 682 } reg0233_iprd_csts; 683 684 /* 0x3a8 - 0x3ac */ 685 RK_U32 reserved234_235[2]; 686 687 /* 0x000003b0 reg236 */ 688 689 struct { 690 RK_U32 nal_unit_type : 6; 691 RK_U32 reserved : 26; 692 } reg0236_synt_nal; 693 694 /* 0x000003b4 reg237 */ 695 struct { 696 RK_U32 smpl_adpt_ofst_e : 1; 697 RK_U32 num_st_ref_pic : 7; 698 RK_U32 lt_ref_pic_prsnt : 1; 699 RK_U32 num_lt_ref_pic : 6; 700 RK_U32 tmpl_mvp_e : 1; 701 RK_U32 log2_max_poc_lsb : 4; 702 RK_U32 strg_intra_smth : 1; 703 RK_U32 reserved : 11; 704 } reg0237_synt_sps; 705 706 /* 0x000003b8 reg238 */ 707 struct { 708 RK_U32 dpdnt_sli_seg_en : 1; 709 RK_U32 out_flg_prsnt_flg : 1; 710 RK_U32 num_extr_sli_hdr : 3; 711 RK_U32 sgn_dat_hid_en : 1; 712 RK_U32 cbc_init_prsnt_flg : 1; 713 RK_U32 pic_init_qp : 6; 714 RK_U32 cu_qp_dlt_en : 1; 715 RK_U32 chrm_qp_ofst_prsn : 1; 716 RK_U32 lp_fltr_acrs_sli : 1; 717 RK_U32 dblk_fltr_ovrd_en : 1; 718 RK_U32 lst_mdfy_prsnt_flg : 1; 719 RK_U32 sli_seg_hdr_extn : 1; 720 RK_U32 cu_qp_dlt_depth : 2; 721 RK_U32 lpf_fltr_acrs_til : 1; 722 RK_U32 reserved : 10; 723 } reg0238_synt_pps; 724 725 /* 0x000003bc reg239 */ 726 struct { 727 RK_U32 cbc_init_flg : 1; 728 RK_U32 mvd_l1_zero_flg : 1; 729 RK_U32 mrg_up_flg : 1; 730 RK_U32 mrg_lft_flg : 1; 731 RK_U32 reserved : 1; 732 RK_U32 ref_pic_lst_mdf_l0 : 1; 733 RK_U32 num_refidx_l1_act : 2; 734 RK_U32 num_refidx_l0_act : 2; 735 RK_U32 num_refidx_act_ovrd : 1; 736 RK_U32 sli_sao_chrm_flg : 1; 737 RK_U32 sli_sao_luma_flg : 1; 738 RK_U32 sli_tmprl_mvp_e : 1; 739 RK_U32 pic_out_flg : 1; 740 RK_U32 sli_type : 2; 741 RK_U32 sli_rsrv_flg : 7; 742 RK_U32 dpdnt_sli_seg_flg : 1; 743 RK_U32 sli_pps_id : 6; 744 RK_U32 no_out_pri_pic : 1; 745 } reg0239_synt_sli0; 746 747 /* 0x000003c0 reg240 */ 748 struct { 749 RK_U32 sp_tc_ofst_div2 : 4; 750 RK_U32 sp_beta_ofst_div2 : 4; 751 RK_U32 sli_lp_fltr_acrs_sli : 1; 752 RK_U32 sp_dblk_fltr_dis : 1; 753 RK_U32 dblk_fltr_ovrd_flg : 1; 754 RK_U32 sli_cb_qp_ofst : 5; 755 RK_U32 sli_qp : 6; 756 RK_U32 max_mrg_cnd : 2; 757 RK_U32 reserved : 1; 758 RK_U32 col_ref_idx : 1; 759 RK_U32 col_frm_l0_flg : 1; 760 RK_U32 lst_entry_l0 : 4; 761 RK_U32 reserved1 : 1; 762 } reg0240_synt_sli1; 763 764 /* 0x000003c4 reg241 */ 765 struct { 766 RK_U32 sli_poc_lsb : 16; 767 RK_U32 sli_hdr_ext_len : 9; 768 RK_U32 reserved : 7; 769 } reg0241_synt_sli2; 770 771 /* 0x000003c8 reg242 */ 772 773 struct { 774 RK_U32 st_ref_pic_flg : 1; 775 RK_U32 poc_lsb_lt0 : 16; 776 RK_U32 lt_idx_sps : 5; 777 RK_U32 num_lt_pic : 2; 778 RK_U32 st_ref_pic_idx : 6; 779 RK_U32 num_lt_sps : 2; 780 } reg0242_synt_refm0; 781 782 /* 0x000003cc reg243 */ 783 struct { 784 RK_U32 used_by_s0_flg : 4; 785 RK_U32 num_pos_pic : 1; 786 RK_U32 num_negative_pics : 5; 787 RK_U32 dlt_poc_msb_cycl0 : 16; 788 RK_U32 dlt_poc_msb_prsnt0 : 1; 789 RK_U32 dlt_poc_msb_prsnt1 : 1; 790 RK_U32 dlt_poc_msb_prsnt2 : 1; 791 RK_U32 used_by_lt_flg0 : 1; 792 RK_U32 used_by_lt_flg1 : 1; 793 RK_U32 used_by_lt_flg2 : 1; 794 } reg0243_synt_refm1; 795 796 /* 0x000003d0 reg244 */ 797 struct { 798 RK_U32 dlt_poc_s0_m10 : 16; 799 RK_U32 dlt_poc_s0_m11 : 16; 800 } reg0244_synt_refm2; 801 /* 0x000003d4 reg245 */ 802 struct { 803 RK_U32 dlt_poc_s0_m12 : 16; 804 RK_U32 dlt_poc_s0_m13 : 16; 805 } reg0245_synt_refm3; 806 807 /* 0x000003d8 reg246 */ 808 struct { 809 RK_U32 poc_lsb_lt1 : 16; 810 RK_U32 poc_lsb_lt2 : 16; 811 } reg0246_synt_long_refm0; 812 813 /* 0x000003dc reg247 */ 814 struct { 815 RK_U32 dlt_poc_msb_cycl1 : 16; 816 RK_U32 dlt_poc_msb_cycl2 : 16; 817 } reg0247_synt_long_refm1; 818 819 struct { 820 RK_U32 sao_lambda_multi : 3; 821 RK_U32 reserved : 29; 822 } reg0248_sao_cfg; 823 824 /* 0x3e4 - 0x3ec */ 825 RK_U32 reserved249_251[3]; 826 827 /* 0x000003f0 reg252 */ 828 struct { 829 RK_U32 tile_w_m1 : 8; 830 RK_U32 reserved : 8; 831 RK_U32 tile_h_m1 : 8; 832 RK_U32 reserved1 : 7; 833 RK_U32 tile_en : 1; 834 } reg0252_tile_cfg; 835 /* 0x000003f4 reg253 */ 836 struct { 837 RK_U32 tile_x : 8; 838 RK_U32 reserved : 8; 839 RK_U32 tile_y : 8; 840 RK_U32 reserved1 : 8; 841 } reg0253_tile_pos; 842 843 /* 0x3f8 - 0x3fc */ 844 RK_U32 reserved254_255[2]; 845 846 /* 0x00000400 reg256 - 0x00000480 reg288 */ 847 Vepu540cJpegReg jpegReg; 848 849 } hevc_vepu540c_base; 850 851 /* class: rc/roi/aq/klut */ 852 /* 0x00001000 reg1024 - 0x000010e0 reg1080 */ 853 typedef struct HevcVepu540cRcRoi_t { 854 /* 0x00001000 reg1024 */ 855 struct { 856 RK_U32 qp_adj0 : 5; 857 RK_U32 qp_adj1 : 5; 858 RK_U32 qp_adj2 : 5; 859 RK_U32 qp_adj3 : 5; 860 RK_U32 qp_adj4 : 5; 861 RK_U32 reserved : 7; 862 } rc_adj0; 863 864 /* 0x00001004 reg1025 */ 865 struct { 866 RK_U32 qp_adj5 : 5; 867 RK_U32 qp_adj6 : 5; 868 RK_U32 qp_adj7 : 5; 869 RK_U32 qp_adj8 : 5; 870 RK_U32 reserved : 12; 871 } rc_adj1; 872 873 /* 0x00001008 reg1026 - 0x00001028 reg1034 */ 874 RK_U32 rc_dthd_0_8[9]; 875 876 /* 0x102c */ 877 RK_U32 reserved_1035; 878 879 /* 0x00001030 reg1036 */ 880 struct { 881 RK_U32 qpmin_area0 : 6; 882 RK_U32 qpmax_area0 : 6; 883 RK_U32 qpmin_area1 : 6; 884 RK_U32 qpmax_area1 : 6; 885 RK_U32 qpmin_area2 : 6; 886 RK_U32 reserved : 2; 887 } roi_qthd0; 888 889 /* 0x00001034 reg1037 */ 890 struct { 891 RK_U32 qpmax_area2 : 6; 892 RK_U32 qpmin_area3 : 6; 893 RK_U32 qpmax_area3 : 6; 894 RK_U32 qpmin_area4 : 6; 895 RK_U32 qpmax_area4 : 6; 896 RK_U32 reserved : 2; 897 } roi_qthd1; 898 899 /* 0x00001038 reg1038 */ 900 struct { 901 RK_U32 qpmin_area5 : 6; 902 RK_U32 qpmax_area5 : 6; 903 RK_U32 qpmin_area6 : 6; 904 RK_U32 qpmax_area6 : 6; 905 RK_U32 qpmin_area7 : 6; 906 RK_U32 reserved : 2; 907 } roi_qthd2; 908 909 /* 0x0000103c reg1039 */ 910 struct { 911 RK_U32 qpmax_area7 : 6; 912 RK_U32 reserved : 24; 913 RK_U32 qpmap_mode : 2; 914 } roi_qthd3; 915 916 /* 0x00001040 reg1040 */ 917 RK_U32 reserved_1040; 918 919 /* 0x00001044 reg1041 - 0x00001050 reg1044 */ 920 RK_U8 aq_tthd[16]; 921 922 /* 923 * 0x00001054 reg1045 - 0x00001060 reg1048 924 * only low 6 bits is valid for per step. 925 */ 926 RK_U8 aq_step[16]; 927 928 /* 0x00001064 reg1049 */ 929 struct { 930 RK_U32 madi_th0 : 8; 931 RK_U32 madi_th1 : 8; 932 RK_U32 madi_th2 : 8; 933 RK_U32 reserved : 8; 934 } madi_st_thd; 935 936 /* 0x00001068 reg1050 */ 937 struct { 938 RK_U32 madp_th0 : 12; 939 RK_U32 reserved : 4; 940 RK_U32 madp_th1 : 12; 941 RK_U32 reserved1 : 4; 942 } madp_st_thd0; 943 944 /* 0x0000106c reg1051 */ 945 struct { 946 RK_U32 madp_th2 : 12; 947 RK_U32 reserved : 20; 948 } madp_st_thd1; 949 950 /* 0x1078 - 0x107c */ 951 RK_U32 reserved1052_1054[3]; 952 953 /* 0x0000107c reg1055 */ 954 struct { 955 RK_U32 chrm_klut_ofst : 4; 956 RK_U32 reserved : 4; 957 RK_U32 inter_chrm_dist_multi : 6; 958 RK_U32 reserved1 : 18; 959 } klut_ofst; 960 961 /*0x00001080 reg1056 - 0x0000110c reg1091 */ 962 Vepu540cRoiCfg roi_cfg; 963 } hevc_vepu540c_rc_roi; 964 965 /* class: iprd/iprd_wgt/rdo_wgta/prei_dif*/ 966 /* 0x00001700 reg1472 - 0x00001cd4 reg1845 */ 967 typedef struct HevcVepu540cWgt_t { 968 /* 0x00001700 - 0x0000172c reg1472 */ 969 RK_U32 reserved1472_1483[12]; 970 971 /* 0x00001730 reg1484 */ 972 struct { 973 RK_U32 qnt_bias_i : 10; 974 RK_U32 qnt_bias_p : 10; 975 RK_U32 reserved : 12; 976 } reg1484_qnt_bias_comb; 977 978 /* 0x1734 - 0x175c */ 979 RK_U32 reserved1485_1495[11]; 980 981 /* 0x00001760 reg1496 */ 982 struct { 983 RK_U32 cime_pmv_num : 1; 984 RK_U32 cime_fuse : 1; 985 RK_U32 itp_mode : 1; 986 RK_U32 reserved : 1; 987 RK_U32 move_lambda : 4; 988 RK_U32 rime_lvl_mrg : 2; 989 RK_U32 rime_prelvl_en : 2; 990 RK_U32 rime_prersu_en : 3; 991 RK_U32 reserved1 : 17; 992 } me_sqi_cfg; 993 994 /* 0x00001764 reg1497 */ 995 struct { 996 RK_U32 cime_mvd_th0 : 9; 997 RK_U32 reserved : 1; 998 RK_U32 cime_mvd_th1 : 9; 999 RK_U32 reserved1 : 1; 1000 RK_U32 cime_mvd_th2 : 9; 1001 RK_U32 reserved2 : 3; 1002 } cime_mvd_th; 1003 1004 /* 0x00001768 reg1498 */ 1005 struct { 1006 RK_U32 cime_madp_th : 12; 1007 RK_U32 reserved : 20; 1008 } cime_madp_th; 1009 1010 /* 0x0000176c reg1499 */ 1011 struct { 1012 RK_U32 cime_multi0 : 8; 1013 RK_U32 cime_multi1 : 8; 1014 RK_U32 cime_multi2 : 8; 1015 RK_U32 cime_multi3 : 8; 1016 } cime_multi; 1017 1018 /* 0x00001770 reg1500 */ 1019 struct { 1020 RK_U32 rime_mvd_th0 : 3; 1021 RK_U32 reserved : 1; 1022 RK_U32 rime_mvd_th1 : 3; 1023 RK_U32 reserved1 : 9; 1024 RK_U32 fme_madp_th : 12; 1025 RK_U32 reserved2 : 4; 1026 } rime_mvd_th; 1027 1028 /* 0x00001774 reg1501 */ 1029 struct { 1030 RK_U32 rime_madp_th0 : 12; 1031 RK_U32 reserved : 4; 1032 RK_U32 rime_madp_th1 : 12; 1033 RK_U32 reserved1 : 4; 1034 } rime_madp_th; 1035 1036 /* 0x00001778 reg1502 */ 1037 struct { 1038 RK_U32 rime_multi0 : 10; 1039 RK_U32 rime_multi1 : 10; 1040 RK_U32 rime_multi2 : 10; 1041 RK_U32 reserved : 2; 1042 } rime_multi; 1043 1044 /* 0x0000177c reg1503 */ 1045 struct { 1046 RK_U32 cmv_th0 : 8; 1047 RK_U32 cmv_th1 : 8; 1048 RK_U32 cmv_th2 : 8; 1049 RK_U32 reserved : 8; 1050 } cmv_st_th; 1051 1052 /* 0x1780 - 0x17fc */ 1053 RK_U32 reserved1504_1535[32]; 1054 1055 /* 0x00001800 reg1536 */ 1056 struct { 1057 RK_U32 lambda_satd_offset : 5; 1058 RK_U32 reserved : 27; 1059 } iprd_lamb_satd_ofst; 1060 1061 /* 0x1804 - 0x18fc */ 1062 RK_U32 reserved1537_1599[63];; 1063 1064 /* wgt_qp48_grpa */ 1065 /* 0x00001900 reg1600 */ 1066 RK_U32 rdo_wgta_qp_grpa_0_51[52]; 1067 } hevc_vepu540c_wgt; 1068 1069 typedef struct H265eV540cRegSet_t { 1070 hevc_vepu540c_control_cfg reg_ctl; 1071 hevc_vepu540c_base reg_base; 1072 hevc_vepu540c_rc_roi reg_rc_roi; 1073 hevc_vepu540c_wgt reg_wgt; 1074 vepu540c_rdo_cfg reg_rdo; 1075 vepu540c_scl_cfg reg_scl; 1076 vepu540c_jpeg_tab jpeg_table; 1077 vepu540c_dbg reg_dbg; 1078 } H265eV540cRegSet; 1079 1080 typedef struct H265eV540cStatusElem_t { 1081 vepu540c_hw_status hw_status; 1082 vepu540c_status st; 1083 } H265eV540cStatusElem; 1084 1085 #endif 1086