/* * Copyright (c) 2024, Rockchip, Inc. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include #include #include #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]); }