forked from Minki/linux
powerpc/mpc5121: Add machine restart support
Add reset module registers representation and machine restart callback for mpc5121 platform. Signed-off-by: Piotr Ziecik <kosmo@semihalf.com> Signed-off-by: Wolfgang Denk <wd@denx.de> Signed-off-by: Anatolij Gustschin <agust@denx.de> Reviewed-by: Wolfram Sang <w.sang@pengutronix.de> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
284ed66fc3
commit
a8dbceb755
24
arch/powerpc/include/asm/mpc5121.h
Normal file
24
arch/powerpc/include/asm/mpc5121.h
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* MPC5121 Prototypes and definitions
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_POWERPC_MPC5121_H__
|
||||
#define __ASM_POWERPC_MPC5121_H__
|
||||
|
||||
/* MPC512x Reset module registers */
|
||||
struct mpc512x_reset_module {
|
||||
u32 rcwlr; /* Reset Configuration Word Low Register */
|
||||
u32 rcwhr; /* Reset Configuration Word High Register */
|
||||
u32 reserved1;
|
||||
u32 reserved2;
|
||||
u32 rsr; /* Reset Status Register */
|
||||
u32 rmr; /* Reset Mode Register */
|
||||
u32 rpr; /* Reset Protection Register */
|
||||
u32 rcr; /* Reset Control Register */
|
||||
u32 rcer; /* Reset Control Enable Register */
|
||||
};
|
||||
|
||||
#endif /* __ASM_POWERPC_MPC5121_H__ */
|
@ -68,4 +68,5 @@ define_machine(mpc5121_ads) {
|
||||
.init_IRQ = mpc5121_ads_init_IRQ,
|
||||
.get_irq = ipic_get_irq,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.restart = mpc512x_restart,
|
||||
};
|
||||
|
@ -55,4 +55,5 @@ define_machine(mpc5121_generic) {
|
||||
.init_IRQ = mpc512x_init_IRQ,
|
||||
.get_irq = ipic_get_irq,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.restart = mpc512x_restart,
|
||||
};
|
||||
|
@ -15,4 +15,5 @@ extern void __init mpc512x_init_IRQ(void);
|
||||
extern void __init mpc512x_init(void);
|
||||
extern int __init mpc5121_clk_init(void);
|
||||
void __init mpc512x_declare_of_platform_devices(void);
|
||||
extern void mpc512x_restart(char *cmd);
|
||||
#endif /* __MPC512X_H__ */
|
||||
|
@ -21,9 +21,38 @@
|
||||
#include <asm/ipic.h>
|
||||
#include <asm/prom.h>
|
||||
#include <asm/time.h>
|
||||
#include <asm/mpc5121.h>
|
||||
|
||||
#include "mpc512x.h"
|
||||
|
||||
static struct mpc512x_reset_module __iomem *reset_module_base;
|
||||
|
||||
static void __init mpc512x_restart_init(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,mpc5121-reset");
|
||||
if (!np)
|
||||
return;
|
||||
|
||||
reset_module_base = of_iomap(np, 0);
|
||||
of_node_put(np);
|
||||
}
|
||||
|
||||
void mpc512x_restart(char *cmd)
|
||||
{
|
||||
if (reset_module_base) {
|
||||
/* Enable software reset "RSTE" */
|
||||
out_be32(&reset_module_base->rpr, 0x52535445);
|
||||
/* Set software hard reset */
|
||||
out_be32(&reset_module_base->rcr, 0x2);
|
||||
} else {
|
||||
pr_err("Restart module not mapped.\n");
|
||||
}
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
void __init mpc512x_init_IRQ(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
@ -62,4 +91,5 @@ void __init mpc512x_init(void)
|
||||
{
|
||||
mpc512x_declare_of_platform_devices();
|
||||
mpc5121_clk_init();
|
||||
mpc512x_restart_init();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user