mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-24 06:24:17 +00:00
spl: mmc: Introduce proper layering for spl_mmc_get_uboot_raw_sector()
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>
This commit is contained in:
parent
fb2bdc4efc
commit
e936db9536
8 changed files with 48 additions and 10 deletions
|
@ -276,8 +276,8 @@ unsigned long spl_spi_get_uboot_offs(struct spi_flash *flash)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SPL_MMC
|
#ifdef CONFIG_SPL_MMC
|
||||||
unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
||||||
unsigned long raw_sect)
|
unsigned long raw_sect)
|
||||||
{
|
{
|
||||||
int end;
|
int end;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
return IS_SD(mmc) ? MMCSD_MODE_RAW : MMCSD_MODE_EMMCBOOT;
|
||||||
}
|
}
|
||||||
unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
||||||
unsigned long raw_sect)
|
unsigned long raw_sect)
|
||||||
{
|
{
|
||||||
return IS_SD(mmc) ? 1 : 0;
|
return IS_SD(mmc) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
* Also U-Boot proper is located at least 32KB after the SPL, but will
|
||||||
* immediately follow the SPL if that is bigger than that.
|
* immediately follow the SPL if that is bigger than that.
|
||||||
*/
|
*/
|
||||||
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_sect)
|
unsigned long raw_sect)
|
||||||
{
|
{
|
||||||
unsigned long spl_size = sunxi_get_spl_size();
|
unsigned long spl_size = sunxi_get_spl_size();
|
||||||
unsigned long sector;
|
unsigned long sector;
|
||||||
|
|
|
@ -193,7 +193,7 @@ int board_late_init(void)
|
||||||
|
|
||||||
#ifdef CONFIG_SPL_MMC
|
#ifdef CONFIG_SPL_MMC
|
||||||
#define UBOOT_RAW_SECTOR_OFFSET 0x40
|
#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)
|
unsigned long raw_sector)
|
||||||
{
|
{
|
||||||
u32 boot_dev = spl_boot_device();
|
u32 boot_dev = spl_boot_device();
|
||||||
|
|
|
@ -107,7 +107,7 @@ void board_boot_order(u32 *spl_boot_list)
|
||||||
spl_boot_list[4] = BOOT_DEVICE_NONE;
|
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();
|
const u32 boot_dev = spl_boot_device();
|
||||||
int part;
|
int part;
|
||||||
|
|
|
@ -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)) {
|
if (!IS_SD(mmc)) {
|
||||||
switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
|
switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
|
||||||
|
|
|
@ -361,10 +361,22 @@ int __weak spl_mmc_boot_partition(const u32 boot_device)
|
||||||
}
|
}
|
||||||
#endif
|
#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 __weak spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
||||||
unsigned long raw_sect)
|
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)
|
int default_spl_mmc_emmc_boot_partition(struct mmc *mmc)
|
||||||
|
|
|
@ -486,6 +486,32 @@ int spl_mmc_emmc_boot_partition(struct mmc *mmc);
|
||||||
|
|
||||||
void spl_set_bd(void);
|
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
|
* spl_mmc_get_uboot_raw_sector() - Provide raw sector of the start of U-Boot
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue