This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] J722SXH01EVM:使用 SPI 的 Falcon 引导

Guru**** 1555210 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1376134/j722sxh01evm-falcon-boot-using-spi

器件型号:J722SXH01EVM

工具与软件:

使用 SDK 09_02_00_05、我使用此处概述的方法创建了一个新的 tispl.bin: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1334006/sk-am68-can-falcon-mode-be-enabled-on-sk-am68-j721s2-tda4vx

但是、它无法引导。 设置 CONFIG_LogLevel=8后的最后一次打印:

U-Boot SPL 2023.04-00006-g96c6cb64-dirty (2024年6月18日- 09:42:46 -0500)
SYSFW ABI:3.1 (固件版本0x0009 '9.0.6--w2023.01-j722s (Kool Koa')
k3_ddrss memory-controller@f300000:DDR freq0未被组装、使用旁路频率。
k3_ddrss memory-controller@f300000:找不到 vtt-supply。
SPL 初始堆栈使用量:17064字节
尝试从 SPI 引导
SPL:SPL_IMAGE=0lx88fffee8
single-pinctrl pinctrl@f4000:为 opi0默认引脚配置引脚
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00010000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00010000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Single-pinctrl pinctrl@f4000:reg/val 88fffd94a/0x00050000
Cadence_spi SPI@fc40000:spi_find_chip_select:plat=43c43be4、cs=0
JEDEC SPI_NOR FLASH@0:尚不支持非均匀擦除扇区映射。
JEDEC SPI_NOR 闪存@0:从0x00080000开始、长度为 d
JEDEC SPI_NOR 闪存@0:从0x00080000开始、长度为 d
JEDEC SPI_NOR 闪存@0:从0x00080564开始、长度为 d

这意味着我们至少可以到达函数"SPI_NOR_PARSS_SFDP"

我还尝试了更改存储器位置、如下所示结果相同: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1205638/faq-am625-how-to-boot-from-r5-u-boot-spl-directly-into-the-linux-kernel-skipping-a53-spl-and-a53-u-boot-falcon-mode

这些存储器位置会移动 CONFIG_SPL_STACK_R_ADDR 和 CONFIG_SPL_LOAD_FIT_ADDRESS 。 但是、这些更改不能解决此问题。

它能够与 OSPI NOR 通信、因为我能够通过 NOR 进行刷写和引导、而不仅仅是使用定制的 tispl.bin

