coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
ddp.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef _SOC_MEDIATEK_MT8195_DDP_H_
4 #define _SOC_MEDIATEK_MT8195_DDP_H_
5 
6 #include <soc/addressmap.h>
7 #include <soc/ddp_common.h>
8 #include <types.h>
9 
10 #define MAIN_PATH_OVL_NR 2
11 
12 struct mmsys_cfg_regs {
13  u32 reserved_0x000[64]; /* 0x000 */
14  u32 mmsys_cg_con0; /* 0x100 */
15  u32 mmsys_cg_set0; /* 0x104 */
16  u32 mmsys_cg_clr0; /* 0x108 */
17  u32 reserved_0x10c; /* 0x10C */
18  u32 mmsys_cg_con1; /* 0x110 */
19  u32 mmsys_cg_set1; /* 0x114 */
20  u32 mmsys_cg_clr1; /* 0x118 */
21  u32 reserved_0x11c; /* 0x11C */
22  u32 mmsys_cg_con2; /* 0x120 */
23  u32 mmsys_cg_set2; /* 0x124 */
24  u32 mmsys_cg_clr2; /* 0x128 */
25  u32 reserved_0x12c[885]; /* 0x12C */
26  u32 reserved_0xf00; /* 0xF00 */
27  u32 reserved_0xf04; /* 0xF04 */
28  u32 reserved_0xf08; /* 0xF08 */
29  u32 reserved_0xf0c; /* 0xF0C */
30  u32 reserved_0xf10; /* 0xF10 */
31  u32 mmsys_ovl_mout_en; /* 0xF14 */
32  u32 reserved_0xf18; /* 0xF18 */
33  u32 reserved_0xf1c; /* 0xF1C */
34  u32 reserved_0xf20; /* 0xF20 */
35  u32 reserved_0xf24; /* 0xF24 */
36  u32 reserved_0xf28; /* 0xF28 */
37  u32 reserved_0xf2c; /* 0xF2C */
38  u32 reserved_0xf30; /* 0xF30 */
39  u32 mmsys_sel_in; /* 0xF34 */
40  u32 mmsys_sel_out; /* 0xF38 */
41  u32 reserved_0xf3c; /* 0xF3C */
42  u32 reserved_0xf40; /* 0xF40 */
43 };
44 
45 check_member(mmsys_cfg_regs, mmsys_cg_con0, 0x100);
46 check_member(mmsys_cfg_regs, mmsys_cg_con1, 0x110);
47 check_member(mmsys_cfg_regs, mmsys_cg_con2, 0x120);
48 check_member(mmsys_cfg_regs, mmsys_ovl_mout_en, 0xF14);
49 static struct mmsys_cfg_regs *const mmsys_cfg = (void *)VDOSYS0_BASE;
50 
51 /* DISP_REG_CONFIG_MMSYS_CG_CON0
52  Configures free-run vdo0_clks gating 0
53  0: Enable clock
54  1: Clock gating */
55 enum {
67 
79  CG_CON0_ALL = 0xffffffff
80 };
81 
82 /* DISP_REG_CONFIG_MMSYS_CG_CON1
83  Configures free-run clock gating 0
84  0: Enable clock
85  1: Clock gating */
86 enum {
93 
100  CG_CON1_ALL = 0xffffffff
101 };
102 
103 /* DISP_REG_CONFIG_MMSYS_CG_CON2
104  Configures free-run clock gating 0
105  0: Enable clock
106  1: Clock gating */
107 enum {
112 
115  CG_CON2_ALL = 0xffffffff
116 };
117 
118 enum {
123 };
124 
125 enum {
132 };
133 
134 struct disp_mutex_regs {
135  u32 inten;
136  u32 intsta;
137  u32 reserved0[6];
138  struct {
139  u32 en;
140  u32 dummy;
141  u32 rst;
142  u32 ctl;
143  u32 mod;
144  u32 reserved[3];
145  } mutex[12];
146 };
147 
148 static struct disp_mutex_regs *const disp_mutex = (void *)DISP_MUTEX_BASE;
149 
150 enum {
169 };
170 
171 enum {
176 };
177 
178 struct disp_ccorr_regs {
179  u32 en;
180  u32 reset;
181  u32 inten;
182  u32 intsta;
183  u32 status;
184  u32 reserved0[3];
185  u32 cfg;
186  u32 reserved1[3];
187  u32 size;
188  u32 reserved2[27];
189  u32 shadow;
190 };
192 
193 struct disp_gamma_regs {
194  u32 en;
195  u32 reset;
196  u32 inten;
197  u32 intsta;
198  u32 status;
199  u32 reserved0[3];
200  u32 cfg;
201  u32 reserved1[3];
202  u32 size;
203 };
205 
206 struct disp_aal_regs {
207  u32 en;
208  u32 reset;
209  u32 inten;
210  u32 intsta;
211  u32 status;
212  u32 reserved0[3];
213  u32 cfg;
214  u32 reserved1[3];
215  u32 size;
216  u32 reserved2[47];
217  u32 shadow;
218  u32 reserved3[249];
220 };
222 check_member(disp_aal_regs, output_size, 0x4d8);
223 
224 struct disp_dither_regs {
225  u32 en;
226  u32 reset;
227  u32 inten;
228  u32 intsta;
229  u32 status;
230  u32 reserved0[3];
231  u32 cfg;
232  u32 reserved1[3];
233  u32 size;
234  u32 reserved2[51];
235  u32 shadow;
236 };
238 
262  u32 pps[20];
264  u32 dbg[21];
269 };
271 check_member(disp_dsc_regs, shadow, 0x200);
272 
333 };
335 
336 enum {
345 };
346 
347 enum {
348  PQ_EN = BIT(0),
351 };
352 
353 static struct disp_ccorr_regs *const disp_ccorr = (void *)DISP_CCORR0_BASE;
354 
355 static struct disp_aal_regs *const disp_aal = (void *)DISP_AAL0_BASE;
356 
357 static struct disp_gamma_regs *const disp_gamma = (void *)DISP_GAMMA0_BASE;
358 
359 static struct disp_dither_regs *const disp_dither = (void *)DISP_DITHER0_BASE;
360 
361 static struct disp_dsc_regs *const disp_dsc = (void *)DISP_DSC0_BASE;
362 
363 static struct disp_merge_regs *const disp_merge = (void *)DISP_MERGE0_BASE;
364 
365 enum {
367 };
368 
369 void mtk_ddp_init(void);
370 void mtk_ddp_mode_set(const struct edid *edid);
371 
372 #endif
#define BIT(nr)
Definition: ec_commands.h:45
@ CG_CON1_ALL
Definition: ddp.h:191
@ MUTEX_MOD_DISP_COLOR0
Definition: ddp.h:236
@ MUTEX_MOD_DISP_RDMA0
Definition: ddp.h:235
@ MUTEX_MOD_DISP_OVL0
Definition: ddp.h:234
@ MUTEX_MOD_MAIN_PATH
Definition: ddp.h:240
@ CG_CON0_DISP_COLOR0
Definition: ddp.h:163
@ CG_CON0_ALL
Definition: ddp.h:172
@ CG_CON0_DISP_OVL0
Definition: ddp.h:156
@ CG_CON0_DISP_RDMA0
Definition: ddp.h:158
void mtk_ddp_init(void)
Definition: ddp.c:61
check_member(mmsys_cfg_regs, mmsys_sw1_rst_b, 0x144)
void mtk_ddp_mode_set(const struct edid *edid)
Definition: ddp.c:66
@ MUTEX_MOD_DISP_GAMMA0
Definition: ddp.h:135
@ MUTEX_MOD_DISP_CCORR0
Definition: ddp.h:133
@ MUTEX_MOD_DISP_AAL0
Definition: ddp.h:134
@ MUTEX_MOD_DISP_DITHER0
Definition: ddp.h:136
@ PQ_EN
Definition: ddp.h:164
@ PQ_RELAY_MODE
Definition: ddp.h:165
@ CG_CON0_DISP_CCORR0
Definition: ddp.h:61
@ CG_CON0_DISP_GAMMA0
Definition: ddp.h:63
@ CG_CON0_DISP_ALL
Definition: ddp.h:65
@ CG_CON0_DISP_AAL0
Definition: ddp.h:62
@ CG_CON0_DISP_DITHER0
Definition: ddp.h:64
@ MUTEX_SOF_DSI0
Definition: ddp.h:147
@ MUTEX_SOF_SINGLE_MODE
Definition: ddp.h:146
@ MUTEX_SOF_DPI0
Definition: ddp.h:148
@ CG_CON0_DISP_MUTEX0
Definition: ddp.h:154
@ CG_CON2_DISP_ALL
Definition: ddp.h:195
@ CG_CON2_ALL
Definition: ddp.h:197
@ SMI_LARB_PORT_L0_OVL_RDMA0
Definition: ddp.h:264
@ CG_CON1_SMI_IOMMU
Definition: ddp.h:99
@ CG_CON1_DISP_ALL
Definition: ddp.h:100
@ DISP_OVL0_GO_BG
Definition: ddp.h:116
@ DITHER0_MOUT_DSI0
Definition: ddp.h:120
@ DISP_OVL0_GO_BLEND
Definition: ddp.h:115
@ CG_CON2_DPI_DPI0
Definition: ddp.h:106
@ CG_CON2_DSI_DSI0
Definition: ddp.h:105
@ CG_CON2_MM_26MHZ
Definition: ddp.h:107
@ PQ_ENGINE_EN
Definition: ddp.h:250
@ DISP_DSC0_UFOE_SEL
Definition: ddp.h:340
@ DISP_DSC0_EN
Definition: ddp.h:337
@ DISP_DSC0_DUAL_INOUT
Definition: ddp.h:338
@ DISP_DSC0_BYPASS
Definition: ddp.h:339
@ DISP_DSC0_CON
Definition: ddp.h:341
static struct disp_dsc_regs *const disp_dsc
Definition: ddp.h:361
static struct disp_merge_regs *const disp_merge
Definition: ddp.h:363
@ CG_CON2_DP_INTF0
Definition: ddp.h:110
@ SEL_IN_VPP_MERGE_FROM_DSC_WRAP0_OUT
Definition: ddp.h:126
@ SEL_IN_DSC_WRAP0_IN_FROM_DISP_DITHER0
Definition: ddp.h:127
@ SEL_IN_DP_INTF0_FROM_VPP_MERGE
Definition: ddp.h:128
@ SEL_OUT_VPP_MERGE_TO_DP_INTF0
Definition: ddp.h:130
@ SEL_OUT_DSC_WRAP0_OUT_TO_VPP_MERGE
Definition: ddp.h:131
@ SEL_OUT_DISP_DITHER0_TO_DSC_WRAP0_IN
Definition: ddp.h:129
static struct disp_mutex_regs *const disp_mutex
Definition: ddp.h:148
static struct disp_gamma_regs *const disp_gamma
Definition: ddp.h:357
@ MUTEX_SOF_DP_INTF0
Definition: ddp.h:175
static struct mmsys_cfg_regs *const mmsys_cfg
Definition: ddp.h:49
@ MUTEX_MOD_DISP_DSC0
Definition: ddp.h:158
@ MUTEX_MOD_DISP_MERGE0
Definition: ddp.h:159
@ DISP_OVL0_TO_DISP_RDMA0
Definition: ddp.h:121
@ CG_CON0_DISP_VPP_MERGE0
Definition: ddp.h:64
@ CG_CON0_DISP_DSC_WRAP0
Definition: ddp.h:63
@ CG_CON0_DISP_DP_INTF0
Definition: ddp.h:65
static struct disp_ccorr_regs *const disp_ccorr
Definition: ddp.h:353
static struct disp_aal_regs *const disp_aal
Definition: ddp.h:355
@ CG_CON1_SMI_RSI
Definition: ddp.h:92
@ CG_CON1_SMI_GALS
Definition: ddp.h:87
@ CG_CON1_SMI_COMMON
Definition: ddp.h:88
@ CG_CON1_SMI_LARB
Definition: ddp.h:91
@ CG_CON1_SMI_EMI
Definition: ddp.h:89
static struct disp_dither_regs *const disp_dither
Definition: ddp.h:359
@ DISP_MUTEX_BASE
Definition: addressmap.h:56
@ DISP_AAL0_BASE
Definition: addressmap.h:57
@ DISP_GAMMA0_BASE
Definition: addressmap.h:58
@ DISP_CCORR0_BASE
Definition: addressmap.h:56
@ DISP_DITHER0_BASE
Definition: addressmap.h:59
@ DISP_DSC0_BASE
Definition: addressmap.h:96
@ VDOSYS0_BASE
Definition: addressmap.h:102
@ DISP_MERGE0_BASE
Definition: addressmap.h:98
uint32_t u32
Definition: stdint.h:51
u32 cfg
Definition: ddp.h:109
u32 inten
Definition: ddp.h:105
u32 intsta
Definition: ddp.h:106
u32 reserved2[47]
Definition: ddp.h:112
u32 reserved0[3]
Definition: ddp.h:108
u32 reset
Definition: ddp.h:104
u32 reserved1[3]
Definition: ddp.h:110
u32 status
Definition: ddp.h:107
u32 en
Definition: ddp.h:103
u32 size
Definition: ddp.h:111
u32 output_size
Definition: ddp.h:115
u32 reserved3[249]
Definition: ddp.h:114
u32 shadow
Definition: ddp.h:113
u32 reserved1[3]
Definition: ddp.h:82
u32 reserved2[27]
Definition: ddp.h:84
u32 reset
Definition: ddp.h:76
u32 en
Definition: ddp.h:75
u32 inten
Definition: ddp.h:77
u32 cfg
Definition: ddp.h:81
u32 status
Definition: ddp.h:79
u32 intsta
Definition: ddp.h:78
u32 shadow
Definition: ddp.h:85
u32 size
Definition: ddp.h:83
u32 reserved0[3]
Definition: ddp.h:80
u32 reserved1[3]
Definition: ddp.h:140
u32 status
Definition: ddp.h:137
u32 reserved0[3]
Definition: ddp.h:138
u32 intsta
Definition: ddp.h:136
u32 shadow
Definition: ddp.h:243
u32 reserved2[51]
Definition: ddp.h:142
u32 pic_w
Definition: ddp.h:246
u32 chunk_size
Definition: ddp.h:250
u32 dbg_con
Definition: ddp.h:256
u32 pad
Definition: ddp.h:254
u32 inten
Definition: ddp.h:241
u32 dbg[21]
Definition: ddp.h:264
u32 reserved5[36]
Definition: ddp.h:267
u32 slice_h
Definition: ddp.h:249
u32 reserved3[12]
Definition: ddp.h:263
u32 buf_size
Definition: ddp.h:251
u32 intsta
Definition: ddp.h:242
u32 obuf
Definition: ddp.h:260
u32 mode
Definition: ddp.h:252
u32 slice_w
Definition: ddp.h:248
u32 con
Definition: ddp.h:240
u32 status
Definition: ddp.h:244
u32 cksm_mon0
Definition: ddp.h:257
u32 reserved1[9]
Definition: ddp.h:255
u32 pps[20]
Definition: ddp.h:262
u32 enc_dbg[4]
Definition: ddp.h:266
u32 reserved4[3]
Definition: ddp.h:265
u32 pic_h
Definition: ddp.h:247
u32 cksm_mon1
Definition: ddp.h:258
u32 cfg
Definition: ddp.h:253
u32 reserved0
Definition: ddp.h:245
u32 reserved2[3]
Definition: ddp.h:261
u32 intack
Definition: ddp.h:243
u32 mute_con
Definition: ddp.h:259
u32 shadow
Definition: ddp.h:268
u32 size
Definition: ddp.h:98
u32 reserved0[3]
Definition: ddp.h:95
u32 reset
Definition: ddp.h:91
u32 en
Definition: ddp.h:90
u32 intsta
Definition: ddp.h:93
u32 cfg
Definition: ddp.h:96
u32 reserved1[3]
Definition: ddp.h:97
u32 status
Definition: ddp.h:94
u32 inten
Definition: ddp.h:92
u32 cfg3
Definition: ddp.h:280
u32 cfg13
Definition: ddp.h:290
u32 cfg30
Definition: ddp.h:307
u32 cfg8
Definition: ddp.h:285
u32 cfg38
Definition: ddp.h:315
u32 cfg41
Definition: ddp.h:318
u32 cfg2
Definition: ddp.h:279
u32 cfg37
Definition: ddp.h:314
u32 cfg43
Definition: ddp.h:320
u32 cfg50
Definition: ddp.h:327
u32 cfg51
Definition: ddp.h:328
u32 cfg21
Definition: ddp.h:298
u32 cfg7
Definition: ddp.h:284
u32 cfg6
Definition: ddp.h:283
u32 cfg24
Definition: ddp.h:301
u32 cfg10
Definition: ddp.h:287
u32 cfg27
Definition: ddp.h:304
u32 cfg46
Definition: ddp.h:323
u32 cfg54
Definition: ddp.h:331
u32 cfg40
Definition: ddp.h:317
u32 cfg1
Definition: ddp.h:278
u32 cfg28
Definition: ddp.h:305
u32 cfg0
Definition: ddp.h:277
u32 cfg45
Definition: ddp.h:322
u32 cfg33
Definition: ddp.h:310
u32 cfg18
Definition: ddp.h:295
u32 cfg52
Definition: ddp.h:329
u32 cfg11
Definition: ddp.h:288
u32 cfg31
Definition: ddp.h:308
u32 cfg14
Definition: ddp.h:291
u32 cfg16
Definition: ddp.h:293
u32 cfg48
Definition: ddp.h:325
u32 cfg17
Definition: ddp.h:294
u32 cfg39
Definition: ddp.h:316
u32 cfg42
Definition: ddp.h:319
u32 cfg12
Definition: ddp.h:289
u32 cfg4
Definition: ddp.h:281
u32 cfg32
Definition: ddp.h:309
u32 cfg47
Definition: ddp.h:324
u32 cfg19
Definition: ddp.h:296
u32 cfg36
Definition: ddp.h:313
u32 cfg5
Definition: ddp.h:282
u32 cfg55
Definition: ddp.h:332
u32 cfg53
Definition: ddp.h:330
u32 cfg22
Definition: ddp.h:299
u32 reserved0[2]
Definition: ddp.h:276
u32 cfg25
Definition: ddp.h:302
u32 cfg44
Definition: ddp.h:321
u32 cfg34
Definition: ddp.h:311
u32 cfg26
Definition: ddp.h:303
u32 cfg49
Definition: ddp.h:326
u32 cfg29
Definition: ddp.h:306
u32 cfg15
Definition: ddp.h:292
u32 reset
Definition: ddp.h:275
u32 cfg23
Definition: ddp.h:300
u32 cfg20
Definition: ddp.h:297
u32 cfg9
Definition: ddp.h:286
u32 cfg35
Definition: ddp.h:312
u32 intsta
Definition: ddp.h:216
u32 inten
Definition: ddp.h:215
u8 reserved0[24]
Definition: ddp.h:217
u32 reserved[3]
Definition: ddp.h:224
struct disp_mutex_regs::@798 mutex[6]
u32 dummy
Definition: ddp.h:220
Definition: edid.h:49
u32 reserved_0xf24
Definition: ddp.h:41
u32 mmsys_sel_out
Definition: ddp.h:40
u32 reserved_0xf40
Definition: ddp.h:42
u32 reserved_0xf1c
Definition: ddp.h:39
u32 reserved_0xf28
Definition: ddp.h:36
u32 reserved_0xf0c
Definition: ddp.h:29
u32 reserved_0xf2c
Definition: ddp.h:43
u32 mmsys_cg_set2
Definition: ddp.h:29
u32 reserved_0xf00
Definition: ddp.h:32
u32 reserved_0xf18
Definition: ddp.h:32
u32 mmsys_cg_con0
Definition: ddp.h:63
u32 reserved_0x11c[33]
Definition: ddp.h:27
u32 mmsys_cg_clr0
Definition: ddp.h:65
u32 mmsys_cg_set0
Definition: ddp.h:64
u32 reserved_0xf3c
Definition: ddp.h:41
u32 mmsys_cg_con2
Definition: ddp.h:28
u32 reserved_0x000[64]
Definition: ddp.h:13
u32 mmsys_cg_clr2
Definition: ddp.h:30
u32 reserved_0xf10
Definition: ddp.h:36
u32 reserved_0xf08
Definition: ddp.h:34
u32 reserved_0xf30
Definition: ddp.h:38
u32 reserved_0x10c
Definition: ddp.h:23
u32 mmsys_sel_in
Definition: ddp.h:39
u32 mmsys_cg_clr1
Definition: ddp.h:69
u32 mmsys_ovl_mout_en
Definition: ddp.h:27
u32 reserved_0x12c[885]
Definition: ddp.h:25
u32 mmsys_cg_con1
Definition: ddp.h:67
u32 reserved_0xf20
Definition: ddp.h:34
u32 reserved_0xf04
Definition: ddp.h:27
u32 mmsys_cg_set1
Definition: ddp.h:68
Definition: iobuf.h:30