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