ipq806x: fix "reboot" command
The watchdog driver already registers a restart notifier, we just have to enable it in the config and in the DT to fix the "reboot" command. This is done by integratin the following patch-set: https://lkml.org/lkml/2015/2/20/610 I'm copy-pasting the description below: qcom-wdt is currently assuming the presence of a dedicated node in DT to gets its configuration. However, on msm architecture, the watchdog is usually part of the timer block. So this patch-set is changing the driver and slightly enhancing the timer DT bindings to provide the relevant clocks and interrupts. Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org> SVN-Revision: 44504
This commit is contained in:
parent
5072954cd0
commit
565a6f2a27
3 changed files with 175 additions and 0 deletions
|
@ -0,0 +1,72 @@
|
|||
From fded70251b1b58f68de1d3757ece9965f0b75452 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Olivari <mathieu@codeaurora.org>
|
||||
Date: Thu, 19 Feb 2015 20:19:30 -0800
|
||||
Subject: [PATCH 1/3] watchdog: qcom: use timer devicetree binding
|
||||
|
||||
MSM watchdog configuration happens in the same register block as the
|
||||
timer, so we'll use the same binding as the existing timer.
|
||||
|
||||
The qcom-wdt will now be probed when devicetree has an entry compatible
|
||||
with "qcom,kpss-timer" or "qcom-scss-timer".
|
||||
|
||||
Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
|
||||
---
|
||||
drivers/watchdog/qcom-wdt.c | 21 +++++++++++++++------
|
||||
1 file changed, 15 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c
|
||||
index aa85618..aa03ca8 100644
|
||||
--- a/drivers/watchdog/qcom-wdt.c
|
||||
+++ b/drivers/watchdog/qcom-wdt.c
|
||||
@@ -20,9 +20,9 @@
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/watchdog.h>
|
||||
|
||||
-#define WDT_RST 0x0
|
||||
-#define WDT_EN 0x8
|
||||
-#define WDT_BITE_TIME 0x24
|
||||
+#define WDT_RST 0x38
|
||||
+#define WDT_EN 0x40
|
||||
+#define WDT_BITE_TIME 0x5C
|
||||
|
||||
struct qcom_wdt {
|
||||
struct watchdog_device wdd;
|
||||
@@ -117,6 +117,8 @@ static int qcom_wdt_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct qcom_wdt *wdt;
|
||||
struct resource *res;
|
||||
+ struct device_node *np = pdev->dev.of_node;
|
||||
+ u32 percpu_offset;
|
||||
int ret;
|
||||
|
||||
wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL);
|
||||
@@ -124,6 +126,14 @@ static int qcom_wdt_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
+
|
||||
+ /* We use CPU0's DGT for the watchdog */
|
||||
+ if (of_property_read_u32(np, "cpu-offset", &percpu_offset))
|
||||
+ percpu_offset = 0;
|
||||
+
|
||||
+ res->start += percpu_offset;
|
||||
+ res->end += percpu_offset;
|
||||
+
|
||||
wdt->base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(wdt->base))
|
||||
return PTR_ERR(wdt->base);
|
||||
@@ -203,9 +213,8 @@ static int qcom_wdt_remove(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
static const struct of_device_id qcom_wdt_of_table[] = {
|
||||
- { .compatible = "qcom,kpss-wdt-msm8960", },
|
||||
- { .compatible = "qcom,kpss-wdt-apq8064", },
|
||||
- { .compatible = "qcom,kpss-wdt-ipq8064", },
|
||||
+ { .compatible = "qcom,kpss-timer" },
|
||||
+ { .compatible = "qcom,scss-timer" },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, qcom_wdt_of_table);
|
||||
--
|
||||
1.9.1
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
From 297cf8136ecd6a56520888fd28948393766b8ee7 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Olivari <mathieu@codeaurora.org>
|
||||
Date: Thu, 19 Feb 2015 20:27:39 -0800
|
||||
Subject: [PATCH 2/3] ARM: qcom: add description of KPSS WDT for IPQ8064
|
||||
|
||||
Add the watchdog related entries to the Krait Processor Sub-system
|
||||
(KPSS) timer IPQ8064 devicetree section. Also, add a fixed-clock
|
||||
description of SLEEP_CLK, which will do for now.
|
||||
|
||||
Signed-off-by: Josh Cartwright <joshc@codeaurora.org>
|
||||
Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
|
||||
---
|
||||
arch/arm/boot/dts/qcom-ipq8064.dtsi | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/qcom-ipq8064.dtsi b/arch/arm/boot/dts/qcom-ipq8064.dtsi
|
||||
index cb225da..d01f618 100644
|
||||
--- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
|
||||
+++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
|
||||
@@ -60,6 +60,14 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ clocks {
|
||||
+ sleep_clk: sleep_clk {
|
||||
+ compatible = "fixed-clock";
|
||||
+ clock-frequency = <32768>;
|
||||
+ #clock-cells = <0>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
soc: soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
@@ -89,10 +97,14 @@
|
||||
compatible = "qcom,kpss-timer", "qcom,msm-timer";
|
||||
interrupts = <1 1 0x301>,
|
||||
<1 2 0x301>,
|
||||
- <1 3 0x301>;
|
||||
+ <1 3 0x301>,
|
||||
+ <1 4 0x301>,
|
||||
+ <1 5 0x301>;
|
||||
reg = <0x0200a000 0x100>;
|
||||
clock-frequency = <25000000>,
|
||||
<32768>;
|
||||
+ clocks = <&sleep_clk>;
|
||||
+ clock-names = "sleep";
|
||||
cpu-offset = <0x80000>;
|
||||
};
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
From e535f01dffb6dd9e09934fa219be52af3437a8f6 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Olivari <mathieu@codeaurora.org>
|
||||
Date: Thu, 19 Feb 2015 20:36:27 -0800
|
||||
Subject: [PATCH 3/3] ARM: msm: add watchdog entries to DT timer binding doc
|
||||
|
||||
The watchdog has been reworked to use the same DT node as the timer.
|
||||
This change is updating the device tree doc accordingly.
|
||||
|
||||
Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
|
||||
---
|
||||
Documentation/devicetree/bindings/arm/msm/timer.txt | 16 +++++++++++++---
|
||||
1 file changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/Documentation/devicetree/bindings/arm/msm/timer.txt
|
||||
+++ b/Documentation/devicetree/bindings/arm/msm/timer.txt
|
||||
@@ -9,11 +9,17 @@ Properties:
|
||||
"qcom,scss-timer" - scorpion subsystem
|
||||
|
||||
- interrupts : Interrupts for the the debug timer, the first general purpose
|
||||
- timer, and optionally a second general purpose timer in that
|
||||
- order.
|
||||
+ timer, and optionally a second general purpose timer, and
|
||||
+ optionally as well, 2 watchdog interrupts, in that order.
|
||||
|
||||
- reg : Specifies the base address of the timer registers.
|
||||
|
||||
+- clocks: Reference to the parent clocks, one per output clock. The parents
|
||||
+ must appear in the same order as the clock names.
|
||||
+
|
||||
+- clock-names: The name of the clocks as free-form strings. They should be in
|
||||
+ the same order as the clocks.
|
||||
+
|
||||
- clock-frequency : The frequency of the debug timer and the general purpose
|
||||
timer(s) in Hz in that order.
|
||||
|
||||
@@ -29,9 +35,13 @@ Example:
|
||||
compatible = "qcom,scss-timer", "qcom,msm-timer";
|
||||
interrupts = <1 1 0x301>,
|
||||
<1 2 0x301>,
|
||||
- <1 3 0x301>;
|
||||
+ <1 3 0x301>,
|
||||
+ <1 4 0x301>,
|
||||
+ <1 5 0x301>;
|
||||
reg = <0x0200a000 0x100>;
|
||||
clock-frequency = <19200000>,
|
||||
<32768>;
|
||||
+ clocks = <&sleep_clk>;
|
||||
+ clock-names = "sleep";
|
||||
cpu-offset = <0x40000>;
|
||||
};
|
Loading…
Reference in a new issue