1*fcd41e86SJacky Bai /* 2*fcd41e86SJacky Bai * Copyright 2021-2024 NXP 3*fcd41e86SJacky Bai * 4*fcd41e86SJacky Bai * SPDX-License-Identifier: BSD-3-Clause 5*fcd41e86SJacky Bai */ 6*fcd41e86SJacky Bai #include <assert.h> 7*fcd41e86SJacky Bai #include <stdint.h> 8*fcd41e86SJacky Bai 9*fcd41e86SJacky Bai #include <drivers/scmi-msg.h> 10*fcd41e86SJacky Bai #include <drivers/scmi.h> 11*fcd41e86SJacky Bai 12*fcd41e86SJacky Bai #include <platform_def.h> 13*fcd41e86SJacky Bai 14*fcd41e86SJacky Bai #define SMT_BUFFER_BASE 0x2201f000 15*fcd41e86SJacky Bai #define SMT_BUFFER0_BASE SMT_BUFFER_BASE 16*fcd41e86SJacky Bai #define SMT_BUFFER1_BASE (SMT_BUFFER_BASE + 0x200) 17*fcd41e86SJacky Bai 18*fcd41e86SJacky Bai static struct scmi_msg_channel scmi_channel[] = { 19*fcd41e86SJacky Bai [0] = { 20*fcd41e86SJacky Bai .shm_addr = SMT_BUFFER0_BASE, 21*fcd41e86SJacky Bai .shm_size = SMT_BUF_SLOT_SIZE, 22*fcd41e86SJacky Bai }, 23*fcd41e86SJacky Bai }; 24*fcd41e86SJacky Bai plat_scmi_get_channel(unsigned int agent_id)25*fcd41e86SJacky Baistruct scmi_msg_channel *plat_scmi_get_channel(unsigned int agent_id) 26*fcd41e86SJacky Bai { 27*fcd41e86SJacky Bai assert(agent_id < ARRAY_SIZE(scmi_channel)); 28*fcd41e86SJacky Bai 29*fcd41e86SJacky Bai return &scmi_channel[agent_id]; 30*fcd41e86SJacky Bai } 31*fcd41e86SJacky Bai 32*fcd41e86SJacky Bai static const char vendor[] = "NXP"; 33*fcd41e86SJacky Bai static const char sub_vendor[] = ""; 34*fcd41e86SJacky Bai plat_scmi_vendor_name(void)35*fcd41e86SJacky Baiconst char *plat_scmi_vendor_name(void) 36*fcd41e86SJacky Bai { 37*fcd41e86SJacky Bai return vendor; 38*fcd41e86SJacky Bai } 39*fcd41e86SJacky Bai plat_scmi_sub_vendor_name(void)40*fcd41e86SJacky Baiconst char *plat_scmi_sub_vendor_name(void) 41*fcd41e86SJacky Bai { 42*fcd41e86SJacky Bai return sub_vendor; 43*fcd41e86SJacky Bai } 44*fcd41e86SJacky Bai 45*fcd41e86SJacky Bai /* Currently supporting Clocks and Reset Domains */ 46*fcd41e86SJacky Bai static const uint8_t plat_protocol_list[] = { 47*fcd41e86SJacky Bai SCMI_PROTOCOL_ID_POWER_DOMAIN, 48*fcd41e86SJacky Bai SCMI_PROTOCOL_ID_SENSOR, 49*fcd41e86SJacky Bai 0U /* Null termination */ 50*fcd41e86SJacky Bai }; 51*fcd41e86SJacky Bai plat_scmi_protocol_count(void)52*fcd41e86SJacky Baisize_t plat_scmi_protocol_count(void) 53*fcd41e86SJacky Bai { 54*fcd41e86SJacky Bai return ARRAY_SIZE(plat_protocol_list) - 1U; 55*fcd41e86SJacky Bai } 56*fcd41e86SJacky Bai plat_scmi_protocol_list(unsigned int agent_id __unused)57*fcd41e86SJacky Baiconst uint8_t *plat_scmi_protocol_list(unsigned int agent_id __unused) 58*fcd41e86SJacky Bai { 59*fcd41e86SJacky Bai return plat_protocol_list; 60*fcd41e86SJacky Bai } 61*fcd41e86SJacky Bai imx8ulp_init_scmi_server(void)62*fcd41e86SJacky Baivoid imx8ulp_init_scmi_server(void) 63*fcd41e86SJacky Bai { 64*fcd41e86SJacky Bai size_t i; 65*fcd41e86SJacky Bai 66*fcd41e86SJacky Bai for (i = 0U; i < ARRAY_SIZE(scmi_channel); i++) { 67*fcd41e86SJacky Bai scmi_smt_init_agent_channel(&scmi_channel[i]); 68*fcd41e86SJacky Bai } 69*fcd41e86SJacky Bai } 70