1 /* SPDX-License-Identifier: Apache-2.0 */ 2 /* 3 * Copyright (c) 2024 Rockchip Electronics Co., Ltd. 4 */ 5 6 #ifndef __HAL_H264E_VEPU510_REG_H__ 7 #define __HAL_H264E_VEPU510_REG_H__ 8 9 #include "rk_type.h" 10 #include "vepu510_common.h" 11 12 /* class: buffer/video syntax */ 13 /* 0x00000270 reg156 - 0x000003f4 reg253*/ 14 typedef struct H264eVepu510Frame_t { 15 16 Vepu510FrmCommon common; 17 18 /* 0x000003a0 reg232 */ 19 struct { 20 RK_U32 rect_size : 1; 21 RK_U32 reserved : 2; 22 RK_U32 vlc_lmt : 1; 23 RK_U32 chrm_spcl : 1; 24 RK_U32 reserved1 : 8; 25 RK_U32 ccwa_e : 1; 26 RK_U32 reserved2 : 1; 27 RK_U32 atr_e : 1; 28 RK_U32 reserved3 : 4; 29 RK_U32 scl_lst_sel : 2; 30 RK_U32 reserved4 : 6; 31 RK_U32 atf_e : 1; 32 RK_U32 atr_mult_sel_e : 1; 33 RK_U32 reserved5 : 2; 34 } rdo_cfg; 35 36 /* 0x000003a4 reg233 */ 37 struct { 38 RK_U32 rdo_mark_mode : 9; 39 RK_U32 reserved : 23; 40 } iprd_csts; 41 42 /* 0x3a8 - 0x3ac */ 43 RK_U32 reserved234_235[2]; 44 45 /* 0x000003b0 reg236 */ 46 struct { 47 RK_U32 nal_ref_idc : 2; 48 RK_U32 nal_unit_type : 5; 49 RK_U32 reserved : 25; 50 } synt_nal; 51 52 /* 0x000003b4 reg237 */ 53 struct { 54 RK_U32 max_fnum : 4; 55 RK_U32 drct_8x8 : 1; 56 RK_U32 mpoc_lm4 : 4; 57 RK_U32 poc_type : 2; 58 RK_U32 reserved : 21; 59 } synt_sps; 60 61 /* 0x000003b8 reg238 */ 62 struct { 63 RK_U32 etpy_mode : 1; 64 RK_U32 trns_8x8 : 1; 65 RK_U32 csip_flag : 1; 66 RK_U32 num_ref0_idx : 2; 67 RK_U32 num_ref1_idx : 2; 68 RK_U32 pic_init_qp : 6; 69 RK_U32 cb_ofst : 5; 70 RK_U32 cr_ofst : 5; 71 RK_U32 reserved : 1; 72 RK_U32 dbf_cp_flg : 1; 73 RK_U32 reserved1 : 7; 74 } synt_pps; 75 76 /* 0x000003bc reg239 */ 77 struct { 78 RK_U32 sli_type : 2; 79 RK_U32 pps_id : 8; 80 RK_U32 drct_smvp : 1; 81 RK_U32 num_ref_ovrd : 1; 82 RK_U32 cbc_init_idc : 2; 83 RK_U32 reserved : 2; 84 RK_U32 frm_num : 16; 85 } synt_sli0; 86 87 /* 0x000003c0 reg240 */ 88 struct { 89 RK_U32 idr_pid : 16; 90 RK_U32 poc_lsb : 16; 91 } synt_sli1; 92 93 /* 0x000003c4 reg241 */ 94 struct { 95 RK_U32 rodr_pic_idx : 2; 96 RK_U32 ref_list0_rodr : 1; 97 RK_U32 sli_beta_ofst : 4; 98 RK_U32 sli_alph_ofst : 4; 99 RK_U32 dis_dblk_idc : 2; 100 RK_U32 reserved : 3; 101 RK_U32 rodr_pic_num : 16; 102 } synt_sli2; 103 104 /* 0x000003c8 reg242 */ 105 struct { 106 RK_U32 nopp_flg : 1; 107 RK_U32 ltrf_flg : 1; 108 RK_U32 arpm_flg : 1; 109 RK_U32 mmco4_pre : 1; 110 RK_U32 mmco_type0 : 3; 111 RK_U32 mmco_parm0 : 16; 112 RK_U32 mmco_type1 : 3; 113 RK_U32 mmco_type2 : 3; 114 RK_U32 reserved : 3; 115 } synt_refm0; 116 117 /* 0x000003cc reg243 */ 118 struct { 119 RK_U32 mmco_parm1 : 16; 120 RK_U32 mmco_parm2 : 16; 121 } synt_refm1; 122 123 /* 0x000003d0 reg244 */ 124 struct { 125 RK_U32 long_term_frame_idx0 : 4; 126 RK_U32 long_term_frame_idx1 : 4; 127 RK_U32 long_term_frame_idx2 : 4; 128 RK_U32 reserved : 20; 129 } synt_refm2; 130 131 /* 0x000003d4 reg245 */ 132 struct { 133 RK_U32 dlt_poc_s0_m12 : 16; 134 RK_U32 dlt_poc_s0_m13 : 16; 135 } synt_refm3_hevc; 136 137 /* 0x000003d8 reg246 */ 138 struct { 139 RK_U32 poc_lsb_lt1 : 16; 140 RK_U32 poc_lsb_lt2 : 16; 141 } synt_long_refm0_hevc; 142 143 /* 0x000003dc reg247 */ 144 struct { 145 RK_U32 dlt_poc_msb_cycl1 : 16; 146 RK_U32 dlt_poc_msb_cycl2 : 16; 147 } synt_long_refm1_hevc; 148 149 /* 0x000003e0 reg248 */ 150 struct { 151 RK_U32 sao_lambda_multi : 3; 152 RK_U32 reserved : 29; 153 } sao_cfg_hevc; 154 155 /* 0x3e4 - 0x3ec */ 156 RK_U32 reserved249_251[3]; 157 158 /* 0x000003f0 reg252 */ 159 struct { 160 RK_U32 mv_v_lmt_thd : 14; 161 RK_U32 reserved : 1; 162 RK_U32 mv_v_lmt_en : 1; 163 RK_U32 reserved1 : 16; 164 } sli_cfg; 165 166 /* 0x000003f4 reg253 */ 167 struct { 168 RK_U32 tile_x : 9; 169 RK_U32 reserved : 7; 170 RK_U32 tile_y : 9; 171 RK_U32 reserved1 : 7; 172 } tile_pos_hevc; 173 } H264eVepu510Frame; 174 175 /* class: param */ 176 /* 0x00001700 reg1472 - 0x000019cc reg1651 */ 177 typedef struct H264eVepu510Param_t { 178 /* 0x00001700 reg1472 */ 179 struct { 180 RK_U32 iprd_tthdy4_0 : 12; 181 RK_U32 reserved : 4; 182 RK_U32 iprd_tthdy4_1 : 12; 183 RK_U32 reserved1 : 4; 184 } iprd_tthdy4_0; 185 186 /* 0x00001704 reg1473 */ 187 struct { 188 RK_U32 iprd_tthdy4_2 : 12; 189 RK_U32 reserved : 4; 190 RK_U32 iprd_tthdy4_3 : 12; 191 RK_U32 reserved1 : 4; 192 } iprd_tthdy4_1; 193 194 /* 0x00001708 reg1474 */ 195 struct { 196 RK_U32 iprd_tthdc8_0 : 12; 197 RK_U32 reserved : 4; 198 RK_U32 iprd_tthdc8_1 : 12; 199 RK_U32 reserved1 : 4; 200 } iprd_tthdc8_0; 201 202 /* 0x0000170c reg1475 */ 203 struct { 204 RK_U32 iprd_tthdc8_2 : 12; 205 RK_U32 reserved : 4; 206 RK_U32 iprd_tthdc8_3 : 12; 207 RK_U32 reserved1 : 4; 208 } iprd_tthdc8_1; 209 210 /* 0x00001710 reg1476 */ 211 struct { 212 RK_U32 iprd_tthdy8_0 : 12; 213 RK_U32 reserved : 4; 214 RK_U32 iprd_tthdy8_1 : 12; 215 RK_U32 reserved1 : 4; 216 } iprd_tthdy8_0; 217 218 /* 0x00001714 reg1477 */ 219 struct { 220 RK_U32 iprd_tthdy8_2 : 12; 221 RK_U32 reserved : 4; 222 RK_U32 iprd_tthdy8_3 : 12; 223 RK_U32 reserved1 : 4; 224 } iprd_tthdy8_1; 225 226 /* 0x00001718 reg1478 */ 227 struct { 228 RK_U32 iprd_tthd_ul : 12; 229 RK_U32 reserved : 20; 230 } iprd_tthd_ul; 231 232 /* 0x0000171c reg1479 */ 233 struct { 234 RK_U32 iprd_wgty8_0 : 8; 235 RK_U32 iprd_wgty8_1 : 8; 236 RK_U32 iprd_wgty8_2 : 8; 237 RK_U32 iprd_wgty8_3 : 8; 238 } iprd_wgty8; 239 240 /* 0x00001720 reg1480 */ 241 struct { 242 RK_U32 iprd_wgty4_0 : 8; 243 RK_U32 iprd_wgty4_1 : 8; 244 RK_U32 iprd_wgty4_2 : 8; 245 RK_U32 iprd_wgty4_3 : 8; 246 } iprd_wgty4; 247 248 /* 0x00001724 reg1481 */ 249 struct { 250 RK_U32 iprd_wgty16_0 : 8; 251 RK_U32 iprd_wgty16_1 : 8; 252 RK_U32 iprd_wgty16_2 : 8; 253 RK_U32 iprd_wgty16_3 : 8; 254 } iprd_wgty16; 255 256 /* 0x00001728 reg1482 */ 257 struct { 258 RK_U32 iprd_wgtc8_0 : 8; 259 RK_U32 iprd_wgtc8_1 : 8; 260 RK_U32 iprd_wgtc8_2 : 8; 261 RK_U32 iprd_wgtc8_3 : 8; 262 } iprd_wgtc8; 263 264 /* 0x172c */ 265 RK_U32 reserved_1483; 266 267 /* 0x00001730 reg1484 */ 268 struct { 269 RK_U32 qnt_f_bias_i : 10; 270 RK_U32 qnt_f_bias_p : 10; 271 RK_U32 reserve : 12; 272 } qnt_bias_comb; 273 274 /* 0x1734 - 0x173c */ 275 RK_U32 reserved1485_1487[3]; 276 277 /* 0x00001740 reg1488 */ 278 struct { 279 RK_U32 thd0 : 8; 280 RK_U32 reserve0 : 8; 281 RK_U32 thd1 : 8; 282 RK_U32 reserve1 : 8; 283 } atr_thd0; 284 285 /* 0x00001744 reg1489 */ 286 struct { 287 RK_U32 thd2 : 8; 288 RK_U32 reserve0 : 8; 289 RK_U32 thdqp : 6; 290 RK_U32 reserve1 : 10; 291 } atr_thd1; 292 293 /* 0x1748 - 0x174c */ 294 RK_U32 reserved1490_1491[2]; 295 296 /* 0x00001750 reg1492 */ 297 struct { 298 RK_U32 atr_lv16_wgt0 : 8; 299 RK_U32 atr_lv16_wgt1 : 8; 300 RK_U32 atr_lv16_wgt2 : 8; 301 RK_U32 reserved : 8; 302 } atr_wgt16; 303 304 /* 0x00001754 reg1493*/ 305 struct { 306 RK_U32 atr_lv8_wgt0 : 8; 307 RK_U32 atr_lv8_wgt1 : 8; 308 RK_U32 atr_lv8_wgt2 : 8; 309 RK_U32 reserved : 8; 310 } atr_wgt8; 311 312 /* 0x00001758 reg1494 */ 313 struct { 314 RK_U32 atr_lv4_wgt0 : 8; 315 RK_U32 atr_lv4_wgt1 : 8; 316 RK_U32 atr_lv4_wgt2 : 8; 317 RK_U32 reserved : 8; 318 } atr_wgt4; 319 320 /* 0x175c */ 321 RK_U32 reserved_1495; 322 323 /* 0x00001760 reg1496 */ 324 struct { 325 RK_U32 cime_pmv_num : 1; 326 RK_U32 cime_fuse : 1; 327 RK_U32 itp_mode : 1; 328 RK_U32 reserved : 1; 329 RK_U32 move_lambda : 4; 330 RK_U32 rime_lvl_mrg : 2; 331 RK_U32 rime_prelvl_en : 2; 332 RK_U32 rime_prersu_en : 3; 333 RK_U32 reserved1 : 17; 334 } me_sqi_comb; 335 336 /* 0x00001764 reg1497 */ 337 struct { 338 RK_U32 cime_mvd_th0 : 9; 339 RK_U32 reserved : 1; 340 RK_U32 cime_mvd_th1 : 9; 341 RK_U32 reserved1 : 1; 342 RK_U32 cime_mvd_th2 : 9; 343 RK_U32 reserved2 : 3; 344 } cime_mvd_th_comb; 345 346 /* 0x00001768 reg1498 */ 347 struct { 348 RK_U32 cime_madp_th : 12; 349 RK_U32 reserved : 20; 350 } cime_madp_th_comb; 351 352 /* 0x0000176c reg1499 */ 353 struct { 354 RK_U32 cime_multi0 : 8; 355 RK_U32 cime_multi1 : 8; 356 RK_U32 cime_multi2 : 8; 357 RK_U32 cime_multi3 : 8; 358 } cime_multi_comb; 359 360 /* 0x00001770 reg1500 */ 361 struct { 362 RK_U32 rime_mvd_th0 : 3; 363 RK_U32 reserved : 1; 364 RK_U32 rime_mvd_th1 : 3; 365 RK_U32 reserved1 : 9; 366 RK_U32 fme_madp_th : 12; 367 RK_U32 reserved2 : 4; 368 } rime_mvd_th_comb; 369 370 /* 0x00001774 reg1501 */ 371 struct { 372 RK_U32 rime_madp_th0 : 12; 373 RK_U32 reserved : 4; 374 RK_U32 rime_madp_th1 : 12; 375 RK_U32 reserved1 : 4; 376 } rime_madp_th_comb; 377 378 /* 0x00001778 reg1502 */ 379 struct { 380 RK_U32 rime_multi0 : 10; 381 RK_U32 rime_multi1 : 10; 382 RK_U32 rime_multi2 : 10; 383 RK_U32 reserved : 2; 384 } rime_multi_comb; 385 386 /* 0x0000177c reg1503 */ 387 struct { 388 RK_U32 cmv_th0 : 8; 389 RK_U32 cmv_th1 : 8; 390 RK_U32 cmv_th2 : 8; 391 RK_U32 reserved : 8; 392 } cmv_st_th_comb; 393 394 /* 0x1780 - 0x17fc */ 395 RK_U32 reserved1504_1535[32]; 396 397 /* 0x00001800 reg1536 - 0x000018cc reg1587*/ 398 RK_U32 pprd_lamb_satd_0_51[52]; 399 400 /* 0x000018d0 reg1588 */ 401 struct { 402 RK_U32 lambda_satd_offset : 5; 403 RK_U32 reserved : 27; 404 } iprd_lamb_satd_ofst; 405 406 /* 0x18d4 - 0x18fc */ 407 RK_U32 reserved1589_1599[11]; 408 409 /* 0x00001900 reg1600 - 0x000019cc reg1651*/ 410 RK_U32 rdo_wgta_qp_grpa_0_51[52]; 411 } H264eVepu510Param; 412 413 /* class: rdo/q_i */ 414 /* 0x00002000 reg2048 - 0x000020fc reg2111 */ 415 typedef struct H264eVepu510SqiCfg_t { 416 /* 0x00002000 reg2048 - 0x00002010 reg2052*/ 417 RK_U32 reserved_2048_2052[5]; 418 419 /* 0x00002014 reg2053 */ 420 struct { 421 RK_U32 rdo_smear_lvl16_multi : 8; 422 RK_U32 rdo_smear_dlt_qp : 4; 423 RK_U32 reserved : 1; 424 RK_U32 stated_mode : 2; 425 RK_U32 rdo_smear_en : 1; 426 RK_U32 reserved1 : 16; 427 } smear_opt_cfg; 428 429 /* 0x00002018 reg2054 */ 430 struct { 431 RK_U32 madp_cur_thd0 : 12; 432 RK_U32 reserved : 4; 433 RK_U32 madp_cur_thd1 : 12; 434 RK_U32 reserved1 : 4; 435 } smear_madp_thd0; 436 437 /* 0x0000201c reg2055 */ 438 struct { 439 RK_U32 madp_cur_thd2 : 12; 440 RK_U32 reserved : 4; 441 RK_U32 madp_cur_thd3 : 12; 442 RK_U32 reserved1 : 4; 443 } smear_madp_thd1; 444 445 /* 0x00002020 reg2056 */ 446 struct { 447 RK_U32 madp_around_thd0 : 12; 448 RK_U32 reserved : 4; 449 RK_U32 madp_around_thd1 : 12; 450 RK_U32 reserved1 : 4; 451 } smear_madp_thd2; 452 453 /* 0x00002024 reg2057 */ 454 struct { 455 RK_U32 madp_around_thd2 : 12; 456 RK_U32 reserved : 4; 457 RK_U32 madp_around_thd3 : 12; 458 RK_U32 reserved1 : 4; 459 } smear_madp_thd3; 460 461 /* 0x00002028 reg2058 */ 462 struct { 463 RK_U32 madp_around_thd4 : 12; 464 RK_U32 reserved : 4; 465 RK_U32 madp_around_thd5 : 12; 466 RK_U32 reserved1 : 4; 467 } smear_madp_thd4; 468 469 /* 0x0000202c reg2059 */ 470 struct { 471 RK_U32 madp_ref_thd0 : 12; 472 RK_U32 reserved : 4; 473 RK_U32 madp_ref_thd1 : 12; 474 RK_U32 reserved1 : 4; 475 } smear_madp_thd5; 476 477 /* 0x00002030 reg2060 */ 478 struct { 479 RK_U32 cnt_cur_thd0 : 4; 480 RK_U32 reserved : 4; 481 RK_U32 cnt_cur_thd1 : 4; 482 RK_U32 reserved1 : 4; 483 RK_U32 cnt_cur_thd2 : 4; 484 RK_U32 reserved2 : 4; 485 RK_U32 cnt_cur_thd3 : 4; 486 RK_U32 reserved3 : 4; 487 } smear_cnt_thd0; 488 489 /* 0x00002034 reg2061 */ 490 struct { 491 RK_U32 cnt_around_thd0 : 4; 492 RK_U32 reserved : 4; 493 RK_U32 cnt_around_thd1 : 4; 494 RK_U32 reserved1 : 4; 495 RK_U32 cnt_around_thd2 : 4; 496 RK_U32 reserved2 : 4; 497 RK_U32 cnt_around_thd3 : 4; 498 RK_U32 reserved3 : 4; 499 } smear_cnt_thd1; 500 501 /* 0x00002038 reg2062 */ 502 struct { 503 RK_U32 cnt_around_thd4 : 4; 504 RK_U32 reserved : 4; 505 RK_U32 cnt_around_thd5 : 4; 506 RK_U32 reserved1 : 4; 507 RK_U32 cnt_around_thd6 : 4; 508 RK_U32 reserved2 : 4; 509 RK_U32 cnt_around_thd7 : 4; 510 RK_U32 reserved3 : 4; 511 } smear_cnt_thd2; 512 513 /* 0x0000203c reg2063 */ 514 struct { 515 RK_U32 cnt_ref_thd0 : 4; 516 RK_U32 reserved : 4; 517 RK_U32 cnt_ref_thd1 : 4; 518 RK_U32 reserved1 : 20; 519 } smear_cnt_thd3; 520 521 /* 0x00002040 reg2064 */ 522 struct { 523 RK_U32 resi_small_cur_th0 : 6; 524 RK_U32 reserved : 2; 525 RK_U32 resi_big_cur_th0 : 6; 526 RK_U32 reserved1 : 2; 527 RK_U32 resi_small_cur_th1 : 6; 528 RK_U32 reserved2 : 2; 529 RK_U32 resi_big_cur_th1 : 6; 530 RK_U32 reserved3 : 2; 531 } smear_resi_thd0; 532 533 /* 0x00002044 reg2065 */ 534 struct { 535 RK_U32 resi_small_around_th0 : 6; 536 RK_U32 reserved : 2; 537 RK_U32 resi_big_around_th0 : 6; 538 RK_U32 reserved1 : 2; 539 RK_U32 resi_small_around_th1 : 6; 540 RK_U32 reserved2 : 2; 541 RK_U32 resi_big_around_th1 : 6; 542 RK_U32 reserved3 : 2; 543 } smear_resi_thd1; 544 545 /* 0x00002048 reg2066 */ 546 struct { 547 RK_U32 resi_small_around_th2 : 6; 548 RK_U32 reserved : 2; 549 RK_U32 resi_big_around_th2 : 6; 550 RK_U32 reserved1 : 2; 551 RK_U32 resi_small_around_th3 : 6; 552 RK_U32 reserved2 : 2; 553 RK_U32 resi_big_around_th3 : 6; 554 RK_U32 reserved3 : 2; 555 } smear_resi_thd2; 556 557 /* 0x0000204c reg2067 */ 558 struct { 559 RK_U32 resi_small_ref_th0 : 6; 560 RK_U32 reserved : 2; 561 RK_U32 resi_big_ref_th0 : 6; 562 RK_U32 reserved1 : 18; 563 } smear_resi_thd3; 564 565 /* 0x00002050 reg2068 */ 566 struct { 567 RK_U32 resi_th0 : 8; 568 RK_U32 reserved : 8; 569 RK_U32 resi_th1 : 8; 570 RK_U32 reserved1 : 8; 571 } smear_resi_thd4; 572 573 /* 0x00002054 reg2069 */ 574 struct { 575 RK_U32 madp_cnt_th0 : 4; 576 RK_U32 madp_cnt_th1 : 4; 577 RK_U32 madp_cnt_th2 : 4; 578 RK_U32 madp_cnt_th3 : 4; 579 RK_U32 reserved : 16; 580 } smear_st_thd; 581 582 /* 0x2058 - 0x206c */ 583 RK_U32 reserved2070_2075[6]; 584 585 /* 0x00002070 reg2076 - 0x0000207c reg2079*/ 586 rdo_skip_par rdo_b16_skip; 587 588 /* 0x00002080 reg2080 - 0x00002088 reg2082 */ 589 RK_U32 reserved2080_2082[3]; 590 591 /* 0x0000208c reg2083 - 0x00002094 reg2085 */ 592 rdo_noskip_par rdo_b16_inter; 593 594 /* 0x00002098 reg2086 - 0x000020a4 reg2088 */ 595 RK_U32 reserved2086_2088[3]; 596 597 /* 0x000020a8 reg2089 - 0x000020ac reg2091 */ 598 rdo_noskip_par rdo_b16_intra; 599 600 /* 0x000020b0 reg2092 */ 601 RK_U32 reserved2092; 602 603 /* 0x000020b4 reg2093 */ 604 struct { 605 RK_U32 thd0 : 4; 606 RK_U32 reserved : 4; 607 RK_U32 thd1 : 4; 608 RK_U32 reserved1 : 4; 609 RK_U32 thd2 : 4; 610 RK_U32 reserved2 : 4; 611 RK_U32 thd3 : 4; 612 RK_U32 reserved3 : 4; 613 } rdo_b16_intra_atf_cnt_thd; 614 615 /* 0x000020b8 reg2094 */ 616 struct { 617 RK_U32 big_th0 : 6; 618 RK_U32 reserved : 2; 619 RK_U32 big_th1 : 6; 620 RK_U32 reserved1 : 2; 621 RK_U32 small_th0 : 6; 622 RK_U32 reserved2 : 2; 623 RK_U32 small_th1 : 6; 624 RK_U32 reserved3 : 2; 625 } rdo_atf_resi_thd; 626 } H264eVepu510Sqi; 627 628 /* class: mmu */ 629 /* 0x0000f000 reg15360 - 0x0000f024 reg15369 */ 630 typedef struct HalVepu510Reg_t { 631 Vepu510ControlCfg reg_ctl; 632 H264eVepu510Frame reg_frm; 633 Vepu510RcRoi reg_rc_roi; 634 H264eVepu510Param reg_param; 635 H264eVepu510Sqi reg_sqi; 636 Vepu510SclCfg reg_scl; 637 Vepu510Status reg_st; 638 Vepu510Dbg reg_dbg; 639 } HalVepu510RegSet; 640 641 #endif