mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 07:04:28 +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
|
||||
|
||||
#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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue