From patchwork Mon Nov 18 22:04:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laura Abbott X-Patchwork-Id: 11250367 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3B65614C0 for ; Mon, 18 Nov 2019 22:04:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F04C422309 for ; Mon, 18 Nov 2019 22:04:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Dak+2mg4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726272AbfKRWEq (ORCPT ); Mon, 18 Nov 2019 17:04:46 -0500 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:57711 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726647AbfKRWEn (ORCPT ); Mon, 18 Nov 2019 17:04:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1574114681; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8VeWVkmCSulVhV1qmByhbdssiRm0kRpI2tILvMyefww=; b=Dak+2mg4MizghJ4weYwL8z8fQx+MFi8yyYHd+Nvyt2F2ayhfStL7WM9eYy0dGBglxyoaEw Bmb/B7ytbhEMa920wchWkjWnzeSlb5DeYr9Jcw91vOkZKkBMOeKZmQbMpwtjWc/+PolZx5 k1jh9H3ZiD2sgp+PUL33BV+sxBRHSuY= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-276-UWvQfcYOM2K_6BunviTasg-1; Mon, 18 Nov 2019 17:04:38 -0500 Received: by mail-qk1-f199.google.com with SMTP id q14so4692889qkq.13 for ; Mon, 18 Nov 2019 14:04:38 -0800 (PST) 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:mime-version :content-transfer-encoding; bh=z42ZjyEIpk4q751ixdMJNzXEB6jCwh7siqWC0h0FGgA=; b=GpPSlVsOs95fNzLuNqg2PUQ+TU80w1hFY+HV/ySSvLCTGSfYEUwZv0LRBxO5K1Myiy SgdwG2cAsrvlKWcKY/pjm7jYjzrk7xW+fmllSPKt8tLaDTGA04UGcYwl3aDC7Dy2mnNa 38GG1FcpvqL/3SxMmbSah0MwuqyE65kKITsea7rVXVy2LhErdXDq/xNLuPOFPfiRu4Ge XL5vl7TlhJkXHIUV7DARz2uyDCEJ5oJA7vd7ku2uUWGcy6XWMcoO5H4H2HNpPiW7slvr pSxLn0Mq2p0qhiv8Y/OkOjja4cyr6nLI2Qr6wqyA036Xso9KZWCiMRYEy+i1mIAUf6sn Lplg== X-Gm-Message-State: APjAAAX5RIlNUqmjLTYpbfKCJxp/axjF38MwIriGCJtKHrAc8B7s4Jgk fSyXk/luu/NxTVeY1NQGYVSunmikQZ4JXKVqSWIlPwDrF70Ri9+dHzBZLvQ7Kbg+YyM9zUiSMMC Mk/se0rHAv2KRsFW39BoluXjrwuY= X-Received: by 2002:a05:620a:101a:: with SMTP id z26mr25703938qkj.344.1574114677892; Mon, 18 Nov 2019 14:04:37 -0800 (PST) X-Google-Smtp-Source: APXvYqz+o/aY3cmRojkGspWCmuDTGdToedB9QFwTcSMURFKAt5Eo4wRhzmz1vyo1v5goX8rthwAO3g== X-Received: by 2002:a05:620a:101a:: with SMTP id z26mr25703916qkj.344.1574114677452; Mon, 18 Nov 2019 14:04:37 -0800 (PST) Received: from labbott-redhat.redhat.com (pool-96-235-39-235.pitbpa.fios.verizon.net. [96.235.39.235]) by smtp.gmail.com with ESMTPSA id g11sm9089482qkm.82.2019.11.18.14.04.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Nov 2019 14:04:36 -0800 (PST) From: Laura Abbott To: Wim Van Sebroeck , Guenter Roeck Cc: Laura Abbott , linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org, Arnd Bergmann Subject: [PATCH] watchdog: Remove iop_wdt Date: Mon, 18 Nov 2019 17:04:32 -0500 Message-Id: <20191118220432.1611-1-labbott@redhat.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 X-MC-Unique: UWvQfcYOM2K_6BunviTasg-1 X-Mimecast-Spam-Score: 0 Sender: linux-watchdog-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-watchdog@vger.kernel.org Commit 59d3ae9a5bf6 ("ARM: remove Intel iop33x and iop13xx support") removed support for some old platforms. Given this driver depends on a now removed platform, just remove the driver. Signed-off-by: Laura Abbott --- Found this while reviewing config options. Not sure if this was kept around for other reasons or just missed. --- drivers/watchdog/Kconfig | 16 --- drivers/watchdog/Makefile | 1 - drivers/watchdog/iop_wdt.c | 249 ------------------------------------- 3 files changed, 266 deletions(-) delete mode 100644 drivers/watchdog/iop_wdt.c diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 58e7c100b6ad..fef9078a44b6 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -554,22 +554,6 @@ config PNX4008_WATCHDOG Say N if you are unsure. -config IOP_WATCHDOG - tristate "IOP Watchdog" - depends on ARCH_IOP13XX - select WATCHDOG_NOWAYOUT if (ARCH_IOP32X || ARCH_IOP33X) - help - Say Y here if to include support for the watchdog timer - in the Intel IOP3XX & IOP13XX I/O Processors. This driver can - be built as a module by choosing M. The module will - be called iop_wdt. - - Note: The IOP13XX watchdog does an Internal Bus Reset which will - affect both cores and the peripherals of the IOP. The ATU-X - and/or ATUe configuration registers will remain intact, but if - operating as an Root Complex and/or Central Resource, the PCI-X - and/or PCIe busses will also be reset. THIS IS A VERY BIG HAMMER. - config DAVINCI_WATCHDOG tristate "DaVinci watchdog" depends on ARCH_DAVINCI || ARCH_KEYSTONE || COMPILE_TEST diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index 2ee352bf3372..9de21f5ce909 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ -55,7 +55,6 @@ obj-$(CONFIG_SAMA5D4_WATCHDOG) += sama5d4_wdt.o obj-$(CONFIG_DW_WATCHDOG) += dw_wdt.o obj-$(CONFIG_EP93XX_WATCHDOG) += ep93xx_wdt.o obj-$(CONFIG_PNX4008_WATCHDOG) += pnx4008_wdt.o -obj-$(CONFIG_IOP_WATCHDOG) += iop_wdt.o obj-$(CONFIG_DAVINCI_WATCHDOG) += davinci_wdt.o obj-$(CONFIG_ORION_WATCHDOG) += orion_wdt.o obj-$(CONFIG_SUNXI_WATCHDOG) += sunxi_wdt.o diff --git a/drivers/watchdog/iop_wdt.c b/drivers/watchdog/iop_wdt.c deleted file mode 100644 index a9ccdb9a9159..000000000000 --- a/drivers/watchdog/iop_wdt.c +++ /dev/null @@ -1,249 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * drivers/char/watchdog/iop_wdt.c - * - * WDT driver for Intel I/O Processors - * Copyright (C) 2005, Intel Corporation. - * - * Based on ixp4xx driver, Copyright 2004 (c) MontaVista, Software, Inc. - * - * Curt E Bruns - * Peter Milne - * Dan Williams - */ - -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static bool nowayout = WATCHDOG_NOWAYOUT; -static unsigned long wdt_status; -static unsigned long boot_status; -static DEFINE_SPINLOCK(wdt_lock); - -#define WDT_IN_USE 0 -#define WDT_OK_TO_CLOSE 1 -#define WDT_ENABLED 2 - -static unsigned long iop_watchdog_timeout(void) -{ - return (0xffffffffUL / get_iop_tick_rate()); -} - -/** - * wdt_supports_disable - determine if we are accessing a iop13xx watchdog - * or iop3xx by whether it has a disable command - */ -static int wdt_supports_disable(void) -{ - int can_disable; - - if (IOP_WDTCR_EN_ARM != IOP_WDTCR_DIS_ARM) - can_disable = 1; - else - can_disable = 0; - - return can_disable; -} - -static void wdt_enable(void) -{ - /* Arm and enable the Timer to starting counting down from 0xFFFF.FFFF - * Takes approx. 10.7s to timeout - */ - spin_lock(&wdt_lock); - write_wdtcr(IOP_WDTCR_EN_ARM); - write_wdtcr(IOP_WDTCR_EN); - spin_unlock(&wdt_lock); -} - -/* returns 0 if the timer was successfully disabled */ -static int wdt_disable(void) -{ - /* Stop Counting */ - if (wdt_supports_disable()) { - spin_lock(&wdt_lock); - write_wdtcr(IOP_WDTCR_DIS_ARM); - write_wdtcr(IOP_WDTCR_DIS); - clear_bit(WDT_ENABLED, &wdt_status); - spin_unlock(&wdt_lock); - pr_info("Disabled\n"); - return 0; - } else - return 1; -} - -static int iop_wdt_open(struct inode *inode, struct file *file) -{ - if (test_and_set_bit(WDT_IN_USE, &wdt_status)) - return -EBUSY; - - clear_bit(WDT_OK_TO_CLOSE, &wdt_status); - wdt_enable(); - set_bit(WDT_ENABLED, &wdt_status); - return stream_open(inode, file); -} - -static ssize_t iop_wdt_write(struct file *file, const char *data, size_t len, - loff_t *ppos) -{ - if (len) { - if (!nowayout) { - size_t i; - - clear_bit(WDT_OK_TO_CLOSE, &wdt_status); - - for (i = 0; i != len; i++) { - char c; - - if (get_user(c, data + i)) - return -EFAULT; - if (c == 'V') - set_bit(WDT_OK_TO_CLOSE, &wdt_status); - } - } - wdt_enable(); - } - return len; -} - -static const struct watchdog_info ident = { - .options = WDIOF_CARDRESET | WDIOF_MAGICCLOSE | WDIOF_KEEPALIVEPING, - .identity = "iop watchdog", -}; - -static long iop_wdt_ioctl(struct file *file, - unsigned int cmd, unsigned long arg) -{ - int options; - int ret = -ENOTTY; - int __user *argp = (int __user *)arg; - - switch (cmd) { - case WDIOC_GETSUPPORT: - if (copy_to_user(argp, &ident, sizeof(ident))) - ret = -EFAULT; - else - ret = 0; - break; - - case WDIOC_GETSTATUS: - ret = put_user(0, argp); - break; - - case WDIOC_GETBOOTSTATUS: - ret = put_user(boot_status, argp); - break; - - case WDIOC_SETOPTIONS: - if (get_user(options, (int *)arg)) - return -EFAULT; - - if (options & WDIOS_DISABLECARD) { - if (!nowayout) { - if (wdt_disable() == 0) { - set_bit(WDT_OK_TO_CLOSE, &wdt_status); - ret = 0; - } else - ret = -ENXIO; - } else - ret = 0; - } - if (options & WDIOS_ENABLECARD) { - wdt_enable(); - ret = 0; - } - break; - - case WDIOC_KEEPALIVE: - wdt_enable(); - ret = 0; - break; - - case WDIOC_GETTIMEOUT: - ret = put_user(iop_watchdog_timeout(), argp); - break; - } - return ret; -} - -static int iop_wdt_release(struct inode *inode, struct file *file) -{ - int state = 1; - if (test_bit(WDT_OK_TO_CLOSE, &wdt_status)) - if (test_bit(WDT_ENABLED, &wdt_status)) - state = wdt_disable(); - - /* if the timer is not disabled reload and notify that we are still - * going down - */ - if (state != 0) { - wdt_enable(); - pr_crit("Device closed unexpectedly - reset in %lu seconds\n", - iop_watchdog_timeout()); - } - - clear_bit(WDT_IN_USE, &wdt_status); - clear_bit(WDT_OK_TO_CLOSE, &wdt_status); - - return 0; -} - -static const struct file_operations iop_wdt_fops = { - .owner = THIS_MODULE, - .llseek = no_llseek, - .write = iop_wdt_write, - .unlocked_ioctl = iop_wdt_ioctl, - .open = iop_wdt_open, - .release = iop_wdt_release, -}; - -static struct miscdevice iop_wdt_miscdev = { - .minor = WATCHDOG_MINOR, - .name = "watchdog", - .fops = &iop_wdt_fops, -}; - -static int __init iop_wdt_init(void) -{ - int ret; - - /* check if the reset was caused by the watchdog timer */ - boot_status = (read_rcsr() & IOP_RCSR_WDT) ? WDIOF_CARDRESET : 0; - - /* Configure Watchdog Timeout to cause an Internal Bus (IB) Reset - * NOTE: An IB Reset will Reset both cores in the IOP342 - */ - write_wdtsr(IOP13XX_WDTCR_IB_RESET); - - /* Register after we have the device set up so we cannot race - with an open */ - ret = misc_register(&iop_wdt_miscdev); - if (ret == 0) - pr_info("timeout %lu sec\n", iop_watchdog_timeout()); - - return ret; -} - -static void __exit iop_wdt_exit(void) -{ - misc_deregister(&iop_wdt_miscdev); -} - -module_init(iop_wdt_init); -module_exit(iop_wdt_exit); - -module_param(nowayout, bool, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started"); - -MODULE_AUTHOR("Curt E Bruns "); -MODULE_DESCRIPTION("iop watchdog timer driver"); -MODULE_LICENSE("GPL");