Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 355516
b: refs/heads/master
c: 45e9d77
h: refs/heads/master
v: v3
  • Loading branch information
Dom Cobley authored and Stephen Warren committed Jan 15, 2013
1 parent 7e75272 commit 236dc2d
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 526d239c301e6cb7fe6657642c43d6c524590745
refs/heads/master: 45e9d77a22b7b25373c7b8c0ea0b146168025360
28 changes: 28 additions & 0 deletions trunk/arch/arm/mach-bcm2835/bcm2835.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,13 @@
#include <mach/bcm2835_soc.h>

#define PM_RSTC 0x1c
#define PM_RSTS 0x20
#define PM_WDOG 0x24

#define PM_PASSWORD 0x5a000000
#define PM_RSTC_WRCFG_MASK 0x00000030
#define PM_RSTC_WRCFG_FULL_RESET 0x00000020
#define PM_RSTS_HADWRH_SET 0x00000040

static void __iomem *wdt_regs;

Expand Down Expand Up @@ -67,6 +69,29 @@ static void bcm2835_restart(char mode, const char *cmd)
mdelay(1);
}

/*
* We can't really power off, but if we do the normal reset scheme, and
* indicate to bootcode.bin not to reboot, then most of the chip will be
* powered off.
*/
static void bcm2835_power_off(void)
{
u32 val;

/*
* We set the watchdog hard reset bit here to distinguish this reset
* from the normal (full) reset. bootcode.bin will not reboot after a
* hard reset.
*/
val = readl_relaxed(wdt_regs + PM_RSTS);
val &= ~PM_RSTC_WRCFG_MASK;
val |= PM_PASSWORD | PM_RSTS_HADWRH_SET;
writel_relaxed(val, wdt_regs + PM_RSTS);

/* Continue with normal reset mechanism */
bcm2835_restart(0, "");
}

static struct map_desc io_map __initdata = {
.virtual = BCM2835_PERIPH_VIRT,
.pfn = __phys_to_pfn(BCM2835_PERIPH_PHYS),
Expand All @@ -84,6 +109,9 @@ static void __init bcm2835_init(void)
int ret;

bcm2835_setup_restart();
if (wdt_regs)
pm_power_off = bcm2835_power_off;

bcm2835_init_clocks();

ret = of_platform_populate(NULL, of_default_bus_match_table, NULL,
Expand Down

0 comments on commit 236dc2d

Please sign in to comment.