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
rockchip_scmi_rstd_count(unsigned int agent_id __unused)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
rockchip_scmi_get_rstd(unsigned int agent_id __unused,unsigned int scmi_id __unused)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
plat_scmi_rstd_count(unsigned int agent_id)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
plat_scmi_rstd_get_name(unsigned int agent_id,unsigned int scmi_id)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
plat_scmi_rstd_autonomous(unsigned int agent_id,unsigned int scmi_id,unsigned int state)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
plat_scmi_rstd_set_state(unsigned int agent_id,unsigned int scmi_id,bool assert_not_deassert)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