at91: add kernel support for sama7g5 soc
[openwrt/staging/mkresin.git] / target / linux / at91 / patches-5.10 / 210-ARM-at91-pm-add-support-for-2.5V-LDO-regulator-contr.patch
diff --git a/target/linux/at91/patches-5.10/210-ARM-at91-pm-add-support-for-2.5V-LDO-regulator-contr.patch b/target/linux/at91/patches-5.10/210-ARM-at91-pm-add-support-for-2.5V-LDO-regulator-contr.patch
new file mode 100644 (file)
index 0000000..48638fa
--- /dev/null
@@ -0,0 +1,86 @@
+From b2073cc043612bf95b115bd94103cfb2936f05bf Mon Sep 17 00:00:00 2001
+From: Claudiu Beznea <claudiu.beznea@microchip.com>
+Date: Thu, 15 Apr 2021 13:50:00 +0300
+Subject: [PATCH 210/247] ARM: at91: pm: add support for 2.5V LDO regulator
+ control
+
+Add support to disable/enable 2.5V LDO regulator when entering/exiting
+any ULP mode.
+
+Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
+Signed-off-by: Nicolas Ferre <nicolas.ferre@microchip.com>
+Link: https://lore.kernel.org/r/20210415105010.569620-15-claudiu.beznea@microchip.com
+---
+ arch/arm/mach-at91/pm.h         |  1 +
+ arch/arm/mach-at91/pm_suspend.S | 29 +++++++++++++++++++++++++++++
+ 2 files changed, 30 insertions(+)
+
+diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
+index 666474088d55..53bdc9000e44 100644
+--- a/arch/arm/mach-at91/pm.h
++++ b/arch/arm/mach-at91/pm.h
+@@ -13,6 +13,7 @@
+ #include <soc/at91/at91sam9_ddrsdr.h>
+ #include <soc/at91/at91sam9_sdramc.h>
+ #include <soc/at91/sama7-ddr.h>
++#include <soc/at91/sama7-sfrbu.h>
+ #define AT91_MEMCTRL_MC               0
+ #define AT91_MEMCTRL_SDRAMC   1
+diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
+index 8b0b8619ee8a..9c9e08fd8300 100644
+--- a/arch/arm/mach-at91/pm_suspend.S
++++ b/arch/arm/mach-at91/pm_suspend.S
+@@ -83,6 +83,29 @@ tmp3        .req    r6
+       .endm
++/**
++ * Set state for 2.5V low power regulator
++ * @ena: 0 - disable regulator
++ *     1 - enable regulator
++ *
++ * Side effects: overwrites r7, r8, r9, r10
++ */
++      .macro at91_2_5V_reg_set_low_power ena
++#ifdef CONFIG_SOC_SAMA7
++      ldr     r7, .sfrbu
++      mov     r8, #\ena
++      ldr     r9, [r7, #AT91_SFRBU_25LDOCR]
++      orr     r9, r9, #AT91_SFRBU_25LDOCR_LP
++      cmp     r8, #1
++      beq     lp_done_\ena
++      bic     r9, r9, #AT91_SFRBU_25LDOCR_LP
++lp_done_\ena:
++      ldr     r10, =AT91_SFRBU_25LDOCR_LDOANAKEY
++      orr     r9, r9, r10
++      str     r9, [r7, #AT91_SFRBU_25LDOCR]
++#endif
++      .endm
++
+       .text
+       .arm
+@@ -906,6 +929,9 @@ save_mck:
+       at91_plla_disable
++      /* Enable low power mode for 2.5V regulator. */
++      at91_2_5V_reg_set_low_power 1
++
+       ldr     tmp3, .pm_mode
+       cmp     tmp3, #AT91_PM_ULP1
+       beq     ulp1_mode
+@@ -918,6 +944,9 @@ ulp1_mode:
+       b       ulp_exit
+ ulp_exit:
++      /* Disable low power mode for 2.5V regulator. */
++      at91_2_5V_reg_set_low_power 0
++
+       ldr     pmc, .pmc_base
+       at91_plla_enable
+-- 
+2.32.0
+