xref: /rk3399_ARM-atf/plat/rockchip/common/scmi/scmi_clock.h (revision 04150fee44cc0dec5bbe4cce42e2b626695d6f52)
1*04150feeSXiaoDong Huang /*
2*04150feeSXiaoDong Huang  * Copyright (c) 2024, Rockchip, Inc. All rights reserved.
3*04150feeSXiaoDong Huang  *
4*04150feeSXiaoDong Huang  * SPDX-License-Identifier: BSD-3-Clause
5*04150feeSXiaoDong Huang  */
6*04150feeSXiaoDong Huang 
7*04150feeSXiaoDong Huang #ifndef RK_SCMI_CLOCK_H
8*04150feeSXiaoDong Huang #define RK_SCMI_CLOCK_H
9*04150feeSXiaoDong Huang 
10*04150feeSXiaoDong Huang #include <stdint.h>
11*04150feeSXiaoDong Huang 
12*04150feeSXiaoDong Huang #include <common.h>
13*04150feeSXiaoDong Huang 
14*04150feeSXiaoDong Huang struct rk_scmi_clock;
15*04150feeSXiaoDong Huang 
16*04150feeSXiaoDong Huang struct rk_clk_ops {
17*04150feeSXiaoDong Huang 	unsigned long (*get_rate)(struct rk_scmi_clock *clock);
18*04150feeSXiaoDong Huang 	int (*set_rate)(struct rk_scmi_clock *clock, unsigned long rate);
19*04150feeSXiaoDong Huang 	int (*set_status)(struct rk_scmi_clock *clock, bool status);
20*04150feeSXiaoDong Huang };
21*04150feeSXiaoDong Huang 
22*04150feeSXiaoDong Huang typedef struct rk_scmi_clock {
23*04150feeSXiaoDong Huang 	char name[SCMI_CLOCK_NAME_LENGTH_MAX];
24*04150feeSXiaoDong Huang 	uint8_t enable;
25*04150feeSXiaoDong Huang 	int8_t is_security;
26*04150feeSXiaoDong Huang 	uint32_t id;
27*04150feeSXiaoDong Huang 	uint32_t rate_cnt;
28*04150feeSXiaoDong Huang 	uint64_t cur_rate;
29*04150feeSXiaoDong Huang 	uint32_t enable_count;
30*04150feeSXiaoDong Huang 	const struct rk_clk_ops *clk_ops;
31*04150feeSXiaoDong Huang 	unsigned long *rate_table;
32*04150feeSXiaoDong Huang } rk_scmi_clock_t;
33*04150feeSXiaoDong Huang 
34*04150feeSXiaoDong Huang /*
35*04150feeSXiaoDong Huang  * Return number of clock controllers for an agent
36*04150feeSXiaoDong Huang  * @agent_id: SCMI agent ID
37*04150feeSXiaoDong Huang  * Return number of clock controllers
38*04150feeSXiaoDong Huang  */
39*04150feeSXiaoDong Huang size_t rockchip_scmi_clock_count(unsigned int agent_id);
40*04150feeSXiaoDong Huang 
41*04150feeSXiaoDong Huang /*
42*04150feeSXiaoDong Huang  * Get rk_scmi_clock_t point
43*04150feeSXiaoDong Huang  * @agent_id: SCMI agent ID
44*04150feeSXiaoDong Huang  * @scmi_id: SCMI clock ID
45*04150feeSXiaoDong Huang  * Return a rk_scmi_clock_t point
46*04150feeSXiaoDong Huang  */
47*04150feeSXiaoDong Huang rk_scmi_clock_t *rockchip_scmi_get_clock(uint32_t agent_id,
48*04150feeSXiaoDong Huang 					 uint32_t scmi_id);
49*04150feeSXiaoDong Huang 
50*04150feeSXiaoDong Huang #endif /* RK_SCMI_CLOCK_H */
51