summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/nvrm/core/common/nvrm_pmu_private.h
blob: 79c818d218386a2d417e8041c0df7b8f70b27c51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
 * Copyright (c) 2007-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_PMU_PRIVATE_H
#define INCLUDED_NVRM_PMU_PRIVATE_H

#include "nvodm_query.h"

#ifdef __cplusplus
extern "C"
{
#endif  /* __cplusplus */

// CPU rail lowering voltage delay (applicable only to the platforms
// with dedicated CPU rail)
#define NVRM_CPU_TO_CORE_DOWN_US (2000)

// Default voltage returned in environment with no PMU support
#define NVRM_NO_PMU_DEFAULT_VOLTAGE (1)

/**
 * Initializes RM PMU interface handle
 *
 * @param hRmDevice The RM device handle
 * 
 * @return NvSuccess if initialization completed successfully
 *  or one of common error codes on failure
 */
NvError
NvRmPrivPmuInit(NvRmDeviceHandle hRmDevice);

/**
 * Enables PMU interrupt.
 *
 * @param hRmDevice The RM device handle
 */
void NvRmPrivPmuInterruptEnable(NvRmDeviceHandle hRmDevice);

/**
 * Masks/Unmasks OMU interrupt
 * 
 * @param hRmDevice The RM device handle
 * @param mask Set NV_TRUE to maks, and NV_FALSE to unmask PMU interrupt
 */
void NvRmPrivPmuInterruptMask(NvRmDeviceHandle hRmDevice, NvBool mask);

/**
 * Deinitializes RM PMU interface
 *
 * @param hRmDevice The RM device handle
 */
void
NvRmPrivPmuDeinit(NvRmDeviceHandle hRmDevice);

/**
 * Sets new voltage level for the specified PMU voltage rail.
 * Private interface for diagnostic mode only.
 *
 * @param hDevice The Rm device handle.
 * @param vddId The ODM-defined PMU rail ID.
 * @param MilliVolts The new voltage level to be set in millivolts (mV).
 *  Set to ODM_VOLTAGE_OFF to turn off the target voltage.
 * @param pSettleMicroSeconds A pointer to the settling time in microseconds (uS),
 *  which is the time for supply voltage to settle after this function 
 *  returns; this may or may not include PMU control interface transaction time, 
 *  depending on the ODM implementation. If null this parameter is ignored.
 * 
 * @return NV_TRUE if successful, or NV_FALSE otherwise. 
 */
NvBool
NvRmPrivDiagPmuSetVoltage( 
    NvRmDeviceHandle hDevice,
    NvU32 vddId,
    NvU32 MilliVolts,
    NvU32 * pSettleMicroSeconds);

/**
 * Turns PMU rail On/Off
 *
 * @param hRmDevice The RM device handle
 * @param NvRailId The reserved NV rail GUID
 * @param TurnOn Turn rail ON if True, or turn  rail Off if False
 */
void
NvRmPrivPmuRailControl(
    NvRmDeviceHandle hRmDevice,
    NvU64 NvRailId,
    NvBool TurnOn);

/**
 * Gets PMU rail voltage
 *
 * @param hRmDevice The RM device handle
 * @param NvRailId The reserved NV rail GUID
 * 
 * @return PMU rail voltage in mv
 */
NvU32
NvRmPrivPmuRailGetVoltage(
    NvRmDeviceHandle hRmDevice,
    NvU64 NvRailId);

//  Forward declarations for all chip-specific helper functions

/**
 * Sets polarity of dedicated SoC PMU interrupt input
 *
 * @param hRmDevice The RM device handle
 * @param Polarity PMU interrupt polarity to be set
 */
void
NvRmPrivAp20SetPmuIrqPolarity(
    NvRmDeviceHandle hRmDevice,
    NvOdmInterruptPolarity Polarity);

#ifdef __cplusplus
}
#endif  /* __cplusplus */

#endif // INCLUDED_NVRM_PMU_PRIVATE_H