diff options
author | Deepak Goyal <dgoyal@nvidia.com> | 2017-09-22 02:38:10 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-10-04 05:24:30 -0400 |
commit | 0e8aee1c1a38abbc2dccf3f604a9843cf38071e0 (patch) | |
tree | d7da679255e79a3c48041af1e78bc8d7374d47d2 /drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c | |
parent | edb116661348f1bc843849cdcc318fa47cf9724a (diff) |
gpu: nvgpu: skip clk gating prog for sim/emu.
For Simualtion/Emulation platforms,clock gating
should be skipped as it is not supported.
Added new flags "can_"X"lcg" to check platform
capability before doing SLCG,BLCG and ELCG.
Bug 200314250
Change-Id: I4124d444a77a4c06df8c1d82c6038bfd457f3db0
Signed-off-by: Deepak Goyal <dgoyal@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1566049
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c b/drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c index 45b25425..751c6a19 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2012-2015, NVIDIA Corporation. All rights reserved. | 2 | * Copyright (c) 2012-2017, NVIDIA Corporation. All rights reserved. |
3 | * | 3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
@@ -26,6 +26,7 @@ | |||
26 | #define __gk20a_gating_reglist_h__ | 26 | #define __gk20a_gating_reglist_h__ |
27 | 27 | ||
28 | #include "gk20a_gating_reglist.h" | 28 | #include "gk20a_gating_reglist.h" |
29 | #include <nvgpu/enabled.h> | ||
29 | 30 | ||
30 | struct gating_desc { | 31 | struct gating_desc { |
31 | u32 addr; | 32 | u32 addr; |
@@ -305,6 +306,10 @@ void gr_gk20a_slcg_gr_load_gating_prod(struct gk20a *g, | |||
305 | { | 306 | { |
306 | u32 i; | 307 | u32 i; |
307 | u32 size = sizeof(gk20a_slcg_gr) / sizeof(struct gating_desc); | 308 | u32 size = sizeof(gk20a_slcg_gr) / sizeof(struct gating_desc); |
309 | |||
310 | if (!nvgpu_is_enabled(g, NVGPU_GPU_CAN_SLCG)) | ||
311 | return; | ||
312 | |||
308 | for (i = 0; i < size; i++) { | 313 | for (i = 0; i < size; i++) { |
309 | if (prod) | 314 | if (prod) |
310 | gk20a_writel(g, gk20a_slcg_gr[i].addr, | 315 | gk20a_writel(g, gk20a_slcg_gr[i].addr, |
@@ -325,6 +330,10 @@ void gr_gk20a_slcg_perf_load_gating_prod(struct gk20a *g, | |||
325 | { | 330 | { |
326 | u32 i; | 331 | u32 i; |
327 | u32 size = sizeof(gk20a_slcg_perf) / sizeof(struct gating_desc); | 332 | u32 size = sizeof(gk20a_slcg_perf) / sizeof(struct gating_desc); |
333 | |||
334 | if (!nvgpu_is_enabled(g, NVGPU_GPU_CAN_SLCG)) | ||
335 | return; | ||
336 | |||
328 | for (i = 0; i < size; i++) { | 337 | for (i = 0; i < size; i++) { |
329 | if (prod) | 338 | if (prod) |
330 | gk20a_writel(g, gk20a_slcg_perf[i].addr, | 339 | gk20a_writel(g, gk20a_slcg_perf[i].addr, |
@@ -340,6 +349,10 @@ void gr_gk20a_blcg_gr_load_gating_prod(struct gk20a *g, | |||
340 | { | 349 | { |
341 | u32 i; | 350 | u32 i; |
342 | u32 size = sizeof(gk20a_blcg_gr) / sizeof(struct gating_desc); | 351 | u32 size = sizeof(gk20a_blcg_gr) / sizeof(struct gating_desc); |
352 | |||
353 | if (!nvgpu_is_enabled(g, NVGPU_GPU_CAN_BLCG)) | ||
354 | return; | ||
355 | |||
343 | for (i = 0; i < size; i++) { | 356 | for (i = 0; i < size; i++) { |
344 | if (prod) | 357 | if (prod) |
345 | gk20a_writel(g, gk20a_blcg_gr[i].addr, | 358 | gk20a_writel(g, gk20a_blcg_gr[i].addr, |
@@ -355,6 +368,10 @@ void gr_gk20a_pg_gr_load_gating_prod(struct gk20a *g, | |||
355 | { | 368 | { |
356 | u32 i; | 369 | u32 i; |
357 | u32 size = sizeof(gk20a_pg_gr) / sizeof(struct gating_desc); | 370 | u32 size = sizeof(gk20a_pg_gr) / sizeof(struct gating_desc); |
371 | |||
372 | if (!nvgpu_is_enabled(g, NVGPU_GPU_CAN_BLCG)) | ||
373 | return; | ||
374 | |||
358 | for (i = 0; i < size; i++) { | 375 | for (i = 0; i < size; i++) { |
359 | if (prod) | 376 | if (prod) |
360 | gk20a_writel(g, gk20a_pg_gr[i].addr, | 377 | gk20a_writel(g, gk20a_pg_gr[i].addr, |
@@ -370,6 +387,10 @@ void gr_gk20a_slcg_therm_load_gating_prod(struct gk20a *g, | |||
370 | { | 387 | { |
371 | u32 i; | 388 | u32 i; |
372 | u32 size = sizeof(gk20a_slcg_therm) / sizeof(struct gating_desc); | 389 | u32 size = sizeof(gk20a_slcg_therm) / sizeof(struct gating_desc); |
390 | |||
391 | if (!nvgpu_is_enabled(g, NVGPU_GPU_CAN_SLCG)) | ||
392 | return; | ||
393 | |||
373 | for (i = 0; i < size; i++) { | 394 | for (i = 0; i < size; i++) { |
374 | if (prod) | 395 | if (prod) |
375 | gk20a_writel(g, gk20a_slcg_therm[i].addr, | 396 | gk20a_writel(g, gk20a_slcg_therm[i].addr, |