hc
2024-03-26 e0728245c89800c2038c23308f2d88969d5b41c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/** @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 <Library/Vop2Regs.h>
 
/*
 * 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