Add an out of tree patch to fix reset on IPQ806x. Patch is available on codeaurora.org but needs to be cleaned-up and upstreamed properly at some point.
Signed-off-by: Mathieu Olivari <math...@codeaurora.org> --- .../003-HACK-qcom-make-restart-work-w-IPQ.patch | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 target/linux/ipq806x/patches/003-HACK-qcom-make-restart-work-w-IPQ.patch diff --git a/target/linux/ipq806x/patches/003-HACK-qcom-make-restart-work-w-IPQ.patch b/target/linux/ipq806x/patches/003-HACK-qcom-make-restart-work-w-IPQ.patch new file mode 100644 index 0000000..6a82ac4 --- /dev/null +++ b/target/linux/ipq806x/patches/003-HACK-qcom-make-restart-work-w-IPQ.patch @@ -0,0 +1,65 @@ +From 1e09cb4ab430cac62687bd1e5cf796a654f4d78d Mon Sep 17 00:00:00 2001 +From: Josh Cartwright <jo...@codeaurora.org> +Date: Mon, 8 Sep 2014 00:15:40 -0500 +Subject: [PATCH] HACK: qcom: make restart work w/ IPQ + +Make use of the watchdog to trigger a reset. This is hacky for a +variety of reasons: + - Other mechanisms should be used on other systems proper PS_HOLD + handling + - This doesn't belong in the board file. It should belong in a + watchdog driver. + - As a proper driver, it should make use of device tree to query the + start of the register region + +Change-Id: Ib5ca21a42ac64e0812186d31a87c8d63d49976c2 +Signed-off-by: Josh Cartwright <jo...@codeaurora.org> +--- + arch/arm/mach-qcom/board.c | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +diff --git a/arch/arm/mach-qcom/board.c b/arch/arm/mach-qcom/board.c +index 6d8bbf7..7c6891d 100644 +--- a/arch/arm/mach-qcom/board.c ++++ b/arch/arm/mach-qcom/board.c +@@ -11,8 +11,37 @@ + */ + + #include <linux/init.h> ++#include <linux/io.h> ++#include <linux/kernel.h> + + #include <asm/mach/arch.h> ++#include <asm/system_misc.h> ++ ++static void __iomem *wdt; ++ ++#define WDT0_RST 0x38 ++#define WDT0_EN 0x40 ++#define WDT0_BARK_TIME 0x4C ++#define WDT0_BITE_TIME 0x5C ++ ++static void wdt_restart(enum reboot_mode reboot_mode, const char *cmd) ++{ ++ writel_relaxed(1, wdt + WDT0_RST); ++ writel_relaxed(5*0x31F3, wdt + WDT0_BARK_TIME); ++ writel_relaxed(0x31F3, wdt + WDT0_BITE_TIME); ++ writel_relaxed(1, wdt + WDT0_EN); ++} ++ ++static int wdt_init(void) ++{ ++ wdt = ioremap(0x0200A000, 4096); ++ if (!wdt) ++ return -EINVAL; ++ ++ arm_pm_restart = wdt_restart; ++ return 0; ++} ++late_initcall(wdt_init); + + static const char * const qcom_dt_match[] __initconst = { + "qcom,apq8064", +-- +1.9.1 + -- 1.9.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel