1*04150feeSXiaoDong Huang /* 2*04150feeSXiaoDong Huang * Copyright (c) 2024, Rockchip, Inc. All rights reserved. 3*04150feeSXiaoDong Huang * 4*04150feeSXiaoDong Huang * SPDX-License-Identifier: BSD-3-Clause 5*04150feeSXiaoDong Huang */ 6*04150feeSXiaoDong Huang 7*04150feeSXiaoDong Huang #include <drivers/scmi-msg.h> 8*04150feeSXiaoDong Huang #include <drivers/scmi.h> 9*04150feeSXiaoDong Huang 10*04150feeSXiaoDong Huang #include "scmi_rstd.h" 11*04150feeSXiaoDong Huang 12*04150feeSXiaoDong Huang #pragma weak rockchip_scmi_rstd_count 13*04150feeSXiaoDong Huang #pragma weak rockchip_scmi_get_rstd 14*04150feeSXiaoDong Huang 15*04150feeSXiaoDong Huang size_t rockchip_scmi_rstd_count(unsigned int agent_id __unused) 16*04150feeSXiaoDong Huang { 17*04150feeSXiaoDong Huang return 0U; 18*04150feeSXiaoDong Huang } 19*04150feeSXiaoDong Huang 20*04150feeSXiaoDong Huang rk_scmi_rstd_t *rockchip_scmi_get_rstd(unsigned int agent_id __unused, 21*04150feeSXiaoDong Huang unsigned int scmi_id __unused) 22*04150feeSXiaoDong Huang { 23*04150feeSXiaoDong Huang return NULL; 24*04150feeSXiaoDong Huang } 25*04150feeSXiaoDong Huang 26*04150feeSXiaoDong Huang size_t plat_scmi_rstd_count(unsigned int agent_id) 27*04150feeSXiaoDong Huang { 28*04150feeSXiaoDong Huang return rockchip_scmi_rstd_count(agent_id); 29*04150feeSXiaoDong Huang } 30*04150feeSXiaoDong Huang 31*04150feeSXiaoDong Huang const char *plat_scmi_rstd_get_name(unsigned int agent_id, 32*04150feeSXiaoDong Huang unsigned int scmi_id) 33*04150feeSXiaoDong Huang { 34*04150feeSXiaoDong Huang rk_scmi_rstd_t *rstd; 35*04150feeSXiaoDong Huang 36*04150feeSXiaoDong Huang rstd = rockchip_scmi_get_rstd(agent_id, scmi_id); 37*04150feeSXiaoDong Huang if (rstd == NULL) 38*04150feeSXiaoDong Huang return NULL; 39*04150feeSXiaoDong Huang 40*04150feeSXiaoDong Huang return rstd->name; 41*04150feeSXiaoDong Huang } 42*04150feeSXiaoDong Huang 43*04150feeSXiaoDong Huang int32_t plat_scmi_rstd_autonomous(unsigned int agent_id, 44*04150feeSXiaoDong Huang unsigned int scmi_id, 45*04150feeSXiaoDong Huang unsigned int state) 46*04150feeSXiaoDong Huang { 47*04150feeSXiaoDong Huang rk_scmi_rstd_t *rstd; 48*04150feeSXiaoDong Huang 49*04150feeSXiaoDong Huang rstd = rockchip_scmi_get_rstd(agent_id, scmi_id); 50*04150feeSXiaoDong Huang if (rstd == NULL) 51*04150feeSXiaoDong Huang return SCMI_NOT_FOUND; 52*04150feeSXiaoDong Huang 53*04150feeSXiaoDong Huang if ((rstd->rstd_ops && rstd->rstd_ops->reset_auto) != 0) 54*04150feeSXiaoDong Huang return rstd->rstd_ops->reset_auto(rstd, state); 55*04150feeSXiaoDong Huang else 56*04150feeSXiaoDong Huang return SCMI_NOT_SUPPORTED; 57*04150feeSXiaoDong Huang } 58*04150feeSXiaoDong Huang 59*04150feeSXiaoDong Huang int32_t plat_scmi_rstd_set_state(unsigned int agent_id, 60*04150feeSXiaoDong Huang unsigned int scmi_id, 61*04150feeSXiaoDong Huang bool assert_not_deassert) 62*04150feeSXiaoDong Huang { 63*04150feeSXiaoDong Huang rk_scmi_rstd_t *rstd; 64*04150feeSXiaoDong Huang 65*04150feeSXiaoDong Huang rstd = rockchip_scmi_get_rstd(agent_id, scmi_id); 66*04150feeSXiaoDong Huang if (rstd == NULL) 67*04150feeSXiaoDong Huang return SCMI_NOT_FOUND; 68*04150feeSXiaoDong Huang 69*04150feeSXiaoDong Huang if ((rstd->rstd_ops && rstd->rstd_ops->reset_explicit) != 0) 70*04150feeSXiaoDong Huang return rstd->rstd_ops->reset_explicit(rstd, 71*04150feeSXiaoDong Huang assert_not_deassert); 72*04150feeSXiaoDong Huang else 73*04150feeSXiaoDong Huang return SCMI_NOT_SUPPORTED; 74*04150feeSXiaoDong Huang } 75