Skip to content

Commit eda061c

Browse files
committedJan 26, 2025
Merge tag 'linux-watchdog-6.14-rc1' of git://www.linux-watchdog.org/linux-watchdog
Pull watchdog updates from Wim Van Sebroeck: - Add Qualcomm IPQ5424 DT binding - da9052_wdt: add support for bootstatus bits - Other small fixes and improvements * tag 'linux-watchdog-6.14-rc1' of git://www.linux-watchdog.org/linux-watchdog: dt-bindings: watchdog: Document Qualcomm IPQ5424 watchdog: rti_wdt: Fix an OF node leak in rti_wdt_probe() watchdog: max77620: fix excess field in kerneldoc watchdog: sp805_wdt: Drop documentation of non-existent `status` member watchdog: rzv2h_wdt: Use local `dev` pointer in probe watchdog: da9052_wdt: add support for bootstatus bits watchdog: sp805: Report correct timeleft at maximum watchdog: rti: Fix off-by-one in heartbeat recovery
2 parents 08de7f9 + b3db0b5 commit eda061c

File tree

6 files changed

+25
-13
lines changed

6 files changed

+25
-13
lines changed
 

‎Documentation/devicetree/bindings/watchdog/qcom-wdt.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ properties:
2020
- qcom,kpss-wdt-ipq4019
2121
- qcom,apss-wdt-ipq5018
2222
- qcom,apss-wdt-ipq5332
23+
- qcom,apss-wdt-ipq5424
2324
- qcom,apss-wdt-ipq9574
2425
- qcom,apss-wdt-msm8226
2526
- qcom,apss-wdt-msm8974

‎drivers/watchdog/da9052_wdt.c

+12-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,11 @@ static int da9052_wdt_ping(struct watchdog_device *wdt_dev)
135135
}
136136

137137
static const struct watchdog_info da9052_wdt_info = {
138-
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING,
138+
.options = WDIOF_SETTIMEOUT |
139+
WDIOF_KEEPALIVEPING |
140+
WDIOF_CARDRESET |
141+
WDIOF_OVERHEAT |
142+
WDIOF_POWERUNDER,
139143
.identity = "DA9052 Watchdog",
140144
};
141145

@@ -169,6 +173,13 @@ static int da9052_wdt_probe(struct platform_device *pdev)
169173
da9052_wdt->parent = dev;
170174
watchdog_set_drvdata(da9052_wdt, driver_data);
171175

