aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudiu Beznea <claudiu.beznea@microchip.com>2019-02-14 10:54:41 -0500
committerLudovic Desroches <ludovic.desroches@microchip.com>2019-03-28 06:05:53 -0400
commit01c7031cfa7308c2a6d46636bda2e51be6474cf4 (patch)
tree3821515be5353d1ce47dcc251b7c393a976ff4f6
parentdb9630273f90a328eabef48fe46589b6af3f8ab9 (diff)
ARM: at91: pm: initial PM support for SAM9X60
Add initial PM support for SAM9X60. This include idle, WFI and ULP0. Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Ludovic Desroches <ludovic.desroches@microchip.com>
-rw-r--r--arch/arm/mach-at91/at91sam9.c18
-rw-r--r--arch/arm/mach-at91/generic.h2
-rw-r--r--arch/arm/mach-at91/pm.c14
3 files changed, 34 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/at91sam9.c b/arch/arm/mach-at91/at91sam9.c
index 3dbdef4d3cbf..c12563b09656 100644
--- a/arch/arm/mach-at91/at91sam9.c
+++ b/arch/arm/mach-at91/at91sam9.c
@@ -32,3 +32,21 @@ DT_MACHINE_START(at91sam_dt, "Atmel AT91SAM9")
32 .init_machine = at91sam9_init, 32 .init_machine = at91sam9_init,
33 .dt_compat = at91_dt_board_compat, 33 .dt_compat = at91_dt_board_compat,
34MACHINE_END 34MACHINE_END
35
36static void __init sam9x60_init(void)
37{
38 of_platform_default_populate(NULL, NULL, NULL);
39
40 sam9x60_pm_init();
41}
42
43static const char *const sam9x60_dt_board_compat[] __initconst = {
44 "microchip,sam9x60",
45 NULL
46};
47
48DT_MACHINE_START(sam9x60_dt, "Microchip SAM9X60")
49 /* Maintainer: Microchip */
50 .init_machine = sam9x60_init,
51 .dt_compat = sam9x60_dt_board_compat,
52MACHINE_END
diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h
index e2bd17237964..72b45accfa0f 100644
--- a/arch/arm/mach-at91/generic.h
+++ b/arch/arm/mach-at91/generic.h
@@ -14,11 +14,13 @@
14#ifdef CONFIG_PM 14#ifdef CONFIG_PM
15extern void __init at91rm9200_pm_init(void); 15extern void __init at91rm9200_pm_init(void);
16extern void __init at91sam9_pm_init(void); 16extern void __init at91sam9_pm_init(void);
17extern void __init sam9x60_pm_init(void);
17extern void __init sama5_pm_init(void); 18extern void __init sama5_pm_init(void);
18extern void __init sama5d2_pm_init(void); 19extern void __init sama5d2_pm_init(void);
19#else 20#else
20static inline void __init at91rm9200_pm_init(void) { } 21static inline void __init at91rm9200_pm_init(void) { }
21static inline void __init at91sam9_pm_init(void) { } 22static inline void __init at91sam9_pm_init(void) { }
23static inline void __init sam9x60_pm_init(void) { }
22static inline void __init sama5_pm_init(void) { } 24static inline void __init sama5_pm_init(void) { }
23static inline void __init sama5d2_pm_init(void) { } 25static inline void __init sama5d2_pm_init(void) { }
24#endif 26#endif
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index ce2ff86968f6..e42db02eafe4 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -518,6 +518,11 @@ static void at91rm9200_idle(void)
518 writel(AT91_PMC_PCK, soc_pm.data.pmc + AT91_PMC_SCDR); 518 writel(AT91_PMC_PCK, soc_pm.data.pmc + AT91_PMC_SCDR);
519} 519}
520 520
521static void at91sam9x60_idle(void)
522{
523 cpu_do_idle();
524}
525
521static void at91sam9_idle(void) 526static void at91sam9_idle(void)
522{ 527{
523 writel(AT91_PMC_PCK, soc_pm.data.pmc + AT91_PMC_SCDR); 528 writel(AT91_PMC_PCK, soc_pm.data.pmc + AT91_PMC_SCDR);
@@ -754,6 +759,15 @@ void __init at91rm9200_pm_init(void)
754 at91_pm_init(at91rm9200_idle); 759 at91_pm_init(at91rm9200_idle);
755} 760}
756 761
762void __init sam9x60_pm_init(void)
763{
764 if (!IS_ENABLED(CONFIG_SOC_AT91SAM9))
765 return;
766
767 at91_dt_ramc();
768 at91_pm_init(at91sam9x60_idle);
769}
770
757void __init at91sam9_pm_init(void) 771void __init at91sam9_pm_init(void)
758{ 772{
759 if (!IS_ENABLED(CONFIG_SOC_AT91SAM9)) 773 if (!IS_ENABLED(CONFIG_SOC_AT91SAM9))