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.

[参考译文] AM62A7:从 SDK v9.1.0更新到 v10.1.0:内核未加载

Guru**** 2457950 points
Other Parts Discussed in Thread: AM62A7, SYSCONFIG, SK-AM62A-LP

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1474264/am62a7-updating-from-sdk-v9-1-0-to-v10-1-0-kernel-not-loading

器件型号:AM62A7
主题中讨论的其他器件: SysConfigSK-AM62A-LP

工具与软件:

尊敬的 TI 团队:  

我们提供基于 AM62A SK EVM 设计的具有处理器 AM62A7且支持1GB RAM 的定制电路板。 我们使用的是 SDK 9.1.0、现在想升级到 SDK 10.1.0。  

在升级到 SDK 10.1.0时、我们已正确更改了 u-boot 和 u-boot 加载。 当 u-boot 开始加载内核时、它卡在内核的起始地址、如下面的日志所示。

U-Boot SPL 2024.04-ti-ga970f6e51043 (Nov 13 2024 - 14:26:23 +0000)
SYSFW ABI: 4.0 (firmware rev 0x000a '10.1.8--v10.01.08 (Fiery Fox)')
SPL initial stack usage: 13568 bytes
Trying to boot from MMC1
Authentication passed
Authentication passed
Authentication passed
Authentication passed
Authentication passed
Starting ATF on ARM64 core...

NOTICE:  BL31: v2.11.0(release):v2.11.0-906-g58b25570c9-dirty
NOTICE:  BL31: Built : 04:20:32, Nov  1 2024

U-Boot SPL 2024.04-ti-ga970f6e51043 (Nov 13 2024 - 14:26:23 +0000)
SYSFW ABI: 4.0 (firmware rev 0x000a '10.1.8--v10.01.08 (Fiery Fox)')
Trying to boot from MMC1
Authentication passed
Authentication passed


U-Boot 2024.04-ti-ga970f6e51043 (Nov 13 2024 - 14:26:23 +0000)

SoC:   AM62AX SR1.0 HS-FS
Model: SEC-300 Camera Device
DRAM:  1 GiB
Core:  64 devices, 28 uclasses, devicetree: separate
MMC:   mmc@fa10000: 0
Loading Environment from nowhere... OK
In:    serial@2800000
Out:   serial@2800000
Err:   serial@2800000
Net:   eth0: ethernet@8000000port@1
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0(part 0) is current device
SD/MMC found on device 0
Can't set block device
16828928 bytes read in 120 ms (133.7 MiB/s)
53026 bytes read in 31 ms (1.6 MiB/s)
Working FDT set to 88000000
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
Working FDT set to 88000000
   Loading Device Tree to 000000008fef0000, end 000000008fffffff ... OK
Working FDT set to 8fef0000

Starting kernel ...

它停留在"启动内核..."。 据我所知、除了内核 dts 文件中的 DDR 大小更改之外、我们在内核中没有进行任何 DDR 更改。 我不知道为什么会发生这种情况。 有人能帮我吗?

此致、

