diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index 5eab4ba08..67f6ad8af 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -872,6 +872,9 @@ static int gk20a_pm_finalize_poweron(struct device *dev) goto done; } + if (g->ops.ltc.init_fs_state) + g->ops.ltc.init_fs_state(g); + err = gk20a_init_mm_support(g); if (err) { gk20a_err(dev, "failed to init gk20a mm"); diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 63dfc12d8..5eaa4d642 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -4211,6 +4211,9 @@ static int gk20a_init_gr_setup_hw(struct gk20a *g) gk20a_dbg_fn(""); + if (g->ops.gr.init_gpc_mmu) + g->ops.gr.init_gpc_mmu(g); + /* slcg prod values */ g->ops.clock_gating.slcg_gr_load_gating_prod(g, g->slcg_enabled); g->ops.clock_gating.slcg_perf_load_gating_prod(g, g->slcg_enabled); diff --git a/drivers/gpu/nvgpu/gk20a/hal.c b/drivers/gpu/nvgpu/gk20a/hal.c index dea740c2d..1aae03049 100644 --- a/drivers/gpu/nvgpu/gk20a/hal.c +++ b/drivers/gpu/nvgpu/gk20a/hal.c @@ -15,6 +15,7 @@ #include "gk20a.h" #include "hal_gk20a.h" +#include "gm20b/hal_gm20b.h" int gpu_init_hal(struct gk20a *g) { @@ -24,6 +25,9 @@ int gpu_init_hal(struct gk20a *g) gk20a_dbg_info("gk20a detected"); gk20a_init_hal(&g->ops); break; + case GK20A_GPUID_GM20B: + gm20b_init_hal(&g->ops); + break; default: gk20a_err(&g->dev->dev, "no support for %x", ver); return -ENODEV; diff --git a/drivers/gpu/nvgpu/gk20a/ltc_common.c b/drivers/gpu/nvgpu/gk20a/ltc_common.c index cd6faacf7..463c5cf8d 100644 --- a/drivers/gpu/nvgpu/gk20a/ltc_common.c +++ b/drivers/gpu/nvgpu/gk20a/ltc_common.c @@ -66,6 +66,11 @@ static int gk20a_determine_L2_size_bytes(struct gk20a *g) bytes_per_line = 128; break; + case GK20A_GPUID_GM20B: + lts_per_ltc = 2; + bytes_per_line = 128; + break; + default: dev_err(dev_from_gk20a(g), "Unknown GPU id 0x%02x\n", (unsigned)gpuid);