mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-09-20 05:11:30 +02:00
When bringing in the series 'arm: dts: am62-beagleplay: Fix Beagleplay Ethernet"' I failed to notice that b4 noticed it was based on next and so took that as the base commit and merged that part of next to master. This reverts commit c8ffd1356d42223cbb8c86280a083cc3c93e6426, reversing changes made to 2ee6f3a5f7550de3599faef9704e166e5dcace35. Reported-by: Jonas Karlman <jonas@kwiboo.se> Signed-off-by: Tom Rini <trini@konsulko.com>
162 lines
3.2 KiB
C
162 lines
3.2 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright 2019 NXP
|
|
* Copyright 2020 Linaro
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <command.h>
|
|
#include <cpu_func.h>
|
|
#include <hang.h>
|
|
#include <image.h>
|
|
#include <init.h>
|
|
#include <log.h>
|
|
#include <spl.h>
|
|
#include <asm/io.h>
|
|
#include <asm/mach-imx/iomux-v3.h>
|
|
#include <asm/arch/clock.h>
|
|
#include <asm/arch/imx8mm_pins.h>
|
|
#include <asm/arch/sys_proto.h>
|
|
#include <asm/mach-imx/boot_mode.h>
|
|
#include <asm/mach-imx/mxc_i2c.h>
|
|
#include <asm/mach-imx/gpio.h>
|
|
#include <asm/arch/ddr.h>
|
|
#include <asm/sections.h>
|
|
|
|
#include <dm/uclass.h>
|
|
#include <dm/device.h>
|
|
#include <dm/uclass-internal.h>
|
|
#include <dm/device-internal.h>
|
|
|
|
#include <power/pmic.h>
|
|
#include <power/bd71837.h>
|
|
|
|
#include "ddr/ddr.h"
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
int spl_board_boot_device(enum boot_device boot_dev_spl)
|
|
{
|
|
switch (boot_dev_spl) {
|
|
case SD2_BOOT:
|
|
case MMC2_BOOT:
|
|
return BOOT_DEVICE_MMC1;
|
|
case SD3_BOOT:
|
|
case MMC3_BOOT:
|
|
return BOOT_DEVICE_MMC2;
|
|
default:
|
|
return BOOT_DEVICE_NONE;
|
|
}
|
|
}
|
|
|
|
#define I2C_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PE)
|
|
#define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
|
|
struct i2c_pads_info i2c_pad_info1 = {
|
|
.scl = {
|
|
.i2c_mode = IMX8MM_PAD_I2C2_SCL_I2C2_SCL | PC,
|
|
.gpio_mode = IMX8MM_PAD_I2C2_SCL_GPIO5_IO16 | PC,
|
|
.gp = IMX_GPIO_NR(5, 16),
|
|
},
|
|
.sda = {
|
|
.i2c_mode = IMX8MM_PAD_I2C2_SDA_I2C2_SDA | PC,
|
|
.gpio_mode = IMX8MM_PAD_I2C2_SDA_GPIO5_IO17 | PC,
|
|
.gp = IMX_GPIO_NR(5, 17),
|
|
},
|
|
};
|
|
|
|
static void spl_dram_init(void)
|
|
{
|
|
spl_dram_init_compulab();
|
|
}
|
|
|
|
void spl_board_init(void)
|
|
{
|
|
puts("Normal Boot\n");
|
|
}
|
|
|
|
#ifdef CONFIG_SPL_LOAD_FIT
|
|
int board_fit_config_name_match(const char *name)
|
|
{
|
|
/* Just empty function now - can't decide what to choose */
|
|
debug("%s: %s\n", __func__, name);
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
static int power_init_board(void)
|
|
{
|
|
struct udevice *dev;
|
|
int ret;
|
|
|
|
ret = pmic_get("pmic@4b", &dev);
|
|
if (ret == -ENODEV) {
|
|
puts("No pmic\n");
|
|
return 0;
|
|
}
|
|
if (ret != 0)
|
|
return ret;
|
|
|
|
/* decrease RESET key long push time from the default 10s to 10ms */
|
|
pmic_reg_write(dev, BD718XX_PWRONCONFIG1, 0x0);
|
|
|
|
/* unlock the PMIC regs */
|
|
pmic_reg_write(dev, BD718XX_REGLOCK, 0x1);
|
|
|
|
/* increase VDD_SOC to typical value 0.85v before first DRAM access */
|
|
pmic_reg_write(dev, BD718XX_BUCK1_VOLT_RUN, 0x0f);
|
|
|
|
/* increase VDD_DRAM to 0.975v for 3Ghz DDR */
|
|
pmic_reg_write(dev, BD718XX_1ST_NODVS_BUCK_VOLT, 0x83);
|
|
|
|
/* increase NVCC_DRAM_1V2 to 1.2v for DDR4 */
|
|
pmic_reg_write(dev, BD718XX_4TH_NODVS_BUCK_VOLT, 0x28);
|
|
|
|
/* lock the PMIC regs */
|
|
pmic_reg_write(dev, BD718XX_REGLOCK, 0x11);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void board_init_f(ulong dummy)
|
|
{
|
|
struct udevice *dev;
|
|
int ret;
|
|
|
|
arch_cpu_init();
|
|
|
|
init_uart_clk(2);
|
|
|
|
timer_init();
|
|
|
|
/* Clear the BSS. */
|
|
memset(__bss_start, 0, __bss_end - __bss_start);
|
|
|
|
ret = spl_early_init();
|
|
if (ret) {
|
|
debug("spl_early_init() failed: %d\n", ret);
|
|
hang();
|
|
}
|
|
|
|
preloader_console_init();
|
|
|
|
ret = uclass_get_device_by_name(UCLASS_CLK,
|
|
"clock-controller@30380000",
|
|
&dev);
|
|
if (ret < 0) {
|
|
printf("Failed to find clock node. Check device tree\n");
|
|
hang();
|
|
}
|
|
|
|
enable_tzc380();
|
|
|
|
setup_i2c(1, 100000, 0x7f, &i2c_pad_info1);
|
|
|
|
power_init_board();
|
|
|
|
/* DDR initialization */
|
|
spl_dram_init();
|
|
|
|
board_init_r(NULL, 0);
|
|
}
|