From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 03:04:41 +0000
Subject: [PATCH] rk3568 rt init

---
 kernel/drivers/gpu/drm/rockchip/rockchip_drm_vop.h |  145 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 140 insertions(+), 5 deletions(-)

diff --git a/kernel/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/kernel/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
index ae92b87..a0677dd 100644
--- a/kernel/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
+++ b/kernel/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
@@ -24,6 +24,7 @@
 #define VOP_MAJOR(version)		((version) >> 8)
 #define VOP_MINOR(version)		((version) & 0xff)
 
+#define VOP_VERSION_RK3528	VOP_VERSION(0x50, 0x17)
 #define VOP_VERSION_RK3568	VOP_VERSION(0x40, 0x15)
 #define VOP_VERSION_RK3588	VOP_VERSION(0x40, 0x17)
 
@@ -42,6 +43,9 @@
 /* a feature to splice two windows and two vps to support resolution > 4096 */
 #define VOP_FEATURE_SPLICE		BIT(5)
 #define VOP_FEATURE_OVERSCAN		BIT(6)
+#define VOP_FEATURE_VIVID_HDR		BIT(7)
+#define VOP_FEATURE_POST_ACM		BIT(8)
+#define VOP_FEATURE_POST_CSC		BIT(9)
 
 #define WIN_FEATURE_HDR2SDR		BIT(0)
 #define WIN_FEATURE_SDR2HDR		BIT(1)
@@ -92,10 +96,10 @@
 };
 
 enum vop3_esmart_lb_mode {
-	VOP3_ESMART_ONE_8K_MODE,
-	VOP3_ESMART_TWO_4K_MODE,
-	VOP3_ESMART_ONE_4K_AND_TWO_2K_MODE,
-	VOP3_ESMART_FOUR_2K_MODE,
+	VOP3_ESMART_8K_MODE,
+	VOP3_ESMART_4K_4K_MODE,
+	VOP3_ESMART_4K_2K_2K_MODE,
+	VOP3_ESMART_2K_2K_2K_2K_MODE,
 };
 
 #define DSP_BG_SWAP		0x1
@@ -439,6 +443,104 @@
 	const uint32_t *sdr2hdr_st2084oetf_xn;
 };
 
