Tool/software:
I have attempted to set SWREV on a HS device to 2. To do so I ran the runtime_keyrev example that comes with mcu_plus_sdk_am64x_11_01_00_17. Since my board is already HS with SWREV=1 I did the following changes:
if(SystemP_SUCCESS == status)
{
if(swrev != 1)
{
DebugP_log("SWREV already written to eFUSE, value : 0x%x \r\n", swrev);
}
else
{
/* Update software revision for boardcfg*/
status = runtime_swrev_writeSwrev(OTP_REV_ID_SEC_BRDCFG, 2);
}
}
and built the example:
DEVICE_TYPE=HS make
After running the tiboot3.bin I was able to verify that it worked by first rebuilding the boardcfg-blob (mcu_plus_sdk_am64x_11_01_00_17/tools/sysfw/boardcfg/) with the following changes in the makefile:
$(APP_NAME): $(HEXFILES)
$(PYTHON) $(BLOB_GEN) --sw-rev 2 --devgrp $(DEVGRP_MAIN) --bcfg $(BCFG) --bcfg-rm $(BCFG_RM) --bcfg-pm $(BCFG_PM) --bcfg-sec $(BCFG_SEC) --output-file $(BCFG_BLOB_FILE)
ifeq ($(SOC),$(filter $(SOC), am64x_am243x))
$(PYTHON) $(BLOB_GEN) --sw-rev 2 --devgrp $(DEVGRP_MAIN) --bcfg $(BCFG_LINUX) --bcfg-rm $(BCFG_RM_LINUX) --bcfg-pm $(BCFG_PM_LINUX) --bcfg-sec $(BCFG_SEC_LINUX) --output-file $(BCFG_BLOB_LINUX_FILE)
endif
I also did the following changes in the runtime_swrev mcu_plus_sdk_am64x_11_01_00_17/examples/otp/runtime_swrev/am64x-evm/r5fss0-0_nortos/ti-arm-clang/makefile
$(BOOTIMAGE_CERT_GEN_CMD) --swrv 2 --sbl-enc --enc-key $(APP_ENCRYPTION_KEY) --sbl-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --sysfw-bin $(SYSFW_PATH)/sysfw-hs-enc.bin --sysfw-inner-cert $(SYSFW_PATH)/sysfw-hs-enc-cert.bin --boardcfg-blob $(BOARDCFG_BLOB) --sbl-loadaddr $(SBL_RUN_ADDRESS) --sysfw-loadaddr $(SYSFW_LOAD_ADDR) --bcfg-loadaddr $(BOARDCFG_LOAD_ADDR) --key $(BOOTIMAGE_CERT_KEY) --debug DBG_FULL_ENABLE --rom-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME)
else
$(BOOTIMAGE_CERT_GEN_CMD) --swrv 2 --sbl-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --sysfw-bin $(SYSFW_PATH)/sysfw-hs-enc.bin --sysfw-inner-cert $(SYSFW_PATH)/sysfw-hs-enc-cert.bin --boardcfg-blob $(BOARDCFG_BLOB) --sbl-loadaddr $(SBL_RUN_ADDRESS) --sysfw-loadaddr $(SYSFW_LOAD_ADDR) --bcfg-loadaddr $(BOARDCFG_LOAD_ADDR) --key $(BOOTIMAGE_CERT_KEY) --debug DBG_FULL_ENABLE --rom-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME)
endif
else
$(BOOTIMAGE_CERT_GEN_CMD) --swrv 2 --sbl-bin $(BOOTIMAGE_PATH)/$(BOOTIMAGE_BIN_NAME) --sysfw-bin $(SYSFW_PATH)/sysfw-hs-fs-enc.bin --sysfw-inner-cert $(SYSFW_PATH)/sysfw-hs-fs-enc-cert.bin --boardcfg-blob $(BOARDCFG_BLOB) --sbl-loadaddr $(SBL_RUN_ADDRESS) --sysfw-loadaddr $(SYSFW_LOAD_ADDR) --bcfg-loadaddr $(BOARDCFG_LOAD_ADDR) --key $(BOOTIMAGE_CERT_KEY) --rom-image $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME)
endif
Rebuilding with these changes the runtime_keyrev application seems to run correctly showing SWREW set to 2.
Problem is cannot get the bootimage (tiboot3.bin) generated by our yocto build to work.
I have changed sw-rev to 2 in all places in k3-am64x-binman.dtsi:
combined;
sysfw-inner-cert;
keyfile = "custMpk.pem";
sw-rev = <2>;
content-sbl = <&u_boot_spl>;
content-sysfw = <&ti_sci_enc>;
content-sysfw-data = <&combined_sysfw_cfg>;
I also set this part to 2:
rev:
boardcfg_abi_maj : 0x0
boardcfg_abi_min : 0x2
in the following files:
board-cfg.yaml
pm-cfg.yaml
rm-cfg.yaml
sec-cfg.yaml
When I attempt to boot I get:
U-Boot SPL 2023.04-ti-g0893e693e08f (Nov 13 2024 - 21:28:34 +0000)
Resetting on cold boot to workaround ErrataID:i2331
Please resend tiboot3.bin in case of UART/DFU boot
resetting ...
ti_sci system-controller@44043000: Message not acknowledgedti-sci-sysreset sysreset-controller: ti_sci_sysreset_request: reboot_device failed (-19)
ti_sci system-controller@44043000: Message not acknowledgedti-sci-sysreset sysreset-controller: ti_sci_sysreset_request: reboot_device failed (-19)
ti_sci system-controller@44043000: Message not acknowledgedti-sci-sysreset sysreset-controller: ti_sci_sysreset_request: reboot_device failed (-19)
no sysreset
### ERROR ### Please RESET the board ###
Are the changes I made correct?
Are any additional changes needed?
Best Regards,
Mathias Ågren