我还验证了 tispl.bin 映像完全写入了从地址0x080000开始的 NOR。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我还没有试过 J722S 上的猎鹰。

    首先、如果您已移植:

    diff --git a/board/ti/j721s2/evm.c b/board/ti/j721s2/evm.c
    index eea2c256b3..ce3ff90c97 100644
    --- a/board/ti/j721s2/evm.c
    +++ b/board/ti/j721s2/evm.c
    @@ -107,6 +107,8 @@ static void __maybe_unused detect_enable_spinand(void *blob)
     #if defined(CONFIG_SPL_BUILD)
     void spl_perform_fixups(struct spl_image_info *spl_image)
     {
    +       return;
    +

    我在 j722s 中没有看到类似的函数: https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/board/ti/j722s/evm.c?h=ti-u-boot-2023.04

    因此、我认为、移植这些版本需要有所不同。

    您是否可以确保已加载 tispl.bin? 我想知道故障是在执行 tispl.bin 时还是在加载之前。

    -基尔西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Keerthy、您好!

    我已经找到并更改了此内容:

    diff --git a/board/ti/j722s/evm.c b/board/ti/j722s/evm.c
    index 0194873f..9eb28ecd 100644
    --- a/board/ti/j722s/evm.c
    +++ b/board/ti/j722s/evm.c
    @@ -105,6 +105,7 @@ static void __maybe_unused detect_enable_spinand(void *blob)
     #if defined(CONFIG_SPL_BUILD)
     void spl_perform_fixups(struct spl_image_info *spl_image)
     {
    +       return;
            detect_enable_spinand(spl_image->fdt_addr);
     }
     #endif

    我应用了另一论坛帖子中随附的 SPI 补丁、因此这就是该代码存在的原因。 请参阅随附的。

    我发现代码在调用中卡住:
    SPL_LOAD_FIT_IMAGE (信息、扇区、&ctx、节点、spl_image);

    最终、它会调用挂起的以下命令:
    info->read (info、sector + get_aligned_image_offset (info、offset)、nr_sectors、src_ptr)!= nr_sectors

    我 从另一个论坛帖子中注意到 src_ptr 与来自 tispl.its_lin 的 bl31.bin 的值相同。 因此、可能无法访问将信息存储到0x70000000、或导致某种 CPU 异常。

    将 load 和 entry 设置为 0x9e780000可使其进一步运行、但现在它仍然无法执行以下打印操作:

    U-Boot SPL 2023.04-00006-g96c6cb64-dirty (Jun 19 2024 - 11:25:09 -0500)
    SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.6--w2023.01-j722s (Kool Koa')
    SPL initial stack usage: 17064 bytes
    Trying to boot from SPI
    External data: dst=9e780000, offset=564, size=cef0
    Image OS is ARM Trusted Firmware
    spl_load_simple_fit[760]:spl_fit_image_get_os=25
    External data: dst=9e800000, offset=d454, size=74d48
    External data: dst=89000000, offset=8219c, size=20f30
    Warning: Did not detect image signing certificate. Skipping authentication to prevent boot failure. This will fail on Security Enforcing(HS-SE) devices
    External data: dst=82000000, offset=131dacc, size=11712
    Warning: Did not detect image signing certificate. Skipping authentication to prevent boot failure. This will fail on Security Enforcing(HS-SE) devices
    External data: dst=80080000, offset=a30cc, size=127aa00
    Warning: Did not detect image signing certificate. Skipping authentication to prevent boot failure. This will fail on Security Enforcing(HS-SE) devices
    Warning: Did not detect image signing certificate. Skipping authentication to prevent boot failure. This will fail on Security Enforcing(HS-SE) devices
    Warning: Did not detect image signing certificate. Skipping authentication to prevent boot failure. This will fail on Security Enforcing(HS-SE) devices
    Starting ATF on ARM64 core...
    
    NOTICE:  BL31: v2.10.0(release):v2.10.0-367-g00f1ec6b87-dirty
    NOTICE:  BL31: Built : 16:09:05, Feb  9 2024
    NOTICE:  Upgrade Firmwares for Power off functionality
    ERROR:   Failed to get response (-19)
    ERROR:   Transfer send failed (-19)
    ERROR:   Unable to query firmware capabilities (-19)
    
    


    是否可以使用 SDK 重新编译 bl31.bin 以便我可以进行进一步调试?
    我正在使用预先构建的"Image"文件、所以我想知道是否需要重新构建以便可引导文件? 我知道 Linux 标头不可执行、有时会在映像的开头。

    并附加当前的 tispl.its_lin

    e2e.ti.com/.../3704.j722s_2D00_ospi.tar

    /dts-v1/;
    
    / {
    	description = "Configuration to load ATF and SPL";
    	#address-cells = <1>;
    
    	images {
    		atf {
    			description = "ARM Trusted Firmware";
    			data = /incbin/("bl31.bin");
    			type = "firmware";
    			arch = "arm64";
    			compression = "none";
    			os = "arm-trusted-firmware";
    			load = <0x9e780000>;
    			entry = <0x9e780000>;
    		};
    		tee {
    			description = "OPTEE";
    			data = /incbin/("bl32.bin");
    			type = "tee";
    			arch = "arm64";
    			compression = "none";
    			os = "tee";
    			load = <0x9e800000>;
    			entry = <0x9e800000>;
    		};
    		dm {
    			description = "DM binary";
    			data = /incbin/("ti-dm/j722s/ipc_echo_testb_mcu1_0_release_strip.xer5f");
    			type = "firmware";
    			arch = "arm32";
    			compression = "none";
    			os = "DM";
    			load = <0x89000000>;
    			entry = <0x89000000>;
    		};
    		kernel {
    			description = "Linux Kernel (64-bit)";
    			data = /incbin/("Image");
    			type = "standalone";
    			os = "Linux";
    			arch = "arm64";
    			compression = "none";
    			load = <0x80080000>;
    			entry = <0x80080000>;
    		};
    		fdt {
    			description = "k3-j722s-evm";
    			data = /incbin/("k3-j722s-evm.dtb");
    			type = "standalone";
    			arch = "arm";
    			compression = "none";
    			load = <0x82000000>;
    			entry = <0x82000000>;
    		};
    	};
    	configurations {
    		default = "k3-j722s-evm.dtb";
    
    		k3-j722s-evm.dtb {
    			description = "k3-j722s-evm";
    			firmware = "atf";
    			loadables = "tee", "dm", "fdt", "kernel";
    		};
    	};
    };
    


    下面是 R5更改以尝试直接跳转到内核:

    diff --git a/configs/j722s_evm_r5_defconfig b/configs/j722s_evm_r5_defconfig
    index 0f9828d2..85ce04cd 100644
    --- a/configs/j722s_evm_r5_defconfig
    +++ b/configs/j722s_evm_r5_defconfig
    @@ -24,7 +24,7 @@ CONFIG_DA8XX_GPIO=y
     CONFIG_DM_PCA953X=y
     CONFIG_SPL_DM_PCA953X=y
     CONFIG_OF_BOARD_SETUP=y
    -CONFIG_SPL_STACK_R_ADDR=0x82000000
    +CONFIG_SPL_STACK_R_ADDR=0x89000000
     CONFIG_SPL_SYS_MALLOC_F_LEN=0x8000
     CONFIG_SPL_NAND_SPI_SUPPORT=y
     CONFIG_SPL_MTD_SUPPORT=y
    @@ -36,7 +36,7 @@ CONFIG_SPL_LIBDISK_SUPPORT=y
     CONFIG_SPL_SPI_FLASH_SUPPORT=y
     CONFIG_SPL_SPI=y
     CONFIG_SPL_LOAD_FIT=y
    -CONFIG_SPL_LOAD_FIT_ADDRESS=0x80080000
    +CONFIG_SPL_LOAD_FIT_ADDRESS=0x84000000
     # CONFIG_DISPLAY_CPUINFO is not set
     CONFIG_SPL_SIZE_LIMIT_SUBTRACT_GD=y
     CONFIG_SPL_SIZE_LIMIT_SUBTRACT_MALLOC=y
    @@ -52,7 +52,7 @@ CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x200000
     CONFIG_SPL_SEPARATE_BSS=y
     CONFIG_SYS_SPL_MALLOC=y
     CONFIG_HAS_CUSTOM_SPL_MALLOC_START=y
    -CONFIG_CUSTOM_SYS_SPL_MALLOC_ADDR=0x84000000
    +CONFIG_CUSTOM_SYS_SPL_MALLOC_ADDR=0x90000000
     CONFIG_SYS_SPL_MALLOC_SIZE=0x1000000
     CONFIG_SPL_EARLY_BSS=y
     CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
    @@ -145,3 +145,5 @@ CONFIG_SPL_TIMER=y
     CONFIG_OMAP_TIMER=y
     CONFIG_LIB_RATIONAL=y
     CONFIG_SPL_LIB_RATIONAL=y
    +CONFIG_TEXT_BASE=0x83000000
    +CONFIG_SYS_LOAD_ADDR=0x84000000
    \ No newline at end of file
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="36781" url="~/support/processors-group/processors/f/processors-forum/1376134/j722sxh01evm-falcon-boot-using-spi/5259612 #5259612"]

    我 从另一个论坛帖子中注意到 src_ptr 与来自 tispl.its_lin 的 bl31.bin 的值相同。 因此、可能无法访问将信息存储到0x70000000、或导致某种 CPU 异常。

    将 load 和 entry 设置为 0x9e780000可使其进一步运行、但现在它仍然无法执行以下打印操作:

    [报价]

    这很好! 是的、J722S 的 ATF 加载地址是不同的。 因此、现在您能够加载 ATF。 ATF 正在执行。
    您能否将日志与默认引导日志进行比较、并在 ATF 中检查故障位置?

    -基尔西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Keerthy、您好!

    它正在启动!

    似乎在器件树的"选定"节点内、我需要放置引导参数 之后 其正常工作的 stdout-path。

    对于后代、我还想说明使用这种方法会导致内存分配问题、因为内存未对齐。
    我必须按照这里的帖子并进行更多修改来修复: e2e.ti.com/.../5202491