/** @file Vop2 DXE Driver, install RK_CRTC_PROTOCOL. Copyright (c) 2022 Rockchip Electronics Co. Ltd. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __VOP2_H__ #define __VOP2_H__ #include /* * major: IP major vertion, used for IP structure * minor: big feature change under same structure */ #define VOP_VERSION(major, minor) ((major) << 8 | (minor)) #define VOP_MAJOR(version) ((version) >> 8) #define VOP_MINOR(version) ((version) & 0xFF) #define VOP_VERSION_RK3568 VOP_VERSION(0x40, 0x15) #define VOP_VERSION_RK3588 VOP_VERSION(0x40, 0x17) /* * display output interface supported by rockchip lcdc */ #define ROCKCHIP_OUT_MODE_P888 0 #define ROCKCHIP_OUT_MODE_BT1120 0 #define ROCKCHIP_OUT_MODE_P666 1 #define ROCKCHIP_OUT_MODE_P565 2 #define ROCKCHIP_OUT_MODE_BT656 5 #define ROCKCHIP_OUT_MODE_S888 8 #define ROCKCHIP_OUT_MODE_S888_DUMMY 12 #define ROCKCHIP_OUT_MODE_YUV420 14 /* for use special outface */ #define ROCKCHIP_OUT_MODE_AAAA 15 #define VOP_OUTPUT_IF_RGB BIT(0) #define VOP_OUTPUT_IF_BT1120 BIT(1) #define VOP_OUTPUT_IF_BT656 BIT(2) #define VOP_OUTPUT_IF_LVDS0 BIT(3) #define VOP_OUTPUT_IF_LVDS1 BIT(4) #define VOP_OUTPUT_IF_MIPI0 BIT(5) #define VOP_OUTPUT_IF_MIPI1 BIT(6) #define VOP_OUTPUT_IF_eDP0 BIT(7) #define VOP_OUTPUT_IF_eDP1 BIT(8) #define VOP_OUTPUT_IF_DP0 BIT(9) #define VOP_OUTPUT_IF_DP1 BIT(10) #define VOP_OUTPUT_IF_HDMI0 BIT(11) #define VOP_OUTPUT_IF_HDMI1 BIT(12) #define VOP_OUTPUT_IF_NUMS 13 #define VOP2_LAYER_MAX 8 #define VOP_FEATURE_OUTPUT_10BIT BIT(0) typedef enum { CSC_BT601L, CSC_BT709L, CSC_BT601F, CSC_BT2020, } VOP2_CSC_FORMAT; typedef enum { BCSH_OUT_MODE_BLACK, BCSH_OUT_MODE_BLUE, BCSH_OUT_MODE_COLOR_BAR, BCSH_OUT_MODE_NORMAL_VIDEO, } VOP2_BCSH_OUT_MODE; typedef enum { VOP2_VP0, VOP2_VP1, VOP2_VP2, VOP2_VP3, VOP2_VP_MAX, } VOP2_VIDEO_PORTS_ID; typedef enum { ROCKCHIP_VOP2_CLUSTER0 = 0, ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_ESMART0, ROCKCHIP_VOP2_ESMART1, ROCKCHIP_VOP2_SMART0, ROCKCHIP_VOP2_SMART1, ROCKCHIP_VOP2_CLUSTER2, ROCKCHIP_VOP2_CLUSTER3, ROCKCHIP_VOP2_ESMART2, ROCKCHIP_VOP2_ESMART3, ROCKCHIP_VOP2_LAYER_MAX, } VOP2_LAYER_PHY_ID; typedef enum { CLUSTER_LAYER = 0, ESMART_LAYER = 1, SMART_LAYER = 2, } VOP2_LAYER_TYPE; typedef enum { VOP2_SCALE_UP_NRST_NBOR, VOP2_SCALE_UP_BIL, VOP2_SCALE_UP_BIC, } VOP2_SCALE_UP_MODE; typedef enum { VOP2_SCALE_DOWN_NRST_NBOR, VOP2_SCALE_DOWN_BIL, VOP2_SCALE_DOWN_AVG, } VOP2_SCALE_DOWN_MODE; typedef enum { SCALE_NONE = 0x0, SCALE_UP = 0x1, SCALE_DOWN = 0x2, } SCALE_MODE; typedef struct { BOOLEAN IsParentNeeded; CHAR8 PdEnShift; CHAR8 PdStatusShift; CHAR8 PmuStatusShift; CHAR8 BisrEnStatusShift; CHAR8 ParentPhyID; } VOP2_POWER_DOMAIN_DATA; typedef struct { VOP2_LAYER_TYPE Type; CHAR8 *Name; UINT8 PhysID; UINT8 WinSelPortOffset; UINT8 LayerSelWinID; UINT32 RegOffset; VOP2_POWER_DOMAIN_DATA *PdData; } VOP2_WIN_DATA; typedef struct { UINT32 Feature; UINT32 MaxDclk; UINT8 PreScanMaxDly; VOP_RECT MaxOutput; } VOP2_VP_DATA; typedef struct { UINT8 PrimaryPlaneId; /* use this win to show logo */ UINT8 AttachedLayersNr; /* number layers attach to this vp */ UINT8 AttachedLayers[VOP2_LAYER_MAX]; /* the layers attached to this vp */ UINT32 PlaneMask; INT32 CursorPlaneID; } VOP2_VP_PLANE_MASK; typedef struct { UINT32 Version; VOP2_VP_DATA *VpData; VOP2_WIN_DATA *WinData; /* struct vop2_plane_table *plane_table; */ VOP2_VP_PLANE_MASK *PlaneMask; UINT8 NrVps; UINT8 NrLayers; UINT8 NrMixers; UINT8 NrGammas; UINT8 NrDscs; UINT32 RegLen; } VOP2_DATA; typedef struct { UINT32 BaseAddress; VOP2_DATA *Data; UINT32 Version; VOP2_VP_PLANE_MASK VpPlaneMask[VOP2_VP_MAX]; } VOP2; #endif