coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
bootblock.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/mmio.h>
4 #include <bootblock_common.h>
5 #include <device/i2c_simple.h>
6 #include <soc/addressmap.h>
7 #include <soc/clk_rst.h>
8 #include <soc/clock.h>
9 #include <soc/funitcfg.h>
10 #include <soc/nvidia/tegra/i2c.h>
11 #include <soc/padconfig.h>
12 #include <soc/spi.h> /* FIXME: move back to soc code? */
13 
14 #include "pmic.h"
15 
16 static const struct pad_config pmic_pads[] = {
17  PAD_CFG_SFIO(PWR_I2C_SCL, PINMUX_INPUT_ENABLE, I2CPMU),
18  PAD_CFG_SFIO(PWR_I2C_SDA, PINMUX_INPUT_ENABLE, I2CPMU),
19 };
20 
21 static const struct pad_config spiflash_pads[] = {
22  /* QSPI fLash: mosi, miso, clk, cs0, hold, wp */
25  PAD_CFG_SFIO(QSPI_SCK, PINMUX_INPUT_ENABLE, QSPI),
26  PAD_CFG_SFIO(QSPI_CS_N, PINMUX_INPUT_ENABLE, QSPI),
29 };
30 
31 /********************* TPM ************************************/
32 static const struct pad_config tpm_pads[] = {
33  PAD_CFG_SFIO(GEN3_I2C_SCL, PINMUX_INPUT_ENABLE, I2C3),
34  PAD_CFG_SFIO(GEN3_I2C_SDA, PINMUX_INPUT_ENABLE, I2C3),
35 };
36 
37 static const struct funit_cfg funits[] = {
38  /* PMIC on I2C5 (PWR_I2C* pads) at 400kHz. */
40  /* SPI flash at 24MHz on QSPI controller. */
42  /* Foster has no TPM yet. This is for futurn TPM on I2C3 @ 400kHz. */
44 };
45 
46 static const struct pad_config uart_console_pads[] = {
47  /* UARTA: tx, rx, rts, cts */
48  PAD_CFG_SFIO(UART1_TX, PINMUX_PULL_NONE, UARTA),
50  PAD_CFG_SFIO(UART1_RTS, PINMUX_PULL_UP, UARTA),
51  PAD_CFG_SFIO(UART1_CTS, PINMUX_PULL_UP, UARTA),
52 };
53 
55 {
57 }
58 
59 static void set_clock_sources(void)
60 {
61  /* UARTA gets PLLP, deactivate CLK_UART_DIV_OVERRIDE */
62  write32(CLK_RST_REG(clk_src_uarta), PLLP << CLK_SOURCE_SHIFT);
63 }
64 
66 {
68 
70 
73 
74  /* Foster has no TPM yet. This is for future TPM. */
76 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
#define ARRAY_SIZE(a)
Definition: helpers.h:12
void pmic_init(unsigned int bus)
Definition: pmic.c:34
void soc_configure_funits(const struct funit_cfg *const entries, size_t num)
Definition: funitcfg.c:132
#define FUNIT_CFG(_funit, _clk_src, _clk_freq, _cfg, _cfg_size)
Definition: funitcfg.h:55
@ I2C3_BUS
Definition: funitcfg.h:36
@ I2CPWR_BUS
Definition: funitcfg.h:38
__weak void bootblock_mainboard_init(void)
Definition: bootblock.c:19
__weak void bootblock_mainboard_early_init(void)
Definition: bootblock.c:16
static const struct pad_config spiflash_pads[]
Definition: bootblock.c:21
static const struct pad_config pmic_pads[]
Definition: bootblock.c:16
static const struct funit_cfg funits[]
Definition: bootblock.c:37
static const struct pad_config tpm_pads[]
Definition: bootblock.c:32
static void set_clock_sources(void)
Definition: bootblock.c:59
static const struct pad_config uart_console_pads[]
Definition: bootblock.c:46
@ PINMUX_INPUT_ENABLE
Definition: pinmux.h:17
@ PINMUX_PULL_NONE
Definition: pinmux.h:12
@ PINMUX_PULL_UP
Definition: pinmux.h:14
#define PAD_CFG_SFIO(ball_, pinmux_flgs_, sfio_)
Definition: padconfig.h:50
void soc_configure_pads(const struct pad_config *const entries, size_t num)
Definition: padconfig.c:105
@ I2C5
Definition: i2c.h:55
@ I2C3
Definition: i2c.h:53
@ PLLP
Definition: clock.h:245
void i2c_init(unsigned int bus)
Definition: i2c.c:198
#define CLK_SOURCE_SHIFT
Definition: clk_rst.h:410
#define CLK_RST_REG(field_)
Definition: clk_rst.h:303