| 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
|
|
|