summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/include
diff options
context:
space:
mode:
authorDivya Singhatwaria <dsinghatwari@nvidia.com>2019-07-23 01:13:35 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2019-08-02 15:57:24 -0400
commitae175e45edc5807131dfb1b63d3e4795e96a3f86 (patch)
treec209caf5a5804f250be83e4a68295daa64d6cfb5 /drivers/gpu/nvgpu/include
parent47f6bc0c2e85d0a8ff943b88c81108ca1bfc588e (diff)
gpu: nvgpu: Use TPC_PG_MASK to powergate the TPC
- In GV11B, read fuse_status_opt_tpc_gpc register to read which TPCs are floorswept. - The driver will also read sysfs node: tpc_pg_mask - Based on these two values "can_tpc_powergate" will be set to true or false and mask will be used to write to fuse_ctrl_opt_tpc_gpc register to powergate the TPC. - can_tpc_powergate = true indicates that the mask value sent from userspace is valid and can be used to power gate the desired TPC - can_tpc_powergate = false indicates that the mask value sent from userspace is not valid and cannot be used to power gate the desired TPC. Bug 200532639 Change-Id: Ib0806e4c96305a13b3574e8063ad8e16770aa7cd Signed-off-by: Divya Singhatwaria <dsinghatwari@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2159219 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/include')
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/gk20a.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
index 7ed4c714..c9002f47 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
@@ -149,7 +149,7 @@ enum gk20a_cbc_op {
149 149
150#define nvgpu_get_litter_value(g, v) (g)->ops.get_litter_value((g), v) 150#define nvgpu_get_litter_value(g, v) (g)->ops.get_litter_value((g), v)
151 151
152#define MAX_TPC_PG_CONFIGS 3 152#define MAX_TPC_PG_CONFIGS 9
153 153
154enum nvgpu_unit; 154enum nvgpu_unit;
155 155
@@ -1348,6 +1348,9 @@ struct gpu_ops {
1348 struct { 1348 struct {
1349 void (*acr_sw_init)(struct gk20a *g, struct nvgpu_acr *acr); 1349 void (*acr_sw_init)(struct gk20a *g, struct nvgpu_acr *acr);
1350 } acr; 1350 } acr;
1351 struct {
1352 int (*tpc_powergate)(struct gk20a *g, u32 fuse_status);
1353 } tpc;
1351 void (*semaphore_wakeup)(struct gk20a *g, bool post_events); 1354 void (*semaphore_wakeup)(struct gk20a *g, bool post_events);
1352}; 1355};
1353 1356
@@ -1615,6 +1618,7 @@ struct gk20a {
1615 u32 tpc_fs_mask_user; 1618 u32 tpc_fs_mask_user;
1616 1619
1617 u32 tpc_pg_mask; 1620 u32 tpc_pg_mask;
1621 u32 tpc_count;
1618 bool can_tpc_powergate; 1622 bool can_tpc_powergate;
1619 1623
1620 u32 valid_tpc_mask[MAX_TPC_PG_CONFIGS]; 1624 u32 valid_tpc_mask[MAX_TPC_PG_CONFIGS];