Lines Matching +full:bcm2835 +full:- +full:firmware
1 // SPDX-License-Identifier: GPL-2.0+
3 * Watchdog driver for Broadcom BCM2835
6 * branch "rpi-3.6.y" of git://github.com/raspberrypi/linux.git was used
7 * as a hardware reference for the Broadcom BCM2835 watchdog timer.
15 #include <linux/mfd/bcm2835-pm.h>
37 * The Raspberry Pi firmware uses the RSTS register to know which partition
39 * Partition 63 is a special partition used by the firmware to indicate halt.
60 cur = readl(wdt->base + PM_RSTC); in bcm2835_wdt_is_running()
71 spin_lock_irqsave(&wdt->lock, flags); in bcm2835_wdt_start()
73 writel_relaxed(PM_PASSWORD | (SECS_TO_WDOG_TICKS(wdog->timeout) & in bcm2835_wdt_start()
74 PM_WDOG_TIME_SET), wdt->base + PM_WDOG); in bcm2835_wdt_start()
75 cur = readl_relaxed(wdt->base + PM_RSTC); in bcm2835_wdt_start()
77 PM_RSTC_WRCFG_FULL_RESET, wdt->base + PM_RSTC); in bcm2835_wdt_start()
79 spin_unlock_irqrestore(&wdt->lock, flags); in bcm2835_wdt_start()
88 writel_relaxed(PM_PASSWORD | PM_RSTC_RESET, wdt->base + PM_RSTC); in bcm2835_wdt_stop()
96 uint32_t ret = readl_relaxed(wdt->base + PM_WDOG); in bcm2835_wdt_get_timeleft()
105 writel_relaxed(10 | PM_PASSWORD, wdt->base + PM_WDOG); in __bcm2835_restart()
106 val = readl_relaxed(wdt->base + PM_RSTC); in __bcm2835_restart()
109 writel_relaxed(val, wdt->base + PM_RSTC); in __bcm2835_restart()
136 .identity = "Broadcom BCM2835 Watchdog timer",
162 val = readl_relaxed(wdt->base + PM_RSTS); in bcm2835_power_off()
164 writel_relaxed(val, wdt->base + PM_RSTS); in bcm2835_power_off()
172 struct bcm2835_pm *pm = dev_get_drvdata(pdev->dev.parent); in bcm2835_wdt_probe()
173 struct device *dev = &pdev->dev; in bcm2835_wdt_probe()
179 return -ENOMEM; in bcm2835_wdt_probe()
181 spin_lock_init(&wdt->lock); in bcm2835_wdt_probe()
183 wdt->base = pm->base; in bcm2835_wdt_probe()
213 dev_info(dev, "Broadcom BCM2835 watchdog timer"); in bcm2835_wdt_probe()
229 .name = "bcm2835-wdt",
241 MODULE_ALIAS("platform:bcm2835-wdt");
243 MODULE_DESCRIPTION("Driver for Broadcom BCM2835 watchdog timer");