dw_wdt 59 drivers/watchdog/dw_wdt.c #define to_dw_wdt(wdd) container_of(wdd, struct dw_wdt, wdd) dw_wdt 61 drivers/watchdog/dw_wdt.c static inline int dw_wdt_is_enabled(struct dw_wdt *dw_wdt) dw_wdt 63 drivers/watchdog/dw_wdt.c return readl(dw_wdt->regs + WDOG_CONTROL_REG_OFFSET) & dw_wdt 67 drivers/watchdog/dw_wdt.c static inline int dw_wdt_top_in_seconds(struct dw_wdt *dw_wdt, unsigned top) dw_wdt 73 drivers/watchdog/dw_wdt.c return (1U << (16 + top)) / dw_wdt->rate; dw_wdt 76 drivers/watchdog/dw_wdt.c static int dw_wdt_get_top(struct dw_wdt *dw_wdt) dw_wdt 78 drivers/watchdog/dw_wdt.c int top = readl(dw_wdt->regs + WDOG_TIMEOUT_RANGE_REG_OFFSET) & 0xF; dw_wdt 80 drivers/watchdog/dw_wdt.c return dw_wdt_top_in_seconds(dw_wdt, top); dw_wdt 85 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = to_dw_wdt(wdd); dw_wdt 87 drivers/watchdog/dw_wdt.c writel(WDOG_COUNTER_RESTART_KICK_VALUE, dw_wdt->regs + dw_wdt 95 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = to_dw_wdt(wdd); dw_wdt 103 drivers/watchdog/dw_wdt.c if (dw_wdt_top_in_seconds(dw_wdt, i) >= top_s) { dw_wdt 115 drivers/watchdog/dw_wdt.c dw_wdt->regs + WDOG_TIMEOUT_RANGE_REG_OFFSET); dw_wdt 117 drivers/watchdog/dw_wdt.c wdd->timeout = dw_wdt_top_in_seconds(dw_wdt, top_val); dw_wdt 122 drivers/watchdog/dw_wdt.c static void dw_wdt_arm_system_reset(struct dw_wdt *dw_wdt) dw_wdt 124 drivers/watchdog/dw_wdt.c u32 val = readl(dw_wdt->regs + WDOG_CONTROL_REG_OFFSET); dw_wdt 130 drivers/watchdog/dw_wdt.c writel(val, dw_wdt->regs + WDOG_CONTROL_REG_OFFSET); dw_wdt 135 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = to_dw_wdt(wdd); dw_wdt 138 drivers/watchdog/dw_wdt.c dw_wdt_arm_system_reset(dw_wdt); dw_wdt 145 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = to_dw_wdt(wdd); dw_wdt 147 drivers/watchdog/dw_wdt.c if (!dw_wdt->rst) { dw_wdt 152 drivers/watchdog/dw_wdt.c reset_control_assert(dw_wdt->rst); dw_wdt 153 drivers/watchdog/dw_wdt.c reset_control_deassert(dw_wdt->rst); dw_wdt 161 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = to_dw_wdt(wdd); dw_wdt 163 drivers/watchdog/dw_wdt.c writel(0, dw_wdt->regs + WDOG_TIMEOUT_RANGE_REG_OFFSET); dw_wdt 164 drivers/watchdog/dw_wdt.c if (dw_wdt_is_enabled(dw_wdt)) dw_wdt 166 drivers/watchdog/dw_wdt.c dw_wdt->regs + WDOG_COUNTER_RESTART_REG_OFFSET); dw_wdt 168 drivers/watchdog/dw_wdt.c dw_wdt_arm_system_reset(dw_wdt); dw_wdt 178 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = to_dw_wdt(wdd); dw_wdt 180 drivers/watchdog/dw_wdt.c return readl(dw_wdt->regs + WDOG_CURRENT_COUNT_REG_OFFSET) / dw_wdt 181 drivers/watchdog/dw_wdt.c dw_wdt->rate; dw_wdt 203 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = dev_get_drvdata(dev); dw_wdt 205 drivers/watchdog/dw_wdt.c dw_wdt->control = readl(dw_wdt->regs + WDOG_CONTROL_REG_OFFSET); dw_wdt 206 drivers/watchdog/dw_wdt.c dw_wdt->timeout = readl(dw_wdt->regs + WDOG_TIMEOUT_RANGE_REG_OFFSET); dw_wdt 208 drivers/watchdog/dw_wdt.c clk_disable_unprepare(dw_wdt->clk); dw_wdt 215 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = dev_get_drvdata(dev); dw_wdt 216 drivers/watchdog/dw_wdt.c int err = clk_prepare_enable(dw_wdt->clk); dw_wdt 221 drivers/watchdog/dw_wdt.c writel(dw_wdt->timeout, dw_wdt->regs + WDOG_TIMEOUT_RANGE_REG_OFFSET); dw_wdt 222 drivers/watchdog/dw_wdt.c writel(dw_wdt->control, dw_wdt->regs + WDOG_CONTROL_REG_OFFSET); dw_wdt 224 drivers/watchdog/dw_wdt.c dw_wdt_ping(&dw_wdt->wdd); dw_wdt 236 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt; dw_wdt 239 drivers/watchdog/dw_wdt.c dw_wdt = devm_kzalloc(dev, sizeof(*dw_wdt), GFP_KERNEL); dw_wdt 240 drivers/watchdog/dw_wdt.c if (!dw_wdt) dw_wdt 243 drivers/watchdog/dw_wdt.c dw_wdt->regs = devm_platform_ioremap_resource(pdev, 0); dw_wdt 244 drivers/watchdog/dw_wdt.c if (IS_ERR(dw_wdt->regs)) dw_wdt 245 drivers/watchdog/dw_wdt.c return PTR_ERR(dw_wdt->regs); dw_wdt 247 drivers/watchdog/dw_wdt.c dw_wdt->clk = devm_clk_get(dev, NULL); dw_wdt 248 drivers/watchdog/dw_wdt.c if (IS_ERR(dw_wdt->clk)) dw_wdt 249 drivers/watchdog/dw_wdt.c return PTR_ERR(dw_wdt->clk); dw_wdt 251 drivers/watchdog/dw_wdt.c ret = clk_prepare_enable(dw_wdt->clk); dw_wdt 255 drivers/watchdog/dw_wdt.c dw_wdt->rate = clk_get_rate(dw_wdt->clk); dw_wdt 256 drivers/watchdog/dw_wdt.c if (dw_wdt->rate == 0) { dw_wdt 261 drivers/watchdog/dw_wdt.c dw_wdt->rst = devm_reset_control_get_optional_shared(&pdev->dev, NULL); dw_wdt 262 drivers/watchdog/dw_wdt.c if (IS_ERR(dw_wdt->rst)) { dw_wdt 263 drivers/watchdog/dw_wdt.c ret = PTR_ERR(dw_wdt->rst); dw_wdt 267 drivers/watchdog/dw_wdt.c reset_control_deassert(dw_wdt->rst); dw_wdt 269 drivers/watchdog/dw_wdt.c wdd = &dw_wdt->wdd; dw_wdt 274 drivers/watchdog/dw_wdt.c dw_wdt_top_in_seconds(dw_wdt, DW_WDT_MAX_TOP) * 1000; dw_wdt 277 drivers/watchdog/dw_wdt.c watchdog_set_drvdata(wdd, dw_wdt); dw_wdt 286 drivers/watchdog/dw_wdt.c if (dw_wdt_is_enabled(dw_wdt)) { dw_wdt 287 drivers/watchdog/dw_wdt.c wdd->timeout = dw_wdt_get_top(dw_wdt); dw_wdt 294 drivers/watchdog/dw_wdt.c platform_set_drvdata(pdev, dw_wdt); dw_wdt 305 drivers/watchdog/dw_wdt.c clk_disable_unprepare(dw_wdt->clk); dw_wdt 311 drivers/watchdog/dw_wdt.c struct dw_wdt *dw_wdt = platform_get_drvdata(pdev); dw_wdt 313 drivers/watchdog/dw_wdt.c watchdog_unregister_device(&dw_wdt->wdd); dw_wdt 314 drivers/watchdog/dw_wdt.c reset_control_assert(dw_wdt->rst); dw_wdt 315 drivers/watchdog/dw_wdt.c clk_disable_unprepare(dw_wdt->clk);