Early exit from of_platform_reset_gpio_probe() if there
was no GPIO reset line configured.
Avoid kernel oops in gpio_system_reset():
[ 27.413294] Restarting system.
[ 27.415674] Machine restart...
[ 27.418787] Oops: kernel access of bad area, sig: 11
[ 27.423252] Registers dump: mode=
83871D1C
[ 27.427428] r1=
00000000, r2=
00000000, r3=
FFFFFEF8, r4=
00000000
[ 27.433310] r5=
C026AED0, r6=
00000001, r7=
00000068, r8=
00000000
[ 27.439189] r9=
C3871DAC, r10=
000011A5, r11=
00000000, r12=
0000000A
[ 27.445318] r13=
00000000, r14=
0000000F, r15=
C00029BC, r16=
00000000
[ 27.451558] r17=
C011DE8C, r18=
80000115, r19=
0000000F, r20=
48184ED8
[ 27.457770] r21=
00000000, r22=
FFFFFFEA, r23=
00000001, r24=
FEE1DEAD
[ 27.463982] r25=
00000054, r26=
1000B1C8, r27=
00000000, r28=
00000000
[ 27.470208] r29=
00000000, r30=
00000000, r31=
C32D30C0, rPC=
C011DE8C
[ 27.476433] msr=
000042A2, ear=
0000004B, esr=
00000872, fsr=
342E3732
And remove useless dump_stack from machine_restart.
Signed-off-by: Stephan Linz <linz@li-pro.net>
Signed-off-by: Michal Simek <monstr@monstr.eu>
if (!gpio_is_valid(handle)) {
printk(KERN_INFO "Skipping unavailable RESET gpio %d (%s)\n",
handle, "reset");
+ return;
}
ret = gpio_request(handle, "reset");
static void gpio_system_reset(void)
{
- gpio_set_value(handle, 1 - reset_val);
+ if (gpio_is_valid(handle))
+ gpio_set_value(handle, 1 - reset_val);
+ else
+ pr_notice("Reset GPIO unavailable - halting!\n");
}
#else
#define gpio_system_reset() do {} while (0)
{
printk(KERN_NOTICE "Machine restart...\n");
gpio_system_reset();
- dump_stack();
while (1)
;
}