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 /*
4  * This file is created based on MT8186 Functional Specification
5  * Chapter number: 6.9
6  */
7 
8 #ifndef SOC_MEDIATEK_MT8186_DDP_H
9 #define SOC_MEDIATEK_MT8186_DDP_H
10 
11 #include <device/mmio.h>
12 #include <soc/addressmap.h>
13 #include <soc/ddp_common.h>
14 #include <types.h>
15 
16 #define SMI_LARB_PORT_L0_OVL_RDMA0 0x388
17 
18 struct mmsys_cfg_regs {
19  u32 reserved_0x000[64]; /* 0x000 */
20  u32 mmsys_cg_con0; /* 0x100 */
21  u32 mmsys_cg_set0; /* 0x104 */
22  u32 mmsys_cg_clr0; /* 0x108 */
23  u32 reserved_0x10c; /* 0x10C */
24  u32 mmsys_cg_con1; /* 0x110 */
25  u32 mmsys_cg_set1; /* 0x114 */
26  u32 mmsys_cg_clr1; /* 0x118 */
27  u32 reserved_0x11c[33]; /* 0x11C */
28  u32 mmsys_cg_con2; /* 0x1A0 */
29  u32 mmsys_cg_set2; /* 0x1A4 */
30  u32 mmsys_cg_clr2; /* 0x1A8 */
31  u32 reserved_0x1ac[853]; /* 0x1AC */
32  u32 reserved_0xf00; /* 0xF00 */
33  u32 mmsys_ovl_con; /* 0xF04 */
34  u32 reserved_0xf08; /* 0xF08 */
35  u32 disp_rdma0_sout_sel; /* 0xF0C */
36  u32 reserved_0xf10; /* 0xF10 */
37  u32 disp_ovl0_2l_mout_en; /* 0xF14 */
38  u32 disp_ovl0_mout_en; /* 0xF18 */
39  u32 reserved_0xf1c; /* 0xF1C */
40  u32 disp_dither0_mout_en; /* 0xF20 */
41  u32 reserved_0xf24; /* 0xF24 */
42  u32 disp_rdma0_sel_in; /* 0xF28 */
43  u32 reserved_0xf2c; /* 0xF2C */
44  u32 disp_dsi0_sel_in; /* 0xF30 */
45  u32 reserved_0xf34[2]; /* 0xF34 */
46  u32 disp_rdma1_mout_en; /* 0xF3C */
47  u32 disp_rdma1_sel_in; /* 0xF40 */
48  u32 disp_dpi0_sel_in; /* 0xF44 */
49 };
50 check_member(mmsys_cfg_regs, mmsys_cg_con0, 0x100);
51 check_member(mmsys_cfg_regs, mmsys_cg_con1, 0x110);
52 check_member(mmsys_cfg_regs, mmsys_cg_con2, 0x1A0);
53 check_member(mmsys_cfg_regs, mmsys_ovl_con, 0xF04);
54 check_member(mmsys_cfg_regs, disp_rdma0_sout_sel, 0xF0C);
55 check_member(mmsys_cfg_regs, disp_ovl0_mout_en, 0xF18);
56 check_member(mmsys_cfg_regs, disp_dither0_mout_en, 0xF20);
57 check_member(mmsys_cfg_regs, disp_rdma0_sel_in, 0xF28);
58 check_member(mmsys_cfg_regs, disp_dsi0_sel_in, 0xF30);
59 
60 struct disp_mutex_regs {
61  u32 inten;
62  u32 intsta;
63  u32 reserved0[6];
64  struct {
65  u32 en;
66  u32 dummy;
67  u32 rst;
68  u32 ctl;
69  u32 mod;
70  u32 reserved[3];
71  } mutex[16];
72 };
73 
86 };
88 
99 };
101 
116 };
118 check_member(disp_aal_regs, output_size, 0x4D8);
119 
129 };
131 
144 };
145 check_member(disp_dither_regs, disp_dither_0, 0x100);
146 
147 /*
148  * DISP_REG_CONFIG_MMSYS_CG_CON0
149  * Configures free-run clock gating 0
150  * 0: Enable clock
151  * 1: Clock gating
152  */
153 enum {
189  CG_CON0_ALL = 0xFFFFFFFF,
190 };
191 
192 enum {
197  CG_CON2_ALL = 0xFFFFFFFF,
198 };
199 
200 DEFINE_BITFIELD(DISP_OVL0_MOUT_EN, 3, 0)
201 DEFINE_BITFIELD(DISP_RDMA0_SEL_IN, 3, 0)
202 DEFINE_BITFIELD(DISP_MMSYS_OVL0_CON, 1, 0)
203 DEFINE_BITFIELD(DISP_RDMA0_SOUT_SEL, 3, 0)
204 DEFINE_BITFIELD(DISP_DITHER0_MOUT_EN, 3, 0)
205 DEFINE_BITFIELD(DISP_DSI0_SEL_IN, 3, 0)
206 
207 DEFINE_BIT(SMI_ID_EN, 0)
208 DEFINE_BIT(PQ_CFG_RELAY_MODE, 0)
209 DEFINE_BIT(PQ_CFG_ENGINE_EN, 1)
210 
211 #define DISP_OVL0_MOUT_TO_RDMA0 BIT(0)
212 #define DISP_RDMA0_FROM_OVL0 0
213 #define DISP_OVL0_GO_BLEND BIT(0)
214 #define DISP_RDMA0_SOUT_TO_COLOR0 1
215 #define DISP_DITHER0_MOUT_TO_DSI0 BIT(0)
216 #define DISP_DSI0_FROM_DITHER0 1
217 
218 #define SMI_ID_EN_VAL BIT(0)
219 
220 enum {
237 };
238 
239 enum {
243 };
244 
245 #define PQ_EN BIT(0)
246 #define PQ_RELAY_MODE BIT(0)
247 #define PQ_ENGINE_EN BIT(1)
248 
249 static struct mmsys_cfg_regs *const mmsys_cfg = (void *)MMSYS_BASE;
250 static struct disp_mutex_regs *const disp_mutex = (void *)DISP_MUTEX_BASE;
251 static struct disp_ccorr_regs *const disp_ccorr = (void *)DISP_CCORR0_BASE;
252 static struct disp_aal_regs *const disp_aal = (void *)DISP_AAL0_BASE;
253 static struct disp_gamma_regs *const disp_gamma = (void *)DISP_GAMMA0_BASE;
254 static struct disp_postmask_regs *const disp_postmask = (void *)DISP_POSTMASK0_BASE;
255 static struct disp_dither_regs *const disp_dither = (void *)DISP_DITHER0_BASE;
256 
257 void mtk_ddp_init(void);
258 void mtk_ddp_mode_set(const struct edid *edid);
259 
260 #endif
#define BIT(nr)
Definition: ec_commands.h:45
#define DEFINE_BITFIELD(name, high_bit, low_bit)
Definition: mmio.h:124
#define DEFINE_BIT(name, bit)
Definition: mmio.h:131
@ 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_WDMA0
Definition: ddp.h:161
@ CG_CON0_DISP_OVL0
Definition: ddp.h:156
@ CG_CON0_DISP_RDMA0
Definition: ddp.h:158
@ CG_CON0_SMI_COMMON
Definition: ddp.h:140
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
@ 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_OVL0_2L
Definition: ddp.h:55
@ 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_CON0_SMI_IOMMU
Definition: ddp.h:173
@ CG_CON0_SMI_GALS
Definition: ddp.h:172
@ CG_CON0_DISP_DSI0
Definition: ddp.h:169
@ CG_CON0_DISP_RSZ0
Definition: ddp.h:160
@ CG_CON0_APB_MM_BUS
Definition: ddp.h:155
@ CG_CON0_SMI_INFRA
Definition: ddp.h:164
@ CG_CON0_DISP_FAKE_ENG1
Definition: ddp.h:171
@ CG_CON0_DISP_POSTMASK0
Definition: ddp.h:166
@ CG_CON0_DISP_FAKE_ENG0
Definition: ddp.h:170
@ CG_CON2_DISP_26M
Definition: ddp.h:194
@ CG_CON2_DISP_ALL
Definition: ddp.h:195
@ CG_CON2_ALL
Definition: ddp.h:197
@ CG_CON2_DSI0_DSI_CK_DOMAIN
Definition: ddp.h:193
static struct disp_mutex_regs *const disp_mutex
Definition: ddp.h:250
static struct disp_postmask_regs *const disp_postmask
Definition: ddp.h:254
static struct disp_gamma_regs *const disp_gamma
Definition: ddp.h:253
static struct mmsys_cfg_regs *const mmsys_cfg
Definition: ddp.h:249
@ MUTEX_MOD_DISP_POSTMASK0
Definition: ddp.h:227
static struct disp_ccorr_regs *const disp_ccorr
Definition: ddp.h:251
static struct disp_aal_regs *const disp_aal
Definition: ddp.h:252
static struct disp_dither_regs *const disp_dither
Definition: ddp.h:255
@ MMSYS_BASE
Definition: addressmap.h:44
@ 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_POSTMASK0_BASE
Definition: addressmap.h:91
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 disp_dither_0
Definition: ddp.h:143
u32 reserved2[51]
Definition: ddp.h:142
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 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
u32 reserved0[4]
Definition: ddp.h:125
u32 reserved1[3]
Definition: ddp.h:127
Definition: edid.h:49
u32 disp_rdma0_sel_in
Definition: ddp.h:42
u32 reserved_0xf24
Definition: ddp.h:41
u32 disp_dpi0_sel_in
Definition: ddp.h:48
u32 reserved_0xf1c
Definition: ddp.h:39
u32 disp_ovl0_2l_mout_en
Definition: ddp.h:23
u32 reserved_0xf2c
Definition: ddp.h:43
u32 mmsys_cg_set2
Definition: ddp.h:29
u32 disp_dither0_mout_en
Definition: ddp.h:25
u32 reserved_0xf00
Definition: ddp.h:32
u32 mmsys_cg_con0
Definition: ddp.h:63
u32 reserved_0x11c[33]
Definition: ddp.h:27
u32 mmsys_ovl_con
Definition: ddp.h:33
u32 mmsys_cg_clr0
Definition: ddp.h:65
u32 disp_ovl0_mout_en
Definition: ddp.h:25
u32 mmsys_cg_set0
Definition: ddp.h:64
u32 mmsys_cg_con2
Definition: ddp.h:28
u32 reserved_0x000[64]
Definition: ddp.h:13
u32 disp_rdma0_sout_sel
Definition: ddp.h:35
u32 mmsys_cg_clr2
Definition: ddp.h:30
u32 reserved_0xf10
Definition: ddp.h:36
u32 reserved_0xf08
Definition: ddp.h:34
u32 reserved_0x10c
Definition: ddp.h:23
u32 mmsys_cg_clr1
Definition: ddp.h:69
u32 disp_rdma1_sel_in
Definition: ddp.h:47
u32 disp_rdma1_mout_en
Definition: ddp.h:46
u32 disp_dsi0_sel_in
Definition: ddp.h:44
u32 mmsys_cg_con1
Definition: ddp.h:67
u32 reserved_0x1ac[853]
Definition: ddp.h:31
u32 mmsys_cg_set1
Definition: ddp.h:68
u32 reserved_0xf34[2]
Definition: ddp.h:45