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.

AM625: "reset" / "reboot" not working (SD boot/emmc boot) in custom board based on AM625

Part Number: AM625

Hi,

We are using a custom board based on AM625.

Here uboot level "reset" or the OS level "reboot" not working properly. As mentioned in the log below, it stuck at the SPL level and not booting further. When we completely disconnected the power supply and power up the board again, it boots properly. This issue happens both in SD card boot as well as eMMC boot.

Already I have tried / applied below patches/changes

1. mmc rst-function 0 1

2. Followed the "e2e.ti.com/.../faq-a53-boot-binary-tispl-bin-loading-error-when-bootmode-7-0-in-emmc-boot-mode-on-am62x" forum link and applied the "am62x_bootmode7_emmc.patch

But both doesn't help. We are using SDK 08.06.00.42. 

In the EVM, i could see reset / reboot work seamlessly. 

=> reset
resetting ...

U-Boot SPL 2021.01-00001-g45cb7e44ae-dirty (Nov 16 2023 - 14:15:45 +0530)
SYSFW ABI: 3.1 (firmware rev 0x0008 '8.6.4--v08.06.04 (Chill Capybar')
SPL initial stack usage: 13424 bytes

  • Hi Jeslin,

    Please apply the following U-Boot patch, then try if 'reset' command in U-Boot can reboot your board.

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    diff --git a/arch/arm/dts/k3-am62-main.dtsi b/arch/arm/dts/k3-am62-main.dtsi
    index bdfda77586ed..6a52d097d55e 100644
    --- a/arch/arm/dts/k3-am62-main.dtsi
    +++ b/arch/arm/dts/k3-am62-main.dtsi
    @@ -536,6 +536,7 @@
    ti,itap-del-sel-sdr25 = <0x1>;
    ti,clkbuf-sel = <0x7>;
    bus-width = <4>;
    + no-1-8-v;
    status = "disabled";
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Hi Bin,

    we made this change.  but it doesnot help.

    Hit any key to stop autoboot: 0
    => reset
    resetting ...

    U-Boot SPL 2021.01-00001-g45cb7e44ae-dirty (Nov 17 2023 - 12:27:43 +0530)
    SYSFW ABI: 3.1 (firmware rev 0x0008 '8.6.4--v08.06.04 (Chill Capybar')
    SPL initial stack usage: 13424 bytes.

    Thanks and Regards,

    Swapna.

  • Hi Swapna,

    I will think of any other ways to debug it, and get back to you next week.

  • Hi Swapna,

    Please try the following command at U-Boot prompt to see if it triggers reboot.

    Fullscreen
    1
    => mw.l 0x43018170 6 1
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Hi Bin,

    Tried, but did not work:

    Hit any key to stop autoboot: 0
    =>
    => mw.l 0x43018170 6 1
    U-Boot SPL 2021.01-00001-g45cb7e44ae-dirty (Oct 19 2023 - 15:04:50 +0530)
    SYSFW ABI: 3.1 (firmware rev 0x0008 '8.6.4--v08.06.04 (Chill Capybar')
    SPL initial stack usage: 13424 bytes

    Regards,

    Swapna,

  • Hi Bin,

    In addition to this, I tried to trace the "SPL initial stack usage" print and added few more print in SPL to see where it get stuck or hang.

    In my observation it goes into "board_init_r" function and stuck somewhere there.

    I added more prints in board init and in regular boot (power off and power on) I could see all ptints but when "reset" or "reboot" only I could see print after "spl_set_bd();" 

    I pasted the code with print for reference, I could see  only ">>1" in reset/reboot. I couldnt see "1.1" and further pint. I might get hanged somewhere in board_init_r function. 

    void board_init_r(gd_t *dummy1, ulong dummy2)
    {
    u32 spl_boot_list[] = {
    BOOT_DEVICE_NONE,
    BOOT_DEVICE_NONE,
    BOOT_DEVICE_NONE,
    BOOT_DEVICE_NONE,
    BOOT_DEVICE_NONE,
    };
    struct spl_image_info spl_image;
    int ret;

    printf(">>" SPL_TPL_PROMPT "board_init_r()\n");

    spl_set_bd();
    printf(">>1\n");
    #if defined(CONFIG_SYS_SPL_MALLOC_START)
    mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
    CONFIG_SYS_SPL_MALLOC_SIZE);
    printf("1.1\n");

    gd->flags |= GD_FLG_FULL_MALLOC_INIT;
    printf("1.2\n");

    #endif
    if (!(gd->flags & GD_FLG_SPL_INIT)) {
    printf("1.3\n");

    if (spl_init())
    {
    printf("1.4\n");
    hang();
    }
    }

    Note: If I tried to enable all the Debug prints in SPL, code size getting larger and SPL wont build at all.

    Regards,

    Jeslin Paul 

  • Hi Bin,

    We found the root cause of the issue, DDR reset pin was not in proper state during soft reset/reboot. We made DDR reset pin as Pull down, and now reset/reboot works properly. Thanks a lot for your support and input.