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 5f188ab..0285bbd 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 379daa8..eaaa68a 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 78597ad..61a4245 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 b79a238..d87fe36 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 2fdd95a..cfc4b65 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 31a2350..b0a315b 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 0ab85d2..612b11e 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 1d416b4..1241f09 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
  *