summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/lpwr/lpwr.h
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2016-11-03 11:46:21 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:56:53 -0500
commite5824d8014c321fbe2c1e04e12307125dd50a472 (patch)
tree82657cd43c0dcd313b3251f3776e5e80b488fabc /drivers/gpu/nvgpu/lpwr/lpwr.h
parent62d13e613807e9bce3a9d1ef0c61725ef3a885ce (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.h92
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
30struct 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
38struct 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
45struct 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
53struct 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
61struct nvgpu_lpwr_bios_gr_entry {
62 bool gr_enabled;
63 u32 feature_mask;
64};
65
66struct 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
73struct 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
79struct obj_lwpr {
80 struct nvgpu_lpwr_bios_data lwpr_bios_data;
81 u32 mclk_change_cache;
82};
83
84u32 nvgpu_lpwr_pg_setup(struct gk20a *g);
85int nvgpu_lwpr_mclk_change(struct gk20a *g, u32 pstate);
86int nvgpu_lpwr_enable_pg(struct gk20a *g, bool pstate_lock);
87int nvgpu_lpwr_disable_pg(struct gk20a *g, bool pstate_lock);
88u32 nvgpu_lpwr_is_mscg_supported(struct gk20a *g, u32 pstate_num);
89u32 nvgpu_lpwr_is_rppg_supported(struct gk20a *g, u32 pstate_num);
90u32 nvgpu_lpwr_post_init(struct gk20a *g);
91
92#endif