Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+24 −0
Original line number Original line Diff line number Diff line
/*
 * 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__ */
+1 −0
Original line number Original line Diff line number Diff line
@@ -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,
};
};
+1 −0
Original line number Original line Diff line number Diff line
@@ -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,
};
};
+1 −0
Original line number Original line Diff line number Diff line
@@ -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__ */
+30 −0
Original line number Original line Diff line number Diff line
@@ -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)
{
{
	mpc512x_declare_of_platform_devices();
	mpc512x_declare_of_platform_devices();
	mpc5121_clk_init();
	mpc5121_clk_init();
	mpc512x_restart_init();
}
}