iMX28 standby error

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

iMX28 standby error

Jump to solution
943 Views
victorien
Contributor IV

Hi,

I'm testing on an iMX28 EVK board the standby mode.

The command echo standby > /sys/power/state works but I have an Oops error and it 's impossible to resume the processor. The log is

Freezing user space processes ... (elapsed 0.02 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Unable to handle kernel NULL pointer dereference at virtual address 000000dc
pgd = c7454000
[000000dc] *pgd=47dc3031, *pte=00000000, *ppte=00000000
Internal error: Oops: 817 [#1] PREEMPT
last sysfs file: /sys/devices/virtual/vc/vcsa63/dev
Modules linked in:
CPU: 0    Not tainted  (2.6.35.3-g215633e-dirty #71)
PC is at mutex_lock+0x10/0x24
LR is at mxs_bat_suspend+0x24/0x40
pc : [<c03c59cc>]    lr : [<c02e6d48>]    psr: a0000013
sp : c7da7dd0  ip : c7da7de0  fp : c7da7ddc
r10: 00000002  r9 : 00000000  r8 : 00000000
r7 : c04ff75c  r6 : c04ff728  r5 : 000000dc  r4 : 00000000
r3 : c02e6d24  r2 : 00000000  r1 : 00000002  r0 : 000000dc
Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 0005317f  Table: 47454000  DAC: 00000015
Process sh (pid: 1252, stack limit = 0xc7da6270)
Stack: (0xc7da7dd0 to 0xc7da8000)
7dc0:                                     c7da7df4 c7da7de0 c02e6d48 c03c59cc
7de0: 00000002 c03ebfa8 c7da7e04 c7da7df8 c02488e0 c02e6d34 c7da7e3c c7da7e08
7e00: c024b1ac c0248898 c7da7e3c c7da7e18 00000000 00000000 c7ce8300 c04ff728
7e20: c04ff728 00000002 00000000 c7fb3c98 c7da7e64 c7da7e40 c024bb00 c024b164
7e40: c04ff728 00000000 c04ff728 00000000 c051b1ac c04ff780 c7da7ea4 c7da7e68
7e60: c024be6c c024ba28 13cf29cc 00000023 13cf29cc 00000023 c04fe3d0 c74f7558
7e80: 00000000 00000000 00000001 003fffff c74f6000 00000008 c7da7ec4 c7da7ea8
7ea0: c007bdcc c024bb6c 00000000 00000001 00000007 c03ced50 c7da7edc c7da7ec8
7ec0: c007bfd8 c007bd8c c047f832 00000001 c7da7f04 c7da7ee0 c007b678 c007bf34
7ee0: 00000008 c7c19660 c7fb3c80 c7c037c0 c03e507c c7da7f70 c7da7f14 c7da7f08
7f00: c01fe288 c007b5f0 c7da7f44 c7da7f18 c011b1e8 c01fe278 c7da7f70 c7fba380
7f20: 00112888 00000008 c7da7f70 00112888 c7da6000 00000000 c7da7f6c c7da7f48
7f40: c00c3a40 c011b0e8 c004f644 c0060890 00000000 00000000 c7fba380 00000008
7f60: c7da7fa4 c7da7f70 c00c3b80 c00c3998 00000000 00000000 00200200 00000000
7f80: c0051b74 00000008 00112888 00000001 00000004 c0030b88 00000000 c7da7fa8
7fa0: c00309e0 c00c3b4c 00000008 00112888 00000001 00112888 00000008 00000000
7fc0: 00000008 00112888 00000001 00000004 00000020 0010f2a4 0010f294 00000000
7fe0: 00000000 be8925fc 000109ec 401871ac 60000010 00000001 00000000 00000000
Backtrace:
[<c03c59bc>] (mutex_lock+0x0/0x24) from [<c02e6d48>] (mxs_bat_suspend+0x24/0x40)
[<c02e6d24>] (mxs_bat_suspend+0x0/0x40) from [<c02488e0>] (platform_pm_suspend+0x58/0x64)
r5:c03ebfa8 r4:00000002
[<c0248888>] (platform_pm_suspend+0x0/0x64) from [<c024b1ac>] (pm_op+0x58/0xb8)
[<c024b154>] (pm_op+0x0/0xb8) from [<c024bb00>] (__device_suspend+0xe8/0x144)
r9:c7fb3c98 r8:00000000 r6:00000002 r5:c04ff728 r4:c04ff728
[<c024ba18>] (__device_suspend+0x0/0x144) from [<c024be6c>] (dpm_suspend_start+0x310/0x438)
r7:c04ff780 r6:c051b1ac r5:00000000 r4:c04ff728
[<c024bb5c>] (dpm_suspend_start+0x0/0x438) from [<c007bdcc>] (suspend_devices_and_enter+0x50/0x1a8)
[<c007bd7c>] (suspend_devices_and_enter+0x0/0x1a8) from [<c007bfd8>] (enter_state+0xb4/0xf4)
r7:c03ced50 r6:00000007 r5:00000001 r4:00000000
[<c007bf24>] (enter_state+0x0/0xf4) from [<c007b678>] (state_store+0x98/0xc0)
r5:00000001 r4:c047f832
[<c007b5e0>] (state_store+0x0/0xc0) from [<c01fe288>] (kobj_attr_store+0x20/0x24)
[<c01fe268>] (kobj_attr_store+0x0/0x24) from [<c011b1e8>] (sysfs_write_file+0x110/0x148)
[<c011b0d8>] (sysfs_write_file+0x0/0x148) from [<c00c3a40>] (vfs_write+0xb8/0x134)
[<c00c3988>] (vfs_write+0x0/0x134) from [<c00c3b80>] (sys_write+0x44/0x70)
r7:00000008 r6:c7fba380 r5:00000000 r4:00000000
[<c00c3b3c>] (sys_write+0x0/0x70) from [<c00309e0>] (ret_fast_syscall+0x0/0x2c)
r8:c0030b88 r7:00000004 r6:00000001 r5:00112888 r4:00000008
Code: e1a0c00d e92dd800 e24cb004 e3a02000 (e1001092)
---[ end trace b15d963b7f2c6a19 ]---

When I press the power button, I still have an Oops error but the log is different :

pswitch goto suspend
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.01 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Unable to handle kernel NULL pointer dereference at virtual address 000000dc
pgd = c0004000
[000000dc] *pgd=00000000
Internal error: Oops: 817 [#1] PREEMPT
last sysfs file: /sys/devices/virtual/vc/vcs63/dev
Modules linked in:
CPU: 0    Not tainted  (2.6.35.3-g215633e-dirty #71)
PC is at mutex_lock+0x10/0x24
LR is at mxs_bat_suspend+0x24/0x40
pc : [<c03c59cc>]    lr : [<c02e6d48>]    psr: a0000013
sp : c7dc1e98  ip : c7dc1ea8  fp : c7dc1ea4
r10: 00000002  r9 : 00000000  r8 : 00000000
r7 : c04ff75c  r6 : c04ff728  r5 : 000000dc  r4 : 00000000
r3 : c02e6d24  r2 : 00000000  r1 : 00000002  r0 : 000000dc
Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
Control: 0005317f  Table: 47510000  DAC: 00000017
Process pswitch (pid: 1106, stack limit = 0xc7dc0270)
Stack: (0xc7dc1e98 to 0xc7dc2000)
1e80:                                                       c7dc1ebc c7dc1ea8
1ea0: c02e6d48 c03c59cc 00000002 c03ebfa8 c7dc1ecc c7dc1ec0 c02488e0 c02e6d34
1ec0: c7dc1f04 c7dc1ed0 c024b1ac c0248898 c7dc1f04 c7dc1ee0 00000000 00000000
1ee0: c7ce8300 c04ff728 c04ff728 00000002 00000000 00000000 c7dc1f2c c7dc1f08
1f00: c024bb00 c024b164 c04ff728 00000000 c04ff728 00000000 c051b1ac c04ff780
1f20: c7dc1f6c c7dc1f30 c024be6c c024ba28 13f6438d 00000032 13f6438d 00000032
1f40: c04fe3d0 c751a558 00000000 00000000 00000001 003fffff 00000000 00000000
1f60: c7dc1f8c c7dc1f70 c007bdcc c024bb6c 00000000 00000001 00000000 c003cc38
1f80: c7dc1fa4 c7dc1f90 c007bfd8 c007bd8c c7dc1fcc c7c27f50 c7dc1fb4 c7dc1fa8
1fa0: c007c038 c007bf34 c7dc1fc4 c7dc1fb8 c003cc54 c007c028 c7dc1ff4 c7dc1fc8
1fc0: c0063674 c003cc48 00000000 00000000 c7dc1fd0 c7dc1fd0 c7c27f50 c00635ec
1fe0: c004f794 00000013 00000000 c7dc1ff8 c004f794 c00635fc 55555555 55555555
Backtrace:
[<c03c59bc>] (mutex_lock+0x0/0x24) from [<c02e6d48>] (mxs_bat_suspend+0x24/0x40)
[<c02e6d24>] (mxs_bat_suspend+0x0/0x40) from [<c02488e0>] (platform_pm_suspend+0x58/0x64)
r5:c03ebfa8 r4:00000002
[<c0248888>] (platform_pm_suspend+0x0/0x64) from [<c024b1ac>] (pm_op+0x58/0xb8)
[<c024b154>] (pm_op+0x0/0xb8) from [<c024bb00>] (__device_suspend+0xe8/0x144)
r9:00000000 r8:00000000 r6:00000002 r5:c04ff728 r4:c04ff728
[<c024ba18>] (__device_suspend+0x0/0x144) from [<c024be6c>] (dpm_suspend_start+0x310/0x438)
r7:c04ff780 r6:c051b1ac r5:00000000 r4:c04ff728
[<c024bb5c>] (dpm_suspend_start+0x0/0x438) from [<c007bdcc>] (suspend_devices_and_enter+0x50/0x1a8)
[<c007bd7c>] (suspend_devices_and_enter+0x0/0x1a8) from [<c007bfd8>] (enter_state+0xb4/0xf4)
r7:c003cc38 r6:00000000 r5:00000001 r4:00000000
[<c007bf24>] (enter_state+0x0/0xf4) from [<c007c038>] (pm_suspend+0x20/0x24)
r5:c7c27f50 r4:c7dc1fcc
[<c007c018>] (pm_suspend+0x0/0x24) from [<c003cc54>] (suspend_thread_fn+0x1c/0x24)
[<c003cc38>] (suspend_thread_fn+0x0/0x24) from [<c0063674>] (kthread+0x88/0x90)
[<c00635ec>] (kthread+0x0/0x90) from [<c004f794>] (do_exit+0x0/0x6d8)
r7:00000013 r6:c004f794 r5:c00635ec r4:c7c27f50
Code: e1a0c00d e92dd800 e24cb004 e3a02000 (e1001092)
---[ end trace b15d963b7f2c6a19 ]---

I try the solution describe in this post : i.MX283 resets during standby in 5V only mode but it doesn't resolve my problem.

(actually, I don't have battery and I supply the board by 5V)

Is there someone who use this mode ?

Labels (1)
Tags (2)
0 Kudos
1 Solution
577 Views
AnsonHuang
NXP Employee
NXP Employee

Hi, Victorien

     Seems like there is something wrong in battery driver's suspend callback, since you do NOT have an battery connected, I wonder whether battery driver would be active, can you add some debug message to see whether the mutex_lock in mxs_bat_suspend routine has valid parameter. I remembered that on EVK board, there is fake battery circuit coming from regulator directly, can you double check?

View solution in original post

0 Kudos
2 Replies
578 Views
AnsonHuang
NXP Employee
NXP Employee

Hi, Victorien

     Seems like there is something wrong in battery driver's suspend callback, since you do NOT have an battery connected, I wonder whether battery driver would be active, can you add some debug message to see whether the mutex_lock in mxs_bat_suspend routine has valid parameter. I remembered that on EVK board, there is fake battery circuit coming from regulator directly, can you double check?

0 Kudos
577 Views
victorien
Contributor IV

Thanks for your help. I find the solution.

The problem was that in the bootlet power_prep.c I defined #define NO_DCDC_BATT_SOURCE. Then, in linux/driver/mxs/linux.c, function mxs_bat_probe, The initialization of the mutex wasn't done (because we defined that we don't have battery). And the kernel crached in function mxs_bat_suspend (linux/driver/mxs/linux.c) when it tries to lock the mutex.

0 Kudos