From patchwork Fri Mar 6 13:27:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serge Semin X-Patchwork-Id: 215127 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DF63DC10DCE for ; Fri, 6 Mar 2020 13:38:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B77152072D for ; Fri, 6 Mar 2020 13:38:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726533AbgCFNiC (ORCPT ); Fri, 6 Mar 2020 08:38:02 -0500 Received: from mail.baikalelectronics.com ([87.245.175.226]:37294 "EHLO mail.baikalelectronics.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726090AbgCFNiC (ORCPT ); Fri, 6 Mar 2020 08:38:02 -0500 X-Greylist: delayed 602 seconds by postgrey-1.27 at vger.kernel.org; Fri, 06 Mar 2020 08:38:01 EST Received: from localhost (unknown [127.0.0.1]) by mail.baikalelectronics.ru (Postfix) with ESMTP id 703FC8030704; Fri, 6 Mar 2020 13:27:58 +0000 (UTC) X-Virus-Scanned: amavisd-new at baikalelectronics.ru Received: from mail.baikalelectronics.ru ([127.0.0.1]) by localhost (mail.baikalelectronics.ru [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id g_5CN1YJjStz; Fri, 6 Mar 2020 16:27:57 +0300 (MSK) From: CC: Serge Semin , Serge Semin , Alexey Malahov , Maxim Kaurkin , Pavel Parkhomenko , Ramil Zaripov , Ekaterina Skachko , Vadim Vlasov , Thomas Bogendoerfer , Paul Burton , Ralf Baechle , Wim Van Sebroeck , Guenter Roeck , Philipp Zabel , Rob Herring , Mark Rutland , , , Subject: [PATCH 0/7] watchdog: dw_wdt: Take Baikal-T1 DW WDT peculiarities into account Date: Fri, 6 Mar 2020 16:27:40 +0300 MIME-Version: 1.0 X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) Message-Id: <20200306132758.703FC8030704@mail.baikalelectronics.ru> To: unlisted-recipients:; (no To-header on input) Sender: linux-watchdog-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-watchdog@vger.kernel.org From: Serge Semin 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, made some cleanups in the watchdog core code (just replaced time-unit numerical literals with corresponding macro) and added DebugFS nodes to ease the driver debug procedure. This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: commit 98d54f81e36b ("Linux 5.6-rc4"). Signed-off-by: Serge Semin Signed-off-by: Alexey Malahov Cc: Maxim Kaurkin Cc: Pavel Parkhomenko Cc: Ramil Zaripov Cc: Ekaterina Skachko Cc: Vadim Vlasov Cc: Thomas Bogendoerfer Cc: Paul Burton Cc: Ralf Baechle Cc: Wim Van Sebroeck Cc: Guenter Roeck Cc: Philipp Zabel Cc: Rob Herring Cc: Mark Rutland Cc: linux-watchdog@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org Serge Semin (7): dt-bindings: watchdog: dw-wdt: Replace legacy bindings file with YAML-based one dt-bindings: watchdog: dw-wdt: Add watchdog TOPs array property watchdog: watchdog_dev: Use generic msec-per-sec macro 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 | 96 ++++ drivers/watchdog/dw_wdt.c | 460 ++++++++++++++++-- drivers/watchdog/watchdog_dev.c | 4 +- 4 files changed, 523 insertions(+), 61 deletions(-) delete mode 100644 Documentation/devicetree/bindings/watchdog/dw_wdt.txt create mode 100644 Documentation/devicetree/bindings/watchdog/snps,dw-wdt.yaml