[PATCH] ppc32: Add soft reset to MPC834x
This change allows mpc83xx_restart to issue a software reset. Signed-off-by: Randy Vinson <rvinson@mvista.com> Signed-off-by: Kumar Gala <kumar.gala@freescale.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
ff945023c6
commit
f9e4a00582
2 changed files with 34 additions and 0 deletions
|
@ -28,6 +28,12 @@
|
||||||
#define BCSR_PHYS_ADDR ((uint)0xf8000000)
|
#define BCSR_PHYS_ADDR ((uint)0xf8000000)
|
||||||
#define BCSR_SIZE ((uint)(32 * 1024))
|
#define BCSR_SIZE ((uint)(32 * 1024))
|
||||||
|
|
||||||
|
#define BCSR_MISC_REG2_OFF 0x07
|
||||||
|
#define BCSR_MISC_REG2_PORESET 0x01
|
||||||
|
|
||||||
|
#define BCSR_MISC_REG3_OFF 0x08
|
||||||
|
#define BCSR_MISC_REG3_CNFLOCK 0x80
|
||||||
|
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
/* PCI interrupt controller */
|
/* PCI interrupt controller */
|
||||||
#define PIRQA MPC83xx_IRQ_IRQ4
|
#define PIRQA MPC83xx_IRQ_IRQ4
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <asm/mmu.h>
|
#include <asm/mmu.h>
|
||||||
#include <asm/ppc_sys.h>
|
#include <asm/ppc_sys.h>
|
||||||
#include <asm/kgdb.h>
|
#include <asm/kgdb.h>
|
||||||
|
#include <asm/delay.h>
|
||||||
|
|
||||||
#include <syslib/ppc83xx_setup.h>
|
#include <syslib/ppc83xx_setup.h>
|
||||||
|
|
||||||
|
@ -117,7 +118,34 @@ mpc83xx_early_serial_map(void)
|
||||||
void
|
void
|
||||||
mpc83xx_restart(char *cmd)
|
mpc83xx_restart(char *cmd)
|
||||||
{
|
{
|
||||||
|
volatile unsigned char __iomem *reg;
|
||||||
|
unsigned char tmp;
|
||||||
|
|
||||||
|
reg = ioremap(BCSR_PHYS_ADDR, BCSR_SIZE);
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unlock the BCSR bits so a PRST will update the contents.
|
||||||
|
* Otherwise the reset asserts but doesn't clear.
|
||||||
|
*/
|
||||||
|
tmp = in_8(reg + BCSR_MISC_REG3_OFF);
|
||||||
|
tmp |= BCSR_MISC_REG3_CNFLOCK; /* low true, high false */
|
||||||
|
out_8(reg + BCSR_MISC_REG3_OFF, tmp);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Trigger a reset via a low->high transition of the
|
||||||
|
* PORESET bit.
|
||||||
|
*/
|
||||||
|
tmp = in_8(reg + BCSR_MISC_REG2_OFF);
|
||||||
|
tmp &= ~BCSR_MISC_REG2_PORESET;
|
||||||
|
out_8(reg + BCSR_MISC_REG2_OFF, tmp);
|
||||||
|
|
||||||
|
udelay(1);
|
||||||
|
|
||||||
|
tmp |= BCSR_MISC_REG2_PORESET;
|
||||||
|
out_8(reg + BCSR_MISC_REG2_OFF, tmp);
|
||||||
|
|
||||||
for(;;);
|
for(;;);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue