Re: [RFC PATCH 5/9] soc: samsung: pm: Add support for suspend-to-ram of Exynos5433
From: Chanwoo Choi
Date: Thu Jan 11 2018 - 00:41:05 EST
On 2018ë 01ì 09ì 21:45, Krzysztof Kozlowski wrote:
> On Tue, Jan 9, 2018 at 8:59 AM, Chanwoo Choi <cw00.choi@xxxxxxxxxxx> wrote:
>> This patch adds the specific exynos_pm_data instance for Exynos5433
>> in order to support the suspend-to-ram. Exynos5433 SoC need to write
>> the 'cpu_resume' poiter address and the specific magic number
>> for suspend mode.
>>
>> Signed-off-by: Jonghwa Lee <jonghwa3.lee@xxxxxxxxxxx>
>> Signed-off-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx>
>> ---
>> drivers/soc/samsung/exynos-pm.c | 38 ++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 38 insertions(+)
>>
>> diff --git a/drivers/soc/samsung/exynos-pm.c b/drivers/soc/samsung/exynos-pm.c
>> index 45d84bbe5e61..70d949ba5cab 100644
>> --- a/drivers/soc/samsung/exynos-pm.c
>> +++ b/drivers/soc/samsung/exynos-pm.c
>> @@ -12,6 +12,7 @@
>> #include <linux/regulator/machine.h>
>> #include <linux/syscore_ops.h>
>> #include <linux/suspend.h>
>> +#include <linux/psci.h>
>>
>> #include <asm/cpuidle.h>
>> #include <asm/io.h>
>> @@ -123,7 +124,44 @@ static void exynos_pm_finish(void)
>> #define exynos_pm_data_arm_ptr(data) NULL
>> #endif
>>
>> +static int exynos5433_pm_suspend(unsigned long unused)
>> +{
>> + /*
>> + * Exynos5433 uses PSCI v0.1 which provides the only one
>> + * entry point (psci_ops.cpu_suspend) for both cpuidle and
>> + * suspend-to-RAM. Also, PSCI v0.1 needs the specific 'power_state'
>> + * parameter for the suspend mode. In order to enter suspend mode,
>> + * Exynos5433 calls the 'psci_ops.cpu_suspend' with '0x3010000'
>> + * power_state parameter.
>> + *
>> + * '0x3010000' means that both cluster and system are going to enter
>> + * the power-down state as following:
>> + * - [25:24] 0x3 : Indicate the cluster and system.
>> + * - [16] 0x1 : Indicate power-down state.
>
> Define them, it will be more readable (name of define given just as an example):
>
> EXYNOS5433_PCSI_SUSPEND_SYSTEM (0x3 << 24)
> (or even split per system and cluser and use BIT() if this is real meaning)
> and probably reuse existing S5P_CENTRAL_LOWPWR_CFG
OK. I'll define it as the constant.
>
>> + */
>> + return psci_ops.cpu_suspend(0x3010000, __pa_symbol(cpu_resume));
>> +}
>> +
>> +static int exynos5433_pm_suspend_enter(suspend_state_t state)
>> +{
>> + if (!sysram_ns_base_addr)
>> + return -EINVAL;
>> +
>> + __raw_writel(virt_to_phys(cpu_resume), sysram_ns_base_addr + 0x8);
>> + __raw_writel(EXYNOS_SLEEP_MAGIC, sysram_ns_base_addr + 0xc);
>
> Document them in Documentation/arm/Samsung/Bootloader-interface.txt.
OK.
>
> Best regards,
> Krzysztof
>
>> +
>> + return cpu_suspend(0, exynos5433_pm_suspend);
>> +}
>> +
>> +const struct exynos_pm_data exynos5433_pm_data = {
>> + .enter = exynos5433_pm_suspend_enter,
>> +};
>> +
>> static const struct of_device_id exynos_pm_of_device_ids[] = {
>> + {
>> + .compatible = "samsung,exynos5433-pmu",
>> + .data = exynos_pm_data_arm_ptr(exynos5433_pm_data),
>> + },
>> { /*sentinel*/ },
>> };
>>
>> --
>> 1.9.1
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
>
--
Best Regards,
Chanwoo Choi
Samsung Electronics