Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_clocks_limits_private.h

Issue 3256004: [ARM] tegra: add nvos/nvrm/nvmap drivers (Closed) Base URL: ssh://git@gitrw.chromium.org/kernel.git
Patch Set: remove ap15 headers Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_clocks_limits_private.h
diff --git a/arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_clocks_limits_private.h b/arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_clocks_limits_private.h
new file mode 100644
index 0000000000000000000000000000000000000000..fb8bb3b0e781fd54e0373b06f1fbd454a233bf41
--- /dev/null
+++ b/arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_clocks_limits_private.h
@@ -0,0 +1,308 @@
+/*
+ * 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 INCLUDED_NVRM_CLOCKS_LIMITS_PRIVATE_H
+#define INCLUDED_NVRM_CLOCKS_LIMITS_PRIVATE_H
+
+#include "nvrm_power_private.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+// Maximum supported SoC process corners
+#define NVRM_PROCESS_CORNERS (4)
+
+// Maximum supported core and/or CPU voltage characterization steps
+#define NVRM_VOLTAGE_STEPS (7)
+
+// Minimum required core voltage resolution
+#define NVRM_CORE_RESOLUTION_MV (25)
+
+/// Maximum safe core voltage step
+#define NVRM_SAFE_VOLTAGE_STEP_MV (100)
+
+// Minimum system bus frequency
+#define NVRM_BUS_MIN_KHZ (32)
+
+// Minimum SDRAM bus frequency
+#define NVRM_SDRAM_MIN_KHZ (12000)
+
+// ID used by RM to record clock sources V/F dependencies
+#define NVRM_DEVID_CLK_SRC (1000)
+
+/**
+ * Oscillator (main) clock doubler configuration record
+ */
+typedef struct NvRmOscDoublerConfigRec
+{
+ NvRmFreqKHz OscKHz;
+ NvU32 Taps[NVRM_PROCESS_CORNERS];
+} NvRmOscDoublerConfig;
+
+/**
+ * Module clocks limits arranged according to the HW module IDs.
+ */
+typedef struct NvRmScaledClkLimitsRec
+{
+ NvU32 HwDeviceId;
+ NvU32 SubClockId;
+ NvRmFreqKHz MinKHz;
+ NvRmFreqKHz MaxKHzList[NVRM_VOLTAGE_STEPS];
+} NvRmScaledClkLimits;
+
+/**
+ * Combines maximum limits for modules depended on SoC SKU
+ */
+typedef struct NvRmSKUedLimitsRec
+{
+ NvRmFreqKHz CpuMaxKHz;
+ NvRmFreqKHz AvpMaxKHz;
+ NvRmFreqKHz VdeMaxKHz;
+ NvRmFreqKHz McMaxKHz;
+ NvRmFreqKHz Emc2xMaxKHz;
+ NvRmFreqKHz TDMaxKHz;
+ NvRmFreqKHz DisplayAPixelMaxKHz;
+ NvRmFreqKHz DisplayBPixelMaxKHz;
+ NvRmMilliVolts NominalCoreMv; // for common core rail
+ NvRmMilliVolts NominalCpuMv; // for dedicated CPU rail
+} NvRmSKUedLimits;
+
+/**
+ * Combines SoC frequency/voltage shmoo data
+ * (includes data for CPU on the common core rail)
+ */
+typedef struct NvRmSocShmooRec
+{
+ const NvU32* ShmooVoltages;
+ NvU32 ShmooVmaxIndex;
+
+ const NvRmScaledClkLimits* ScaledLimitsList;
+ NvU32 ScaledLimitsListSize;
+
+ const NvRmSKUedLimits* pSKUedLimits;
+
+ const NvRmOscDoublerConfig* OscDoublerCfgList;
+ NvU32 OscDoublerCfgListSize;
+
+ NvU32 DqsibOffset;
+ NvRmMilliVolts SvopLowVoltage;
+ NvU32 SvopLowSetting;
+ NvU32 SvopHighSetting;
+} NvRmSocShmoo;
+
+/**
+ * Combines frequency/voltage shmoo data for CPU on the dedicated voltage rail
+ * (separated from common SoC core rail)
+ */
+typedef struct NvRmCpuShmooRec
+{
+ const NvU32* ShmooVoltages;
+ NvU32 ShmooVmaxIndex;
+
+ const NvRmScaledClkLimits* pScaledCpuLimits;
+} NvRmCpuShmoo;
+
+/**
+ * Combines chip SKU and process corner records with shmoo data
+ */
+typedef struct NvRmChipFlavorRec
+{
+ NvU16 sku;
+
+ NvU16 corner;
+ const NvRmSocShmoo* pSocShmoo; // shmoo core rail (may include CPU)
+
+ NvU16 CpuCorner;
+ const NvRmCpuShmoo* pCpuShmoo; // shmoo dedicated CPU rail (NULL if none)
+} NvRmChipFlavor;
+
+/**
+ * Combines module clock frequency limits
+ */
+typedef struct NvRmModuleClockLimitsRec
+{
+ NvRmFreqKHz MinKHz;
+ NvRmFreqKHz MaxKHz;
+} NvRmModuleClockLimits;
+
+/**
+ * Initializes module clock limits table.
+ *
+ * @param hRmDevice The RM device handle.
+ *
+ * @return A pointer to the module clock limits table
+ */
+const NvRmModuleClockLimits*
+NvRmPrivClockLimitsInit(NvRmDeviceHandle hRmDevice);
+
+/**
+ * Gets list of maximum frequencies for the specified module clock in
+ * ascending order of scaling voltage levels.
+ *
+ * @param hRmDevice The RM device handle.
+ * @param Module The targeted module ID.
+ * @param pListSize A pointer to a variable filled with list size (i.e.,
+ * number of scaling voltage levels)
+ *
+ * @return Pointer to the frequencies list (NULL if the module is not present,
+ * or the list does not exist)
+ */
+const NvRmFreqKHz*
+NvRmPrivModuleVscaleGetMaxKHzList(
+ NvRmDeviceHandle hRmDevice,
+ NvRmModuleID Module,
+ NvU32* pListSize);
+
+/**
+ * Gets core voltage level required for operation of the specified module
+ * at the specified frequency.
+ *
+ * @param hRmDevice The RM device handle.
+ * @param Module The targeted module ID.
+ * @param FreqKHz The trageted module frequency in kHz.
+ *
+ * @return Core voltage level in mV.
+ */
+NvRmMilliVolts
+NvRmPrivModuleVscaleGetMV(
+ NvRmDeviceHandle hRmDevice,
+ NvRmModuleID Module,
+ NvRmFreqKHz FreqKHz);
+
+/**
+ * Gets minimum core voltage level required for operation of all non-DFS
+ * modules at current frequencies.
+ *
+ * @param hRmDevice The RM device handle.
+ *
+ * @return Core voltage level in mV.
+ */
+NvRmMilliVolts
+NvRmPrivModulesGetOperationalMV(NvRmDeviceHandle hRmDevice);
+
+/**
+ * Gets minimum core voltage level required to use module clock source with
+ * specified frequency.
+ *
+ * @param hRmDevice The RM device handle.
+ *
+ * @return Core voltage level in mV.
+ */
+NvRmMilliVolts
+NvRmPrivSourceVscaleGetMV(NvRmDeviceHandle hRmDevice, NvRmFreqKHz FreqKHz);
+
+/**
+ * Gets SoC nominal core voltage.
+ *
+ * @param hRmDevice The RM device handle.
+ *
+ * @return Nominal core voltage in mV.
+ */
+NvRmMilliVolts
+NvRmPrivGetNominalMV(NvRmDeviceHandle hRmDevice);
+
+/**
+ * Gets number of delay taps for Oscillator Doubler.
+ *
+ * @param hRmDevice The RM device handle.
+ * @param OscKHz Oscillator (main) frequency in KHz.
+ * @param pTaps A pointer to the variable, filled with number of delay taps.
+ *
+ * @return NvSuccess if the specified oscillator frequency is supported, and
+ * NvError_NotSupported, otherwise.
+ */
+NvError
+NvRmPrivGetOscDoublerTaps(
+ NvRmDeviceHandle hRmDevice,
+ NvRmFreqKHz OscKHz,
+ NvU32* pTaps);
+
+/**
+ * Gets RAM SVOP low voltage parameters.
+ *
+ * @param hRmDevice The RM device handle.
+ * @param pSvopLowMv A pointer to a variable filled with SVOP low voltage
+ * threshold in mv.
+ * @param pSvopLvSetting A pointer to a variable filled with SVOP low voltage
+ * settings.
+ * @param pSvopHvSetting A pointer to a variable filled with SVOP high voltage
+ * settings.
+ */
+void
+NvRmPrivGetSvopParameters(
+ NvRmDeviceHandle hRmDevice,
+ NvRmMilliVolts* pSvopLowMv,
+ NvU32* pSvopLvSetting,
+ NvU32* pSvopHvSetting);
+
+/**
+ * Gets 32-bit offset to ODM EMC DQSIB settings.
+ *
+ * @param hRmDevice The RM device handle.
+ *
+ * @return DQSIB offset.
+ */
+NvU32
+NvRmPrivGetEmcDqsibOffset(NvRmDeviceHandle hRmDevice);
+
+/**
+ * Verifies if SoC has dedicated CPU voltage rail.
+ *
+ * @param hRmDevice The RM device handle.
+ *
+ * @return NV_TRUE if SoC has dedicated CPU voltage rail,
+ * and NV_FALSE if CPU is on common SoC core rail.
+ */
+NvBool NvRmPrivIsCpuRailDedicated(NvRmDeviceHandle hRmDevice);
+
+/**
+ * Initializes SoC characterization data base
+ *
+ * @param hRmDevice The RM device handle.
+ * @param pChipFlavor a pointer to the chip "flavor" structure
+ * that this function fills in
+ *
+ * @return NvSuccess if completed successfully, or NvError_NotSupported,
+ * otherwise.
+ */
+NvError
+NvRmPrivChipShmooDataInit(
+ NvRmDeviceHandle hRmDevice,
+ NvRmChipFlavor* pChipFlavor);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // INCLUDED_NVRM_CLOCKS_LIMITS_PRIVATE_H
« no previous file with comments | « arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_clocks.h ('k') | arch/arm/mach-tegra/nv/nvrm/core/common/nvrm_configuration.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698