summaryrefslogtreecommitdiff
path: root/include/soc/starfive/jh7110_pmu.h
blob: 47838e002179b7e8641075c6fa729d0422529a2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Reset driver for the StarFive JH7110 SoC
 *
 * Copyright (C) 2022 samin <samin.guo@starfivetech.com>
 */

#ifndef __SOC_STARFIVE_JH7110_PMU_H__
#define __SOC_STARFIVE_JH7110_PMU_H__

#include <linux/bits.h>
#include <linux/types.h>

/* SW/HW Power domain id  */
enum PMU_POWER_DOMAIN {
	POWER_DOMAIN_SYSTOP	= BIT(0),
	POWER_DOMAIN_CPU	= BIT(1),
	POWER_DOMAIN_GPUA	= BIT(2),
	POWER_DOMAIN_VDEC	= BIT(3),
	POWER_DOMAIN_JPU	= POWER_DOMAIN_VDEC,
	POWER_DOMAIN_VOUT	= BIT(4),
	POWER_DOMAIN_ISP	= BIT(5),
	POWER_DOMAIN_VENC	= BIT(6),
	POWER_DOMAIN_GPUB	= BIT(7),
	POWER_DOMAIN_ALL	= GENMASK(7, 0),
};

enum PMU_HARD_EVENT {
	PMU_HW_EVENT_RTC	= BIT(0),
	PMU_HW_EVENT_GMAC	= BIT(1),
	PMU_HW_EVENT_RFU	= BIT(2),
	PMU_HW_EVENT_RGPIO0	= BIT(3),
	PMU_HW_EVENT_RGPIO1	= BIT(4),
	PMU_HW_EVENT_RGPIO2	= BIT(5),
	PMU_HW_EVENT_RGPIO3	= BIT(6),
	PMU_HW_EVENT_GPU	= BIT(7),
	PMU_HW_EVENT_ALL	= GENMASK(7, 0),
};

/*
 * @func: starfive_power_domain_set
 * @dec: power domain turn-on/off by software
 * @domain: power domain id
 *	POWER_DOMAIN_SYSTOP:
 *	POWER_DOMAIN_CPU
 *	POWER_DOMAIN_GPUA
 *	POWER_DOMAIN_VDEC
 *	POWER_DOMAIN_VOUT
 *	POWER_DOMAIN_ISP
 *	POWER_DOMAIN_VENC
 *	POWER_DOMAIN_GPUB
 * @enable: 1:enable 0:disable
 */
//void starfive_power_domain_set(u32 domain, bool enable);

/*
 * @func: starfive_pmu_hw_encourage
 * @dec: power domain turn-on/off by HW envent(interrupt)
 * @domain: power domain id
 * @event: Hardware trigger event. PMU_HARD_EVENT:
	PMU_HW_EVENT_RTC,
	PMU_HW_EVENT_GMAC,
	PMU_HW_EVENT_RFU,
	PMU_HW_EVENT_RGPIO0,
	PMU_HW_EVENT_RGPIO1,
	PMU_HW_EVENT_RGPIO2,
	PMU_HW_EVENT_RGPIO3,
	PMU_HW_EVENT_GPU,
 * @enable: 1:enable 0:disable
 *
 * @for example:
 *	starfive_power_domain_set_by_hwevent(POWER_DOMAIN_VDEC, RTC_EVENT, 0);
 *
 *	Means that when the RTC alarm is interrupted, the hardware
 *	is triggered to close the power domain of VDEC.
 */
void starfive_power_domain_set_by_hwevent(u32 domain, u32 event, bool enable);

/*
 * @func: starfive_power_domain_order_on_get
 * @dec: PMU power domian power on order get.
 * @domian: powerff domain id
 */
int starfive_power_domain_order_on_get(u32 domain);

/*
 * @func: starfive_power_domain_order_off_get
 * @dec: PMU power domian power off order get.
 * @domian: power domain id
 */
int starfive_power_domain_order_off_get(u32 domain);

/*
 * @func: starfive_power_domain_order_on_set
 * @dec: PMU power domian power on order set.
 * @domian: powerff domain id
 * @order: the poweron order of domain
 */
void starfive_power_domain_order_on_set(u32 domain, u32 order);

/*
 * @func: starfive_power_domain_order_off_set
 * @dec: PMU power domian power off order set.
 * @domian: power domain id
 * @order: the poweroff order of domain
 */
void starfive_power_domain_order_off_set(u32 domain, u32 order);

void starfive_pmu_hw_event_turn_off_mask(u32 mask);

#endif /* __SOC_STARFIVE_JH7110_PMU_H__ */