diff options
| author | Anatolij Gustschin <agust@denx.de> | 2010-02-16 12:36:26 -0500 |
|---|---|---|
| committer | Grant Likely <grant.likely@secretlab.ca> | 2010-02-16 12:36:26 -0500 |
| commit | a8dbceb755f82f760b56bac4283f9cfc7774e62b (patch) | |
| tree | e67da86732c70100ecfa137ac99eba47ec64aa2b | |
| parent | 284ed66fc3beca509a7549aae06af5c74023304c (diff) | |
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>
| -rw-r--r-- | arch/powerpc/include/asm/mpc5121.h | 24 | ||||
| -rw-r--r-- | arch/powerpc/platforms/512x/mpc5121_ads.c | 1 | ||||
| -rw-r--r-- | arch/powerpc/platforms/512x/mpc5121_generic.c | 1 | ||||
| -rw-r--r-- | arch/powerpc/platforms/512x/mpc512x.h | 1 | ||||
| -rw-r--r-- | arch/powerpc/platforms/512x/mpc512x_shared.c | 30 |
5 files changed, 57 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/mpc5121.h b/arch/powerpc/include/asm/mpc5121.h new file mode 100644 index 000000000000..e6a30bb1d16a --- /dev/null +++ b/arch/powerpc/include/asm/mpc5121.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | /* | ||
| 2 | * MPC5121 Prototypes and definitions | ||
| 3 | * | ||
| 4 | * This file is licensed under the terms of the GNU General Public | ||
| 5 | * License version 2. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef __ASM_POWERPC_MPC5121_H__ | ||
| 9 | #define __ASM_POWERPC_MPC5121_H__ | ||
| 10 | |||
| 11 | /* MPC512x Reset module registers */ | ||
| 12 | struct mpc512x_reset_module { | ||
| 13 | u32 rcwlr; /* Reset Configuration Word Low Register */ | ||
| 14 | u32 rcwhr; /* Reset Configuration Word High Register */ | ||
| 15 | u32 reserved1; | ||
| 16 | u32 reserved2; | ||
| 17 | u32 rsr; /* Reset Status Register */ | ||
| 18 | u32 rmr; /* Reset Mode Register */ | ||
| 19 | u32 rpr; /* Reset Protection Register */ | ||
| 20 | u32 rcr; /* Reset Control Register */ | ||
| 21 | u32 rcer; /* Reset Control Enable Register */ | ||
| 22 | }; | ||
| 23 | |||
| 24 | #endif /* __ASM_POWERPC_MPC5121_H__ */ | ||
diff --git a/arch/powerpc/platforms/512x/mpc5121_ads.c b/arch/powerpc/platforms/512x/mpc5121_ads.c index 0f8f2e96ee55..ee6ae129c25c 100644 --- a/arch/powerpc/platforms/512x/mpc5121_ads.c +++ b/arch/powerpc/platforms/512x/mpc5121_ads.c | |||
| @@ -68,4 +68,5 @@ define_machine(mpc5121_ads) { | |||
| 68 | .init_IRQ = mpc5121_ads_init_IRQ, | 68 | .init_IRQ = mpc5121_ads_init_IRQ, |
| 69 | .get_irq = ipic_get_irq, | 69 | .get_irq = ipic_get_irq, |
| 70 | .calibrate_decr = generic_calibrate_decr, | 70 | .calibrate_decr = generic_calibrate_decr, |
| 71 | .restart = mpc512x_restart, | ||
| 71 | }; | 72 | }; |
diff --git a/arch/powerpc/platforms/512x/mpc5121_generic.c b/arch/powerpc/platforms/512x/mpc5121_generic.c index 9b8c9b0bedfb..a6c0e3a2615d 100644 --- a/arch/powerpc/platforms/512x/mpc5121_generic.c +++ b/arch/powerpc/platforms/512x/mpc5121_generic.c | |||
| @@ -55,4 +55,5 @@ define_machine(mpc5121_generic) { | |||
| 55 | .init_IRQ = mpc512x_init_IRQ, | 55 | .init_IRQ = mpc512x_init_IRQ, |
| 56 | .get_irq = ipic_get_irq, | 56 | .get_irq = ipic_get_irq, |
| 57 | .calibrate_decr = generic_calibrate_decr, | 57 | .calibrate_decr = generic_calibrate_decr, |
| 58 | .restart = mpc512x_restart, | ||
| 58 | }; | 59 | }; |
diff --git a/arch/powerpc/platforms/512x/mpc512x.h b/arch/powerpc/platforms/512x/mpc512x.h index ac3da1a0c4e5..b2daca0d1488 100644 --- a/arch/powerpc/platforms/512x/mpc512x.h +++ b/arch/powerpc/platforms/512x/mpc512x.h | |||
| @@ -15,4 +15,5 @@ extern void __init mpc512x_init_IRQ(void); | |||
| 15 | extern void __init mpc512x_init(void); | 15 | extern void __init mpc512x_init(void); |
| 16 | extern int __init mpc5121_clk_init(void); | 16 | extern int __init mpc5121_clk_init(void); |
| 17 | void __init mpc512x_declare_of_platform_devices(void); | 17 | void __init mpc512x_declare_of_platform_devices(void); |
| 18 | extern void mpc512x_restart(char *cmd); | ||
| 18 | #endif /* __MPC512X_H__ */ | 19 | #endif /* __MPC512X_H__ */ |
diff --git a/arch/powerpc/platforms/512x/mpc512x_shared.c b/arch/powerpc/platforms/512x/mpc512x_shared.c index b683165a24e2..a45824af03fc 100644 --- a/arch/powerpc/platforms/512x/mpc512x_shared.c +++ b/arch/powerpc/platforms/512x/mpc512x_shared.c | |||
| @@ -21,9 +21,38 @@ | |||
| 21 | #include <asm/ipic.h> | 21 | #include <asm/ipic.h> |
| 22 | #include <asm/prom.h> | 22 | #include <asm/prom.h> |
| 23 | #include <asm/time.h> | 23 | #include <asm/time.h> |
| 24 | #include <asm/mpc5121.h> | ||
| 24 | 25 | ||
| 25 | #include "mpc512x.h" | 26 | #include "mpc512x.h" |
| 26 | 27 | ||
| 28 | static struct mpc512x_reset_module __iomem *reset_module_base; | ||
| 29 | |||
| 30 | static void __init mpc512x_restart_init(void) | ||
| 31 | { | ||
| 32 | struct device_node *np; | ||
| 33 | |||
| 34 | np = of_find_compatible_node(NULL, NULL, "fsl,mpc5121-reset"); | ||
| 35 | if (!np) | ||
| 36 | return; | ||
| 37 | |||
| 38 | reset_module_base = of_iomap(np, 0); | ||
| 39 | of_node_put(np); | ||
| 40 | } | ||
| 41 | |||
| 42 | void mpc512x_restart(char *cmd) | ||
| 43 | { | ||
| 44 | if (reset_module_base) { | ||
| 45 | /* Enable software reset "RSTE" */ | ||
| 46 | out_be32(&reset_module_base->rpr, 0x52535445); | ||
| 47 | /* Set software hard reset */ | ||
| 48 | out_be32(&reset_module_base->rcr, 0x2); | ||
| 49 | } else { | ||
| 50 | pr_err("Restart module not mapped.\n"); | ||
| 51 | } | ||
| 52 | for (;;) | ||
| 53 | ; | ||
| 54 | } | ||
| 55 | |||
| 27 | void __init mpc512x_init_IRQ(void) | 56 | void __init mpc512x_init_IRQ(void) |
| 28 | { | 57 | { |
| 29 | struct device_node *np; | 58 | struct device_node *np; |
| @@ -62,4 +91,5 @@ void __init mpc512x_init(void) | |||
| 62 | { | 91 | { |
| 63 | mpc512x_declare_of_platform_devices(); | 92 | mpc512x_declare_of_platform_devices(); |
| 64 | mpc5121_clk_init(); | 93 | mpc5121_clk_init(); |
| 94 | mpc512x_restart_init(); | ||
| 65 | } | 95 | } |
