[PATCH v5 0/6] Add DFU and usb boot for TI am62x SK and beagleplay

This series adds DFU support for TI AM62 SK and beagleplay boards.
I have picked this series up from Sjoerd due to time constraints.
Since the last revision: * Removed dwc3 mode setting in favour of reinstating forced peripheral mode for usb0 * Use of config fragments for both r5 and a53 DFU configuration to reduce duplication * Typographical improvements to documentation
We plan to also submit the dts changes to linux so that those can be dropped again in the near future (hopefully)
Changes in v5: - Forcing usb0 into peripheral mode reinstated - Switch to config fragment for a53 DFU configuration - Use existing config fragment for a53 DFU configuration - Typographical corrections
Changes in v4: - Add config dependency on SYSCON - Move defines and constants outside out of function scope - Don't force usb0 into peripheral mode - Move R5 dfu config to a config fragment rather then a full defconfig - Don't enable XHCI for the R5 SPL, unneeded
Change in v3: - Add dfu via environment rather then config headers - Enable usb nodes in all boot phases - Run savedefconfig to adjust to more recent u-boot
Changes in v2: - Switch dwc3 glue to a seperate driver rather then in dwc-generic - Minimize config changes to just DFU configuration - Only enable usb port 0 DFU in SPL - Create a seperate defconfig for R5
Sjoerd Simons (6): usb: dwc3: Add dwc3 glue driver for am62 board: ti: am62x: am62x: include env for DFU arm: dts: k3-am625-sk: Enable usb port in u-boot configs: am62x_evm_*: Enable USB and DFU support beagleplay: Add DFU support doc: board: Add document for DFU boot on am62x SoCs
arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi | 9 ++ arch/arm/dts/k3-am625-sk-u-boot.dtsi | 9 ++ board/beagle/beagleplay/beagleplay.env | 1 + board/ti/am62x/am62x.env | 1 + configs/am62x_a53_usbdfu.config | 29 +++++ configs/am62x_beagleplay_a53_defconfig | 2 + configs/am62x_evm_a53_defconfig | 3 + configs/am62x_r5_usbdfu.config | 28 +++++ doc/board/beagle/am62x_beagleplay.rst | 14 ++- doc/board/ti/am62x_sk.rst | 37 ++++++ drivers/usb/dwc3/Kconfig | 14 +++ drivers/usb/dwc3/Makefile | 1 + drivers/usb/dwc3/dwc3-am62.c | 125 +++++++++++++++++++ 13 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config create mode 100644 drivers/usb/dwc3/dwc3-am62.c

