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.
diff --git a/arch/arm/cpu/armv8/u-boot-spl.lds b/arch/arm/cpu/armv8/u-boot-spl.lds
index 215cedd..fed6964 100644
--- a/arch/arm/cpu/armv8/u-boot-spl.lds
+++ b/arch/arm/cpu/armv8/u-boot-spl.lds
@@ -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 @@
_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) }
diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
index b2ae74a..648edf3 100644
--- a/arch/arm/lib/cache.c
+++ b/arch/arm/lib/cache.c
@@ -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>
diff --git a/arch/arm/lib/sections.c b/arch/arm/lib/sections.c
index 07efaba..8955aa6 100644
--- a/arch/arm/lib/sections.c
+++ b/arch/arm/lib/sections.c
@@ -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
diff --git a/arch/sandbox/include/asm/sections.h b/arch/sandbox/include/asm/sections.h
index 88837bb..5e15774 100644
--- a/arch/sandbox/include/asm/sections.h
+++ b/arch/sandbox/include/asm/sections.h
@@ -10,6 +10,7 @@
#define __SANDBOX_SECTIONS_H
#include <asm-generic/sections.h>
+#include <linux/compiler_attributes.h>
struct sandbox_cmdline_option;
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index 1337596..1f69659 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -50,6 +50,7 @@
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 @@
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 @@
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 @@
/* 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)
diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig
index c39abe3..6b4330f 100644
--- a/drivers/core/Kconfig
+++ b/drivers/core/Kconfig
@@ -152,6 +152,14 @@
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
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index e53d52c..ff984d7 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -68,7 +68,7 @@
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
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index 982e84d..22c6568 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -61,6 +61,17 @@
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
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 96b0e20..d4f2fd5 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -3213,7 +3213,7 @@
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);
diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
index fb77b04..5ba99d6 100644
--- a/drivers/mmc/rockchip_dw_mmc.c
+++ b/drivers/mmc/rockchip_dw_mmc.c
@@ -80,7 +80,7 @@
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 @@
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 @@
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;
diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c
index 35667b8..4ea3307 100644
--- a/drivers/mmc/rockchip_sdhci.c
+++ b/drivers/mmc/rockchip_sdhci.c
@@ -230,7 +230,7 @@
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 @@
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) {
diff --git a/drivers/ram/Kconfig b/drivers/ram/Kconfig
index a64d2df..f7e357f 100644
--- a/drivers/ram/Kconfig
+++ b/drivers/ram/Kconfig
@@ -26,6 +26,15 @@
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
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 3a1e5a6..8b27ad9 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -539,6 +539,13 @@
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
diff --git a/include/bootdev.h b/include/bootdev.h
index 2cee883..ad4af0d 100644
--- a/include/bootdev.h
+++ b/include/bootdev.h
@@ -395,6 +395,7 @@
*/
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 @@
* 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
diff --git a/include/gzip.h b/include/gzip.h
index 5e0d0ec..304002f 100644
--- a/include/gzip.h
+++ b/include/gzip.h
@@ -28,7 +28,8 @@
* @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 @@
* @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
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 5edc8dd..106bb40 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -1232,7 +1232,7 @@
#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;
diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c
index 9a70c60..64dee77 100644
--- a/lib/tiny-printf.c
+++ b/lib/tiny-printf.c
@@ -365,16 +365,15 @@
{
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 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 @@
{
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)