diff options
Diffstat (limited to 'drivers/gpu/nvgpu/volt')
-rw-r--r-- | drivers/gpu/nvgpu/volt/volt_pmu.c | 43 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/volt/volt_pmu.h | 3 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/volt/volt_rail.h | 2 |
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 | |||
235 | static 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 | |||
259 | int 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); | |||
18 | u32 volt_set_voltage(struct gk20a *g, u32 logic_voltage_uv, | 18 | u32 volt_set_voltage(struct gk20a *g, u32 logic_voltage_uv, |
19 | u32 sram_voltage_uv); | 19 | u32 sram_voltage_uv); |
20 | u32 volt_get_voltage(struct gk20a *g, u32 volt_domain, u32 *voltage_uv); | 20 | u32 volt_get_voltage(struct gk20a *g, u32 volt_domain, u32 *voltage_uv); |
21 | 21 | int 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 | ||