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_PM_SLEEP >> 30 enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void); >> 31 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode); >> 32 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode); >> 33 #endif /* CONFIG_PM_SLEEP */ >> 34 >> 35 #ifdef CONFIG_SMP 20 bool tegra_pmc_cpu_is_powered(unsigned int cpu 36 bool tegra_pmc_cpu_is_powered(unsigned int cpuid); 21 int tegra_pmc_cpu_power_on(unsigned int cpuid) 37 int tegra_pmc_cpu_power_on(unsigned int cpuid); 22 int tegra_pmc_cpu_remove_clamping(unsigned int 38 int tegra_pmc_cpu_remove_clamping(unsigned int cpuid); >> 39 #endif /* CONFIG_SMP */ 23 40 24 /* 41 /* 25 * powergate and I/O rail APIs 42 * powergate and I/O rail APIs 26 */ 43 */ 27 44 28 #define TEGRA_POWERGATE_CPU 0 45 #define TEGRA_POWERGATE_CPU 0 29 #define TEGRA_POWERGATE_3D 1 46 #define TEGRA_POWERGATE_3D 1 30 #define TEGRA_POWERGATE_VENC 2 47 #define TEGRA_POWERGATE_VENC 2 31 #define TEGRA_POWERGATE_PCIE 3 48 #define TEGRA_POWERGATE_PCIE 3 32 #define TEGRA_POWERGATE_VDEC 4 49 #define TEGRA_POWERGATE_VDEC 4 33 #define TEGRA_POWERGATE_L2 5 50 #define TEGRA_POWERGATE_L2 5 34 #define TEGRA_POWERGATE_MPE 6 51 #define TEGRA_POWERGATE_MPE 6 35 #define TEGRA_POWERGATE_HEG 7 52 #define TEGRA_POWERGATE_HEG 7 36 #define TEGRA_POWERGATE_SATA 8 53 #define TEGRA_POWERGATE_SATA 8 37 #define TEGRA_POWERGATE_CPU1 9 54 #define TEGRA_POWERGATE_CPU1 9 38 #define TEGRA_POWERGATE_CPU2 10 55 #define TEGRA_POWERGATE_CPU2 10 39 #define TEGRA_POWERGATE_CPU3 11 56 #define TEGRA_POWERGATE_CPU3 11 40 #define TEGRA_POWERGATE_CELP 12 57 #define TEGRA_POWERGATE_CELP 12 41 #define TEGRA_POWERGATE_3D1 13 58 #define TEGRA_POWERGATE_3D1 13 42 #define TEGRA_POWERGATE_CPU0 14 59 #define TEGRA_POWERGATE_CPU0 14 43 #define TEGRA_POWERGATE_C0NC 15 60 #define TEGRA_POWERGATE_C0NC 15 44 #define TEGRA_POWERGATE_C1NC 16 61 #define TEGRA_POWERGATE_C1NC 16 45 #define TEGRA_POWERGATE_SOR 17 62 #define TEGRA_POWERGATE_SOR 17 46 #define TEGRA_POWERGATE_DIS 18 63 #define TEGRA_POWERGATE_DIS 18 47 #define TEGRA_POWERGATE_DISB 19 64 #define TEGRA_POWERGATE_DISB 19 48 #define TEGRA_POWERGATE_XUSBA 20 65 #define TEGRA_POWERGATE_XUSBA 20 49 #define TEGRA_POWERGATE_XUSBB 21 66 #define TEGRA_POWERGATE_XUSBB 21 50 #define TEGRA_POWERGATE_XUSBC 22 67 #define TEGRA_POWERGATE_XUSBC 22 51 #define TEGRA_POWERGATE_VIC 23 68 #define TEGRA_POWERGATE_VIC 23 52 #define TEGRA_POWERGATE_IRAM 24 69 #define TEGRA_POWERGATE_IRAM 24 53 #define TEGRA_POWERGATE_NVDEC 25 70 #define TEGRA_POWERGATE_NVDEC 25 54 #define TEGRA_POWERGATE_NVJPG 26 71 #define TEGRA_POWERGATE_NVJPG 26 55 #define TEGRA_POWERGATE_AUD 27 72 #define TEGRA_POWERGATE_AUD 27 56 #define TEGRA_POWERGATE_DFD 28 73 #define TEGRA_POWERGATE_DFD 28 57 #define TEGRA_POWERGATE_VE2 29 74 #define TEGRA_POWERGATE_VE2 29 58 #define TEGRA_POWERGATE_MAX TEGRA_POWERGAT 75 #define TEGRA_POWERGATE_MAX TEGRA_POWERGATE_VE2 59 76 60 #define TEGRA_POWERGATE_3D0 TEGRA_POWERGAT 77 #define TEGRA_POWERGATE_3D0 TEGRA_POWERGATE_3D 61 78 62 /** !! 79 #define TEGRA_IO_RAIL_CSIA 0 63 * enum tegra_io_pad - I/O pad group identifie !! 80 #define TEGRA_IO_RAIL_CSIB 1 64 * !! 81 #define TEGRA_IO_RAIL_DSI 2 65 * I/O pins on Tegra SoCs are grouped into so- !! 82 #define TEGRA_IO_RAIL_MIPI_BIAS 3 66 * can be used to control the common voltage s !! 83 #define TEGRA_IO_RAIL_PEX_BIAS 4 67 * the pins of the given pad. !! 84 #define TEGRA_IO_RAIL_PEX_CLK1 5 68 */ !! 85 #define TEGRA_IO_RAIL_PEX_CLK2 6 69 enum tegra_io_pad { !! 86 #define TEGRA_IO_RAIL_USB0 9 70 TEGRA_IO_PAD_AUDIO, !! 87 #define TEGRA_IO_RAIL_USB1 10 71 TEGRA_IO_PAD_AUDIO_HV, !! 88 #define TEGRA_IO_RAIL_USB2 11 72 TEGRA_IO_PAD_BB, !! 89 #define TEGRA_IO_RAIL_USB_BIAS 12 73 TEGRA_IO_PAD_CAM, !! 90 #define TEGRA_IO_RAIL_NAND 13 74 TEGRA_IO_PAD_COMP, !! 91 #define TEGRA_IO_RAIL_UART 14 75 TEGRA_IO_PAD_CONN, !! 92 #define TEGRA_IO_RAIL_BB 15 76 TEGRA_IO_PAD_CSIA, !! 93 #define TEGRA_IO_RAIL_AUDIO 17 77 TEGRA_IO_PAD_CSIB, !! 94 #define TEGRA_IO_RAIL_HSIC 19 78 TEGRA_IO_PAD_CSIC, !! 95 #define TEGRA_IO_RAIL_COMP 22 79 TEGRA_IO_PAD_CSID, !! 96 #define TEGRA_IO_RAIL_HDMI 28 80 TEGRA_IO_PAD_CSIE, !! 97 #define TEGRA_IO_RAIL_PEX_CNTRL 32 81 TEGRA_IO_PAD_CSIF, !! 98 #define TEGRA_IO_RAIL_SDMMC1 33 82 TEGRA_IO_PAD_CSIG, !! 99 #define TEGRA_IO_RAIL_SDMMC3 34 83 TEGRA_IO_PAD_CSIH, !! 100 #define TEGRA_IO_RAIL_SDMMC4 35 84 TEGRA_IO_PAD_DAP3, !! 101 #define TEGRA_IO_RAIL_CAM 36 85 TEGRA_IO_PAD_DAP5, !! 102 #define TEGRA_IO_RAIL_RES 37 86 TEGRA_IO_PAD_DBG, !! 103 #define TEGRA_IO_RAIL_HV 38 87 TEGRA_IO_PAD_DEBUG_NONAO, !! 104 #define TEGRA_IO_RAIL_DSIB 39 88 TEGRA_IO_PAD_DMIC, !! 105 #define TEGRA_IO_RAIL_DSIC 40 89 TEGRA_IO_PAD_DMIC_HV, !! 106 #define TEGRA_IO_RAIL_DSID 41 90 TEGRA_IO_PAD_DP, !! 107 #define TEGRA_IO_RAIL_CSIE 44 91 TEGRA_IO_PAD_DSI, !! 108 #define TEGRA_IO_RAIL_LVDS 57 92 TEGRA_IO_PAD_DSIB, !! 109 #define TEGRA_IO_RAIL_SYS_DDC 58 93 TEGRA_IO_PAD_DSIC, << 94 TEGRA_IO_PAD_DSID, << 95 TEGRA_IO_PAD_EDP, << 96 TEGRA_IO_PAD_EMMC, << 97 TEGRA_IO_PAD_EMMC2, << 98 TEGRA_IO_PAD_EQOS, << 99 TEGRA_IO_PAD_GPIO, << 100 TEGRA_IO_PAD_GP_PWM2, << 101 TEGRA_IO_PAD_GP_PWM3, << 102 TEGRA_IO_PAD_HDMI, << 103 TEGRA_IO_PAD_HDMI_DP0, << 104 TEGRA_IO_PAD_HDMI_DP1, << 105 TEGRA_IO_PAD_HDMI_DP2, << 106 TEGRA_IO_PAD_HDMI_DP3, << 107 TEGRA_IO_PAD_HSIC, << 108 TEGRA_IO_PAD_HV, << 109 TEGRA_IO_PAD_LVDS, << 110 TEGRA_IO_PAD_MIPI_BIAS, << 111 TEGRA_IO_PAD_NAND, << 112 TEGRA_IO_PAD_PEX_BIAS, << 113 TEGRA_IO_PAD_PEX_CLK_BIAS, << 114 TEGRA_IO_PAD_PEX_CLK1, << 115 TEGRA_IO_PAD_PEX_CLK2, << 116 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, << 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, << 126 TEGRA_IO_PAD_SDMMC1_HV, << 127 TEGRA_IO_PAD_SDMMC2, << 128 TEGRA_IO_PAD_SDMMC2_HV, << 129 TEGRA_IO_PAD_SDMMC3, << 130 TEGRA_IO_PAD_SDMMC3_HV, << 131 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, << 137 TEGRA_IO_PAD_SPI_HV, << 138 TEGRA_IO_PAD_SYS_DDC, << 139 TEGRA_IO_PAD_UART, << 140 TEGRA_IO_PAD_UART4, << 141 TEGRA_IO_PAD_UART5, << 142 TEGRA_IO_PAD_UFS, << 143 TEGRA_IO_PAD_USB0, << 144 TEGRA_IO_PAD_USB1, << 145 TEGRA_IO_PAD_USB2, << 146 TEGRA_IO_PAD_USB3, << 147 TEGRA_IO_PAD_USB_BIAS, << 148 TEGRA_IO_PAD_AO_HV, << 149 }; << 150 110 151 #ifdef CONFIG_SOC_TEGRA_PMC !! 111 #ifdef CONFIG_ARCH_TEGRA >> 112 int tegra_powergate_is_powered(unsigned int id); 152 int tegra_powergate_power_on(unsigned int id); 113 int tegra_powergate_power_on(unsigned int id); 153 int tegra_powergate_power_off(unsigned int id) 114 int tegra_powergate_power_off(unsigned int id); 154 int tegra_powergate_remove_clamping(unsigned i 115 int tegra_powergate_remove_clamping(unsigned int id); 155 116 156 /* Must be called with clk disabled, and retur 117 /* Must be called with clk disabled, and returns with clk enabled */ 157 int tegra_powergate_sequence_power_up(unsigned 118 int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk, 158 struct r 119 struct reset_control *rst); 159 120 160 int tegra_io_pad_power_enable(enum tegra_io_pa !! 121 int tegra_io_rail_power_on(unsigned int id); 161 int tegra_io_pad_power_disable(enum tegra_io_p !! 122 int tegra_io_rail_power_off(unsigned int id); 162 << 163 void tegra_pmc_set_suspend_mode(enum tegra_sus << 164 void tegra_pmc_enter_suspend_mode(enum tegra_s << 165 << 166 bool tegra_pmc_core_domain_state_synced(void); << 167 << 168 #else 123 #else >> 124 static inline int tegra_powergate_is_powered(unsigned int id) >> 125 { >> 126 return -ENOSYS; >> 127 } >> 128 169 static inline int tegra_powergate_power_on(uns 129 static inline int tegra_powergate_power_on(unsigned int id) 170 { 130 { 171 return -ENOSYS; 131 return -ENOSYS; 172 } 132 } 173 133 174 static inline int tegra_powergate_power_off(un 134 static inline int tegra_powergate_power_off(unsigned int id) 175 { 135 { 176 return -ENOSYS; 136 return -ENOSYS; 177 } 137 } 178 138 179 static inline int tegra_powergate_remove_clamp 139 static inline int tegra_powergate_remove_clamping(unsigned int id) 180 { 140 { 181 return -ENOSYS; 141 return -ENOSYS; 182 } 142 } 183 143 184 static inline int tegra_powergate_sequence_pow 144 static inline int tegra_powergate_sequence_power_up(unsigned int id, 185 145 struct clk *clk, 186 146 struct reset_control *rst) 187 { 147 { 188 return -ENOSYS; 148 return -ENOSYS; 189 } 149 } 190 150 191 static inline int tegra_io_pad_power_enable(en !! 151 static inline int tegra_io_rail_power_on(unsigned int id) 192 { 152 { 193 return -ENOSYS; 153 return -ENOSYS; 194 } 154 } 195 155 196 static inline int tegra_io_pad_power_disable(e !! 156 static inline int tegra_io_rail_power_off(unsigned int id) 197 { 157 { 198 return -ENOSYS; 158 return -ENOSYS; 199 } 159 } 200 !! 160 #endif /* CONFIG_ARCH_TEGRA */ 201 static inline int tegra_io_pad_get_voltage(enu << 202 { << 203 return -ENOSYS; << 204 } << 205 << 206 static inline void tegra_pmc_set_suspend_mode( << 207 { << 208 } << 209 << 210 static inline void tegra_pmc_enter_suspend_mod << 211 { << 212 } << 213 << 214 static inline bool tegra_pmc_core_domain_state << 215 { << 216 return false; << 217 } << 218 << 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 << 225 { << 226 return TEGRA_SUSPEND_NONE; << 227 } << 228 #endif << 229 161 230 #endif /* __SOC_TEGRA_PMC_H__ */ 162 #endif /* __SOC_TEGRA_PMC_H__ */ 231 163
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.