Merge tag 'mips_4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux
Pull MIPS updates from James Hogan: "These are the main MIPS changes for 4.18. Rough overview: - MAINTAINERS: Add Paul Burton as MIPS co-maintainer - Misc: Generic compiler intrinsics, Y2038 improvements, Perf+MT fixes - Platform support: Netgear WNR1000 V3, Microsemi Ocelot integrated switch, Ingenic watchdog cleanups More detailed summary: Maintainers: - Add Paul Burton as MIPS co-maintainer, as I soon won't have access to much MIPS hardware, nor enough time to properly maintain MIPS on my own. Miscellaneous: - Use generic GCC library routines from lib/ - Add notrace to generic ucmpdi2 implementation - Rename compiler intrinsic selects to GENERIC_LIB_* - vmlinuz: Use generic ashldi3 - y2038: Convert update/read_persistent_clock() to *_clock64() - sni: Remove read_persistent_clock() - perf: Fix perf with MT counting other threads - Probe for per-TC perf counters in cpu-probe.c - Use correct VPE ID for VPE tracing Minor cleanups: - Avoid unneeded built-in.a in DTS dirs - sc-debugfs: Re-use kstrtobool_from_user - memset.S: Reinstate delay slot indentation - VPE: Fix spelling "uneeded" -> "Unneeded" Platform support: BCM47xx: - Add support for Netgear WNR1000 V3 - firmware: Support small NVRAM partitions - Use __initdata for LEDs platform data Ingenic: - Watchdog driver & platform code improvements: - Disable clock after stopping counter - Use devm_* functions - Drop module remove function - Move platform reset code to restart handler in driver - JZ4740: Convert watchdog instantiation to DT - JZ4780: Fix watchdog DT node - qi_lb60_defconfig: Enable watchdog driver Microsemi: - Ocelot: Add support for integrated switch - pcb123: Connect phys to ports" * tag 'mips_4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux: (30 commits) MAINTAINERS: Add Paul Burton as MIPS co-maintainer MIPS: ptrace: Make FPU context layout comments match reality MIPS: memset.S: Reinstate delay slot indentation MIPS: perf: Fix perf with MT counting other threads MIPS: perf: Use correct VPE ID when setting up VPE tracing MIPS: perf: More robustly probe for the presence of per-tc counters MIPS: Probe for MIPS MT perf counters per TC MIPS: mscc: Connect phys to ports on ocelot_pcb123 MIPS: mscc: Add switch to ocelot MIPS: JZ4740: Drop old platform reset code MIPS: qi_lb60: Enable the jz4740-wdt driver MIPS: JZ4780: dts: Fix watchdog node MIPS: JZ4740: dts: Add bindings for the jz4740-wdt driver watchdog: JZ4740: Drop module remove function watchdog: JZ4740: Register a restart handler watchdog: JZ4740: Use devm_* functions watchdog: JZ4740: Disable clock after stopping counter MIPS: VPE: Fix spelling mistake: "uneeded" -> "unneeded" MIPS: Re-use kstrtobool_from_user() MIPS: Convert update_persistent_clock() to update_persistent_clock64() ...
This commit is contained in:
@@ -124,12 +124,20 @@ static int jz4740_wdt_stop(struct watchdog_device *wdt_dev)
|
||||
{
|
||||
struct jz4740_wdt_drvdata *drvdata = watchdog_get_drvdata(wdt_dev);
|
||||
|
||||
jz4740_timer_disable_watchdog();
|
||||
writeb(0x0, drvdata->base + JZ_REG_WDT_COUNTER_ENABLE);
|
||||
jz4740_timer_disable_watchdog();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int jz4740_wdt_restart(struct watchdog_device *wdt_dev,
|
||||
unsigned long action, void *data)
|
||||
{
|
||||
wdt_dev->timeout = 0;
|
||||
jz4740_wdt_start(wdt_dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct watchdog_info jz4740_wdt_info = {
|
||||
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
|
||||
.identity = "jz4740 Watchdog",
|
||||
@@ -141,6 +149,7 @@ static const struct watchdog_ops jz4740_wdt_ops = {
|
||||
.stop = jz4740_wdt_stop,
|
||||
.ping = jz4740_wdt_ping,
|
||||
.set_timeout = jz4740_wdt_set_timeout,
|
||||
.restart = jz4740_wdt_restart,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
@@ -179,45 +188,26 @@ static int jz4740_wdt_probe(struct platform_device *pdev)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
drvdata->base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(drvdata->base)) {
|
||||
ret = PTR_ERR(drvdata->base);
|
||||
goto err_out;
|
||||
}
|
||||
if (IS_ERR(drvdata->base))
|
||||
return PTR_ERR(drvdata->base);
|
||||
|
||||
drvdata->rtc_clk = clk_get(&pdev->dev, "rtc");
|
||||
drvdata->rtc_clk = devm_clk_get(&pdev->dev, "rtc");
|
||||
if (IS_ERR(drvdata->rtc_clk)) {
|
||||
dev_err(&pdev->dev, "cannot find RTC clock\n");
|
||||
ret = PTR_ERR(drvdata->rtc_clk);
|
||||
goto err_out;
|
||||
return PTR_ERR(drvdata->rtc_clk);
|
||||
}
|
||||
|
||||
ret = watchdog_register_device(&drvdata->wdt);
|
||||
ret = devm_watchdog_register_device(&pdev->dev, &drvdata->wdt);
|
||||
if (ret < 0)
|
||||
goto err_disable_clk;
|
||||
return ret;
|
||||
|
||||
platform_set_drvdata(pdev, drvdata);
|
||||
return 0;
|
||||
|
||||
err_disable_clk:
|
||||
clk_put(drvdata->rtc_clk);
|
||||
err_out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int jz4740_wdt_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct jz4740_wdt_drvdata *drvdata = platform_get_drvdata(pdev);
|
||||
|
||||
jz4740_wdt_stop(&drvdata->wdt);
|
||||
watchdog_unregister_device(&drvdata->wdt);
|
||||
clk_put(drvdata->rtc_clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver jz4740_wdt_driver = {
|
||||
.probe = jz4740_wdt_probe,
|
||||
.remove = jz4740_wdt_remove,
|
||||
.driver = {
|
||||
.name = "jz4740-wdt",
|
||||
.of_match_table = of_match_ptr(jz4740_wdt_of_matches),
|
||||
|
Reference in New Issue
Block a user