diff options
author | David Nieto <dmartineznie@nvidia.com> | 2016-11-04 01:01:32 -0400 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:56:52 -0500 |
commit | 2f258670e40be1c92ab57b6fe77908add768ad9d (patch) | |
tree | 77e4fe65923a4e6667ac6956d1e2de158655c5e8 /drivers/gpu/nvgpu/clk/clk.h | |
parent | 2ebf09920755daeb7e1be71bf317f88ec9d533e1 (diff) |
gpu: nvgpu: p-state bound arbiter
Modification of the ARBITER clocks to be P-State aware
Up to now the arbiter just considered the whole range
of the GPC and MCLK domains, which could end up on
illegal combinations of MCLK, GPC2CLK, and set the
SYSCLK and XBARCLK domains below their minimum VCO
The following has been implemented:
(1) Modified VF tables to add which PState are
supported on each point.
(2) Return and store the current PState on the
arbiter state.
(3) Modified logic to prevent illegal combinations of
MCLK and GPC2CLK.
(4) Modified logic to prevent setting VF points for
XBAR and SYS domains below VCO limits.
(5) Modified voltage calculation to account for increased
values of XBAR and SYS on some VF points.
(6) Modified arbiter clock target logic to prevent an
application that has not requested a particular VF point
to set target to default targets.
(7) Remove unnecesary mutexes from critical path
JIRA DNVGPU-182
JIRA DNVGPU-183
Change-Id: I3d1c30903278f848681b8da833a867835acc99bb
Signed-off-by: David Nieto <dmartineznie@nvidia.com>
Reviewed-on: http://git-master/r/1247937
(cherry picked from commit b8bcc07eb3b5b70ec1ee19ace237df99d6170138)
Reviewed-on: http://git-master/r/1268063
Tested-by: Thomas Fleury <tfleury@nvidia.com>
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/clk/clk.h')
-rw-r--r-- | drivers/gpu/nvgpu/clk/clk.h | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/clk/clk.h b/drivers/gpu/nvgpu/clk/clk.h index d0e82173..42cb9f7d 100644 --- a/drivers/gpu/nvgpu/clk/clk.h +++ b/drivers/gpu/nvgpu/clk/clk.h | |||
@@ -35,7 +35,6 @@ struct clk_pmupstate { | |||
35 | struct clk_progs clk_progobjs; | 35 | struct clk_progs clk_progobjs; |
36 | struct clk_vf_points clk_vf_pointobjs; | 36 | struct clk_vf_points clk_vf_pointobjs; |
37 | struct clk_mclk_state clk_mclk; | 37 | struct clk_mclk_state clk_mclk; |
38 | struct mutex changeclkmutex; | ||
39 | }; | 38 | }; |
40 | 39 | ||
41 | struct clockentry { | 40 | struct clockentry { |
@@ -45,12 +44,6 @@ struct clockentry { | |||
45 | u32 api_clk_domain; | 44 | u32 api_clk_domain; |
46 | }; | 45 | }; |
47 | 46 | ||
48 | struct change_fll_clk { | ||
49 | u32 api_clk_domain; | ||
50 | u16 clkmhz; | ||
51 | u32 voltuv; | ||
52 | }; | ||
53 | |||
54 | struct set_fll_clk { | 47 | struct set_fll_clk { |
55 | u32 voltuv; | 48 | u32 voltuv; |
56 | u16 gpc2clkmhz; | 49 | u16 gpc2clkmhz; |
@@ -119,5 +112,7 @@ u32 clk_domain_get_f_points( | |||
119 | u32 *fpointscount, | 112 | u32 *fpointscount, |
120 | u16 *freqpointsinmhz | 113 | u16 *freqpointsinmhz |
121 | ); | 114 | ); |
122 | int clk_program_fll_clks(struct gk20a *g, struct change_fll_clk *fllclk); | 115 | int clk_get_fll_clks(struct gk20a *g, struct set_fll_clk *fllclk); |
116 | int clk_set_fll_clks(struct gk20a *g, struct set_fll_clk *fllclk); | ||
117 | |||
123 | #endif | 118 | #endif |