1 /*
2  * Renesas SCP/MCP Software
3  * Copyright (c) 2015-2021, Arm Limited and Contributors. All rights reserved.
4  * Copyright (c) 2020-2021, Renesas Electronics Corporation. All rights
5  * reserved.
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 
10 #ifndef MOD_RCAR_SYSTEM_POWER_H
11 #define MOD_RCAR_SYSTEM_POWER_H
12 
13 #include <mod_power_domain.h>
14 
15 #include <fwk_id.h>
16 
17 /*!
18  * \ingroup GroupRCARModule RCAR Product Modules
19  * \defgroup GroupRCARSystemPower System Power Support
20  *
21  * @{
22  */
23 
24 /*! Additional system_power power states */
25 enum mod_system_power_power_states {
26     MOD_SYSTEM_POWER_POWER_STATE_SLEEP0 = MOD_PD_STATE_COUNT,
27     MOD_SYSTEM_POWER_POWER_STATE_SLEEP1,
28     MOD_SYSTEM_POWER_POWER_STATE_COUNT
29 };
30 
31 /*! Extended PPU configuration */
32 struct mod_system_power_ext_ppu_config {
33     /*! PPU identifier */
34     fwk_id_t ppu_id;
35 
36     /*! API identifier */
37     fwk_id_t api_id;
38 };
39 
40 /*! Module configuration */
41 struct mod_system_power_config {
42     /*! SoC wakeup IRQ number */
43     unsigned int soc_wakeup_irq;
44 
45     /*! System 0 PPU element ID */
46     fwk_id_t ppu_sys0_id;
47 
48     /*! System 1 PPU element ID */
49     fwk_id_t ppu_sys1_id;
50 
51     /*! System PPUs API ID */
52     fwk_id_t ppu_sys_api_id;
53 
54     /*! Number of extended PPUs */
55     size_t ext_ppus_count;
56 
57     /*!
58      * \brief Pointer to array of extended PPU configurations.
59      *
60      * \details These PPUs will be powered on automatically with the rest of the
61      *      system.
62      */
63     const struct mod_system_power_ext_ppu_config *ext_ppus;
64 
65     /*! System shutdown driver identifier */
66     fwk_id_t driver_id;
67 
68     /*! System shutdown driver API identifier */
69     fwk_id_t driver_api_id;
70 };
71 
72 /*!
73  * \brief Driver interface.
74  */
75 struct mod_system_power_driver_api {
76     /*!
77      * \brief Pointer to the system shutdown function.
78      *
79      * \note This function is \b mandatory. In case of a successful call the
80      *      function does not return.
81      *
82      * \param system_shutdown Type of system shutdown.
83      *
84      * \retval One of the driver-defined error code.
85      */
86     int (*system_shutdown)(enum mod_pd_system_shutdown system_shutdown);
87 };
88 
89 /*!
90  * \defgroup GroupSystemPowerIds Identifiers
91  * \{
92  */
93 
94 /*!
95  * \brief API indices.
96  */
97 enum mod_system_power_api_idx {
98     /*! API index for the power domain driver API */
99     MOD_SYSTEM_POWER_API_IDX_PD_DRIVER,
100 
101     /*! API index for the power domain driver input API */
102     MOD_SYSTEM_POWER_API_IDX_PD_DRIVER_INPUT,
103 
104     /*! Number of exposed APIs */
105     MOD_SYSTEM_POWER_API_COUNT
106 };
107 
108 /*! Identifier of the power domain driver API */
109 static const fwk_id_t mod_system_power_api_id_pd_driver = FWK_ID_API_INIT(
110     FWK_MODULE_IDX_SYSTEM_POWER,
111     MOD_SYSTEM_POWER_API_IDX_PD_DRIVER);
112 
113 /*! Identifier of the power domain driver input API */
114 static const fwk_id_t mod_system_power_api_id_pd_driver_input = FWK_ID_API_INIT(
115     FWK_MODULE_IDX_SYSTEM_POWER,
116     MOD_SYSTEM_POWER_API_IDX_PD_DRIVER_INPUT);
117 
118 /*!
119  * \}
120  */
121 
122 /*!
123  * @}
124  */
125 
126 #endif /* MOD_RCAR_SYSTEM_POWER_H */
127