-
Type:
Bug
-
Resolution: Fixed
-
Priority:
High
-
Linux Core SDK
-
LCPD-44026
-
11.00
-
11.02
-
am62lxx_evm-fs
With kernel version 6.12.23-ti-g013211ccdf5e (oe-user@oe-host) and TFA commit 13db77abe0ad (ti-master) following errors are reported on resuming from RTC+DDR LPM:
root@am62lxx-evm:~# echo mem > /sys/power/state [ 72.134967] PM: suspend entry (deep) [ 72.142576] Filesystems sync: 0.003 seconds [ 72.149266] Freezing user space processes [ 72.155407] Freezing user space processes completed (elapsed 0.001 seconds) [ 72.162455] OOM killer disabled. [ 72.165705] Freezing remaining freezable tasks [ 72.171436] Freezing remaining freezable tasks completed (elapsed 0.001 seconds) [ 72.187877] Disabling non-boot CPUs ... [ 72.193979] psci: CPU1 killed (polled 0 ms) NOTICE: bl1_plat_arch_setup arch setup NOTICE: Booting Trusted Firmware NOTICE: BL1: v2.12.0(release):11.00.11-5-g13db77abe0ad-dirty NOTICE: BL1: Built : 15:05:08, May 22 2025 NOTICE: BL1: dram_class: 11 NOTICE: lpddr4: post start - PI training status=0x27c0a000 NOTICE: bl1_platform_setup DDR init done NOTICE: k3_bl1_handoff sent message to tifs ERROR: Wake up src 0x0 ERROR: Wake up interrupt 0xc [ 72.199160] Enabling non-boot CPUs ... [ 72.203377] Detected VIPT I-cache on CPU1 [ 72.207427] GICv3: CPU1: found redistributor 1 region 0:0x0000000001860000 [ 72.214351] CPU1: Booted secondary processor 0x0000000001 [0x410fd034] [ 72.221975] CPU1 is up [ 72.227093] Internal error: synchronous external abort: 0000000096000010 [#1] PREEMPT SMP [ 72.235291] Modules linked in: [ 72.238346] CPU: 0 UID: 0 PID: 788 Comm: sh Not tainted 6.12.23-ti-g013211ccdf5e #1 [ 72.245990] Hardware name: Texas Instruments AM62L3 EVM (DT) [ 72.251637] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 72.258585] pc : dwc3_ti_resume_common+0x20/0x10c [ 72.263293] lr : device_resume+0xa4/0x1e8 [ 72.267300] sp : ffff800082a93b10 [ 72.270603] x29: ffff800082a93b10 x28: ffff0000059e4200 x27: 0000000000000000 [ 72.277731] x26: 0000000000000000 x25: 0000000000000000 x24: ffff8000814f3590 [ 72.284858] x23: ffff0000040e3490 x22: 0000000000000000 x21: 0000000000000010 [ 72.291984] x20: ffff0000040e3410 x19: ffff000003a5d140 x18: ffff800082a938e8 [ 72.299111] x17: 0000000000000000 x16: 0000000000000001 x15: 0000000000000011 [ 72.306237] x14: ffff800080d87030 x13: 0000000000000390 x12: 0000000000000000 [ 72.313364] x11: 0000000000000000 x10: 00000000000009e0 x9 : ffff800082a93a10 [ 72.320491] x8 : ffff0000059e4c40 x7 : ffff00007fbb22c0 x6 : 0000000000000000 [ 72.327617] x5 : 0000000000000158 x4 : 0000000000000000 x3 : ffff80008090dfa8 [ 72.334743] x2 : 0000000000000115 x1 : ffff800081685708 x0 : ffff0000040e3410 [ 72.341871] Call trace: [ 72.344307] dwc3_ti_resume_common+0x20/0x10c [ 72.348657] device_resume+0xa4/0x1e8 [ 72.352312] dpm_resume+0x114/0x150 [ 72.355795] dpm_resume_end+0x18/0x30 [ 72.359450] suspend_devices_and_enter+0x488/0x550 [ 72.364235] pm_suspend+0x164/0x1d0 [ 72.367716] state_store+0x80/0xec [ 72.371110] kobj_attr_store+0x18/0x2c [ 72.374854] sysfs_kf_write+0x44/0x54 [ 72.378512] kernfs_fop_write_iter+0x120/0x1cc [ 72.382948] vfs_write+0x240/0x378 [ 72.386344] ksys_write+0x74/0x10c [ 72.389739] __arm64_sys_write+0x1c/0x28 [ 72.393653] invoke_syscall+0x48/0x10c [ 72.397396] el0_svc_common.constprop.0+0xc0/0xe0 [ 72.402091] do_el0_svc+0x1c/0x28 [ 72.405399] el0_svc+0x28/0x98 [ 72.408451] el0t_64_sync_handler+0x120/0x12c [ 72.412798] el0t_64_sync+0x190/0x194 [ 72.416457] Code: aa0003f4 f9403c13 f9400661 911c2021 (b9400021) [ 72.422536] ---[ end trace 0000000000000000 ]---
diff in TFA for RTC+DDDR:
diff --git a/plat/ti/k3/common/am62l_psci.c b/plat/ti/k3/common/am62l_psci.c index 70f2aecdde4e..5de658ec59ad 100644 --- a/plat/ti/k3/common/am62l_psci.c +++ b/plat/ti/k3/common/am62l_psci.c @@ -133,7 +133,7 @@ static void am62l_pwr_domain_suspend(const psci_power_state_t *target_state) /* TODO: Pass the mode passed from kernel using s2idle * For now make mode=6 for RTC only + DDR and mdoe=0 for deepsleep */ - uint32_t mode = 0; + uint32_t mode = 6; core = plat_my_core_pos(); proc_id = PLAT_PROC_START_ID + core;