summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-11-08 05:59:31 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-11-08 10:57:06 -0500
commit02d281d0776e2b8305b18823343a2ee972b72657 (patch)
treea081a24d7e3c3408f7128a54b4ead7289f5bed8a
parent86a307871b95a175eb8ecb3033472a112a0720d1 (diff)
gpu: nvgpu: remove use of linux specific powergate_mode flag
In dbg_set_powergate(), we use flags NVGPU_DBG_GPU_POWERGATE_MODE_DISABLE/ENABLE which are defined in linux specific uapi header Hence we need to remove those flags from common code Update dbg_set_powergate() to receive boolean flag to disable/enable powergate instead of NVGPU_DBG_GPU_POWERGATE_MODE_DISABLE/ENABLE Also update corresponding HALs as per above change Jira NVGPU-259 Change-Id: I9c4eb30e29ea5ce0d8e25517a6a072fb9f0e92e5 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1594326 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/common/linux/ioctl_dbg.c16
-rw-r--r--drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c25
-rw-r--r--drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/vgpu/dbg_vgpu.c14
-rw-r--r--drivers/gpu/nvgpu/vgpu/dbg_vgpu.h2
6 files changed, 27 insertions, 34 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c b/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
index f8bdd19b..c8d7468e 100644
--- a/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
+++ b/drivers/gpu/nvgpu/common/linux/ioctl_dbg.c
@@ -178,8 +178,7 @@ int gk20a_dbg_gpu_dev_release(struct inode *inode, struct file *filp)
178 * calling powergate/timeout enable ioctl 178 * calling powergate/timeout enable ioctl
179 */ 179 */
180 nvgpu_mutex_acquire(&g->dbg_sessions_lock); 180 nvgpu_mutex_acquire(&g->dbg_sessions_lock);
181 g->ops.dbg_session_ops.dbg_set_powergate(dbg_s, 181 g->ops.dbg_session_ops.dbg_set_powergate(dbg_s, false);
182 NVGPU_DBG_GPU_POWERGATE_MODE_ENABLE);
183 nvgpu_dbg_timeout_enable(dbg_s, NVGPU_DBG_GPU_IOCTL_TIMEOUT_ENABLE); 182 nvgpu_dbg_timeout_enable(dbg_s, NVGPU_DBG_GPU_IOCTL_TIMEOUT_ENABLE);
184 183
185 /* If this session owned the perf buffer, release it */ 184 /* If this session owned the perf buffer, release it */
@@ -651,7 +650,7 @@ static int nvgpu_ioctl_channel_reg_ops(struct dbg_session_gk20a *dbg_s,
651 * disabling/enabling powergating when processing reg ops 650 * disabling/enabling powergating when processing reg ops
652 */ 651 */
653 powergate_err = g->ops.dbg_session_ops.dbg_set_powergate(dbg_s, 652 powergate_err = g->ops.dbg_session_ops.dbg_set_powergate(dbg_s,
654 NVGPU_DBG_GPU_POWERGATE_MODE_DISABLE); 653 true);
655 is_pg_disabled = true; 654 is_pg_disabled = true;
656 } 655 }
657 656
@@ -701,7 +700,7 @@ static int nvgpu_ioctl_channel_reg_ops(struct dbg_session_gk20a *dbg_s,
701 if (is_pg_disabled) { 700 if (is_pg_disabled) {
702 powergate_err = 701 powergate_err =
703 g->ops.dbg_session_ops.dbg_set_powergate(dbg_s, 702 g->ops.dbg_session_ops.dbg_set_powergate(dbg_s,
704 NVGPU_DBG_GPU_POWERGATE_MODE_ENABLE); 703 false);
705 } 704 }
706 } 705 }
707 706
@@ -725,7 +724,14 @@ static int nvgpu_ioctl_powergate_gk20a(struct dbg_session_gk20a *dbg_s,
725 g->name, args->mode); 724 g->name, args->mode);
726 725
727 nvgpu_mutex_acquire(&g->dbg_sessions_lock); 726 nvgpu_mutex_acquire(&g->dbg_sessions_lock);
728 err = g->ops.dbg_session_ops.dbg_set_powergate(dbg_s, args->mode); 727 if (args->mode == NVGPU_DBG_GPU_POWERGATE_MODE_DISABLE) {
728 err = g->ops.dbg_session_ops.dbg_set_powergate(dbg_s, true);
729 } else if (args->mode == NVGPU_DBG_GPU_POWERGATE_MODE_ENABLE) {
730 err = g->ops.dbg_session_ops.dbg_set_powergate(dbg_s, false);
731 } else {
732 nvgpu_err(g, "invalid powergate mode");
733 err = -EINVAL;
734 }
729 nvgpu_mutex_release(&g->dbg_sessions_lock); 735 nvgpu_mutex_release(&g->dbg_sessions_lock);
730 return err; 736 return err;
731} 737}
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
index 6645e21f..fd31ab89 100644
--- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
@@ -144,17 +144,16 @@ int gk20a_dbg_gpu_clear_broadcast_stop_trigger(struct channel_gk20a *ch)
144 return 0; 144 return 0;
145} 145}
146 146
147int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode) 147int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, bool disable_powergate)
148{ 148{
149 int err = 0; 149 int err = 0;
150 struct gk20a *g = dbg_s->g; 150 struct gk20a *g = dbg_s->g;
151 151
152 /* This function must be called with g->dbg_sessions_lock held */ 152 /* This function must be called with g->dbg_sessions_lock held */
153 153
154 nvgpu_log(g, gpu_dbg_fn|gpu_dbg_gpu_dbg, "%s powergate mode = %d", 154 nvgpu_log(g, gpu_dbg_fn|gpu_dbg_gpu_dbg, "%s powergate mode = %s",
155 g->name, powermode); 155 g->name, disable_powergate ? "disable" : "enable");
156 156
157 switch (powermode) {
158 /* 157 /*
159 * Powergate mode here refers to railgate+powergate+clockgate 158 * Powergate mode here refers to railgate+powergate+clockgate
160 * so in case slcg/blcg/elcg are disabled and railgating is enabled, 159 * so in case slcg/blcg/elcg are disabled and railgating is enabled,
@@ -162,7 +161,7 @@ int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode)
162 * Similarly re-enable railgating and not other features if they are not 161 * Similarly re-enable railgating and not other features if they are not
163 * enabled when powermode=MODE_ENABLE 162 * enabled when powermode=MODE_ENABLE
164 */ 163 */
165 case NVGPU_DBG_GPU_POWERGATE_MODE_DISABLE: 164 if (disable_powergate) {
166 /* save off current powergate, clk state. 165 /* save off current powergate, clk state.
167 * set gpu module's can_powergate = 0. 166 * set gpu module's can_powergate = 0.
168 * set gpu module's clk to max. 167 * set gpu module's clk to max.
@@ -202,9 +201,7 @@ int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode)
202 } 201 }
203 202
204 dbg_s->is_pg_disabled = true; 203 dbg_s->is_pg_disabled = true;
205 break; 204 } else {
206
207 case NVGPU_DBG_GPU_POWERGATE_MODE_ENABLE:
208 /* restore (can) powergate, clk state */ 205 /* restore (can) powergate, clk state */
209 /* release pending exceptions to fault/be handled as usual */ 206 /* release pending exceptions to fault/be handled as usual */
210 /*TBD: ordering of these? */ 207 /*TBD: ordering of these? */
@@ -247,18 +244,10 @@ int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode)
247 } 244 }
248 245
249 dbg_s->is_pg_disabled = false; 246 dbg_s->is_pg_disabled = false;
250 break;
251
252 default:
253 nvgpu_err(g,
254 "unrecognized dbg gpu powergate mode: 0x%x",
255 powermode);
256 err = -ENOTTY;
257 break;
258 } 247 }
259 248
260 nvgpu_log(g, gpu_dbg_fn|gpu_dbg_gpu_dbg, "%s powergate mode = %d done", 249 nvgpu_log(g, gpu_dbg_fn|gpu_dbg_gpu_dbg, "%s powergate mode = %s done",
261 g->name, powermode); 250 g->name, disable_powergate ? "disable" : "enable");
262 return err; 251 return err;
263} 252}
264 253
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
index 781e2176..28db053c 100644
--- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.h
@@ -120,7 +120,7 @@ dbg_profiler_object_data_from_prof_obj_entry(struct nvgpu_list_node *node)
120bool gk20a_dbg_gpu_broadcast_stop_trigger(struct channel_gk20a *ch); 120bool gk20a_dbg_gpu_broadcast_stop_trigger(struct channel_gk20a *ch);
121int gk20a_dbg_gpu_clear_broadcast_stop_trigger(struct channel_gk20a *ch); 121int gk20a_dbg_gpu_clear_broadcast_stop_trigger(struct channel_gk20a *ch);
122 122
123int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode); 123int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, bool disable_powergate);
124bool nvgpu_check_and_set_global_reservation( 124bool nvgpu_check_and_set_global_reservation(
125 struct dbg_session_gk20a *dbg_s, 125 struct dbg_session_gk20a *dbg_s,
126 struct dbg_profiler_object_data *prof_obj); 126 struct dbg_profiler_object_data *prof_obj);
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 96333277..4a344387 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -947,7 +947,7 @@ struct gpu_ops {
947 struct nvgpu_dbg_gpu_reg_op *ops, 947 struct nvgpu_dbg_gpu_reg_op *ops,
948 u64 num_ops); 948 u64 num_ops);
949 int (*dbg_set_powergate)(struct dbg_session_gk20a *dbg_s, 949 int (*dbg_set_powergate)(struct dbg_session_gk20a *dbg_s,
950 u32 mode); 950 bool disable_powergate);
951 bool (*check_and_set_global_reservation)( 951 bool (*check_and_set_global_reservation)(
952 struct dbg_session_gk20a *dbg_s, 952 struct dbg_session_gk20a *dbg_s,
953 struct dbg_profiler_object_data *prof_obj); 953 struct dbg_profiler_object_data *prof_obj);
diff --git a/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c b/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c
index 6e8ab561..0ed66eb9 100644
--- a/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/dbg_vgpu.c
@@ -77,28 +77,26 @@ fail:
77 return err; 77 return err;
78} 78}
79 79
80int vgpu_dbg_set_powergate(struct dbg_session_gk20a *dbg_s, __u32 mode) 80int vgpu_dbg_set_powergate(struct dbg_session_gk20a *dbg_s, bool disable_powergate)
81{ 81{
82 struct tegra_vgpu_cmd_msg msg; 82 struct tegra_vgpu_cmd_msg msg;
83 struct tegra_vgpu_set_powergate_params *p = &msg.params.set_powergate; 83 struct tegra_vgpu_set_powergate_params *p = &msg.params.set_powergate;
84 int err = 0; 84 int err = 0;
85 u32 mode;
85 86
86 gk20a_dbg_fn(""); 87 gk20a_dbg_fn("");
87 88
88 /* Just return if requested mode is the same as the session's mode */ 89 /* Just return if requested mode is the same as the session's mode */
89 switch (mode) { 90 if (disable_powergate) {
90 case NVGPU_DBG_GPU_POWERGATE_MODE_DISABLE:
91 if (dbg_s->is_pg_disabled) 91 if (dbg_s->is_pg_disabled)
92 return 0; 92 return 0;
93 dbg_s->is_pg_disabled = true; 93 dbg_s->is_pg_disabled = true;
94 break; 94 mode = NVGPU_DBG_GPU_POWERGATE_MODE_DISABLE;
95 case NVGPU_DBG_GPU_POWERGATE_MODE_ENABLE: 95 } else {
96 if (!dbg_s->is_pg_disabled) 96 if (!dbg_s->is_pg_disabled)
97 return 0; 97 return 0;
98 dbg_s->is_pg_disabled = false; 98 dbg_s->is_pg_disabled = false;
99 break; 99 mode = NVGPU_DBG_GPU_POWERGATE_MODE_ENABLE;
100 default:
101 return -EINVAL;
102 } 100 }
103 101
104 msg.cmd = TEGRA_VGPU_CMD_SET_POWERGATE; 102 msg.cmd = TEGRA_VGPU_CMD_SET_POWERGATE;
diff --git a/drivers/gpu/nvgpu/vgpu/dbg_vgpu.h b/drivers/gpu/nvgpu/vgpu/dbg_vgpu.h
index fcdea931..b2ca2a7b 100644
--- a/drivers/gpu/nvgpu/vgpu/dbg_vgpu.h
+++ b/drivers/gpu/nvgpu/vgpu/dbg_vgpu.h
@@ -31,7 +31,7 @@ struct gk20a;
31int vgpu_exec_regops(struct dbg_session_gk20a *dbg_s, 31int vgpu_exec_regops(struct dbg_session_gk20a *dbg_s,
32 struct nvgpu_dbg_gpu_reg_op *ops, 32 struct nvgpu_dbg_gpu_reg_op *ops,
33 u64 num_ops); 33 u64 num_ops);
34int vgpu_dbg_set_powergate(struct dbg_session_gk20a *dbg_s, __u32 mode); 34int vgpu_dbg_set_powergate(struct dbg_session_gk20a *dbg_s, bool disable_powergate);
35bool vgpu_check_and_set_global_reservation( 35bool vgpu_check_and_set_global_reservation(
36 struct dbg_session_gk20a *dbg_s, 36 struct dbg_session_gk20a *dbg_s,
37 struct dbg_profiler_object_data *prof_obj); 37 struct dbg_profiler_object_data *prof_obj);