diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 38322c87b..979b4cb0d 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -687,14 +687,16 @@ enum { KEPLER_DMA_COPY_A = 0xA0B5, /*not sure about this one*/ }; -#if defined(CONFIG_GK20A_PMU) -static inline int support_gk20a_pmu(void) +static inline int support_gk20a_pmu(struct platform_device *dev) { - return 1; + if (IS_ENABLED(CONFIG_GK20A_PMU)) { + struct gk20a_platform *platform = gk20a_get_platform(dev); + + /* we have not supported GPU PMU for virtualization now */ + return !platform->virtual_dev; + } else + return 0; } -#else -static inline int support_gk20a_pmu(void){return 0;} -#endif void gk20a_create_sysfs(struct platform_device *dev); diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 936496755..1dc5603f5 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -2110,7 +2110,7 @@ static int gr_gk20a_wait_ctxsw_ready(struct gk20a *g) return ret; } - if (support_gk20a_pmu()) + if (support_gk20a_pmu(g->dev)) gk20a_writel(g, gr_fecs_current_ctx_r(), gr_fecs_current_ctx_valid_false_f()); diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h index e9bf4505c..e09cfbfaa 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h @@ -373,11 +373,11 @@ bool gk20a_gr_sm_debugger_attached(struct gk20a *g); #define gr_gk20a_elpg_protected_call(g, func) \ ({ \ int err = 0; \ - if (support_gk20a_pmu()) \ + if (support_gk20a_pmu(g->dev)) \ err = gk20a_pmu_disable_elpg(g); \ if (err) return err; \ err = func; \ - if (support_gk20a_pmu()) \ + if (support_gk20a_pmu(g->dev)) \ gk20a_pmu_enable_elpg(g); \ err; \ }) diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index 7a62f05c9..7878e1e29 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c @@ -2345,7 +2345,7 @@ int gk20a_init_pmu_support(struct gk20a *g) if (err) return err; - if (support_gk20a_pmu()) { + if (support_gk20a_pmu(g->dev)) { err = gk20a_init_pmu_setup_sw(g); if (err) return err; @@ -3665,7 +3665,7 @@ int gk20a_pmu_destroy(struct gk20a *g) gk20a_dbg_fn(""); - if (!support_gk20a_pmu()) + if (!support_gk20a_pmu(g->dev)) return 0; /* make sure the pending operations are finished before we continue */