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 <device/mmio.h>
4 #include <boot/coreboot_tables.h>
5 #include <console/console.h>
6 #include <device/device.h>
7 #include <device/i2c_simple.h>
8 #include <edid.h>
9 #include <gpio.h>
10 #include <soc/display.h>
11 #include <soc/grf.h>
12 #include <soc/soc.h>
13 #include <soc/pmu.h>
14 #include <soc/clock.h>
15 #include <soc/rk808.h>
16 #include <soc/spi.h>
17 #include <soc/i2c.h>
18 #include <symbols.h>
20 
21 #include "board.h"
22 
23 static void configure_usb(void)
24 {
25  gpio_output(GPIO(0, B, 4), 1); /* USB2_PWR_EN */
26 }
27 
28 static void configure_emmc(void)
29 {
33 
34  gpio_output(GPIO(2, B, 1), 1); /* EMMC_RST_L */
35 }
36 
37 static void configure_codec(void)
38 {
39  write32(&rk3288_grf->iomux_i2c2, IOMUX_I2C2); /* CODEC I2C */
40  i2c_init(2, 400*KHz); /* CODEC I2C */
41 
44 
45  rk808_configure_ldo(6, 1800); /* VCC18_CODEC */
46 
47  /* AUDIO IO domain 1.8V voltage selection */
49  rkclk_configure_i2s(12288000);
50 }
51 
52 static void configure_3g(void)
53 {
54  /* Force 3G modem off to avoid confusing the EHCI host and
55  * causing problems during enumeration/init */
56  gpio_output(GPIO(5, C, 1), 1); /* 3G_SHUTDOWN */
57  gpio_output(GPIO(4, D, 2), 0); /* 3G_ON_OFF */
58 }
59 
60 static void mainboard_init(struct device *dev)
61 {
63 
64  configure_usb();
67  configure_3g();
68  /* No video. */
69 
70  /* If recovery mode is detected, reduce frequency and voltage to reduce
71  * heat in case machine is left unattended. chrome-os-partner:41201. */
73  printk(BIOS_DEBUG, "Reducing APLL freq for recovery mode.\n");
75  rk808_configure_buck(1, 900);
76  }
77 }
78 
79 static void mainboard_enable(struct device *dev)
80 {
81  dev->ops->init = &mainboard_init;
82 }
83 
86 };
87 
88 void lb_board(struct lb_header *header)
89 {
90  struct lb_range *dma;
91 
92  dma = (struct lb_range *)lb_new_record(header);
93  dma->tag = LB_TAG_DMA;
94  dma->size = sizeof(*dma);
95  dma->range_start = (uintptr_t)_dma_coherent;
96  dma->range_size = REGION_SIZE(dma_coherent);
97 }
98 
100 {
101  return;
102 }
struct chip_operations mainboard_ops
Definition: mainboard.c:19
struct arm64_kernel_header header
Definition: fit_payload.c:30
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
#define KHz
Definition: helpers.h:79
@ LB_TAG_DMA
#define printk(level,...)
Definition: stdlib.h:16
int dma_coherent(void *ptr)
@ GPIO
Definition: chip.h:84
void lb_board(struct lb_header *header)
Definition: mainboard.c:325
void mainboard_power_on_backlight(void)
Definition: mainboard.c:356
static void mainboard_init(struct device *dev)
Definition: mainboard.c:60
static void configure_3g(void)
Definition: mainboard.c:52
static void configure_codec(void)
Definition: mainboard.c:37
static void configure_usb(void)
Definition: mainboard.c:23
static void configure_emmc(void)
Definition: mainboard.c:28
static void mainboard_enable(struct device *dev)
Definition: mainboard.c:79
struct lb_record * lb_new_record(struct lb_header *header)
void gpio_output(gpio_t gpio, int value)
Definition: gpio.c:194
#define REGION_SIZE(name)
Definition: symbols.h:10
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
#define GPIO_RESET
Definition: gpio.h:16
struct @1399 * dma
static struct rk3288_grf_regs *const rk3288_grf
Definition: grf.h:181
#define IOMUX_EMMCPWREN
Definition: grf.h:203
#define IOMUX_I2SCLK
Definition: grf.h:195
#define IOMUX_EMMCCMD
Definition: grf.h:204
#define IOMUX_I2S
Definition: grf.h:194
#define IOMUX_EMMCDATA
Definition: grf.h:200
#define IOMUX_I2C2
Definition: grf.h:185
void rk808_configure_buck(int buck, int millivolts)
Definition: rk808.c:98
void rk808_configure_ldo(int ldo, int millivolts)
Definition: rk808.c:66
#define RK_SETBITS(set)
Definition: soc.h:9
int vboot_recovery_mode_enabled(void)
Definition: bootmode.c:21
void i2c_init(unsigned int bus)
Definition: i2c.c:198
void rkclk_configure_cpu(enum apll_frequencies apll_freq)
Definition: clock.c:309
void rkclk_configure_i2s(unsigned int hz)
Definition: clock.c:451
@ APLL_600_MHZ
Definition: clock.h:18
unsigned long uintptr_t
Definition: stdint.h:21
void(* enable_dev)(struct device *dev)
Definition: device.h:24
void(* init)(struct device *dev)
Definition: device.h:42
Definition: device.h:107
struct device_operations * ops
Definition: device.h:143
u32 iomux_emmcdata
Definition: grf.h:31
u32 iomux_emmccmd
Definition: grf.h:39
u32 io_vsel
Definition: grf.h:135
u32 iomux_i2s
Definition: grf.h:58
u32 iomux_emmcpwren
Definition: grf.h:35
u32 iomux_i2c2
Definition: grf.h:62
u32 iomux_i2sclk
Definition: grf.h:63