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