| .. | .. |
|---|
| 24 | 24 | #define VOP_MAJOR(version) ((version) >> 8) |
|---|
| 25 | 25 | #define VOP_MINOR(version) ((version) & 0xff) |
|---|
| 26 | 26 | |
|---|
| 27 | +#define VOP_VERSION_RK3528 VOP_VERSION(0x50, 0x17) |
|---|
| 27 | 28 | #define VOP_VERSION_RK3568 VOP_VERSION(0x40, 0x15) |
|---|
| 28 | 29 | #define VOP_VERSION_RK3588 VOP_VERSION(0x40, 0x17) |
|---|
| 29 | 30 | |
|---|
| .. | .. |
|---|
| 42 | 43 | /* a feature to splice two windows and two vps to support resolution > 4096 */ |
|---|
| 43 | 44 | #define VOP_FEATURE_SPLICE BIT(5) |
|---|
| 44 | 45 | #define VOP_FEATURE_OVERSCAN BIT(6) |
|---|
| 46 | +#define VOP_FEATURE_VIVID_HDR BIT(7) |
|---|
| 47 | +#define VOP_FEATURE_POST_ACM BIT(8) |
|---|
| 48 | +#define VOP_FEATURE_POST_CSC BIT(9) |
|---|
| 45 | 49 | |
|---|
| 46 | 50 | #define WIN_FEATURE_HDR2SDR BIT(0) |
|---|
| 47 | 51 | #define WIN_FEATURE_SDR2HDR BIT(1) |
|---|
| .. | .. |
|---|
| 92 | 96 | }; |
|---|
| 93 | 97 | |
|---|
| 94 | 98 | enum vop3_esmart_lb_mode { |
|---|
| 95 | | - VOP3_ESMART_ONE_8K_MODE, |
|---|
| 96 | | - VOP3_ESMART_TWO_4K_MODE, |
|---|
| 97 | | - VOP3_ESMART_ONE_4K_AND_TWO_2K_MODE, |
|---|
| 98 | | - VOP3_ESMART_FOUR_2K_MODE, |
|---|
| 99 | + VOP3_ESMART_8K_MODE, |
|---|
| 100 | + VOP3_ESMART_4K_4K_MODE, |
|---|
| 101 | + VOP3_ESMART_4K_2K_2K_MODE, |
|---|
| 102 | + VOP3_ESMART_2K_2K_2K_2K_MODE, |
|---|
| 99 | 103 | }; |
|---|
| 100 | 104 | |
|---|
| 101 | 105 | #define DSP_BG_SWAP 0x1 |
|---|
| .. | .. |
|---|
| 439 | 443 | const uint32_t *sdr2hdr_st2084oetf_xn; |
|---|
| 440 | 444 | }; |
|---|
| 441 | 445 | |
|---|
| 446 | +#define RK_HDRVIVID_TONE_SCA_TAB_LENGTH 257 |
|---|
| 447 | +#define RK_HDRVIVID_GAMMA_CURVE_LENGTH 81 |
|---|
| 448 | +#define RK_HDRVIVID_GAMMA_MDFVALUE_LENGTH 9 |
|---|
| 449 | +#define RK_SDR2HDR_INVGAMMA_CURVE_LENGTH 69 |
|---|
| 450 | +#define RK_SDR2HDR_INVGAMMA_S_IDX_LENGTH 6 |
|---|
| 451 | +#define RK_SDR2HDR_INVGAMMA_C_IDX_LENGTH 6 |
|---|
| 452 | +#define RK_SDR2HDR_SMGAIN_LENGTH 64 |
|---|
| 453 | +#define RK_HDRVIVID_TONE_SCA_AXI_TAB_LENGTH 264 |
|---|
| 454 | + |
|---|
| 455 | +struct hdrvivid_regs { |
|---|
| 456 | + uint32_t sdr2hdr_ctrl; |
|---|
| 457 | + uint32_t sdr2hdr_coe0; |
|---|
| 458 | + uint32_t sdr2hdr_coe1; |
|---|
| 459 | + uint32_t sdr2hdr_csc_coe00_01; |
|---|
| 460 | + uint32_t sdr2hdr_csc_coe02_10; |
|---|
| 461 | + uint32_t sdr2hdr_csc_coe11_12; |
|---|
| 462 | + uint32_t sdr2hdr_csc_coe20_21; |
|---|
| 463 | + uint32_t sdr2hdr_csc_coe22; |
|---|
| 464 | + uint32_t hdrvivid_ctrl; |
|---|
| 465 | + uint32_t hdr_pq_gamma; |
|---|
| 466 | + uint32_t hlg_rfix_scalefac; |
|---|
| 467 | + uint32_t hlg_maxluma; |
|---|
| 468 | + uint32_t hlg_r_tm_lin2non; |
|---|
| 469 | + uint32_t hdr_csc_coe00_01; |
|---|
| 470 | + uint32_t hdr_csc_coe02_10; |
|---|
| 471 | + uint32_t hdr_csc_coe11_12; |
|---|
| 472 | + uint32_t hdr_csc_coe20_21; |
|---|
| 473 | + uint32_t hdr_csc_coe22; |
|---|
| 474 | + uint32_t hdr_tone_sca[RK_HDRVIVID_TONE_SCA_TAB_LENGTH]; |
|---|
| 475 | + uint32_t hdrgamma_curve[RK_HDRVIVID_GAMMA_CURVE_LENGTH]; |
|---|
| 476 | + uint32_t hdrgamma_mdfvalue[RK_HDRVIVID_GAMMA_MDFVALUE_LENGTH]; |
|---|
| 477 | + uint32_t sdrinvgamma_curve[RK_SDR2HDR_INVGAMMA_CURVE_LENGTH]; |
|---|
| 478 | + uint32_t sdrinvgamma_startidx[RK_SDR2HDR_INVGAMMA_S_IDX_LENGTH]; |
|---|
| 479 | + uint32_t sdrinvgamma_changeidx[RK_SDR2HDR_INVGAMMA_C_IDX_LENGTH]; |
|---|
| 480 | + uint32_t sdr_smgain[RK_SDR2HDR_SMGAIN_LENGTH]; |
|---|
| 481 | + uint32_t hdr_mode; |
|---|
| 482 | + uint32_t tone_sca_axi_tab[RK_HDRVIVID_TONE_SCA_AXI_TAB_LENGTH]; |
|---|
| 483 | +}; |
|---|
| 484 | + |
|---|
| 485 | +struct hdr_extend { |
|---|
| 486 | + uint32_t hdr_type; |
|---|
| 487 | + uint32_t length; |
|---|
| 488 | + union { |
|---|
| 489 | + struct hdrvivid_regs hdrvivid_data; |
|---|
| 490 | + }; |
|---|
| 491 | +}; |
|---|
| 492 | + |
|---|
| 493 | +enum _vop_hdrvivid_mode { |
|---|
| 494 | + PQHDR2HDR_WITH_DYNAMIC = 0, |
|---|
| 495 | + PQHDR2SDR_WITH_DYNAMIC, |
|---|
| 496 | + HLG2PQHDR_WITH_DYNAMIC, |
|---|
| 497 | + HLG2SDR_WITH_DYNAMIC, |
|---|
| 498 | + HLG2PQHDR_WITHOUT_DYNAMIC, |
|---|
| 499 | + HLG2SDR_WITHOUT_DYNAMIC, |
|---|
| 500 | + HDR_BYPASS, |
|---|
| 501 | + HDR102SDR, |
|---|
| 502 | + SDR2HDR10, |
|---|
| 503 | + SDR2HLG, |
|---|
| 504 | + SDR2HDR10_USERSPACE = 100, |
|---|
| 505 | + SDR2HLG_USERSPACE = 101, |
|---|
| 506 | +}; |
|---|
| 507 | + |
|---|
| 508 | +enum vop_hdr_format { |
|---|
| 509 | + HDR_NONE = 0, |
|---|
| 510 | + HDR_HDR10 = 1, |
|---|
| 511 | + HDR_HLGSTATIC = 2, |
|---|
| 512 | + RESERVED3 = 3, /* reserved for more future static hdr format */ |
|---|
| 513 | + RESERVED4 = 4, /* reserved for more future static hdr format */ |
|---|
| 514 | + HDR_HDRVIVID = 5, |
|---|
| 515 | + RESERVED6 = 6, /* reserved for hdr vivid */ |
|---|
| 516 | + RESERVED7 = 7, /* reserved for hdr vivid */ |
|---|
| 517 | + HDR_HDR10PLUS = 8, |
|---|
| 518 | + RESERVED9 = 9, /* reserved for hdr hdr10+ */ |
|---|
| 519 | + RESERVED10 = 10, /* reserved for hdr hdr10+ */ |
|---|
| 520 | + HDR_NEXT = 11, |
|---|
| 521 | + RESERVED12 = 12, /* reserved for other dynamic hdr format */ |
|---|
| 522 | + RESERVED13 = 13, /* reserved for other dynamic hdr format */ |
|---|
| 523 | + HDR_FORMAT_MAX, |
|---|
| 524 | +}; |
|---|
| 525 | + |
|---|
| 526 | +struct post_csc_coef { |
|---|
| 527 | + s32 csc_coef00; |
|---|
| 528 | + s32 csc_coef01; |
|---|
| 529 | + s32 csc_coef02; |
|---|
| 530 | + s32 csc_coef10; |
|---|
| 531 | + s32 csc_coef11; |
|---|
| 532 | + s32 csc_coef12; |
|---|
| 533 | + s32 csc_coef20; |
|---|
| 534 | + s32 csc_coef21; |
|---|
| 535 | + s32 csc_coef22; |
|---|
| 536 | + |
|---|
| 537 | + s32 csc_dc0; |
|---|
| 538 | + s32 csc_dc1; |
|---|
| 539 | + s32 csc_dc2; |
|---|
| 540 | + |
|---|
| 541 | + u32 range_type; |
|---|
| 542 | +}; |
|---|
| 543 | + |
|---|
| 442 | 544 | enum { |
|---|
| 443 | 545 | VOP_CSC_Y2R_BT601, |
|---|
| 444 | 546 | VOP_CSC_Y2R_BT709, |
|---|
| .. | .. |
|---|
| 509 | 611 | struct vop_reg enable; |
|---|
| 510 | 612 | struct vop_reg afbc_enable; |
|---|
| 511 | 613 | struct vop_reg lb_mode; |
|---|
| 614 | + struct vop_reg scl_lb_mode; |
|---|
| 615 | + struct vop_reg frm_reset_en; |
|---|
| 512 | 616 | |
|---|
| 513 | 617 | struct vop_reg src_color_ctrl; |
|---|
| 514 | 618 | struct vop_reg dst_color_ctrl; |
|---|
| .. | .. |
|---|
| 626 | 730 | struct vop_reg hdr_lut_update_en; |
|---|
| 627 | 731 | struct vop_reg hdr_lut_mode; |
|---|
| 628 | 732 | struct vop_reg hdr_lut_mst; |
|---|
| 733 | + struct vop_reg hdr_lut_fetch_done; |
|---|
| 734 | + struct vop_reg hdr_vivid_en; |
|---|
| 735 | + struct vop_reg hdr_vivid_bypass_en; |
|---|
| 736 | + struct vop_reg hdr_vivid_path_mode; |
|---|
| 737 | + struct vop_reg hdr_vivid_dstgamut; |
|---|
| 738 | + struct vop_reg sdr2hdr_en; |
|---|
| 739 | + struct vop_reg sdr2hdr_dstmode; |
|---|
| 629 | 740 | struct vop_reg sdr2hdr_eotf_en; |
|---|
| 630 | 741 | struct vop_reg sdr2hdr_r2r_en; |
|---|
| 631 | 742 | struct vop_reg sdr2hdr_r2r_mode; |
|---|
| .. | .. |
|---|
| 677 | 788 | struct vop_reg edpi_wms_fs; |
|---|
| 678 | 789 | struct vop_reg gamma_update_en; |
|---|
| 679 | 790 | struct vop_reg lut_dma_rid; |
|---|
| 791 | + |
|---|
| 792 | + /* CSC */ |
|---|
| 793 | + struct vop_reg acm_bypass_en; |
|---|
| 794 | + struct vop_reg csc_en; |
|---|
| 795 | + struct vop_reg acm_r2y_en; |
|---|
| 796 | + struct vop_reg csc_mode; |
|---|
| 797 | + struct vop_reg acm_r2y_mode; |
|---|
| 798 | + struct vop_reg csc_coe00; |
|---|
| 799 | + struct vop_reg csc_coe01; |
|---|
| 800 | + struct vop_reg csc_coe02; |
|---|
| 801 | + struct vop_reg csc_coe10; |
|---|
| 802 | + struct vop_reg csc_coe11; |
|---|
| 803 | + struct vop_reg csc_coe12; |
|---|
| 804 | + struct vop_reg csc_coe20; |
|---|
| 805 | + struct vop_reg csc_coe21; |
|---|
| 806 | + struct vop_reg csc_coe22; |
|---|
| 807 | + struct vop_reg csc_offset0; |
|---|
| 808 | + struct vop_reg csc_offset1; |
|---|
| 809 | + struct vop_reg csc_offset2; |
|---|
| 680 | 810 | }; |
|---|
| 681 | 811 | |
|---|
| 682 | 812 | struct vop2_wb_regs { |
|---|
| .. | .. |
|---|
| 711 | 841 | uint8_t axi_id; |
|---|
| 712 | 842 | uint8_t axi_yrgb_id; |
|---|
| 713 | 843 | uint8_t axi_uv_id; |
|---|
| 714 | | - uint8_t scale_engine_num; |
|---|
| 715 | 844 | uint8_t possible_crtcs; |
|---|
| 716 | 845 | |
|---|
| 717 | 846 | uint32_t base; |
|---|
| .. | .. |
|---|
| 775 | 904 | uint16_t cubic_lut_len; |
|---|
| 776 | 905 | struct vop_rect max_output; |
|---|
| 777 | 906 | const u8 pre_scan_max_dly[4]; |
|---|
| 907 | + const u8 hdrvivid_dly[10]; |
|---|
| 908 | + const u8 sdr2hdr_dly; |
|---|
| 909 | + const u8 layer_mix_dly; |
|---|
| 910 | + const u8 hdr_mix_dly; |
|---|
| 911 | + const u8 win_dly; |
|---|
| 778 | 912 | const struct vop_intr *intr; |
|---|
| 779 | 913 | const struct vop_hdr_table *hdr_table; |
|---|
| 780 | 914 | const struct vop2_video_port_regs *regs; |
|---|
| .. | .. |
|---|
| 849 | 983 | struct vop_reg version; |
|---|
| 850 | 984 | struct vop_reg standby; |
|---|
| 851 | 985 | struct vop_reg dma_stop; |
|---|
| 986 | + struct vop_reg dsp_vs_t_sel; |
|---|
| 852 | 987 | struct vop_reg lut_dma_en; |
|---|
| 853 | 988 | struct vop_reg axi_outstanding_max_num; |
|---|
| 854 | 989 | struct vop_reg axi_max_outstanding_en; |
|---|