Merge window is upon us. Please review/merge in/whatever the rest of the patches. There were a few features enabled at the time of the Baikal-T1 SoC DW WDT IP synthesis, which weren't taken into account in the DW WDT driver available in the kernel. First of all the SoC engineers synthesized the watchdog core with WDT_USE_FIX_TOP set to false (don't really know why, but they did). Due to this the timer reset values weren't fixed as the driver expected but were initialized with a pre-defined values selected by the engineers. Secondly the driver expected that the watchdog APB bus and the timer had synchronous reference clocks, while Baikal-T1 SoC DW WDT was created with asynchronous ones. So the driver should enable two clock devices: APB bus clocks and a separate timer reference clock. Finally DW Watchdog Timer is capable of generating a pre-timeout interrupt if corresponding config is enabled. The problem was that the pre-timeout IRQ happens when the set timeout elapses, while the actual WDT expiration and subsequent reboot take place in the next timeout. This makes the pre-timeout functionality implementation a bit tricky, since in this case we would have to find a WDT timeout twice smaller the requested timeout. All of the changes described above are provided by the patches in this patchset. In addition traditionally we replaced the legacy plain text-based dt-binding file with yaml-based one and added the controller registers dump DebugFS node to ease the driver debug procedure. This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: base-commit: 0e698dfa2822 ("Linux 5.7-rc4") tag: v5.7-rc4 Changelog v2: - Rearrange SoBs. - Discard BE copyright header from the binding file. - Replace "additionalProperties: false" with "unevaluatedProperties: false" property in the binding. - Move the APB3 clocks support declared in the dt binding file into a dedicated patch. - Move $ref to the root level of the "snps,watchdog-tops" property so does the constraints. - Make Pre-timeout IRQs support being optional. - Add "ms" suffix to the methods returning msec and convert the methods with no "ms" suffix to return a timeout in sec. - Make sure minimum timeout is at least 1 sec. - Refactor the timeouts calculation procedure to to retain the timeouts in the ascending order. - Make sure there is no integer overflow in milliseconds calculation. It is saved in a dedicated uint field of the timeout structure. - Discard timeout/pretimeout/ping/enable DebugFS nodes. Registers state dump node is only left. Link: https://lore.kernel.org/linux-watchdog/20200510105807.880-1-Sergey.Semin@xxxxxxxxxxxxxxxxxxxx/ Changelog v3: - Add Rob's Reviewed-by tag to the DT-related patches. - Remove items from the "snps,watchdog-tops" property and move the minItems and maxItems constraints to the root level of it. Link: https://lore.kernel.org/linux-watchdog/20200526154123.24402-1-Sergey.Semin@xxxxxxxxxxxxxxxxxxxx Changelog v4: - Add Guenter's Reviewed-by tags. - IRQ > 0 is only valid in Linux so make sure we request IRQ only if valid number is returned from platform_get_irq_optional(). Signed-off-by: Serge Semin <Sergey.Semin@xxxxxxxxxxxxxxxxxxxx> Cc: Alexey Malahov <Alexey.Malahov@xxxxxxxxxxxxxxxxxxxx> Cc: Maxim Kaurkin <Maxim.Kaurkin@xxxxxxxxxxxxxxxxxxxx> Cc: Pavel Parkhomenko <Pavel.Parkhomenko@xxxxxxxxxxxxxxxxxxxx> Cc: Ramil Zaripov <Ramil.Zaripov@xxxxxxxxxxxxxxxxxxxx> Cc: Ekaterina Skachko <Ekaterina.Skachko@xxxxxxxxxxxxxxxxxxxx> Cc: Vadim Vlasov <V.Vlasov@xxxxxxxxxxxxxxxxxxxx> Cc: Alexey Kolotnikov <Alexey.Kolotnikov@xxxxxxxxxxxxxxxxxxxx> Cc: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx> Cc: Arnd Bergmann <arnd@xxxxxxxx> Cc: Rob Herring <robh+dt@xxxxxxxxxx> Cc: linux-mips@xxxxxxxxxxxxxxx Cc: linux-watchdog@xxxxxxxxxxxxxxx Cc: devicetree@xxxxxxxxxxxxxxx Cc: linux-kernel@xxxxxxxxxxxxxxx Serge Semin (7): dt-bindings: watchdog: Convert DW WDT binding to DT schema dt-bindings: watchdog: dw-wdt: Support devices with asynch clocks dt-bindings: watchdog: dw-wdt: Add watchdog TOPs array property watchdog: dw_wdt: Support devices with non-fixed TOP values watchdog: dw_wdt: Support devices with asynch clocks watchdog: dw_wdt: Add pre-timeouts support watchdog: dw_wdt: Add DebugFS files .../devicetree/bindings/watchdog/dw_wdt.txt | 24 - .../bindings/watchdog/snps,dw-wdt.yaml | 90 ++++ drivers/watchdog/dw_wdt.c | 437 ++++++++++++++++-- 3 files changed, 494 insertions(+), 57 deletions(-) delete mode 100644 Documentation/devicetree/bindings/watchdog/dw_wdt.txt create mode 100644 Documentation/devicetree/bindings/watchdog/snps,dw-wdt.yaml -- 2.26.2