From: Sjoerd Simons sjoerd@collabora.com
Add glue code for TI AM62 to the dwc3 driver; Most code adopted from TI vendor u-boot code.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Tested-by: Alexander Sverdlin alexander.sverdlin@siemens.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Tested-by: Mattijs Korpershoek mkorpershoek@baylibre.com # on beagle play --- Changes in v5: - No change
Changes in v4: - Add config dependency on SYSCON - Move defines and constants outside out of function scope
Changes in v2: - Switch dwc3 glue to a seperate driver rather then in dwc-generic
drivers/usb/dwc3/Kconfig | 14 ++++ drivers/usb/dwc3/Makefile | 1 + drivers/usb/dwc3/dwc3-am62.c | 125 +++++++++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 drivers/usb/dwc3/dwc3-am62.c
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig index c0c8c16fd9..0100723a68 100644 --- a/drivers/usb/dwc3/Kconfig +++ b/drivers/usb/dwc3/Kconfig @@ -37,6 +37,20 @@ config SPL_USB_DWC3_GENERIC Select this for Xilinx ZynqMP and similar Platforms. This wrapper supports Host and Peripheral operation modes.
+config SPL_USB_DWC3_AM62 + bool "TI AM62 USB wrapper" + depends on SPL_DM_USB && SPL_USB_DWC3_GENERIC && SPL_SYSCON + help + Select this for TI AM62 Platforms. + This wrapper supports Host and Peripheral operation modes. + +config USB_DWC3_AM62 + bool "TI AM62 USB wrapper" + depends on DM_USB && USB_DWC3_GENERIC && SYSCON + help + Select this for TI AM62 Platforms. + This wrapper supports Host and Peripheral operation modes. + config USB_DWC3_MESON_G12A bool "Amlogic Meson G12A USB wrapper" depends on DM_USB && USB_DWC3 && ARCH_MESON diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile index 97b4f7191c..a46b6824ab 100644 --- a/drivers/usb/dwc3/Makefile +++ b/drivers/usb/dwc3/Makefile @@ -6,6 +6,7 @@ dwc3-y := core.o
obj-$(CONFIG_USB_DWC3_GADGET) += gadget.o ep0.o
+obj-$(CONFIG_$(SPL_)USB_DWC3_AM62) += dwc3-am62.o obj-$(CONFIG_USB_DWC3_OMAP) += dwc3-omap.o obj-$(CONFIG_USB_DWC3_MESON_G12A) += dwc3-meson-g12a.o obj-$(CONFIG_USB_DWC3_MESON_GXL) += dwc3-meson-gxl.o diff --git a/drivers/usb/dwc3/dwc3-am62.c b/drivers/usb/dwc3/dwc3-am62.c new file mode 100644 index 0000000000..99519602eb --- /dev/null +++ b/drivers/usb/dwc3/dwc3-am62.c @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * TI AM62 specific glue layer for DWC3 + */ + +#include <dm.h> +#include <dm/device_compat.h> +#include <regmap.h> +#include <syscon.h> +#include <asm/io.h> + +#include "dwc3-generic.h" + +#define USBSS_MODE_CONTROL 0x1c +#define USBSS_PHY_CONFIG 0x8 +#define USBSS_PHY_VBUS_SEL_MASK GENMASK(2, 1) +#define USBSS_PHY_VBUS_SEL_SHIFT 1 +#define USBSS_MODE_VALID BIT(0) +#define PHY_PLL_REFCLK_MASK GENMASK(3, 0) +static const int dwc3_ti_am62_rate_table[] = { /* in KHZ */ + 9600, + 10000, + 12000, + 19200, + 20000, + 24000, + 25000, + 26000, + 38400, + 40000, + 58000, + 50000, + 52000, +}; + +static void dwc3_ti_am62_glue_configure(struct udevice *dev, int index, + enum usb_dr_mode mode) +{ + struct clk usb2_refclk; + int rate_code, i, ret; + unsigned long rate; + u32 reg; + void *usbss; + bool vbus_divider; + struct regmap *syscon; + struct ofnode_phandle_args args; + + usbss = dev_remap_addr_index(dev, 0); + if (IS_ERR(usbss)) { + dev_err(dev, "can't map IOMEM resource\n"); + return; + } + + ret = clk_get_by_name(dev, "ref", &usb2_refclk); + if (ret) { + dev_err(dev, "can't get usb2_refclk\n"); + return; + } + + /* Calculate the rate code */ + rate = clk_get_rate(&usb2_refclk); + rate /= 1000; /* To KHz */ + for (i = 0; i < ARRAY_SIZE(dwc3_ti_am62_rate_table); i++) { + if (dwc3_ti_am62_rate_table[i] == rate) + break; + } + + if (i == ARRAY_SIZE(dwc3_ti_am62_rate_table)) { + dev_err(dev, "unsupported usb2_refclk rate: %lu KHz\n", rate); + return; + } + + rate_code = i; + + /* Read the syscon property */ + syscon = syscon_regmap_lookup_by_phandle(dev, "ti,syscon-phy-pll-refclk"); + if (IS_ERR(syscon)) { + dev_err(dev, "unable to get ti,syscon-phy-pll-refclk regmap\n"); + return; + } + + ret = ofnode_parse_phandle_with_args(dev_ofnode(dev), "ti,syscon-phy-pll-refclk", NULL, 1, + 0, &args); + if (ret) + return; + + /* Program PHY PLL refclk by reading syscon property */ + ret = regmap_update_bits(syscon, args.args[0], PHY_PLL_REFCLK_MASK, rate_code); + if (ret) { + dev_err(dev, "failed to set phy pll reference clock rate\n"); + return; + } + + /* VBUS divider select */ + reg = readl(usbss + USBSS_PHY_CONFIG); + vbus_divider = dev_read_bool(dev, "ti,vbus-divider"); + if (vbus_divider) + reg |= 1 << USBSS_PHY_VBUS_SEL_SHIFT; + + writel(reg, usbss + USBSS_PHY_CONFIG); + + /* Set mode valid */ + reg = readl(usbss + USBSS_MODE_CONTROL); + reg |= USBSS_MODE_VALID; + writel(reg, usbss + USBSS_MODE_CONTROL); +} + +struct dwc3_glue_ops ti_am62_ops = { + .glue_configure = dwc3_ti_am62_glue_configure, +}; + +static const struct udevice_id dwc3_am62_match[] = { + { .compatible = "ti,am62-usb", .data = (ulong)&ti_am62_ops }, + { /* sentinel */ } +}; + +U_BOOT_DRIVER(dwc3_am62_wrapper) = { + .name = "dwc3-am62", + .id = UCLASS_SIMPLE_BUS, + .of_match = dwc3_am62_match, + .bind = dwc3_glue_bind, + .probe = dwc3_glue_probe, + .remove = dwc3_glue_remove, + .plat_auto = sizeof(struct dwc3_glue_data), +};

From: Sjoerd Simons sjoerd@collabora.com
Include standard TI K3 dfu environment
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Reviewed-by: Alexander Sverdlin alexander.sverdlin@siemens.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Tested-by: Mattijs Korpershoek mkorpershoek@baylibre.com # on beagle play --- (no changes since v3)
Changes in v3: - Add dfu via environment rather then config headers
Changes in v2: - Minimize config changes to just DFU configuration
board/ti/am62x/am62x.env | 1 + 1 file changed, 1 insertion(+)
diff --git a/board/ti/am62x/am62x.env b/board/ti/am62x/am62x.env index 9cb186c2a0..09b9b16a3e 100644 --- a/board/ti/am62x/am62x.env +++ b/board/ti/am62x/am62x.env @@ -1,5 +1,6 @@ #include <env/ti/ti_common.env> #include <env/ti/mmc.env> +#include <env/ti/k3_dfu.env>
name_kern=Image console=ttyS2,115200n8

