xref: /linux/drivers/memory/tegra/tegra-emc-common.h (revision 00599d4841790d05401820a96cf7edb193888b00)
1*8879cff7SMikko Perttunen /* SPDX-License-Identifier: GPL-2.0 */
2*8879cff7SMikko Perttunen 
3*8879cff7SMikko Perttunen #ifndef TEGRA_EMC_COMMON_H
4*8879cff7SMikko Perttunen #define TEGRA_EMC_COMMON_H
5*8879cff7SMikko Perttunen 
6*8879cff7SMikko Perttunen #include <linux/device.h>
7*8879cff7SMikko Perttunen #include <linux/mutex.h>
8*8879cff7SMikko Perttunen 
9*8879cff7SMikko Perttunen /**
10*8879cff7SMikko Perttunen  * enum tegra_emc_rate_request_type - source of rate request
11*8879cff7SMikko Perttunen  * @TEGRA_EMC_RATE_DEVFREQ: rate requested by devfreq governor
12*8879cff7SMikko Perttunen  * @TEGRA_EMC_RATE_DEBUG: rate requested through debugfs knobs
13*8879cff7SMikko Perttunen  * @TEGRA_EMC_RATE_ICC: rate requested by ICC framework
14*8879cff7SMikko Perttunen  * @TEGRA_EMC_RATE_TYPE_MAX: number of valid request types
15*8879cff7SMikko Perttunen  */
16*8879cff7SMikko Perttunen enum tegra_emc_rate_request_type {
17*8879cff7SMikko Perttunen 	TEGRA_EMC_RATE_DEVFREQ,
18*8879cff7SMikko Perttunen 	TEGRA_EMC_RATE_DEBUG,
19*8879cff7SMikko Perttunen 	TEGRA_EMC_RATE_ICC,
20*8879cff7SMikko Perttunen 	TEGRA_EMC_RATE_TYPE_MAX,
21*8879cff7SMikko Perttunen };
22*8879cff7SMikko Perttunen 
23*8879cff7SMikko Perttunen struct tegra_emc_rate_request {
24*8879cff7SMikko Perttunen 	unsigned long min_rate;
25*8879cff7SMikko Perttunen 	unsigned long max_rate;
26*8879cff7SMikko Perttunen };
27*8879cff7SMikko Perttunen 
28*8879cff7SMikko Perttunen struct tegra_emc_rate_requests {
29*8879cff7SMikko Perttunen 	struct tegra_emc_rate_request requested_rate[TEGRA_EMC_RATE_TYPE_MAX];
30*8879cff7SMikko Perttunen 	/* Protects @requested_rate. */
31*8879cff7SMikko Perttunen 	struct mutex rate_lock;
32*8879cff7SMikko Perttunen 	struct device *dev;
33*8879cff7SMikko Perttunen };
34*8879cff7SMikko Perttunen 
35*8879cff7SMikko Perttunen void tegra_emc_rate_requests_init(struct tegra_emc_rate_requests *reqs,
36*8879cff7SMikko Perttunen 				  struct device *dev);
37*8879cff7SMikko Perttunen 
38*8879cff7SMikko Perttunen int tegra_emc_set_min_rate(struct tegra_emc_rate_requests *reqs,
39*8879cff7SMikko Perttunen 			   unsigned long rate,
40*8879cff7SMikko Perttunen 			   enum tegra_emc_rate_request_type type);
41*8879cff7SMikko Perttunen 
42*8879cff7SMikko Perttunen int tegra_emc_set_max_rate(struct tegra_emc_rate_requests *reqs,
43*8879cff7SMikko Perttunen 			   unsigned long rate,
44*8879cff7SMikko Perttunen 			   enum tegra_emc_rate_request_type type);
45*8879cff7SMikko Perttunen 
46*8879cff7SMikko Perttunen #endif /* TEGRA_EMC_COMMON_H */
47