diff options
author | Divya Singhatwaria <dsinghatwari@nvidia.com> | 2019-07-23 01:13:35 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2019-08-02 15:57:24 -0400 |
commit | ae175e45edc5807131dfb1b63d3e4795e96a3f86 (patch) | |
tree | c209caf5a5804f250be83e4a68295daa64d6cfb5 /drivers/gpu/nvgpu/include | |
parent | 47f6bc0c2e85d0a8ff943b88c81108ca1bfc588e (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.h | 6 |
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 | ||
154 | enum nvgpu_unit; | 154 | enum 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]; |