From c52dde408ece636e4b44275713c5f252bb6a24eb Mon Sep 17 00:00:00 2001 From: domingo-nexthop Date: Thu, 22 Jan 2026 14:33:43 -0800 Subject: [PATCH 1/2] temporary workaround to arm watchdog power cycle countdown Signed-off-by: domingo-nexthop --- .../common/sonic_platform/watchdog.py | 6 ++++++ .../test/unit/sonic_platform/test_watchdog.py | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py b/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py index 10c03aede1a..e20fd8d26e7 100644 --- a/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py +++ b/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py @@ -126,6 +126,12 @@ def _do_real_arm(self, seconds: int) -> int: self._toggle_watchdog_counter_enable(True) self._toggle_watchdog_reboot(True) self._update_watchdog_countdown_value(milliseconds=seconds*1_000) + # TODO: workaround: arm watchdog 2 to trigger watchdog 1 + fpga_lib.write_32( + pci_address=self.fpga_pci_addr, + offset=0x1d8, + val=0x80000001, + ) except Exception as e: _logger.log_error(f"cannot arm watchdog: {e}") return -1 diff --git a/platform/broadcom/sonic-platform-modules-nexthop/test/unit/sonic_platform/test_watchdog.py b/platform/broadcom/sonic-platform-modules-nexthop/test/unit/sonic_platform/test_watchdog.py index 6d48e5e55e2..5a882cd441f 100644 --- a/platform/broadcom/sonic-platform-modules-nexthop/test/unit/sonic_platform/test_watchdog.py +++ b/platform/broadcom/sonic-platform-modules-nexthop/test/unit/sonic_platform/test_watchdog.py @@ -195,6 +195,7 @@ def test_arm_seconds_out_of_bound_error(self, seconds): def test_arm_should_update_counter( self, + watchdog_module, mock_update_watchdog_countdown_value, mock_toggle_watchdog_reboot, mock_toggle_watchdog_counter_enable, @@ -211,7 +212,9 @@ def test_arm_should_update_counter( ) # Act - actual_return_value = self.watchdog.arm(timeout_seconds) + # TODO: workaround: arm watchdog 2 to trigger watchdog 1 + with patch.object(watchdog_module.fpga_lib, "write_32", autospec=True): + actual_return_value = self.watchdog.arm(timeout_seconds) # Assert assert ( From cb8156a0b3b8603a1700e73f6e4b1b7db6efef5c Mon Sep 17 00:00:00 2001 From: domingo-nexthop Date: Sat, 2 May 2026 12:30:00 -0700 Subject: [PATCH 2/2] arm watchdog with 300 seconds instead of 360 Signed-off-by: domingo-nexthop --- .../common/sonic_platform/watchdog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py b/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py index e20fd8d26e7..4507278fa6a 100644 --- a/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py +++ b/platform/broadcom/sonic-platform-modules-nexthop/common/sonic_platform/watchdog.py @@ -15,7 +15,7 @@ # Watchdog punching is paused if file is present _WATCHDOG_PAUSE_FILE_PATH = Path("/var/lock/pddf-locks/watchdog.pause") # How long the watchdog is armed for by the watchdog.timer -_WATCHDOG_PUNCH_DAEMON_ARM_SECONDS = 360 +_WATCHDOG_PUNCH_DAEMON_ARM_SECONDS = 300 def _pause_watchdog_punching(duration: datetime.timedelta) -> None: