Lines Matching +full:fixed +full:- +full:parent +full:- +full:rate
1 // SPDX-License-Identifier: GPL-2.0-only
26 unsigned long rate; member
55 __raw_writel(IXP4XX_WDT_KEY, iwdt->base + IXP4XX_OSWK_OFFSET); in ixp4xx_wdt_start()
56 __raw_writel(0, iwdt->base + IXP4XX_OSWE_OFFSET); in ixp4xx_wdt_start()
57 __raw_writel(wdd->timeout * iwdt->rate, in ixp4xx_wdt_start()
58 iwdt->base + IXP4XX_OSWT_OFFSET); in ixp4xx_wdt_start()
60 iwdt->base + IXP4XX_OSWE_OFFSET); in ixp4xx_wdt_start()
61 __raw_writel(0, iwdt->base + IXP4XX_OSWK_OFFSET); in ixp4xx_wdt_start()
70 __raw_writel(IXP4XX_WDT_KEY, iwdt->base + IXP4XX_OSWK_OFFSET); in ixp4xx_wdt_stop()
71 __raw_writel(0, iwdt->base + IXP4XX_OSWE_OFFSET); in ixp4xx_wdt_stop()
72 __raw_writel(0, iwdt->base + IXP4XX_OSWK_OFFSET); in ixp4xx_wdt_stop()
80 wdd->timeout = timeout; in ixp4xx_wdt_set_timeout()
92 __raw_writel(IXP4XX_WDT_KEY, iwdt->base + IXP4XX_OSWK_OFFSET); in ixp4xx_wdt_restart()
93 __raw_writel(0, iwdt->base + IXP4XX_OSWT_OFFSET); in ixp4xx_wdt_restart()
95 iwdt->base + IXP4XX_OSWE_OFFSET); in ixp4xx_wdt_restart()
137 struct device *dev = &pdev->dev; in ixp4xx_wdt_probe()
143 dev_info(dev, "Rev. A0 IXP42x CPU detected - only restart supported\n"); in ixp4xx_wdt_probe()
151 return -ENOMEM; in ixp4xx_wdt_probe()
152 iwdt->base = (void __iomem *)dev->platform_data; in ixp4xx_wdt_probe()
155 * Retrieve rate from a fixed clock from the device tree if in ixp4xx_wdt_probe()
156 * the parent has that, else use the default clock rate. in ixp4xx_wdt_probe()
158 clk = devm_clk_get_enabled(dev->parent, NULL); in ixp4xx_wdt_probe()
160 iwdt->rate = clk_get_rate(clk); in ixp4xx_wdt_probe()
162 if (!iwdt->rate) in ixp4xx_wdt_probe()
163 iwdt->rate = IXP4XX_TIMER_FREQ; in ixp4xx_wdt_probe()
165 iwdt->wdd.info = &ixp4xx_wdt_info; in ixp4xx_wdt_probe()
166 iwdt->wdd.ops = iwdt_ops; in ixp4xx_wdt_probe()
167 iwdt->wdd.min_timeout = 1; in ixp4xx_wdt_probe()
168 iwdt->wdd.max_timeout = U32_MAX / iwdt->rate; in ixp4xx_wdt_probe()
169 iwdt->wdd.parent = dev; in ixp4xx_wdt_probe()
171 iwdt->wdd.timeout = 60U; in ixp4xx_wdt_probe()
172 watchdog_init_timeout(&iwdt->wdd, 0, dev); in ixp4xx_wdt_probe()
174 if (__raw_readl(iwdt->base + IXP4XX_OSST_OFFSET) & in ixp4xx_wdt_probe()
176 iwdt->wdd.bootstatus = WDIOF_CARDRESET; in ixp4xx_wdt_probe()
178 ret = devm_watchdog_register_device(dev, &iwdt->wdd); in ixp4xx_wdt_probe()
190 .name = "ixp4xx-watchdog",