Merge git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
* git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog: watchdog: Driver for the watchdog timer on Freescale IMX2 (and later) processors. watchdog: s3c2410_wdt - Fix on handling of the request_mem_region fail watchdog: s3c2410_wdt - Add extra option to include watchdog for Samsung SoCs iTCO_wdt: fix TCO V1 timeout values and limits watchdog: twl4030_wdt: Disable watchdog during probing watchdog: update/improve/consolidate watchdog driver watchdog: booke_wdt: fix ioctl status flags watchdog: fix several MODULE_PARM_DESC strings watchdog: bfin: use new common Blackfin watchdog header
This commit is contained in:
commit
51e618c357
@ -290,9 +290,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
advansys= [HW,SCSI]
|
advansys= [HW,SCSI]
|
||||||
See header of drivers/scsi/advansys.c.
|
See header of drivers/scsi/advansys.c.
|
||||||
|
|
||||||
advwdt= [HW,WDT] Advantech WDT
|
|
||||||
Format: <iostart>,<iostop>
|
|
||||||
|
|
||||||
aedsp16= [HW,OSS] Audio Excel DSP 16
|
aedsp16= [HW,OSS] Audio Excel DSP 16
|
||||||
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
||||||
See also header of sound/oss/aedsp16.c.
|
See also header of sound/oss/aedsp16.c.
|
||||||
@ -765,9 +762,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
This option is obsoleted by the "netdev=" option, which
|
This option is obsoleted by the "netdev=" option, which
|
||||||
has equivalent usage. See its documentation for details.
|
has equivalent usage. See its documentation for details.
|
||||||
|
|
||||||
eurwdt= [HW,WDT] Eurotech CPU-1220/1410 onboard watchdog.
|
|
||||||
Format: <io>[,<irq>]
|
|
||||||
|
|
||||||
failslab=
|
failslab=
|
||||||
fail_page_alloc=
|
fail_page_alloc=
|
||||||
fail_make_request=[KNL]
|
fail_make_request=[KNL]
|
||||||
@ -2267,9 +2261,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
sched_debug [KNL] Enables verbose scheduler debug messages.
|
sched_debug [KNL] Enables verbose scheduler debug messages.
|
||||||
|
|
||||||
sc1200wdt= [HW,WDT] SC1200 WDT (watchdog) driver
|
|
||||||
Format: <io>[,<timeout>[,<isapnp>]]
|
|
||||||
|
|
||||||
scsi_debug_*= [SCSI]
|
scsi_debug_*= [SCSI]
|
||||||
See drivers/scsi/scsi_debug.c.
|
See drivers/scsi/scsi_debug.c.
|
||||||
|
|
||||||
@ -2858,8 +2849,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
wd7000= [HW,SCSI]
|
wd7000= [HW,SCSI]
|
||||||
See header of drivers/scsi/wd7000.c.
|
See header of drivers/scsi/wd7000.c.
|
||||||
|
|
||||||
wdt= [WDT] Watchdog
|
watchdog timers [HW,WDT] For information on watchdog timers,
|
||||||
See Documentation/watchdog/wdt.txt.
|
see Documentation/watchdog/watchdog-parameters.txt
|
||||||
|
or other driver-specific files in the
|
||||||
|
Documentation/watchdog/ directory.
|
||||||
|
|
||||||
x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
|
x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
|
||||||
default x2apic cluster mode on platforms
|
default x2apic cluster mode on platforms
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
00-INDEX
|
00-INDEX
|
||||||
- this file.
|
- this file.
|
||||||
|
hpwdt.txt
|
||||||
|
- information on the HP iLO2 NMI watchdog
|
||||||
pcwd-watchdog.txt
|
pcwd-watchdog.txt
|
||||||
- documentation for Berkshire Products PC Watchdog ISA cards.
|
- documentation for Berkshire Products PC Watchdog ISA cards.
|
||||||
src/
|
src/
|
||||||
- directory holding watchdog related example programs.
|
- directory holding watchdog related example programs.
|
||||||
watchdog-api.txt
|
watchdog-api.txt
|
||||||
- description of the Linux Watchdog driver API.
|
- description of the Linux Watchdog driver API.
|
||||||
|
watchdog-parameters.txt
|
||||||
|
- information on driver parameters (for drivers other than
|
||||||
|
the ones that have driver-specific files here)
|
||||||
wdt.txt
|
wdt.txt
|
||||||
- description of the Watchdog Timer Interfaces for Linux.
|
- description of the Watchdog Timer Interfaces for Linux.
|
||||||
|
390
Documentation/watchdog/watchdog-parameters.txt
Normal file
390
Documentation/watchdog/watchdog-parameters.txt
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
This file provides information on the module parameters of many of
|
||||||
|
the Linux watchdog drivers. Watchdog driver parameter specs should
|
||||||
|
be listed here unless the driver has its own driver-specific information
|
||||||
|
file.
|
||||||
|
|
||||||
|
|
||||||
|
See Documentation/kernel-parameters.txt for information on
|
||||||
|
providing kernel parameters for builtin drivers versus loadable
|
||||||
|
modules.
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------------
|
||||||
|
acquirewdt:
|
||||||
|
wdt_stop: Acquire WDT 'stop' io port (default 0x43)
|
||||||
|
wdt_start: Acquire WDT 'start' io port (default 0x443)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
advantechwdt:
|
||||||
|
wdt_stop: Advantech WDT 'stop' io port (default 0x443)
|
||||||
|
wdt_start: Advantech WDT 'start' io port (default 0x443)
|
||||||
|
timeout: Watchdog timeout in seconds. 1<= timeout <=63, default=60.
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
alim1535_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (0 < timeout < 18000, default=60
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
alim7101_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30
|
||||||
|
use_gpio: Use the gpio watchdog (required by old cobalt boards).
|
||||||
|
default=0/off/no
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
ar7_wdt:
|
||||||
|
margin: Watchdog margin in seconds (default=60)
|
||||||
|
nowayout: Disable watchdog shutdown on close
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
at32ap700x_wdt:
|
||||||
|
timeout: Timeout value. Limited to be 1 or 2 seconds. (default=2)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
at91rm9200_wdt:
|
||||||
|
wdt_time: Watchdog time in seconds. (default=5)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
at91sam9_wdt:
|
||||||
|
heartbeat: Watchdog heartbeats in seconds. (default = 15)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
bcm47xx_wdt:
|
||||||
|
wdt_time: Watchdog time in seconds. (default=30)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
bfin_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (1<=timeout<=((2^32)/SCLK), default=20)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
coh901327_wdt:
|
||||||
|
margin: Watchdog margin in seconds (default 60s)
|
||||||
|
-------------------------------------------------
|
||||||
|
cpu5wdt:
|
||||||
|
port: base address of watchdog card, default is 0x91
|
||||||
|
verbose: be verbose, default is 0 (no)
|
||||||
|
ticks: count down ticks, default is 10000
|
||||||
|
-------------------------------------------------
|
||||||
|
cpwd:
|
||||||
|
wd0_timeout: Default watchdog0 timeout in 1/10secs
|
||||||
|
wd1_timeout: Default watchdog1 timeout in 1/10secs
|
||||||
|
wd2_timeout: Default watchdog2 timeout in 1/10secs
|
||||||
|
-------------------------------------------------
|
||||||
|
davinci_wdt:
|
||||||
|
heartbeat: Watchdog heartbeat period in seconds from 1 to 600, default 60
|
||||||
|
-------------------------------------------------
|
||||||
|
ep93xx_wdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=TBD)
|
||||||
|
-------------------------------------------------
|
||||||
|
eurotechwdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
io: Eurotech WDT io port (default=0x3f0)
|
||||||
|
irq: Eurotech WDT irq (default=10)
|
||||||
|
ev: Eurotech WDT event type (default is `int')
|
||||||
|
-------------------------------------------------
|
||||||
|
gef_wdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
geodewdt:
|
||||||
|
timeout: Watchdog timeout in seconds. 1<= timeout <=131, default=60.
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
i6300esb:
|
||||||
|
heartbeat: Watchdog heartbeat in seconds. (1<heartbeat<2046, default=30)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
iTCO_wdt:
|
||||||
|
heartbeat: Watchdog heartbeat in seconds.
|
||||||
|
(2<heartbeat<39 (TCO v1) or 613 (TCO v2), default=30)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
iTCO_vendor_support:
|
||||||
|
vendorsupport: iTCO vendor specific support mode, default=0 (none),
|
||||||
|
1=SuperMicro Pent3, 2=SuperMicro Pent4+, 911=Broken SMI BIOS
|
||||||
|
-------------------------------------------------
|
||||||
|
ib700wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. 0<= timeout <=30, default=30.
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
ibmasr:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
indydog:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
iop_wdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
it8712f_wdt:
|
||||||
|
margin: Watchdog margin in seconds (default 60)
|
||||||
|
nowayout: Disable watchdog shutdown on close
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
it87_wdt:
|
||||||
|
nogameport: Forbid the activation of game port, default=0
|
||||||
|
exclusive: Watchdog exclusive device open, default=1
|
||||||
|
timeout: Watchdog timeout in seconds, default=60
|
||||||
|
testmode: Watchdog test mode (1 = no reboot), default=0
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
ixp2000_wdt:
|
||||||
|
heartbeat: Watchdog heartbeat in seconds (default 60s)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
ixp4xx_wdt:
|
||||||
|
heartbeat: Watchdog heartbeat in seconds (default 60s)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
ks8695_wdt:
|
||||||
|
wdt_time: Watchdog time in seconds. (default=5)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
machzwd:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
action: after watchdog resets, generate:
|
||||||
|
0 = RESET(*) 1 = SMI 2 = NMI 3 = SCI
|
||||||
|
-------------------------------------------------
|
||||||
|
max63xx_wdt:
|
||||||
|
heartbeat: Watchdog heartbeat period in seconds from 1 to 60, default 60
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
nodelay: Force selection of a timeout setting without initial delay
|
||||||
|
(max6373/74 only, default=0)
|
||||||
|
-------------------------------------------------
|
||||||
|
mixcomwd:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
mpc8xxx_wdt:
|
||||||
|
timeout: Watchdog timeout in ticks. (0<timeout<65536, default=65535)
|
||||||
|
reset: Watchdog Interrupt/Reset Mode. 0 = interrupt, 1 = reset
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
mpcore_wdt:
|
||||||
|
mpcore_margin: MPcore timer margin in seconds.
|
||||||
|
(0 < mpcore_margin < 65536, default=60)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
mpcore_noboot: MPcore watchdog action, set to 1 to ignore reboots,
|
||||||
|
0 to reboot (default=0
|
||||||
|
-------------------------------------------------
|
||||||
|
mv64x60_wdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
nuc900_wdt:
|
||||||
|
heartbeat: Watchdog heartbeats in seconds.
|
||||||
|
(default = 15)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
omap_wdt:
|
||||||
|
timer_margin: initial watchdog timeout (in seconds)
|
||||||
|
-------------------------------------------------
|
||||||
|
orion_wdt:
|
||||||
|
heartbeat: Initial watchdog heartbeat in seconds
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
pc87413_wdt:
|
||||||
|
io: pc87413 WDT I/O port (default: io).
|
||||||
|
timeout: Watchdog timeout in minutes (default=timeout).
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
pika_wdt:
|
||||||
|
heartbeat: Watchdog heartbeats in seconds. (default = 15)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
pnx4008_wdt:
|
||||||
|
heartbeat: Watchdog heartbeat period in seconds from 1 to 60, default 19
|
||||||
|
nowayout: Set to 1 to keep watchdog running after device release
|
||||||
|
-------------------------------------------------
|
||||||
|
pnx833x_wdt:
|
||||||
|
timeout: Watchdog timeout in Mhz. (68Mhz clock), default=2040000000 (30 seconds)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
start_enabled: Watchdog is started on module insertion (default=1)
|
||||||
|
-------------------------------------------------
|
||||||
|
rc32434_wdt:
|
||||||
|
timeout: Watchdog timeout value, in seconds (default=20)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
riowd:
|
||||||
|
riowd_timeout: Watchdog timeout in minutes (default=1)
|
||||||
|
-------------------------------------------------
|
||||||
|
s3c2410_wdt:
|
||||||
|
tmr_margin: Watchdog tmr_margin in seconds. (default=15)
|
||||||
|
tmr_atboot: Watchdog is started at boot time if set to 1, default=0
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
soft_noboot: Watchdog action, set to 1 to ignore reboots, 0 to reboot
|
||||||
|
debug: Watchdog debug, set to >1 for debug, (default 0)
|
||||||
|
-------------------------------------------------
|
||||||
|
sa1100_wdt:
|
||||||
|
margin: Watchdog margin in seconds (default 60s)
|
||||||
|
-------------------------------------------------
|
||||||
|
sb_wdog:
|
||||||
|
timeout: Watchdog timeout in microseconds (max/default 8388607 or 8.3ish secs)
|
||||||
|
-------------------------------------------------
|
||||||
|
sbc60xxwdt:
|
||||||
|
wdt_stop: SBC60xx WDT 'stop' io port (default 0x45)
|
||||||
|
wdt_start: SBC60xx WDT 'start' io port (default 0x443)
|
||||||
|
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
sbc7240_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (1<=timeout<=255, default=30)
|
||||||
|
nowayout: Disable watchdog when closing device file
|
||||||
|
-------------------------------------------------
|
||||||
|
sbc8360:
|
||||||
|
timeout: Index into timeout table (0-63) (default=27 (60s))
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
sbc_epx_c3:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
sbc_fitpc2_wdt:
|
||||||
|
margin: Watchdog margin in seconds (default 60s)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
-------------------------------------------------
|
||||||
|
sc1200wdt:
|
||||||
|
isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
|
||||||
|
io: io port
|
||||||
|
timeout: range is 0-255 minutes, default is 1
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
sc520_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (1 <= timeout <= 3600, default=30)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
sch311x_wdt:
|
||||||
|
force_id: Override the detected device ID
|
||||||
|
therm_trip: Should a ThermTrip trigger the reset generator
|
||||||
|
timeout: Watchdog timeout in seconds. 1<= timeout <=15300, default=60
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
scx200_wdt:
|
||||||
|
margin: Watchdog margin in seconds
|
||||||
|
nowayout: Disable watchdog shutdown on close
|
||||||
|
-------------------------------------------------
|
||||||
|
shwdt:
|
||||||
|
clock_division_ratio: Clock division ratio. Valid ranges are from 0x5 (1.31ms)
|
||||||
|
to 0x7 (5.25ms). (default=7)
|
||||||
|
heartbeat: Watchdog heartbeat in seconds. (1 <= heartbeat <= 3600, default=30
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
smsc37b787_wdt:
|
||||||
|
timeout: range is 1-255 units, default is 60
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
softdog:
|
||||||
|
soft_margin: Watchdog soft_margin in seconds.
|
||||||
|
(0 < soft_margin < 65536, default=60)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
soft_noboot: Softdog action, set to 1 to ignore reboots, 0 to reboot
|
||||||
|
(default=0)
|
||||||
|
-------------------------------------------------
|
||||||
|
stmp3xxx_wdt:
|
||||||
|
heartbeat: Watchdog heartbeat period in seconds from 1 to 4194304, default 19
|
||||||
|
-------------------------------------------------
|
||||||
|
ts72xx_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (1 <= timeout <= 8, default=8)
|
||||||
|
nowayout: Disable watchdog shutdown on close
|
||||||
|
-------------------------------------------------
|
||||||
|
twl4030_wdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
txx9wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (0<timeout<N, default=60)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
w83627hf_wdt:
|
||||||
|
wdt_io: w83627hf/thf WDT io port (default 0x2E)
|
||||||
|
timeout: Watchdog timeout in seconds. 1 <= timeout <= 255, default=60.
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
w83697hf_wdt:
|
||||||
|
wdt_io: w83697hf/hg WDT io port (default 0x2e, 0 = autodetect)
|
||||||
|
timeout: Watchdog timeout in seconds. 1<= timeout <=255 (default=60)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
early_disable: Watchdog gets disabled at boot time (default=1)
|
||||||
|
-------------------------------------------------
|
||||||
|
w83697ug_wdt:
|
||||||
|
wdt_io: w83697ug/uf WDT io port (default 0x2e)
|
||||||
|
timeout: Watchdog timeout in seconds. 1<= timeout <=255 (default=60)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
w83877f_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30)
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
w83977f_wdt:
|
||||||
|
timeout: Watchdog timeout in seconds (15..7635), default=45)
|
||||||
|
testmode: Watchdog testmode (1 = no reboot), default=0
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
wafer5823wdt:
|
||||||
|
timeout: Watchdog timeout in seconds. 1 <= timeout <= 255, default=60.
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
wdt285:
|
||||||
|
soft_margin: Watchdog timeout in seconds (default=60)
|
||||||
|
-------------------------------------------------
|
||||||
|
wdt977:
|
||||||
|
timeout: Watchdog timeout in seconds (60..15300, default=60)
|
||||||
|
testmode: Watchdog testmode (1 = no reboot), default=0
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
wm831x_wdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
||||||
|
wm8350_wdt:
|
||||||
|
nowayout: Watchdog cannot be stopped once started
|
||||||
|
(default=kernel config parameter)
|
||||||
|
-------------------------------------------------
|
@ -14,14 +14,22 @@ reboot will depend on the state of the machines and interrupts. The hardware
|
|||||||
boards physically pull the machine down off their own onboard timers and
|
boards physically pull the machine down off their own onboard timers and
|
||||||
will reboot from almost anything.
|
will reboot from almost anything.
|
||||||
|
|
||||||
A second temperature monitoring interface is available on the WDT501P cards
|
A second temperature monitoring interface is available on the WDT501P cards.
|
||||||
This provides /dev/temperature. This is the machine internal temperature in
|
This provides /dev/temperature. This is the machine internal temperature in
|
||||||
degrees Fahrenheit. Each read returns a single byte giving the temperature.
|
degrees Fahrenheit. Each read returns a single byte giving the temperature.
|
||||||
|
|
||||||
The third interface logs kernel messages on additional alert events.
|
The third interface logs kernel messages on additional alert events.
|
||||||
|
|
||||||
The wdt card cannot be safely probed for. Instead you need to pass
|
The ICS ISA-bus wdt card cannot be safely probed for. Instead you need to
|
||||||
wdt=ioaddr,irq as a boot parameter - eg "wdt=0x240,11".
|
pass IO address and IRQ boot parameters. E.g.:
|
||||||
|
wdt.io=0x240 wdt.irq=11
|
||||||
|
|
||||||
|
Other "wdt" driver parameters are:
|
||||||
|
heartbeat Watchdog heartbeat in seconds (default 60)
|
||||||
|
nowayout Watchdog cannot be stopped once started (kernel
|
||||||
|
build parameter)
|
||||||
|
tachometer WDT501-P Fan Tachometer support (0=disable, default=0)
|
||||||
|
type WDT501-P Card type (500 or 501, default=500)
|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
@ -40,4 +48,3 @@ Minor numbers are however allocated for it.
|
|||||||
|
|
||||||
|
|
||||||
Example Watchdog Driver: see Documentation/watchdog/src/watchdog-simple.c
|
Example Watchdog Driver: see Documentation/watchdog/src/watchdog-simple.c
|
||||||
|
|
||||||
|
@ -145,13 +145,19 @@ config KS8695_WATCHDOG
|
|||||||
Watchdog timer embedded into KS8695 processor. This will reboot your
|
Watchdog timer embedded into KS8695 processor. This will reboot your
|
||||||
system when the timeout is reached.
|
system when the timeout is reached.
|
||||||
|
|
||||||
|
config HAVE_S3C2410_WATCHDOG
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
This will include watchdog timer support for Samsung SoCs. If
|
||||||
|
you want to include watchdog support for any machine, kindly
|
||||||
|
select this in the respective mach-XXXX/Kconfig file.
|
||||||
|
|
||||||
config S3C2410_WATCHDOG
|
config S3C2410_WATCHDOG
|
||||||
tristate "S3C2410 Watchdog"
|
tristate "S3C2410 Watchdog"
|
||||||
depends on ARCH_S3C2410
|
depends on ARCH_S3C2410 || HAVE_S3C2410_WATCHDOG
|
||||||
help
|
help
|
||||||
Watchdog timer block in the Samsung S3C2410 chips. This will
|
Watchdog timer block in the Samsung SoCs. This will reboot
|
||||||
reboot the system when the timer expires with the watchdog
|
the system when the timer expires with the watchdog enabled.
|
||||||
enabled.
|
|
||||||
|
|
||||||
The driver is limited by the speed of the system's PCLK
|
The driver is limited by the speed of the system's PCLK
|
||||||
signal, so with reasonably fast systems (PCLK around 50-66MHz)
|
signal, so with reasonably fast systems (PCLK around 50-66MHz)
|
||||||
@ -306,6 +312,18 @@ config MAX63XX_WATCHDOG
|
|||||||
help
|
help
|
||||||
Support for memory mapped max63{69,70,71,72,73,74} watchdog timer.
|
Support for memory mapped max63{69,70,71,72,73,74} watchdog timer.
|
||||||
|
|
||||||
|
config IMX2_WDT
|
||||||
|
tristate "IMX2+ Watchdog"
|
||||||
|
depends on ARCH_MX2 || ARCH_MX25 || ARCH_MX3 || ARCH_MX5
|
||||||
|
help
|
||||||
|
This is the driver for the hardware watchdog
|
||||||
|
on the Freescale IMX2 and later processors.
|
||||||
|
If you have one of these processors and wish to have
|
||||||
|
watchdog support enabled, say Y, otherwise say N.
|
||||||
|
|
||||||
|
To compile this driver as a module, choose M here: the
|
||||||
|
module will be called imx2_wdt.
|
||||||
|
|
||||||
# AVR32 Architecture
|
# AVR32 Architecture
|
||||||
|
|
||||||
config AT32AP700X_WDT
|
config AT32AP700X_WDT
|
||||||
|
@ -47,6 +47,7 @@ obj-$(CONFIG_STMP3XXX_WATCHDOG) += stmp3xxx_wdt.o
|
|||||||
obj-$(CONFIG_NUC900_WATCHDOG) += nuc900_wdt.o
|
obj-$(CONFIG_NUC900_WATCHDOG) += nuc900_wdt.o
|
||||||
obj-$(CONFIG_ADX_WATCHDOG) += adx_wdt.o
|
obj-$(CONFIG_ADX_WATCHDOG) += adx_wdt.o
|
||||||
obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o
|
obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o
|
||||||
|
obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o
|
||||||
|
|
||||||
# AVR32 Architecture
|
# AVR32 Architecture
|
||||||
obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o
|
obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/blackfin.h>
|
#include <asm/blackfin.h>
|
||||||
|
#include <asm/bfin_watchdog.h>
|
||||||
|
|
||||||
#define stamp(fmt, args...) \
|
#define stamp(fmt, args...) \
|
||||||
pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args)
|
pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args)
|
||||||
@ -49,24 +50,6 @@
|
|||||||
# define bfin_write_WDOG_STAT(x) bfin_write_WDOGA_STAT(x)
|
# define bfin_write_WDOG_STAT(x) bfin_write_WDOGA_STAT(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Bit in SWRST that indicates boot caused by watchdog */
|
|
||||||
#define SWRST_RESET_WDOG 0x4000
|
|
||||||
|
|
||||||
/* Bit in WDOG_CTL that indicates watchdog has expired (WDR0) */
|
|
||||||
#define WDOG_EXPIRED 0x8000
|
|
||||||
|
|
||||||
/* Masks for WDEV field in WDOG_CTL register */
|
|
||||||
#define ICTL_RESET 0x0
|
|
||||||
#define ICTL_NMI 0x2
|
|
||||||
#define ICTL_GPI 0x4
|
|
||||||
#define ICTL_NONE 0x6
|
|
||||||
#define ICTL_MASK 0x6
|
|
||||||
|
|
||||||
/* Masks for WDEN field in WDOG_CTL register */
|
|
||||||
#define WDEN_MASK 0x0FF0
|
|
||||||
#define WDEN_ENABLE 0x0000
|
|
||||||
#define WDEN_DISABLE 0x0AD0
|
|
||||||
|
|
||||||
/* some defaults */
|
/* some defaults */
|
||||||
#define WATCHDOG_TIMEOUT 20
|
#define WATCHDOG_TIMEOUT 20
|
||||||
|
|
||||||
|
@ -137,12 +137,12 @@ static long booke_wdt_ioctl(struct file *file,
|
|||||||
if (copy_to_user((void *)arg, &ident, sizeof(ident)))
|
if (copy_to_user((void *)arg, &ident, sizeof(ident)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
case WDIOC_GETSTATUS:
|
case WDIOC_GETSTATUS:
|
||||||
return put_user(ident.options, p);
|
return put_user(0, p);
|
||||||
case WDIOC_GETBOOTSTATUS:
|
case WDIOC_GETBOOTSTATUS:
|
||||||
/* XXX: something is clearing TSR */
|
/* XXX: something is clearing TSR */
|
||||||
tmp = mfspr(SPRN_TSR) & TSR_WRS(3);
|
tmp = mfspr(SPRN_TSR) & TSR_WRS(3);
|
||||||
/* returns 1 if last reset was caused by the WDT */
|
/* returns CARDRESET if last reset was caused by the WDT */
|
||||||
return (tmp ? 1 : 0);
|
return (tmp ? WDIOF_CARDRESET : 0);
|
||||||
case WDIOC_SETOPTIONS:
|
case WDIOC_SETOPTIONS:
|
||||||
if (get_user(tmp, p))
|
if (get_user(tmp, p))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -68,7 +68,6 @@ static spinlock_t eurwdt_lock;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* You must set these - there is no sane way to probe for this board.
|
* You must set these - there is no sane way to probe for this board.
|
||||||
* You can use eurwdt=x,y to set these now.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int io = 0x3f0;
|
static int io = 0x3f0;
|
||||||
|
@ -101,13 +101,6 @@ static void supermicro_old_pre_stop(unsigned long acpibase)
|
|||||||
outl(val32, SMI_EN); /* Needed to deactivate watchdog */
|
outl(val32, SMI_EN); /* Needed to deactivate watchdog */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void supermicro_old_pre_keepalive(unsigned long acpibase)
|
|
||||||
{
|
|
||||||
/* Reload TCO Timer (done in iTCO_wdt_keepalive) + */
|
|
||||||
/* Clear "Expire Flag" (Bit 3 of TC01_STS register) */
|
|
||||||
outb(0x08, TCO1_STS);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Vendor Support: 2
|
* Vendor Support: 2
|
||||||
* Board: Super Micro Computer Inc. P4SBx, P4DPx
|
* Board: Super Micro Computer Inc. P4SBx, P4DPx
|
||||||
@ -337,9 +330,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_stop);
|
|||||||
|
|
||||||
void iTCO_vendor_pre_keepalive(unsigned long acpibase, unsigned int heartbeat)
|
void iTCO_vendor_pre_keepalive(unsigned long acpibase, unsigned int heartbeat)
|
||||||
{
|
{
|
||||||
if (vendorsupport == SUPERMICRO_OLD_BOARD)
|
if (vendorsupport == SUPERMICRO_NEW_BOARD)
|
||||||
supermicro_old_pre_keepalive(acpibase);
|
|
||||||
else if (vendorsupport == SUPERMICRO_NEW_BOARD)
|
|
||||||
supermicro_new_pre_set_heartbeat(heartbeat);
|
supermicro_new_pre_set_heartbeat(heartbeat);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iTCO_vendor_pre_keepalive);
|
EXPORT_SYMBOL(iTCO_vendor_pre_keepalive);
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
/* Module and version information */
|
/* Module and version information */
|
||||||
#define DRV_NAME "iTCO_wdt"
|
#define DRV_NAME "iTCO_wdt"
|
||||||
#define DRV_VERSION "1.05"
|
#define DRV_VERSION "1.06"
|
||||||
#define PFX DRV_NAME ": "
|
#define PFX DRV_NAME ": "
|
||||||
|
|
||||||
/* Includes */
|
/* Includes */
|
||||||
@ -391,8 +391,8 @@ static struct platform_device *iTCO_wdt_platform_device;
|
|||||||
#define WATCHDOG_HEARTBEAT 30 /* 30 sec default heartbeat */
|
#define WATCHDOG_HEARTBEAT 30 /* 30 sec default heartbeat */
|
||||||
static int heartbeat = WATCHDOG_HEARTBEAT; /* in seconds */
|
static int heartbeat = WATCHDOG_HEARTBEAT; /* in seconds */
|
||||||
module_param(heartbeat, int, 0);
|
module_param(heartbeat, int, 0);
|
||||||
MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. "
|
MODULE_PARM_DESC(heartbeat, "Watchdog timeout in seconds. "
|
||||||
"(2<heartbeat<39 (TCO v1) or 613 (TCO v2), default="
|
"5..76 (TCO v1) or 3..614 (TCO v2), default="
|
||||||
__MODULE_STRING(WATCHDOG_HEARTBEAT) ")");
|
__MODULE_STRING(WATCHDOG_HEARTBEAT) ")");
|
||||||
|
|
||||||
static int nowayout = WATCHDOG_NOWAYOUT;
|
static int nowayout = WATCHDOG_NOWAYOUT;
|
||||||
@ -523,8 +523,13 @@ static int iTCO_wdt_keepalive(void)
|
|||||||
/* Reload the timer by writing to the TCO Timer Counter register */
|
/* Reload the timer by writing to the TCO Timer Counter register */
|
||||||
if (iTCO_wdt_private.iTCO_version == 2)
|
if (iTCO_wdt_private.iTCO_version == 2)
|
||||||
outw(0x01, TCO_RLD);
|
outw(0x01, TCO_RLD);
|
||||||
else if (iTCO_wdt_private.iTCO_version == 1)
|
else if (iTCO_wdt_private.iTCO_version == 1) {
|
||||||
|
/* Reset the timeout status bit so that the timer
|
||||||
|
* needs to count down twice again before rebooting */
|
||||||
|
outw(0x0008, TCO1_STS); /* write 1 to clear bit */
|
||||||
|
|
||||||
outb(0x01, TCO_RLD);
|
outb(0x01, TCO_RLD);
|
||||||
|
}
|
||||||
|
|
||||||
spin_unlock(&iTCO_wdt_private.io_lock);
|
spin_unlock(&iTCO_wdt_private.io_lock);
|
||||||
return 0;
|
return 0;
|
||||||
@ -537,6 +542,11 @@ static int iTCO_wdt_set_heartbeat(int t)
|
|||||||
unsigned int tmrval;
|
unsigned int tmrval;
|
||||||
|
|
||||||
tmrval = seconds_to_ticks(t);
|
tmrval = seconds_to_ticks(t);
|
||||||
|
|
||||||
|
/* For TCO v1 the timer counts down twice before rebooting */
|
||||||
|
if (iTCO_wdt_private.iTCO_version == 1)
|
||||||
|
tmrval /= 2;
|
||||||
|
|
||||||
/* from the specs: */
|
/* from the specs: */
|
||||||
/* "Values of 0h-3h are ignored and should not be attempted" */
|
/* "Values of 0h-3h are ignored and should not be attempted" */
|
||||||
if (tmrval < 0x04)
|
if (tmrval < 0x04)
|
||||||
@ -593,6 +603,8 @@ static int iTCO_wdt_get_timeleft(int *time_left)
|
|||||||
spin_lock(&iTCO_wdt_private.io_lock);
|
spin_lock(&iTCO_wdt_private.io_lock);
|
||||||
val8 = inb(TCO_RLD);
|
val8 = inb(TCO_RLD);
|
||||||
val8 &= 0x3f;
|
val8 &= 0x3f;
|
||||||
|
if (!(inw(TCO1_STS) & 0x0008))
|
||||||
|
val8 += (inb(TCOv1_TMR) & 0x3f);
|
||||||
spin_unlock(&iTCO_wdt_private.io_lock);
|
spin_unlock(&iTCO_wdt_private.io_lock);
|
||||||
|
|
||||||
*time_left = (val8 * 6) / 10;
|
*time_left = (val8 * 6) / 10;
|
||||||
@ -832,9 +844,9 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev,
|
|||||||
TCOBASE);
|
TCOBASE);
|
||||||
|
|
||||||
/* Clear out the (probably old) status */
|
/* Clear out the (probably old) status */
|
||||||
outb(8, TCO1_STS); /* Clear the Time Out Status bit */
|
outw(0x0008, TCO1_STS); /* Clear the Time Out Status bit */
|
||||||
outb(2, TCO2_STS); /* Clear SECOND_TO_STS bit */
|
outw(0x0002, TCO2_STS); /* Clear SECOND_TO_STS bit */
|
||||||
outb(4, TCO2_STS); /* Clear BOOT_STS bit */
|
outw(0x0004, TCO2_STS); /* Clear BOOT_STS bit */
|
||||||
|
|
||||||
/* Make sure the watchdog is not running */
|
/* Make sure the watchdog is not running */
|
||||||
iTCO_wdt_stop();
|
iTCO_wdt_stop();
|
||||||
@ -844,8 +856,7 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev,
|
|||||||
if (iTCO_wdt_set_heartbeat(heartbeat)) {
|
if (iTCO_wdt_set_heartbeat(heartbeat)) {
|
||||||
iTCO_wdt_set_heartbeat(WATCHDOG_HEARTBEAT);
|
iTCO_wdt_set_heartbeat(WATCHDOG_HEARTBEAT);
|
||||||
printk(KERN_INFO PFX
|
printk(KERN_INFO PFX
|
||||||
"heartbeat value must be 2 < heartbeat < 39 (TCO v1) "
|
"timeout value out of range, using %d\n", heartbeat);
|
||||||
"or 613 (TCO v2), using %d\n", heartbeat);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = misc_register(&iTCO_wdt_miscdev);
|
ret = misc_register(&iTCO_wdt_miscdev);
|
||||||
|
358
drivers/watchdog/imx2_wdt.c
Normal file
358
drivers/watchdog/imx2_wdt.c
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
/*
|
||||||
|
* Watchdog driver for IMX2 and later processors
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Wolfram Sang, Pengutronix e.K. <w.sang@pengutronix.de>
|
||||||
|
*
|
||||||
|
* some parts adapted by similar drivers from Darius Augulis and Vladimir
|
||||||
|
* Zapolskiy, additional improvements by Wim Van Sebroeck.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 as published by
|
||||||
|
* the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* NOTE: MX1 has a slightly different Watchdog than MX2 and later:
|
||||||
|
*
|
||||||
|
* MX1: MX2+:
|
||||||
|
* ---- -----
|
||||||
|
* Registers: 32-bit 16-bit
|
||||||
|
* Stopable timer: Yes No
|
||||||
|
* Need to enable clk: No Yes
|
||||||
|
* Halt on suspend: Manual Can be automatic
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/miscdevice.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/moduleparam.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/watchdog.h>
|
||||||
|
#include <linux/clk.h>
|
||||||
|
#include <linux/fs.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
|
#include <linux/timer.h>
|
||||||
|
#include <linux/jiffies.h>
|
||||||
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
|
#define DRIVER_NAME "imx2-wdt"
|
||||||
|
|
||||||
|
#define IMX2_WDT_WCR 0x00 /* Control Register */
|
||||||
|
#define IMX2_WDT_WCR_WT (0xFF << 8) /* -> Watchdog Timeout Field */
|
||||||
|
#define IMX2_WDT_WCR_WRE (1 << 3) /* -> WDOG Reset Enable */
|
||||||
|
#define IMX2_WDT_WCR_WDE (1 << 2) /* -> Watchdog Enable */
|
||||||
|
|
||||||
|
#define IMX2_WDT_WSR 0x02 /* Service Register */
|
||||||
|
#define IMX2_WDT_SEQ1 0x5555 /* -> service sequence 1 */
|
||||||
|
#define IMX2_WDT_SEQ2 0xAAAA /* -> service sequence 2 */
|
||||||
|
|
||||||
|
#define IMX2_WDT_MAX_TIME 128
|
||||||
|
#define IMX2_WDT_DEFAULT_TIME 60 /* in seconds */
|
||||||
|
|
||||||
|
#define WDOG_SEC_TO_COUNT(s) ((s * 2 - 1) << 8)
|
||||||
|
|
||||||
|
#define IMX2_WDT_STATUS_OPEN 0
|
||||||
|
#define IMX2_WDT_STATUS_STARTED 1
|
||||||
|
#define IMX2_WDT_EXPECT_CLOSE 2
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
struct clk *clk;
|
||||||
|
void __iomem *base;
|
||||||
|
unsigned timeout;
|
||||||
|
unsigned long status;
|
||||||
|
struct timer_list timer; /* Pings the watchdog when closed */
|
||||||
|
} imx2_wdt;
|
||||||
|
|
||||||
|
static struct miscdevice imx2_wdt_miscdev;
|
||||||
|
|
||||||
|
static int nowayout = WATCHDOG_NOWAYOUT;
|
||||||
|
module_param(nowayout, int, 0);
|
||||||
|
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
|
||||||
|
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned timeout = IMX2_WDT_DEFAULT_TIME;
|
||||||
|
module_param(timeout, uint, 0);
|
||||||
|
MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds (default="
|
||||||
|
__MODULE_STRING(IMX2_WDT_DEFAULT_TIME) ")");
|
||||||
|
|
||||||
|
static const struct watchdog_info imx2_wdt_info = {
|
||||||
|
.identity = "imx2+ watchdog",
|
||||||
|
.options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline void imx2_wdt_setup(void)
|
||||||
|
{
|
||||||
|
u16 val = __raw_readw(imx2_wdt.base + IMX2_WDT_WCR);
|
||||||
|
|
||||||
|
/* Strip the old watchdog Time-Out value */
|
||||||
|
val &= ~IMX2_WDT_WCR_WT;
|
||||||
|
/* Generate reset if WDOG times out */
|
||||||
|
val &= ~IMX2_WDT_WCR_WRE;
|
||||||
|
/* Keep Watchdog Disabled */
|
||||||
|
val &= ~IMX2_WDT_WCR_WDE;
|
||||||
|
/* Set the watchdog's Time-Out value */
|
||||||
|
val |= WDOG_SEC_TO_COUNT(imx2_wdt.timeout);
|
||||||
|
|
||||||
|
__raw_writew(val, imx2_wdt.base + IMX2_WDT_WCR);
|
||||||
|
|
||||||
|
/* enable the watchdog */
|
||||||
|
val |= IMX2_WDT_WCR_WDE;
|
||||||
|
__raw_writew(val, imx2_wdt.base + IMX2_WDT_WCR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void imx2_wdt_ping(void)
|
||||||
|
{
|
||||||
|
__raw_writew(IMX2_WDT_SEQ1, imx2_wdt.base + IMX2_WDT_WSR);
|
||||||
|
__raw_writew(IMX2_WDT_SEQ2, imx2_wdt.base + IMX2_WDT_WSR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void imx2_wdt_timer_ping(unsigned long arg)
|
||||||
|
{
|
||||||
|
/* ping it every imx2_wdt.timeout / 2 seconds to prevent reboot */
|
||||||
|
imx2_wdt_ping();
|
||||||
|
mod_timer(&imx2_wdt.timer, jiffies + imx2_wdt.timeout * HZ / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void imx2_wdt_start(void)
|
||||||
|
{
|
||||||
|
if (!test_and_set_bit(IMX2_WDT_STATUS_STARTED, &imx2_wdt.status)) {
|
||||||
|
/* at our first start we enable clock and do initialisations */
|
||||||
|
clk_enable(imx2_wdt.clk);
|
||||||
|
|
||||||
|
imx2_wdt_setup();
|
||||||
|
} else /* delete the timer that pings the watchdog after close */
|
||||||
|
del_timer_sync(&imx2_wdt.timer);
|
||||||
|
|
||||||
|
/* Watchdog is enabled - time to reload the timeout value */
|
||||||
|
imx2_wdt_ping();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void imx2_wdt_stop(void)
|
||||||
|
{
|
||||||
|
/* we don't need a clk_disable, it cannot be disabled once started.
|
||||||
|
* We use a timer to ping the watchdog while /dev/watchdog is closed */
|
||||||
|
imx2_wdt_timer_ping(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void imx2_wdt_set_timeout(int new_timeout)
|
||||||
|
{
|
||||||
|
u16 val = __raw_readw(imx2_wdt.base + IMX2_WDT_WCR);
|
||||||
|
|
||||||
|
/* set the new timeout value in the WSR */
|
||||||
|
val &= ~IMX2_WDT_WCR_WT;
|
||||||
|
val |= WDOG_SEC_TO_COUNT(new_timeout);
|
||||||
|
__raw_writew(val, imx2_wdt.base + IMX2_WDT_WCR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int imx2_wdt_open(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
if (test_and_set_bit(IMX2_WDT_STATUS_OPEN, &imx2_wdt.status))
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
|
imx2_wdt_start();
|
||||||
|
return nonseekable_open(inode, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int imx2_wdt_close(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
if (test_bit(IMX2_WDT_EXPECT_CLOSE, &imx2_wdt.status) && !nowayout)
|
||||||
|
imx2_wdt_stop();
|
||||||
|
else {
|
||||||
|
dev_crit(imx2_wdt_miscdev.parent,
|
||||||
|
"Unexpected close: Expect reboot!\n");
|
||||||
|
imx2_wdt_ping();
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_bit(IMX2_WDT_EXPECT_CLOSE, &imx2_wdt.status);
|
||||||
|
clear_bit(IMX2_WDT_STATUS_OPEN, &imx2_wdt.status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long imx2_wdt_ioctl(struct file *file, unsigned int cmd,
|
||||||
|
unsigned long arg)
|
||||||
|
{
|
||||||
|
void __user *argp = (void __user *)arg;
|
||||||
|
int __user *p = argp;
|
||||||
|
int new_value;
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case WDIOC_GETSUPPORT:
|
||||||
|
return copy_to_user(argp, &imx2_wdt_info,
|
||||||
|
sizeof(struct watchdog_info)) ? -EFAULT : 0;
|
||||||
|
|
||||||
|
case WDIOC_GETSTATUS:
|
||||||
|
case WDIOC_GETBOOTSTATUS:
|
||||||
|
return put_user(0, p);
|
||||||
|
|
||||||
|
case WDIOC_KEEPALIVE:
|
||||||
|
imx2_wdt_ping();
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WDIOC_SETTIMEOUT:
|
||||||
|
if (get_user(new_value, p))
|
||||||
|
return -EFAULT;
|
||||||
|
if ((new_value < 1) || (new_value > IMX2_WDT_MAX_TIME))
|
||||||
|
return -EINVAL;
|
||||||
|
imx2_wdt_set_timeout(new_value);
|
||||||
|
imx2_wdt.timeout = new_value;
|
||||||
|
imx2_wdt_ping();
|
||||||
|
|
||||||
|
/* Fallthrough to return current value */
|
||||||
|
case WDIOC_GETTIMEOUT:
|
||||||
|
return put_user(imx2_wdt.timeout, p);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return -ENOTTY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t imx2_wdt_write(struct file *file, const char __user *data,
|
||||||
|
size_t len, loff_t *ppos)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
if (len == 0) /* Can we see this even ? */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
clear_bit(IMX2_WDT_EXPECT_CLOSE, &imx2_wdt.status);
|
||||||
|
/* scan to see whether or not we got the magic character */
|
||||||
|
for (i = 0; i != len; i++) {
|
||||||
|
if (get_user(c, data + i))
|
||||||
|
return -EFAULT;
|
||||||
|
if (c == 'V')
|
||||||
|
set_bit(IMX2_WDT_EXPECT_CLOSE, &imx2_wdt.status);
|
||||||
|
}
|
||||||
|
|
||||||
|
imx2_wdt_ping();
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations imx2_wdt_fops = {
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.llseek = no_llseek,
|
||||||
|
.unlocked_ioctl = imx2_wdt_ioctl,
|
||||||
|
.open = imx2_wdt_open,
|
||||||
|
.release = imx2_wdt_close,
|
||||||
|
.write = imx2_wdt_write,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct miscdevice imx2_wdt_miscdev = {
|
||||||
|
.minor = WATCHDOG_MINOR,
|
||||||
|
.name = "watchdog",
|
||||||
|
.fops = &imx2_wdt_fops,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init imx2_wdt_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
int res_size;
|
||||||
|
struct resource *res;
|
||||||
|
|
||||||
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
if (!res) {
|
||||||
|
dev_err(&pdev->dev, "can't get device resources\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
res_size = resource_size(res);
|
||||||
|
if (!devm_request_mem_region(&pdev->dev, res->start, res_size,
|
||||||
|
res->name)) {
|
||||||
|
dev_err(&pdev->dev, "can't allocate %d bytes at %d address\n",
|
||||||
|
res_size, res->start);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
imx2_wdt.base = devm_ioremap_nocache(&pdev->dev, res->start, res_size);
|
||||||
|
if (!imx2_wdt.base) {
|
||||||
|
dev_err(&pdev->dev, "ioremap failed\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
imx2_wdt.clk = clk_get_sys("imx-wdt.0", NULL);
|
||||||
|
if (IS_ERR(imx2_wdt.clk)) {
|
||||||
|
dev_err(&pdev->dev, "can't get Watchdog clock\n");
|
||||||
|
return PTR_ERR(imx2_wdt.clk);
|
||||||
|
}
|
||||||
|
|
||||||
|
imx2_wdt.timeout = clamp_t(unsigned, timeout, 1, IMX2_WDT_MAX_TIME);
|
||||||
|
if (imx2_wdt.timeout != timeout)
|
||||||
|
dev_warn(&pdev->dev, "Initial timeout out of range! "
|
||||||
|
"Clamped from %u to %u\n", timeout, imx2_wdt.timeout);
|
||||||
|
|
||||||
|
setup_timer(&imx2_wdt.timer, imx2_wdt_timer_ping, 0);
|
||||||
|
|
||||||
|
imx2_wdt_miscdev.parent = &pdev->dev;
|
||||||
|
ret = misc_register(&imx2_wdt_miscdev);
|
||||||
|
if (ret)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
dev_info(&pdev->dev,
|
||||||
|
"IMX2+ Watchdog Timer enabled. timeout=%ds (nowayout=%d)\n",
|
||||||
|
imx2_wdt.timeout, nowayout);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
imx2_wdt_miscdev.parent = NULL;
|
||||||
|
clk_put(imx2_wdt.clk);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __exit imx2_wdt_remove(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
misc_deregister(&imx2_wdt_miscdev);
|
||||||
|
|
||||||
|
if (test_bit(IMX2_WDT_STATUS_STARTED, &imx2_wdt.status)) {
|
||||||
|
del_timer_sync(&imx2_wdt.timer);
|
||||||
|
|
||||||
|
dev_crit(imx2_wdt_miscdev.parent,
|
||||||
|
"Device removed: Expect reboot!\n");
|
||||||
|
} else
|
||||||
|
clk_put(imx2_wdt.clk);
|
||||||
|
|
||||||
|
imx2_wdt_miscdev.parent = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void imx2_wdt_shutdown(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
if (test_bit(IMX2_WDT_STATUS_STARTED, &imx2_wdt.status)) {
|
||||||
|
/* we are running, we need to delete the timer but will give
|
||||||
|
* max timeout before reboot will take place */
|
||||||
|
del_timer_sync(&imx2_wdt.timer);
|
||||||
|
imx2_wdt_set_timeout(IMX2_WDT_MAX_TIME);
|
||||||
|
imx2_wdt_ping();
|
||||||
|
|
||||||
|
dev_crit(imx2_wdt_miscdev.parent,
|
||||||
|
"Device shutdown: Expect reboot!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_driver imx2_wdt_driver = {
|
||||||
|
.probe = imx2_wdt_probe,
|
||||||
|
.remove = __exit_p(imx2_wdt_remove),
|
||||||
|
.shutdown = imx2_wdt_shutdown,
|
||||||
|
.driver = {
|
||||||
|
.name = DRIVER_NAME,
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init imx2_wdt_init(void)
|
||||||
|
{
|
||||||
|
return platform_driver_probe(&imx2_wdt_driver, imx2_wdt_probe);
|
||||||
|
}
|
||||||
|
module_init(imx2_wdt_init);
|
||||||
|
|
||||||
|
static void __exit imx2_wdt_exit(void)
|
||||||
|
{
|
||||||
|
platform_driver_unregister(&imx2_wdt_driver);
|
||||||
|
}
|
||||||
|
module_exit(imx2_wdt_exit);
|
||||||
|
|
||||||
|
MODULE_AUTHOR("Wolfram Sang");
|
||||||
|
MODULE_DESCRIPTION("Watchdog driver for IMX2 and later");
|
||||||
|
MODULE_LICENSE("GPL v2");
|
||||||
|
MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
|
||||||
|
MODULE_ALIAS("platform:" DRIVER_NAME);
|
@ -53,7 +53,7 @@ static int mpc8xxx_wdt_init_late(void);
|
|||||||
static u16 timeout = 0xffff;
|
static u16 timeout = 0xffff;
|
||||||
module_param(timeout, ushort, 0);
|
module_param(timeout, ushort, 0);
|
||||||
MODULE_PARM_DESC(timeout,
|
MODULE_PARM_DESC(timeout,
|
||||||
"Watchdog timeout in ticks. (0<timeout<65536, default=65535");
|
"Watchdog timeout in ticks. (0<timeout<65536, default=65535)");
|
||||||
|
|
||||||
static int reset = 1;
|
static int reset = 1;
|
||||||
module_param(reset, bool, 0);
|
module_param(reset, bool, 0);
|
||||||
|
@ -53,7 +53,9 @@
|
|||||||
#define WDTO 0x11 /* Watchdog timeout register */
|
#define WDTO 0x11 /* Watchdog timeout register */
|
||||||
#define WDCFG 0x12 /* Watchdog config register */
|
#define WDCFG 0x12 /* Watchdog config register */
|
||||||
|
|
||||||
static int io = 0x2E; /* Address used on Portwell Boards */
|
#define IO_DEFAULT 0x2E /* Address used on Portwell Boards */
|
||||||
|
|
||||||
|
static int io = IO_DEFAULT;
|
||||||
|
|
||||||
static int timeout = DEFAULT_TIMEOUT; /* timeout value */
|
static int timeout = DEFAULT_TIMEOUT; /* timeout value */
|
||||||
static unsigned long timer_enabled; /* is the timer enabled? */
|
static unsigned long timer_enabled; /* is the timer enabled? */
|
||||||
@ -583,12 +585,13 @@ MODULE_LICENSE("GPL");
|
|||||||
MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
|
MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
|
||||||
|
|
||||||
module_param(io, int, 0);
|
module_param(io, int, 0);
|
||||||
MODULE_PARM_DESC(io, MODNAME " I/O port (default: " __MODULE_STRING(io) ").");
|
MODULE_PARM_DESC(io, MODNAME " I/O port (default: "
|
||||||
|
__MODULE_STRING(IO_DEFAULT) ").");
|
||||||
|
|
||||||
module_param(timeout, int, 0);
|
module_param(timeout, int, 0);
|
||||||
MODULE_PARM_DESC(timeout,
|
MODULE_PARM_DESC(timeout,
|
||||||
"Watchdog timeout in minutes (default="
|
"Watchdog timeout in minutes (default="
|
||||||
__MODULE_STRING(timeout) ").");
|
__MODULE_STRING(DEFAULT_TIMEOUT) ").");
|
||||||
|
|
||||||
module_param(nowayout, int, 0);
|
module_param(nowayout, int, 0);
|
||||||
MODULE_PARM_DESC(nowayout,
|
MODULE_PARM_DESC(nowayout,
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
#define PFX "pnx833x: "
|
#define PFX "pnx833x: "
|
||||||
#define WATCHDOG_TIMEOUT 30 /* 30 sec Maximum timeout */
|
#define WATCHDOG_TIMEOUT 30 /* 30 sec Maximum timeout */
|
||||||
#define WATCHDOG_COUNT_FREQUENCY 68000000U /* Watchdog counts at 68MHZ. */
|
#define WATCHDOG_COUNT_FREQUENCY 68000000U /* Watchdog counts at 68MHZ. */
|
||||||
|
#define PNX_WATCHDOG_TIMEOUT (WATCHDOG_TIMEOUT * WATCHDOG_COUNT_FREQUENCY)
|
||||||
|
#define PNX_TIMEOUT_VALUE 2040000000U
|
||||||
|
|
||||||
/** CONFIG block */
|
/** CONFIG block */
|
||||||
#define PNX833X_CONFIG (0x07000U)
|
#define PNX833X_CONFIG (0x07000U)
|
||||||
@ -47,20 +49,21 @@
|
|||||||
static int pnx833x_wdt_alive;
|
static int pnx833x_wdt_alive;
|
||||||
|
|
||||||
/* Set default timeout in MHZ.*/
|
/* Set default timeout in MHZ.*/
|
||||||
static int pnx833x_wdt_timeout = (WATCHDOG_TIMEOUT * WATCHDOG_COUNT_FREQUENCY);
|
static int pnx833x_wdt_timeout = PNX_WATCHDOG_TIMEOUT;
|
||||||
module_param(pnx833x_wdt_timeout, int, 0);
|
module_param(pnx833x_wdt_timeout, int, 0);
|
||||||
MODULE_PARM_DESC(timeout, "Watchdog timeout in Mhz. (68Mhz clock), default="
|
MODULE_PARM_DESC(timeout, "Watchdog timeout in Mhz. (68Mhz clock), default="
|
||||||
__MODULE_STRING(pnx833x_wdt_timeout) "(30 seconds).");
|
__MODULE_STRING(PNX_TIMEOUT_VALUE) "(30 seconds).");
|
||||||
|
|
||||||
static int nowayout = WATCHDOG_NOWAYOUT;
|
static int nowayout = WATCHDOG_NOWAYOUT;
|
||||||
module_param(nowayout, int, 0);
|
module_param(nowayout, int, 0);
|
||||||
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
|
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
|
||||||
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
|
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
|
||||||
|
|
||||||
static int start_enabled = 1;
|
#define START_DEFAULT 1
|
||||||
|
static int start_enabled = START_DEFAULT;
|
||||||
module_param(start_enabled, int, 0);
|
module_param(start_enabled, int, 0);
|
||||||
MODULE_PARM_DESC(start_enabled, "Watchdog is started on module insertion "
|
MODULE_PARM_DESC(start_enabled, "Watchdog is started on module insertion "
|
||||||
"(default=" __MODULE_STRING(start_enabled) ")");
|
"(default=" __MODULE_STRING(START_DEFAULT) ")");
|
||||||
|
|
||||||
static void pnx833x_wdt_start(void)
|
static void pnx833x_wdt_start(void)
|
||||||
{
|
{
|
||||||
|
@ -63,7 +63,7 @@ module_param(nowayout, int, 0);
|
|||||||
module_param(soft_noboot, int, 0);
|
module_param(soft_noboot, int, 0);
|
||||||
module_param(debug, int, 0);
|
module_param(debug, int, 0);
|
||||||
|
|
||||||
MODULE_PARM_DESC(tmr_margin, "Watchdog tmr_margin in seconds. default="
|
MODULE_PARM_DESC(tmr_margin, "Watchdog tmr_margin in seconds. (default="
|
||||||
__MODULE_STRING(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME) ")");
|
__MODULE_STRING(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME) ")");
|
||||||
MODULE_PARM_DESC(tmr_atboot,
|
MODULE_PARM_DESC(tmr_atboot,
|
||||||
"Watchdog is started at boot time if set to 1, default="
|
"Watchdog is started at boot time if set to 1, default="
|
||||||
@ -71,8 +71,8 @@ MODULE_PARM_DESC(tmr_atboot,
|
|||||||
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
|
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
|
||||||
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
|
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
|
||||||
MODULE_PARM_DESC(soft_noboot, "Watchdog action, set to 1 to ignore reboots, "
|
MODULE_PARM_DESC(soft_noboot, "Watchdog action, set to 1 to ignore reboots, "
|
||||||
"0 to reboot (default depends on ONLY_TESTING)");
|
"0 to reboot (default 0)");
|
||||||
MODULE_PARM_DESC(debug, "Watchdog debug, set to >1 for debug, (default 0)");
|
MODULE_PARM_DESC(debug, "Watchdog debug, set to >1 for debug (default 0)");
|
||||||
|
|
||||||
static unsigned long open_lock;
|
static unsigned long open_lock;
|
||||||
static struct device *wdt_dev; /* platform device attached to */
|
static struct device *wdt_dev; /* platform device attached to */
|
||||||
@ -426,8 +426,7 @@ static int __devinit s3c2410wdt_probe(struct platform_device *pdev)
|
|||||||
wdt_mem = request_mem_region(res->start, size, pdev->name);
|
wdt_mem = request_mem_region(res->start, size, pdev->name);
|
||||||
if (wdt_mem == NULL) {
|
if (wdt_mem == NULL) {
|
||||||
dev_err(dev, "failed to get memory region\n");
|
dev_err(dev, "failed to get memory region\n");
|
||||||
ret = -ENOENT;
|
return -EBUSY;
|
||||||
goto err_req;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wdt_base = ioremap(res->start, size);
|
wdt_base = ioremap(res->start, size);
|
||||||
|
@ -496,7 +496,7 @@ MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
|
|||||||
module_param(clock_division_ratio, int, 0);
|
module_param(clock_division_ratio, int, 0);
|
||||||
MODULE_PARM_DESC(clock_division_ratio,
|
MODULE_PARM_DESC(clock_division_ratio,
|
||||||
"Clock division ratio. Valid ranges are from 0x5 (1.31ms) "
|
"Clock division ratio. Valid ranges are from 0x5 (1.31ms) "
|
||||||
"to 0x7 (5.25ms). (default=" __MODULE_STRING(clock_division_ratio) ")");
|
"to 0x7 (5.25ms). (default=" __MODULE_STRING(WTCSR_CKS_4096) ")");
|
||||||
|
|
||||||
module_param(heartbeat, int, 0);
|
module_param(heartbeat, int, 0);
|
||||||
MODULE_PARM_DESC(heartbeat,
|
MODULE_PARM_DESC(heartbeat,
|
||||||
|
@ -190,6 +190,8 @@ static int __devinit twl4030_wdt_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
twl4030_wdt_dev = pdev;
|
twl4030_wdt_dev = pdev;
|
||||||
|
|
||||||
|
twl4030_wdt_disable(wdt);
|
||||||
|
|
||||||
ret = misc_register(&wdt->miscdev);
|
ret = misc_register(&wdt->miscdev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(wdt->miscdev.parent,
|
dev_err(wdt->miscdev.parent,
|
||||||
|
@ -91,7 +91,7 @@ MODULE_PARM_DESC(tachometer,
|
|||||||
static int type = 500;
|
static int type = 500;
|
||||||
module_param(type, int, 0);
|
module_param(type, int, 0);
|
||||||
MODULE_PARM_DESC(type,
|
MODULE_PARM_DESC(type,
|
||||||
"WDT501-P Card type (500 or 501 , default=500)");
|
"WDT501-P Card type (500 or 501, default=500)");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Programming support
|
* Programming support
|
||||||
|
@ -63,7 +63,7 @@ static char expect_close;
|
|||||||
static DEFINE_SPINLOCK(spinlock);
|
static DEFINE_SPINLOCK(spinlock);
|
||||||
|
|
||||||
module_param(timeout, int, 0);
|
module_param(timeout, int, 0);
|
||||||
MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds (60..15300), default="
|
MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds (60..15300, default="
|
||||||
__MODULE_STRING(DEFAULT_TIMEOUT) ")");
|
__MODULE_STRING(DEFAULT_TIMEOUT) ")");
|
||||||
module_param(testmode, int, 0);
|
module_param(testmode, int, 0);
|
||||||
MODULE_PARM_DESC(testmode, "Watchdog testmode (1 = no reboot), default=0");
|
MODULE_PARM_DESC(testmode, "Watchdog testmode (1 = no reboot), default=0");
|
||||||
|
Loading…
Reference in New Issue
Block a user