From cedad0670e5160f82d282e06503f5013f8012424 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:28 -0500 Subject: [PATCH 01/24] doc: uefi: capsules: Add Capsule Update porting section Created a capsule update porting section in the documentation that outlines the steps a board developer must do when porting from an existing reference board implementation. In particular, added a big warning that new capsule GUID's need to be defined. Signed-off-by: Jonathan Humphreys Acked-by: Ilias Apalodimas Reviewed-by: Ilias Apalodimas --- doc/develop/uefi/uefi.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/develop/uefi/uefi.rst b/doc/develop/uefi/uefi.rst index 0389b269c01..36ac75278fa 100644 --- a/doc/develop/uefi/uefi.rst +++ b/doc/develop/uefi/uefi.rst @@ -631,6 +631,18 @@ where version.dtso looks like:: The properties of image-type-id and image-index must match the value defined in the efi_fw_image array as image_type_id and image_index. +Porting Capsule Updates to new boards +************************************* + +It is important, when using a reference board as a starting point for a custom +board, that certain steps are taken to properly support Capsule Updates. + +Capsule GUIDs need to be unique for each firmware and board. That is, if two +firmwares are built from the same source but result in different binaries +because they are built for different boards, they should have different GUIDs. +Therefore it is important when creating support for a new board, new GUIDs are +defined in the board's header file. *DO NOT* reuse capsule GUIDs. + Executing the boot manager ~~~~~~~~~~~~~~~~~~~~~~~~~~ From bf240862a8bf4ae92ca7928188b4efe78486fc6e Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:29 -0500 Subject: [PATCH 02/24] doc: ti: k3: Correct spelling mistakes and improve clarity Few cosmetic fixes for clarity and spelling mistakes. Signed-off-by: Jonathan Humphreys Reviewed-by: Mattijs Korpershoek --- doc/board/ti/k3.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/board/ti/k3.rst b/doc/board/ti/k3.rst index a1c01d1cf02..927f3976d34 100644 --- a/doc/board/ti/k3.rst +++ b/doc/board/ti/k3.rst @@ -51,14 +51,14 @@ For all K3 SoCs the first core started will be inside the Security Management Subsystem (SMS) which will secure the device and start a core in the wakeup domain to run the ROM code. ROM will then initialize the boot media needed to load the binaries packaged inside `tiboot3.bin`, -including a 32bit U-Boot SPL, (called the wakup SPL) that ROM will jump +including a 32bit U-Boot SPL, (called the wakeup SPL) that ROM will jump to after it has finished loading everything into internal SRAM. .. image:: img/boot_flow_01.svg :alt: Boot flow up to wakeup domain SPL The wakeup SPL, running on a wakeup domain core, will initialize DDR and -any peripherals needed load the larger binaries inside the `tispl.bin` +any peripherals needed to load the larger binaries inside the `tispl.bin` into DDR. Once loaded the wakeup SPL will start one of the 'big' application cores inside the main domain to initialize the main domain, starting with Trusted Firmware-A (TF-A), before moving on to start @@ -94,7 +94,7 @@ essentially 4 unique but very similar flows: * Combined binary with a split firmware: (eg: AM62) For devices that utilize the split binary approach, ROM is not capable -of loading the firmware into the SoC requiring the wakeup domain's +of loading the firmware into the SoC, requiring the wakeup domain's U-Boot SPL to load the firmware. Devices with a split firmware will have two firmwares loaded into the @@ -114,8 +114,8 @@ K3 HS-SE (High Security - Security Enforced) devices enforce an authenticated boot flow for secure boot. HS-FS (High Security - Field Securable) is the state of a K3 device before it has been eFused with customer security keys. In the HS-FS state the authentication still can -function as in HS-SE but as there are no customer keys to verify the -signatures against the authentication will pass for certificates signed +function as in HS-SE, but as there are no customer keys to verify the +signatures against, the authentication will pass for certificates signed with any key. Chain of trust From 287c08e4132c6db8e99b88f4000bdde45b1e6105 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:30 -0500 Subject: [PATCH 03/24] configs: ti: Create base EFI capsule configs for TI K3 devices To better scale with the number of boards, separate TI K3 EFI capsule configs into its own file that can be shared across TI K3 boards. This will allow any platform level config changes to be done once. Signed-off-by: Jonathan Humphreys --- configs/k3_efi_capsule.config | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 configs/k3_efi_capsule.config diff --git a/configs/k3_efi_capsule.config b/configs/k3_efi_capsule.config new file mode 100644 index 00000000000..e31cea37269 --- /dev/null +++ b/configs/k3_efi_capsule.config @@ -0,0 +1,2 @@ +CONFIG_EFI_CAPSULE_ON_DISK=y +CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y From 5b84d2de5e6cbecdbb363cfcf488a51af2e725b8 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:31 -0500 Subject: [PATCH 04/24] board: am64x: Define capsule update firmware info Define the firmware components updatable via EFI capsule update, including defining capsule GUIDs for the various firmware components for the AM64x SK. Signed-off-by: Jonathan Humphreys Acked-by: Ilias Apalodimas Reviewed-by: Tom Rini --- board/ti/am64x/evm.c | 34 ++++++++++++++++++++++++++++++++++ include/configs/am64x_evm.h | 24 ++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c index b8de69da06c..609e5cf6d51 100644 --- a/board/ti/am64x/evm.c +++ b/board/ti/am64x/evm.c @@ -7,6 +7,7 @@ * */ +#include #include #include #include @@ -27,6 +28,39 @@ DECLARE_GLOBAL_DATA_PTR; +struct efi_fw_image fw_images[] = { + { + .image_type_id = AM64X_SK_TIBOOT3_IMAGE_GUID, + .fw_name = u"AM64X_SK_TIBOOT3", + .image_index = 1, + }, + { + .image_type_id = AM64X_SK_SPL_IMAGE_GUID, + .fw_name = u"AM64X_SK_SPL", + .image_index = 2, + }, + { + .image_type_id = AM64X_SK_UBOOT_IMAGE_GUID, + .fw_name = u"AM64X_SK_UBOOT", + .image_index = 3, + } +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "sf 0:0=tiboot3.bin raw 0 100000;" + "tispl.bin raw 100000 200000;u-boot.img raw 300000 400000", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + +#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 + int board_init(void) { return 0; diff --git a/include/configs/am64x_evm.h b/include/configs/am64x_evm.h index f9f8c7bc2f6..9db83621ea8 100644 --- a/include/configs/am64x_evm.h +++ b/include/configs/am64x_evm.h @@ -9,6 +9,30 @@ #ifndef __CONFIG_AM642_EVM_H #define __CONFIG_AM642_EVM_H +/** + * define AM64X_SK_TIBOOT3_IMAGE_GUID - firmware GUID for AM64X sk tiboot3.bin + * define AM64X_SK_SPL_IMAGE_GUID - firmware GUID for AM64X sk SPL + * define AM64X_SK_UBOOT_IMAGE_GUID - firmware GUID for AM64X sk UBOOT + * + * These GUIDs are used in capsules updates to identify the corresponding + * firmware object. + * + * Board developers using this as a starting reference should + * define their own GUIDs to ensure that firmware repositories (like + * LVFS) do not confuse them. + */ +#define AM64X_SK_TIBOOT3_IMAGE_GUID \ + EFI_GUID(0xede0a0d5, 0x9116, 0x4bfb, 0xaa, 0x54, \ + 0x09, 0xe9, 0x7b, 0x5a, 0xfe, 0x1a) + +#define AM64X_SK_SPL_IMAGE_GUID \ + EFI_GUID(0x77678f5c, 0x64d4, 0x4910, 0xad, 0x75, \ + 0x52, 0xc9, 0xd9, 0x5c, 0xdb, 0x1d) + +#define AM64X_SK_UBOOT_IMAGE_GUID \ + EFI_GUID(0xc6ad43a9, 0x7d31, 0x4f5d, 0x83, 0xe9, \ + 0xb8, 0xef, 0xec, 0xae, 0x05, 0xbf) + /* Now for the remaining common defines */ #include From 86c6dd74913af0b39c06b58396d3fabe2d129815 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:32 -0500 Subject: [PATCH 05/24] configs: am64x: Enable EFI capsule update Enable on disk, raw capsule update. Signed-off-by: Jonathan Humphreys --- configs/am64x_evm_a53_defconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configs/am64x_evm_a53_defconfig b/configs/am64x_evm_a53_defconfig index e000549d6d0..44c22458ab2 100644 --- a/configs/am64x_evm_a53_defconfig +++ b/configs/am64x_evm_a53_defconfig @@ -178,3 +178,5 @@ CONFIG_USB_FUNCTION_MASS_STORAGE=y CONFIG_SPL_DFU=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y + +#include From 11c29ef01adc3acac6530e82ae60368f9db642ea Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:33 -0500 Subject: [PATCH 06/24] doc: board: ti: am64x: document OSPI layout Added OSPI flash layout diagram, as well as example commands to flash firmware to it. Signed-off-by: Jonathan Humphreys Reviewed-by: Tom Rini --- doc/board/ti/am64x_evm.rst | 24 + doc/board/ti/img/ospi_sysfw-am64.svg | 802 +++++++++++++++++++++++++++ 2 files changed, 826 insertions(+) create mode 100644 doc/board/ti/img/ospi_sysfw-am64.svg diff --git a/doc/board/ti/am64x_evm.rst b/doc/board/ti/am64x_evm.rst index 6ae35b3fee3..88997b6a283 100644 --- a/doc/board/ti/am64x_evm.rst +++ b/doc/board/ti/am64x_evm.rst @@ -140,6 +140,30 @@ Image formats: .. image:: img/nodm_tispl.bin.svg :alt: tispl.bin image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, and u-boot.img, +over tftp and then flash those to OSPI at their respective addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x100000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x300000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw-am64.svg + :alt: OSPI flash partition layout + Switch Setting for Boot Mode ---------------------------- diff --git a/doc/board/ti/img/ospi_sysfw-am64.svg b/doc/board/ti/img/ospi_sysfw-am64.svg new file mode 100644 index 00000000000..f6244dce596 --- /dev/null +++ b/doc/board/ti/img/ospi_sysfw-am64.svg @@ -0,0 +1,802 @@ + + + + + + + + + + + + + + + + + + + ospi.tiboot3(1M) + + + + ospi.tiboot3(1M) + + + + + + + + + + + + + + 0x0 + + + + + 0x0 + + + + + + + + + + + + + ospi.tispl(2M) + + + + ospi.tispl(2M) + + + + + + + + + + + + + + 0x100000 + + + + + 0x100000 + + + + + + + + + + + + + ospi.u-boot(4M) + + + + ospi.u-boot(4M) + + + + + + + + + + + + + + 0x300000 + + + + + 0x300000 + + + + + + + + + + + + + ospi.env(128K) + + + + ospi.env(128K) + + + + + + + + + + + + + + 0x700000 + + + + + 0x700000 + + + + + + + + + + + + + ospi.env.backup(128K) + + + + ospi.env.backup(128K) + + + + + + + + + + + + + + 0x720000 + + + + + 0x720000 + + + + + + + + + + + + + padding(768K) + + + + padding(768K) + + + + + + + + + + + + + + 0x740000 + + + + + 0x740000 + + + + + + + + + + + + + ospi.rootfs(UBIFS) + + + + ospi.rootfs(UBIFS) + + + + + + + + + + + + + + 0x800000 + + + + + 0x800000 + + + + + + + + + + + + + ospi.phypattern(256k) + + + + ospi.phypattern(256k) + + + + + + + + + + + + + + 0x3FC0000 + + + + + 0x3FC0000 + + + + + From 9bd6cc292fa8e15f99f50f4a945f1ec52f8adf90 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:34 -0500 Subject: [PATCH 07/24] board: j721e: Define capsule update firmware info Define the firmware components updatable via EFI capsule update, including defining capsule GUIDs for the various firmware components for the SK-TDA4VM. Signed-off-by: Jonathan Humphreys Acked-by: Ilias Apalodimas --- board/ti/j721e/evm.c | 40 +++++++++++++++++++++++++++++++++++++ include/configs/j721e_evm.h | 29 +++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/board/ti/j721e/evm.c b/board/ti/j721e/evm.c index 539eaf47186..f3452ff0a8f 100644 --- a/board/ti/j721e/evm.c +++ b/board/ti/j721e/evm.c @@ -7,6 +7,7 @@ * */ +#include #include #include #include @@ -32,6 +33,45 @@ DECLARE_GLOBAL_DATA_PTR; +struct efi_fw_image fw_images[] = { + { + .image_type_id = J721E_SK_TIBOOT3_IMAGE_GUID, + .fw_name = u"J721E_SK_TIBOOT3", + .image_index = 1, + }, + { + .image_type_id = J721E_SK_SPL_IMAGE_GUID, + .fw_name = u"J721E_SK_SPL", + .image_index = 2, + }, + { + .image_type_id = J721E_SK_UBOOT_IMAGE_GUID, + .fw_name = u"J721E_SK_UBOOT", + .image_index = 3, + }, + { + .image_type_id = J721E_SK_SYSFW_IMAGE_GUID, + .fw_name = u"J721E_SK_SYSFW", + .image_index = 4, + } +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "sf 0:0=tiboot3.bin raw 0 80000;" + "tispl.bin raw 80000 200000;u-boot.img raw 280000 400000;" + "sysfw.itb raw 6C0000 100000", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + +#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 + int board_init(void) { return 0; diff --git a/include/configs/j721e_evm.h b/include/configs/j721e_evm.h index c26438c8684..a5140ea6a11 100644 --- a/include/configs/j721e_evm.h +++ b/include/configs/j721e_evm.h @@ -22,6 +22,35 @@ #define CFG_SYS_UBOOT_BASE 0x50080000 #endif +/** + * define J721E_SK_TIBOOT3_IMAGE_GUID - firmware GUID for J721e sk tiboot3.bin + * define J721E_SK_SPL_IMAGE_GUID - firmware GUID for J721e sk SPL + * define J721E_SK_UBOOT_IMAGE_GUID - firmware GUID for J721e sk UBOOT + * define J721E_SK_SYSFW_IMAGE_GUID - firmware GUID for J721e sk SYSFW + * + * These GUIDs are used in capsules updates to identify the corresponding + * firmware object. + * + * Board developers using this as a starting reference should + * define their own GUIDs to ensure that firmware repositories (like + * LVFS) do not confuse them. + */ +#define J721E_SK_TIBOOT3_IMAGE_GUID \ + EFI_GUID(0xe672b518, 0x7cd7, 0x4014, 0xbd, 0x8d, \ + 0x40, 0x72, 0x4d, 0x0a, 0xd4, 0xdc) + +#define J721E_SK_SPL_IMAGE_GUID \ + EFI_GUID(0x86f710ad, 0x10cf, 0x46ea, 0xac, 0x67, \ + 0x85, 0x6a, 0xe0, 0x6e, 0xfa, 0xd2) + +#define J721E_SK_UBOOT_IMAGE_GUID \ + EFI_GUID(0x81b58fb0, 0x3b00, 0x4add, 0xa2, 0x0a, \ + 0xc1, 0x85, 0xbb, 0xac, 0xa1, 0xed) + +#define J721E_SK_SYSFW_IMAGE_GUID \ + EFI_GUID(0x6fd10680, 0x361b, 0x431f, 0x80, 0xaa, \ + 0x89, 0x94, 0x55, 0x81, 0x9e, 0x11) + /* Now for the remaining common defines */ #include From 40abc84b1df8cf4b6f3701519f8fc701eef398bc Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:35 -0500 Subject: [PATCH 08/24] configs: j721e: Enable EFI capsule update Enable on disk, raw capsule update. Signed-off-by: Jonathan Humphreys --- configs/j721e_evm_a72_defconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configs/j721e_evm_a72_defconfig b/configs/j721e_evm_a72_defconfig index 451a6a91c4f..f99315789c7 100644 --- a/configs/j721e_evm_a72_defconfig +++ b/configs/j721e_evm_a72_defconfig @@ -211,3 +211,5 @@ CONFIG_UFS=y CONFIG_CADENCE_UFS=y CONFIG_TI_J721E_UFS=y CONFIG_EFI_SET_TIME=y + +#include From 44ba2836d4be01bcbf2f63be4dbd0e5760a86e86 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:36 -0500 Subject: [PATCH 09/24] doc: board: ti: j721e: document OSPI layout Updated OSPI flash layout diagram. Signed-off-by: Jonathan Humphreys Reviewed-by: Tom Rini --- doc/board/ti/img/ospi_sysfw.svg | 1450 +++++++++++++++++-------------- doc/board/ti/j721e_evm.rst | 58 +- 2 files changed, 840 insertions(+), 668 deletions(-) diff --git a/doc/board/ti/img/ospi_sysfw.svg b/doc/board/ti/img/ospi_sysfw.svg index 648f6fd03e5..2a2fd3f4863 100644 --- a/doc/board/ti/img/ospi_sysfw.svg +++ b/doc/board/ti/img/ospi_sysfw.svg @@ -1,725 +1,897 @@ - + + inkscape:current-layer="g19241" /> + id="defs19023" /> - + id="g19241"> - - - - - ospi.tiboot3(512k) - - - - ospi.tiboot3(512k) - + id="g19027"> + - - - - + id="g19035"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 35px; margin-left: 121px;"> - 0x0 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + ospi.tiboot3(512k) - - - 0x0 - + + ospi.tiboot3(512k) + + - - - - - - ospi.tispl(2M) - - - - ospi.tispl(2M) - + id="g19039"> + - - - - + id="g19047"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 20px; margin-left: 60px;"> - 0x80000 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + + 0x0 + - - - 0x80000 - + + 0x0 + + - - - - - - ospi.u-boot(4M) - - - - ospi.u-boot(4M) - + id="g19051"> + - - - - + id="g19059"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 75px; margin-left: 121px;"> - 0x280000 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + ospi.tispl(2M) - - - 0x280000 - + + ospi.tispl(2M) + + - - - - - - ospi.env(128K) - - - - ospi.env(128K) - + id="g19063"> + - - - - + id="g19071"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 60px; margin-left: 0px;"> - 0x680000 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + + 0x80000 + - - - 0x680000 - + + 0x80000 + + - - - - - - ospi.env.backup(128K) - - - - ospi.env.backup(128K) - + id="g19075"> + - - - - + id="g19083"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 115px; margin-left: 121px;"> - 0x6A0000 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + ospi.u-boot(4M) - - - 0x6A0000 - + + ospi.u-boot(4M) + + - - - - - - ospi.sysfw(1M) - - - - ospi.sysfw(1M) - + id="g19087"> + - - - - + id="g19095"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 100px; margin-left: 0px;"> - 0x6C0000 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + + 0x280000 + - - - 0x6C0000 - + + 0x280000 + + - - - - - - padding(256K) - - - - padding(256K) - + id="g19099"> + - - - - + id="g19107"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 155px; margin-left: 121px;"> - 0x7C0000 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + ospi.env(128K) - - - 0x7C0000 - + + ospi.env(128K) + + - - - - - - ospi.rootfs(UBIFS) - - - - ospi.rootfs(UBIFS) - + id="g19111"> + - - - - + id="g19119"> + + + + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 140px; margin-left: 0px;"> - 0x800000 + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + + 0x680000 + - - - 0x800000 - + + 0x680000 + + + + + + + + + + + + + ospi.env.backup(128K) + + + + ospi.env.backup(128K) + + + + + + + + + + + + + + 0x6A0000 + + + + + 0x6A0000 + + + + + + + + + + + + + ospi.sysfw(1M) + + + + ospi.sysfw(1M) + + + + + + + + + + + + + + 0x6C0000 + + + + + 0x6C0000 + + + + + + + + + + + + + padding(256K) + + + + padding(256K) + + + + + + + + + + + + + + 0x7C0000 + + + + + 0x7C0000 + + + + + + + + + + + + + ospi.rootfs(UBIFS) + + + + ospi.rootfs(UBIFS) + + + + + + + + + + + + + + 0x800000 + + + + + 0x800000 + + + + + + + + + + + + + ospi.phypattern(128k) + + + + ospi.phypattern(128k) + + + + + + + + + + + + + + 0x3FE0000 + + + + + 0x3FE0000 + + - - - - Text is not SVG - cannot display - - diff --git a/doc/board/ti/j721e_evm.rst b/doc/board/ti/j721e_evm.rst index a422a9bf1a0..80d91cafab0 100644 --- a/doc/board/ti/j721e_evm.rst +++ b/doc/board/ti/j721e_evm.rst @@ -150,6 +150,33 @@ Image formats: .. image:: img/sysfw.itb.svg :alt: sysfw.itb image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, u-boot.img, +and sysfw.itb over tftp and then flash those to OSPI at their respective +addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + tftp ${loadaddr} sysfw.itb + sf update $loadaddr 0x6C0000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw.svg + :alt: OSPI flash partition layout + R5 Memory Map: -------------- @@ -193,35 +220,8 @@ R5 Memory Map: - 0x41cffbfc - 0x41cfffff -OSPI: ------ -ROM supports booting from OSPI from offset 0x0. - -Flashing images to OSPI: - -Below commands can be used to download tiboot3.bin, tispl.bin, u-boot.img, -and sysfw.itb over tftp and then flash those to OSPI at their respective -addresses. - -.. prompt:: bash => - - sf probe - tftp ${loadaddr} tiboot3.bin - sf update $loadaddr 0x0 $filesize - tftp ${loadaddr} tispl.bin - sf update $loadaddr 0x80000 $filesize - tftp ${loadaddr} u-boot.img - sf update $loadaddr 0x280000 $filesize - tftp ${loadaddr} sysfw.itb - sf update $loadaddr 0x6C0000 $filesize - -Flash layout for OSPI: - -.. image:: img/ospi_sysfw.svg - :alt: OSPI flash partition layout - -Firmwares: ----------- +Firmware: +--------- The J721e u-boot allows firmware to be loaded for the Cortex-R5 subsystem. The CPSW5G in J7200 and CPSW9G in J721E present in MAIN domain is configured From 195f0e3a93038fa23aae9aa4103e5c44c0cd9144 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:37 -0500 Subject: [PATCH 10/24] board: beagleplay: Define capsule update firmware info Define the firmware components updatable via EFI capsule update, including defining capsule GUIDs for the various firmware components for the BeaglePlay. Note this involved creating BeaglePlay's own beagleplay.h board header file instead of reusing am62_evm's. Signed-off-by: Jonathan Humphreys Acked-by: Ilias Apalodimas --- board/beagle/beagleplay/Kconfig | 4 +-- board/beagle/beagleplay/beagleplay.c | 34 +++++++++++++++++++++++ include/configs/beagleplay.h | 41 ++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 include/configs/beagleplay.h diff --git a/board/beagle/beagleplay/Kconfig b/board/beagle/beagleplay/Kconfig index 7dbd833acb4..b0e67dc8ef3 100644 --- a/board/beagle/beagleplay/Kconfig +++ b/board/beagle/beagleplay/Kconfig @@ -35,7 +35,7 @@ config SYS_VENDOR default "beagle" config SYS_CONFIG_NAME - default "am62x_evm" + default "beagleplay" source "board/ti/common/Kconfig" @@ -50,7 +50,7 @@ config SYS_VENDOR default "beagle" config SYS_CONFIG_NAME - default "am62x_evm" + default "beagleplay" config SPL_LDSCRIPT default "arch/arm/mach-omap2/u-boot-spl.lds" diff --git a/board/beagle/beagleplay/beagleplay.c b/board/beagle/beagleplay/beagleplay.c index af36439e2e2..a21f09e3122 100644 --- a/board/beagle/beagleplay/beagleplay.c +++ b/board/beagle/beagleplay/beagleplay.c @@ -6,6 +6,7 @@ * Copyright (C) 2022-2023 Robert Nelson, BeagleBoard.org Foundation */ +#include #include #include #include @@ -15,6 +16,39 @@ DECLARE_GLOBAL_DATA_PTR; +struct efi_fw_image fw_images[] = { + { + .image_type_id = BEAGLEPLAY_TIBOOT3_IMAGE_GUID, + .fw_name = u"BEAGLEPLAY_TIBOOT3", + .image_index = 1, + }, + { + .image_type_id = BEAGLEPLAY_SPL_IMAGE_GUID, + .fw_name = u"BEAGLEPLAY_SPL", + .image_index = 2, + }, + { + .image_type_id = BEAGLEPLAY_UBOOT_IMAGE_GUID, + .fw_name = u"BEAGLEPLAY_UBOOT", + .image_index = 3, + } +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "mmc 0=tiboot3.bin raw 0 2000 mmcpart 1;" + "tispl.bin fat 0 1;u-boot.img fat 0 1", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + +#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 + int board_init(void) { return 0; diff --git a/include/configs/beagleplay.h b/include/configs/beagleplay.h new file mode 100644 index 00000000000..4baeab664af --- /dev/null +++ b/include/configs/beagleplay.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Configuration header file for BeaglePlay + * + * https://beagleplay.org/ + * + * Copyright (C) 2024 Texas Instruments Incorporated - https://www.ti.com/ + */ + +#ifndef __CONFIG_BEAGLEPLAY_H +#define __CONFIG_BEAGLEPLAY_H + +/** + * define BEAGLEPLAY_TIBOOT3_IMAGE_GUID - firmware GUID for BeaglePlay + * tiboot3.bin + * define BEAGLEPLAY_SPL_IMAGE_GUID - firmware GUID for BeaglePlay SPL + * define BEAGLEPLAY_UBOOT_IMAGE_GUID - firmware GUID for BeaglePlay UBOOT + * + * These GUIDs are used in capsules updates to identify the corresponding + * firmware object. + * + * Board developers using this as a starting reference should + * define their own GUIDs to ensure that firmware repositories (like + * LVFS) do not confuse them. + */ +#define BEAGLEPLAY_TIBOOT3_IMAGE_GUID \ + EFI_GUID(0x0e225a09, 0xf720, 0x4d57, 0x91, 0x20, \ + 0xe2, 0x8f, 0x73, 0x7f, 0x5a, 0x5e) + +#define BEAGLEPLAY_SPL_IMAGE_GUID \ + EFI_GUID(0xb2e7cc49, 0x1a5a, 0x4036, 0xae, 0x01, \ + 0x33, 0x87, 0xc3, 0xbe, 0xf6, 0x57) + +#define BEAGLEPLAY_UBOOT_IMAGE_GUID \ + EFI_GUID(0x92c92b11, 0xa7ee, 0x486f, 0xaa, 0xa2, \ + 0x71, 0x3d, 0x84, 0x42, 0x5b, 0x0e) + +/* Now for the remaining common defines */ +#include + +#endif /* __CONFIG_BEAGLEPLAY_H */ From 29ec1c8f3f44cfe2b56c91d95eceb66f04b7c150 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:38 -0500 Subject: [PATCH 11/24] configs: beagleplay: Enable DFU for MMC MMC DFU is required for capsule updates. Signed-off-by: Jonathan Humphreys --- configs/am62x_beagleplay_a53_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configs/am62x_beagleplay_a53_defconfig b/configs/am62x_beagleplay_a53_defconfig index 455dd86b2fc..414b935bffb 100644 --- a/configs/am62x_beagleplay_a53_defconfig +++ b/configs/am62x_beagleplay_a53_defconfig @@ -71,6 +71,9 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_MMC=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x40000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x180000 CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y From 8e117372c28a62b36875e9c9337ad87551a4c93c Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:39 -0500 Subject: [PATCH 12/24] configs: beagleplay: Enable EFI capsule update Enable on disk, raw capsule update. Signed-off-by: Jonathan Humphreys --- configs/am62x_beagleplay_a53_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/am62x_beagleplay_a53_defconfig b/configs/am62x_beagleplay_a53_defconfig index 414b935bffb..79c82d1ff7a 100644 --- a/configs/am62x_beagleplay_a53_defconfig +++ b/configs/am62x_beagleplay_a53_defconfig @@ -126,4 +126,5 @@ CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_LZO=y CONFIG_EFI_SET_TIME=y +#include #include From 2af879df86f85c94f868dad5a99386bfc4b1975d Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:40 -0500 Subject: [PATCH 13/24] board: am62x: Define capsule update firmware info Define the firmware components updatable via EFI capsule update, including defining capsule GUIDs for the various firmware components for the AM62x SK. Signed-off-by: Jonathan Humphreys Acked-by: Ilias Apalodimas --- board/ti/am62x/evm.c | 34 ++++++++++++++++++++++++++++++++++ include/configs/am62x_evm.h | 24 ++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/board/ti/am62x/evm.c b/board/ti/am62x/evm.c index b3e8680dfab..9bdd0223cdb 100644 --- a/board/ti/am62x/evm.c +++ b/board/ti/am62x/evm.c @@ -7,6 +7,7 @@ * */ +#include #include #include #include @@ -46,6 +47,39 @@ int splash_screen_prepare(void) } #endif +struct efi_fw_image fw_images[] = { + { + .image_type_id = AM62X_SK_TIBOOT3_IMAGE_GUID, + .fw_name = u"AM62X_SK_TIBOOT3", + .image_index = 1, + }, + { + .image_type_id = AM62X_SK_SPL_IMAGE_GUID, + .fw_name = u"AM62X_SK_SPL", + .image_index = 2, + }, + { + .image_type_id = AM62X_SK_UBOOT_IMAGE_GUID, + .fw_name = u"AM62X_SK_UBOOT", + .image_index = 3, + } +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "sf 0:0=tiboot3.bin raw 0 80000;" + "tispl.bin raw 80000 200000;u-boot.img raw 280000 400000", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + +#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 + int board_init(void) { return 0; diff --git a/include/configs/am62x_evm.h b/include/configs/am62x_evm.h index c8fe59b7531..0d98f14a4bc 100644 --- a/include/configs/am62x_evm.h +++ b/include/configs/am62x_evm.h @@ -9,6 +9,30 @@ #ifndef __CONFIG_AM625_EVM_H #define __CONFIG_AM625_EVM_H +/** + * define AM62X_SK_TIBOOT3_IMAGE_GUID - firmware GUID for AM62X sk tiboot3.bin + * define AM62X_SK_SPL_IMAGE_GUID - firmware GUID for AM62X sk SPL + * define AM62X_SK_UBOOT_IMAGE_GUID - firmware GUID for AM62X sk UBOOT + * + * These GUIDs are used in capsules updates to identify the corresponding + * firmware object. + * + * Board developers using this as a starting reference should + * define their own GUIDs to ensure that firmware repositories (like + * LVFS) do not confuse them. + */ +#define AM62X_SK_TIBOOT3_IMAGE_GUID \ + EFI_GUID(0xabcb83d2, 0x9cb6, 0x4351, 0xb8, 0xf1, \ + 0x64, 0x94, 0xbb, 0xe3, 0x70, 0x0a) + +#define AM62X_SK_SPL_IMAGE_GUID \ + EFI_GUID(0xaee355fc, 0xbf97, 0x4264, 0x8c, 0x82, \ + 0x43, 0x72, 0x55, 0xef, 0xdc, 0x1d) + +#define AM62X_SK_UBOOT_IMAGE_GUID \ + EFI_GUID(0x28ab8c6c, 0xfca8, 0x41d3, 0x8e, 0xa1, \ + 0x5f, 0x17, 0x1b, 0x7d, 0x29, 0x29) + /* Now for the remaining common defines */ #include From 0040f07e5a563f64f60915a6cefdf7b1be7bfee8 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:41 -0500 Subject: [PATCH 14/24] configs: am62x: Enable EFI capsule update Enable on disk, raw capsule update. Signed-off-by: Jonathan Humphreys --- configs/am62x_evm_a53_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 9bfe1560275..ca993b427bd 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -114,4 +114,5 @@ CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y +#include #include From 3b7a4b5d1ad897f08c9d666534622a344bf158c2 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:42 -0500 Subject: [PATCH 15/24] doc: board: ti: am62x: document OSPI layout Added OSPI flash layout diagram, as well as example commands to flash firmware to it. Signed-off-by: Jonathan Humphreys Reviewed-by: Tom Rini --- doc/board/ti/am62x_sk.rst | 24 + doc/board/ti/img/ospi_sysfw2.svg | 802 +++++++++++++++++++++++++++++++ 2 files changed, 826 insertions(+) create mode 100644 doc/board/ti/img/ospi_sysfw2.svg diff --git a/doc/board/ti/am62x_sk.rst b/doc/board/ti/am62x_sk.rst index d5f7fe3b036..2a25e84f6c9 100644 --- a/doc/board/ti/am62x_sk.rst +++ b/doc/board/ti/am62x_sk.rst @@ -164,6 +164,30 @@ Image formats: .. image:: img/dm_tispl.bin.svg :alt: tispl.bin image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, and u-boot.img, +over tftp and then flash those to OSPI at their respective addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw2.svg + :alt: OSPI flash partition layout + A53 SPL DDR Memory Layout ------------------------- diff --git a/doc/board/ti/img/ospi_sysfw2.svg b/doc/board/ti/img/ospi_sysfw2.svg new file mode 100644 index 00000000000..06711df4117 --- /dev/null +++ b/doc/board/ti/img/ospi_sysfw2.svg @@ -0,0 +1,802 @@ + + + + + + + + + + + + + + + + + + + ospi.tiboot3(512k) + + + + ospi.tiboot3(512k) + + + + + + + + + + + + + + 0x0 + + + + + 0x0 + + + + + + + + + + + + + ospi.tispl(2M) + + + + ospi.tispl(2M) + + + + + + + + + + + + + + 0x80000 + + + + + 0x80000 + + + + + + + + + + + + + ospi.u-boot(4M) + + + + ospi.u-boot(4M) + + + + + + + + + + + + + + 0x280000 + + + + + 0x280000 + + + + + + + + + + + + + ospi.env(128K) + + + + ospi.env(128K) + + + + + + + + + + + + + + 0x680000 + + + + + 0x680000 + + + + + + + + + + + + + ospi.env.backup(128K) + + + + ospi.env.backup(128K) + + + + + + + + + + + + + + 0x6C0000 + + + + + 0x6C0000 + + + + + + + + + + + + + padding(768K) + + + + padding(768K) + + + + + + + + + + + + + + 0x740000 + + + + + 0x740000 + + + + + + + + + + + + + ospi.rootfs(UBIFS) + + + + ospi.rootfs(UBIFS) + + + + + + + + + + + + + + 0x800000 + + + + + 0x800000 + + + + + + + + + + + + + ospi.phypattern(256k) + + + + ospi.phypattern(256k) + + + + + + + + + + + + + + 0x3FC0000 + + + + + 0x3FC0000 + + + + + From 0af78a1a729dd07809b8a4037724d184e40ae5ed Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:43 -0500 Subject: [PATCH 16/24] board: am62px: Define capsule update firmware info Define the firmware components updatable via EFI capsule update, including defining capsule GUIDs for the various firmware components for the AM62px SK. Signed-off-by: Jonathan Humphreys Acked-by: Ilias Apalodimas --- board/ti/am62px/evm.c | 34 ++++++++++++++++++++++++++++++++++ include/configs/am62px_evm.h | 24 ++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/board/ti/am62px/evm.c b/board/ti/am62px/evm.c index 97a95ce8cc2..1a2c46c462b 100644 --- a/board/ti/am62px/evm.c +++ b/board/ti/am62px/evm.c @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -13,6 +14,39 @@ #include #include +struct efi_fw_image fw_images[] = { + { + .image_type_id = AM62PX_SK_TIBOOT3_IMAGE_GUID, + .fw_name = u"AM62PX_SK_TIBOOT3", + .image_index = 1, + }, + { + .image_type_id = AM62PX_SK_SPL_IMAGE_GUID, + .fw_name = u"AM62PX_SK_SPL", + .image_index = 2, + }, + { + .image_type_id = AM62PX_SK_UBOOT_IMAGE_GUID, + .fw_name = u"AM62PX_SK_UBOOT", + .image_index = 3, + } +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "sf 0:0=tiboot3.bin raw 0 80000;" + "tispl.bin raw 80000 200000;u-boot.img raw 280000 400000", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + +#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 + int board_init(void) { return 0; diff --git a/include/configs/am62px_evm.h b/include/configs/am62px_evm.h index 06b12860e21..57a1ba9dc3c 100644 --- a/include/configs/am62px_evm.h +++ b/include/configs/am62px_evm.h @@ -8,6 +8,30 @@ #ifndef __CONFIG_AM62PX_EVM_H #define __CONFIG_AM62PX_EVM_H +/** + * define AM62PX_SK_TIBOOT3_IMAGE_GUID - firmware GUID for AM62PX sk tiboot3.bin + * define AM62PX_SK_SPL_IMAGE_GUID - firmware GUID for AM62PX sk SPL + * define AM62PX_SK_UBOOT_IMAGE_GUID - firmware GUID for AM62PX sk UBOOT + * + * These GUIDs are used in capsules updates to identify the corresponding + * firmware object. + * + * Board developers using this as a starting reference should + * define their own GUIDs to ensure that firmware repositories (like + * LVFS) do not confuse them. + */ +#define AM62PX_SK_TIBOOT3_IMAGE_GUID \ + EFI_GUID(0xb08471b7, 0xbe2d, 0x4489, 0x87, 0xa1, \ + 0xca, 0xb2, 0x8a, 0x0c, 0xf7, 0x43) + +#define AM62PX_SK_SPL_IMAGE_GUID \ + EFI_GUID(0xd02ed781, 0x6d71, 0x4c1a, 0xa9, 0x99, \ + 0x3c, 0x6a, 0x41, 0xc3, 0x63, 0x24) + +#define AM62PX_SK_UBOOT_IMAGE_GUID \ + EFI_GUID(0x7e6aea51, 0x965c, 0x44ab, 0xb3, 0x88, \ + 0xda, 0xeb, 0x03, 0xb5, 0x4f, 0x66) + /* Now for the remaining common defines */ #include From 81ab0f0fe0c792a412ae7fa1a1b60d99dec4b7ac Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:44 -0500 Subject: [PATCH 17/24] configs: am62px: Enable EFI capsule update Enable on disk, raw capsule update. Signed-off-by: Jonathan Humphreys --- configs/am62px_evm_a53_defconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configs/am62px_evm_a53_defconfig b/configs/am62px_evm_a53_defconfig index 9f40c9a0b3c..e1c9c8535e4 100644 --- a/configs/am62px_evm_a53_defconfig +++ b/configs/am62px_evm_a53_defconfig @@ -179,3 +179,5 @@ CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 CONFIG_SPL_DFU=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y + +#include From a5cf86d58476e42a385d271beedcf969c39626bb Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:45 -0500 Subject: [PATCH 18/24] doc: board: ti: am62px: document OSPI layout Added OSPI flash layout diagram, as well as example commands to flash firmware to it. Signed-off-by: Jonathan Humphreys Reviewed-by: Tom Rini --- doc/board/ti/am62px_sk.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/doc/board/ti/am62px_sk.rst b/doc/board/ti/am62px_sk.rst index 1f2982c36f9..c80b5068117 100644 --- a/doc/board/ti/am62px_sk.rst +++ b/doc/board/ti/am62px_sk.rst @@ -156,6 +156,30 @@ Image formats: .. image:: img/dm_tispl.bin.svg :alt: tispl.bin image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, and u-boot.img, +over tftp and then flash those to OSPI at their respective addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw2.svg + :alt: OSPI flash partition layout + A53 SPL DDR Memory Layout ------------------------- From c6de7a339eb1535cf3124df746372be2dd8fbdb6 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:46 -0500 Subject: [PATCH 19/24] board: beagleboneai64: Define capsule update firmware info Define the firmware components updatable via EFI capsule update, including defining capsule GUIDs for the various firmware components for the BeagleBoneAI64. Note this involved creating BeagleBoneAI64's own beagleboneai64.h board header file instead of reusing j721e_evm's. Signed-off-by: Jonathan Humphreys Reviewed-by: Ilias Apalodimas --- board/beagle/beagleboneai64/Kconfig | 4 +- board/beagle/beagleboneai64/beagleboneai64.c | 39 ++++++++++++++ include/configs/beagleboneai64.h | 55 ++++++++++++++++++++ 3 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 include/configs/beagleboneai64.h diff --git a/board/beagle/beagleboneai64/Kconfig b/board/beagle/beagleboneai64/Kconfig index 7cfccf9baf0..0f21582614d 100644 --- a/board/beagle/beagleboneai64/Kconfig +++ b/board/beagle/beagleboneai64/Kconfig @@ -37,7 +37,7 @@ config SYS_VENDOR default "beagle" config SYS_CONFIG_NAME - default "j721e_evm" + default "beagleboneai64" source "board/ti/common/Kconfig" @@ -52,7 +52,7 @@ config SYS_VENDOR default "beagle" config SYS_CONFIG_NAME - default "j721e_evm" + default "beagleboneai64" source "board/ti/common/Kconfig" diff --git a/board/beagle/beagleboneai64/beagleboneai64.c b/board/beagle/beagleboneai64/beagleboneai64.c index c5b4ff7df47..1e43d1c1bd2 100644 --- a/board/beagle/beagleboneai64/beagleboneai64.c +++ b/board/beagle/beagleboneai64/beagleboneai64.c @@ -7,6 +7,7 @@ * Copyright (C) 2022-2023 Robert Nelson, BeagleBoard.org Foundation */ +#include #include #include #include @@ -14,6 +15,44 @@ DECLARE_GLOBAL_DATA_PTR; +struct efi_fw_image fw_images[] = { + { + .image_type_id = BEAGLEBONEAI64_TIBOOT3_IMAGE_GUID, + .fw_name = u"BEAGLEBONEAI64_TIBOOT3", + .image_index = 1, + }, + { + .image_type_id = BEAGLEBONEAI64_SPL_IMAGE_GUID, + .fw_name = u"BEAGLEBONEAI64_SPL", + .image_index = 2, + }, + { + .image_type_id = BEAGLEBONEAI64_UBOOT_IMAGE_GUID, + .fw_name = u"BEAGLEBONEAI64_UBOOT", + .image_index = 3, + }, + { + .image_type_id = BEAGLEBONEAI64_SYSFW_IMAGE_GUID, + .fw_name = u"BEAGLEBONEAI64_SYSFW", + .image_index = 4, + } +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "mmc 0=tiboot3.bin raw 0 2000 mmcpart 1;" + "tispl.bin fat 0 1;u-boot.img fat 0 1; sysfw.itb fat 0 1", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + +#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 + int board_init(void) { return 0; diff --git a/include/configs/beagleboneai64.h b/include/configs/beagleboneai64.h new file mode 100644 index 00000000000..85d57248bb6 --- /dev/null +++ b/include/configs/beagleboneai64.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Configuration header file for BeagleBoneAI64 + * + * https://beagleboard.org/ai-64 + * + * Copyright (C) 2024 Texas Instruments Incorporated - https://www.ti.com/ + */ + +#ifndef __CONFIG_BEAGLEBONEAI64_H +#define __CONFIG_BEAGLEBONEAI64_H + +/* FLASH Configuration */ +#define CFG_SYS_FLASH_BASE 0x000000000 + +/* SPL Loader Configuration */ +#define CFG_SYS_UBOOT_BASE 0x50080000 + +/** + * define BEAGLEBONEAI64_TIBOOT3_IMAGE_GUID - firmware GUID for BeagleBoneAI64 + * tiboot3.bin + * define BEAGLEBONEAI64_SPL_IMAGE_GUID - firmware GUID for BeagleBoneAI64 + * SPL + * define BEAGLEBONEAI64_UBOOT_IMAGE_GUID - firmware GUID for BeagleBoneAI64 + * UBOOT + * define BEAGLEBONEAI64_SYSFW_IMAGE_GUID - firmware GUID for BeagleBoneAI64 + * SYSFW + * + * These GUIDs are used in capsules updates to identify the corresponding + * firmware object. + * + * Board developers using this as a starting reference should + * define their own GUIDs to ensure that firmware repositories (like + * LVFS) do not confuse them. + */ +#define BEAGLEBONEAI64_TIBOOT3_IMAGE_GUID \ + EFI_GUID(0x772a4810, 0x2194, 0x4923, 0x87, 0x54, \ + 0x01, 0x15, 0x87, 0x0e, 0xf3, 0x67) + +#define BEAGLEBONEAI64_SPL_IMAGE_GUID \ + EFI_GUID(0x83447222, 0x1e26, 0x40cd, 0xa3, 0x95, \ + 0xb7, 0xde, 0x09, 0x57, 0xe8, 0x75) + +#define BEAGLEBONEAI64_UBOOT_IMAGE_GUID \ + EFI_GUID(0x4249ff77, 0xc17d, 0x4eb7, 0xa1, 0xdb, \ + 0x45, 0xaa, 0x98, 0x87, 0xd4, 0x9e) + +#define BEAGLEBONEAI64_SYSFW_IMAGE_GUID \ + EFI_GUID(0xdfc9c683, 0x49b7, 0x46bd, 0xb3, 0xc1, \ + 0x3a, 0x3b, 0x2f, 0xdb, 0x13, 0x5b) + +/* Now for the remaining common defines */ +#include + +#endif /* __CONFIG_BEAGLEBONEAI64_H */ From 25e171c5a07f837f2a3178566e879894f9631b6b Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:47 -0500 Subject: [PATCH 20/24] configs: beagleboneai64: Enable EFI capsule update Enable on disk, raw capsule update. Signed-off-by: Jonathan Humphreys --- configs/j721e_beagleboneai64_a72_defconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configs/j721e_beagleboneai64_a72_defconfig b/configs/j721e_beagleboneai64_a72_defconfig index a354876f8c2..86c565a9211 100644 --- a/configs/j721e_beagleboneai64_a72_defconfig +++ b/configs/j721e_beagleboneai64_a72_defconfig @@ -172,3 +172,5 @@ CONFIG_USB_GADGET_PRODUCT_NUM=0x6163 CONFIG_SPL_DFU=y CONFIG_LZO=y CONFIG_EFI_SET_TIME=y + +#include From 865b272c845a6e4f880bbb61d4af99c4a13faa87 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:48 -0500 Subject: [PATCH 21/24] configs: j784s4_evm: Enable serial flash DFU support Enable serial flash DFU support for capsule update of firmware. Signed-off-by: Jonathan Humphreys --- configs/j784s4_evm_a72_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configs/j784s4_evm_a72_defconfig b/configs/j784s4_evm_a72_defconfig index 2aa16eb7270..141f2e0e156 100644 --- a/configs/j784s4_evm_a72_defconfig +++ b/configs/j784s4_evm_a72_defconfig @@ -85,6 +85,9 @@ CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_CCF=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x40000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y From a4d5e5daa8476469d9d990d4bfc5bf2627dc7b00 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:49 -0500 Subject: [PATCH 22/24] board: sk-am69: Define capsule update firmware info Define the firmware components updatable via EFI capsule update, including defining capsule GUIDs for the various firmware components for the AM69 SK. TODO: possibly make the struct's sk specific. TODO: add doc commit (and make sure doc is sk/NOR specific, and add OSIP boot mode) TODO: update doc to show sk defconfig when building Signed-off-by: Jonathan Humphreys Acked-by: Ilias Apalodimas --- board/ti/j784s4/evm.c | 34 ++++++++++++++++++++++++++++++++++ include/configs/j784s4_evm.h | 24 ++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/board/ti/j784s4/evm.c b/board/ti/j784s4/evm.c index aed0ea5b949..548dbd5925d 100644 --- a/board/ti/j784s4/evm.c +++ b/board/ti/j784s4/evm.c @@ -7,12 +7,46 @@ * */ +#include #include #include #include "../common/fdt_ops.h" DECLARE_GLOBAL_DATA_PTR; +struct efi_fw_image fw_images[] = { + { + .image_type_id = AM69_SK_TIBOOT3_IMAGE_GUID, + .fw_name = u"AM69_SK_TIBOOT3", + .image_index = 1, + }, + { + .image_type_id = AM69_SK_SPL_IMAGE_GUID, + .fw_name = u"AM69_SK_SPL", + .image_index = 2, + }, + { + .image_type_id = AM69_SK_UBOOT_IMAGE_GUID, + .fw_name = u"AM69_SK_UBOOT", + .image_index = 3, + } +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "sf 0:0=tiboot3.bin raw 0 80000;" + "tispl.bin raw 80000 200000;u-boot.img raw 280000 400000", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + +#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 + int board_init(void) { return 0; diff --git a/include/configs/j784s4_evm.h b/include/configs/j784s4_evm.h index 4a2ccdce144..53eb2bff221 100644 --- a/include/configs/j784s4_evm.h +++ b/include/configs/j784s4_evm.h @@ -9,6 +9,30 @@ #ifndef __CONFIG_J784S4_EVM_H #define __CONFIG_J784S4_EVM_H +/** + * define AM69_SK_TIBOOT3_IMAGE_GUID - firmware GUID for AM69 SK tiboot3.bin + * define AM69_SK_SPL_IMAGE_GUID - firmware GUID for AM69 SK SPL + * define AM69_SK_UBOOT_IMAGE_GUID - firmware GUID for AM69 SK UBOOT + * + * These GUIDs are used in capsules updates to identify the corresponding + * firmware object. + * + * Board developers using this as a starting reference should + * define their own GUIDs to ensure that firmware repositories (like + * LVFS) do not confuse them. + */ +#define AM69_SK_TIBOOT3_IMAGE_GUID \ + EFI_GUID(0xadf49ec5, 0x61bb, 0x4dbe, 0x8b, 0x8d, \ + 0x39, 0xdf, 0x4d, 0x7e, 0xbf, 0x46) + +#define AM69_SK_SPL_IMAGE_GUID \ + EFI_GUID(0x787f0059, 0x63a1, 0x461c, 0xa1, 0x8e, \ + 0x9d, 0x83, 0x83, 0x45, 0xfe, 0x8e) + +#define AM69_SK_UBOOT_IMAGE_GUID \ + EFI_GUID(0x9300505d, 0x6ec5, 0x4ff8, 0x99, 0xe4, \ + 0x54, 0x59, 0xa0, 0x4b, 0xe6, 0x17) + /* Now for the remaining common defines */ #include From f29f6f1262b3b8418ad0640df90a7cea01d9b9a3 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:50 -0500 Subject: [PATCH 23/24] configs: j784s4: Enable EFI capsule update Enable on disk, raw capsule update. Signed-off-by: Jonathan Humphreys --- configs/j784s4_evm_a72_defconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configs/j784s4_evm_a72_defconfig b/configs/j784s4_evm_a72_defconfig index 141f2e0e156..3cfa006f86b 100644 --- a/configs/j784s4_evm_a72_defconfig +++ b/configs/j784s4_evm_a72_defconfig @@ -161,3 +161,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_DM_THERMAL=y CONFIG_EFI_SET_TIME=y + +#include From 3e6fd29aa88c5c05a3e4057148ff74c7f2d7a3d2 Mon Sep 17 00:00:00 2001 From: Jonathan Humphreys Date: Fri, 14 Jun 2024 11:35:51 -0500 Subject: [PATCH 24/24] doc: board: ti: j784s4: document OSPI NOR layout Added OSPI NOR flash layout diagram, as well as example commands to flash firmware to it. Added OSPI boot mode pin setting. Signed-off-by: Jonathan Humphreys --- doc/board/ti/img/ospi_sysfw3.svg | 802 +++++++++++++++++++++++++++++++ doc/board/ti/j784s4_evm.rst | 28 ++ 2 files changed, 830 insertions(+) create mode 100644 doc/board/ti/img/ospi_sysfw3.svg diff --git a/doc/board/ti/img/ospi_sysfw3.svg b/doc/board/ti/img/ospi_sysfw3.svg new file mode 100644 index 00000000000..382867c6f4f --- /dev/null +++ b/doc/board/ti/img/ospi_sysfw3.svg @@ -0,0 +1,802 @@ + + + + + + + + + + + + + + + + + + + ospi.tiboot3(512k) + + + + ospi.tiboot3(512k) + + + + + + + + + + + + + + 0x0 + + + + + 0x0 + + + + + + + + + + + + + ospi.tispl(2M) + + + + ospi.tispl(2M) + + + + + + + + + + + + + + 0x80000 + + + + + 0x80000 + + + + + + + + + + + + + ospi.u-boot(4M) + + + + ospi.u-boot(4M) + + + + + + + + + + + + + + 0x280000 + + + + + 0x280000 + + + + + + + + + + + + + ospi.env(128K) + + + + ospi.env(128K) + + + + + + + + + + + + + + 0x680000 + + + + + 0x680000 + + + + + + + + + + + + + ospi.env.backup(128K) + + + + ospi.env.backup(128K) + + + + + + + + + + + + + + 0x6A0000 + + + + + 0x6A0000 + + + + + + + + + + + + + padding(1280K) + + + + padding(1280K) + + + + + + + + + + + + + + 0x6C0000 + + + + + 0x6C0000 + + + + + + + + + + + + + ospi.rootfs(UBIFS) + + + + ospi.rootfs(UBIFS) + + + + + + + + + + + + + + 0x800000 + + + + + 0x800000 + + + + + + + + + + + + + ospi.phypattern(256k) + + + + ospi.phypattern(256k) + + + + + + + + + + + + + + 0x3FC0000 + + + + + 0x3FC0000 + + + + + diff --git a/doc/board/ti/j784s4_evm.rst b/doc/board/ti/j784s4_evm.rst index 5c4bd2c927d..2ffec3dbd3b 100644 --- a/doc/board/ti/j784s4_evm.rst +++ b/doc/board/ti/j784s4_evm.rst @@ -153,6 +153,31 @@ Image formats .. image:: img/dm_tispl.bin.svg :alt: tispl.bin format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI NOR: + +Below commands can be used to download tiboot3.bin, tispl.bin, and +u-boot.img over tftp and then flash those to OSPI at their respective +addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + +Flash layout for OSPI NOR: + +.. image:: img/ospi_sysfw3.svg + :alt: OSPI NOR flash partition layout + R5 Memory Map ------------- @@ -262,6 +287,9 @@ section. * - SD - 0000 + * - OSPI + - 0010 + * - EMMC - 0110