On Sat, Aug 12, 2017 at 08:43:09PM +0200, Linus Walleij wrote: > This renames all the driver files and symbols for the Gemini > watchdog to FTWDT010 as it has been revealed that this IP block > is a generic watchdog timer from Faraday Technology used in > several SoC designs. > > Select thid driver by default for the Gemini, it is a sensible > driver to always have enabled. > > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > --- > drivers/watchdog/Kconfig | 14 +-- > drivers/watchdog/Makefile | 2 +- > drivers/watchdog/{gemini_wdt.c => ftwdt010_wdt.c} | 117 +++++++++++----------- > 3 files changed, 68 insertions(+), 65 deletions(-) > rename drivers/watchdog/{gemini_wdt.c => ftwdt010_wdt.c} (50%) > > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > index c722cbfdc7e6..fd44a542036a 100644 > --- a/drivers/watchdog/Kconfig > +++ b/drivers/watchdog/Kconfig > @@ -321,16 +321,18 @@ config 977_WATCHDOG > > Not sure? It's safe to say N. > > -config GEMINI_WATCHDOG > - tristate "Gemini watchdog" > - depends on ARCH_GEMINI > +config FTWDT010_WATCHDOG > + tristate "Faraday Technology FTWDT010 watchdog" > + depends on ARM || COMPILE_TEST Did you test this ? I am kind of wary about COMPILE_TEST in watchdog drivers. I tried to enable that a while ago, and we had to spend a couple of releases fixing the fallout (even though I had tried to make sure that everything builds). > select WATCHDOG_CORE > + default ARCH_GEMINI > help > - Say Y here if to include support for the watchdog timer > - embedded in the Cortina Systems Gemini family of devices. > + Say Y here if to include support for the Faraday Technology > + FTWDT010 watchdog timer embedded in the Cortina Systems Gemini > + family of devices. > > To compile this driver as a module, choose M here: the > - module will be called gemini_wdt. > + module will be called ftwdt010_wdt. > > config IXP4XX_WATCHDOG > tristate "IXP4xx Watchdog" > diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile > index 56adf9fa67d0..df91d7db821c 100644 > --- a/drivers/watchdog/Makefile > +++ b/drivers/watchdog/Makefile > @@ -45,7 +45,7 @@ obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o > obj-$(CONFIG_TWL4030_WATCHDOG) += twl4030_wdt.o > obj-$(CONFIG_21285_WATCHDOG) += wdt285.o > obj-$(CONFIG_977_WATCHDOG) += wdt977.o > -obj-$(CONFIG_GEMINI_WATCHDOG) += gemini_wdt.o > +obj-$(CONFIG_FTWDT010_WATCHDOG) += ftwdt010_wdt.o > obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o > obj-$(CONFIG_KS8695_WATCHDOG) += ks8695_wdt.o > obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o > diff --git a/drivers/watchdog/gemini_wdt.c b/drivers/watchdog/ftwdt010_wdt.c > similarity index 50% > rename from drivers/watchdog/gemini_wdt.c > rename to drivers/watchdog/ftwdt010_wdt.c > index 8155aa619e4c..637ffd812f0b 100644 > --- a/drivers/watchdog/gemini_wdt.c > +++ b/drivers/watchdog/ftwdt010_wdt.c > @@ -1,5 +1,5 @@ > /* > - * Watchdog driver for Cortina Systems Gemini SoC > + * Watchdog driver for Faraday Technology FTWDT010 > * > * Copyright (C) 2017 Linus Walleij <linus.walleij@xxxxxxxxxx> > * > @@ -22,10 +22,10 @@ > #include <linux/slab.h> > #include <linux/watchdog.h> > > -#define GEMINI_WDCOUNTER 0x0 > -#define GEMINI_WDLOAD 0x4 > -#define GEMINI_WDRESTART 0x8 > -#define GEMINI_WDCR 0xC > +#define FTWDT010_WDCOUNTER 0x0 > +#define FTWDT010_WDLOAD 0x4 > +#define FTWDT010_WDRESTART 0x8 > +#define FTWDT010_WDCR 0xC > > #define WDRESTART_MAGIC 0x5AB9 > > @@ -35,79 +35,79 @@ > > #define WDT_CLOCK 5000000 /* 5 MHz */ > > -struct gemini_wdt { > +struct ftwdt010_wdt { > struct watchdog_device wdd; > struct device *dev; > void __iomem *base; > }; > > static inline > -struct gemini_wdt *to_gemini_wdt(struct watchdog_device *wdd) > +struct ftwdt010_wdt *to_ftwdt010_wdt(struct watchdog_device *wdd) > { > - return container_of(wdd, struct gemini_wdt, wdd); > + return container_of(wdd, struct ftwdt010_wdt, wdd); > } > > -static int gemini_wdt_start(struct watchdog_device *wdd) > +static int ftwdt010_wdt_start(struct watchdog_device *wdd) > { > - struct gemini_wdt *gwdt = to_gemini_wdt(wdd); > + struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd); > > - writel(wdd->timeout * WDT_CLOCK, gwdt->base + GEMINI_WDLOAD); > - writel(WDRESTART_MAGIC, gwdt->base + GEMINI_WDRESTART); > + writel(wdd->timeout * WDT_CLOCK, gwdt->base + FTWDT010_WDLOAD); > + writel(WDRESTART_MAGIC, gwdt->base + FTWDT010_WDRESTART); > /* set clock before enabling */ > writel(WDCR_CLOCK_5MHZ | WDCR_SYS_RST, > - gwdt->base + GEMINI_WDCR); > + gwdt->base + FTWDT010_WDCR); > writel(WDCR_CLOCK_5MHZ | WDCR_SYS_RST | WDCR_ENABLE, > - gwdt->base + GEMINI_WDCR); > + gwdt->base + FTWDT010_WDCR); > > return 0; > } > > -static int gemini_wdt_stop(struct watchdog_device *wdd) > +static int ftwdt010_wdt_stop(struct watchdog_device *wdd) > { > - struct gemini_wdt *gwdt = to_gemini_wdt(wdd); > + struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd); > > - writel(0, gwdt->base + GEMINI_WDCR); > + writel(0, gwdt->base + FTWDT010_WDCR); > > return 0; > } > > -static int gemini_wdt_ping(struct watchdog_device *wdd) > +static int ftwdt010_wdt_ping(struct watchdog_device *wdd) > { > - struct gemini_wdt *gwdt = to_gemini_wdt(wdd); > + struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd); > > - writel(WDRESTART_MAGIC, gwdt->base + GEMINI_WDRESTART); > + writel(WDRESTART_MAGIC, gwdt->base + FTWDT010_WDRESTART); > > return 0; > } > > -static int gemini_wdt_set_timeout(struct watchdog_device *wdd, > +static int ftwdt010_wdt_set_timeout(struct watchdog_device *wdd, > unsigned int timeout) > { > wdd->timeout = timeout; > if (watchdog_active(wdd)) > - gemini_wdt_start(wdd); > + ftwdt010_wdt_start(wdd); > > return 0; > } > > -static irqreturn_t gemini_wdt_interrupt(int irq, void *data) > +static irqreturn_t ftwdt010_wdt_interrupt(int irq, void *data) > { > - struct gemini_wdt *gwdt = data; > + struct ftwdt010_wdt *gwdt = data; > > watchdog_notify_pretimeout(&gwdt->wdd); > > return IRQ_HANDLED; > } > > -static const struct watchdog_ops gemini_wdt_ops = { > - .start = gemini_wdt_start, > - .stop = gemini_wdt_stop, > - .ping = gemini_wdt_ping, > - .set_timeout = gemini_wdt_set_timeout, > +static const struct watchdog_ops ftwdt010_wdt_ops = { > + .start = ftwdt010_wdt_start, > + .stop = ftwdt010_wdt_stop, > + .ping = ftwdt010_wdt_ping, > + .set_timeout = ftwdt010_wdt_set_timeout, > .owner = THIS_MODULE, > }; > > -static const struct watchdog_info gemini_wdt_info = { > +static const struct watchdog_info ftwdt010_wdt_info = { > .options = WDIOF_KEEPALIVEPING > | WDIOF_MAGICCLOSE > | WDIOF_SETTIMEOUT, > @@ -115,11 +115,11 @@ static const struct watchdog_info gemini_wdt_info = { > }; > > > -static int gemini_wdt_probe(struct platform_device *pdev) > +static int ftwdt010_wdt_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > struct resource *res; > - struct gemini_wdt *gwdt; > + struct ftwdt010_wdt *gwdt; > unsigned int reg; > int irq; > int ret; > @@ -138,8 +138,8 @@ static int gemini_wdt_probe(struct platform_device *pdev) > return -EINVAL; > > gwdt->dev = dev; > - gwdt->wdd.info = &gemini_wdt_info; > - gwdt->wdd.ops = &gemini_wdt_ops; > + gwdt->wdd.info = &ftwdt010_wdt_info; > + gwdt->wdd.ops = &ftwdt010_wdt_ops; > gwdt->wdd.min_timeout = 1; > gwdt->wdd.max_timeout = 0xFFFFFFFF / WDT_CLOCK; > gwdt->wdd.parent = dev; > @@ -151,14 +151,14 @@ static int gemini_wdt_probe(struct platform_device *pdev) > gwdt->wdd.timeout = 13U; > watchdog_init_timeout(&gwdt->wdd, 0, dev); > > - reg = readw(gwdt->base + GEMINI_WDCR); > + reg = readw(gwdt->base + FTWDT010_WDCR); > if (reg & WDCR_ENABLE) { > /* Watchdog was enabled by the bootloader, disable it. */ > reg &= ~WDCR_ENABLE; > - writel(reg, gwdt->base + GEMINI_WDCR); > + writel(reg, gwdt->base + FTWDT010_WDCR); > } > > - ret = devm_request_irq(dev, irq, gemini_wdt_interrupt, 0, > + ret = devm_request_irq(dev, irq, ftwdt010_wdt_interrupt, 0, > "watchdog bark", gwdt); > if (ret) > return ret; > @@ -171,59 +171,60 @@ static int gemini_wdt_probe(struct platform_device *pdev) > > /* Set up platform driver data */ > platform_set_drvdata(pdev, gwdt); > - dev_info(dev, "Gemini watchdog driver enabled\n"); > + dev_info(dev, "FTWDT010 watchdog driver enabled\n"); > > return 0; > } > > -static int __maybe_unused gemini_wdt_suspend(struct device *dev) > +static int __maybe_unused ftwdt010_wdt_suspend(struct device *dev) > { > - struct gemini_wdt *gwdt = dev_get_drvdata(dev); > + struct ftwdt010_wdt *gwdt = dev_get_drvdata(dev); > unsigned int reg; > > - reg = readw(gwdt->base + GEMINI_WDCR); > + reg = readw(gwdt->base + FTWDT010_WDCR); > reg &= ~WDCR_ENABLE; > - writel(reg, gwdt->base + GEMINI_WDCR); > + writel(reg, gwdt->base + FTWDT010_WDCR); > > return 0; > } > > -static int __maybe_unused gemini_wdt_resume(struct device *dev) > +static int __maybe_unused ftwdt010_wdt_resume(struct device *dev) > { > - struct gemini_wdt *gwdt = dev_get_drvdata(dev); > + struct ftwdt010_wdt *gwdt = dev_get_drvdata(dev); > unsigned int reg; > > if (watchdog_active(&gwdt->wdd)) { > - reg = readw(gwdt->base + GEMINI_WDCR); > + reg = readw(gwdt->base + FTWDT010_WDCR); > reg |= WDCR_ENABLE; > - writel(reg, gwdt->base + GEMINI_WDCR); > + writel(reg, gwdt->base + FTWDT010_WDCR); > } > > return 0; > } > > -static const struct dev_pm_ops gemini_wdt_dev_pm_ops = { > - SET_SYSTEM_SLEEP_PM_OPS(gemini_wdt_suspend, > - gemini_wdt_resume) > +static const struct dev_pm_ops ftwdt010_wdt_dev_pm_ops = { > + SET_SYSTEM_SLEEP_PM_OPS(ftwdt010_wdt_suspend, > + ftwdt010_wdt_resume) > }; > > #ifdef CONFIG_OF > -static const struct of_device_id gemini_wdt_match[] = { > +static const struct of_device_id ftwdt010_wdt_match[] = { > + { .compatible = "faraday,ftwdt010" }, > { .compatible = "cortina,gemini-watchdog" }, > {}, > }; > -MODULE_DEVICE_TABLE(of, gemini_wdt_match); > +MODULE_DEVICE_TABLE(of, ftwdt010_wdt_match); > #endif > > -static struct platform_driver gemini_wdt_driver = { > - .probe = gemini_wdt_probe, > +static struct platform_driver ftwdt010_wdt_driver = { > + .probe = ftwdt010_wdt_probe, > .driver = { > - .name = "gemini-wdt", > - .of_match_table = of_match_ptr(gemini_wdt_match), > - .pm = &gemini_wdt_dev_pm_ops, > + .name = "ftwdt010-wdt", > + .of_match_table = of_match_ptr(ftwdt010_wdt_match), > + .pm = &ftwdt010_wdt_dev_pm_ops, > }, > }; > -module_platform_driver(gemini_wdt_driver); > +module_platform_driver(ftwdt010_wdt_driver); > MODULE_AUTHOR("Linus Walleij"); > -MODULE_DESCRIPTION("Watchdog driver for Gemini"); > +MODULE_DESCRIPTION("Watchdog driver for Faraday Technology FTWDT010"); > MODULE_LICENSE("GPL"); > -- > 2.13.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html