From: Sjoerd Simons sjoerd@collabora.com
Enable usb0 in all boot phases for use with DFU
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Reviewed-by: Alexander Sverdlin alexander.sverdlin@siemens.com Signed-off-by: Martyn Welch martyn.welch@collabora.com --- Changes in v5: - Forcing usb0 into peripheral mode reinstated
Changes in v4: - Don't force usb0 into peripheral mode
Changes in v3: - Enable usb nodes in all boot phases
Changes in v2: - Only enable usb port 0 DFU in SPL
arch/arm/dts/k3-am625-sk-u-boot.dtsi | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/arch/arm/dts/k3-am625-sk-u-boot.dtsi b/arch/arm/dts/k3-am625-sk-u-boot.dtsi index fa778b0ff4..1fc0d407cb 100644 --- a/arch/arm/dts/k3-am625-sk-u-boot.dtsi +++ b/arch/arm/dts/k3-am625-sk-u-boot.dtsi @@ -46,3 +46,12 @@ &cpsw_port2 { status = "disabled"; }; + +&usbss0 { + bootph-all; +}; + +&usb0 { + dr_mode = "peripheral"; + bootph-all; +};

Hi Martyn,
Thank you for the patch.
On lun., mai 06, 2024 at 15:38, Martyn Welch martyn.welch@collabora.com wrote:
From: Sjoerd Simons sjoerd@collabora.com
Enable usb0 in all boot phases for use with DFU
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Reviewed-by: Alexander Sverdlin alexander.sverdlin@siemens.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Changes in v5:
- Forcing usb0 into peripheral mode reinstated
Changes in v4:
- Don't force usb0 into peripheral mode
Changes in v3:
- Enable usb nodes in all boot phases
Changes in v2:
- Only enable usb port 0 DFU in SPL
arch/arm/dts/k3-am625-sk-u-boot.dtsi | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/arch/arm/dts/k3-am625-sk-u-boot.dtsi b/arch/arm/dts/k3-am625-sk-u-boot.dtsi index fa778b0ff4..1fc0d407cb 100644 --- a/arch/arm/dts/k3-am625-sk-u-boot.dtsi +++ b/arch/arm/dts/k3-am625-sk-u-boot.dtsi @@ -46,3 +46,12 @@ &cpsw_port2 { status = "disabled"; };
+&usbss0 {
- bootph-all;
+};
+&usb0 {
- dr_mode = "peripheral";
- bootph-all;
+};
2.43.0

From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com --- Changes in v5: - Switch to config fragment for a53 most DFU configuration
Changes in v4: - Move R5 dfu config to a config fragment rather then a full defconfig - Don't enable XHCI for the R5 SPL, unneeded
Changes in v3: - Run savedefconfig to adjust to more recent u-boot
Changes in v2: - Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y + +#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set +# CONFIG_MMC_SDHCI is not set

Hello Martyn, first thanks for your series, with this we might be able to drop some downstream branch.
On Mon, May 06, 2024 at 03:38:44PM +0100, Martyn Welch wrote:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
...
diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@
...
+CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165
This is making this fragment TI _board_ specific, while the file name seems to imply that this is generic for the TI SoC. Other vendors, using TI SoCs, will likely want to use their own USB IDs.
Not a big deal and no need to change it, we'll handle this in our own defconfig when we'll enable this, but I wanted to mention this.
Francesco

On Tue, May 07, 2024 at 10:14:28AM +0200, Francesco Dolcini wrote:
Hello Martyn, first thanks for your series, with this we might be able to drop some downstream branch.
On Mon, May 06, 2024 at 03:38:44PM +0100, Martyn Welch wrote:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
...
diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@
...
+CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165
This is making this fragment TI _board_ specific, while the file name seems to imply that this is generic for the TI SoC. Other vendors, using TI SoCs, will likely want to use their own USB IDs.
Not a big deal and no need to change it, we'll handle this in our own defconfig when we'll enable this, but I wanted to mention this.
One thing about fragments, at least so long as it's being processed correctly, is that "make fooboard_config fragA.config fragB.config" means that fragB.config will override fragA.config values. Not that it shouldn't also possibly be re-done as either of: 1) am62x_r5_usbdfu.config + am62x_evm_r5_usbdfu.config 2) better use of imply keyword perhaps in the SoC stanza in one of the K3 Kconfig files.

Hi Martyn,
Thank you for the patch.
On lun., mai 06, 2024 at 15:38, Martyn Welch martyn.welch@collabora.com wrote:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Changes in v5:
- Switch to config fragment for a53 most DFU configuration
Changes in v4:
- Move R5 dfu config to a config fragment rather then a full defconfig
- Don't enable XHCI for the R5 SPL, unneeded
Changes in v3:
- Run savedefconfig to adjust to more recent u-boot
Changes in v2:
- Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set
+# CONFIG_MMC_SDHCI is not set
2.43.0

