Merge patch series "vbe: Series part D"

Simon Glass <sjg@chromium.org> says:

This includes various patches towards implementing the VBE abrec
bootmeth in U-Boot.
This commit is contained in:
Tom Rini 2024-10-03 11:52:42 -06:00
commit 0d28900dd1
17 changed files with 91 additions and 29 deletions

View file

@ -13,8 +13,10 @@
MEMORY { .sram : ORIGIN = IMAGE_TEXT_BASE,
LENGTH = IMAGE_MAX_SIZE }
#ifdef CONFIG_SPL_SEPARATE_BSS
MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR,
LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
#endif
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
@ -56,12 +58,22 @@ SECTIONS
_end = .;
_image_binary_end = .;
#ifdef CONFIG_SPL_SEPARATE_BSS
.bss : {
__bss_start = .;
*(.bss*)
. = ALIGN(8);
__bss_end = .;
} >.sdram
#else
.bss (NOLOAD) : {
__bss_start = .;
*(.bss*)
. = ALIGN(8);
__bss_end = .;
} >.sram
#endif
__bss_size = __bss_end - __bss_start;
/DISCARD/ : { *(.rela*) }
/DISCARD/ : { *(.dynsym) }

View file

@ -4,8 +4,6 @@
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*/
/* for now: just dummy functions to satisfy the linker */
#include <config.h>
#include <cpu_func.h>
#include <log.h>

View file