+#define RK_HDRVIVID_TONE_SCA_TAB_LENGTH		257
+#define RK_HDRVIVID_GAMMA_CURVE_LENGTH		81
+#define RK_HDRVIVID_GAMMA_MDFVALUE_LENGTH	9
+#define RK_SDR2HDR_INVGAMMA_CURVE_LENGTH	69
+#define RK_SDR2HDR_INVGAMMA_S_IDX_LENGTH	6
+#define RK_SDR2HDR_INVGAMMA_C_IDX_LENGTH	6
+#define RK_SDR2HDR_SMGAIN_LENGTH		64
+#define RK_HDRVIVID_TONE_SCA_AXI_TAB_LENGTH	264
+
+struct hdrvivid_regs {
+	uint32_t sdr2hdr_ctrl;
+	uint32_t sdr2hdr_coe0;
+	uint32_t sdr2hdr_coe1;
+	uint32_t sdr2hdr_csc_coe00_01;
+	uint32_t sdr2hdr_csc_coe02_10;
+	uint32_t sdr2hdr_csc_coe11_12;
+	uint32_t sdr2hdr_csc_coe20_21;
+	uint32_t sdr2hdr_csc_coe22;
+	uint32_t hdrvivid_ctrl;
+	uint32_t hdr_pq_gamma;
+	uint32_t hlg_rfix_scalefac;
+	uint32_t hlg_maxluma;
+	uint32_t hlg_r_tm_lin2non;
+	uint32_t hdr_csc_coe00_01;
+	uint32_t hdr_csc_coe02_10;
+	uint32_t hdr_csc_coe11_12;
+	uint32_t hdr_csc_coe20_21;
+	uint32_t hdr_csc_coe22;
+	uint32_t hdr_tone_sca[RK_HDRVIVID_TONE_SCA_TAB_LENGTH];
+	uint32_t hdrgamma_curve[RK_HDRVIVID_GAMMA_CURVE_LENGTH];
+	uint32_t hdrgamma_mdfvalue[RK_HDRVIVID_GAMMA_MDFVALUE_LENGTH];
+	uint32_t sdrinvgamma_curve[RK_SDR2HDR_INVGAMMA_CURVE_LENGTH];
+	uint32_t sdrinvgamma_startidx[RK_SDR2HDR_INVGAMMA_S_IDX_LENGTH];
+	uint32_t sdrinvgamma_changeidx[RK_SDR2HDR_INVGAMMA_C_IDX_LENGTH];
+	uint32_t sdr_smgain[RK_SDR2HDR_SMGAIN_LENGTH];
+	uint32_t hdr_mode;
+	uint32_t tone_sca_axi_tab[RK_HDRVIVID_TONE_SCA_AXI_TAB_LENGTH];
+};
+
+struct hdr_extend {
+	uint32_t hdr_type;
+	uint32_t length;
+	union {
+		struct hdrvivid_regs hdrvivid_data;
+	};
+};
+
+enum _vop_hdrvivid_mode {
+	PQHDR2HDR_WITH_DYNAMIC = 0,
+	PQHDR2SDR_WITH_DYNAMIC,
+	HLG2PQHDR_WITH_DYNAMIC,
+	HLG2SDR_WITH_DYNAMIC,
+	HLG2PQHDR_WITHOUT_DYNAMIC,
+	HLG2SDR_WITHOUT_DYNAMIC,
+	HDR_BYPASS,
+	HDR102SDR,
+	SDR2HDR10,
+	SDR2HLG,
+	SDR2HDR10_USERSPACE = 100,
+	SDR2HLG_USERSPACE = 101,
+};
+
+enum vop_hdr_format {
+	HDR_NONE = 0,
+	HDR_HDR10 = 1,
+	HDR_HLGSTATIC = 2,
+	RESERVED3 = 3,		/* reserved for more future static hdr format */
+	RESERVED4 = 4,		/* reserved for more future static hdr format */
+	HDR_HDRVIVID = 5,
+	RESERVED6 = 6,		/* reserved for hdr vivid */
+	RESERVED7 = 7,		/* reserved for hdr vivid */
+	HDR_HDR10PLUS = 8,
+	RESERVED9 = 9,		/* reserved for hdr hdr10+ */
+	RESERVED10 = 10,	/* reserved for hdr hdr10+ */
+	HDR_NEXT = 11,
+	RESERVED12 = 12,	/* reserved for other dynamic hdr format */
+	RESERVED13 = 13,	/* reserved for other dynamic hdr format */
+	HDR_FORMAT_MAX,
+};
+
+struct post_csc_coef {
+	s32 csc_coef00;
+	s32 csc_coef01;
+	s32 csc_coef02;
+	s32 csc_coef10;
+	s32 csc_coef11;
+	s32 csc_coef12;
+	s32 csc_coef20;
+	s32 csc_coef21;
+	s32 csc_coef22;
+
+	s32 csc_dc0;
+	s32 csc_dc1;
+	s32 csc_dc2;
+
+	u32 range_type;
+};
+
 enum {
 	VOP_CSC_Y2R_BT601,
 	VOP_CSC_Y2R_BT709,
@@ -509,6 +611,8 @@
 	struct vop_reg enable;
 	struct vop_reg afbc_enable;
 	struct vop_reg lb_mode;
+	struct vop_reg scl_lb_mode;
+	struct vop_reg frm_reset_en;
 
 	struct vop_reg src_color_ctrl;
 	struct vop_reg dst_color_ctrl;
@@ -626,6 +730,13 @@
 	struct vop_reg hdr_lut_update_en;
 	struct vop_reg hdr_lut_mode;
 	struct vop_reg hdr_lut_mst;
+	struct vop_reg hdr_lut_fetch_done;
+	struct vop_reg hdr_vivid_en;
+	struct vop_reg hdr_vivid_bypass_en;
+	struct vop_reg hdr_vivid_path_mode;
+	struct vop_reg hdr_vivid_dstgamut;
+	struct vop_reg sdr2hdr_en;
+	struct vop_reg sdr2hdr_dstmode;
 	struct vop_reg sdr2hdr_eotf_en;
 	struct vop_reg sdr2hdr_r2r_en;
 	struct vop_reg sdr2hdr_r2r_mode;
@@ -677,6 +788,25 @@
 	struct vop_reg edpi_wms_fs;
 	struct vop_reg gamma_update_en;
 	struct vop_reg lut_dma_rid;
+
+	/* CSC */
+	struct vop_reg acm_bypass_en;
+	struct vop_reg csc_en;
+	struct vop_reg acm_r2y_en;
+	struct vop_reg csc_mode;
+	struct vop_reg acm_r2y_mode;
+	struct vop_reg csc_coe00;
+	struct vop_reg csc_coe01;
+	struct vop_reg csc_coe02;
+	struct vop_reg csc_coe10;
+	struct vop_reg csc_coe11;
+	struct vop_reg csc_coe12;
+	struct vop_reg csc_coe20;
+	struct vop_reg csc_coe21;
+	struct vop_reg csc_coe22;
+	struct vop_reg csc_offset0;
+	struct vop_reg csc_offset1;
+	struct vop_reg csc_offset2;
 };
 
 struct vop2_wb_regs {
@@ -711,7 +841,6 @@
 	uint8_t axi_id;
 	uint8_t axi_yrgb_id;
 	uint8_t axi_uv_id;
-	uint8_t scale_engine_num;
 	uint8_t possible_crtcs;
 
 	uint32_t base;
@@ -775,6 +904,11 @@
 	uint16_t cubic_lut_len;
 	struct vop_rect max_output;
 	const u8 pre_scan_max_dly[4];
+	const u8 hdrvivid_dly[10];
+	const u8 sdr2hdr_dly;
+	const u8 layer_mix_dly;
+	const u8 hdr_mix_dly;
+	const u8 win_dly;
 	const struct vop_intr *intr;
 	const struct vop_hdr_table *hdr_table;
 	const struct vop2_video_port_regs *regs;
@@ -849,6 +983,7 @@
 	struct vop_reg version;
 	struct vop_reg standby;
 	struct vop_reg dma_stop;
+	struct vop_reg dsp_vs_t_sel;
 	struct vop_reg lut_dma_en;
 	struct vop_reg axi_outstanding_max_num;
 	struct vop_reg axi_max_outstanding_en;

--
Gitblit v1.6.2