mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-25 13:14:19 +08:00
board: gateworks: venice: dynamically update the update_firmware script
The update_firmware script is intended to update the boot firmware but the details including the offset and hardware partition are dependent on the boot device. Specifically: - IMX8MM/IMX8MP (BOOTROM v2) the offset is 32KiB for SD and eMMC user hardware partition and 0KiB for eMMC boot partitions. - IMX8MM the offset is 33KiB for SD and eMMC regardless of hardware partition. Dynamically set soc, dev, bootpart, and bootblk env vars at runtime and use these in the update_firmware script. Remove the splblk env var from config files as its no longer needed. Signed-off-by: Tim Harvey <tharvey@gateworks.com>
This commit is contained in:
parent
2c2cc1eaab
commit
7b39e5b53a
@ -6,10 +6,12 @@
|
||||
#include <fdt_support.h>
|
||||
#include <init.h>
|
||||
#include <led.h>
|
||||
#include <mmc.h>
|
||||
#include <miiphy.h>
|
||||
#include <mmc.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
|
||||
#include "eeprom.h"
|
||||
|
||||
@ -94,10 +96,12 @@ int board_init(void)
|
||||
int board_late_init(void)
|
||||
{
|
||||
const char *str;
|
||||
struct mmc *mmc = NULL;
|
||||
char env[32];
|
||||
int ret, i;
|
||||
u8 enetaddr[6];
|
||||
char fdt[64];
|
||||
int bootdev;
|
||||
|
||||
/* Set board serial/model */
|
||||
if (!env_get("serial#"))
|
||||
@ -132,6 +136,73 @@ int board_late_init(void)
|
||||
i++;
|
||||
} while (!ret);
|
||||
|
||||
/*
|
||||
* set bootdev/bootblk/bootpart (used in firmware_update script)
|
||||
* dynamically depending on boot device and SoC
|
||||
*/
|
||||
bootdev = -1;
|
||||
switch (get_boot_device()) {
|
||||
case SD1_BOOT:
|
||||
case MMC1_BOOT: /* SDHC1 */
|
||||
bootdev = 0;
|
||||
break;
|
||||
case SD2_BOOT:
|
||||
case MMC2_BOOT: /* SDHC2 */
|
||||
bootdev = 1;
|
||||
break;
|
||||
case SD3_BOOT:
|
||||
case MMC3_BOOT: /* SDHC3 */
|
||||
bootdev = 2;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (bootdev != -1)
|
||||
mmc = find_mmc_device(bootdev);
|
||||
if (mmc) {
|
||||
int bootblk;
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX8MN) || IS_ENABLED(CONFIG_IMX8MP))
|
||||
bootblk = 32 * SZ_1K / 512;
|
||||
else
|
||||
bootblk = 33 * SZ_1K / 512;
|
||||
mmc_init(mmc);
|
||||
if (!IS_SD(mmc)) {
|
||||
int bootpart;
|
||||
|
||||
switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
|
||||
case 1: /* boot0 */
|
||||
bootpart = 1;
|
||||
break;
|
||||
case 2: /* boot1 */
|
||||
bootpart = 2;
|
||||
break;
|
||||
case 7: /* user */
|
||||
default:
|
||||
bootpart = 0;
|
||||
break;
|
||||
}
|
||||
/* IMX8MP/IMX8MN BOOTROM v2 uses offset=0 for boot parts */
|
||||
if ((IS_ENABLED(CONFIG_IMX8MN) || IS_ENABLED(CONFIG_IMX8MP)) &&
|
||||
(bootpart == 1 || bootpart == 2))
|
||||
bootblk = 0;
|
||||
env_set_hex("bootpart", bootpart);
|
||||
env_set_hex("bootblk", bootblk);
|
||||
} else { /* SD */
|
||||
env_set("bootpart", "");
|
||||
env_set_hex("bootblk", bootblk);
|
||||
}
|
||||
env_set_hex("dev", bootdev);
|
||||
}
|
||||
|
||||
/* override soc=imx8m to provide a more specific soc name */
|
||||
if (IS_ENABLED(CONFIG_IMX8MN))
|
||||
env_set("soc", "imx8mn");
|
||||
else if (IS_ENABLED(CONFIG_IMX8MP))
|
||||
env_set("soc", "imx8mp");
|
||||
else if (IS_ENABLED(CONFIG_IMX8MM))
|
||||
env_set("soc", "imx8mm");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -8,11 +8,11 @@ bootm_size=0x10000000
|
||||
dev=2
|
||||
preboot=gsc wd-disable
|
||||
console=ttymxc1,115200
|
||||
update_firmware=tftpboot $loadaddr $image &&
|
||||
update_firmware=tftpboot $loadaddr $dir/venice-$soc-flash.bin &&
|
||||
setexpr blkcnt $filesize + 0x1ff &&
|
||||
setexpr blkcnt $blkcnt / 0x200 &&
|
||||
mmc dev $dev &&
|
||||
mmc write $loadaddr $splblk $blkcnt
|
||||
mmc dev $dev $bootpart &&
|
||||
mmc write $loadaddr $bootblk $blkcnt
|
||||
loadfdt=if $fsload $fdt_addr_r $dir/$fdt_file1;
|
||||
then echo loaded $fdt_file1;
|
||||
elif $fsload $fdt_addr_r $dir/$fdt_file2;
|
||||
|
@ -26,7 +26,6 @@
|
||||
func(DHCP, dhcp, na)
|
||||
#include <config_distro_bootcmd.h>
|
||||
#define CFG_EXTRA_ENV_SETTINGS \
|
||||
"splblk=0x42\0" \
|
||||
BOOTENV
|
||||
|
||||
#define CFG_SYS_INIT_RAM_ADDR 0x40000000
|
||||
|
@ -20,7 +20,6 @@
|
||||
func(DHCP, dhcp, na)
|
||||
#include <config_distro_bootcmd.h>
|
||||
#define CFG_EXTRA_ENV_SETTINGS \
|
||||
"splblk=0x40\0" \
|
||||
BOOTENV
|
||||
|
||||
#define CFG_SYS_INIT_RAM_ADDR 0x40000000
|
||||
|
@ -20,7 +20,6 @@
|
||||
func(DHCP, dhcp, na)
|
||||
#include <config_distro_bootcmd.h>
|
||||
#define CFG_EXTRA_ENV_SETTINGS \
|
||||
"splblk=0x40\0" \
|
||||
BOOTENV
|
||||
|
||||
#define CFG_SYS_INIT_RAM_ADDR 0x40000000
|
||||
|
Loading…
Reference in New Issue
Block a user