Martyn Welch martyn.welch@collabora.com writes:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Changes in v5:
- Switch to config fragment for a53 most DFU configuration
Changes in v4:
- Move R5 dfu config to a config fragment rather then a full defconfig
- Don't enable XHCI for the R5 SPL, unneeded
Changes in v3:
- Run savedefconfig to adjust to more recent u-boot
Changes in v2:
- Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set
+# CONFIG_MMC_SDHCI is not set
2.43.0
Hi all, it appears that this patch breaks OSPI DFU on the board. In particular, changing the CONFIG_SYS_DFU_DATA_BUF_SIZE seems to be the culprit.
I see the error as a DFU timeout when applying capsules.
SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed
Jon

On Thu, 2024-05-23 at 15:08 -0500, Jon Humphreys wrote:
Martyn Welch martyn.welch@collabora.com writes:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Changes in v5:
- Switch to config fragment for a53 most DFU configuration
Changes in v4:
- Move R5 dfu config to a config fragment rather then a full
defconfig
- Don't enable XHCI for the R5 SPL, unneeded
Changes in v3:
- Run savedefconfig to adjust to more recent u-boot
Changes in v2:
- Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set
+# CONFIG_MMC_SDHCI is not set
2.43.0
Hi all, it appears that this patch breaks OSPI DFU on the board. In particular, changing the CONFIG_SYS_DFU_DATA_BUF_SIZE seems to be the culprit.
I see the error as a DFU timeout when applying capsules.
SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed
I'm not seeing this failure using the `-next` branch from yesterday (2f96033923).
I've attempted to use both the `uboot-capsule.bin` produced with and without the DFU config enabled whilst booting the SK-AM62 via DFU and from an SD card. I seem to be consistently getting the following:
=> ext2ls mmc 1:1 <DIR> 4096 . <DIR> 4096 .. <DIR> 16384 lost+found 1132791 uboot-capsule.bin => load mmc 1:1 ${loadaddr} /uboot-capsule.bin 1132791 bytes read in 57 ms (19 MiB/s) => efidebug capsule update ${loadaddr} ** File not found ubootefi.var ** Failed to load EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 Mi B ######################################################## ** Unable to write file ubootefi.var ** Failed to persist EFI variables =>
TBH, I'm not sure if this is good or bad at this point, but I'm not seeing the error that you reported. As can be seen above, I don't have a `ubootefi.var` file, but then I don't boot using EFI mechanisms, so I guess that's expected?
But then, the commands I've used above aren't applying the capsule either right?
Martyn
Jon

Martyn Welch martyn.welch@collabora.com writes:
On Thu, 2024-05-23 at 15:08 -0500, Jon Humphreys wrote:
Martyn Welch martyn.welch@collabora.com writes:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Changes in v5:
- Switch to config fragment for a53 most DFU configuration
Changes in v4:
- Move R5 dfu config to a config fragment rather then a full
defconfig
- Don't enable XHCI for the R5 SPL, unneeded
Changes in v3:
- Run savedefconfig to adjust to more recent u-boot
Changes in v2:
- Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set
+# CONFIG_MMC_SDHCI is not set
2.43.0
Hi all, it appears that this patch breaks OSPI DFU on the board. In particular, changing the CONFIG_SYS_DFU_DATA_BUF_SIZE seems to be the culprit.
I see the error as a DFU timeout when applying capsules.
SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed
I'm not seeing this failure using the `-next` branch from yesterday (2f96033923).
I've attempted to use both the `uboot-capsule.bin` produced with and without the DFU config enabled whilst booting the SK-AM62 via DFU and from an SD card. I seem to be consistently getting the following:
=> ext2ls mmc 1:1
<DIR> 4096 . <DIR> 4096 .. <DIR> 16384 lost+found 1132791 uboot-capsule.bin => load mmc 1:1 ${loadaddr} /uboot-capsule.bin 1132791 bytes read in 57 ms (19 MiB/s) => efidebug capsule update ${loadaddr} ** File not found ubootefi.var ** Failed to load EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 Mi B ######################################################## ** Unable to write file ubootefi.var ** Failed to persist EFI variables =>
TBH, I'm not sure if this is good or bad at this point, but I'm not seeing the error that you reported. As can be seen above, I don't have a `ubootefi.var` file, but then I don't boot using EFI mechanisms, so I guess that's expected?
But then, the commands I've used above aren't applying the capsule either right?
Martyn
Jon
Hi Martyn, you are not seeing the error. I am on vacation until the 10th so I cannot follow up. When I return, I'll see if I can reproduce from the exact sha you listed and we can go from there.
Thanks Jon

