From 087c9f50bff0e22d675b7308b7c27c8b3dc0d490 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 23 Aug 2010 18:37:25 -0700 Subject: [PATCH] [ARM] tegra: Allow overriding arch_reset Change-Id: Iba7ab5af149724dae8caab76f044e5b12d6b0436 Signed-off-by: Colin Cross --- arch/arm/mach-tegra/common.c | 3 +++ arch/arm/mach-tegra/include/mach/system.h | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index 7c91e2b9d643..f0ba3b439255 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -26,11 +26,14 @@ #include #include +#include #include "board.h" #include "clock.h" #include "fuse.h" +void (*tegra_reset)(char mode, const char *cmd); + static __initdata struct tegra_clk_init_table common_clk_init_table[] = { /* name parent rate enabled */ { "clk_m", NULL, 0, true }, diff --git a/arch/arm/mach-tegra/include/mach/system.h b/arch/arm/mach-tegra/include/mach/system.h index 84d5d46113f7..70c95ac93355 100644 --- a/arch/arm/mach-tegra/include/mach/system.h +++ b/arch/arm/mach-tegra/include/mach/system.h @@ -24,16 +24,30 @@ #include #include +extern void (*tegra_reset)(char mode, const char *cmd); + static inline void arch_idle(void) { } -static inline void arch_reset(char mode, const char *cmd) +static inline void tegra_assert_system_reset(void) { void __iomem *reset = IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x04); - u32 reg = readl(reset); + u32 reg; + + reg = readl(reset); reg |= 0x04; writel(reg, reset); } +static inline void arch_reset(char mode, const char *cmd) +{ + if (tegra_reset) + tegra_reset(mode, cmd); + else + tegra_assert_system_reset(); + + do { } while (1); +} + #endif -- 2.34.1