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