singe/thirdparty/rockchip-mpp/mpp/vproc/vdpp/vdpp3_reg.h
2026-09-10 20:17:28 -05:00

197 lines
6 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
*/
#ifndef VDPP3_REG_H
#define VDPP3_REG_H
#include "vdpp2_reg.h"
#define VDPP3_REG_OFF_DMSR (0x0080)
#define VDPP3_REG_OFF_DCI_HIST (0x00E0)
#define VDPP3_REG_OFF_ES (0x0100)
#define VDPP3_REG_OFF_PYRAMID (0x0190)
#define VDPP3_REG_OFF_BBD (0x01B0)
#define VDPP3_REG_OFF_SHARP (0x0200)
#define VDPP3_REG_OFF_ZME (0x2800)
/* zme: 0x2800 - 0x2844 */
typedef struct vdpp3_zme_reg {
struct {
RK_U32 bypass_en : 1;
RK_U32 align_en : 1;
RK_U32 reserved_1 : 2;
RK_U32 format_in : 4;
RK_U32 format_out : 4;
RK_U32 reserved_2 : 19;
RK_U32 auto_gating_en : 1;
} reg0; /* 0x0800 */
/* reg1 0x0804 - reg2 0x080C */
RK_U32 reg1_3[3];
struct {
RK_U32 yrgb_xsd_en : 1;
RK_U32 yrgb_xsu_en : 1;
RK_U32 yrgb_scl_mode : 2;
RK_U32 yrgb_ysd_en : 1;
RK_U32 yrgb_ysu_en : 1;
RK_U32 yrgb_yscl_mode : 2;
RK_U32 yrgb_dering_en : 1;
RK_U32 yrgb_gt_en : 1;
RK_U32 yrgb_gt_mode : 2;
RK_U32 reserved_1 : 4;
RK_U32 yrgb_xsd_bypass : 1;
RK_U32 yrgb_ys_bypass : 1;
RK_U32 yrgb_xsu_bypass : 1;
RK_U32 reserved_2 : 1;
RK_U32 yrgb_xscl_coe_sel : 4;
RK_U32 yrgb_yscl_coe_sel : 4;
RK_U32 reserved_3 : 4;
} reg4; /* 0x0810 */
/* reg5 0x0814 - reg6 x0818 */
RK_U32 reg5_6[2];
struct {
RK_U32 yrgb_dering_sen0 : 5;
RK_U32 reserved_1 : 3;
RK_U32 yrgb_dering_sen1 : 5;
RK_U32 reserved_2 : 3;
RK_U32 yrgb_dering_alpha: 5;
RK_U32 reserved_3 : 3;
RK_U32 yrgb_dering_delta: 5;
RK_U32 reserved_4 : 3;
} reg7; /* 0x081C */
struct {
RK_U32 yrgb_xscl_factor : 16;
RK_U32 yrgb_xscl_offset : 16;
} reg8; /* 0x0820 */
struct {
RK_U32 yrgb_yscl_factor : 16;
RK_U32 yrgb_yscl_offset : 16;
} reg9; /* 0x0824 */
/* reg10 0x0828 - reg11 0x082C */
RK_U32 reg10_11[2]; /* 0x0828 */
struct {
RK_U32 cbcr_xsd_en : 1;
RK_U32 cbcr_xsu_en : 1;
RK_U32 cbcr_xscl_mode : 2;
RK_U32 cbcr_ysd_en : 1;
RK_U32 cbcr_ysu_en : 1;
RK_U32 cbcr_yscl_mode : 2;
RK_U32 cbcr_dering_en : 1;
RK_U32 cbcr_gt_en : 1;
RK_U32 cbcr_gt_mode : 2;
RK_U32 reserved_1 : 4;
RK_U32 cbcr_xsd_bypass : 1;
RK_U32 cbcr_ys_bypass : 1;
RK_U32 cbcr_xsu_bypass : 1;
RK_U32 reserved_2 : 1;
RK_U32 cbcr_xscl_coe_sel: 4;
RK_U32 cbcr_yscl_coe_sel: 4;
RK_U32 reserved_3 : 4;
} reg12; /* 0x0830 */
/* reg13 0x0834 - reg14 0x0838 */
RK_U32 reg13_14[2];
struct {
RK_U32 cbcr_dering_sen0 : 5;
RK_U32 reserved_1 : 3;
RK_U32 cbcr_dering_sen1 : 5;
RK_U32 reserved_2 : 3;
RK_U32 cbcr_dering_alpha: 5;
RK_U32 reserved_3 : 3;
RK_U32 cbcr_dering_delta: 5;
RK_U32 reserved_4 : 3;
} reg15; /* 0x083C */
struct {
RK_U32 cbcr_xscl_factor : 16;
RK_U32 cbcr_xscl_offset : 16;
} reg16; /* 0x0840 */
struct {
RK_U32 cbcr_yscl_factor : 16;
RK_U32 cbcr_yscl_offset : 16;
} reg17; /* 0x0844 */
} RegZme3;
/* pyramid: 0x1190 - 0x11A8 */
typedef struct vdpp3_pyr_reg {
struct {
RK_U32 sw_pyramid_en : 1;
RK_U32 reserved : 31;
} reg0; // 0x0190
struct {
RK_U32 sw_pyramid_layer1_dst_addr : 32;
} reg1; // 0x0194
struct {
RK_U32 sw_pyramid_layer1_dst_vir_wid : 16;
RK_U32 reserved : 16;
} reg2; // 0x0198
struct {
RK_U32 sw_pyramid_layer2_dst_addr : 32;
} reg3; // 0x019C
struct {
RK_U32 sw_pyramid_layer2_dst_vir_wid : 16;
RK_U32 reserved : 16;
} reg4; // 0x01A0
struct {
RK_U32 sw_pyramid_layer3_dst_addr : 32;
} reg5; // 0x01A4
struct {
RK_U32 sw_pyramid_layer3_dst_vir_wid : 16;
RK_U32 reserved : 16;
} reg6; // 0x01A8
} RegPyr;
/* bbd: 0x11B0 - 0x11B8 */
typedef struct vdpp3_bbd_reg {
struct {
RK_U32 sw_det_en : 1;
RK_U32 reserved1 : 3;
RK_U32 sw_det_blcklmt : 8;
RK_U32 reserved2 : 20;
} reg0; // 0x01B0
struct {
RK_U32 blckbar_size_top : 12;
RK_U32 reserved1 : 4;
RK_U32 blckbar_size_bottom : 12;
RK_U32 reserved2 : 4;
} reg1; // 0x01B4
struct {
RK_U32 blckbar_size_left : 12;
RK_U32 reserved1 : 4;
RK_U32 blckbar_size_right : 12;
RK_U32 reserved2 : 4;
} reg2; // 0x01B8
} RegBbd;
typedef struct vdpp3_reg {
RegCom2 common; /* offset: 0x1000, end: 0x106C, size: 112 */
RegDmsr dmsr; /* offset: 0x1080, end: 0x10D0, size: 84 */
RegHist hist; /* offset: 0x10E0, end: 0x10F0, size: 20 */
RegEs es; /* offset: 0x1100, end: 0x117C, size: 128 */
RegShp sharp; /* offset: 0x1200, end: 0x14a8, size: 684 */
RegPyr pyr; /* offset: 0x0190, end: 0x11A8, size: 28 */
RegBbd bbd; /* offset: 0x01B0, end: 0x11B8, size: 12 */
RegZme3 zme; /* offset: 0x2000, end: 0x2844, size: 1160(valid)/2120(total) */
} Vdpp3Regs;
#endif /* VDPP3_REG_H */