summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVijayakumar <vsubbu@nvidia.com>2016-10-31 10:49:07 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:56:52 -0500
commit30bf630bded30376a929345247b134b60db1c9f5 (patch)
treed548277588aed7635e3b0d9253527147f6e0d11f
parent2f258670e40be1c92ab57b6fe77908add768ad9d (diff)
gpu: nvgpu: fn to send noise-unaware vmin to pmu
JIRA DNVGPU-184 implement a function which takes noise unaware vmin for logic and sram rails as input and sends them to pmu via RPC Change-Id: Ic0d72daf99870477d4dbd17e1c609dd0c39f8197 Signed-off-by: Vijayakumar <vsubbu@nvidia.com> Reviewed-on: http://git-master/r/1248210 (cherry picked from commit 2ad833c1edf65ada6c72b56ecd3551e7c4d396f6) Reviewed-on: http://git-master/r/1270885 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit
-rw-r--r--drivers/gpu/nvgpu/volt/volt_pmu.c43
-rw-r--r--drivers/gpu/nvgpu/volt/volt_pmu.h3
-rw-r--r--drivers/gpu/nvgpu/volt/volt_rail.h2
3 files changed, 47 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/volt/volt_pmu.c b/drivers/gpu/nvgpu/volt/volt_pmu.c
index a92eb777..4e7f73c9 100644
--- a/drivers/gpu/nvgpu/volt/volt_pmu.c
+++ b/drivers/gpu/nvgpu/volt/volt_pmu.c
@@ -231,3 +231,46 @@ u32 volt_get_voltage(struct gk20a *g, u32 volt_domain, u32 *voltage_uv)
231{ 231{
232 return volt_rail_get_voltage(g, volt_domain, voltage_uv); 232 return volt_rail_get_voltage(g, volt_domain, voltage_uv);
233} 233}
234
235static int volt_policy_set_noiseaware_vmin(struct gk20a *g,
236 struct ctrl_volt_volt_rail_list *prail_list)
237{
238 struct nv_pmu_volt_rpc rpc_call = { 0 };
239 u32 status = 0;
240
241 /* Set RPC parameters. */
242 rpc_call.function = NV_PMU_VOLT_RPC_ID_VOLT_RAIL_SET_NOISE_UNAWARE_VMIN;
243 rpc_call.params.volt_rail_set_noise_unaware_vmin.num_rails =
244 prail_list->num_rails;
245 memcpy(&rpc_call.params.volt_rail_set_noise_unaware_vmin.rail_list,
246 prail_list, (sizeof(struct ctrl_volt_volt_rail_list)));
247
248 /* Execute the voltage change request via PMU RPC. */
249 status = volt_pmu_rpc_execute(g, &rpc_call);
250 if (status) {
251 gk20a_err(dev_from_gk20a(g),
252 "Error while executing VOLT_POLICY_SET_VOLTAGE RPC");
253 return -EINVAL;
254 }
255
256 return 0;
257}
258
259int volt_set_noiseaware_vmin(struct gk20a *g, u32 logic_voltage_uv,
260 u32 sram_voltage_uv)
261{
262 int status = 0;
263 struct ctrl_volt_volt_rail_list rail_list = { 0 };
264
265 rail_list.num_rails = RAIL_COUNT;
266 rail_list.rails[0].rail_idx = 0;
267 rail_list.rails[0].voltage_uv = logic_voltage_uv;
268 rail_list.rails[1].rail_idx = 1;
269 rail_list.rails[1].voltage_uv = sram_voltage_uv;
270
271 status = volt_policy_set_noiseaware_vmin(g, &rail_list);
272
273 return status;
274
275}
276
diff --git a/drivers/gpu/nvgpu/volt/volt_pmu.h b/drivers/gpu/nvgpu/volt/volt_pmu.h
index 9af3fb68..7e639375 100644
--- a/drivers/gpu/nvgpu/volt/volt_pmu.h
+++ b/drivers/gpu/nvgpu/volt/volt_pmu.h
@@ -18,5 +18,6 @@ u32 volt_pmu_send_load_cmd_to_pmu(struct gk20a *g);
18u32 volt_set_voltage(struct gk20a *g, u32 logic_voltage_uv, 18u32 volt_set_voltage(struct gk20a *g, u32 logic_voltage_uv,
19 u32 sram_voltage_uv); 19 u32 sram_voltage_uv);
20u32 volt_get_voltage(struct gk20a *g, u32 volt_domain, u32 *voltage_uv); 20u32 volt_get_voltage(struct gk20a *g, u32 volt_domain, u32 *voltage_uv);
21 21int volt_set_noiseaware_vmin(struct gk20a *g, u32 logic_voltage_uv,
22 u32 sram_voltage_uv);
22#endif 23#endif
diff --git a/drivers/gpu/nvgpu/volt/volt_rail.h b/drivers/gpu/nvgpu/volt/volt_rail.h
index 0180992c..8b930010 100644
--- a/drivers/gpu/nvgpu/volt/volt_rail.h
+++ b/drivers/gpu/nvgpu/volt/volt_rail.h
@@ -61,6 +61,8 @@ struct voltage_rail_metadata {
61 u8 volt_domain_hal; 61 u8 volt_domain_hal;
62 u8 pct_delta; 62 u8 pct_delta;
63 u32 ext_rel_delta_uv[CTRL_VOLT_RAIL_VOLT_DELTA_MAX_ENTRIES]; 63 u32 ext_rel_delta_uv[CTRL_VOLT_RAIL_VOLT_DELTA_MAX_ENTRIES];
64 u8 logic_rail_idx;
65 u8 sram_rail_idx;
64 struct boardobjgrp_e32 volt_rails; 66 struct boardobjgrp_e32 volt_rails;
65}; 67};
66 68