aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-tegra/pmc.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/pmc.c')
-rw-r--r--arch/arm/mach-tegra/pmc.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/pmc.c b/arch/arm/mach-tegra/pmc.c
index fb7920201ab4..7c7123e7557b 100644
--- a/arch/arm/mach-tegra/pmc.c
+++ b/arch/arm/mach-tegra/pmc.c
@@ -41,6 +41,14 @@
41#define PMC_REMOVE_CLAMPING 0x34 41#define PMC_REMOVE_CLAMPING 0x34
42#define PMC_PWRGATE_STATUS 0x38 42#define PMC_PWRGATE_STATUS 0x38
43 43
44#define PMC_SCRATCH0 0x50
45#define PMC_SCRATCH0_MODE_RECOVERY (1 << 31)
46#define PMC_SCRATCH0_MODE_BOOTLOADER (1 << 30)
47#define PMC_SCRATCH0_MODE_RCM (1 << 1)
48#define PMC_SCRATCH0_MODE_MASK (PMC_SCRATCH0_MODE_RECOVERY | \
49 PMC_SCRATCH0_MODE_BOOTLOADER | \
50 PMC_SCRATCH0_MODE_RCM)
51
44#define PMC_CPUPWRGOOD_TIMER 0xc8 52#define PMC_CPUPWRGOOD_TIMER 0xc8
45#define PMC_CPUPWROFF_TIMER 0xcc 53#define PMC_CPUPWROFF_TIMER 0xcc
46 54
@@ -165,6 +173,22 @@ void tegra_pmc_restart(enum reboot_mode mode, const char *cmd)
165{ 173{
166 u32 val; 174 u32 val;
167 175
176 val = tegra_pmc_readl(PMC_SCRATCH0);
177 val &= ~PMC_SCRATCH0_MODE_MASK;
178
179 if (cmd) {
180 if (strcmp(cmd, "recovery") == 0)
181 val |= PMC_SCRATCH0_MODE_RECOVERY;
182
183 if (strcmp(cmd, "bootloader") == 0)
184 val |= PMC_SCRATCH0_MODE_BOOTLOADER;
185
186 if (strcmp(cmd, "forced-recovery") == 0)
187 val |= PMC_SCRATCH0_MODE_RCM;
188 }
189
190 tegra_pmc_writel(val, PMC_SCRATCH0);
191
168 val = tegra_pmc_readl(0); 192 val = tegra_pmc_readl(0);
169 val |= 0x10; 193 val |= 0x10;
170 tegra_pmc_writel(val, 0); 194 tegra_pmc_writel(val, 0);