mirror of https://github.com/hak5/openwrt.git
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: 44504lede-17.01
parent
5072954cd0
commit
565a6f2a27
|
@ -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 New Issue