How to detect reset source in imx8qm

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

How to detect reset source in imx8qm

2,530件の閲覧回数
mrigendra_chaub
Contributor III

Hi all,

Recently I needed to implement a function for our imx8qm board, which need to know the reset cause/reason/source.

This function is required to be in uboot as well as kernel.

For this reason I tried using sc firmware apis, like this

sc_pm_reset_reason((sc_ipc_t)ipcHndl, reason);

but in uboot and in kernel, even after I issue reset(uboot) or reboot(kernel) the return value from this function is always 0, i.e. POR.

This is the version file of my sc-firmware source,

NXP i.MX System Controller Firmware

--------------------------------------------

Git repo: ssh://git@bitm-us-cdc01.sw.nxp.com:7999/bitbucket/imx/imx-sc-firmware.git
Branch name: imx_4.14.78_1.0.0_ga
Build version: 3008
Commit ID: 0x01f1cd7df
Build date: Feb 28 2019
Build time: 11:15:30

1. So how or what we need to do in order to get correct reset source?

2. In uboot do we need to implement a watchdog driver that is based on scfw?

0 件の賞賛
返信
3 返答(返信)

2,100件の閲覧回数
vinothkumareswa
Contributor II

Hi,

Did you able to get the reset reason from the linux system using system controller API's.

if so, could you comment the steps?

Thanks & Regards,

Vinothkumar

0 件の賞賛
返信

2,100件の閲覧回数
igorpadykov
NXP Employee
NXP Employee

Hi mrigendra

one can try to change in function imx_system_reset()..
{    sc_pm_reboot(ipc_handle, SC_PM_RESET_TYPE_COLD);..

for example to sc_pm_reboot(SC_IPC_CH, SC_PM_RESET_TYPE_WARM);

imx8_psci.c\common\imx\plat - imx-atf - i.MX ARM Trusted firmware 

"sc_pm_reset_type_t" can be found in

sci_pm_api.h\pm\svc\sci\include\common\imx\plat - imx-atf - i.MX ARM Trusted firmware 

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 件の賞賛
返信

2,099件の閲覧回数
mrigendra_chaub
Contributor III

Hi Igor

kernel version: 4.14.78

uboot version : U-Boot 2018.03-34664-g91acfdb46d-dirty

First thing I did was your suggestion but that doesnot change reset reason.

even this call does not do anything, because this is never called/reached,

void reset_cpu(ulong addr)
{
    puts("SCI reboot request");
    sc_pm_reboot(SC_IPC_CH, SC_PM_RESET_TYPE_COLD);
    while (1)
        putc('.');
}

reset command comes from this file reset.c

this is the function

int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
    puts ("resetting...\n");

    udelay (50000); /* wait 50 ms */
    disable_interrupts();
    reset_misc(); /*call goes to armv8 fwcall.c PSCI reset and never returns*/
    reset_cpu(0);

    /*NOTREACHED*/
    return 0;
}

So I think sc_pm_reboot never gets called and system gets psci reset via   fwcall.c  file's

void __noreturn __efi_runtime psci_system_reset(void)

function.

If I comment out misc_reset, I get dots in while loop.

....................................

that means sc_pm_reboot never worked and this while loop starts executing.

Can you clarify what is to be done to get sc_pm_reboot() function working ?

0 件の賞賛
返信