coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mainboard.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <bl31.h>
4 #include <bootmode.h>
5 #include <console/console.h>
6 #include <delay.h>
7 #include <device/device.h>
8 #include <device/mmio.h>
9 #include <edid.h>
10 #include <framebuffer_info.h>
11 #include <gpio.h>
12 #include <soc/ddp.h>
13 #include <soc/dpm.h>
14 #include <soc/dptx.h>
15 #include <soc/gpio.h>
16 #include <soc/i2c.h>
17 #include <soc/msdc.h>
18 #include <soc/mtcmos.h>
19 #include <soc/spm.h>
20 #include <soc/usb.h>
21 
22 #include "gpio.h"
23 
24 #include <arm-trusted-firmware/include/export/plat/mediatek/common/plat_params_exp.h>
25 
26 /* GPIO to schematics names */
27 #define GPIO_AP_EDP_BKLTEN GPIO(DGI_D5)
28 #define GPIO_BL_PWM_1V8 GPIO(DISP_PWM0)
29 #define GPIO_EDP_HPD_1V8 GPIO(GPIO_07)
30 #define GPIO_EN_PP3300_DISP_X GPIO(I2SO1_D2)
31 
32 static void register_reset_to_bl31(void)
33 {
34  static struct bl_aux_param_gpio param_reset = {
35  .h = { .type = BL_AUX_PARAM_MTK_RESET_GPIO },
36  .gpio = { .polarity = ARM_TF_GPIO_LEVEL_HIGH },
37  };
38 
39  param_reset.gpio.index = GPIO_RESET.id;
40  register_bl31_aux_param(&param_reset.h);
41 }
42 
43 /* Set up backlight control pins as output pin and power-off by default */
44 static void configure_panel_backlight(void)
45 {
48 }
49 
50 static void power_on_panel(void)
51 {
52  /* Default power sequence for most panels. */
56 }
57 
58 static bool configure_display(void)
59 {
60  struct edid edid;
61  struct fb_info *info;
62  const char *name;
63 
64  printk(BIOS_INFO, "%s: Starting display initialization\n", __func__);
65 
70 
71  mtk_ddp_init();
72  mdelay(200);
73 
74  if (mtk_edp_init(&edid) < 0) {
75  printk(BIOS_ERR, "%s: Failed to initialize eDP\n", __func__);
76  return false;
77  }
79  if (name[0] == '\0')
80  name = "unknown name";
81  printk(BIOS_INFO, "%s: '%s %s' %dx%d@%dHz\n", __func__,
83  edid.mode.refresh);
84 
86 
89  if (info)
91 
92  return true;
93 }
94 
95 static void configure_i2s(void)
96 {
97  /* Audio PWR */
100 
101  /* SoC I2S */
102  gpio_set_mode(GPIO(GPIO_02), PAD_GPIO_02_FUNC_TDMIN_LRCK);
103  gpio_set_mode(GPIO(GPIO_03), PAD_GPIO_03_FUNC_TDMIN_BCK);
104  gpio_set_mode(GPIO(I2SO2_D0), PAD_I2SO2_D0_FUNC_I2SO2_D0);
105 }
106 
107 static void configure_audio(void)
108 {
109  if (CONFIG(CHERRY_USE_RT1011) || CONFIG(CHERRY_USE_MAX98390))
111 
112  if (CONFIG(CHERRY_USE_MAX98390))
113  configure_i2s();
114 }
115 
116 static void mainboard_init(struct device *dev)
117 {
118  if (display_init_required())
120  else
121  printk(BIOS_INFO, "%s: Skipped display initialization\n", __func__);
122 
125  setup_usb_host();
126 
127  configure_audio();
128 
129  if (dpm_init())
130  printk(BIOS_ERR, "dpm init failed, DVFS may not work\n");
131 
132  if (spm_init())
133  printk(BIOS_ERR, "spm init failed, system suspend may not work\n");
134 
136 }
137 
138 static void mainboard_enable(struct device *dev)
139 {
140  dev->ops->init = &mainboard_init;
141 }
142 
144  .name = CONFIG_MAINBOARD_PART_NUMBER,
145  .enable_dev = mainboard_enable,
146 };
struct chip_operations mainboard_ops
Definition: mainboard.c:19
const char * name
Definition: mmu.c:92
void register_bl31_aux_param(struct bl_aux_param_header *param)
Definition: bl31.c:54
int display_init_required(void)
Definition: bootmode.c:22
@ LB_FB_ORIENTATION_NORMAL
#define printk(level,...)
Definition: stdlib.h:16
void mdelay(unsigned int msecs)
Definition: delay.c:2
int dpm_init(void)
Definition: dpm.c:33
int mtk_edp_init(struct edid *edid)
Definition: dptx.c:1100
@ GPIO
Definition: chip.h:84
static struct smmstore_params_info info
Definition: ramstage.c:12
@ CONFIG
Definition: dsi_common.h:201
struct fb_info * fb_new_framebuffer_info_from_edid(const struct edid *edid, uintptr_t fb_addr)
Definition: edid_fill_fb.c:162
void fb_set_orientation(struct fb_info *info, enum lb_fb_orientation orientation)
Definition: edid_fill_fb.c:151
static void mainboard_init(struct device *dev)
Definition: mainboard.c:116
#define GPIO_BL_PWM_1V8
Definition: mainboard.c:28
static void configure_i2s(void)
Definition: mainboard.c:95
static void configure_audio(void)
Definition: mainboard.c:107
#define GPIO_AP_EDP_BKLTEN
Definition: mainboard.c:27
#define GPIO_EN_PP3300_DISP_X
Definition: mainboard.c:30
static void configure_panel_backlight(void)
Definition: mainboard.c:44
static bool configure_display(void)
Definition: mainboard.c:58
static void power_on_panel(void)
Definition: mainboard.c:50
static void mainboard_enable(struct device *dev)
Definition: mainboard.c:138
static void register_reset_to_bl31(void)
Definition: mainboard.c:32
#define GPIO_EDP_HPD_1V8
Definition: mainboard.c:29
@ I2C_SPEED_FAST
Definition: i2c.h:45
void edid_set_framebuffer_bits_per_pixel(struct edid *edid, int fb_bpp, int row_byte_alignment)
Definition: edid.c:1667
void gpio_output(gpio_t gpio, int value)
Definition: gpio.c:194
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
#define GPIO_RESET
Definition: gpio.h:16
@ GPIO_PULL_ENABLE
Definition: gpio_common.h:13
void gpio_set_pull(gpio_t gpio, enum pull_enable enable, enum pull_select select)
Definition: gpio.c:17
void setup_usb_host(void)
Definition: usb.c:153
void mtk_msdc_configure_sdcard(void)
Definition: msdc.c:66
void mtk_msdc_configure_emmc(bool is_early_init)
Definition: msdc.c:36
void mtk_ddp_init(void)
Definition: ddp.c:61
void mtk_ddp_mode_set(const struct edid *edid)
Definition: ddp.c:66
int spm_init(void)
Definition: spm.c:298
void mtcmos_protect_audio_bus(void)
Definition: mtcmos.c:20
void mtcmos_audio_power_on(void)
Definition: mtcmos.c:52
void mtcmos_display_power_on(void)
Definition: mtcmos.c:44
void mtcmos_protect_display_bus(void)
Definition: mtcmos.c:14
void gpio_set_mode(gpio_t gpio, int mode)
Definition: gpio.c:45
void mtk_i2c_bus_init(uint8_t bus)
Definition: i2c.c:65
@ I2C2
Definition: i2c.h:52
#define GPIO_PULL_UP
Definition: gpio.h:24
unsigned long uintptr_t
Definition: stdint.h:21
const char * name
Definition: device.h:29
void(* init)(struct device *dev)
Definition: device.h:42
Definition: device.h:107
struct device_operations * ops
Definition: device.h:143
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
char ascii_string[EDID_ASCII_STRING_LENGTH+1]
Definition: edid.h:85
char manufacturer_name[3+1]
Definition: edid.h:86
struct edid_mode mode
Definition: edid.h:72