|
@@ -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();
|
|
|
}
|