Martyn Welch martyn.welch@collabora.com writes:
On Thu, 2024-05-23 at 15:08 -0500, Jon Humphreys wrote:
Martyn Welch martyn.welch@collabora.com writes:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Changes in v5:
- Switch to config fragment for a53 most DFU configuration
Changes in v4:
- Move R5 dfu config to a config fragment rather then a full
defconfig
- Don't enable XHCI for the R5 SPL, unneeded
Changes in v3:
- Run savedefconfig to adjust to more recent u-boot
Changes in v2:
- Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set
+# CONFIG_MMC_SDHCI is not set
2.43.0
Hi all, it appears that this patch breaks OSPI DFU on the board. In particular, changing the CONFIG_SYS_DFU_DATA_BUF_SIZE seems to be the culprit.
I see the error as a DFU timeout when applying capsules.
SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed
I'm not seeing this failure using the `-next` branch from yesterday (2f96033923).
I've attempted to use both the `uboot-capsule.bin` produced with and without the DFU config enabled whilst booting the SK-AM62 via DFU and from an SD card. I seem to be consistently getting the following:
=> ext2ls mmc 1:1
<DIR> 4096 . <DIR> 4096 .. <DIR> 16384 lost+found 1132791 uboot-capsule.bin => load mmc 1:1 ${loadaddr} /uboot-capsule.bin 1132791 bytes read in 57 ms (19 MiB/s) => efidebug capsule update ${loadaddr} ** File not found ubootefi.var ** Failed to load EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 Mi B ######################################################## ** Unable to write file ubootefi.var ** Failed to persist EFI variables =>
TBH, I'm not sure if this is good or bad at this point, but I'm not seeing the error that you reported. As can be seen above, I don't have a `ubootefi.var` file, but then I don't boot using EFI mechanisms, so I guess that's expected?
But then, the commands I've used above aren't applying the capsule either right?
Martyn
Jon
Hi Martyn, against upstream/next, I no longer see the failure. Thanks for looking into it.
Jon

Jon Humphreys j-humphreys@ti.com writes:
Martyn Welch martyn.welch@collabora.com writes:
On Thu, 2024-05-23 at 15:08 -0500, Jon Humphreys wrote:
Martyn Welch martyn.welch@collabora.com writes:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Changes in v5:
- Switch to config fragment for a53 most DFU configuration
Changes in v4:
- Move R5 dfu config to a config fragment rather then a full
defconfig
- Don't enable XHCI for the R5 SPL, unneeded
Changes in v3:
- Run savedefconfig to adjust to more recent u-boot
Changes in v2:
- Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set
+# CONFIG_MMC_SDHCI is not set
2.43.0
Hi all, it appears that this patch breaks OSPI DFU on the board. In particular, changing the CONFIG_SYS_DFU_DATA_BUF_SIZE seems to be the culprit.
I see the error as a DFU timeout when applying capsules.
SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed
I'm not seeing this failure using the `-next` branch from yesterday (2f96033923).
I've attempted to use both the `uboot-capsule.bin` produced with and without the DFU config enabled whilst booting the SK-AM62 via DFU and from an SD card. I seem to be consistently getting the following:
=> ext2ls mmc 1:1
<DIR> 4096 . <DIR> 4096 .. <DIR> 16384 lost+found 1132791 uboot-capsule.bin => load mmc 1:1 ${loadaddr} /uboot-capsule.bin 1132791 bytes read in 57 ms (19 MiB/s) => efidebug capsule update ${loadaddr} ** File not found ubootefi.var ** Failed to load EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 Mi B ######################################################## ** Unable to write file ubootefi.var ** Failed to persist EFI variables =>
TBH, I'm not sure if this is good or bad at this point, but I'm not seeing the error that you reported. As can be seen above, I don't have a `ubootefi.var` file, but then I don't boot using EFI mechanisms, so I guess that's expected?
But then, the commands I've used above aren't applying the capsule either right?
Martyn
Jon
Hi Martyn, against upstream/next, I no longer see the failure. Thanks for looking into it.
Jon
Sorry, I wasn't running what I thought I was. I can confirm that I see the failure when I build against 2f960339235.
Here are my steps:
=> ls mmc 1 288978 tiboot3.bin 1017959 tispl.bin 1130635 u-boot.img 307 uEnv.txt 1133143 uboot-capsule.bin
5 file(s), 0 dir(s)
=> load mmc 1:1 ${loadaddr} /uboot-capsule.bin 1133143 bytes read in 60 ms (18 MiB/s) => efidebug capsule update ${loadaddr} Cannot read EFI system partition Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed Firmware update failed: <NULL> Cannot handle a capsule at 0000000082000000 =>
What board rev of the sk-am62 are you using? I am using PROC142A.
Jon

