mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-13 12:26:01 +01:00
Due to a bug in the H3 SoC, where the CPU 0 hotplug flag cannot be written, resuming CPU 0 requires using the "Super Standby" code path in the BROM instead of the hotplug path. This path requires jumping to an eGON image in SRAM. Add support to the build system to generate this eGON image and include it in the FIT, and add code to direct the BROM to its location in SRAM. Since the Super Standby code path in the BROM initializes the CPU and AHB1 clocks to 24 MHz, those registers need to be restored after control passes back to U-Boot. Furthermore, because the BROM lowers the AHB1 clock divider to /1 before switching to the lower-frequency parent, PLL_PERIPH0 must be bypassed to prevent AHB1 from temporarily running at 600 MHz. Otherwise, this locks up the SoC. Signed-off-by: Samuel Holland <samuel@sholland.org>
150 lines
2.5 KiB
Plaintext
150 lines
2.5 KiB
Plaintext
#include <config.h>
|
|
|
|
#ifdef CONFIG_ARM64
|
|
#define ARCH "arm64"
|
|
#else
|
|
#define ARCH "arm"
|
|
#endif
|
|
|
|
#if defined(CONFIG_MACH_SUN8I_H3)
|
|
#ifdef CONFIG_ARMV7_PSCI
|
|
#define RESUME_ADDR SUNXI_RESUME_BASE
|
|
#endif
|
|
#elif defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H5)
|
|
#define BL31_ADDR 0x00044000
|
|
#define SCP_ADDR 0x00050000
|
|
#elif defined(CONFIG_MACH_SUN50I_H6)
|
|
#define BL31_ADDR 0x00104000
|
|
#define SCP_ADDR 0x00114000
|
|
#elif defined(CONFIG_MACH_SUN50I_H616)
|
|
#define BL31_ADDR 0x40000000
|
|
#endif
|
|
|
|
/ {
|
|
aliases {
|
|
#ifndef CONFIG_MACH_SUNIV
|
|
mmc0 = &mmc0;
|
|
#endif
|
|
#if CONFIG_MMC_SUNXI_SLOT_EXTRA == 2
|
|
mmc1 = &mmc2;
|
|
#endif
|
|
};
|
|
|
|
binman: binman {
|
|
multiple-images;
|
|
};
|
|
};
|
|
|
|
&binman {
|
|
u-boot-sunxi-with-spl {
|
|
filename = "u-boot-sunxi-with-spl.bin";
|
|
pad-byte = <0xff>;
|
|
|
|
blob {
|
|
filename = "spl/sunxi-spl.bin";
|
|
};
|
|
|
|
#ifdef CONFIG_SPL_LOAD_FIT
|
|
fit {
|
|
description = "Configuration to load U-Boot and firmware";
|
|
offset = <32768>;
|
|
#address-cells = <1>;
|
|
fit,fdt-list = "of-list";
|
|
|
|
images {
|
|
uboot {
|
|
description = "U-Boot";
|
|
type = "standalone";
|
|
os = "u-boot";
|
|
arch = ARCH;
|
|
compression = "none";
|
|
load = <CONFIG_TEXT_BASE>;
|
|
entry = <CONFIG_TEXT_BASE>;
|
|
|
|
u-boot-nodtb {
|
|
};
|
|
};
|
|
|
|
#ifdef BL31_ADDR
|
|
atf {
|
|
description = "ARM Trusted Firmware";
|
|
type = "firmware";
|
|
os = "arm-trusted-firmware";
|
|
arch = ARCH;
|
|
compression = "none";
|
|
load = <BL31_ADDR>;
|
|
entry = <BL31_ADDR>;
|
|
|
|
atf-bl31 {
|
|
filename = "bl31.bin";
|
|
missing-msg = "atf-bl31-sunxi";
|
|
};
|
|
};
|
|
#endif
|
|
|
|
#ifdef RESUME_ADDR
|
|
resume {
|
|
description = "Super Standby resume image";
|
|
type = "standalone";
|
|
arch = ARCH;
|
|
compression = "none";
|
|
load = <RESUME_ADDR>;
|
|
|
|
blob-ext {
|
|
filename = "u-boot-resume.img";
|
|
};
|
|
};
|
|
#endif
|
|
|
|
#ifdef SCP_ADDR
|
|
scp {
|
|
description = "SCP firmware";
|
|
type = "firmware";
|
|
arch = "or1k";
|
|
compression = "none";
|
|
load = <SCP_ADDR>;
|
|
|
|
scp {
|
|
filename = "scp.bin";
|
|
missing-msg = "scp-sunxi";
|
|
};
|
|
};
|
|
#endif
|
|
|
|
@fdt-SEQ {
|
|
description = "NAME";
|
|
type = "flat_dt";
|
|
compression = "none";
|
|
};
|
|
};
|
|
|
|
configurations {
|
|
default = "@config-DEFAULT-SEQ";
|
|
|
|
@config-SEQ {
|
|
description = "NAME";
|
|
#ifdef BL31_ADDR
|
|
firmware = "atf";
|
|
#else
|
|
firmware = "uboot";
|
|
#endif
|
|
loadables =
|
|
#ifdef RESUME_ADDR
|
|
"resume",
|
|
#endif
|
|
#ifdef SCP_ADDR
|
|
"scp",
|
|
#endif
|
|
"uboot";
|
|
fdt = "fdt-SEQ";
|
|
};
|
|
};
|
|
};
|
|
#else
|
|
u-boot-img {
|
|
offset = <32768>;
|
|
};
|
|
#endif
|
|
};
|
|
};
|