@ -5,7 +5,7 @@
#include <linux/compiler.h>
/**
* These two symbols are declared in a C file so that the linker
* These symbols are declared in a C file so that the linker
* uses R_ARM_RELATIVE relocation, rather than the R_ARM_ABS32 one
* it would use if the symbols were defined in the linker file.
* Using only R_ARM_RELATIVE relocation ensures that references to

View file

@ -10,6 +10,7 @@
#define __SANDBOX_SECTIONS_H
#include <asm-generic/sections.h>
#include <linux/compiler_attributes.h>
struct sandbox_cmdline_option;

View file

@ -50,6 +50,7 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image,
ret = spl_load(spl_image, bootdev, &load, 0, sector << bd->log2blksz);
if (ret) {
puts("mmc_load_image_raw_sector: mmc block read error\n");
log_debug("(error=%d)\n", ret);
return ret;
}
@ -76,6 +77,12 @@ static int spl_mmc_find_device(struct mmc **mmcp, int mmc_dev)
int ret;
#if CONFIG_IS_ENABLED(DM_MMC)
struct udevice *dev;
struct uclass *uc;
log_debug("Selecting MMC dev %d; seqs:\n", mmc_dev);
uclass_id_foreach_dev(UCLASS_MMC, dev, uc)
log_debug("%d: %s\n", dev_seq(dev), dev->name);
ret = mmc_init_device(mmc_dev);
#else
ret = mmc_initialize(NULL);
@ -91,6 +98,9 @@ static int spl_mmc_find_device(struct mmc **mmcp, int mmc_dev)
mmc_dev, ret);
return ret;
}
#if CONFIG_IS_ENABLED(DM_MMC)
log_debug("mmc %d: %s\n", mmc_dev, (*mmcp)->dev->name);
#endif
return 0;
}
@ -342,6 +352,8 @@ int spl_mmc_load(struct spl_image_info *spl_image,
/* Perform peripheral init only once for an mmc device */
mmc_dev = spl_mmc_get_device_index(bootdev->boot_device);
log_debug("boot_device=%d, mmc_dev=%d\n", bootdev->boot_device,
mmc_dev);
if (!mmc || spl_mmc_get_mmc_devnum(mmc) != mmc_dev) {
ret = spl_mmc_find_device(&mmc, mmc_dev);
if (ret)

View file

@ -152,6 +152,14 @@ config SPL_DM_SEQ_ALIAS
numbered devices (e.g. serial0 = &serial0). This feature can be
disabled if it is not required, to save code space in SPL.
config TPL_DM_SEQ_ALIAS
bool "Support numbered aliases in device tree in TPL"
depends on TPL_DM
help
Most boards will have a '/aliases' node containing the path to
numbered devices (e.g. serial0 = &serial0). This feature can be
disabled if it is not required, to save code space in SPL.
config VPL_DM_SEQ_ALIAS
bool "Support numbered aliases in device tree in VPL"
depends on VPL_DM

View file

@ -68,7 +68,7 @@ obj-$(CONFIG_QFW_MMIO) += qfw_mmio.o
obj-$(CONFIG_QFW_SMBIOS) += qfw_smbios.o
obj-$(CONFIG_SANDBOX) += qfw_sandbox.o
endif
obj-$(CONFIG_ROCKCHIP_EFUSE) += rockchip-efuse.o
obj-$(CONFIG_$(SPL_TPL_)ROCKCHIP_EFUSE) += rockchip-efuse.o
obj-$(CONFIG_ROCKCHIP_OTP) += rockchip-otp.o
obj-$(CONFIG_$(SPL_TPL_)ROCKCHIP_IODOMAIN) += rockchip-io-domain.o
obj-$(CONFIG_SANDBOX) += syscon_sandbox.o misc_sandbox.o

View file

@ -61,6 +61,17 @@ config SPL_DM_MMC
appear as block devices in U-Boot and can support filesystems such
as EXT4 and FAT.
config TPL_DM_MMC
bool "Enable MMC controllers using Driver Model in TPL"
depends on TPL_DM && DM_MMC
select TPL_BLK
help
This enables the MultiMediaCard (MMC) uclass which supports MMC and
Secure Digital I/O (SDIO) cards. Both removable (SD, micro-SD, etc.)
and non-removable (e.g. eMMC chip) devices are supported. These
appear as block devices in U-Boot and can support filesystems such
as EXT4 and FAT.
if MMC
config MMC_SDHCI_ADMA_HELPERS

View file

@ -3213,7 +3213,7 @@ int mmc_init_device(int num)
if (uclass_get_device_by_seq(UCLASS_MMC, num, &dev)) {
ret = uclass_get_device(UCLASS_MMC, num, &dev);
if (ret)
return ret;
return log_msg_ret("ini", ret);
}
m = mmc_get_mmc_dev(dev);

View file

@ -80,7 +80,7 @@ static int rockchip_dwmmc_of_to_plat(struct udevice *dev)
priv->fifo_depth = dev_read_u32_default(dev, "fifo-depth", 0);
if (priv->fifo_depth < 0)
return -EINVAL;
return log_msg_ret("rkp", -EINVAL);
priv->fifo_mode = dev_read_bool(dev, "fifo-mode");
#ifdef CONFIG_SPL_BUILD
@ -96,7 +96,7 @@ static int rockchip_dwmmc_of_to_plat(struct udevice *dev)
int val = dev_read_u32_default(dev, "max-frequency", -EINVAL);
if (val < 0)
return val;
return log_msg_ret("rkc", val);
priv->minmax[0] = 400000; /* 400 kHz */
priv->minmax[1] = val;
@ -131,13 +131,11 @@ static int rockchip_dwmmc_probe(struct udevice *dev)
priv->minmax[1] = dtplat->max_frequency;
ret = clk_get_by_phandle(dev, &dtplat->clocks[1], &priv->clk);
if (ret < 0)
return ret;
#else
ret = clk_get_by_index(dev, 1, &priv->clk);
if (ret < 0)
return ret;
#endif
if (ret < 0 && ret != -ENOSYS)
return log_msg_ret("clk", ret);
host->fifo_depth = priv->fifo_depth;
host->fifo_mode = priv->fifo_mode;

View file

@ -230,7 +230,7 @@ static int rk3399_emmc_get_phy(struct udevice *dev)
grf_base = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
if (IS_ERR_OR_NULL(grf_base)) {
printf("%s Get syscon grf failed", __func__);
printf("%s: Get syscon grf failed\n", __func__);
return -ENODEV;
}
grf_phy_offset = ofnode_read_u32_default(phy_node, "reg", 0);
@ -571,20 +571,19 @@ static int rockchip_sdhci_probe(struct udevice *dev)
struct rockchip_sdhc *priv = dev_get_priv(dev);
struct mmc_config *cfg = &plat->cfg;
struct sdhci_host *host = &priv->host;
struct clk clk;
struct clk *clk = &priv->emmc_clk;
int ret;
host->max_clk = cfg->f_max;
ret = clk_get_by_index(dev, 0, &clk);
ret = clk_get_by_index(dev, 0, clk);
if (!ret) {
ret = clk_set_rate(&clk, host->max_clk);
ret = clk_set_rate(clk, host->max_clk);
if (IS_ERR_VALUE(ret))
printf("%s clk set rate fail!\n", __func__);
} else {
} else if (ret != -ENOSYS) {
printf("%s fail to get clk\n", __func__);
}
priv->emmc_clk = clk;
priv->dev = dev;
if (data->get_phy) {

View file

@ -26,6 +26,15 @@ config TPL_RAM
TPL, enable this option. It might provide a cleaner interface to
setting up RAM (e.g. SDRAM / DDR) within TPL.
config VPL_RAM
bool "Enable RAM support in VPL"
depends on RAM && VPL
help
The RAM subsystem adds a small amount of overhead to the image.
If this is acceptable and you have a need to use RAM drivers in
VPL, enable this option. It might provide a cleaner interface to
setting up RAM (e.g. SDRAM / DDR) within VPL.
config STM32_SDRAM
bool "Enable STM32 SDRAM support"
depends on RAM

View file

@ -539,6 +539,13 @@ config TPL_DEBUG_UART_BASE
help
This is the base address of your UART for memory-mapped UARTs for TPL.
config VPL_DEBUG_UART_BASE
hex "Base address of UART for VPL"
depends on VPL && DEBUG_UART
default DEBUG_UART_BASE
help
This is the base address of your UART for memory-mapped UARTs for VPL.
config DEBUG_UART_CLOCK
int "UART input clock"
depends on DEBUG_UART

View file

@ -395,6 +395,7 @@ int bootdev_next_prio(struct bootflow_iter *iter, struct udevice **devp);
*/
int bootdev_setup_for_dev(struct udevice *parent, const char *drv_name);
#if CONFIG_IS_ENABLED(BOOTSTD)
/**
* bootdev_setup_for_sibling_blk() - Bind a new bootdev device for a blk device
*
@ -409,6 +410,13 @@ int bootdev_setup_for_dev(struct udevice *parent, const char *drv_name);
* Return: 0 if OK, -ve on error
*/
int bootdev_setup_for_sibling_blk(struct udevice *blk, const char *drv_name);
#else
static int bootdev_setup_for_sibling_blk(struct udevice *blk,
const char *drv_name)
{
return 0;
}
#endif
/**
* bootdev_get_sibling_blk() - Locate the block device for a bootdev

View file

@ -28,7 +28,8 @@ int gzip_parse_header(const unsigned char *src, unsigned long len);
* @dst: Destination for uncompressed data
* @dstlen: Size of destination buffer
* @src: Source data to decompress
* @lenp: Returns length of uncompressed data
* @lenp: On entry, length of data at @src. On exit, number of bytes used from
* @src
* Return: 0 if OK, -1 on error
*/
int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp);
@ -39,7 +40,8 @@ int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp);
* @dst: Destination for uncompressed data
* @dstlen: Size of destination buffer
* @src: Source data to decompress
* @lenp: On entry, length data at @src. On exit, number of bytes used from @src
* @lenp: On entry, length of data at @src. On exit, number of bytes used from
* @src
* @stoponerr: 0 to continue when a decode error is found, 1 to stop
* @offset: start offset within the src buffer
* Return: 0 if OK, -1 on error

