blob: 5c43c511f448bcfd1a5d6fd83adf925e5b63545e [file] [log] [blame]
/*
* Copyright (c) 2024, Rockchip, Inc. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <assert.h>
#include <string.h>
#include <platform_def.h>
#include <drivers/scmi-msg.h>
#include <drivers/scmi.h>
#include <lib/utils.h>
#include <lib/utils_def.h>
#define MAX_PROTOCOL_IN_LIST 8U
static const char vendor[] = "rockchip";
static const char sub_vendor[] = "";
#pragma weak rockchip_scmi_protocol_table
const uint8_t rockchip_scmi_protocol_table[1][MAX_PROTOCOL_IN_LIST] = {
{
SCMI_PROTOCOL_ID_CLOCK,
SCMI_PROTOCOL_ID_RESET_DOMAIN,
0
}
};
const char *plat_scmi_vendor_name(void)
{
return vendor;
}
const char *plat_scmi_sub_vendor_name(void)
{
return sub_vendor;
}
size_t plat_scmi_protocol_count(void)
{
unsigned int count = 0U;
const uint8_t *protocol_list = rockchip_scmi_protocol_table[0];
while (protocol_list[count])
count++;
return count;
}
const uint8_t *plat_scmi_protocol_list(unsigned int agent_id)
{
assert(agent_id < ARRAY_SIZE(rockchip_scmi_protocol_table));
return rockchip_scmi_protocol_table[agent_id];
}
static struct scmi_msg_channel scmi_channel[] = {
[0] = {
.shm_addr = SMT_BUFFER0_BASE,
.shm_size = SMT_BUF_SLOT_SIZE,
},
#ifdef SMT_BUFFER1_BASE
[1] = {
.shm_addr = SMT_BUFFER1_BASE,
.shm_size = SMT_BUF_SLOT_SIZE,
},
#endif
};
struct scmi_msg_channel *plat_scmi_get_channel(unsigned int agent_id)
{
assert(agent_id < ARRAY_SIZE(scmi_channel));
return &scmi_channel[agent_id];
}
#pragma weak rockchip_init_scmi_server
void rockchip_init_scmi_server(void)
{
size_t i;
for (i = 0U; i < ARRAY_SIZE(scmi_channel); i++)
scmi_smt_init_agent_channel(&scmi_channel[i]);
}