From: Guenter Roeck <linux@roeck-us.net>
To: Aaron Wu <aaron.wu@analog.com>
Cc: arnd@arndb.de, f.fainelli@gmail.com, linux-arch@vger.kernel.org,
kernel@vger.kernel.org, linux-hexagon@vger.kernel.org,
liqin.linux@gmail.com, lennox.wu@gmail.com, gxt@mprc.pku.edu.cn,
viro@zeniv.linux.org.uk, jhogan@kernel.org,
linux-metag@vger.kernel.org, jonas@southpole.se,
stefan.kristiansson@saunalahti.fi, shorne@gmail.com,
openrisc@lists.librecores.org, dhowells@redhat.com,
peterz@infradead.org
Subject: Re: [Blackfin removal] [PATCH 07/28] watchdog: Remove Blackfin watchdog support
Date: Thu, 15 Mar 2018 07:43:26 -0700 [thread overview]
Message-ID: <20180315144326.GA14166@roeck-us.net> (raw)
In-Reply-To: <1521111028-19856-7-git-send-email-aaron.wu@analog.com>
On Thu, Mar 15, 2018 at 06:50:07PM +0800, Aaron Wu wrote:
> Signed-off-by: Aaron Wu <aaron.wu@analog.com>
>
> Remove Blackfin watchdog support
Signed-off statement comes last.
Anyway, wasn't this already submitted by Arnd ?
Guenter
> ---
> drivers/watchdog/Kconfig | 13 --
> drivers/watchdog/Makefile | 3 -
> drivers/watchdog/bfin_wdt.c | 476 --------------------------------------------
> 3 files changed, 492 deletions(-)
> delete mode 100644 drivers/watchdog/bfin_wdt.c
>
> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> index 37460cd..6174e99 100644
> --- a/drivers/watchdog/Kconfig
> +++ b/drivers/watchdog/Kconfig
> @@ -815,19 +815,6 @@ config SPRD_WATCHDOG
> Say Y here to include watchdog timer supported
> by Spreadtrum system.
>
> -# BLACKFIN Architecture
> -
> -config BFIN_WDT
> - tristate "Blackfin On-Chip Watchdog Timer"
> - depends on BLACKFIN
> - ---help---
> - If you say yes here you will get support for the Blackfin On-Chip
> - Watchdog Timer. If you have one of these processors and wish to
> - have watchdog support enabled, say Y, otherwise say N.
> -
> - To compile this driver as a module, choose M here: the
> - module will be called bfin_wdt.
> -
> # CRIS Architecture
>
> # FRV Architecture
> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
> index 0474d38..1971f86 100644
> --- a/drivers/watchdog/Makefile
> +++ b/drivers/watchdog/Makefile
> @@ -91,9 +91,6 @@ obj-$(CONFIG_UNIPHIER_WATCHDOG) += uniphier_wdt.o
> obj-$(CONFIG_RTD119X_WATCHDOG) += rtd119x_wdt.o
> obj-$(CONFIG_SPRD_WATCHDOG) += sprd_wdt.o
>
> -# BLACKFIN Architecture
> -obj-$(CONFIG_BFIN_WDT) += bfin_wdt.o
> -
> # CRIS Architecture
>
> # FRV Architecture
> diff --git a/drivers/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c
> deleted file mode 100644
> index aa4d2e8..0000000
> --- a/drivers/watchdog/bfin_wdt.c
> +++ /dev/null
> @@ -1,476 +0,0 @@
> -/*
> - * Blackfin On-Chip Watchdog Driver
> - *
> - * Originally based on softdog.c
> - * Copyright 2006-2010 Analog Devices Inc.
> - * Copyright 2006-2007 Michele d'Amico
> - * Copyright 1996 Alan Cox <alan@lxorguk.ukuu.org.uk>
> - *
> - * Enter bugs at http://blackfin.uclinux.org/
> - *
> - * Licensed under the GPL-2 or later.
> - */
> -
> -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> -
> -#include <linux/platform_device.h>
> -#include <linux/module.h>
> -#include <linux/moduleparam.h>
> -#include <linux/types.h>
> -#include <linux/timer.h>
> -#include <linux/miscdevice.h>
> -#include <linux/watchdog.h>
> -#include <linux/fs.h>
> -#include <linux/init.h>
> -#include <linux/interrupt.h>
> -#include <linux/uaccess.h>
> -#include <asm/blackfin.h>
> -#include <asm/bfin_watchdog.h>
> -
> -#define stamp(fmt, args...) \
> - pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args)
> -#define stampit() stamp("here i am")
> -
> -#define WATCHDOG_NAME "bfin-wdt"
> -
> -/* The BF561 has two watchdogs (one per core), but since Linux
> - * only runs on core A, we'll just work with that one.
> - */
> -#ifdef BF561_FAMILY
> -# define bfin_read_WDOG_CTL() bfin_read_WDOGA_CTL()
> -# define bfin_read_WDOG_CNT() bfin_read_WDOGA_CNT()
> -# define bfin_read_WDOG_STAT() bfin_read_WDOGA_STAT()
> -# define bfin_write_WDOG_CTL(x) bfin_write_WDOGA_CTL(x)
> -# define bfin_write_WDOG_CNT(x) bfin_write_WDOGA_CNT(x)
> -# define bfin_write_WDOG_STAT(x) bfin_write_WDOGA_STAT(x)
> -#endif
> -
> -/* some defaults */
> -#define WATCHDOG_TIMEOUT 20
> -
> -static unsigned int timeout = WATCHDOG_TIMEOUT;
> -static bool nowayout = WATCHDOG_NOWAYOUT;
> -static const struct watchdog_info bfin_wdt_info;
> -static unsigned long open_check;
> -static char expect_close;
> -static DEFINE_SPINLOCK(bfin_wdt_spinlock);
> -
> -/**
> - * bfin_wdt_keepalive - Keep the Userspace Watchdog Alive
> - *
> - * The Userspace watchdog got a KeepAlive: schedule the next timeout.
> - */
> -static int bfin_wdt_keepalive(void)
> -{
> - stampit();
> - bfin_write_WDOG_STAT(0);
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_stop - Stop the Watchdog
> - *
> - * Stops the on-chip watchdog.
> - */
> -static int bfin_wdt_stop(void)
> -{
> - stampit();
> - bfin_write_WDOG_CTL(WDEN_DISABLE);
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_start - Start the Watchdog
> - *
> - * Starts the on-chip watchdog. Automatically loads WDOG_CNT
> - * into WDOG_STAT for us.
> - */
> -static int bfin_wdt_start(void)
> -{
> - stampit();
> - bfin_write_WDOG_CTL(WDEN_ENABLE | ICTL_RESET);
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_running - Check Watchdog status
> - *
> - * See if the watchdog is running.
> - */
> -static int bfin_wdt_running(void)
> -{
> - stampit();
> - return ((bfin_read_WDOG_CTL() & WDEN_MASK) != WDEN_DISABLE);
> -}
> -
> -/**
> - * bfin_wdt_set_timeout - Set the Userspace Watchdog timeout
> - * @t: new timeout value (in seconds)
> - *
> - * Translate the specified timeout in seconds into System Clock
> - * terms which is what the on-chip Watchdog requires.
> - */
> -static int bfin_wdt_set_timeout(unsigned long t)
> -{
> - u32 cnt, max_t, sclk;
> - unsigned long flags;
> -
> - sclk = get_sclk();
> - max_t = -1 / sclk;
> - cnt = t * sclk;
> - stamp("maxtimeout=%us newtimeout=%lus (cnt=%#x)", max_t, t, cnt);
> -
> - if (t > max_t) {
> - pr_warn("timeout value is too large\n");
> - return -EINVAL;
> - }
> -
> - spin_lock_irqsave(&bfin_wdt_spinlock, flags);
> - {
> - int run = bfin_wdt_running();
> - bfin_wdt_stop();
> - bfin_write_WDOG_CNT(cnt);
> - if (run)
> - bfin_wdt_start();
> - }
> - spin_unlock_irqrestore(&bfin_wdt_spinlock, flags);
> -
> - timeout = t;
> -
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_open - Open the Device
> - * @inode: inode of device
> - * @file: file handle of device
> - *
> - * Watchdog device is opened and started.
> - */
> -static int bfin_wdt_open(struct inode *inode, struct file *file)
> -{
> - stampit();
> -
> - if (test_and_set_bit(0, &open_check))
> - return -EBUSY;
> -
> - if (nowayout)
> - __module_get(THIS_MODULE);
> -
> - bfin_wdt_keepalive();
> - bfin_wdt_start();
> -
> - return nonseekable_open(inode, file);
> -}
> -
> -/**
> - * bfin_wdt_close - Close the Device
> - * @inode: inode of device
> - * @file: file handle of device
> - *
> - * Watchdog device is closed and stopped.
> - */
> -static int bfin_wdt_release(struct inode *inode, struct file *file)
> -{
> - stampit();
> -
> - if (expect_close == 42)
> - bfin_wdt_stop();
> - else {
> - pr_crit("Unexpected close, not stopping watchdog!\n");
> - bfin_wdt_keepalive();
> - }
> - expect_close = 0;
> - clear_bit(0, &open_check);
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_write - Write to Device
> - * @file: file handle of device
> - * @buf: buffer to write
> - * @count: length of buffer
> - * @ppos: offset
> - *
> - * Pings the watchdog on write.
> - */
> -static ssize_t bfin_wdt_write(struct file *file, const char __user *data,
> - size_t len, loff_t *ppos)
> -{
> - stampit();
> -
> - if (len) {
> - if (!nowayout) {
> - size_t i;
> -
> - /* In case it was set long ago */
> - expect_close = 0;
> -
> - for (i = 0; i != len; i++) {
> - char c;
> - if (get_user(c, data + i))
> - return -EFAULT;
> - if (c == 'V')
> - expect_close = 42;
> - }
> - }
> - bfin_wdt_keepalive();
> - }
> -
> - return len;
> -}
> -
> -/**
> - * bfin_wdt_ioctl - Query Device
> - * @file: file handle of device
> - * @cmd: watchdog command
> - * @arg: argument
> - *
> - * Query basic information from the device or ping it, as outlined by the
> - * watchdog API.
> - */
> -static long bfin_wdt_ioctl(struct file *file,
> - unsigned int cmd, unsigned long arg)
> -{
> - void __user *argp = (void __user *)arg;
> - int __user *p = argp;
> -
> - stampit();
> -
> - switch (cmd) {
> - case WDIOC_GETSUPPORT:
> - if (copy_to_user(argp, &bfin_wdt_info, sizeof(bfin_wdt_info)))
> - return -EFAULT;
> - else
> - return 0;
> - case WDIOC_GETSTATUS:
> - case WDIOC_GETBOOTSTATUS:
> - return put_user(!!(_bfin_swrst & SWRST_RESET_WDOG), p);
> - case WDIOC_SETOPTIONS: {
> - unsigned long flags;
> - int options, ret = -EINVAL;
> -
> - if (get_user(options, p))
> - return -EFAULT;
> -
> - spin_lock_irqsave(&bfin_wdt_spinlock, flags);
> - if (options & WDIOS_DISABLECARD) {
> - bfin_wdt_stop();
> - ret = 0;
> - }
> - if (options & WDIOS_ENABLECARD) {
> - bfin_wdt_start();
> - ret = 0;
> - }
> - spin_unlock_irqrestore(&bfin_wdt_spinlock, flags);
> - return ret;
> - }
> - case WDIOC_KEEPALIVE:
> - bfin_wdt_keepalive();
> - return 0;
> - case WDIOC_SETTIMEOUT: {
> - int new_timeout;
> -
> - if (get_user(new_timeout, p))
> - return -EFAULT;
> - if (bfin_wdt_set_timeout(new_timeout))
> - return -EINVAL;
> - }
> - /* Fall */
> - case WDIOC_GETTIMEOUT:
> - return put_user(timeout, p);
> - default:
> - return -ENOTTY;
> - }
> -}
> -
> -#ifdef CONFIG_PM
> -static int state_before_suspend;
> -
> -/**
> - * bfin_wdt_suspend - suspend the watchdog
> - * @pdev: device being suspended
> - * @state: requested suspend state
> - *
> - * Remember if the watchdog was running and stop it.
> - * TODO: is this even right? Doesn't seem to be any
> - * standard in the watchdog world ...
> - */
> -static int bfin_wdt_suspend(struct platform_device *pdev, pm_message_t state)
> -{
> - stampit();
> -
> - state_before_suspend = bfin_wdt_running();
> - bfin_wdt_stop();
> -
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_resume - resume the watchdog
> - * @pdev: device being resumed
> - *
> - * If the watchdog was running, turn it back on.
> - */
> -static int bfin_wdt_resume(struct platform_device *pdev)
> -{
> - stampit();
> -
> - if (state_before_suspend) {
> - bfin_wdt_set_timeout(timeout);
> - bfin_wdt_start();
> - }
> -
> - return 0;
> -}
> -#else
> -# define bfin_wdt_suspend NULL
> -# define bfin_wdt_resume NULL
> -#endif
> -
> -static const struct file_operations bfin_wdt_fops = {
> - .owner = THIS_MODULE,
> - .llseek = no_llseek,
> - .write = bfin_wdt_write,
> - .unlocked_ioctl = bfin_wdt_ioctl,
> - .open = bfin_wdt_open,
> - .release = bfin_wdt_release,
> -};
> -
> -static struct miscdevice bfin_wdt_miscdev = {
> - .minor = WATCHDOG_MINOR,
> - .name = "watchdog",
> - .fops = &bfin_wdt_fops,
> -};
> -
> -static const struct watchdog_info bfin_wdt_info = {
> - .identity = "Blackfin Watchdog",
> - .options = WDIOF_SETTIMEOUT |
> - WDIOF_KEEPALIVEPING |
> - WDIOF_MAGICCLOSE,
> -};
> -
> -/**
> - * bfin_wdt_probe - Initialize module
> - *
> - * Registers the misc device. Actual device
> - * initialization is handled by bfin_wdt_open().
> - */
> -static int bfin_wdt_probe(struct platform_device *pdev)
> -{
> - int ret;
> -
> - ret = misc_register(&bfin_wdt_miscdev);
> - if (ret) {
> - pr_err("cannot register miscdev on minor=%d (err=%d)\n",
> - WATCHDOG_MINOR, ret);
> - return ret;
> - }
> -
> - pr_info("initialized: timeout=%d sec (nowayout=%d)\n",
> - timeout, nowayout);
> -
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_remove - Initialize module
> - *
> - * Unregisters the misc device. Actual device
> - * deinitialization is handled by bfin_wdt_close().
> - */
> -static int bfin_wdt_remove(struct platform_device *pdev)
> -{
> - misc_deregister(&bfin_wdt_miscdev);
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_shutdown - Soft Shutdown Handler
> - *
> - * Handles the soft shutdown event.
> - */
> -static void bfin_wdt_shutdown(struct platform_device *pdev)
> -{
> - stampit();
> -
> - bfin_wdt_stop();
> -}
> -
> -static struct platform_device *bfin_wdt_device;
> -
> -static struct platform_driver bfin_wdt_driver = {
> - .probe = bfin_wdt_probe,
> - .remove = bfin_wdt_remove,
> - .shutdown = bfin_wdt_shutdown,
> - .suspend = bfin_wdt_suspend,
> - .resume = bfin_wdt_resume,
> - .driver = {
> - .name = WATCHDOG_NAME,
> - },
> -};
> -
> -/**
> - * bfin_wdt_init - Initialize module
> - *
> - * Checks the module params and registers the platform device & driver.
> - * Real work is in the platform probe function.
> - */
> -static int __init bfin_wdt_init(void)
> -{
> - int ret;
> -
> - stampit();
> -
> - /* Check that the timeout value is within range */
> - if (bfin_wdt_set_timeout(timeout))
> - return -EINVAL;
> -
> - /* Since this is an on-chip device and needs no board-specific
> - * resources, we'll handle all the platform device stuff here.
> - */
> - ret = platform_driver_register(&bfin_wdt_driver);
> - if (ret) {
> - pr_err("unable to register driver\n");
> - return ret;
> - }
> -
> - bfin_wdt_device = platform_device_register_simple(WATCHDOG_NAME,
> - -1, NULL, 0);
> - if (IS_ERR(bfin_wdt_device)) {
> - pr_err("unable to register device\n");
> - platform_driver_unregister(&bfin_wdt_driver);
> - return PTR_ERR(bfin_wdt_device);
> - }
> -
> - return 0;
> -}
> -
> -/**
> - * bfin_wdt_exit - Deinitialize module
> - *
> - * Back out the platform device & driver steps. Real work is in the
> - * platform remove function.
> - */
> -static void __exit bfin_wdt_exit(void)
> -{
> - platform_device_unregister(bfin_wdt_device);
> - platform_driver_unregister(&bfin_wdt_driver);
> -}
> -
> -module_init(bfin_wdt_init);
> -module_exit(bfin_wdt_exit);
> -
> -MODULE_AUTHOR("Michele d'Amico, Mike Frysinger <vapier@gentoo.org>");
> -MODULE_DESCRIPTION("Blackfin Watchdog Device Driver");
> -MODULE_LICENSE("GPL");
> -
> -module_param(timeout, uint, 0);
> -MODULE_PARM_DESC(timeout,
> - "Watchdog timeout in seconds. (1<=timeout<=((2^32)/SCLK), default="
> - __MODULE_STRING(WATCHDOG_TIMEOUT) ")");
> -
> -module_param(nowayout, bool, 0);
> -MODULE_PARM_DESC(nowayout,
> - "Watchdog cannot be stopped once started (default="
> - __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
> --
> 2.7.4
>
next prev parent reply other threads:[~2018-03-15 14:43 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1521111028-19856-1-git-send-email-aaron.wu@analog.com>
2018-03-15 10:50 ` [Blackfin removal] [PATCH 02/28] net: Remove Blackfin Ethernet support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 03/28] media: Remove Blackfin media support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 04/28] tty: Remove Blackfin tty and uart support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 05/28] rtc: Remove Blackfin RTC support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 06/28] mmc: Remove Blackfin SD host support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 07/28] watchdog: Remove Blackfin watchdog support Aaron Wu
2018-03-15 14:43 ` Guenter Roeck [this message]
2018-03-15 10:50 ` [Blackfin removal] [PATCH 09/28] input: Remove Blackfin input support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 10/28] i2c: Remove Blackfin I2C bus support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 11/28] misc: Remove Blackfin DSP echo support Aaron Wu
2018-03-15 15:54 ` Arnd Bergmann
2018-03-15 16:25 ` gregkh
2018-03-15 19:27 ` David Rowe
2018-03-15 10:50 ` [Blackfin removal] [PATCH 13/28] cpufreq: Remove Blackfin CPU frequency support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 14/28] mtd: Remove Blackfin MTD support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 15/28] spi: Remove Blackfin SPI bus support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 16/28] irda: Remove Blackfin IRDA support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 17/28] usb: Remove Blackfin USB support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 18/28] crypto: Remove Blackfin crypto support Aaron Wu
2018-03-15 14:49 ` Arnd Bergmann
2018-03-15 14:55 ` Herbert Xu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 19/28] ata: Remove Blackfin PATA support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 20/28] pwm: Remove Blackfin PWM support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 21/28] pcmcia: Remove Blackfin PCMCIA support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 22/28] can: Remove Blackfin CAN bus support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 23/28] char: Remove Blackfin OTP support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 24/28] pinctrl: Remove Blackfin pinctrl support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 25/28] staging: Remove Blackfin iio trigger timer support Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 26/28] samples: Remove Blackfin gptimers sample code Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 27/28] documentation: Remove Blackfin documentation Aaron Wu
2018-03-15 10:50 ` [Blackfin removal] [PATCH 28/28] MAINTAINERS: Remove Blackfin from MAINTAINERS list Aaron Wu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180315144326.GA14166@roeck-us.net \
--to=linux@roeck-us.net \
--cc=aaron.wu@analog.com \
--cc=arnd@arndb.de \
--cc=dhowells@redhat.com \
--cc=f.fainelli@gmail.com \
--cc=gxt@mprc.pku.edu.cn \
--cc=jhogan@kernel.org \
--cc=jonas@southpole.se \
--cc=kernel@vger.kernel.org \
--cc=lennox.wu@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-hexagon@vger.kernel.org \
--cc=linux-metag@vger.kernel.org \
--cc=liqin.linux@gmail.com \
--cc=openrisc@lists.librecores.org \
--cc=peterz@infradead.org \
--cc=shorne@gmail.com \
--cc=stefan.kristiansson@saunalahti.fi \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).