diff --git a/doc/smart-switch/pmon/smartswitch-pmon.md b/doc/smart-switch/pmon/smartswitch-pmon.md index b26e5d021be..b9bbbb29d3d 100644 --- a/doc/smart-switch/pmon/smartswitch-pmon.md +++ b/doc/smart-switch/pmon/smartswitch-pmon.md @@ -8,6 +8,7 @@ | 0.4 | 06/06/2024 | Ramesh Raghupathy | Added schema for DPU health-info and called out phase:1 and phase:2 activities for DPU health-info. Added key suffix to module reboot-cause to avoid key conflicts | | 0.5 | 04/30/2025 | Gagan Punathil Ellath | Added Post Startup and Pre shutdown sections for DPU | | 0.6 | 06/12/2025 | Gagan Punathil Ellath | DPU State Management Implementation | +| 0.7 | 06/11/2026 | Charles Tsai | Updated DPU reboot-cause and midplane-down reason | ## Definitions / Abbreviations @@ -614,9 +615,10 @@ The smartswitch needs to know the reboot cause for the NPU and the DPUs. ``` #### DPU Reboot Cause * The smartswitch needs to know the reboot cause for all the DPUs. -* The NPU hardware should be capable of providing the DPU reboot-cause even when the DPUs are dead. +* The reboot-cause can be captured by the platforms at the appropriate time. The reboot-cause should be reported only when the midplane of DPU transitions to online by calling the `get_reboot_cause` API. +* Each DPU SONiC publishes a `boot_id` (a fresh UUID generated per boot from `/proc/sys/kernel/random/boot_id`) into its `DPU_STATE` entry in CHASSIS_STATE_DB. The NPU chassisd compares the reported `boot_id` against the last `boot_id` it persisted; when they differ, the NPU chassisd calls `get_reboot_cause()`, writes a history record containing the cause and the `boot_id`, and then refreshes the `REBOOT_CAUSE` entries in CHASSIS_STATE_DB from those records. A changed `boot_id` can only become visible on the NPU once the DPU is reachable and able to write into the NPU's CHASSIS_STATE_DB, so the reported reboot-cause is naturally aligned with the midplane coming online. * The get_reboot_cause will return the current reboot-cause of the module. -* For persistent storage of the DPU reboot-cause and reboot-cause-history files use the existing mechanism and host storage path under "/host/reboot-cause/module/dpux". +* Persistent DPU reboot-cause records are stored under `/host/reboot-cause/module/dpux/history/`, and each record includes the `boot_id`. The `previous-reboot-cause.json` symlink identifies the latest record and provides the persisted `boot_id` baseline. Unlike the NPU workflow, DPU capture does not use `module/dpux/reboot-cause.txt`. * The storage and retrieval of the reboot-cause of the Switch and PDUs are shown in the sequence diagram

@@ -625,12 +627,9 @@ The smartswitch needs to know the reboot cause for the NPU and the DPUs. * The switch boots up. Determines the NPU reboot cause. * Processes the previously stored NPU and DPU reboot-cause files and history files. * A maximum of ten reboot-cause history entries per dpu will be persisted just like the npu. -* Updates the NPU reboot-cause into the StateDB and the DPU reboot-cause into the ChassisStateDB. +* The reboot-cause service (`process-reboot-cause`) updates the NPU reboot-cause in StateDB and rebuilds the DPU `REBOOT_CAUSE|DPUx|