diff options
author | Tom Rini <trini@konsulko.com> | 2024-10-03 11:52:42 -0600 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-10-03 11:52:42 -0600 |
commit | 0d28900dd171d3444ea16d9cc18af35a90c03e27 (patch) | |
tree | 246e8a9bb1b15c7c2791f6a8b60e6420bcf35216 | |
parent | 08990e2254ffd63ade7f633b78b6573abc9b7e90 (diff) | |
parent | fe38b88453d2ed40e1009d22f3f4d4213d2016b7 (diff) |
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.
-rw-r--r-- | arch/arm/cpu/armv8/u-boot-spl.lds | 12 | ||||
-rw-r--r-- | arch/arm/lib/cache.c | 2 | ||||
-rw-r--r-- | arch/arm/lib/sections.c | 2 | ||||
-rw-r--r-- | arch/sandbox/include/asm/sections.h | 1 | ||||
-rw-r--r-- | common/spl/spl_mmc.c | 12 | ||||
-rw-r--r-- | drivers/core/Kconfig | 8 | ||||
-rw-r--r-- | drivers/misc/Makefile | 2 | ||||
-rw-r--r-- | drivers/mmc/Kconfig | 11 | ||||
-rw-r--r-- | drivers/mmc/mmc.c | 2 | ||||
-rw-r--r-- | drivers/mmc/rockchip_dw_mmc.c | 10 | ||||
-rw-r--r-- | drivers/mmc/rockchip_sdhci.c | 11 | ||||
-rw-r--r-- | drivers/ram/Kconfig | 9 | ||||
-rw-r--r-- | drivers/serial/Kconfig | 7 | ||||
-rw-r--r-- | include/bootdev.h | 8 | ||||
-rw-r--r-- | include/gzip.h | 6 | ||||
-rw-r--r-- | lib/fdtdec.c | 2 | ||||
-rw-r--r-- | lib/tiny-printf.c | 15 |
17 files changed, 91 insertions, 29 deletions
diff --git a/arch/arm/cpu/armv8/u-boot-spl.lds b/arch/arm/cpu/armv8/u-boot-spl.lds index 215cedd69a8..fed69644b55 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 @@ 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) } diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c index b2ae74a59f1..648edf308f6 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 07efabaa7dc..8955aa6111c 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 88837bb35c8..5e1577419b0 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 1337596eca0..1f696593216 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -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) diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig index c39abe3bc94..6b4330fe4ea 100644 --- a/drivers/core/Kconfig +++ b/drivers/core/Kconfig @@ -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 diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index e53d52c47b3..ff984d7b191 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -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 diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index 982e84dc3bc..22c65681f0a 100644 --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig @@ -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 diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 96b0e20d669..d4f2fd5bf89 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -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); diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c index fb77b049834..5ba99d68b7d 100644 --- a/drivers/mmc/rockchip_dw_mmc.c +++ b/drivers/mmc/rockchip_dw_mmc.c @@ -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; diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c index 35667b86b50..4ea3307ed9c 100644 --- a/drivers/mmc/rockchip_sdhci.c +++ b/drivers/mmc/rockchip_sdhci.c @@ -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) { diff --git a/drivers/ram/Kconfig b/drivers/ram/Kconfig index a64d2dff68d..f7e357f24da 100644 --- a/drivers/ram/Kconfig +++ b/drivers/ram/Kconfig @@ -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 diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 3a1e5a6f287..8b27ad9a77e 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -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 diff --git a/include/bootdev.h b/include/bootdev.h index 2cee8832d26..ad4af0d1310 100644 --- a/include/bootdev.h +++ b/include/bootdev.h @@ -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 diff --git a/include/gzip.h b/include/gzip.h index 5e0d0ec07fb..304002ffc42 100644 --- a/include/gzip.h +++ b/include/gzip.h @@ -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 diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 5edc8dd2f9f..106bb406365 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -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; diff --git a/lib/tiny-printf.c b/lib/tiny-printf.c index 9a70c6095b3..64dee779c4a 100644 --- a/lib/tiny-printf.c +++ b/lib/tiny-printf.c @@ -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) |