blob: e640fe1961c15b80e2666c157c4d27dfe37cf34c [file] [log] [blame]
/*
* Copyright (c) 2024, Rockchip, Inc. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef RK_SCMI_CLOCK_H
#define RK_SCMI_CLOCK_H
#include <stdint.h>
#include <common.h>
struct rk_scmi_clock;
struct rk_clk_ops {
unsigned long (*get_rate)(struct rk_scmi_clock *clock);
int (*set_rate)(struct rk_scmi_clock *clock, unsigned long rate);
int (*set_status)(struct rk_scmi_clock *clock, bool status);
};
typedef struct rk_scmi_clock {
char name[SCMI_CLOCK_NAME_LENGTH_MAX];
uint8_t enable;
int8_t is_security;
uint32_t id;
uint32_t rate_cnt;
uint64_t cur_rate;
uint32_t enable_count;
const struct rk_clk_ops *clk_ops;
unsigned long *rate_table;
} rk_scmi_clock_t;
/*
* Return number of clock controllers for an agent
* @agent_id: SCMI agent ID
* Return number of clock controllers
*/
size_t rockchip_scmi_clock_count(unsigned int agent_id);
/*
* Get rk_scmi_clock_t point
* @agent_id: SCMI agent ID
* @scmi_id: SCMI clock ID
* Return a rk_scmi_clock_t point
*/
rk_scmi_clock_t *rockchip_scmi_get_clock(uint32_t agent_id,
uint32_t scmi_id);
#endif /* RK_SCMI_CLOCK_H */