[v2,1/3] loongarch: export loongarch pm interface
Commit Message
Some Power Management Controllers need to support DTS and will use
the suspend interface thus this patch was to export such interface
for their use.
Signed-off-by: Yinbo Zhu <zhuyinbo@loongson.cn>
---
arch/loongarch/include/asm/acpi.h | 5 ++---
arch/loongarch/include/asm/suspend.h | 10 ++++++++++
arch/loongarch/power/suspend.c | 10 +++++-----
arch/loongarch/power/suspend_asm.S | 8 ++++----
4 files changed, 21 insertions(+), 12 deletions(-)
create mode 100644 arch/loongarch/include/asm/suspend.h
Comments
Hi, Yinbo,
The title can be regular:
LoongArch: Export some arch-specific pm interfaces
And in commit message,
"Some Power Management Controllers" should be
"Some power management controllers" or
"Some PMC (Power Management Controllers)"
Huacai
On Mon, May 22, 2023 at 5:32 PM Yinbo Zhu <zhuyinbo@loongson.cn> wrote:
>
> Some Power Management Controllers need to support DTS and will use
> the suspend interface thus this patch was to export such interface
> for their use.
>
> Signed-off-by: Yinbo Zhu <zhuyinbo@loongson.cn>
> ---
> arch/loongarch/include/asm/acpi.h | 5 ++---
> arch/loongarch/include/asm/suspend.h | 10 ++++++++++
> arch/loongarch/power/suspend.c | 10 +++++-----
> arch/loongarch/power/suspend_asm.S | 8 ++++----
> 4 files changed, 21 insertions(+), 12 deletions(-)
> create mode 100644 arch/loongarch/include/asm/suspend.h
>
> diff --git a/arch/loongarch/include/asm/acpi.h b/arch/loongarch/include/asm/acpi.h
> index 976a810352c6..d63507cc705f 100644
> --- a/arch/loongarch/include/asm/acpi.h
> +++ b/arch/loongarch/include/asm/acpi.h
> @@ -8,6 +8,7 @@
> #ifndef _ASM_LOONGARCH_ACPI_H
> #define _ASM_LOONGARCH_ACPI_H
>
> +#include <asm/suspend.h>
> #ifdef CONFIG_ACPI
> extern int acpi_strict;
> extern int acpi_disabled;
> @@ -37,13 +38,11 @@ extern struct list_head acpi_wakeup_device_list;
>
> extern int loongarch_acpi_suspend(void);
> extern int (*acpi_suspend_lowlevel)(void);
> -extern void loongarch_suspend_enter(void);
>
> static inline unsigned long acpi_get_wakeup_address(void)
> {
> #ifdef CONFIG_SUSPEND
> - extern void loongarch_wakeup_start(void);
> - return (unsigned long)loongarch_wakeup_start;
> + return (unsigned long)loongson_wakeup_start;
> #endif
> return 0UL;
> }
> diff --git a/arch/loongarch/include/asm/suspend.h b/arch/loongarch/include/asm/suspend.h
> new file mode 100644
> index 000000000000..a40b42f4f7f3
> --- /dev/null
> +++ b/arch/loongarch/include/asm/suspend.h
> @@ -0,0 +1,10 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef __ASM_SUSPEND_H
> +#define __ASM_SUSPEND_H
> +
> +void loongson_common_resume(void);
> +void loongson_common_suspend(void);
> +void loongson_suspend_enter(void);
> +void loongson_wakeup_start(void);
> +
> +#endif
> diff --git a/arch/loongarch/power/suspend.c b/arch/loongarch/power/suspend.c
> index 5e19733e5e05..0587681b33ce 100644
> --- a/arch/loongarch/power/suspend.c
> +++ b/arch/loongarch/power/suspend.c
> @@ -27,7 +27,7 @@ struct saved_registers {
> };
> static struct saved_registers saved_regs;
>
> -static void arch_common_suspend(void)
> +void loongson_common_suspend(void)
> {
> save_counter();
> saved_regs.pgd = csr_read64(LOONGARCH_CSR_PGDL);
> @@ -40,7 +40,7 @@ static void arch_common_suspend(void)
> loongarch_suspend_addr = loongson_sysconf.suspend_addr;
> }
>
> -static void arch_common_resume(void)
> +void loongson_common_resume(void)
> {
> sync_counter();
> local_flush_tlb_all();
> @@ -62,12 +62,12 @@ int loongarch_acpi_suspend(void)
> enable_gpe_wakeup();
> enable_pci_wakeup();
>
> - arch_common_suspend();
> + loongson_common_suspend();
>
> /* processor specific suspend */
> - loongarch_suspend_enter();
> + loongson_suspend_enter();
>
> - arch_common_resume();
> + loongson_common_resume();
>
> return 0;
> }
> diff --git a/arch/loongarch/power/suspend_asm.S b/arch/loongarch/power/suspend_asm.S
> index e2fc3b4e31f0..809abd3b119d 100644
> --- a/arch/loongarch/power/suspend_asm.S
> +++ b/arch/loongarch/power/suspend_asm.S
> @@ -57,13 +57,13 @@
> .align 12
>
> /* Sleep/wakeup code for Loongson-3 */
> -SYM_FUNC_START(loongarch_suspend_enter)
> +SYM_FUNC_START(loongson_suspend_enter)
> SETUP_SLEEP
> bl __flush_cache_all
>
> /* Pass RA and SP to BIOS */
> addi.d a1, sp, 0
> - la.pcrel a0, loongarch_wakeup_start
> + la.pcrel a0, loongson_wakeup_start
> la.pcrel t0, loongarch_suspend_addr
> ld.d t0, t0, 0
> jirl a0, t0, 0 /* Call BIOS's STR sleep routine */
> @@ -72,7 +72,7 @@ SYM_FUNC_START(loongarch_suspend_enter)
> * This is where we return upon wakeup.
> * Reload all of the registers and return.
> */
> -SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL)
> +SYM_INNER_LABEL(loongson_wakeup_start, SYM_L_GLOBAL)
> li.d t0, CSR_DMW0_INIT # UC, PLV0
> csrwr t0, LOONGARCH_CSR_DMWIN0
> li.d t0, CSR_DMW1_INIT # CA, PLV0
> @@ -89,4 +89,4 @@ SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL)
> SETUP_WAKEUP
> addi.d sp, sp, PT_SIZE
> jr ra
> -SYM_FUNC_END(loongarch_suspend_enter)
> +SYM_FUNC_END(loongson_suspend_enter)
> --
> 2.20.1
>
在 2023/5/24 上午9:57, Huacai Chen 写道:
> Hi, Yinbo,
>
> The title can be regular:
> LoongArch: Export some arch-specific pm interfaces
>
> And in commit message,
> "Some Power Management Controllers" should be
> "Some power management controllers" or
> "Some PMC (Power Management Controllers)"
okay, I got it.
Thanks.
>
> Huacai
>
> On Mon, May 22, 2023 at 5:32 PM Yinbo Zhu <zhuyinbo@loongson.cn> wrote:
>>
>> Some Power Management Controllers need to support DTS and will use
>> the suspend interface thus this patch was to export such interface
>> for their use.
>>
>> Signed-off-by: Yinbo Zhu <zhuyinbo@loongson.cn>
>> ---
>> arch/loongarch/include/asm/acpi.h | 5 ++---
>> arch/loongarch/include/asm/suspend.h | 10 ++++++++++
>> arch/loongarch/power/suspend.c | 10 +++++-----
>> arch/loongarch/power/suspend_asm.S | 8 ++++----
>> 4 files changed, 21 insertions(+), 12 deletions(-)
>> create mode 100644 arch/loongarch/include/asm/suspend.h
>>
>> diff --git a/arch/loongarch/include/asm/acpi.h b/arch/loongarch/include/asm/acpi.h
>> index 976a810352c6..d63507cc705f 100644
>> --- a/arch/loongarch/include/asm/acpi.h
>> +++ b/arch/loongarch/include/asm/acpi.h
>> @@ -8,6 +8,7 @@
>> #ifndef _ASM_LOONGARCH_ACPI_H
>> #define _ASM_LOONGARCH_ACPI_H
>>
>> +#include <asm/suspend.h>
>> #ifdef CONFIG_ACPI
>> extern int acpi_strict;
>> extern int acpi_disabled;
>> @@ -37,13 +38,11 @@ extern struct list_head acpi_wakeup_device_list;
>>
>> extern int loongarch_acpi_suspend(void);
>> extern int (*acpi_suspend_lowlevel)(void);
>> -extern void loongarch_suspend_enter(void);
>>
>> static inline unsigned long acpi_get_wakeup_address(void)
>> {
>> #ifdef CONFIG_SUSPEND
>> - extern void loongarch_wakeup_start(void);
>> - return (unsigned long)loongarch_wakeup_start;
>> + return (unsigned long)loongson_wakeup_start;
>> #endif
>> return 0UL;
>> }
>> diff --git a/arch/loongarch/include/asm/suspend.h b/arch/loongarch/include/asm/suspend.h
>> new file mode 100644
>> index 000000000000..a40b42f4f7f3
>> --- /dev/null
>> +++ b/arch/loongarch/include/asm/suspend.h
>> @@ -0,0 +1,10 @@
>> +/* SPDX-License-Identifier: GPL-2.0 */
>> +#ifndef __ASM_SUSPEND_H
>> +#define __ASM_SUSPEND_H
>> +
>> +void loongson_common_resume(void);
>> +void loongson_common_suspend(void);
>> +void loongson_suspend_enter(void);
>> +void loongson_wakeup_start(void);
>> +
>> +#endif
>> diff --git a/arch/loongarch/power/suspend.c b/arch/loongarch/power/suspend.c
>> index 5e19733e5e05..0587681b33ce 100644
>> --- a/arch/loongarch/power/suspend.c
>> +++ b/arch/loongarch/power/suspend.c
>> @@ -27,7 +27,7 @@ struct saved_registers {
>> };
>> static struct saved_registers saved_regs;
>>
>> -static void arch_common_suspend(void)
>> +void loongson_common_suspend(void)
>> {
>> save_counter();
>> saved_regs.pgd = csr_read64(LOONGARCH_CSR_PGDL);
>> @@ -40,7 +40,7 @@ static void arch_common_suspend(void)
>> loongarch_suspend_addr = loongson_sysconf.suspend_addr;
>> }
>>
>> -static void arch_common_resume(void)
>> +void loongson_common_resume(void)
>> {
>> sync_counter();
>> local_flush_tlb_all();
>> @@ -62,12 +62,12 @@ int loongarch_acpi_suspend(void)
>> enable_gpe_wakeup();
>> enable_pci_wakeup();
>>
>> - arch_common_suspend();
>> + loongson_common_suspend();
>>
>> /* processor specific suspend */
>> - loongarch_suspend_enter();
>> + loongson_suspend_enter();
>>
>> - arch_common_resume();
>> + loongson_common_resume();
>>
>> return 0;
>> }
>> diff --git a/arch/loongarch/power/suspend_asm.S b/arch/loongarch/power/suspend_asm.S
>> index e2fc3b4e31f0..809abd3b119d 100644
>> --- a/arch/loongarch/power/suspend_asm.S
>> +++ b/arch/loongarch/power/suspend_asm.S
>> @@ -57,13 +57,13 @@
>> .align 12
>>
>> /* Sleep/wakeup code for Loongson-3 */
>> -SYM_FUNC_START(loongarch_suspend_enter)
>> +SYM_FUNC_START(loongson_suspend_enter)
>> SETUP_SLEEP
>> bl __flush_cache_all
>>
>> /* Pass RA and SP to BIOS */
>> addi.d a1, sp, 0
>> - la.pcrel a0, loongarch_wakeup_start
>> + la.pcrel a0, loongson_wakeup_start
>> la.pcrel t0, loongarch_suspend_addr
>> ld.d t0, t0, 0
>> jirl a0, t0, 0 /* Call BIOS's STR sleep routine */
>> @@ -72,7 +72,7 @@ SYM_FUNC_START(loongarch_suspend_enter)
>> * This is where we return upon wakeup.
>> * Reload all of the registers and return.
>> */
>> -SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL)
>> +SYM_INNER_LABEL(loongson_wakeup_start, SYM_L_GLOBAL)
>> li.d t0, CSR_DMW0_INIT # UC, PLV0
>> csrwr t0, LOONGARCH_CSR_DMWIN0
>> li.d t0, CSR_DMW1_INIT # CA, PLV0
>> @@ -89,4 +89,4 @@ SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL)
>> SETUP_WAKEUP
>> addi.d sp, sp, PT_SIZE
>> jr ra
>> -SYM_FUNC_END(loongarch_suspend_enter)
>> +SYM_FUNC_END(loongson_suspend_enter)
>> --
>> 2.20.1
>>
@@ -8,6 +8,7 @@
#ifndef _ASM_LOONGARCH_ACPI_H
#define _ASM_LOONGARCH_ACPI_H
+#include <asm/suspend.h>
#ifdef CONFIG_ACPI
extern int acpi_strict;
extern int acpi_disabled;
@@ -37,13 +38,11 @@ extern struct list_head acpi_wakeup_device_list;
extern int loongarch_acpi_suspend(void);
extern int (*acpi_suspend_lowlevel)(void);
-extern void loongarch_suspend_enter(void);
static inline unsigned long acpi_get_wakeup_address(void)
{
#ifdef CONFIG_SUSPEND
- extern void loongarch_wakeup_start(void);
- return (unsigned long)loongarch_wakeup_start;
+ return (unsigned long)loongson_wakeup_start;
#endif
return 0UL;
}
new file mode 100644
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __ASM_SUSPEND_H
+#define __ASM_SUSPEND_H
+
+void loongson_common_resume(void);
+void loongson_common_suspend(void);
+void loongson_suspend_enter(void);
+void loongson_wakeup_start(void);
+
+#endif
@@ -27,7 +27,7 @@ struct saved_registers {
};
static struct saved_registers saved_regs;
-static void arch_common_suspend(void)
+void loongson_common_suspend(void)
{
save_counter();
saved_regs.pgd = csr_read64(LOONGARCH_CSR_PGDL);
@@ -40,7 +40,7 @@ static void arch_common_suspend(void)
loongarch_suspend_addr = loongson_sysconf.suspend_addr;
}
-static void arch_common_resume(void)
+void loongson_common_resume(void)
{
sync_counter();
local_flush_tlb_all();
@@ -62,12 +62,12 @@ int loongarch_acpi_suspend(void)
enable_gpe_wakeup();
enable_pci_wakeup();
- arch_common_suspend();
+ loongson_common_suspend();
/* processor specific suspend */
- loongarch_suspend_enter();
+ loongson_suspend_enter();
- arch_common_resume();
+ loongson_common_resume();
return 0;
}
@@ -57,13 +57,13 @@
.align 12
/* Sleep/wakeup code for Loongson-3 */
-SYM_FUNC_START(loongarch_suspend_enter)
+SYM_FUNC_START(loongson_suspend_enter)
SETUP_SLEEP
bl __flush_cache_all
/* Pass RA and SP to BIOS */
addi.d a1, sp, 0
- la.pcrel a0, loongarch_wakeup_start
+ la.pcrel a0, loongson_wakeup_start
la.pcrel t0, loongarch_suspend_addr
ld.d t0, t0, 0
jirl a0, t0, 0 /* Call BIOS's STR sleep routine */
@@ -72,7 +72,7 @@ SYM_FUNC_START(loongarch_suspend_enter)
* This is where we return upon wakeup.
* Reload all of the registers and return.
*/
-SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL)
+SYM_INNER_LABEL(loongson_wakeup_start, SYM_L_GLOBAL)
li.d t0, CSR_DMW0_INIT # UC, PLV0
csrwr t0, LOONGARCH_CSR_DMWIN0
li.d t0, CSR_DMW1_INIT # CA, PLV0
@@ -89,4 +89,4 @@ SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL)
SETUP_WAKEUP
addi.d sp, sp, PT_SIZE
jr ra
-SYM_FUNC_END(loongarch_suspend_enter)
+SYM_FUNC_END(loongson_suspend_enter)