• Paul Walmsley's avatar
    OMAP2+: wd_timer: disable on boot via hwmod postsetup mechanism · ff2516fb
    Paul Walmsley authored
    The OMAP watchdog timer IP blocks require a specific set of register
    writes to occur before they will be disabled[1], even if the device
    clocks appear to be disabled in the CM_*CLKEN registers.  In the MPU
    watchdog case, failure to execute this reset sequence will eventually
    cause the watchdog to reset the OMAP unexpectedly.
    Previously, the code to disable this watchdog was manually called from
    mach-omap2/devices.c during device initialization.  This causes the
    watchdog to be unconditionally disabled for a portion of kernel
    initialization.  This should be controllable by the board-*.c files,
    since some system integrators will want full watchdog coverage of
    kernel initialization.  Also, the watchdog disable code was not
    connected to the hwmod shutdown code.  This means that calling
    omap_hwmod_shutdown() will not, in fact, disable the watchdog, and the
    goal of omap_hwmod_shutdown() is to be able to shutdown any on-chip
    OMAP device.
    To resolve the latter problem, populate the pre_shutdown pointer in
    the watchdog timer hwmod classes with a function that executes the
    watchdog shutdown sequence.  This allows the hwmod code to fully
    disable the watchdog.
    Then, to allow some board files to support watchdog coverage
    throughout kernel initialization, add common code to mach-omap2/io.c
    to cause the MPU watchdog to be disabled on boot unless a board file
    specifically requests it to remain enabled.  Board files can do this
    by changing the watchdog timer hwmod's postsetup state between the
    omap2_init_common_infrastructure() and omap2_init_common_devices()
    function calls.
    1. OMAP34xx Multimedia Device Silicon Revision 3.1.x Rev. ZH
       [SWPU222H], Section, "Start/Stop Sequence for WDTs (Using
       WDTi.WSPR Register)"
    Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
    Cc: Benoît Cousson <b-cousson@ti.com>
    Cc: Kevin Hilman <khilman@deeprootsystems.com>
    Cc: Charulatha Varadarajan <charu@ti.com>