176+
if (da9052->fault_log & DA9052_FAULTLOG_TWDERROR)
177+
da9052_wdt->bootstatus |= WDIOF_CARDRESET;
178+
if (da9052->fault_log & DA9052_FAULTLOG_TEMPOVER)
179+
da9052_wdt->bootstatus |= WDIOF_OVERHEAT;
180+
if (da9052->fault_log & DA9052_FAULTLOG_VDDFAULT)
181+
da9052_wdt->bootstatus |= WDIOF_POWERUNDER;
182+
172183
ret = da9052_reg_update(da9052, DA9052_CONTROL_D_REG,
173184
DA9052_CONTROLD_TWDSCALE, 0);
174185
if (ret < 0) {

‎drivers/watchdog/max77620_wdt.c

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ static bool nowayout = WATCHDOG_NOWAYOUT;
2525

2626
/**
2727
* struct max77620_variant - Data specific to a chip variant
28-
* @wdt_info: watchdog descriptor
2928
* @reg_onoff_cnfg2: ONOFF_CNFG2 register offset
3029
* @reg_cnfg_glbl2: CNFG_GLBL2 register offset
3130
* @reg_cnfg_glbl3: CNFG_GLBL3 register offset

‎drivers/watchdog/rti_wdt.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,8 @@ static int rti_wdt_probe(struct platform_device *pdev)
273273

274274
set_bit(WDOG_HW_RUNNING, &wdd->status);
275275
time_left_ms = rti_wdt_get_timeleft_ms(wdd);
276-
heartbeat_ms = readl(wdt->base + RTIDWDPRLD);
276+
/* AM62x TRM: texp = (RTIDWDPRLD + 1) * (2^13) / RTICLK1 */
277+
heartbeat_ms = readl(wdt->base + RTIDWDPRLD) + 1;
277278
heartbeat_ms <<= WDT_PRELOAD_SHIFT;
278279
heartbeat_ms *= 1000;
279280
do_div(heartbeat_ms, wdt->freq);
@@ -301,6 +302,7 @@ static int rti_wdt_probe(struct platform_device *pdev)
301302
node = of_parse_phandle(pdev->dev.of_node, "memory-region", 0);
302303
if (node) {
303304
ret = of_address_to_resource(node, 0, &res);
305+
of_node_put(node);
304306
if (ret) {
305307
dev_err(dev, "No memory address assigned to the region.\n");
306308
goto err_iomap;

‎drivers/watchdog/rzv2h_wdt.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -217,24 +217,24 @@ static int rzv2h_wdt_probe(struct platform_device *pdev)
217217
if (IS_ERR(priv->base))
218218
return PTR_ERR(priv->base);
219219

220-
priv->pclk = devm_clk_get_prepared(&pdev->dev, "pclk");
220+
priv->pclk = devm_clk_get_prepared(dev, "pclk");
221221
if (IS_ERR(priv->pclk))
222-
return dev_err_probe(&pdev->dev, PTR_ERR(priv->pclk), "no pclk");
222+
return dev_err_probe(dev, PTR_ERR(priv->pclk), "no pclk");
223223

224-
priv->oscclk = devm_clk_get_prepared(&pdev->dev, "oscclk");
224+
priv->oscclk = devm_clk_get_prepared(dev, "oscclk");
225225
if (IS_ERR(priv->oscclk))
226-
return dev_err_probe(&pdev->dev, PTR_ERR(priv->oscclk), "no oscclk");
226+
return dev_err_probe(dev, PTR_ERR(priv->oscclk), "no oscclk");
227227

228-
priv->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
228+
priv->rstc = devm_reset_control_get_exclusive(dev, NULL);
229229
if (IS_ERR(priv->rstc))
230-
return dev_err_probe(&pdev->dev, PTR_ERR(priv->rstc),
230+
return dev_err_probe(dev, PTR_ERR(priv->rstc),
231231
"failed to get cpg reset");
232232

233233
priv->wdev.max_hw_heartbeat_ms = (MILLI * MAX_TIMEOUT_CYCLES * CLOCK_DIV_BY_256) /
234234
clk_get_rate(priv->oscclk);
235235
dev_dbg(dev, "max hw timeout of %dms\n", priv->wdev.max_hw_heartbeat_ms);
236236

237-
ret = devm_pm_runtime_enable(&pdev->dev);
237+
ret = devm_pm_runtime_enable(dev);
238238
if (ret)
239239
return ret;
240240

@@ -251,7 +251,7 @@ static int rzv2h_wdt_probe(struct platform_device *pdev)
251251
if (ret)
252252
dev_warn(dev, "Specified timeout invalid, using default");
253253

254-
return devm_watchdog_register_device(&pdev->dev, &priv->wdev);
254+
return devm_watchdog_register_device(dev, &priv->wdev);
255255
}
256256

257257
static const struct of_device_id rzv2h_wdt_ids[] = {

‎drivers/watchdog/sp805_wdt.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
* @clk: (optional) clock structure of wdt
6363
* @rate: (optional) clock rate when provided via properties
6464
* @adev: amba device structure of wdt
65-
* @status: current status of wdt
6665
* @load_val: load value to be set for current timeout
6766
*/
6867
struct sp805_wdt {
@@ -128,7 +127,7 @@ static unsigned int wdt_timeleft(struct watchdog_device *wdd)
128127

129128
/*If the interrupt is inactive then time left is WDTValue + WDTLoad. */
130129
if (!(readl_relaxed(wdt->base + WDTRIS) & INT_MASK))
131-
load += wdt->load_val + 1;
130+
load += (u64)wdt->load_val + 1;
132131
spin_unlock(&wdt->lock);
133132

134133
return div_u64(load, wdt->rate);

0 commit comments

Comments
 (0)