diff options
| author | Claudiu Beznea <claudiu.beznea@microchip.com> | 2019-02-14 10:54:41 -0500 |
|---|---|---|
| committer | Ludovic Desroches <ludovic.desroches@microchip.com> | 2019-03-28 06:05:53 -0400 |
| commit | 01c7031cfa7308c2a6d46636bda2e51be6474cf4 (patch) | |
| tree | 3821515be5353d1ce47dcc251b7c393a976ff4f6 | |
| parent | db9630273f90a328eabef48fe46589b6af3f8ab9 (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.c | 18 | ||||
| -rw-r--r-- | arch/arm/mach-at91/generic.h | 2 | ||||
| -rw-r--r-- | arch/arm/mach-at91/pm.c | 14 |
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, |
| 34 | MACHINE_END | 34 | MACHINE_END |
| 35 | |||
| 36 | static void __init sam9x60_init(void) | ||
| 37 | { | ||
| 38 | of_platform_default_populate(NULL, NULL, NULL); | ||
| 39 | |||
| 40 | sam9x60_pm_init(); | ||
| 41 | } | ||
| 42 | |||
| 43 | static const char *const sam9x60_dt_board_compat[] __initconst = { | ||
| 44 | "microchip,sam9x60", | ||
| 45 | NULL | ||
| 46 | }; | ||
| 47 | |||
| 48 | DT_MACHINE_START(sam9x60_dt, "Microchip SAM9X60") | ||
| 49 | /* Maintainer: Microchip */ | ||
| 50 | .init_machine = sam9x60_init, | ||
| 51 | .dt_compat = sam9x60_dt_board_compat, | ||
| 52 | MACHINE_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 |
| 15 | extern void __init at91rm9200_pm_init(void); | 15 | extern void __init at91rm9200_pm_init(void); |
| 16 | extern void __init at91sam9_pm_init(void); | 16 | extern void __init at91sam9_pm_init(void); |
| 17 | extern void __init sam9x60_pm_init(void); | ||
| 17 | extern void __init sama5_pm_init(void); | 18 | extern void __init sama5_pm_init(void); |
| 18 | extern void __init sama5d2_pm_init(void); | 19 | extern void __init sama5d2_pm_init(void); |
| 19 | #else | 20 | #else |
| 20 | static inline void __init at91rm9200_pm_init(void) { } | 21 | static inline void __init at91rm9200_pm_init(void) { } |
| 21 | static inline void __init at91sam9_pm_init(void) { } | 22 | static inline void __init at91sam9_pm_init(void) { } |
| 23 | static inline void __init sam9x60_pm_init(void) { } | ||
| 22 | static inline void __init sama5_pm_init(void) { } | 24 | static inline void __init sama5_pm_init(void) { } |
| 23 | static inline void __init sama5d2_pm_init(void) { } | 25 | static 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 | ||
| 521 | static void at91sam9x60_idle(void) | ||
| 522 | { | ||
| 523 | cpu_do_idle(); | ||
| 524 | } | ||
| 525 | |||
| 521 | static void at91sam9_idle(void) | 526 | static 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 | ||
| 762 | void __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 | |||
| 757 | void __init at91sam9_pm_init(void) | 771 | void __init at91sam9_pm_init(void) |
| 758 | { | 772 | { |
| 759 | if (!IS_ENABLED(CONFIG_SOC_AT91SAM9)) | 773 | if (!IS_ENABLED(CONFIG_SOC_AT91SAM9)) |
