diff options
author | Mahantesh Kumbar <mkumbar@nvidia.com> | 2016-11-03 11:46:21 -0400 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:56:53 -0500 |
commit | e5824d8014c321fbe2c1e04e12307125dd50a472 (patch) | |
tree | 82657cd43c0dcd313b3251f3776e5e80b488fabc /drivers/gpu/nvgpu/lpwr/lpwr.h | |
parent | 62d13e613807e9bce3a9d1ef0c61725ef3a885ce (diff) |
gpu: nvgpu: MSCG support
- update gp106 pg engine init/list/features HALs
to support MS engine
- Added defines & interface for lpwr tables read from vbios.
- lpwr module which reads idx/gr/ms table from vbios to
map rppg/mscg support with respective p-state
- lpwr module public functions to control lpwr
features enable/disable mscg/rppg & mclk-change
request whenever change in mclk-change parameters
- lpwr public functions to know rppg/mscg support for
requested pstate,
- added mutex t prevent PG transition while arbiter
executes pstate transition
- nvgpu_clk_arb_get_current_pstate() of clk arbiter to
get current pstate
JIRA DNVGPU-71
Change-Id: Ifcd640cc19ef630be1e2a9ba07ec84023d8202a0
Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com>
Reviewed-on: http://git-master/r/1247553
(cherry picked from commit 8a441dea2410e1b5196ef24e56a7768b6980e46b)
Reviewed-on: http://git-master/r/1270989
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/lpwr/lpwr.h')
-rw-r--r-- | drivers/gpu/nvgpu/lpwr/lpwr.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/lpwr/lpwr.h b/drivers/gpu/nvgpu/lpwr/lpwr.h new file mode 100644 index 00000000..6b3259df --- /dev/null +++ b/drivers/gpu/nvgpu/lpwr/lpwr.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms and conditions of the GNU General Public License, | ||
6 | * version 2, as published by the Free Software Foundation. | ||
7 | * | ||
8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | */ | ||
13 | #ifndef _MSCG_H_ | ||
14 | #define _MSCG_H_ | ||
15 | |||
16 | #define MAX_SWASR_MCLK_FREQ_WITHOUT_WR_TRAINING_MAXWELL_MHZ 540 | ||
17 | |||
18 | #define NV_PMU_PG_PARAM_MCLK_CHANGE_MS_SWASR_ENABLED BIT(0x1) | ||
19 | #define NV_PMU_PG_PARAM_MCLK_CHANGE_GDDR5_WR_TRAINING_ENABLED BIT(0x3) | ||
20 | |||
21 | #define LPWR_ENTRY_COUNT_MAX 0x06 | ||
22 | |||
23 | #define LPWR_VBIOS_IDX_ENTRY_COUNT_MAX (LPWR_ENTRY_COUNT_MAX) | ||
24 | |||
25 | #define LPWR_VBIOS_IDX_ENTRY_RSVD \ | ||
26 | (LPWR_VBIOS_IDX_ENTRY_COUNT_MAX - 1) | ||
27 | |||
28 | #define LPWR_VBIOS_BASE_SAMPLING_PERIOD_DEFAULT (500) | ||
29 | |||
30 | struct nvgpu_lpwr_bios_idx_entry { | ||
31 | u8 pcie_idx; | ||
32 | u8 gr_idx; | ||
33 | u8 ms_idx; | ||
34 | u8 di_idx; | ||
35 | u8 gc6_idx; | ||
36 | }; | ||
37 | |||
38 | struct nvgpu_lpwr_bios_idx_data { | ||
39 | u16 base_sampling_period; | ||
40 | struct nvgpu_lpwr_bios_idx_entry entry[LPWR_VBIOS_IDX_ENTRY_COUNT_MAX]; | ||
41 | }; | ||
42 | |||
43 | #define LPWR_VBIOS_MS_ENTRY_COUNT_MAX (LPWR_ENTRY_COUNT_MAX) | ||
44 | |||
45 | struct nvgpu_lpwr_bios_ms_entry { | ||
46 | bool ms_enabled; | ||
47 | u32 feature_mask; | ||
48 | u32 asr_efficiency_thresholdl; | ||
49 | u16 dynamic_current_logic; | ||
50 | u16 dynamic_current_sram; | ||
51 | }; | ||
52 | |||
53 | struct nvgpu_lpwr_bios_ms_data { | ||
54 | u8 default_entry_idx; | ||
55 | u32 idle_threshold_us; | ||
56 | struct nvgpu_lpwr_bios_ms_entry entry[LPWR_VBIOS_MS_ENTRY_COUNT_MAX]; | ||
57 | }; | ||
58 | |||
59 | #define LPWR_VBIOS_GR_ENTRY_COUNT_MAX (LPWR_ENTRY_COUNT_MAX) | ||
60 | |||
61 | struct nvgpu_lpwr_bios_gr_entry { | ||
62 | bool gr_enabled; | ||
63 | u32 feature_mask; | ||
64 | }; | ||
65 | |||
66 | struct nvgpu_lpwr_bios_gr_data { | ||
67 | u8 default_entry_idx; | ||
68 | u32 idle_threshold_us; | ||
69 | u8 adaptive_gr_multiplier; | ||
70 | struct nvgpu_lpwr_bios_gr_entry entry[LPWR_VBIOS_GR_ENTRY_COUNT_MAX]; | ||
71 | }; | ||
72 | |||
73 | struct nvgpu_lpwr_bios_data { | ||
74 | struct nvgpu_lpwr_bios_idx_data idx; | ||
75 | struct nvgpu_lpwr_bios_ms_data ms; | ||
76 | struct nvgpu_lpwr_bios_gr_data gr; | ||
77 | }; | ||
78 | |||
79 | struct obj_lwpr { | ||
80 | struct nvgpu_lpwr_bios_data lwpr_bios_data; | ||
81 | u32 mclk_change_cache; | ||
82 | }; | ||
83 | |||
84 | u32 nvgpu_lpwr_pg_setup(struct gk20a *g); | ||
85 | int nvgpu_lwpr_mclk_change(struct gk20a *g, u32 pstate); | ||
86 | int nvgpu_lpwr_enable_pg(struct gk20a *g, bool pstate_lock); | ||
87 | int nvgpu_lpwr_disable_pg(struct gk20a *g, bool pstate_lock); | ||
88 | u32 nvgpu_lpwr_is_mscg_supported(struct gk20a *g, u32 pstate_num); | ||
89 | u32 nvgpu_lpwr_is_rppg_supported(struct gk20a *g, u32 pstate_num); | ||
90 | u32 nvgpu_lpwr_post_init(struct gk20a *g); | ||
91 | |||
92 | #endif | ||