Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm/mach-highbank/pm.c
26292 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Copyright 2011 Calxeda, Inc.
4
*/
5
6
#include <linux/cpu_pm.h>
7
#include <linux/init.h>
8
#include <linux/psci.h>
9
#include <linux/suspend.h>
10
11
#include <asm/suspend.h>
12
13
#include <uapi/linux/psci.h>
14
15
#include "core.h"
16
17
#define HIGHBANK_SUSPEND_PARAM \
18
((0 << PSCI_0_2_POWER_STATE_ID_SHIFT) | \
19
(1 << PSCI_0_2_POWER_STATE_AFFL_SHIFT) | \
20
(PSCI_POWER_STATE_TYPE_POWER_DOWN << PSCI_0_2_POWER_STATE_TYPE_SHIFT))
21
22
static int highbank_suspend_finish(unsigned long val)
23
{
24
return psci_ops.cpu_suspend(HIGHBANK_SUSPEND_PARAM, __pa(cpu_resume));
25
}
26
27
static int highbank_pm_enter(suspend_state_t state)
28
{
29
cpu_pm_enter();
30
cpu_cluster_pm_enter();
31
32
cpu_suspend(0, highbank_suspend_finish);
33
34
cpu_cluster_pm_exit();
35
cpu_pm_exit();
36
37
return 0;
38
}
39
40
static const struct platform_suspend_ops highbank_pm_ops = {
41
.enter = highbank_pm_enter,
42
.valid = suspend_valid_only_mem,
43
};
44
45
void __init highbank_pm_init(void)
46
{
47
if (!psci_ops.cpu_suspend)
48
return;
49
50
suspend_set_ops(&highbank_pm_ops);
51
}
52
53