coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
ddp.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/mmio.h>
4 #include <edid.h>
5 #include <soc/addressmap.h>
6 #include <soc/ddp.h>
7 #include <types.h>
8 
10 {
17 }
18 
19 static void disp_config_main_path_mutex(void)
20 {
22 
23  /* Clock source from DSI0 */
26  write32(&disp_mutex->mutex[0].en, BIT(0));
27 }
28 
29 static void ovl_bgclr_in_sel(u32 idx)
30 {
31  setbits32(&disp_ovl[idx]->datapath_con, BIT(2));
32 }
33 
34 static void enable_pq(struct disp_pq_regs *const regs, u32 width, u32 height,
35  int enable_relay)
36 {
37  write32(&regs->size, width << 16 | height);
38  if (enable_relay)
39  write32(&regs->cfg, PQ_RELAY_MODE);
40  write32(&regs->en, PQ_EN);
41 }
42 
43 static void main_disp_path_setup(u32 width, u32 height, u32 vrefresh)
44 {
45  u32 idx = 0;
46  u32 pixel_clk = width * height * vrefresh;
47 
48  for (idx = 0; idx < MAIN_PATH_OVL_NR; idx++)
49  ovl_set_roi(idx, width, height, idx ? 0 : 0xff0000ff);
50 
51  rdma_config(width, height, pixel_clk, 5 * KiB);
59 }
60 
61 static void disp_clock_on(void)
62 {
64 
67 }
68 
69 void mtk_ddp_init(void)
70 {
71  disp_clock_on();
72  /* Turn off M4U port. */
73  write32((void *)(SMI_LARB0 + SMI_LARB_NON_SEC_CON), 0);
74 }
75 
76 void mtk_ddp_mode_set(const struct edid *edid)
77 {
78  u32 fmt = OVL_INFMT_RGBA8888;
80  u32 width = edid->mode.ha;
81  u32 height = edid->mode.va;
82  u32 vrefresh = edid->mode.refresh;
83 
84  main_disp_path_setup(width, height, vrefresh);
85  rdma_start();
86  ovl_layer_config(fmt, bpp, width, height);
88 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
static int width
Definition: bochs.c:42
#define KiB
Definition: helpers.h:75
void color_start(u32 width, u32 height)
Definition: ddp.c:47
void rdma_config(u32 width, u32 height, u32 pixel_clk, u32 fifo_size)
Definition: ddp.c:23
void ovl_set_roi(u32 idx, u32 width, u32 height, u32 color)
Definition: ddp.c:12
void rdma_start(void)
Definition: ddp.c:18
void ovl_layer_config(u32 fmt, u32 bpp, u32 width, u32 height)
Definition: ddp.c:56
@ OVL_INFMT_RGBA8888
Definition: ddp_common.h:123
static struct disp_ovl_regs *const disp_ovl[2]
Definition: ddp_common.h:61
#define BIT(nr)
Definition: ec_commands.h:45
#define setbits32(addr, set)
Definition: mmio.h:21
#define clrbits32(addr, clear)
Definition: mmio.h:26
void mtk_ddp_init(void)
Definition: ddp.c:61
void mtk_ddp_mode_set(const struct edid *edid)
Definition: ddp.c:66
@ MUTEX_MOD_MAIN_PATH
Definition: ddp.h:240
static struct disp_mutex_regs *const disp_mutex
Definition: ddp.h:231
static struct mmsys_cfg_regs *const mmsys_cfg
Definition: ddp.h:133
static void enable_pq(struct disp_pq_regs *const regs, u32 width, u32 height, int enable_relay)
Definition: ddp.c:34
static void main_disp_path_setup(u32 width, u32 height, u32 vrefresh)
Definition: ddp.c:43
static void ovl_bgclr_in_sel(u32 idx)
Definition: ddp.c:29
static void disp_config_main_path_connection(void)
Definition: ddp.c:9
static void disp_clock_on(void)
Definition: ddp.c:61
static void disp_config_main_path_mutex(void)
Definition: ddp.c:19
@ DISP_PATH0_SEL_IN_OVL0_2L
Definition: ddp.h:102
@ DSI0_SEL_IN_DITHER0_MOUT
Definition: ddp.h:103
@ RDMA0_SOUT_SEL_IN_COLOR
Definition: ddp.h:106
static struct disp_pq_regs *const disp_ccorr
Definition: ddp.h:168
static struct disp_pq_regs *const disp_aal
Definition: ddp.h:170
@ SMI_LARB_NON_SEC_CON
Definition: ddp.h:177
@ OVL0_MOUT_EN_OVL0_2L
Definition: ddp.h:94
@ OVL0_2L_MOUT_EN_DISP_PATH0
Definition: ddp.h:95
@ DITHER0_MOUT_EN_DISP_DSI0
Definition: ddp.h:97
static struct disp_pq_regs *const disp_gamma
Definition: ddp.h:172
@ CG_CON0_DISP_ALL
Definition: ddp.h:65
static struct disp_pq_regs *const disp_dither
Definition: ddp.h:174
@ MUTEX_SOF_DSI0
Definition: ddp.h:147
#define MAIN_PATH_OVL_NR
Definition: ddp.h:10
@ CG_CON1_DISP_DSI0
Definition: ddp.h:85
@ CG_CON1_DISP_DSI0_INTERFACE
Definition: ddp.h:86
#define PQ_RELAY_MODE
Definition: ddp.h:246
#define PQ_EN
Definition: ddp.h:245
@ SMI_LARB0
Definition: addressmap.h:62
uint32_t u32
Definition: stdint.h:51
struct disp_mutex_regs::@798 mutex[6]
unsigned int refresh
Definition: edid.h:24
unsigned int va
Definition: edid.h:30
unsigned int ha
Definition: edid.h:25
Definition: edid.h:49
unsigned int framebuffer_bits_per_pixel
Definition: edid.h:58
struct edid_mode mode
Definition: edid.h:72
u32 disp_ovl0_2l_mout_en
Definition: ddp.h:23
u32 disp_dither0_mout_en
Definition: ddp.h:25
u32 disp_rdma0_sout_sel_in
Definition: ddp.h:53
u32 mmsys_cg_con0
Definition: ddp.h:63
u32 disp_ovl0_mout_en
Definition: ddp.h:25
u32 dsi0_sel_in
Definition: ddp.h:50
u32 disp_path0_sel_in
Definition: ddp.h:45
u32 mmsys_cg_con1
Definition: ddp.h:67
#define height