xref: /rk3399_ARM-atf/plat/rockchip/common/scmi/scmi_clock.h (revision 04b2fb42b171e3fbf2ef823558ac5b0119663dc7)
104150feeSXiaoDong Huang /*
2*036935a8SXiaoDong Huang  * Copyright (c) 2025, Rockchip, Inc. All rights reserved.
304150feeSXiaoDong Huang  *
404150feeSXiaoDong Huang  * SPDX-License-Identifier: BSD-3-Clause
504150feeSXiaoDong Huang  */
604150feeSXiaoDong Huang 
704150feeSXiaoDong Huang #ifndef RK_SCMI_CLOCK_H
804150feeSXiaoDong Huang #define RK_SCMI_CLOCK_H
904150feeSXiaoDong Huang 
1004150feeSXiaoDong Huang #include <stdint.h>
1104150feeSXiaoDong Huang 
1204150feeSXiaoDong Huang #include <common.h>
1304150feeSXiaoDong Huang 
1404150feeSXiaoDong Huang struct rk_scmi_clock;
1504150feeSXiaoDong Huang 
1604150feeSXiaoDong Huang struct rk_clk_ops {
1704150feeSXiaoDong Huang 	unsigned long (*get_rate)(struct rk_scmi_clock *clock);
1804150feeSXiaoDong Huang 	int (*set_rate)(struct rk_scmi_clock *clock, unsigned long rate);
1904150feeSXiaoDong Huang 	int (*set_status)(struct rk_scmi_clock *clock, bool status);
2004150feeSXiaoDong Huang };
2104150feeSXiaoDong Huang 
2204150feeSXiaoDong Huang typedef struct rk_scmi_clock {
2304150feeSXiaoDong Huang 	char name[SCMI_CLOCK_NAME_LENGTH_MAX];
2404150feeSXiaoDong Huang 	uint8_t enable;
2504150feeSXiaoDong Huang 	int8_t is_security;
26*036935a8SXiaoDong Huang 	int8_t is_dynamic_prate;
2704150feeSXiaoDong Huang 	uint32_t id;
2804150feeSXiaoDong Huang 	uint32_t rate_cnt;
2904150feeSXiaoDong Huang 	uint64_t cur_rate;
3004150feeSXiaoDong Huang 	uint32_t enable_count;
3104150feeSXiaoDong Huang 	const struct rk_clk_ops *clk_ops;
32*036935a8SXiaoDong Huang 	const unsigned long *parent_table;
33*036935a8SXiaoDong Huang 	const uint32_t *info;
3404150feeSXiaoDong Huang 	unsigned long *rate_table;
3504150feeSXiaoDong Huang } rk_scmi_clock_t;
3604150feeSXiaoDong Huang 
3704150feeSXiaoDong Huang /*
3804150feeSXiaoDong Huang  * Return number of clock controllers for an agent
3904150feeSXiaoDong Huang  * @agent_id: SCMI agent ID
4004150feeSXiaoDong Huang  * Return number of clock controllers
4104150feeSXiaoDong Huang  */
4204150feeSXiaoDong Huang size_t rockchip_scmi_clock_count(unsigned int agent_id);
4304150feeSXiaoDong Huang 
4404150feeSXiaoDong Huang /*
4504150feeSXiaoDong Huang  * Get rk_scmi_clock_t point
4604150feeSXiaoDong Huang  * @agent_id: SCMI agent ID
4704150feeSXiaoDong Huang  * @scmi_id: SCMI clock ID
4804150feeSXiaoDong Huang  * Return a rk_scmi_clock_t point
4904150feeSXiaoDong Huang  */
5004150feeSXiaoDong Huang rk_scmi_clock_t *rockchip_scmi_get_clock(uint32_t agent_id,
5104150feeSXiaoDong Huang 					 uint32_t scmi_id);
5204150feeSXiaoDong Huang 
53*036935a8SXiaoDong Huang unsigned long clk_scmi_common_get_rate(rk_scmi_clock_t *clock);
54*036935a8SXiaoDong Huang int clk_scmi_common_set_rate(rk_scmi_clock_t *clock, unsigned long rate);
55*036935a8SXiaoDong Huang int clk_scmi_common_set_status(rk_scmi_clock_t *clock, bool status);
5604150feeSXiaoDong Huang #endif /* RK_SCMI_CLOCK_H */
57