1 /* 2 * Copyright 2015 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_VEPU541_REG_H__ 18 #define __HAL_H265E_VEPU541_REG_H__ 19 20 #include "rk_type.h" 21 22 /* OSD position */ 23 typedef struct { 24 RK_U32 lt_pos_x : 8; /* left-top */ 25 RK_U32 lt_pos_y : 8; 26 RK_U32 rd_pos_x : 8; /* right-bottom */ 27 RK_U32 rd_pos_y : 8; 28 } OsdPos; 29 30 /* OSD palette */ 31 typedef struct { 32 RK_U32 y : 8; 33 RK_U32 u : 8; 34 RK_U32 v : 8; 35 RK_U32 alpha : 8; 36 } OsdPlt; 37 typedef struct { 38 RK_U32 axi_brsp_cke : 7; 39 RK_U32 cime_dspw_orsd : 1; 40 RK_U32 reserve : 24; 41 } v541_dtrns_cfg; 42 43 typedef struct { 44 RK_U32 Reserve0 : 7; 45 RK_U32 cime_dspw_orsd : 1; 46 RK_U32 reserve1 : 8; 47 RK_U32 axi_brsp_cke : 8; 48 RK_U32 reserve2 : 8; 49 } v540_dtrns_cfg; 50 51 typedef struct H265eV541RegSet_t { 52 53 /* reg[000] */ 54 /* 0x0 - VERSION, swreg01 */ 55 struct { 56 RK_U32 rkvenc_ver : 32; //default : 0x0000_0001 57 } version; 58 59 /* 0x4 - swreg02, ENC_STRT */ 60 struct { 61 RK_U32 lkt_num : 8; 62 RK_U32 rkvenc_cmd : 2; 63 RK_U32 reserve : 6; 64 RK_U32 enc_cke : 1; 65 RK_U32 resetn_hw_en : 1; 66 RK_U32 enc_done_tmvp_en : 1; 67 RK_U32 Reserve : 13; 68 } enc_strt; 69 70 /* 0x8 - ENC_CLR */ 71 struct { 72 RK_U32 safe_clr : 1; 73 RK_U32 force_clr : 1; 74 RK_U32 reserve : 30; 75 } enc_clr;//swreg03 76 77 /* 0xc - swreg04, LKT_ADDR */ 78 struct { 79 RK_U32 lkt_addr : 32; 80 } lkt_addr; 81 82 /* 0x10 - swreg05, INT_EN */ 83 struct { 84 RK_U32 enc_done_en : 1; 85 RK_U32 lkt_done_en : 1; 86 RK_U32 sclr_done_en : 1; 87 RK_U32 slc_done_en : 1; 88 RK_U32 bsf_ovflw_en : 1; 89 RK_U32 brsp_ostd_en : 1; 90 RK_U32 wbus_err_en : 1; 91 RK_U32 rbus_err_en : 1; 92 RK_U32 wdg_en : 1; 93 RK_U32 reserve : 23; 94 } int_en; 95 96 struct { 97 RK_U32 enc_done_msk : 1; 98 RK_U32 lkt_done_msk : 1; 99 RK_U32 sclr_done_msk : 1; 100 RK_U32 slc_done_msk : 1; 101 RK_U32 bsf_folw_msk : 1; 102 RK_U32 brsp_otsd_msk : 1; 103 RK_U32 wbus_err_msk : 1; 104 RK_U32 rbus_err_msk : 1; 105 RK_U32 wdg_msk : 1; 106 RK_U32 reserved : 23;; 107 } int_msk; //swreg06, INT_MSK 108 109 struct { 110 RK_U32 enc_done_clr : 1; 111 RK_U32 lkt_done_clr : 1; 112 RK_U32 sclr_done_clr : 1; 113 RK_U32 slc_done_clr : 1; 114 RK_U32 bsf_folw_clr : 1; 115 RK_U32 brsp_otsd_clr : 1; 116 RK_U32 wbus_err_clr : 1; 117 RK_U32 rbus_err_clr : 1; 118 RK_U32 wdg_msk : 1; 119 RK_U32 reserved : 23; 120 } int_clr; //swreg07, INT_CLR 121 122 /* 0x1C - swreg08, INT_STA */ 123 struct { 124 RK_U32 reserve : 32; 125 } int_stus; 126 127 RK_U32 reserved_0x20_0x2c[4]; 128 129 /* 0x30 - swreg09, ENC_RSL */ 130 struct { 131 RK_U32 pic_wd8_m1 : 9; 132 RK_U32 reserve0 : 1; 133 RK_U32 pic_wfill : 6; 134 RK_U32 pic_hd8_m1 : 9; 135 RK_U32 reserve1 : 1; 136 RK_U32 pic_hfill : 6; 137 } enc_rsl; 138 139 /* 0x34 - ENC_PIC */ 140 struct { 141 RK_U32 enc_stnd : 1; 142 RK_U32 roi_en : 1; 143 RK_U32 cur_frm_ref : 1; 144 RK_U32 mei_stor : 1; 145 RK_U32 bs_scp : 1; 146 RK_U32 rdo_wgt_sel : 1; 147 RK_U32 reserved : 2; 148 RK_U32 pic_qp : 6; 149 RK_U32 tot_poc_num : 5; 150 RK_U32 log2_ctu_num : 4; 151 RK_U32 atr_thd_sel : 1; 152 RK_U32 dchs_rxid : 2; 153 RK_U32 dchs_txid : 2; 154 RK_U32 dchs_rxe : 1; 155 RK_U32 satd_byps_en : 1; 156 RK_U32 slen_fifo : 1; 157 RK_U32 node_int : 1; 158 } enc_pic; //swreg10 159 160 struct { 161 RK_U32 vs_load_thd : 24; 162 RK_U32 rfp_load_thd : 8; 163 } enc_wdg; //swreg11, ENC_WDG 164 165 /* 0x3c - DTRNS_MAP */ 166 struct { 167 RK_U32 lpfw_bus_ordr : 1; /* vepu540 used */ 168 RK_U32 cmvw_bus_ordr : 1; 169 RK_U32 dspw_bus_ordr : 1; 170 RK_U32 rfpw_bus_ordr : 1; 171 RK_U32 src_bus_edin : 4; 172 RK_U32 meiw_bus_edin : 4; 173 RK_U32 bsw_bus_edin : 3; 174 RK_U32 lktr_bus_edin : 4; 175 RK_U32 roir_bus_edin : 4; 176 RK_U32 lktw_bus_edin : 4; 177 RK_U32 afbc_bsize : 1; 178 RK_U32 reserved : 4; 179 } dtrns_map; //swreg12 180 181 union { 182 v541_dtrns_cfg dtrns_cfg_541; 183 v540_dtrns_cfg dtrns_cfg_540; 184 }; 185 186 /* 0x44 - SRC_FMT */ 187 struct { 188 RK_U32 alpha_swap : 1; 189 RK_U32 rbuv_swap : 1; 190 RK_U32 src_cfmt : 4; 191 RK_U32 src_range : 1; 192 RK_U32 out_fmt_cfg : 1; //vepu540 193 RK_U32 reserve : 24; 194 } src_fmt; 195 196 /* 0x48 - SRC_UDFY */ 197 struct { 198 RK_S32 wght_b2y : 9; 199 RK_S32 wght_g2y : 9; 200 RK_S32 wght_r2y : 9; 201 RK_S32 reserved : 5; 202 } src_udfy; 203 204 /* 0x4c - SRC_UDFU */ 205 struct { 206 RK_S32 wght_b2u : 9; 207 RK_S32 wght_g2u : 9; 208 RK_S32 wght_r2u : 9; 209 RK_S32 reserved : 5; 210 } src_udfu; 211 212 /* 0x50 - SRC_UDFV */ 213 struct { 214 RK_S32 wght_b2v : 9; 215 RK_S32 wght_g2v : 9; 216 RK_S32 wght_r2v : 9; 217 RK_S32 reserved : 5; 218 } src_udfv; 219 220 /* 0x54 - SRC_UDFO */ 221 struct { 222 RK_U32 ofst_v : 8; 223 RK_U32 ofst_u : 8; 224 RK_U32 ofst_y : 5; 225 RK_U32 reserve : 11; 226 } src_udfo; 227 228 /* 0x58 - SRC_PROC */ 229 struct { 230 RK_U32 reserved0 : 26; 231 RK_U32 src_mirr : 1; 232 RK_U32 src_rot : 2; 233 RK_U32 txa_en : 1; 234 RK_U32 afbcd_en : 1; 235 RK_U32 reserved1 : 1; 236 } src_proc; 237 238 /* 0x5c - MMU0_DTE_ADDR */ 239 struct { 240 RK_U32 tile_width_m1 : 6; 241 RK_U32 reserved0 : 10; 242 RK_U32 tile_height_m1 : 6; 243 RK_U32 reserved1 : 9; 244 RK_U32 tile_en : 1; 245 } tile_cfg; 246 247 /* 0x60 - MMU1_DTE_ADDR */ 248 struct { 249 RK_U32 tile_x : 6; 250 RK_U32 reserved0 : 10; 251 RK_U32 tile_y : 6; 252 RK_U32 reserved1 : 10; 253 } tile_pos; 254 255 /* 0x64 - KLUT_OFST */ 256 struct { 257 RK_U32 chrm_kult_ofst : 3; 258 RK_U32 reserved : 29; 259 } klut_ofst; 260 261 /* 0x68-0xc4 - KLUT_WGT */ 262 struct { 263 RK_U32 chrm_klut_wgt0 : 18; 264 RK_U32 reserved : 5; 265 RK_U32 chrm_klut_wgt1 : 9; 266 } klut_wgt0; 267 268 struct { 269 RK_U32 chrm_klut_wgt1 : 9; 270 RK_U32 reserved : 5; 271 RK_U32 chrm_klut_wgt2 : 18; 272 } klut_wgt1; 273 274 struct { 275 RK_U32 chrm_klut_wgt3 : 18; 276 RK_U32 reserved : 5; 277 RK_U32 chrm_klut_wgt4 : 9; 278 } klut_wgt2; 279 280 struct { 281 RK_U32 chrm_klut_wgt4 : 9; 282 RK_U32 reserved : 5; 283 RK_U32 chrm_klut_wgt5 : 18; 284 } klut_wgt3; 285 286 struct { 287 RK_U32 chrm_klut_wgt6 : 18; 288 RK_U32 reserved : 5; 289 RK_U32 chrm_klut_wgt7 : 9; 290 } klut_wgt4; 291 292 struct { 293 RK_U32 chrm_klut_wgt7 : 9; 294 RK_U32 reserved : 5; 295 RK_U32 chrm_klut_wgt8 : 18; 296 } klut_wgt5; 297 298 struct { 299 RK_U32 chrm_klut_wgt9 : 18; 300 RK_U32 reserved : 5; 301 RK_U32 chrm_klut_wgt10 : 9; 302 } klut_wgt6; 303 304 struct { 305 RK_U32 chrm_klut_wgt10 : 9; 306 RK_U32 reserved : 5; 307 RK_U32 chrm_klut_wgt11 : 18; 308 } klut_wgt7; 309 310 struct { 311 RK_U32 chrm_klut_wgt12 : 18; 312 RK_U32 reserved : 5; 313 RK_U32 chrm_klut_wgt13 : 9; 314 } klut_wgt8; 315 316 struct { 317 RK_U32 chrm_klut_wgt13 : 9; 318 RK_U32 reserved : 5; 319 RK_U32 chrm_klut_wgt14 : 18; 320 } klut_wgt9; 321 322 struct { 323 RK_U32 chrm_klut_wgt15 : 18; 324 RK_U32 reserved : 5; 325 RK_U32 chrm_klut_wgt16 : 9; 326 } klut_wgt10; 327 328 struct { 329 RK_U32 chrm_klut_wgt16 : 9; 330 RK_U32 reserved : 5; 331 RK_U32 chrm_klut_wgt17 : 18; 332 } klut_wgt11; 333 334 struct { 335 RK_U32 chrm_klut_wgt18 : 18; 336 RK_U32 reserved : 5; 337 RK_U32 chrm_klut_wgt19 : 9; 338 } klut_wgt12; 339 340 struct { 341 RK_U32 chrm_klut_wgt19 : 9; 342 RK_U32 reserved : 5; 343 RK_U32 chrm_klut_wgt20 : 18; 344 } klut_wgt13; 345 346 struct { 347 RK_U32 chrm_klut_wgt21 : 18; 348 RK_U32 reserved : 5; 349 RK_U32 chrm_klut_wgt22 : 9; 350 } klut_wgt14; 351 352 struct { 353 RK_U32 chrm_klut_wgt22 : 9; 354 RK_U32 reserved : 5; 355 RK_U32 chrm_klut_wgt23 : 18; 356 } klut_wgt15; 357 358 struct { 359 RK_U32 chrm_klut_wgt24 : 18; 360 RK_U32 reserved : 5; 361 RK_U32 chrm_klut_wgt25 : 9; 362 } klut_wgt16; 363 364 struct { 365 RK_U32 chrm_klut_wgt25 : 9; 366 RK_U32 reserved : 5; 367 RK_U32 chrm_klut_wgt26 : 18; 368 } klut_wgt17; 369 370 struct { 371 RK_U32 chrm_klut_wgt27 : 18; 372 RK_U32 reserved : 5; 373 RK_U32 chrm_klut_wgt28 : 9; 374 } klut_wgt18; 375 376 struct { 377 RK_U32 chrm_klut_wgt28 : 9; 378 RK_U32 reserved : 5; 379 RK_U32 chrm_klut_wgt29 : 18; 380 } klut_wgt19; 381 382 struct { 383 RK_U32 chrm_klut_wgt30 : 18; 384 RK_U32 reserved : 5; 385 RK_U32 chrm_klut_wgt31 : 9; 386 } klut_wgt20; 387 388 struct { 389 RK_U32 chrm_klut_wgt31 : 9; 390 RK_U32 reserved : 5; 391 RK_U32 chrm_klut_wgt32 : 18; 392 } klut_wgt21; 393 394 struct { 395 RK_U32 chrm_klut_wgt33 : 18; 396 RK_U32 reserved : 5; 397 RK_U32 chrm_klut_wgt34 : 9; 398 } klut_wgt22; 399 400 /* 0xc4 - klut_wgt23 */ 401 struct { 402 RK_U32 chrm_klut_wgt34 : 9; 403 RK_U32 reserved : 23; 404 } klut_wgt23; 405 406 /* 0xc8 - RC_CFG */ 407 struct { 408 RK_U32 rc_en : 1; 409 RK_U32 aqmode_en : 1; 410 RK_U32 qp_mode : 1; 411 RK_U32 reserved : 13; 412 RK_U32 rc_ctu_num : 16; 413 } rc_cfg; 414 415 /* 0xcc - RC_QP */ 416 struct { 417 RK_U32 reserved : 16; 418 RK_U32 rc_qp_range : 4; 419 RK_U32 rc_max_qp : 6; 420 RK_U32 rc_min_qp : 6; 421 } rc_qp; 422 423 /* 0xd0 - swreg55, RC_TGT */ 424 struct { 425 RK_U32 ctu_ebits : 20; 426 RK_U32 reserve : 12; 427 } rc_tgt; 428 429 /* 0xd4 - RC_ADJ0 */ 430 struct { 431 RK_S32 qp_adjust0 : 5; 432 RK_S32 qp_adjust1 : 5; 433 RK_S32 qp_adjust2 : 5; 434 RK_S32 qp_adjust3 : 5; 435 RK_S32 qp_adjust4 : 5; 436 RK_S32 reserved : 7; 437 } rc_adj0; 438 439 /* 0xd8 - RCADJ1 */ 440 struct { 441 RK_S32 qp_adjust5 : 5; 442 RK_S32 qp_adjust6 : 5; 443 RK_S32 qp_adjust7 : 5; 444 RK_S32 qp_adjust8 : 5; 445 RK_S32 reserved : 12; 446 } rc_adj1; 447 448 /* 0xdc-0xfc swreg47, */ 449 struct { 450 RK_S32 bits_thd0; 451 } rc_erp0; //RC_ERP0 452 453 struct { 454 RK_S32 bits_thd1; 455 } rc_erp1; //swreg48, RC_ERP1 456 457 struct { 458 RK_S32 bits_thd2; 459 } rc_erp2; //swreg49, RC_ERP2 460 461 struct { 462 RK_S32 bits_thd3; 463 } rc_erp3; //swreg50, RC_ERP3 464 465 struct { 466 RK_S32 bits_thd4; 467 } rc_erp4; //swreg51, RC_ERP4 468 469 /* 0xec-0xf8 */ 470 struct { 471 RK_S32 bits_thd5; 472 } rc_erp5; 473 474 struct { 475 RK_S32 bits_thd6; 476 } rc_erp6; 477 478 struct { 479 RK_S32 bits_thd7; 480 } rc_erp7; 481 482 /* 0xfc - RC_ERP8 */ 483 struct { 484 RK_S32 bits_thd8; 485 } rc_erp8; 486 487 /* 0x100 - QPMAP0 */ 488 struct { 489 RK_U32 qpmin_area0 : 6; 490 RK_U32 qpmax_area0 : 6; 491 RK_U32 qpmin_area1 : 6; 492 RK_U32 qpmax_area1 : 6; 493 RK_U32 qpmin_area2 : 6; 494 RK_U32 reserved : 2; 495 } qpmap0; 496 497 /* 0x104 - QPMAP1 */ 498 struct { 499 RK_U32 qpmax_area2 : 6; 500 RK_U32 qpmin_area3 : 6; 501 RK_U32 qpmax_area3 : 6; 502 RK_U32 qpmin_area4 : 6; 503 RK_U32 qpmax_area4 : 6; 504 RK_U32 reserved : 2; 505 } qpmap1; 506 507 /* 0x108 - QPMAP2 */ 508 struct { 509 RK_U32 qpmin_area5 : 6; 510 RK_U32 qpmax_area5 : 6; 511 RK_U32 qpmin_area6 : 6; 512 RK_U32 qpmax_area6 : 6; 513 RK_U32 qpmin_area7 : 6; 514 RK_U32 reserved : 2; 515 } qpmap2; 516 517 /* 0x10c - QPMAP3 */ 518 struct { 519 RK_U32 qpmax_area7 : 6; 520 RK_U32 reserved : 24; 521 RK_U32 qpmap_mode : 2; 522 } qpmap3; 523 524 /* 0x110 - PIC_OFST */ 525 struct { 526 RK_U32 pic_ofst_y : 13; 527 RK_U32 reserved0 : 3; 528 RK_U32 pic_ofst_x : 13; 529 RK_U32 reserved1 : 3; 530 } pic_ofst; 531 532 /* 0x114 - swreg23, SRC_STRID */ 533 struct { 534 RK_U32 src_ystrid : 16; 535 RK_U32 src_cstrid : 16; 536 } src_strid; 537 538 RK_U32 adr_srcy_hevc; /* 0x118 */ 539 RK_U32 adr_srcu_hevc; 540 RK_U32 adr_srcv_hevc; 541 RK_U32 roi_addr_hevc; 542 RK_U32 rfpw_h_addr_hevc; 543 RK_U32 rfpw_b_addr_hevc; 544 RK_U32 rfpr_h_addr_hevc; 545 RK_U32 rfpr_b_addr_hevc; 546 RK_U32 cmvw_addr_hevc; 547 RK_U32 cmvr_addr_hevc; 548 RK_U32 dspw_addr_hevc; 549 RK_U32 dspr_addr_hevc; 550 RK_U32 meiw_addr_hevc; 551 RK_U32 bsbt_addr_hevc; 552 RK_U32 bsbb_addr_hevc; 553 RK_U32 bsbr_addr_hevc; 554 RK_U32 bsbw_addr_hevc; /* 0x158 */ 555 556 /* 0x15c - swreg41, SLI_SPL */ 557 struct { 558 RK_U32 sli_splt : 1; 559 RK_U32 sli_splt_mode : 1; 560 RK_U32 sli_splt_cpst : 1; 561 RK_U32 sli_max_num_m1 : 10; 562 RK_U32 sli_flsh : 1; 563 RK_U32 reserve : 2; 564 RK_U32 sli_splt_cnum_m1 : 16; 565 } sli_spl; 566 567 /* 0x160 - swreg42, SLI_SPL_BYTE */ 568 struct { 569 RK_U32 sli_splt_byte : 18; 570 RK_U32 reserve : 14; 571 } sli_spl_byte; 572 573 /* 0x164 - swreg43, ME_RNGE */ 574 struct { 575 RK_U32 cime_srch_h : 4; 576 RK_U32 cime_srch_v : 4; 577 RK_U32 rime_srch_h : 3; 578 RK_U32 rime_srch_v : 3; 579 RK_U32 reserved : 2; 580 RK_U32 dlt_frm_num : 16; 581 } me_rnge; 582 583 /* 0x168 - swreg44, ME_CNST */ 584 struct { 585 RK_U32 pmv_mdst_h : 8; 586 RK_U32 pmv_mdst_v : 8; 587 RK_U32 mv_limit : 2; 588 RK_U32 mv_num : 2; 589 RK_U32 colmv_store : 1; 590 RK_U32 colmv_load : 1; 591 RK_U32 rime_dis_en : 5; /* used for rtl debug */ 592 RK_U32 fme_dis_en : 5; /* used for rtl debug */ 593 } me_cnst; 594 595 /* 0x16c - ME_RAM */ 596 struct { 597 RK_U32 cime_rama_max : 11; 598 RK_U32 cime_rama_h : 5; 599 RK_U32 cach_l2_tag : 2; 600 RK_U32 cime_linebuf_w: 8; /*only used for 540*/ 601 RK_U32 reserved : 6; 602 } me_ram; 603 604 /*0x170 - SYNT_REF_MARK4*/ 605 struct { 606 RK_U32 poc_lsb_lt1 : 16; 607 RK_U32 poc_lsb_lt2 : 16; 608 } synt_ref_mark4; 609 610 /*0x174 SYNT_REF_MARK5*/ 611 struct { 612 RK_U32 dlt_poc_msb_cycl1 : 16; 613 RK_U32 dlt_poc_msb_cycl2 : 16; 614 } synt_ref_mark5; 615 616 struct { 617 RK_U32 osd_ch_inv_en : 8; 618 RK_U32 osd_itype : 8; 619 RK_U32 osd_lu_inv_msk : 8; 620 RK_U32 osd_ch_inv_msk : 8; 621 } osd_inv_cfg; 622 RK_U32 lpfw_addr_hevc; 623 RK_U32 lpfr_addr_hevc; 624 RK_U32 reserved_0x184_0x190[4]; 625 626 /* 0x194 - REG_THD, reserved */ 627 RK_U32 reg_thd; 628 629 /* 0x198 - swreg56, RDO_CFG */ 630 struct { 631 RK_U32 ltm_col : 1; 632 RK_U32 ltm_idx0l0 : 1; 633 RK_U32 chrm_special : 1; 634 RK_U32 rdoq_en : 1; /* may be used in the future */ 635 RK_U32 reserved0 : 2; 636 RK_U32 cu_inter_en : 4; 637 RK_U32 reserved1 : 9; 638 RK_U32 cu_intra_en : 4; 639 RK_U32 chrm_klut_en : 1; 640 RK_U32 seq_scaling_matrix_present_flg : 2; 641 RK_U32 reserved2 : 5; 642 RK_U32 stad_byps_flg : 1; /*only for 540*/ 643 } rdo_cfg; 644 645 /* 0x19c - swreg57, SYNT_NAL */ 646 struct { 647 RK_U32 nal_unit_type : 6; 648 RK_U32 reserve : 26; 649 } synt_nal; 650 651 /* 0x1a0 - swreg58, SYNT_SPS */ 652 struct { 653 RK_U32 smpl_adpt_ofst_en : 1; 654 RK_U32 num_st_ref_pic : 7; 655 RK_U32 lt_ref_pic_prsnt : 1; 656 RK_U32 num_lt_ref_pic : 6; 657 RK_U32 tmpl_mvp_en : 1; 658 RK_U32 log2_max_poc_lsb : 4; 659 RK_U32 strg_intra_smth : 1; 660 RK_U32 reserved : 11; 661 } synt_sps; 662 663 /* 0x1a4 - swreg59, SYNT_PPS */ 664 struct { 665 RK_U32 dpdnt_sli_seg_en : 1; 666 RK_U32 out_flg_prsnt_flg : 1; 667 RK_U32 num_extr_sli_hdr : 3; 668 RK_U32 sgn_dat_hid_en : 1; 669 RK_U32 cbc_init_prsnt_flg : 1; 670 RK_U32 pic_init_qp : 6; 671 RK_U32 cu_qp_dlt_en : 1; 672 RK_U32 chrm_qp_ofst_prsn : 1; 673 RK_U32 lp_fltr_acrs_sli : 1; 674 RK_U32 dblk_fltr_ovrd_en : 1; 675 RK_U32 lst_mdfy_prsnt_flg : 1; 676 RK_U32 sli_seg_hdr_extn : 1; 677 RK_U32 cu_qp_dlt_depth : 2; 678 RK_U32 lpf_fltr_acrs_til : 1; /*only for 540*/ 679 RK_U32 reserved : 10; 680 } synt_pps; 681 682 /* 0x1a8 - swreg60, SYNT_SLI0 */ 683 struct { 684 RK_U32 cbc_init_flg : 1; 685 RK_U32 mvd_l1_zero_flg : 1; 686 RK_U32 merge_up_flag : 1; 687 RK_U32 merge_left_flag : 1; 688 RK_U32 reserved : 1; 689 RK_U32 ref_pic_lst_mdf_l0 : 1; 690 RK_U32 num_refidx_l1_act : 2; 691 RK_U32 num_refidx_l0_act : 2; 692 RK_U32 num_refidx_act_ovrd : 1; 693 RK_U32 sli_sao_chrm_flg : 1; 694 RK_U32 sli_sao_luma_flg : 1; 695 RK_U32 sli_tmprl_mvp_en : 1; 696 RK_U32 pic_out_flg : 1; 697 RK_U32 sli_type : 2; 698 RK_U32 sli_rsrv_flg : 7; 699 RK_U32 dpdnt_sli_seg_flg : 1; 700 RK_U32 sli_pps_id : 6; 701 RK_U32 no_out_pri_pic : 1; 702 } synt_sli0; 703 704 /* 0x1ac - swreg61, SYNT_SLI1 */ 705 struct { 706 RK_S32 sli_tc_ofst_div2 : 4; 707 RK_S32 sli_beta_ofst_div2 : 4; 708 RK_U32 sli_lp_fltr_acrs_sli : 1; 709 RK_U32 sli_dblk_fltr_dis : 1; 710 RK_U32 dblk_fltr_ovrd_flg : 1; 711 RK_S32 sli_cb_qp_ofst : 5; 712 RK_U32 sli_qp : 6; 713 RK_U32 max_mrg_cnd : 3; 714 RK_U32 col_ref_idx : 1; 715 RK_U32 col_frm_l0_flg : 1; 716 RK_U32 lst_entry_l0 : 4; 717 RK_U32 reserved : 1; 718 } synt_sli1; 719 720 /* 0x1b0 - swreg62, SYNT_SLI2_RODR */ 721 struct { 722 RK_U32 sli_poc_lsb : 16; 723 RK_U32 sli_hdr_ext_len : 9; 724 RK_U32 reserve : 7; 725 } synt_sli2_rodr; 726 727 /* 0x1b4 - swreg63, SYNT_REF_MARK0 */ 728 struct { 729 RK_U32 st_ref_pic_flg : 1; 730 RK_U32 poc_lsb_lt0 : 16; 731 RK_U32 lt_idx_sps : 5; 732 RK_U32 num_lt_pic : 2; 733 RK_U32 st_ref_pic_idx : 6; 734 RK_U32 num_lt_sps : 2; 735 } synt_ref_mark0; 736 737 /* 0x1b8 - swreg64, SYNT_REF_MARK1 */ 738 struct { 739 RK_U32 used_by_s0_flg : 4; 740 RK_U32 num_pos_pic : 1; 741 RK_U32 num_neg_pic : 5; 742 RK_U32 dlt_poc_msb_cycl0 : 16; 743 RK_U32 dlt_poc_msb_prsnt0 : 1; 744 RK_U32 dlt_poc_msb_prsnt1 : 1; 745 RK_U32 dlt_poc_msb_prsnt2 : 1; 746 RK_U32 used_by_lt_flg0 : 1; 747 RK_U32 used_by_lt_flg1 : 1; 748 RK_U32 used_by_lt_flg2 : 1; 749 } synt_ref_mark1; 750 751 RK_U32 reserved_0x1bc; /* not used for a long time */ 752 753 /* 0x1c0 - OSD_CFG */ 754 struct { 755 RK_U32 osd_en : 8; 756 RK_U32 osd_inv : 8; 757 RK_U32 osd_clk_sel : 1; 758 RK_U32 osd_plt_type : 1; 759 RK_U32 reserved : 14; 760 } osd_cfg; 761 762 /* 0x1c4 - OSD_INV */ 763 struct { 764 RK_U32 osd_inv_r0 : 4; 765 RK_U32 osd_inv_r1 : 4; 766 RK_U32 osd_inv_r2 : 4; 767 RK_U32 osd_inv_r3 : 4; 768 RK_U32 osd_inv_r4 : 4; 769 RK_U32 osd_inv_r5 : 4; 770 RK_U32 osd_inv_r6 : 4; 771 RK_U32 osd_inv_r7 : 4; 772 } osd_inv; 773 774 /* 0x1c8 - SYNT_REF_MARK2 */ 775 struct { 776 RK_U32 dlt_poc_s0_m10 : 16; 777 RK_U32 dlt_poc_s0_m11 : 16; 778 } synt_ref_mark2; 779 780 /* 0x1cc - SYNT_REF_MARK3 */ 781 struct { 782 RK_U32 dlt_poc_s0_m12 : 16; 783 RK_U32 dlt_poc_s0_m13 : 16; 784 } synt_ref_mark3; 785 786 /* 0x1d0-0x1ec - OSD_POS0-OSD_POS7 */ 787 OsdPos osd_pos[8]; 788 789 /* 0x1f0-0x20c - OSD_ADDR0-OSD_ADDR7 */ 790 RK_U32 osd_addr[8]; 791 792 /* 0x210 - ST_BSL */ 793 struct { 794 RK_U32 bs_lgth : 32; 795 } st_bsl; 796 797 /* 0x214 - ST_SSE_L32 */ 798 struct { 799 RK_U32 sse_l32 : 32; 800 } st_sse_l32; 801 802 /* 0x218 - ST_SSE_QP */ 803 struct { 804 RK_U32 qp_sum : 24; /* sum of valid CU8x8s' QP */ 805 RK_U32 sse_h8 : 8; 806 } st_sse_qp; 807 808 /* 0x21c - ST_SAO */ 809 struct { 810 RK_U32 slice_scnum : 12; 811 RK_U32 slice_slnum : 12; 812 RK_U32 reserve : 8; 813 } st_sao; 814 815 /* 0x220 - MMU0_STA, used by hardware?? */ 816 RK_U32 mmu0_sta; 817 RK_U32 mmu1_sta; 818 819 /* 0x228 - ST_ENC */ 820 struct { 821 RK_U32 st_enc : 2; 822 RK_U32 axiw_cln : 2; 823 RK_U32 axir_cln : 2; 824 RK_U32 reserve : 26; 825 } st_enc; 826 827 /* 0x22c - ST_LKT */ 828 struct { 829 RK_U32 fnum_enc : 8; 830 RK_U32 fnum_cfg : 8; 831 RK_U32 fnum_int : 8; 832 RK_U32 reserve : 8; 833 } st_lkt; 834 835 /* 0x230 - ST_NOD */ 836 struct { 837 RK_U32 node_addr : 32; 838 } st_nod; 839 840 /* 0x234 - ST_BSB */ 841 struct { 842 RK_U32 Bsbw_ovfl : 1; 843 RK_U32 reserve : 2; 844 RK_U32 bsbw_addr : 29; 845 } st_bsb; 846 847 /* 0x238 - ST_DTRNS */ 848 struct { 849 RK_U32 axib_idl : 7; 850 RK_U32 axib_ful : 7; 851 RK_U32 axib_err : 7; 852 RK_U32 axir_err : 6; 853 RK_U32 reserve : 5; 854 } st_dtrns; 855 856 /* 0x23c - ST_SNUM */ 857 struct { 858 RK_U32 slice_num : 6; 859 RK_U32 reserve : 26; 860 } st_snum; 861 862 /* 0x240 - ST_SLEN */ 863 struct { 864 RK_U32 slice_len : 23; 865 RK_U32 reserve : 9; 866 } st_slen; 867 868 /* 0x244-0x340 - debug registers 869 * ST_LVL64_INTER_NUM etc. 870 */ 871 RK_U32 st_lvl64_inter_num; 872 RK_U32 st_lvl32_inter_num; 873 RK_U32 st_lvl16_inter_num; 874 RK_U32 st_lvl8_inter_num; 875 RK_U32 st_lvl32_intra_num; 876 RK_U32 st_lvl16_intra_num; 877 RK_U32 st_lvl8_intra_num; 878 RK_U32 st_lvl4_intra_num; 879 RK_U32 st_cu_num_qp[52]; 880 RK_U32 st_madp; 881 RK_U32 st_ctu_num; /* used for MADP calculation */ 882 RK_U32 st_madi; 883 RK_U32 st_mb_num; /* used for MADI calculation */ 884 885 } H265eV541RegSet; 886 887 typedef struct H265eV541IoctlExtraInfoElem_t { 888 RK_U32 reg_idx; 889 RK_U32 offset; 890 } H265eV541IoctlExtraInfoElem; 891 892 typedef struct H265eV541IoctlExtraInfo_t { 893 RK_U32 magic; 894 RK_U32 cnt; 895 H265eV541IoctlExtraInfoElem elem[20]; 896 } H265eV541IoctlExtraInfo; 897 898 typedef struct H265eV541IoctlOutputElem_t { 899 RK_U32 hw_status; 900 901 struct { 902 RK_U32 bs_lgth : 32; 903 } st_bsl; 904 905 /* 0x214 - ST_SSE_L32 */ 906 struct { 907 RK_U32 sse_l32 : 32; 908 } st_sse_l32; 909 910 /* 0x218 - ST_SSE_QP */ 911 struct { 912 RK_U32 qp_sum : 24; /* sum of valid CU8x8s' QP */ 913 RK_U32 sse_h8 : 8; 914 } st_sse_qp; 915 916 /* 0x21c - ST_SAO */ 917 struct { 918 RK_U32 slice_scnum : 12; 919 RK_U32 slice_slnum : 12; 920 RK_U32 reserve : 8; 921 } st_sao; 922 923 /* 0x220 - MMU0_STA, used by hardware?? */ 924 RK_U32 mmu0_sta; 925 RK_U32 mmu1_sta; 926 927 /* 0x228 - ST_ENC */ 928 struct { 929 RK_U32 st_enc : 2; 930 RK_U32 axiw_cln : 2; 931 RK_U32 axir_cln : 2; 932 RK_U32 reserve : 26; 933 } st_enc; 934 935 /* 0x22c - ST_LKT */ 936 struct { 937 RK_U32 fnum_enc : 8; 938 RK_U32 fnum_cfg : 8; 939 RK_U32 fnum_int : 8; 940 RK_U32 reserve : 8; 941 } st_lkt; 942 943 /* 0x230 - ST_NOD */ 944 struct { 945 RK_U32 node_addr : 32; 946 } st_nod; 947 948 /* 0x234 - ST_BSB */ 949 struct { 950 RK_U32 Bsbw_ovfl : 1; 951 RK_U32 reserve : 2; 952 RK_U32 bsbw_addr : 29; 953 } st_bsb; 954 955 /* 0x238 - ST_DTRNS */ 956 struct { 957 RK_U32 axib_idl : 7; 958 RK_U32 axib_ful : 7; 959 RK_U32 axib_err : 7; 960 RK_U32 axir_err : 6; 961 RK_U32 reserve : 5; 962 } st_dtrns; 963 964 /* 0x23c - ST_SNUM */ 965 struct { 966 RK_U32 slice_num : 6; 967 RK_U32 reserve : 26; 968 } st_snum; 969 970 /* 0x240 - ST_SLEN */ 971 struct { 972 RK_U32 slice_len : 23; 973 RK_U32 reserve : 9; 974 } st_slen; 975 RK_U32 st_lvl64_inter_num; 976 RK_U32 st_lvl32_inter_num; 977 RK_U32 st_lvl16_inter_num; 978 RK_U32 st_lvl8_inter_num; 979 RK_U32 st_lvl32_intra_num; 980 RK_U32 st_lvl16_intra_num; 981 RK_U32 st_lvl8_intra_num; 982 RK_U32 st_lvl4_intra_num; 983 RK_U32 st_cu_num_qp[52]; 984 RK_U32 st_madp; 985 RK_U32 st_ctu_num; /* used for MADP calculation */ 986 RK_U32 st_madi; 987 RK_U32 st_mb_num; /* used for MADI calculation */ 988 } H265eV541IoctlOutputElem; 989 990 #endif 991