On Thu, 2024-07-11 at 16:41 -0500, Jon Humphreys wrote:
Jon Humphreys j-humphreys@ti.com writes:
Martyn Welch martyn.welch@collabora.com writes:
On Thu, 2024-05-23 at 15:08 -0500, Jon Humphreys wrote:
Martyn Welch martyn.welch@collabora.com writes:
From: Sjoerd Simons sjoerd@collabora.com
Provide config fragments to enable USB host as well as USB gadget and DFU support for a53 and r5. This relevant fragment is included into the am62x EVM a53 defconfig. For the r5, due to the smaller available size, the config fragment also disables support for persistent storage to free up space for USB support. This fragment needs to be included is DFU booting is desired.
The CONFIG_DFU_SF option is placed in the defconfig rather than the fragment as this is known not to be supported on all boards that can support DFU.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Changes in v5:
- Switch to config fragment for a53 most DFU configuration
Changes in v4:
- Move R5 dfu config to a config fragment rather then a full
defconfig
- Don't enable XHCI for the R5 SPL, unneeded
Changes in v3:
- Run savedefconfig to adjust to more recent u-boot
Changes in v2:
- Create a seperate defconfig for R5
configs/am62x_a53_usbdfu.config | 30 ++++++++++++++++++++++++++++++ configs/am62x_evm_a53_defconfig | 2 ++ configs/am62x_r5_usbdfu.config | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 configs/am62x_a53_usbdfu.config create mode 100644 configs/am62x_r5_usbdfu.config
diff --git a/configs/am62x_a53_usbdfu.config b/configs/am62x_a53_usbdfu.config new file mode 100644 index 0000000000..3a19cf2328 --- /dev/null +++ b/configs/am62x_a53_usbdfu.config @@ -0,0 +1,29 @@ +CONFIG_SYS_MALLOC_LEN=0x2000000 +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_RAM_SUPPORT=y +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SPL_USB_GADGET=y +CONFIG_SPL_DFU=y +CONFIG_CMD_DFU=y +CONFIG_CMD_USB=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_DFU_MMC=y +CONFIG_DFU_RAM=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_SYS_DFU_MAX_FILE_SIZE=0x800000 +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y diff --git a/configs/am62x_evm_a53_defconfig b/configs/am62x_evm_a53_defconfig index 6c708dcb05..16294a6a79 100644 --- a/configs/am62x_evm_a53_defconfig +++ b/configs/am62x_evm_a53_defconfig @@ -68,6 +68,7 @@ CONFIG_SPL_OF_TRANSLATE=y CONFIG_CLK=y CONFIG_SPL_CLK=y CONFIG_CLK_TI_SCI=y +CONFIG_DFU_SF=y CONFIG_DMA_CHANNELS=y CONFIG_TI_K3_NAVSS_UDMA=y CONFIG_TI_SCI_PROTOCOL=y @@ -111,3 +112,5 @@ CONFIG_SPL_SYSRESET=y CONFIG_SYSRESET_TI_SCI=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config> diff --git a/configs/am62x_r5_usbdfu.config b/configs/am62x_r5_usbdfu.config new file mode 100644 index 0000000000..772bb2ab93 --- /dev/null +++ b/configs/am62x_r5_usbdfu.config @@ -0,0 +1,28 @@ +CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SYSCON=y +CONFIG_SPL_SYSCON=y +CONFIG_SYS_DFU_DATA_BUF_SIZE=0x5000 +CONFIG_MISC=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_SPL_DM_USB_GADGET=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_GENERIC=y +CONFIG_SPL_USB_DWC3_AM62=y +CONFIG_USB_GADGET=y +CONFIG_SPL_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" +CONFIG_USB_GADGET_VENDOR_NUM=0x0451 +CONFIG_USB_GADGET_PRODUCT_NUM=0x6165 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_SPL_DFU=y +# CONFIG_SPL_MMC is not set +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set +# CONFIG_SPL_SPI is not set +# CONFIG_SPL_SYS_MALLOC is not set +# CONFIG_CMD_GPT is not set +# CONFIG_CMD_MMC is not set +# CONFIG_CMD_FAT is not set
+# CONFIG_MMC_SDHCI is not set
2.43.0
Hi all, it appears that this patch breaks OSPI DFU on the board. In particular, changing the CONFIG_SYS_DFU_DATA_BUF_SIZE seems to be the culprit.
I see the error as a DFU timeout when applying capsules.
SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed
I'm not seeing this failure using the `-next` branch from yesterday (2f96033923).
I've attempted to use both the `uboot-capsule.bin` produced with and without the DFU config enabled whilst booting the SK-AM62 via DFU and from an SD card. I seem to be consistently getting the following:
=> ext2ls mmc 1:1
<DIR> 4096 . <DIR> 4096 .. <DIR> 16384 lost+found 1132791 uboot- capsule.bin => load mmc 1:1 ${loadaddr} /uboot- capsule.bin 1132791 bytes read in 57 ms (19 MiB/s) => efidebug capsule update ${loadaddr} ** File not found ubootefi.var ** Failed to load EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables ** Unable to write file ubootefi.var ** Failed to persist EFI variables SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 Mi B ######################################################## ** Unable to write file ubootefi.var ** Failed to persist EFI variables =>
TBH, I'm not sure if this is good or bad at this point, but I'm not seeing the error that you reported. As can be seen above, I don't have a `ubootefi.var` file, but then I don't boot using EFI mechanisms, so I guess that's expected?
But then, the commands I've used above aren't applying the capsule either right?
Martyn
Jon
Hi Martyn, against upstream/next, I no longer see the failure. Thanks for looking into it.
Jon
Sorry, I wasn't running what I thought I was. I can confirm that I see the failure when I build against 2f960339235.
Here are my steps:
=> ls mmc 1 288978 tiboot3.bin 1017959 tispl.bin 1130635 u-boot.img 307 uEnv.txt 1133143 uboot-capsule.bin
5 file(s), 0 dir(s)
=> load mmc 1:1 ${loadaddr} /uboot-capsule.bin 1133143 bytes read in 60 ms (18 MiB/s) => efidebug capsule update ${loadaddr} Cannot read EFI system partition Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables Cannot read EFI system partition Failed to persist EFI variables SF: Detected s28hs512t with page size 256 Bytes, erase size 256 KiB, total 64 MiB ############jedec_spi_nor flash@0: flash operation timed out #DFU write failed Firmware update failed: <NULL> Cannot handle a capsule at 0000000082000000 =>
What board rev of the sk-am62 are you using? I am using PROC142A.
Hi Jon,
The board I have here is PROC114E3.
Martyn
Jon

