1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*
- * 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]);
- }
|