EDK2 code uses a single 64bit write to update SBSA watchdog compare registers, however an access to mmio registers should be 32bit for some SoCs. Current usage of MmioWrite64 resulted in an unpredicted behavior. Fix this by modifying WatchdogWriteCompareRegister routine to use two consecutive 32bit writes to Watchdog Compare Register Low and High.
Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Marcin Wojtas <[email protected]> --- ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c b/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c index 3180f01..b25d210 100644 --- a/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c +++ b/ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.c @@ -56,7 +56,11 @@ WatchdogWriteCompareRegister ( UINT64 Value ) { - MmioWrite64 (GENERIC_WDOG_COMPARE_VALUE_REG, Value); + MmioWrite32 (GENERIC_WDOG_COMPARE_VALUE_REG, Value & MAX_UINT32); + MmioWrite32 ( + GENERIC_WDOG_COMPARE_VALUE_REG + sizeof (UINT32), + (Value >> 32) & MAX_UINT32 + ); } VOID -- 2.7.4 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