From: Sjoerd Simons sjoerd@collabora.com
DFU mode on a beagleplay can be used via the Type-C connector by holding the USR switch while powering on.
Configuration is already provided as fragments for both the A53 and R5 u-boot parts. Include the am62x_a53_usbdfu.config config. The am62x_r5_usbdfu.config fragment needs to be added should DFU boot be required as this will disable booting from persistent storage due to binary size constraints.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com --- Changes in v5: - Use existing config fragment for a53 DFU configuration - Force usb0 into peripheral mode
Changes in v4: - New patch
arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi | 9 +++++++++ board/beagle/beagleplay/beagleplay.env | 1 + configs/am62x_beagleplay_a53_defconfig | 2 ++ 3 files changed, 12 insertions(+)
diff --git a/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi b/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi index fb2032068d..967a2bdcd1 100644 --- a/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi +++ b/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi @@ -54,6 +54,15 @@ >; };
+&usbss0 { + bootph-all; +}; + +&usb0 { + dr_mode = "peripheral"; + bootph-all; +}; + #ifdef CONFIG_TARGET_AM625_A53_BEAGLEPLAY
#define SPL_NODTB "spl/u-boot-spl-nodtb.bin" diff --git a/board/beagle/beagleplay/beagleplay.env b/board/beagle/beagleplay/beagleplay.env index bbf6b925d0..8dbfc2f7d2 100644 --- a/board/beagle/beagleplay/beagleplay.env +++ b/board/beagle/beagleplay/beagleplay.env @@ -1,5 +1,6 @@ #include <env/ti/ti_common.env> #include <env/ti/mmc.env> +#include <env/ti/k3_dfu.env>
name_kern=Image console=ttyS2,115200n8 diff --git a/configs/am62x_beagleplay_a53_defconfig b/configs/am62x_beagleplay_a53_defconfig index 4f1be1df59..ec62670d55 100644 --- a/configs/am62x_beagleplay_a53_defconfig +++ b/configs/am62x_beagleplay_a53_defconfig @@ -121,3 +121,5 @@ CONFIG_EXT4_WRITE=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_LZO=y CONFIG_EFI_SET_TIME=y + +#include <configs/am62x_a53_usbdfu.config>

Hi Martyn,
Thank you for the patch, and for taking over this series.
On lun., mai 06, 2024 at 15:38, Martyn Welch martyn.welch@collabora.com wrote:
From: Sjoerd Simons sjoerd@collabora.com
DFU mode on a beagleplay can be used via the Type-C connector by holding the USR switch while powering on.
Configuration is already provided as fragments for both the A53 and R5 u-boot parts. Include the am62x_a53_usbdfu.config config. The am62x_r5_usbdfu.config fragment needs to be added should DFU boot be required as this will disable booting from persistent storage due to binary size constraints.
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Signed-off-by: Martyn Welch martyn.welch@collabora.com
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
I've tested usb gadget on Beagle Play board using fastboot. Also tested DFU mode via snagboot.
Tested-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Changes in v5:
- Use existing config fragment for a53 DFU configuration
- Force usb0 into peripheral mode
Changes in v4:
- New patch
arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi | 9 +++++++++ board/beagle/beagleplay/beagleplay.env | 1 + configs/am62x_beagleplay_a53_defconfig | 2 ++ 3 files changed, 12 insertions(+)
diff --git a/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi b/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi index fb2032068d..967a2bdcd1 100644 --- a/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi +++ b/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi @@ -54,6 +54,15 @@
;
};
+&usbss0 {
- bootph-all;
+};
+&usb0 {
- dr_mode = "peripheral";
- bootph-all;
+};
#ifdef CONFIG_TARGET_AM625_A53_BEAGLEPLAY
#define SPL_NODTB "spl/u-boot-spl-nodtb.bin" diff --git a/board/beagle/beagleplay/beagleplay.env b/board/beagle/beagleplay/beagleplay.env index bbf6b925d0..8dbfc2f7d2 100644 --- a/board/beagle/beagleplay/beagleplay.env +++ b/board/beagle/beagleplay/beagleplay.env @@ -1,5 +1,6 @@ #include <env/ti/ti_common.env> #include <env/ti/mmc.env> +#include <env/ti/k3_dfu.env>
name_kern=Image console=ttyS2,115200n8 diff --git a/configs/am62x_beagleplay_a53_defconfig b/configs/am62x_beagleplay_a53_defconfig index 4f1be1df59..ec62670d55 100644 --- a/configs/am62x_beagleplay_a53_defconfig +++ b/configs/am62x_beagleplay_a53_defconfig @@ -121,3 +121,5 @@ CONFIG_EXT4_WRITE=y CONFIG_FS_FAT_MAX_CLUSTSIZE=16384 CONFIG_LZO=y CONFIG_EFI_SET_TIME=y
+#include <configs/am62x_a53_usbdfu.config>
2.43.0

