summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/fuse
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2018-09-21 02:36:36 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-09-24 13:14:56 -0400
commite16843c2efdffa13c15cc0a014b2a5598cc2f4ec (patch)
tree2942e8a53e954ab30b564a3eb07efc8c10270e10 /drivers/gpu/nvgpu/common/fuse
parent2a26075b8408b45d18920e3f4ca08a457b23a7e0 (diff)
gpu: nvgpu: read GPC mask from h/w
In gk20a_ctrl_ioctl_gpu_characteristics() we right now just calculate GPC mask in s/w and return to user space But this could give incorrect result as any GPC could be floorswept in h/w Add gops.fuse.fuse_status_opt_gpc() to read GPC floorsweep status from fuse Add gops.gr.get_gpc_mask() to get actual GPC mask from h/w Set these HALs only for dGPUs right now. Fuse register to read GPC mask is not yet supported in simulation and hence simulation boot fails These HALs will be set for iGPU once simulation issue is resolved Use gops.gr.get_gpc_mask() if it is defined in gk20a_ctrl_ioctl_gpu_characteristics() to send the actual GPC mask to user space Jira NVGPUT-132 Change-Id: I3b552de07883328fcfa41d4334ec0d777e04bdd3 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1822811 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/fuse')
-rw-r--r--drivers/gpu/nvgpu/common/fuse/fuse_gm20b.c5
-rw-r--r--drivers/gpu/nvgpu/common/fuse/fuse_gm20b.h1
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.c b/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.c
index bb99e644..0dba3542 100644
--- a/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.c
+++ b/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.c
@@ -106,6 +106,11 @@ u32 gm20b_fuse_status_opt_rop_l2_fbp(struct gk20a *g, u32 fbp)
106 return nvgpu_readl(g, fuse_status_opt_rop_l2_fbp_r(fbp)); 106 return nvgpu_readl(g, fuse_status_opt_rop_l2_fbp_r(fbp));
107} 107}
108 108
109u32 gm20b_fuse_status_opt_gpc(struct gk20a *g)
110{
111 return nvgpu_readl(g, fuse_status_opt_gpc_r());
112}
113
109u32 gm20b_fuse_status_opt_tpc_gpc(struct gk20a *g, u32 gpc) 114u32 gm20b_fuse_status_opt_tpc_gpc(struct gk20a *g, u32 gpc)
110{ 115{
111 return nvgpu_readl(g, fuse_status_opt_tpc_gpc_r(gpc)); 116 return nvgpu_readl(g, fuse_status_opt_tpc_gpc_r(gpc));
diff --git a/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.h b/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.h
index 5e2d194b..b22499ad 100644
--- a/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.h
+++ b/drivers/gpu/nvgpu/common/fuse/fuse_gm20b.h
@@ -36,6 +36,7 @@ int gm20b_fuse_check_priv_security(struct gk20a *g);
36u32 gm20b_fuse_status_opt_fbio(struct gk20a *g); 36u32 gm20b_fuse_status_opt_fbio(struct gk20a *g);
37u32 gm20b_fuse_status_opt_fbp(struct gk20a *g); 37u32 gm20b_fuse_status_opt_fbp(struct gk20a *g);
38u32 gm20b_fuse_status_opt_rop_l2_fbp(struct gk20a *g, u32 fbp); 38u32 gm20b_fuse_status_opt_rop_l2_fbp(struct gk20a *g, u32 fbp);
39u32 gm20b_fuse_status_opt_gpc(struct gk20a *g);
39u32 gm20b_fuse_status_opt_tpc_gpc(struct gk20a *g, u32 gpc); 40u32 gm20b_fuse_status_opt_tpc_gpc(struct gk20a *g, u32 gpc);
40void gm20b_fuse_ctrl_opt_tpc_gpc(struct gk20a *g, u32 gpc, u32 val); 41void gm20b_fuse_ctrl_opt_tpc_gpc(struct gk20a *g, u32 gpc, u32 val);
41u32 gm20b_fuse_opt_sec_debug_en(struct gk20a *g); 42u32 gm20b_fuse_opt_sec_debug_en(struct gk20a *g);