summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c
diff options
context:
space:
mode:
authorDeepak Goyal <dgoyal@nvidia.com>2017-09-22 02:38:10 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-10-04 05:24:30 -0400
commit0e8aee1c1a38abbc2dccf3f604a9843cf38071e0 (patch)
treed7da679255e79a3c48041af1e78bc8d7374d47d2 /drivers/gpu/nvgpu/gk20a/gk20a_gating_reglist.c
parentedb116661348f1bc843849cdcc318fa47cf9724a (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.c23
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
30struct gating_desc { 31struct 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,