From: Sjoerd Simons sjoerd@collabora.com
Both AM62 SK and beagleplay support DFU boot in a similar way now; Document how to actually run DFU boot for both boards
Signed-off-by: Sjoerd Simons sjoerd@collabora.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Tested-by: Mattijs Korpershoek mkorpershoek@baylibre.com # on beagle play Signed-off-by: Martyn Welch martyn.welch@collabora.com --- Changes in v5: - Typographical corrections
Changes in v4: - New patch
doc/board/beagle/am62x_beagleplay.rst | 14 +++++++++- doc/board/ti/am62x_sk.rst | 37 +++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/doc/board/beagle/am62x_beagleplay.rst b/doc/board/beagle/am62x_beagleplay.rst index 7784e62b0b..cdc610264e 100644 --- a/doc/board/beagle/am62x_beagleplay.rst +++ b/doc/board/beagle/am62x_beagleplay.rst @@ -268,7 +268,19 @@ for details. - USB Device Firmware Upgrade (DFU) mode
To switch to SD card boot mode, hold the USR button while powering on -with Type-C power supply, then release when power LED lights up. +with a USB type C power supply, then release when power LED lights up. + +DFU based boot +-------------- + +To boot the board over DFU, ensure there is no SD card inserted with a +bootloader. Hold the USR switch while plugging into the type C to boot into DFU +mode. After power-on the build artifacts needs to be uploaded one by one with a +tool like dfu-util. + +.. include:: ../ti/am62x_sk.rst + :start-after: .. am62x_evm_rst_include_start_dfu_boot + :end-before: .. am62x_evm_rst_include_end_dfu_boot
Debugging U-Boot ---------------- diff --git a/doc/board/ti/am62x_sk.rst b/doc/board/ti/am62x_sk.rst index b12dc85f06..d5f7fe3b03 100644 --- a/doc/board/ti/am62x_sk.rst +++ b/doc/board/ti/am62x_sk.rst @@ -105,6 +105,20 @@ Set the variables corresponding to this platform:
* 3.1 R5:
+.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_build_steps_spl_r5 + :end-before: .. k3_rst_include_end_build_steps_spl_r5 + +* 3.1.1 Alternative build of R5 for DFU boot: + +As the SPL size can get too big when building with support for booting both +from local storage *and* DFU an extra config fragment should be used to enable +DFU support (and disable storage support) + +.. prompt:: bash $ + + export UBOOT_CFG_CORTEXR="${UBOOT_CFG_CORTEXR} am62x_r5_usbdfu.config" + .. include:: ../ti/k3.rst :start-after: .. k3_rst_include_start_build_steps_spl_r5 :end-before: .. k3_rst_include_end_build_steps_spl_r5 @@ -251,6 +265,29 @@ https://www.ti.com/lit/pdf/spruiv7 under the `Boot Mode Pins` section.
For SW2 and SW1, the switch state in the "ON" position = 1.
+DFU based boot +-------------- + +To boot the board over DFU, set the switches to DFU mode and connect to the +USB type C DRD port on the board. After power-on the build artifacts needs to be +uploaded one by one with a tool like dfu-util. + +.. am62x_evm_rst_include_start_dfu_boot + +The initial ROM will have a DFU alt named `bootloader` for the initial R5 spl +upload. The next stages as exposed by U-Boot have target alts matching the name +of the artifacts, for these a USB reset has to be done after each upload. + +When using dfu-util the following commands can be used to boot to a U-Boot shell: + +.. prompt:: bash $ + + dfu-util -a bootloader -D tiboot3.bin + dfu-util -R -a tispl -D tispl.bin + dfu-util -R -a u-boot.img -D u-boot.img + +.. am62x_evm_rst_include_end_dfu_boot + Debugging U-Boot ----------------

On Mon, 06 May 2024 15:38:40 +0100, Martyn Welch wrote:
This series adds DFU support for TI AM62 SK and beagleplay boards.
I have picked this series up from Sjoerd due to time constraints.
Since the last revision:
- Removed dwc3 mode setting in favour of reinstating forced peripheral mode for usb0
- Use of config fragments for both r5 and a53 DFU configuration to reduce duplication
- Typographical improvements to documentation
[...]
Applied to u-boot/next, thanks!
participants (5)
-
Francesco Dolcini
-
Jon Humphreys
-
Martyn Welch
-
Mattijs Korpershoek
-
Tom Rini