]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
spl: mmc: Introduce proper layering for spl_mmc_get_uboot_raw_sector()
authorMarek Vasut <marex@denx.de>
Mon, 16 Oct 2023 16:16:12 +0000 (18:16 +0200)
committerStefano Babic <sbabic@denx.de>
Tue, 17 Oct 2023 21:55:10 +0000 (23:55 +0200)
Introduce two new weak functions, arch_spl_mmc_get_uboot_raw_sector() and
board_spl_mmc_get_uboot_raw_sector(), each of which can be overridden at
a matching level, that is arch/ and board/ , in addition to the existing
weak function spl_mmc_get_uboot_raw_sector().

This way, architecture code can define a default architecture specific
implementation of arch_spl_mmc_get_uboot_raw_sector(), while the board
code can override that using board_spl_mmc_get_uboot_raw_sector() which
takes precedence over the architecture code. In some sort of unlikely
special case where code has to take precedence over board code too, the
spl_mmc_get_uboot_raw_sector() is still left out to be a weak function,
but it should be unlikely that this is ever needed to be overridden.

Signed-off-by: Marek Vasut <marex@denx.de>
arch/arm/mach-imx/image-container.c
arch/arm/mach-mvebu/spl.c
arch/arm/mach-sunxi/board.c
board/advantech/imx8mp_rsb3720a1/imx8mp_rsb3720a1.c
board/data_modul/imx8mp_edm_sbc/spl.c
board/gateworks/venice/spl.c
common/spl/spl_mmc.c
include/spl.h

index 5f188ab32d18fc54f27a90c3dc2fb80163806307..0285bbdaf20e7c8501d954fee5df3371ad6a2d0f 100644 (file)
@@ -276,8 +276,8 @@ unsigned long spl_spi_get_uboot_offs(struct spi_flash *flash)
 #endif
 
 #ifdef CONFIG_SPL_MMC
-unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
-                                          unsigned long raw_sect)
+unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                               unsigned long raw_sect)
 {
        int end;
 
index 379daa88a4d86d90b93299978b3d930da58febaa..eaaa68a85642290681fbb0591d3739b5172f9eab 100644 (file)
@@ -123,8 +123,8 @@ u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        return IS_SD(mmc) ? MMCSD_MODE_RAW : MMCSD_MODE_EMMCBOOT;
 }
-unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
-                                          unsigned long raw_sect)
+unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                               unsigned long raw_sect)
 {
        return IS_SD(mmc) ? 1 : 0;
 }
index 78597ad932c486ebc124356383ee34439f8d9a4e..61a4245c4993fa3c9619ef6458448513a608948b 100644 (file)
@@ -323,8 +323,8 @@ uint32_t sunxi_get_spl_size(void)
  * Also U-Boot proper is located at least 32KB after the SPL, but will
  * immediately follow the SPL if that is bigger than that.
  */
-unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
-                                          unsigned long raw_sect)
+unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                                unsigned long raw_sect)
 {
        unsigned long spl_size = sunxi_get_spl_size();
        unsigned long sector;
index b79a2380aa5b63cf38cde3ff24a3a43d450472d1..d87fe3606f6a5c628ae912f782cfb58a9366b411 100644 (file)
@@ -193,7 +193,7 @@ int board_late_init(void)
 
 #ifdef CONFIG_SPL_MMC
 #define UBOOT_RAW_SECTOR_OFFSET 0x40
-unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
                                           unsigned long raw_sector)
 {
        u32 boot_dev = spl_boot_device();
index 2fdd95a730c821ece8a129cd087aa1465a8e0907..cfc4b65e0f9a3a3c1881b51d8b653e2da58dcd76 100644 (file)
@@ -107,7 +107,7 @@ void board_boot_order(u32 *spl_boot_list)
        spl_boot_list[4] = BOOT_DEVICE_NONE;
 }
 
-unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc, unsigned long sect)
+unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc, unsigned long sect)
 {
        const u32 boot_dev = spl_boot_device();
        int part;
index 31a235041758af81aecae8e54e8dc3771686ebb6..b0a315ba9531f1779d774008da0e017066918797 100644 (file)
@@ -346,7 +346,7 @@ int spl_board_boot_device(enum boot_device boot_dev_spl)
        }
 }
 
-unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc, unsigned long raw_sect)
+unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc, unsigned long raw_sect)
 {
        if (!IS_SD(mmc)) {
                switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
index 0ab85d2168c19b6a984bc6defc80392f700be0ea..612b11ef5b9e4c47fe9b0e10721cb23dd3e22660 100644 (file)
@@ -361,10 +361,22 @@ int __weak spl_mmc_boot_partition(const u32 boot_device)
 }
 #endif
 
+unsigned long __weak arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                                      unsigned long raw_sect)
+{
+       return raw_sect;
+}
+
+unsigned long __weak board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                                 unsigned long raw_sect)
+{
+       return arch_spl_mmc_get_uboot_raw_sector(mmc, raw_sect);
+}
+
 unsigned long __weak spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
                                                  unsigned long raw_sect)
 {
-       return raw_sect;
+       return board_spl_mmc_get_uboot_raw_sector(mmc, raw_sect);
 }
 
 int default_spl_mmc_emmc_boot_partition(struct mmc *mmc)
index 1d416b4c9296cb0354b6044ae21b01fdbb681dc0..1241f0912376e2cf58ded4648f2fd76c7679ab7c 100644 (file)
@@ -486,6 +486,32 @@ int spl_mmc_emmc_boot_partition(struct mmc *mmc);
 
 void spl_set_bd(void);
 
+/**
+ * spl_mmc_get_uboot_raw_sector() - Provide raw sector of the start of U-Boot (architecture override)
+ *
+ * This is a weak function which by default will provide the raw sector that is
+ * where the start of the U-Boot image has been written to.
+ *
+ * @mmc: struct mmc that describes the devie where U-Boot resides
+ * @raw_sect: The raw sector number where U-Boot is by default.
+ * Return: The raw sector location that U-Boot resides at
+ */
+unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                               unsigned long raw_sect);
+
+/**
+ * spl_mmc_get_uboot_raw_sector() - Provide raw sector of the start of U-Boot (board override)
+ *
+ * This is a weak function which by default will provide the raw sector that is
+ * where the start of the U-Boot image has been written to.
+ *
+ * @mmc: struct mmc that describes the devie where U-Boot resides
+ * @raw_sect: The raw sector number where U-Boot is by default.
+ * Return: The raw sector location that U-Boot resides at
+ */
+unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                                unsigned long raw_sect);
+
 /**
  * spl_mmc_get_uboot_raw_sector() - Provide raw sector of the start of U-Boot
  *