mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 09:54:35 +00:00
Merge patch series "Enable EFI capsule updates for PHYTEC K3 SoMs"
Wadim Egorov <w.egorov@phytec.de> says: This implements capsule updates for all our K3 SoMs for eMMC, OSPI NOR and uSD cards. We can use capsule updates to update the bootloader on all our supported flash devices. Link: https://lore.kernel.org/r/20241127121736.1525948-1-w.egorov@phytec.de
This commit is contained in:
commit
7917841b00
7 changed files with 183 additions and 0 deletions
|
@ -137,6 +137,20 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
#include "k3-binman-capsule-r5.dtsi"
|
||||
|
||||
&capsule_tiboot3 {
|
||||
efi-capsule {
|
||||
/*
|
||||
* The GUID is generated dynamically by taking a namespace UUID and hashing
|
||||
* it with the board compatible and fw_image name:
|
||||
* mkeficapsule guidgen k3-am625-r5-phycore-som-2gb.dtb PHYCORE_AM62X_TIBOOT3
|
||||
*/
|
||||
image-guid = "C7D64D6D-10B2-54BC-A3BF-06A9DC3653D9";
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* CONFIG_TARGET_PHYCORE_AM62X_R5 */
|
||||
|
||||
#ifdef CONFIG_TARGET_PHYCORE_AM62X_A53
|
||||
|
@ -460,4 +474,29 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
#include "k3-binman-capsule.dtsi"
|
||||
|
||||
&capsule_tispl {
|
||||
efi-capsule {
|
||||
/*
|
||||
* The GUID is generated dynamically by taking a namespace UUID and hashing
|
||||
* it with the board compatible and fw_image name:
|
||||
* mkeficapsule guidgen k3-am625-phyboard-lyra-rdk.dtb PHYCORE_AM62X_SPL
|
||||
*/
|
||||
image-guid = "09841C3F-F177-5D57-B1F6-754D92879205";
|
||||
};
|
||||
};
|
||||
|
||||
&capsule_uboot {
|
||||
efi-capsule {
|
||||
/*
|
||||
* The GUID is generated dynamically by taking a namespace UUID and hashing
|
||||
* it with the board compatible and fw_image name:
|
||||
* mkeficapsule guidgen k3-am625-phyboard-lyra-rdk.dtb PHYCORE_AM62X_UBOOT
|
||||
*/
|
||||
image-guid = "D11A9016-515E-503A-8872-3FF65384D0C4";
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* CONFIG_TARGET_PHYCORE_AM62X_A53 */
|
||||
|
|
|
@ -118,6 +118,19 @@
|
|||
};
|
||||
};
|
||||
|
||||
#include "k3-binman-capsule-r5.dtsi"
|
||||
|
||||
&capsule_tiboot3 {
|
||||
efi-capsule {
|
||||
/*
|
||||
* The GUID is generated dynamically by taking a namespace UUID and hashing
|
||||
* it with the board compatible and fw_image name:
|
||||
* mkeficapsule guidgen k3-am642-r5-phycore-som-2gb.dtb PHYCORE_AM64X_TIBOOT3
|
||||
*/
|
||||
image-guid = "B0A6B4FA-5DF0-5CD1-90EC-B60BDE798486";
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TARGET_PHYCORE_AM64X_A53
|
||||
|
@ -502,4 +515,29 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
#include "k3-binman-capsule.dtsi"
|
||||
|
||||
&capsule_tispl {
|
||||
efi-capsule {
|
||||
/*
|
||||
* The GUID is generated dynamically by taking a namespace UUID and hashing
|
||||
* it with the board compatible and fw_image name:
|
||||
* mkeficapsule guidgen k3-am642-phyboard-electra-rdk.dtb PHYCORE_AM64X_SPL
|
||||
*/
|
||||
image-guid = "D0F34382-C2C4-509C-A1D4-BC1CB1B992A8";
|
||||
};
|
||||
};
|
||||
|
||||
&capsule_uboot {
|
||||
efi-capsule {
|
||||
/*
|
||||
* The GUID is generated dynamically by taking a namespace UUID and hashing
|
||||
* it with the board compatible and fw_image name:
|
||||
* mkeficapsule guidgen k3-am642-phyboard-electra-rdk.dtb PHYCORE_AM64X_UBOOT
|
||||
*/
|
||||
image-guid = "0BB40539-DB41-5407-B4D4-EAD057FE10F4";
|
||||
};
|
||||
};
|
||||
|
||||
#endif /* CONFIG_TARGET_PHYCORE_AM64X_A53 */
|
||||
|
|
|
@ -4,15 +4,92 @@
|
|||
* Author: Wadim Egorov <w.egorov@phytec.de>
|
||||
*/
|
||||
|
||||
#include <efi_loader.h>
|
||||
#include <env_internal.h>
|
||||
#include <fdt_support.h>
|
||||
#include <dm/ofnode.h>
|
||||
#include <mtd.h>
|
||||
#include <spl.h>
|
||||
#include <malloc.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
|
||||
#include "../am6_som_detection.h"
|
||||
|
||||
#if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)
|
||||
struct efi_fw_image fw_images[] = {
|
||||
{
|
||||
.fw_name = PHYCORE_AM6XX_FW_NAME_TIBOOT3,
|
||||
.image_index = 1,
|
||||
},
|
||||
{
|
||||
.fw_name = PHYCORE_AM6XX_FW_NAME_SPL,
|
||||
.image_index = 2,
|
||||
},
|
||||
{
|
||||
.fw_name = PHYCORE_AM6XX_FW_NAME_UBOOT,
|
||||
.image_index = 3,
|
||||
}
|
||||
};
|
||||
|
||||
struct efi_capsule_update_info update_info = {
|
||||
.dfu_string = NULL,
|
||||
.num_images = ARRAY_SIZE(fw_images),
|
||||
.images = fw_images,
|
||||
};
|
||||
|
||||
/**
|
||||
* configure_capsule_updates() - Set up the DFU string for capsule updates
|
||||
*
|
||||
* Configures all three bootloader binaries for updates on the current
|
||||
* booted flash device, which may be eMMC, OSPI NOR, or a uSD card. If
|
||||
* booting from USB or Serial, capsule updates will be performed on the
|
||||
* eMMC device.
|
||||
*
|
||||
* Note: Currently, eMMC hardware partitions are not differentiated; Updates
|
||||
* are always applied to the first boot partition.
|
||||
*/
|
||||
void configure_capsule_updates(void)
|
||||
{
|
||||
static char dfu_string[128] = { 0 };
|
||||
const char *dfu_raw = "tiboot3.bin raw 0x0 0x400 mmcpart 1;"
|
||||
"tispl.bin raw 0x400 0x1000 mmcpart 1;"
|
||||
"u-boot.img.raw raw 0x1400 0x2000 mmcpart 1";
|
||||
const char *dfu_fat = "tiboot3.bin fat 1 1;"
|
||||
"tispl.bin fat 1 1;"
|
||||
"u-boot.img fat 1 1";
|
||||
const char *dfu_spi = "tiboot3.bin part 1;"
|
||||
"tispl.bin part 2;"
|
||||
"u-boot.img part 3";
|
||||
u32 boot_device = get_boot_device();
|
||||
|
||||
switch (boot_device) {
|
||||
case BOOT_DEVICE_MMC1:
|
||||
snprintf(dfu_string, 128, "mmc 0=%s", dfu_raw);
|
||||
break;
|
||||
case BOOT_DEVICE_MMC2:
|
||||
snprintf(dfu_string, 128, "mmc 1=%s", dfu_fat);
|
||||
break;
|
||||
case BOOT_DEVICE_SPI:
|
||||
mtd_probe_devices();
|
||||
snprintf(dfu_string, 128, "mtd nor0=%s", dfu_spi);
|
||||
break;
|
||||
default:
|
||||
snprintf(dfu_string, 128, "mmc 0=%s", dfu_raw);
|
||||
break;
|
||||
};
|
||||
|
||||
update_info.dfu_string = dfu_string;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_SET_DFU_ALT_INFO)
|
||||
void set_dfu_alt_info(char *interface, char *devstr)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT))
|
||||
env_set("dfu_alt_info", update_info.dfu_string);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_ENV_IS_IN_FAT) || IS_ENABLED(CONFIG_ENV_IS_IN_MMC)
|
||||
int mmc_get_env_dev(void)
|
||||
{
|
||||
|
@ -94,6 +171,9 @@ int board_late_init(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT))
|
||||
configure_capsule_updates();
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -36,6 +36,9 @@ CONFIG_SPL_SPI_FLASH_SUPPORT=y
|
|||
CONFIG_SPL_SPI=y
|
||||
# CONFIG_PSCI_RESET is not set
|
||||
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
CONFIG_EFI_SET_TIME=y
|
||||
CONFIG_EFI_CAPSULE_ON_DISK=y
|
||||
CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_LOAD_FIT_ADDRESS=0x81000000
|
||||
CONFIG_BOOTSTD_FULL=y
|
||||
|
@ -61,12 +64,16 @@ CONFIG_SPL_SPI_FLASH_SFDP_SUPPORT=y
|
|||
CONFIG_SPL_SPI_LOAD=y
|
||||
CONFIG_SYS_SPI_U_BOOT_OFFS=0x280000
|
||||
CONFIG_SPL_YMODEM_SUPPORT=y
|
||||
# CONFIG_CMD_BOOTEFI_HELLO is not set
|
||||
CONFIG_CMD_BOOTEFI_SELFTEST=y
|
||||
CONFIG_CMD_NVEDIT_EFI=y
|
||||
CONFIG_CMD_DFU=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_MTD=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_EFIDEBUG=y
|
||||
CONFIG_CMD_RTC=y
|
||||
CONFIG_CMD_SMC=y
|
||||
CONFIG_OF_CONTROL=y
|
||||
|
@ -91,6 +98,7 @@ CONFIG_CLK=y
|
|||
CONFIG_SPL_CLK=y
|
||||
CONFIG_CLK_TI_SCI=y
|
||||
CONFIG_DFU_MMC=y
|
||||
CONFIG_DFU_MTD=y
|
||||
CONFIG_DFU_RAM=y
|
||||
CONFIG_SYS_DFU_DATA_BUF_SIZE=0x40000
|
||||
CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000
|
||||
|
@ -107,6 +115,7 @@ CONFIG_MMC_SDHCI_ADMA=y
|
|||
CONFIG_SPL_MMC_SDHCI_ADMA=y
|
||||
CONFIG_MMC_SDHCI_AM654=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_DM_MTD=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
|
||||
# CONFIG_SPI_FLASH_SMART_HWCAPS is not set
|
||||
|
@ -157,3 +166,4 @@ CONFIG_USB_GADGET_PRODUCT_NUM=0x6165
|
|||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_SPL_DFU=y
|
||||
CONFIG_FS_FAT_MAX_CLUSTSIZE=16384
|
||||
# CONFIG_HEXDUMP is not set
|
||||
|
|
|
@ -35,6 +35,8 @@ CONFIG_SPL_LIBDISK_SUPPORT=y
|
|||
CONFIG_SPL_SPI_FLASH_SUPPORT=y
|
||||
CONFIG_SPL_SPI=y
|
||||
# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
||||
CONFIG_EFI_CAPSULE_ON_DISK=y
|
||||
CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_LOAD_FIT_ADDRESS=0x81000000
|
||||
CONFIG_BOOTSTD_FULL=y
|
||||
|
@ -65,7 +67,10 @@ CONFIG_SPL_SPI_FLASH_SFDP_SUPPORT=y
|
|||
CONFIG_SPL_SPI_LOAD=y
|
||||
CONFIG_SYS_SPI_U_BOOT_OFFS=0x280000
|
||||
CONFIG_SPL_YMODEM_SUPPORT=y
|
||||
# CONFIG_CMD_BOOTEFI_HELLO is not set
|
||||
CONFIG_CMD_BOOTEFI_SELFTEST=y
|
||||
CONFIG_CMD_ASKENV=y
|
||||
CONFIG_CMD_NVEDIT_EFI=y
|
||||
CONFIG_CMD_DFU=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
|
@ -73,6 +78,7 @@ CONFIG_CMD_MMC=y
|
|||
CONFIG_CMD_MTD=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_EFIDEBUG=y
|
||||
CONFIG_CMD_RTC=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_SMC=y
|
||||
|
@ -98,6 +104,7 @@ CONFIG_SPL_CLK_CCF=y
|
|||
CONFIG_CLK_CCF=y
|
||||
CONFIG_CLK_TI_SCI=y
|
||||
CONFIG_DFU_MMC=y
|
||||
CONFIG_DFU_MTD=y
|
||||
CONFIG_DFU_RAM=y
|
||||
CONFIG_DFU_SF=y
|
||||
CONFIG_SYS_DFU_DATA_BUF_SIZE=0x40000
|
||||
|
@ -121,6 +128,7 @@ CONFIG_MMC_SDHCI_ADMA=y
|
|||
CONFIG_SPL_MMC_SDHCI_ADMA=y
|
||||
CONFIG_MMC_SDHCI_AM654=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_DM_MTD=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
|
||||
# CONFIG_SPI_FLASH_SMART_HWCAPS is not set
|
||||
|
|
|
@ -12,4 +12,8 @@
|
|||
/* DDR Configuration */
|
||||
#define CFG_SYS_SDRAM_BASE 0x80000000
|
||||
|
||||
#define PHYCORE_AM6XX_FW_NAME_TIBOOT3 u"PHYCORE_AM62X_TIBOOT3"
|
||||
#define PHYCORE_AM6XX_FW_NAME_SPL u"PHYCORE_AM62X_SPL"
|
||||
#define PHYCORE_AM6XX_FW_NAME_UBOOT u"PHYCORE_AM62X_UBOOT"
|
||||
|
||||
#endif /* __PHYCORE_AM62X_H */
|
||||
|
|
|
@ -12,4 +12,8 @@
|
|||
/* DDR Configuration */
|
||||
#define CFG_SYS_SDRAM_BASE 0x80000000
|
||||
|
||||
#define PHYCORE_AM6XX_FW_NAME_TIBOOT3 u"PHYCORE_AM64X_TIBOOT3"
|
||||
#define PHYCORE_AM6XX_FW_NAME_SPL u"PHYCORE_AM64X_SPL"
|
||||
#define PHYCORE_AM6XX_FW_NAME_UBOOT u"PHYCORE_AM64X_UBOOT"
|
||||
|
||||
#endif /* __PHYCORE_AM64X_H */
|
||||
|
|
Loading…
Add table
Reference in a new issue