patch against linuxppc_2_4_devel: ppc405_wdt.c needs to be fixed
Hi,
I noticed that the 405 watchdog driver's ioctl() for GETPERIOD and SETPERIOD are not working correctly. The ioctls pass the watchdog timer period in microseconds. The variable wdt_period stores the current period in seconds.
The attached patch fixes this behavior.
Matthias
usr/src/linuxppc_2_4_devel/drivers/char/ppc405_wdt.c renamed from char/ppc405_wdt.c +3 -3
@@ -190,8 +190,7 @@ }case WDIOC_GETPERIOD :/* return watchdog period (units = microseconds) */ - period = wdt_period *MICROSECBASE ; - + period = (wdt_period /HZ ) *MICROSECBASE ;if (copy_to_user ((unsigned long *)arg, &period,sizeof (period))) {return -EFAULT ;
@@ -234,7 +233,8 @@if (period ==0 ) period =MAXONEHOUR *MICROSECBASE ; - wdt_period = period /MICROSECBASE ; +heartbeat_count (0 ) = (period /TENMSBASE ) + + (period %TENMSBASE ?1 :0 );ppc405wd_update_timer ();break ;
Dose the watchdog actually work ??
What happens when you get into a infinite loop when interrupts are turned off?
Quoted 25 lines · Matthias Fuchs
Hi,
I noticed that the 405 watchdog driver's
ioctl()for GETPERIOD and SETPERIOD are not working correctly. The ioctls pass the watchdog timer period in microseconds. The variablewdt_periodstores the current period in seconds.The attached patch fixes this behavior.
Matthias
----usr/src/linuxppc_2_4_devel/drivers/char/ppc405_wdt.c renamed from char/ppc405_wdt.c +1
-2@@ -190,8 +190,7 @@ }case WDIOC_GETPERIOD :/* return watchdog period (units = microseconds) */ - period = wdt_period *MICROSECBASE ; - + period = (wdt_period /HZ ) *MICROSECBASE ;if (copy_to_user ((unsigned long *)arg, &period,sizeof (period))) {return -EFAULT ;
usr/src/linuxppc_2_4_devel/drivers/char/ppc405_wdt.c line 240
Quoted 9 lines
usr/src/linuxppc_2_4_devel/drivers/char/ppc405_wdt.c renamed from char/ppc405_wdt.c +2
-1@@ -234,7 +233,8 @@if (period ==0 ) period =MAXONEHOUR *MICROSECBASE ; - wdt_period = period /MICROSECBASE ; +heartbeat_count (0 ) = (period /TENMSBASE ) + + (period %TENMSBASE ?1 :0 );ppc405wd_update_timer ();break ;
--
Kenneth Johansson
Ericsson AB Tel: +46 8 719 70 20
Tellusborgsvägen 90 Fax: +46 8 719 29 45
126 25 Stockholm [email protected]
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
Hi Kenneth,
it seems that the 405 watchdog does not really work. It's something like a soft-watchdog actually. I did not test it in a loop with irqs off.
At least my patch corrected the ioctls and I get a working software watchdog. I wonder what happened to the 405 hardware watchdog support.
Matthias
Quoted 5 lines · Kenneth Johansson
Dose the watchdog actually work ??
What happens when you get into a infinite loop when interrupts are turned off?
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/