From e1161fe0e423d159ba7d5953d9be959ee96b4371 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Wed, 27 Jun 2018 13:50:42 +0530 Subject: gpu: nvgpu: fix active fbpa mask calculation In gr_gv100_get_active_fpba_mask(), we currently use num_fbpas passed by the caller which is usually litter (max possible on h/w) value We should instead read the number of FBPAs from h/w instead of reading litter value Jira NVGPUT-117 Change-Id: I6ecd4db0fd939e1dfebf31d27e0022ae02809399 Signed-off-by: Deepak Nibade Reviewed-on: https://git-master.nvidia.com/r/1762721 Reviewed-by: svc-mobile-coverity GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gv100/gr_gv100.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/nvgpu/gv100') diff --git a/drivers/gpu/nvgpu/gv100/gr_gv100.c b/drivers/gpu/nvgpu/gv100/gr_gv100.c index 2180fa1c..680bcba3 100644 --- a/drivers/gpu/nvgpu/gv100/gr_gv100.c +++ b/drivers/gpu/nvgpu/gv100/gr_gv100.c @@ -37,6 +37,7 @@ #include #include #include +#include /* @@ -371,9 +372,13 @@ u32 gr_gv100_get_patch_slots(struct gk20a *g) return size; } -static u32 gr_gv100_get_active_fpba_mask(struct gk20a *g, u32 num_fbpas) +static u32 gr_gv100_get_active_fpba_mask(struct gk20a *g) { u32 active_fbpa_mask; + u32 num_fbpas, val; + + val = nvgpu_readl(g, top_num_fbpas_r()); + num_fbpas = top_num_fbpas_value_v(val); /* * Read active fbpa mask from fuse @@ -404,7 +409,7 @@ int gr_gv100_add_ctxsw_reg_pm_fbpa(struct gk20a *g, if ((cnt + (regs->count * num_fbpas)) > max_cnt) return -EINVAL; - active_fbpa_mask = gr_gv100_get_active_fpba_mask(g, num_fbpas); + active_fbpa_mask = gr_gv100_get_active_fpba_mask(g); for (idx = 0; idx < regs->count; idx++) { for (fbpa_id = 0; fbpa_id < num_fbpas; fbpa_id++) { @@ -439,7 +444,7 @@ void gr_gv100_split_fbpa_broadcast_addr(struct gk20a *g, u32 addr, u32 active_fbpa_mask; u32 fbpa_id; - active_fbpa_mask = gr_gv100_get_active_fpba_mask(g, num_fbpas); + active_fbpa_mask = gr_gv100_get_active_fpba_mask(g); for (fbpa_id = 0; fbpa_id < num_fbpas; fbpa_id++) { if (active_fbpa_mask & BIT(fbpa_id)) { -- cgit v1.2.2