1 /* SPDX-License-Identifier: GPL-2.0-only */ << 2 /* 1 /* 3 * Copyright (c) 2010 Google, Inc 2 * Copyright (c) 2010 Google, Inc 4 * Copyright (c) 2014 NVIDIA Corporation 3 * Copyright (c) 2014 NVIDIA Corporation 5 * 4 * 6 * Author: 5 * Author: 7 * Colin Cross <ccross@google.com> 6 * Colin Cross <ccross@google.com> >> 7 * >> 8 * This software is licensed under the terms of the GNU General Public >> 9 * License version 2, as published by the Free Software Foundation, and >> 10 * may be copied, distributed, and modified under those terms. >> 11 * >> 12 * This program is distributed in the hope that it will be useful, >> 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of >> 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> 15 * GNU General Public License for more details. >> 16 * 8 */ 17 */ 9 18 10 #ifndef __SOC_TEGRA_PMC_H__ 19 #ifndef __SOC_TEGRA_PMC_H__ 11 #define __SOC_TEGRA_PMC_H__ 20 #define __SOC_TEGRA_PMC_H__ 12 21 13 #include <linux/reboot.h> 22 #include <linux/reboot.h> 14 23 15 #include <soc/tegra/pm.h> 24 #include <soc/tegra/pm.h> 16 25 17 struct clk; 26 struct clk; 18 struct reset_control; 27 struct reset_control; 19 28 >> 29 #ifdef CONFIG_SMP 20 bool tegra_pmc_cpu_is_powered(unsigned int cpu 30 bool tegra_pmc_cpu_is_powered(unsigned int cpuid); 21 int tegra_pmc_cpu_power_on(unsigned int cpuid) 31 int tegra_pmc_cpu_power_on(unsigned int cpuid); 22 int tegra_pmc_cpu_remove_clamping(unsigned int 32 int tegra_pmc_cpu_remove_clamping(unsigned int cpuid); >> 33 #endif /* CONFIG_SMP */ 23 34 24 /* 35 /* 25 * powergate and I/O rail APIs 36 * powergate and I/O rail APIs 26 */ 37 */ 27 38 28 #define TEGRA_POWERGATE_CPU 0 39 #define TEGRA_POWERGATE_CPU 0 29 #define TEGRA_POWERGATE_3D 1 40 #define TEGRA_POWERGATE_3D 1 30 #define TEGRA_POWERGATE_VENC 2 41 #define TEGRA_POWERGATE_VENC 2 31 #define TEGRA_POWERGATE_PCIE 3 42 #define TEGRA_POWERGATE_PCIE 3 32 #define TEGRA_POWERGATE_VDEC 4 43 #define TEGRA_POWERGATE_VDEC 4 33 #define TEGRA_POWERGATE_L2 5 44 #define TEGRA_POWERGATE_L2 5 34 #define TEGRA_POWERGATE_MPE 6 45 #define TEGRA_POWERGATE_MPE 6 35 #define TEGRA_POWERGATE_HEG 7 46 #define TEGRA_POWERGATE_HEG 7 36 #define TEGRA_POWERGATE_SATA 8 47 #define TEGRA_POWERGATE_SATA 8 37 #define TEGRA_POWERGATE_CPU1 9 48 #define TEGRA_POWERGATE_CPU1 9 38 #define TEGRA_POWERGATE_CPU2 10 49 #define TEGRA_POWERGATE_CPU2 10 39 #define TEGRA_POWERGATE_CPU3 11 50 #define TEGRA_POWERGATE_CPU3 11 40 #define TEGRA_POWERGATE_CELP 12 51 #define TEGRA_POWERGATE_CELP 12 41 #define TEGRA_POWERGATE_3D1 13 52 #define TEGRA_POWERGATE_3D1 13 42 #define TEGRA_POWERGATE_CPU0 14 53 #define TEGRA_POWERGATE_CPU0 14 43 #define TEGRA_POWERGATE_C0NC 15 54 #define TEGRA_POWERGATE_C0NC 15 44 #define TEGRA_POWERGATE_C1NC 16 55 #define TEGRA_POWERGATE_C1NC 16 45 #define TEGRA_POWERGATE_SOR 17 56 #define TEGRA_POWERGATE_SOR 17 46 #define TEGRA_POWERGATE_DIS 18 57 #define TEGRA_POWERGATE_DIS 18 47 #define TEGRA_POWERGATE_DISB 19 58 #define TEGRA_POWERGATE_DISB 19 48 #define TEGRA_POWERGATE_XUSBA 20 59 #define TEGRA_POWERGATE_XUSBA 20 49 #define TEGRA_POWERGATE_XUSBB 21 60 #define TEGRA_POWERGATE_XUSBB 21 50 #define TEGRA_POWERGATE_XUSBC 22 61 #define TEGRA_POWERGATE_XUSBC 22 51 #define TEGRA_POWERGATE_VIC 23 62 #define TEGRA_POWERGATE_VIC 23 52 #define TEGRA_POWERGATE_IRAM 24 63 #define TEGRA_POWERGATE_IRAM 24 53 #define TEGRA_POWERGATE_NVDEC 25 64 #define TEGRA_POWERGATE_NVDEC 25 54 #define TEGRA_POWERGATE_NVJPG 26 65 #define TEGRA_POWERGATE_NVJPG 26 55 #define TEGRA_POWERGATE_AUD 27 66 #define TEGRA_POWERGATE_AUD 27 56 #define TEGRA_POWERGATE_DFD 28 67 #define TEGRA_POWERGATE_DFD 28 57 #define TEGRA_POWERGATE_VE2 29 68 #define TEGRA_POWERGATE_VE2 29 58 #define TEGRA_POWERGATE_MAX TEGRA_POWERGAT 69 #define TEGRA_POWERGATE_MAX TEGRA_POWERGATE_VE2 59 70 60 #define TEGRA_POWERGATE_3D0 TEGRA_POWERGAT 71 #define TEGRA_POWERGATE_3D0 TEGRA_POWERGATE_3D 61 72 62 /** 73 /** 63 * enum tegra_io_pad - I/O pad group identifie 74 * enum tegra_io_pad - I/O pad group identifier 64 * 75 * 65 * I/O pins on Tegra SoCs are grouped into so- 76 * I/O pins on Tegra SoCs are grouped into so-called I/O pads. Each such pad 66 * can be used to control the common voltage s 77 * can be used to control the common voltage signal level and power state of 67 * the pins of the given pad. 78 * the pins of the given pad. 68 */ 79 */ 69 enum tegra_io_pad { 80 enum tegra_io_pad { 70 TEGRA_IO_PAD_AUDIO, 81 TEGRA_IO_PAD_AUDIO, 71 TEGRA_IO_PAD_AUDIO_HV, 82 TEGRA_IO_PAD_AUDIO_HV, 72 TEGRA_IO_PAD_BB, 83 TEGRA_IO_PAD_BB, 73 TEGRA_IO_PAD_CAM, 84 TEGRA_IO_PAD_CAM, 74 TEGRA_IO_PAD_COMP, 85 TEGRA_IO_PAD_COMP, 75 TEGRA_IO_PAD_CONN, 86 TEGRA_IO_PAD_CONN, 76 TEGRA_IO_PAD_CSIA, 87 TEGRA_IO_PAD_CSIA, 77 TEGRA_IO_PAD_CSIB, 88 TEGRA_IO_PAD_CSIB, 78 TEGRA_IO_PAD_CSIC, 89 TEGRA_IO_PAD_CSIC, 79 TEGRA_IO_PAD_CSID, 90 TEGRA_IO_PAD_CSID, 80 TEGRA_IO_PAD_CSIE, 91 TEGRA_IO_PAD_CSIE, 81 TEGRA_IO_PAD_CSIF, 92 TEGRA_IO_PAD_CSIF, 82 TEGRA_IO_PAD_CSIG, << 83 TEGRA_IO_PAD_CSIH, << 84 TEGRA_IO_PAD_DAP3, << 85 TEGRA_IO_PAD_DAP5, << 86 TEGRA_IO_PAD_DBG, 93 TEGRA_IO_PAD_DBG, 87 TEGRA_IO_PAD_DEBUG_NONAO, 94 TEGRA_IO_PAD_DEBUG_NONAO, 88 TEGRA_IO_PAD_DMIC, 95 TEGRA_IO_PAD_DMIC, 89 TEGRA_IO_PAD_DMIC_HV, 96 TEGRA_IO_PAD_DMIC_HV, 90 TEGRA_IO_PAD_DP, 97 TEGRA_IO_PAD_DP, 91 TEGRA_IO_PAD_DSI, 98 TEGRA_IO_PAD_DSI, 92 TEGRA_IO_PAD_DSIB, 99 TEGRA_IO_PAD_DSIB, 93 TEGRA_IO_PAD_DSIC, 100 TEGRA_IO_PAD_DSIC, 94 TEGRA_IO_PAD_DSID, 101 TEGRA_IO_PAD_DSID, 95 TEGRA_IO_PAD_EDP, 102 TEGRA_IO_PAD_EDP, 96 TEGRA_IO_PAD_EMMC, 103 TEGRA_IO_PAD_EMMC, 97 TEGRA_IO_PAD_EMMC2, 104 TEGRA_IO_PAD_EMMC2, 98 TEGRA_IO_PAD_EQOS, << 99 TEGRA_IO_PAD_GPIO, 105 TEGRA_IO_PAD_GPIO, 100 TEGRA_IO_PAD_GP_PWM2, << 101 TEGRA_IO_PAD_GP_PWM3, << 102 TEGRA_IO_PAD_HDMI, 106 TEGRA_IO_PAD_HDMI, 103 TEGRA_IO_PAD_HDMI_DP0, 107 TEGRA_IO_PAD_HDMI_DP0, 104 TEGRA_IO_PAD_HDMI_DP1, 108 TEGRA_IO_PAD_HDMI_DP1, 105 TEGRA_IO_PAD_HDMI_DP2, << 106 TEGRA_IO_PAD_HDMI_DP3, << 107 TEGRA_IO_PAD_HSIC, 109 TEGRA_IO_PAD_HSIC, 108 TEGRA_IO_PAD_HV, 110 TEGRA_IO_PAD_HV, 109 TEGRA_IO_PAD_LVDS, 111 TEGRA_IO_PAD_LVDS, 110 TEGRA_IO_PAD_MIPI_BIAS, 112 TEGRA_IO_PAD_MIPI_BIAS, 111 TEGRA_IO_PAD_NAND, 113 TEGRA_IO_PAD_NAND, 112 TEGRA_IO_PAD_PEX_BIAS, 114 TEGRA_IO_PAD_PEX_BIAS, 113 TEGRA_IO_PAD_PEX_CLK_BIAS, 115 TEGRA_IO_PAD_PEX_CLK_BIAS, 114 TEGRA_IO_PAD_PEX_CLK1, 116 TEGRA_IO_PAD_PEX_CLK1, 115 TEGRA_IO_PAD_PEX_CLK2, 117 TEGRA_IO_PAD_PEX_CLK2, 116 TEGRA_IO_PAD_PEX_CLK3, 118 TEGRA_IO_PAD_PEX_CLK3, 117 TEGRA_IO_PAD_PEX_CLK_2_BIAS, << 118 TEGRA_IO_PAD_PEX_CLK_2, << 119 TEGRA_IO_PAD_PEX_CNTRL, 119 TEGRA_IO_PAD_PEX_CNTRL, 120 TEGRA_IO_PAD_PEX_CTL2, << 121 TEGRA_IO_PAD_PEX_L0_RST, << 122 TEGRA_IO_PAD_PEX_L1_RST, << 123 TEGRA_IO_PAD_PEX_L5_RST, << 124 TEGRA_IO_PAD_PWR_CTL, << 125 TEGRA_IO_PAD_SDMMC1, 120 TEGRA_IO_PAD_SDMMC1, 126 TEGRA_IO_PAD_SDMMC1_HV, 121 TEGRA_IO_PAD_SDMMC1_HV, 127 TEGRA_IO_PAD_SDMMC2, 122 TEGRA_IO_PAD_SDMMC2, 128 TEGRA_IO_PAD_SDMMC2_HV, 123 TEGRA_IO_PAD_SDMMC2_HV, 129 TEGRA_IO_PAD_SDMMC3, 124 TEGRA_IO_PAD_SDMMC3, 130 TEGRA_IO_PAD_SDMMC3_HV, 125 TEGRA_IO_PAD_SDMMC3_HV, 131 TEGRA_IO_PAD_SDMMC4, 126 TEGRA_IO_PAD_SDMMC4, 132 TEGRA_IO_PAD_SOC_GPIO10, << 133 TEGRA_IO_PAD_SOC_GPIO12, << 134 TEGRA_IO_PAD_SOC_GPIO13, << 135 TEGRA_IO_PAD_SOC_GPIO53, << 136 TEGRA_IO_PAD_SPI, 127 TEGRA_IO_PAD_SPI, 137 TEGRA_IO_PAD_SPI_HV, 128 TEGRA_IO_PAD_SPI_HV, 138 TEGRA_IO_PAD_SYS_DDC, 129 TEGRA_IO_PAD_SYS_DDC, 139 TEGRA_IO_PAD_UART, 130 TEGRA_IO_PAD_UART, 140 TEGRA_IO_PAD_UART4, << 141 TEGRA_IO_PAD_UART5, << 142 TEGRA_IO_PAD_UFS, 131 TEGRA_IO_PAD_UFS, 143 TEGRA_IO_PAD_USB0, 132 TEGRA_IO_PAD_USB0, 144 TEGRA_IO_PAD_USB1, 133 TEGRA_IO_PAD_USB1, 145 TEGRA_IO_PAD_USB2, 134 TEGRA_IO_PAD_USB2, 146 TEGRA_IO_PAD_USB3, 135 TEGRA_IO_PAD_USB3, 147 TEGRA_IO_PAD_USB_BIAS, 136 TEGRA_IO_PAD_USB_BIAS, 148 TEGRA_IO_PAD_AO_HV, !! 137 }; >> 138 >> 139 /* deprecated, use TEGRA_IO_PAD_{HDMI,LVDS} instead */ >> 140 #define TEGRA_IO_RAIL_HDMI TEGRA_IO_PAD_HDMI >> 141 #define TEGRA_IO_RAIL_LVDS TEGRA_IO_PAD_LVDS >> 142 >> 143 /** >> 144 * enum tegra_io_pad_voltage - voltage level of the I/O pad's source rail >> 145 * @TEGRA_IO_PAD_1800000UV: 1.8 V >> 146 * @TEGRA_IO_PAD_3300000UV: 3.3 V >> 147 */ >> 148 enum tegra_io_pad_voltage { >> 149 TEGRA_IO_PAD_1800000UV, >> 150 TEGRA_IO_PAD_3300000UV, 149 }; 151 }; 150 152 151 #ifdef CONFIG_SOC_TEGRA_PMC 153 #ifdef CONFIG_SOC_TEGRA_PMC >> 154 int tegra_powergate_is_powered(unsigned int id); 152 int tegra_powergate_power_on(unsigned int id); 155 int tegra_powergate_power_on(unsigned int id); 153 int tegra_powergate_power_off(unsigned int id) 156 int tegra_powergate_power_off(unsigned int id); 154 int tegra_powergate_remove_clamping(unsigned i 157 int tegra_powergate_remove_clamping(unsigned int id); 155 158 156 /* Must be called with clk disabled, and retur 159 /* Must be called with clk disabled, and returns with clk enabled */ 157 int tegra_powergate_sequence_power_up(unsigned 160 int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk, 158 struct r 161 struct reset_control *rst); 159 162 160 int tegra_io_pad_power_enable(enum tegra_io_pa 163 int tegra_io_pad_power_enable(enum tegra_io_pad id); 161 int tegra_io_pad_power_disable(enum tegra_io_p 164 int tegra_io_pad_power_disable(enum tegra_io_pad id); >> 165 int tegra_io_pad_set_voltage(enum tegra_io_pad id, >> 166 enum tegra_io_pad_voltage voltage); >> 167 int tegra_io_pad_get_voltage(enum tegra_io_pad id); >> 168 >> 169 /* deprecated, use tegra_io_pad_power_{enable,disable}() instead */ >> 170 int tegra_io_rail_power_on(unsigned int id); >> 171 int tegra_io_rail_power_off(unsigned int id); 162 172 >> 173 enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void); 163 void tegra_pmc_set_suspend_mode(enum tegra_sus 174 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode); 164 void tegra_pmc_enter_suspend_mode(enum tegra_s 175 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode); 165 176 166 bool tegra_pmc_core_domain_state_synced(void); << 167 << 168 #else 177 #else >> 178 static inline int tegra_powergate_is_powered(unsigned int id) >> 179 { >> 180 return -ENOSYS; >> 181 } >> 182 169 static inline int tegra_powergate_power_on(uns 183 static inline int tegra_powergate_power_on(unsigned int id) 170 { 184 { 171 return -ENOSYS; 185 return -ENOSYS; 172 } 186 } 173 187 174 static inline int tegra_powergate_power_off(un 188 static inline int tegra_powergate_power_off(unsigned int id) 175 { 189 { 176 return -ENOSYS; 190 return -ENOSYS; 177 } 191 } 178 192 179 static inline int tegra_powergate_remove_clamp 193 static inline int tegra_powergate_remove_clamping(unsigned int id) 180 { 194 { 181 return -ENOSYS; 195 return -ENOSYS; 182 } 196 } 183 197 184 static inline int tegra_powergate_sequence_pow 198 static inline int tegra_powergate_sequence_power_up(unsigned int id, 185 199 struct clk *clk, 186 200 struct reset_control *rst) 187 { 201 { 188 return -ENOSYS; 202 return -ENOSYS; 189 } 203 } 190 204 191 static inline int tegra_io_pad_power_enable(en 205 static inline int tegra_io_pad_power_enable(enum tegra_io_pad id) 192 { 206 { 193 return -ENOSYS; 207 return -ENOSYS; 194 } 208 } 195 209 196 static inline int tegra_io_pad_power_disable(e 210 static inline int tegra_io_pad_power_disable(enum tegra_io_pad id) 197 { 211 { 198 return -ENOSYS; 212 return -ENOSYS; 199 } 213 } 200 214 201 static inline int tegra_io_pad_get_voltage(enu !! 215 static inline int tegra_io_pad_set_voltage(enum tegra_io_pad id, >> 216 enum tegra_io_pad_voltage voltage) 202 { 217 { 203 return -ENOSYS; 218 return -ENOSYS; 204 } 219 } 205 220 206 static inline void tegra_pmc_set_suspend_mode( !! 221 static inline int tegra_io_pad_get_voltage(enum tegra_io_pad id) 207 { 222 { >> 223 return -ENOSYS; 208 } 224 } 209 225 210 static inline void tegra_pmc_enter_suspend_mod !! 226 static inline int tegra_io_rail_power_on(unsigned int id) 211 { 227 { >> 228 return -ENOSYS; 212 } 229 } 213 230 214 static inline bool tegra_pmc_core_domain_state !! 231 static inline int tegra_io_rail_power_off(unsigned int id) 215 { 232 { 216 return false; !! 233 return -ENOSYS; 217 } 234 } 218 235 219 #endif /* CONFIG_SOC_TEGRA_PMC */ << 220 << 221 #if defined(CONFIG_SOC_TEGRA_PMC) && defined(C << 222 enum tegra_suspend_mode tegra_pmc_get_suspend_ << 223 #else << 224 static inline enum tegra_suspend_mode tegra_pm 236 static inline enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void) 225 { 237 { 226 return TEGRA_SUSPEND_NONE; 238 return TEGRA_SUSPEND_NONE; 227 } 239 } 228 #endif !! 240 >> 241 static inline void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) >> 242 { >> 243 } >> 244 >> 245 static inline void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) >> 246 { >> 247 } >> 248 >> 249 #endif /* CONFIG_SOC_TEGRA_PMC */ 229 250 230 #endif /* __SOC_TEGRA_PMC_H__ */ 251 #endif /* __SOC_TEGRA_PMC_H__ */ 231 252
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.