Commit a8dbceb7 authored by Anatolij Gustschin's avatar Anatolij Gustschin Committed by Grant Likely

powerpc/mpc5121: Add machine restart support

Add reset module registers representation and
machine restart callback for mpc5121 platform.
Signed-off-by: default avatarPiotr Ziecik <kosmo@semihalf.com>
Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
Signed-off-by: default avatarAnatolij Gustschin <agust@denx.de>
Reviewed-by: default avatarWolfram Sang <w.sang@pengutronix.de>
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
parent 284ed66f
/*
* 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) { ...@@ -68,4 +68,5 @@ define_machine(mpc5121_ads) {
.init_IRQ = mpc5121_ads_init_IRQ, .init_IRQ = mpc5121_ads_init_IRQ,
.get_irq = ipic_get_irq, .get_irq = ipic_get_irq,
.calibrate_decr = generic_calibrate_decr, .calibrate_decr = generic_calibrate_decr,
.restart = mpc512x_restart,
}; };
...@@ -55,4 +55,5 @@ define_machine(mpc5121_generic) { ...@@ -55,4 +55,5 @@ define_machine(mpc5121_generic) {
.init_IRQ = mpc512x_init_IRQ, .init_IRQ = mpc512x_init_IRQ,
.get_irq = ipic_get_irq, .get_irq = ipic_get_irq,
.calibrate_decr = generic_calibrate_decr, .calibrate_decr = generic_calibrate_decr,
.restart = mpc512x_restart,
}; };
...@@ -15,4 +15,5 @@ extern void __init mpc512x_init_IRQ(void); ...@@ -15,4 +15,5 @@ extern void __init mpc512x_init_IRQ(void);
extern void __init mpc512x_init(void); extern void __init mpc512x_init(void);
extern int __init mpc5121_clk_init(void); extern int __init mpc5121_clk_init(void);
void __init mpc512x_declare_of_platform_devices(void); void __init mpc512x_declare_of_platform_devices(void);
extern void mpc512x_restart(char *cmd);
#endif /* __MPC512X_H__ */ #endif /* __MPC512X_H__ */
...@@ -21,9 +21,38 @@ ...@@ -21,9 +21,38 @@
#include <asm/ipic.h> #include <asm/ipic.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/time.h> #include <asm/time.h>
#include <asm/mpc5121.h>
#include "mpc512x.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) void __init mpc512x_init_IRQ(void)
{ {
struct device_node *np; struct device_node *np;
...@@ -62,4 +91,5 @@ void __init mpc512x_init(void) ...@@ -62,4 +91,5 @@ void __init mpc512x_init(void)
{ {
mpc512x_declare_of_platform_devices(); mpc512x_declare_of_platform_devices();
mpc5121_clk_init(); mpc5121_clk_init();
mpc512x_restart_init();
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment