Index: arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_pinmux_utils.h |
diff --git a/arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_pinmux_utils.h b/arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_pinmux_utils.h |
new file mode 100755 |
index 0000000000000000000000000000000000000000..8614aecb5cb312d4de2bf714883e05f22173d097 |
--- /dev/null |
+++ b/arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_pinmux_utils.h |
@@ -0,0 +1,323 @@ |
+/* |
+ * Copyright (c) 2008-2009 NVIDIA Corporation. |
+ * All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions are met: |
+ * |
+ * Redistributions of source code must retain the above copyright notice, |
+ * this list of conditions and the following disclaimer. |
+ * |
+ * Redistributions in binary form must reproduce the above copyright notice, |
+ * this list of conditions and the following disclaimer in the documentation |
+ * and/or other materials provided with the distribution. |
+ * |
+ * Neither the name of the NVIDIA Corporation nor the names of its contributors |
+ * may be used to endorse or promote products derived from this software |
+ * without specific prior written permission. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
+ * POSSIBILITY OF SUCH DAMAGE. |
+ * |
+ */ |
+ |
+#ifndef NVRM_PINMUX_UTILS_H |
+#define NVRM_PINMUX_UTILS_H |
+ |
+/* |
+ * nvrm_pinmux_utils.h defines the pinmux macros to implement for the resource |
+ * manager. |
+ */ |
+ |
+#include "nvcommon.h" |
+#include "nvrm_pinmux.h" |
+#include "nvrm_drf.h" |
+#include "nvassert.h" |
+#include "nvrm_hwintf.h" |
+#include "nvodm_modules.h" |
+ |
+// This is to disable trisate refcounting. |
+#define SKIP_TRISTATE_REFCNT 0 |
+ |
+/* The pin mux code supports run-time trace debugging of all updates to the |
+ * pin mux & tristate registers by embedding strings (cast to NvU32s) into the |
+ * control tables. |
+ */ |
+#define NVRM_PINMUX_DEBUG_FLAG 0 |
+#define NVRM_PINMUX_SET_OPCODE_SIZE_RANGE 3:1 |
+ |
+ |
+#if NVRM_PINMUX_DEBUG_FLAG |
+NV_CT_ASSERT(sizeof(NvU32)==sizeof(const char*)); |
+#endif |
+ |
+// The extra strings bloat the size of Set/Unset opcodes |
+#define NVRM_PINMUX_SET_OPCODE_SIZE ((NVRM_PINMUX_DEBUG_FLAG)?NVRM_PINMUX_SET_OPCODE_SIZE_RANGE) |
+ |
+#ifdef __cplusplus |
+extern "C" |
+{ |
+#endif /* __cplusplus */ |
+ |
+typedef enum { |
+ PinMuxConfig_OpcodeExtend = 0, |
+ PinMuxConfig_Set = 1, |
+ PinMuxConfig_Unset = 2, |
+ PinMuxConfig_BranchLink = 3, |
+} PinMuxConfigStates; |
+ |
+typedef enum { |
+ PinMuxOpcode_ConfigEnd = 0, |
+ PinMuxOpcode_ModuleDone = 1, |
+ PinMuxOpcode_SubroutinesDone = 2, |
+} PinMuxConfigExtendOpcodes; |
+ |
+// for extended opcodes, this field is set with the extended opcode |
+#define MUX_ENTRY_0_OPCODE_EXTENSION_RANGE 3:2 |
+// The state for this entry |
+#define MUX_ENTRY_0_STATE_RANGE 1:0 |
+ |
+#define MAX_NESTING_DEPTH 4 |
+ |
+/* This macro is used for opcode entries in the tables */ |
+#define PIN_MUX_OPCODE(_OP_) \ |
+ (NV_DRF_NUM(MUX,ENTRY,STATE,PinMuxConfig_OpcodeExtend) | \ |
+ NV_DRF_NUM(MUX,ENTRY,OPCODE_EXTENSION,(_OP_))) |
+ |
+/* This is a dummy entry in the array which indicates that all setting/unsetting for |
+ * a configuration is complete. */ |
+#define CONFIGEND() PIN_MUX_OPCODE(PinMuxOpcode_ConfigEnd) |
+ |
+/* This is a dummy entry in the array which indicates that the last configuration |
+ * for the module instance has been passed. */ |
+#define MODULEDONE() PIN_MUX_OPCODE(PinMuxOpcode_ModuleDone) |
+ |
+/* This is a dummy entry in the array which indicates that all "extra" configurations |
+ * used by sub-routines have been passed. */ |
+#define SUBROUTINESDONE() PIN_MUX_OPCODE(PinMuxOpcode_SubroutinesDone) |
+ |
+/* This macro is used to insert a branch-and-link from one configuration to another */ |
+#define BRANCH(_ADDR_) \ |
+ (NV_DRF_NUM(MUX,ENTRY,STATE,PinMuxConfig_BranchLink) | \ |
+ NV_DRF_NUM(MUX,ENTRY,BRANCH_ADDRESS,(_ADDR_))) |
+ |
+/** RmInitPinMux will program the pin mux settings for all IO controllers to |
+ * the ODM-selected value (or a safe reset value, if no value is defined in |
+ * the ODM query. |
+ * It will also read the current value of the tristate registers, to |
+ * initialize the reference count |
+ * |
+ * @param hDevice The RM instance |
+ * @param First Indicates whether to perform just safe-reset and DVC |
+ * initialization, for early boot, or full initialization |
+ */ |
+void NvRmInitPinMux( |
+ NvRmDeviceHandle hDevice, |
+ NvBool First); |
+ |
+/** RmPinMuxConfigSelect sets a specific module to a specific configuration. It is used |
+ * for multiplexed controllers, and should only be called by modules which support |
+ * multiplexing. Note that this interface uses the IoModule enumerant, not the RmModule. |
+ * |
+ *@param hDevice The RM instance |
+ *@param IoModule The module to set |
+ *@param Instance The instance number of the Module |
+ *@param Configuaration The module's configuration to set |
+ */ |
+ |
+void NvRmPinMuxConfigSelect( |
+ NvRmDeviceHandle hDevice, |
+ NvOdmIoModule IoModule, |
+ NvU32 Instance, |
+ NvU32 Configuration); |
+ |
+/** RmPinMuxConfigSetTristate will either enable or disable the tristate for a specific |
+ * IO module configuration. It is used for multiplexed controllers, and should only be |
+ * called by modules which support multiplexing. Note that this interface uses the |
+ * IoModule enumerant, not the RmModule. |
+ * |
+ *@param hDevice The RM instance |
+ *@param RMModule The module to set |
+ *@param Instance The instance number of the module. |
+ *@param Configuaration The module's configuration to set |
+ *@param EnableTristate NV_TRUE will tristate the specified pins, NV_FALSE will un-tristate |
+ */ |
+ |
+void NvRmPinMuxConfigSetTristate( |
+ NvRmDeviceHandle hDevice, |
+ NvOdmIoModule IoModule, |
+ NvU32 Instance, |
+ NvU32 Configuration, |
+ NvBool EnableTristate); |
+ |
+/** NvRmSetGpioTristate will either enable or disable the tristate for GPIO ports. |
+ * RM client gpio should only call NvRmSetGpioTristate, |
+ * which will program the tristate correctly based pins of the particular port. |
+ * |
+ *@param hDevice The RM instance |
+ *@param Port The GPIO port to set |
+ *@param Pin The Pinnumber of the port to set. |
+ *@param EnableTristate NV_TRUE will tristate the specified pins, NV_FALSE will un-tristate |
+ */ |
+void NvRmSetGpioTristate( |
+ NvRmDeviceHandle hDevice, |
+ NvU32 Port, |
+ NvU32 Pin, |
+ NvBool EnableTristate); |
+ |
+/** NvRmPrivRmModuleToOdmModule will perform the mapping of RM modules to |
+ * ODM modules and instances, using the chip-specific mapping wherever |
+ * necessary */ |
+NvU32 NvRmPrivRmModuleToOdmModule( |
+ NvU32 ChipId, |
+ NvU32 RmModule, |
+ NvOdmIoModule *pOdmModules, |
+ NvU32 *pOdmInstances); |
+ |
+ |
+// Forward declarations for all chip-specific helper functions |
+NvError NvRmPrivAp15GetModuleInterfaceCaps( |
+ NvOdmIoModule Module, |
+ NvU32 Instance, |
+ NvU32 Config, |
+ void* pCaps); |
+ |
+NvError NvRmPrivAp16GetModuleInterfaceCaps( |
+ NvOdmIoModule Module, |
+ NvU32 Instance, |
+ NvU32 Config, |
+ void* pCaps); |
+ |
+NvError NvRmPrivAp20GetModuleInterfaceCaps( |
+ NvOdmIoModule Module, |
+ NvU32 Instance, |
+ NvU32 Config, |
+ void* pCaps); |
+ |
+const NvU32*** NvRmAp15GetPinMuxConfigs(NvRmDeviceHandle hDevice); |
+ |
+const NvU32*** NvRmAp16GetPinMuxConfigs(NvRmDeviceHandle hDevice); |
+ |
+const NvU32*** NvRmAp20GetPinMuxConfigs(NvRmDeviceHandle hDevice); |
+ |
+NvBool NvRmAp15GetPinGroupForGpio( |
+ NvRmDeviceHandle hDevice, |
+ NvU32 Port, |
+ NvU32 Pin, |
+ NvU32 *pMapping); |
+ |
+NvBool NvRmAp20GetPinGroupForGpio( |
+ NvRmDeviceHandle hDevice, |
+ NvU32 Port, |
+ NvU32 Pin, |
+ NvU32* pMapping); |
+ |
+void NvRmPrivAp15EnableExternalClockSource( |
+ NvRmDeviceHandle hDevice, |
+ const NvU32* pModuleProgram, |
+ NvU32 Config, |
+ NvBool EnableClock); |
+ |
+void NvRmPrivAp20EnableExternalClockSource( |
+ NvRmDeviceHandle hDevice, |
+ const NvU32* pModuleProgram, |
+ NvU32 Config, |
+ NvBool EnableClock); |
+ |
+NvU32 NvRmPrivAp15GetExternalClockSourceFreq( |
+ NvRmDeviceHandle hDevice, |
+ const NvU32* pModuleProgram, |
+ NvU32 Config); |
+ |
+NvU32 NvRmPrivAp20GetExternalClockSourceFreq( |
+ NvRmDeviceHandle hDevice, |
+ const NvU32* pModuleProgram, |
+ NvU32 Config); |
+ |
+NvBool NvRmPrivAp15RmModuleToOdmModule( |
+ NvRmModuleID ModuleID, |
+ NvOdmIoModule* pOdmModules, |
+ NvU32* pOdmInstances, |
+ NvU32 *pCnt); |
+ |
+NvBool NvRmPrivAp16RmModuleToOdmModule( |
+ NvRmModuleID ModuleID, |
+ NvOdmIoModule* pOdmModules, |
+ NvU32* pOdmInstances, |
+ NvU32 *pCnt); |
+ |
+NvBool NvRmPrivAp20RmModuleToOdmModule( |
+ NvRmModuleID ModuldID, |
+ NvOdmIoModule* pOdmModules, |
+ NvU32* pOdmInstances, |
+ NvU32 *pCnt); |
+ |
+/** |
+ * Chip-specific functions to get SoC strap value for the given strap group. |
+ * |
+ * @param hDevice The RM instance |
+ * @param StrapGroup Strap group to be read. |
+ * @pStrapValue A pointer to the returned strap group value. |
+ * |
+ * @retval NvSuccess if strap value is read successfully |
+ * @retval NvError_NotSupported if the specified strap group does not |
+ * exist on the current SoC. |
+ */ |
+NvError |
+NvRmAp15GetStraps( |
+ NvRmDeviceHandle hDevice, |
+ NvRmStrapGroup StrapGroup, |
+ NvU32* pStrapValue); |
+ |
+NvError |
+NvRmAp20GetStraps( |
+ NvRmDeviceHandle hDevice, |
+ NvRmStrapGroup StrapGroup, |
+ NvU32* pStrapValue); |
+ |
+void NvRmPrivAp15SetPadTristates( |
+ NvRmDeviceHandle hDevice, |
+ const NvU32* Module, |
+ NvU32 Config, |
+ NvBool EnableTristate); |
+ |
+void NvRmPrivAp15SetPinMuxCtl( |
+ NvRmDeviceHandle hDevice, |
+ const NvU32* Module, |
+ NvU32 Config); |
+ |
+void NvRmPrivAp15InitTrisateRefCount(NvRmDeviceHandle hDevice); |
+ |
+const NvU32* |
+NvRmPrivAp15FindConfigStart( |
+ const NvU32* Instance, |
+ NvU32 Config, |
+ NvU32 EndMarker); |
+ |
+void |
+NvRmPrivAp15SetGpioTristate( |
+ NvRmDeviceHandle hDevice, |
+ NvU32 Port, |
+ NvU32 Pin, |
+ NvBool EnableTristate); |
+ |
+void NvRmAp15SetDefaultTristate (NvRmDeviceHandle hDevice); |
+ |
+void NvRmAp20SetDefaultTristate (NvRmDeviceHandle hDevice); |
+ |
+#ifdef __cplusplus |
+} |
+#endif /* __cplusplus */ |
+ |
+#endif // NVRM_PINMUX_UTILS_H |
+ |
+ |