View file

@ -1232,7 +1232,7 @@ static void *fdt_find_separate(void)
#ifdef CONFIG_SPL_BUILD
/* FDT is at end of BSS unless it is in a different memory region */
if (IS_ENABLED(CONFIG_SPL_SEPARATE_BSS))
if (CONFIG_IS_ENABLED(SEPARATE_BSS))
fdt_blob = (ulong *)_image_binary_end;
else
fdt_blob = (ulong *)__bss_end;

View file

@ -365,16 +365,15 @@ int sprintf(char *buf, const char *fmt, ...)
{
struct printf_info info;
va_list va;
int ret;
va_start(va, fmt);
info.outstr = buf;
info.putc = putc_outstr;
ret = _vprintf(&info, fmt, va);
_vprintf(&info, fmt, va);
va_end(va);
*info.outstr = '\0';
return ret;
return info.outstr - buf;
}
#if CONFIG_IS_ENABLED(LOG)
@ -382,14 +381,13 @@ int sprintf(char *buf, const char *fmt, ...)
int vsnprintf(char *buf, size_t size, const char *fmt, va_list va)
{
struct printf_info info;
int ret;
info.outstr = buf;
info.putc = putc_outstr;
ret = _vprintf(&info, fmt, va);
_vprintf(&info, fmt, va);
*info.outstr = '\0';
return ret;
return info.outstr - buf;
}
#endif
@ -398,16 +396,15 @@ int snprintf(char *buf, size_t size, const char *fmt, ...)
{
struct printf_info info;
va_list va;
int ret;
va_start(va, fmt);
info.outstr = buf;
info.putc = putc_outstr;
ret = _vprintf(&info, fmt, va);
_vprintf(&info, fmt, va);
va_end(va);
*info.outstr = '\0';
return ret;
return info.outstr - buf;
}
void print_grouped_ull(unsigned long long int_val, int digits)