diff options
author | Gaurav Sarode <gsarode@nvidia.com> | 2012-02-27 21:54:30 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-03-01 16:55:30 -0800 |
commit | 7e782c0362e5ac5c925af8d7567a09e7dcbc74f0 (patch) | |
tree | 6664044f1df53144fc2b3884112d821dccef7cea /arch/arm/mach-tegra/common.c | |
parent | a6a05e492f2021883a5757ef3d4643fe9b0986e0 (diff) |
ARM: tegra: Add support for passing arguments to bootloader.
PMC SCRATCH register 0 holds value across warmboot.
Storing values in bit31:30 for recovery and fastboot.
This requires change in bootloader as well to parse these arguments.
Bug 863014
Change-Id: I1d4b752dbc6dd7b065e9d0cc87df189e7caeb201
Signed-off-by: Gaurav Sarode <gsarode@nvidia.com>
Reviewed-on: http://git-master/r/86140
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/common.c')
-rw-r--r-- | arch/arm/mach-tegra/common.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index cf4ad3ae3515..ac19626e02d6 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -59,6 +59,9 @@ #define ENB_FAST_REARBITRATE BIT(2) #define DONT_SPLIT_AHB_WR BIT(7) +#define RECOVERY_MODE BIT(31) +#define BOOTLOADER_MODE BIT(30) + #define AHB_GIZMO_USB 0x1c #define AHB_GIZMO_USB2 0x78 #define AHB_GIZMO_USB3 0x7c @@ -113,6 +116,19 @@ void tegra_assert_system_reset(char mode, const char *cmd) void __iomem *reset = IO_ADDRESS(TEGRA_PMC_BASE + 0x00); u32 reg; + reg = readl_relaxed(reset + PMC_SCRATCH0); + /* Writing recovery kernel or Bootloader mode in SCRATCH0 31:30 */ + if (cmd) { + if (!strcmp(cmd, "recovery")) + reg |= RECOVERY_MODE; + else if (!strcmp(cmd, "bootloader")) + reg |= BOOTLOADER_MODE; + } + else { + /* Clearing SCRATCH0 31:30 on default reboot */ + reg &= ~(BOOTLOADER_MODE | RECOVERY_MODE); + } + writel_relaxed(reg, reset + PMC_SCRATCH0); /* use *_related to avoid spinlock since caches are off */ reg = readl_relaxed(reset); reg |= 0x10; |