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 <device/device.h>
7 #include <gpio.h>
8 #include <soc/msdc.h>
9 #include <soc/spm.h>
10 #include <soc/usb.h>
11 
12 #include "display.h"
13 #include "gpio.h"
14 
15 #include <arm-trusted-firmware/include/export/plat/mediatek/common/plat_params_exp.h>
16 
17 static void register_reset_to_bl31(void)
18 {
19  static struct bl_aux_param_gpio param_reset = {
20  .h = { .type = BL_AUX_PARAM_MTK_RESET_GPIO },
21  .gpio = { .polarity = ARM_TF_GPIO_LEVEL_HIGH },
22  };
23 
24  param_reset.gpio.index = GPIO_RESET.id;
25  register_bl31_aux_param(&param_reset.h);
26 }
27 
28 static void configure_audio(void)
29 {
31 
32  /* Set up I2S */
33  gpio_set_mode(GPIO(I2S2_MCK), PAD_I2S2_MCK_FUNC_I2S2_MCK);
34  gpio_set_mode(GPIO(I2S2_BCK), PAD_I2S2_BCK_FUNC_I2S2_BCK);
35  gpio_set_mode(GPIO(I2S2_LRCK), PAD_I2S2_LRCK_FUNC_I2S2_LRCK);
36  gpio_set_mode(GPIO(EINT4), PAD_EINT4_FUNC_I2S3_DO);
37 }
38 
39 static void mainboard_init(struct device *dev)
40 {
42 
43  if (CONFIG(SDCARD_INIT)) {
44  printk(BIOS_INFO, "SD card init\n");
45 
46  /* External SD Card connected via USB */
48  }
49 
51 
53 
54  if (spm_init())
55  printk(BIOS_ERR, "spm init failed, system suspend may not work\n");
56 
58 
59  if (display_init_required()) {
60  if (configure_display() < 0)
61  printk(BIOS_ERR, "%s: Failed to init display\n", __func__);
62  } else {
63  printk(BIOS_INFO, "%s: Skipped display init\n", __func__);
64  }
65 }
66 
67 static void mainboard_enable(struct device *dev)
68 {
69  dev->ops->init = &mainboard_init;
70 }
71 
73  .name = CONFIG_MAINBOARD_PART_NUMBER,
74  .enable_dev = mainboard_enable,
75 };
struct chip_operations mainboard_ops
Definition: mainboard.c:19
void register_bl31_aux_param(struct bl_aux_param_header *param)
Definition: bl31.c:54
int display_init_required(void)
Definition: bootmode.c:22
#define printk(level,...)
Definition: stdlib.h:16
@ GPIO
Definition: chip.h:84
@ CONFIG
Definition: dsi_common.h:201
static void mainboard_init(struct device *dev)
Definition: mainboard.c:39
static void configure_audio(void)
Definition: mainboard.c:28
static void mainboard_enable(struct device *dev)
Definition: mainboard.c:67
static void register_reset_to_bl31(void)
Definition: mainboard.c:17
static void configure_display(void)
Definition: mainboard.c:159
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
#define GPIO_EN_PP3300_SDBRDG_X
Definition: gpio.h:30
void setup_usb_host(void)
Definition: usb.c:153
void mtk_msdc_configure_emmc(bool is_early_init)
Definition: msdc.c:36
int spm_init(void)
Definition: spm.c:298
void mtcmos_audio_power_on(void)
Definition: mtcmos.c:52
void gpio_set_mode(gpio_t gpio, int mode)
Definition: gpio.c:45
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