Jay

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

    您好!  

    在 u-boot 中、中定义了内存管理区域  arch/arm/mach-k3/arm64-mmu.c 如下所示、  

    struct mm_region k3_mem_map[] = {
        {
            .virt = 0x0UL,
            .phys = 0x0UL,
            .size = 0x80000000UL,
            .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
                 PTE_BLOCK_NON_SHARE |
                 PTE_BLOCK_PXN | PTE_BLOCK_UXN
        }, {
            .virt = 0x80000000UL,
            .phys = 0x80000000UL,
            .size = 0x1e780000UL,
            .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
                 PTE_BLOCK_INNER_SHARE
        }, {
            .virt = 0xa0000000UL,
            .phys = 0xa0000000UL,
            .size = 0x60000000UL,
            .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
                 PTE_BLOCK_INNER_SHARE
        }, {
            .virt = 0x880000000UL,
            .phys = 0x880000000UL,
            .size = 0x80000000UL,
            .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
                 PTE_BLOCK_INNER_SHARE
        }, {
            .virt = 0x500000000UL,
            .phys = 0x500000000UL,
            .size = 0x380000000UL,
            .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
                 PTE_BLOCK_NON_SHARE |
                 PTE_BLOCK_PXN | PTE_BLOCK_UXN
        }, {
            /* List terminator */
            0,
        }
    };

    和以上是 AM62A7处理器将使用的 MM_REGION 结构。  

    我知道我必须删除以下区域、因为板上只有1个存储体和1GB RAM。

        {
            .virt = 0x880000000UL,
            .phys = 0x880000000UL,
            .size = 0x80000000UL,
            .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
                 PTE_BLOCK_INNER_SHARE
        },

    但 AM62A7处理器的09.01.00 SDK 中不存在以下区域。  

        {
            .virt = 0xa0000000UL,
            .phys = 0xa0000000UL,
            .size = 0x60000000UL,
            .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
                 PTE_BLOCK_INNER_SHARE
        },

    上述区域的用途是什么? 我们是否需要在任何特定用例中使用该区域?

    此致、

    Jay

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

    您好、Jay:

    让我下周尽量把它复制到 EVM 上再给您。  

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

    刘斌、您好!  

    您是否能够在侧面再现相同的情况? 您能否提供有关应保留哪个区域的信息?

    谢谢

    Jay

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

    您好、Jay:

    很抱歉耽误你的时间。 昨天是一个假期,我离开了。

    我使用以下补丁将 SDK10.1 U-Boot 中的 DDR 配置为1GB、

    diff --git a/arch/arm/dts/k3-am62a7-sk.dts b/arch/arm/dts/k3-am62a7-sk.dts
    index c938b08ef0f6..a4aa74489a89 100644
    --- a/arch/arm/dts/k3-am62a7-sk.dts
    +++ b/arch/arm/dts/k3-am62a7-sk.dts
    @@ -33,8 +33,7 @@
            memory@80000000 {
                    device_type = "memory";
                    /* 4G RAM */
    -               reg = <0x00000000 0x80000000 0x00000000 0x80000000>,
    -                     <0x00000008 0x80000000 0x00000000 0x80000000>;
    +               reg = <0x00000000 0x80000000 0x00000000 0x40000000>;
            };
     
            reserved-memory {

    我能够在 SK-AM62A 上引导内核。 下面附加的是控制台引导日志。

    e2e.ti.com/.../am62a_2D00_sk_2D00_sdk101_2D00_1gb_2D00_ddr_2D00_boot.log

    我不确定是什么原因会导致您的板上的内核根本无法引导。 但我确实看到内核 devicetre k3-am62a7-sk.dts 具有多个节点 edgeai_* 保留存储器节点、用于超过1GB 地址的存储器。 您可能需要将其移除、因为电路板只有1GB DDR。

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

    刘斌、您好!  

    您是否在电路板成功启动后检查了 RAM 大小?

    已在设备树中进行更改。 默认情况下、EVM 中的4GB RAM 为双组。 在您提到更改 DTS 文件时、您要将 RAM 从双组配置为单组。  

    我认为、需要在中进行更改  am62ax_evm_a53_defconfig 如下所示。

    --- a/configs/am62ax_evm_a53_defconfig
    +++ b/configs/am62ax_evm_a53_defconfig
    @@ -4,7 +4,7 @@ CONFIG_SYS_MALLOC_F_LEN=0x8000
     CONFIG_SPL_GPIO=y
     CONFIG_SPL_LIBCOMMON_SUPPORT=y
     CONFIG_SPL_LIBGENERIC_SUPPORT=y
    -CONFIG_NR_DRAM_BANKS=2
    +CONFIG_NR_DRAM_BANKS=1
     CONFIG_SOC_K3_AM62A7=y
     CONFIG_TARGET_AM62A7_A53_EVM=y
     CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y

    此外、还 需要根据组和 RAM 配置从 SysConfig 工具生成 k3-am62a-ddr-1866MHz-32位.dtsi 文件。 并且同样的组更改 也需要在 arch/arm/mach-k3/arm64-mmu.c 文件中进行。

    因此、我想 DTS 文件中的直接更改不起作用。 我不知道为什么它在 EVM 中工作。 我觉得如果电路板只有1GB RAM、则可能只有 DTS 更改不起作用。  

    我的理解是否正确?

    此致、

    Jay

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

    您好、Jay:

    我连接的控制台日志在 U-Boot 和内核日志中显示1GB 存储器。

    我相信、中需要进行更改  am62ax_evm_a53_defconfig 文件如下。

    不需要进行此更改。 它仅用于为存储器数据创建一个包含2个数组(NR_DRAM_Banks)的数组。 DTS 仅配置第一组、因此第二个数组元素的大小为0。

    以及 k3-am62a-DDR-1866MHz-32B.dtsi 文件需要根据组和 RAM 配置从 SysConfig 工具生成。

    我将询问我们的 DDR 专家如何更改 DDR SysConfig 中的排名大小、这一点我不熟悉。 我很可能只能在下周早些时候进行工作、因为到本周末、我有一份交付品。

    并且同样的银行变更 也需要在 arch/arm/mach-k3/arm64-mmu.c 文件中完成。

    我认为不需要更改 MMU 配置、我们经常让客户使用不同的 DDR 大小、我认为我们从未让他们更改 MMC 配置。

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

    您好、Jay:

    除了上面发布的 U-Boot 器件更改之外、我还在 SysConfig 工具中将 DDR 配置密度从8Gb 更改为2Gb、从而将 SK-AM62A-LP 的 DDR 大小从4GB 降低到1GB。 (新的 DDR 配置数据与 SysConfig 工具相比有许多其他更改、我在下面没有列出这些更改)、但我仍然可以引导到内核。

    diff --git a/arch/arm/dts/k3-am62a-ddr-1866mhz-32bit.dtsi b/arch/arm/dts/k3-am62a-ddr-1866mhz-32bit.dtsi
    index 35202651221d..583725ac95ca 100644
    --- a/arch/arm/dts/k3-am62a-ddr-1866mhz-32bit.dtsi
    +++ b/arch/arm/dts/k3-am62a-ddr-1866mhz-32bit.dtsi
    @@ -1,18 +1,19 @@
     // SPDX-License-Identifier: GPL-2.0+
     /*
      * This file was generated with the
    - * AM62Ax SysConfig DDR Configuration Tool for AM64x, AM625, AM623, AM62Ax, AM62Px v0.10.02
    - * Tue Sep 17 2024 10:55:17 GMT+0530 (India Standard Time)
    + * AM62Ax SysConfig DDR Configuration Tool for AM64x, AM625, AM623, AM62Ax, AM62Px, AM62Dx v0.10.10
    + * Mon Mar 03 2025 09:47:34 GMT-0600 (Central Standard Time)
      * DDR Type: LPDDR4
      * F0 = 50MHz    F1 = NA     F2 = 1866MHz
    - * Density (per channel): 8Gb
    + * Density (per channel): 2Gb
      * Number of Ranks: 2
    - */
    +*/
    +
     
     #define DDRSS_PLL_FHS_CNT 5
     #define DDRSS_PLL_FREQUENCY_1 933000000
     #define DDRSS_PLL_FREQUENCY_2 933000000
    -#define DDRSS_SDRAM_IDX 16
    +#define DDRSS_SDRAM_IDX 14
     #define DDRSS_REGION_IDX 17