diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2018-09-21 02:36:36 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-09-24 13:14:56 -0400 |
commit | e16843c2efdffa13c15cc0a014b2a5598cc2f4ec (patch) | |
tree | 2942e8a53e954ab30b564a3eb07efc8c10270e10 /drivers/gpu/nvgpu/common/fuse | |
parent | 2a26075b8408b45d18920e3f4ca08a457b23a7e0 (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.c | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/fuse/fuse_gm20b.h | 1 |
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 | ||
109 | u32 gm20b_fuse_status_opt_gpc(struct gk20a *g) | ||
110 | { | ||
111 | return nvgpu_readl(g, fuse_status_opt_gpc_r()); | ||
112 | } | ||
113 | |||
109 | u32 gm20b_fuse_status_opt_tpc_gpc(struct gk20a *g, u32 gpc) | 114 | u32 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); | |||
36 | u32 gm20b_fuse_status_opt_fbio(struct gk20a *g); | 36 | u32 gm20b_fuse_status_opt_fbio(struct gk20a *g); |
37 | u32 gm20b_fuse_status_opt_fbp(struct gk20a *g); | 37 | u32 gm20b_fuse_status_opt_fbp(struct gk20a *g); |
38 | u32 gm20b_fuse_status_opt_rop_l2_fbp(struct gk20a *g, u32 fbp); | 38 | u32 gm20b_fuse_status_opt_rop_l2_fbp(struct gk20a *g, u32 fbp); |
39 | u32 gm20b_fuse_status_opt_gpc(struct gk20a *g); | ||
39 | u32 gm20b_fuse_status_opt_tpc_gpc(struct gk20a *g, u32 gpc); | 40 | u32 gm20b_fuse_status_opt_tpc_gpc(struct gk20a *g, u32 gpc); |
40 | void gm20b_fuse_ctrl_opt_tpc_gpc(struct gk20a *g, u32 gpc, u32 val); | 41 | void gm20b_fuse_ctrl_opt_tpc_gpc(struct gk20a *g, u32 gpc, u32 val); |
41 | u32 gm20b_fuse_opt_sec_debug_en(struct gk20a *g); | 42 | u32 gm20b_fuse_opt_sec_debug_en(struct gk20a *g); |