mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
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,
|
.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) {
|
|||||||
.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);
|
|||||||
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 @@
|
|||||||
#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();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user