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 <device/device.h>
6 #include <device/i2c_simple.h>
7 #include <edid.h>
8 #include <gpio.h>
9 #include <soc/display.h>
10 #include <soc/grf.h>
11 #include <soc/soc.h>
12 #include <soc/pmu.h>
13 #include <soc/clock.h>
14 #include <soc/rk808.h>
15 #include <soc/spi.h>
16 #include <soc/i2c.h>
17 #include <symbols.h>
18 
19 #include "board.h"
20 
21 static void configure_usb(void)
22 {
23  gpio_output(GPIO(0, B, 4), 1); /* USB2_PWR_EN */
24 }
25 
26 static void configure_emmc(void)
27 {
31 
32  gpio_output(GPIO(2, B, 1), 1); /* EMMC_RST_L */
33 }
34 
35 static void configure_i2s(void)
36 {
39 
40  /* AUDIO IO domain 1.8V voltage selection */
42  rkclk_configure_i2s(12288000);
43 }
44 
45 static void configure_vop(void)
46 {
48 
49  /* lcdc(vop) iodomain select 1.8V */
51 
52  rk808_configure_ldo(8, 1800); /* VCC18_LCD (HDMI_AVDD_1V8) */
53  rk808_configure_ldo(7, 1000); /* VDD10_LCD (HDMI_AVDD_1V0) */
54  rk808_configure_switch(1, 1); /* VCC33_LCD */
55 }
56 
57 static void configure_hdmi(void)
58 {
59  gpio_output(GPIO(7, B, 3), 1); /* POWER_HDMI_ON */
60 }
61 
62 static void mainboard_init(struct device *dev)
63 {
65 
66  configure_usb();
68  configure_i2s();
69  configure_vop();
71 }
72 
73 static void mainboard_enable(struct device *dev)
74 {
75  dev->ops->init = &mainboard_init;
76 }
77 
80 };
81 
82 void lb_board(struct lb_header *header)
83 {
84  struct lb_range *dma;
85 
86  dma = (struct lb_range *)lb_new_record(header);
87  dma->tag = LB_TAG_DMA;
88  dma->size = sizeof(*dma);
89  dma->range_start = (uintptr_t)_dma_coherent;
90  dma->range_size = REGION_SIZE(dma_coherent);
91 }
92 
94 {
95  return;
96 }
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
@ LB_TAG_DMA
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:62
static void configure_vop(void)
Definition: mainboard.c:45
static void configure_i2s(void)
Definition: mainboard.c:35
static void configure_usb(void)
Definition: mainboard.c:21
static void configure_emmc(void)
Definition: mainboard.c:26
static void configure_hdmi(void)
Definition: mainboard.c:57
static void mainboard_enable(struct device *dev)
Definition: mainboard.c:73
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 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_LCDC
Definition: grf.h:197
void rk808_configure_switch(int sw, int enabled)
Definition: rk808.c:60
void rk808_configure_ldo(int ldo, int millivolts)
Definition: rk808.c:66
#define RK_SETBITS(set)
Definition: soc.h:9
void rkclk_configure_i2s(unsigned int hz)
Definition: clock.c:451
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_lcdc
Definition: grf.h:20
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_i2sclk
Definition: grf.h:63