From patchwork Sat Aug 12 18:43:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 109938 Delivered-To: patch@linaro.org Received: by 10.140.95.78 with SMTP id h72csp2442480qge; Sat, 12 Aug 2017 11:43:49 -0700 (PDT) X-Received: by 10.84.231.199 with SMTP id g7mr22327616pln.258.1502563429802; Sat, 12 Aug 2017 11:43:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1502563429; cv=none; d=google.com; s=arc-20160816; b=rFvvpGTJquqDCgS21ySU8LUHdSw9K954eLaL6GUCFttRJ/YkQRcjqmzcGuIlnHMWFU KvWtm3BbAx9ppX+p6CX0/ZvV2MYOK8HiaFzLPvFIgn3y/Gm7vGzUpJoRfuNXqVm3camb oKkEyQvFnG4reeVOhfnjg+d36WYnelKK3WvZVZJTTjOrfLn1e4oSv5Dyyfhi6x15HcJ2 dgx0+KAtg8CI6lyvfwsL6PmJf12ZAyMdMk9KRRwHp/8mUSFdERGbn9sl7KHBqYIZxXky 84G5nrqJydBPVsk+v4ioacL7+x5SElppAJcixKut/VzOKemwH1kcKD4BzIFKpavrlYMJ sMdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=7skynVJBpWAgKnoU2hdj8RM8BZo7WJhmWHMvxGqzu0A=; b=jlDlvAPOGHL4BFxRQC7HcXIFHH9yTcsISMBzFbZt+Ean+1RjnvONophcAMe++rIG6g QfE/UL9YcFhHw4tmXX/XdIwSw/s2OBm75frBHNf4PQiiJh6kFsH6KaS799cWTB4mLPiF UZCYVaDiabGgfxMi4s5k3K7gGDyjlWoEYuUDrYe7J2abu7TfLE0iX+UxPw6qNxomWDsw tA2hoB4tvl8QCosUHfImTPwSk3FVGSE/cswXQqtulNPQLI8xgTeHi71+/U3hUfjRj38P ZJw6vXCDRJpWyoYtXPAvlPR6Q457zfdbG29YpYSSlJ3NJAC0pWE50Wj21kmuvUXyVHia aRmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=ZHm0IzPZ; spf=pass (google.com: best guess record for domain of linux-watchdog-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-watchdog-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p24si2288117pli.501.2017.08.12.11.43.49 for ; Sat, 12 Aug 2017 11:43:49 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-watchdog-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=ZHm0IzPZ; spf=pass (google.com: best guess record for domain of linux-watchdog-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-watchdog-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751549AbdHLSnt (ORCPT ); Sat, 12 Aug 2017 14:43:49 -0400 Received: from mail-lf0-f49.google.com ([209.85.215.49]:34605 "EHLO mail-lf0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750995AbdHLSns (ORCPT ); Sat, 12 Aug 2017 14:43:48 -0400 Received: by mail-lf0-f49.google.com with SMTP id g25so26978782lfh.1 for ; Sat, 12 Aug 2017 11:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+jmL78IBUW2o9Ci/qkluReUl1xDkPejsMXedEFrEcYI=; b=ZHm0IzPZbcLvpfGRSIzf9F2iHbPRlJlVFUpP0Lo8wmWZu8n0Ma1/CldlPzUjRsRsnB h+HmTxJ8B/gAu19bXT8JbpVL9hwwxTpSjxuuyGb7SQf2PIgeecGex+qjfGID/+eUABx5 ZtruImzYsacsdOsRaSHtFl9ad3mq1xlC+9aOc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+jmL78IBUW2o9Ci/qkluReUl1xDkPejsMXedEFrEcYI=; b=LxUnD+jyndUxdJ6Ag1u3r1sHiehTuALxZ6sxM7rbadQGDos3FILfHZZBOOPdiFBLSk 4O6snA4s/2svYt25jDf6gfAddXH7FbkWvm5obPGpuFvXNU1ffe6AxbzCOlCiP/SYfTsE TKEcDXbgpbbfpMcX1/pl9/b7/7EtnoaWIbP0DjJB9uazTuuA8Vjnrkrzx7vKEBvcm5VU a4fy+VIwqZJ+B/3mwBWett7QGC6X4KB2LTfntlmbCa+/uxl9b3WD4IIq/sAuTNz/kujd 0hnTtEHw8ZE+yO/G/LOjcel8p0dBTKfracwfvgOyeUtn6jdX2yCElG1cnyO+VGxSZeLG zsQQ== X-Gm-Message-State: AHYfb5jaAHzA6JB45GD6h/yHApaDlya3uowh7IVBpsctPlg36bOR+cef TRezQgQsUhkNKnmS X-Received: by 10.25.196.23 with SMTP id u23mr7033090lff.238.1502563427218; Sat, 12 Aug 2017 11:43:47 -0700 (PDT) Received: from fabina.bredbandsbolaget.se (c-277e71d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.126.39]) by smtp.gmail.com with ESMTPSA id d64sm696628lfg.22.2017.08.12.11.43.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 12 Aug 2017 11:43:46 -0700 (PDT) From: Linus Walleij To: Wim Van Sebroeck , Guenter Roeck , Jonas Jensen , Andrew Jeffery , Joel Stanley Cc: linux-arm-kernel@lists.infradead.org, linux-watchdog@vger.kernel.org, Linus Walleij Subject: [PATCH 08/11] watchdog: ftwdt010/moxart: Merge MOXA ART into FTWDT010 Date: Sat, 12 Aug 2017 20:43:15 +0200 Message-Id: <20170812184318.10144-9-linus.walleij@linaro.org> X-Mailer: git-send-email 2.13.4 In-Reply-To: <20170812184318.10144-1-linus.walleij@linaro.org> References: <20170812184318.10144-1-linus.walleij@linaro.org> Sender: linux-watchdog-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-watchdog@vger.kernel.org These two drivers is for the same hardware, the only difference is that Gemini uses the EXTCLK @5MHz by default (it also works fine using PCLK) while the MOXA ART is using the PCLK to clock the watchdog. Delete the old MOXA ART driver and augment the FTWDT010 to probe on this platform too, fetching the operating frequency from the PCLK. Select the driver by default for ARCH_MOXART to make a smooth transition of the platform. Signed-off-by: Linus Walleij --- drivers/watchdog/Kconfig | 11 +-- drivers/watchdog/Makefile | 1 - drivers/watchdog/ftwdt010_wdt.c | 1 + drivers/watchdog/moxart_wdt.c | 178 ---------------------------------------- 4 files changed, 2 insertions(+), 189 deletions(-) delete mode 100644 drivers/watchdog/moxart_wdt.c -- 2.13.4 -- To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index fd44a542036a..beef6bb5c6d9 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -326,6 +326,7 @@ config FTWDT010_WATCHDOG depends on ARM || COMPILE_TEST select WATCHDOG_CORE default ARCH_GEMINI + default ARCH_MOXART help Say Y here if to include support for the Faraday Technology FTWDT010 watchdog timer embedded in the Cortina Systems Gemini @@ -609,16 +610,6 @@ config RETU_WATCHDOG To compile this driver as a module, choose M here: the module will be called retu_wdt. -config MOXART_WDT - tristate "MOXART watchdog" - depends on ARCH_MOXART || COMPILE_TEST - help - Say Y here to include Watchdog timer support for the watchdog - existing on the MOXA ART SoC series platforms. - - To compile this driver as a module, choose M here: the - module will be called moxart_wdt. - config SIRFSOC_WATCHDOG tristate "SiRFSOC watchdog" depends on ARCH_SIRF || COMPILE_TEST diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index df91d7db821c..fcab71f0a1c7 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ -68,7 +68,6 @@ obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o obj-$(CONFIG_UX500_WATCHDOG) += ux500_wdt.o obj-$(CONFIG_RETU_WATCHDOG) += retu_wdt.o obj-$(CONFIG_BCM2835_WDT) += bcm2835_wdt.o -obj-$(CONFIG_MOXART_WDT) += moxart_wdt.o obj-$(CONFIG_SIRFSOC_WATCHDOG) += sirfsoc_wdt.o obj-$(CONFIG_ST_LPC_WATCHDOG) += st_lpc_wdt.o obj-$(CONFIG_QCOM_WDT) += qcom-wdt.o diff --git a/drivers/watchdog/ftwdt010_wdt.c b/drivers/watchdog/ftwdt010_wdt.c index 7fc865eea28d..912b55e67110 100644 --- a/drivers/watchdog/ftwdt010_wdt.c +++ b/drivers/watchdog/ftwdt010_wdt.c @@ -298,6 +298,7 @@ static const struct dev_pm_ops ftwdt010_wdt_dev_pm_ops = { static const struct of_device_id ftwdt010_wdt_match[] = { { .compatible = "faraday,ftwdt010" }, { .compatible = "cortina,gemini-watchdog" }, + { .compatible = "moxa,moxart-watchdog" }, {}, }; MODULE_DEVICE_TABLE(of, ftwdt010_wdt_match); diff --git a/drivers/watchdog/moxart_wdt.c b/drivers/watchdog/moxart_wdt.c deleted file mode 100644 index 2c4a73d1e214..000000000000 --- a/drivers/watchdog/moxart_wdt.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * MOXA ART SoCs watchdog driver. - * - * Copyright (C) 2013 Jonas Jensen - * - * Jonas Jensen - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define REG_COUNT 0x4 -#define REG_MODE 0x8 -#define REG_ENABLE 0xC - -struct moxart_wdt_dev { - struct watchdog_device dev; - void __iomem *base; - unsigned int clock_frequency; -}; - -static int heartbeat; - -static int moxart_wdt_restart(struct watchdog_device *wdt_dev, - unsigned long action, void *data) -{ - struct moxart_wdt_dev *moxart_wdt = watchdog_get_drvdata(wdt_dev); - - writel(1, moxart_wdt->base + REG_COUNT); - writel(0x5ab9, moxart_wdt->base + REG_MODE); - writel(0x03, moxart_wdt->base + REG_ENABLE); - - return 0; -} - -static int moxart_wdt_stop(struct watchdog_device *wdt_dev) -{ - struct moxart_wdt_dev *moxart_wdt = watchdog_get_drvdata(wdt_dev); - - writel(0, moxart_wdt->base + REG_ENABLE); - - return 0; -} - -static int moxart_wdt_start(struct watchdog_device *wdt_dev) -{ - struct moxart_wdt_dev *moxart_wdt = watchdog_get_drvdata(wdt_dev); - - writel(moxart_wdt->clock_frequency * wdt_dev->timeout, - moxart_wdt->base + REG_COUNT); - writel(0x5ab9, moxart_wdt->base + REG_MODE); - writel(0x03, moxart_wdt->base + REG_ENABLE); - - return 0; -} - -static int moxart_wdt_set_timeout(struct watchdog_device *wdt_dev, - unsigned int timeout) -{ - wdt_dev->timeout = timeout; - - return 0; -} - -static const struct watchdog_info moxart_wdt_info = { - .identity = "moxart-wdt", - .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | - WDIOF_MAGICCLOSE, -}; - -static const struct watchdog_ops moxart_wdt_ops = { - .owner = THIS_MODULE, - .start = moxart_wdt_start, - .stop = moxart_wdt_stop, - .set_timeout = moxart_wdt_set_timeout, - .restart = moxart_wdt_restart, -}; - -static int moxart_wdt_probe(struct platform_device *pdev) -{ - struct moxart_wdt_dev *moxart_wdt; - struct device *dev = &pdev->dev; - struct device_node *node = dev->of_node; - struct resource *res; - struct clk *clk; - int err; - unsigned int max_timeout; - bool nowayout = WATCHDOG_NOWAYOUT; - - moxart_wdt = devm_kzalloc(dev, sizeof(*moxart_wdt), GFP_KERNEL); - if (!moxart_wdt) - return -ENOMEM; - - platform_set_drvdata(pdev, moxart_wdt); - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - moxart_wdt->base = devm_ioremap_resource(dev, res); - if (IS_ERR(moxart_wdt->base)) - return PTR_ERR(moxart_wdt->base); - - clk = of_clk_get(node, 0); - if (IS_ERR(clk)) { - pr_err("%s: of_clk_get failed\n", __func__); - return PTR_ERR(clk); - } - - moxart_wdt->clock_frequency = clk_get_rate(clk); - if (moxart_wdt->clock_frequency == 0) { - pr_err("%s: incorrect clock frequency\n", __func__); - return -EINVAL; - } - - max_timeout = UINT_MAX / moxart_wdt->clock_frequency; - - moxart_wdt->dev.info = &moxart_wdt_info; - moxart_wdt->dev.ops = &moxart_wdt_ops; - moxart_wdt->dev.timeout = max_timeout; - moxart_wdt->dev.min_timeout = 1; - moxart_wdt->dev.max_timeout = max_timeout; - moxart_wdt->dev.parent = dev; - - watchdog_init_timeout(&moxart_wdt->dev, heartbeat, dev); - watchdog_set_nowayout(&moxart_wdt->dev, nowayout); - watchdog_set_restart_priority(&moxart_wdt->dev, 128); - - watchdog_set_drvdata(&moxart_wdt->dev, moxart_wdt); - - err = watchdog_register_device(&moxart_wdt->dev); - if (err) - return err; - - dev_dbg(dev, "Watchdog enabled (heartbeat=%d sec, nowayout=%d)\n", - moxart_wdt->dev.timeout, nowayout); - - return 0; -} - -static int moxart_wdt_remove(struct platform_device *pdev) -{ - struct moxart_wdt_dev *moxart_wdt = platform_get_drvdata(pdev); - - moxart_wdt_stop(&moxart_wdt->dev); - - return 0; -} - -static const struct of_device_id moxart_watchdog_match[] = { - { .compatible = "moxa,moxart-watchdog" }, - { }, -}; -MODULE_DEVICE_TABLE(of, moxart_watchdog_match); - -static struct platform_driver moxart_wdt_driver = { - .probe = moxart_wdt_probe, - .remove = moxart_wdt_remove, - .driver = { - .name = "moxart-watchdog", - .of_match_table = moxart_watchdog_match, - }, -}; -module_platform_driver(moxart_wdt_driver); - -module_param(heartbeat, int, 0); -MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds"); - -MODULE_DESCRIPTION("MOXART watchdog driver"); -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Jonas Jensen ");