board: freescale: p1_p2_rdb_pc: Add workaround for non-working watchdog
authorPali Rohár <pali@kernel.org>
Mon, 1 Aug 2022 13:31:44 +0000 (15:31 +0200)
committerPeng Fan <peng.fan@nxp.com>
Tue, 6 Sep 2022 06:08:33 +0000 (14:08 +0800)
commit27b2bff6eb18dfb5ba58f68b79fdc57d72c6d2a3
treed577b2e3c3c98b5ac26902918adcb796b4c01d47
parent1f90be6f3445f72c526f7396f4f4a53bb7a097aa
board: freescale: p1_p2_rdb_pc: Add workaround for non-working watchdog

If watchdog timer was already set to non-disabled value then it means that
watchdog timer was already activated, has already expired and caused CPU
reset. If this happened then due to CPLD firmware bug, writing to wd_cfg
register has no effect and therefore it is not possible to reactivate
watchdog timer again. Watchdog starts working again after CPU reset via
non-watchdog method.

Implement this workaround (reset CPU when it was reset by watchdog) to make
watchdog usable again. Watchdog timer logic on these P1/P2 RDB boards is
connected to CPLD, not to SoC itself.

Note that reset does not occur immediately after calling do_reset(), but
after few ms later as real reset is done by CPLD. So it is normal that
function do_reset() returns. Therefore hangs after calling do_reset() to
prevent CPU execution of the rest U-Boot code.

Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c