From 161b61e6cc76c2050115039141027320a2f2e745 Mon Sep 17 00:00:00 2001 From: seshendra Gadagottu Date: Thu, 27 Oct 2016 10:54:18 -0700 Subject: gpu: nvgpu: pmu HAL update Update pmu HAL to check for pmu support. pmu initialization will check for pmu support in that platform. JIRA GV11B-21 Change-Id: Ib55be58a1540862b7a91a6162544d10be85b5eb4 Signed-off-by: seshendra Gadagottu Reviewed-on: http://git-master/r/1243911 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gk20a.c | 22 +++++++++++++--------- drivers/gpu/nvgpu/gk20a/gk20a.h | 1 + drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 6 ++++++ drivers/gpu/nvgpu/gm206/pmu_gm206.c | 6 ++++++ drivers/gpu/nvgpu/gm20b/acr_gm20b.c | 6 ++++++ 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index 606dbc1f..87f47cd8 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -955,11 +955,13 @@ int gk20a_pm_finalize_poweron(struct device *dev) goto done; } - if (g->ops.pmu.prepare_ucode) - err = g->ops.pmu.prepare_ucode(g); - if (err) { - gk20a_err(dev, "failed to init pmu ucode"); - goto done; + if (g->ops.pmu.is_pmu_supported(g)) { + if (g->ops.pmu.prepare_ucode) + err = g->ops.pmu.prepare_ucode(g); + if (err) { + gk20a_err(dev, "failed to init pmu ucode"); + goto done; + } } #ifdef CONFIG_ARCH_TEGRA_18x_SOC @@ -972,10 +974,12 @@ int gk20a_pm_finalize_poweron(struct device *dev) } #endif - err = gk20a_init_pmu_support(g); - if (err) { - gk20a_err(dev, "failed to init gk20a pmu"); - goto done; + if (g->ops.pmu.is_pmu_supported(g)) { + err = gk20a_init_pmu_support(g); + if (err) { + gk20a_err(dev, "failed to init gk20a pmu"); + goto done; + } } err = gk20a_init_gr_support(g); diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index ec0b4ba9..a230e98a 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -584,6 +584,7 @@ struct gpu_ops { void (*therm_debugfs_init)(struct gk20a *g); } therm; struct { + bool (*is_pmu_supported)(struct gk20a *g); int (*prepare_ucode)(struct gk20a *g); int (*pmu_setup_hw_and_bootstrap)(struct gk20a *g); int (*pmu_nsbootstrap)(struct pmu_gk20a *pmu); diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index cd4bab76..58fb2acc 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c @@ -3266,8 +3266,14 @@ int gk20a_pmu_reset(struct gk20a *g) return err; } +static bool gk20a_is_pmu_supported(struct gk20a *g) +{ + return true; +} + void gk20a_init_pmu_ops(struct gpu_ops *gops) { + gops->pmu.is_pmu_supported = gk20a_is_pmu_supported; gops->pmu.prepare_ucode = gk20a_prepare_ucode; gops->pmu.pmu_setup_hw_and_bootstrap = gk20a_init_pmu_setup_hw1; gops->pmu.pmu_nsbootstrap = pmu_bootstrap; diff --git a/drivers/gpu/nvgpu/gm206/pmu_gm206.c b/drivers/gpu/nvgpu/gm206/pmu_gm206.c index e0ae06ea..a87ecc1d 100644 --- a/drivers/gpu/nvgpu/gm206/pmu_gm206.c +++ b/drivers/gpu/nvgpu/gm206/pmu_gm206.c @@ -129,9 +129,15 @@ int gm206_load_falcon_ucode(struct gk20a *g, u32 falconidmask) return 0; } +static bool gm206_is_pmu_supported(struct gk20a *g) +{ + return true; +} + void gm206_init_pmu_ops(struct gpu_ops *gops) { + gops->pmu.is_pmu_supported = gm206_is_pmu_supported; if (gops->privsecurity) { gm206_init_secure_pmu(gops); gops->pmu.init_wpr_region = gm20b_pmu_init_acr; diff --git a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c index 310a3bc8..f9e2d477 100644 --- a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c @@ -94,8 +94,14 @@ static void gm20b_wpr_info(struct gk20a *g, struct wpr_carveout_info *inf) inf->size = mem_inf.size; } +static bool gm20b_is_pmu_supported(struct gk20a *g) +{ + return true; +} + void gm20b_init_secure_pmu(struct gpu_ops *gops) { + gops->pmu.is_pmu_supported = gm20b_is_pmu_supported; gops->pmu.prepare_ucode = prepare_ucode_blob; gops->pmu.pmu_setup_hw_and_bootstrap = gm20b_bootstrap_hs_flcn; gops->pmu.is_lazy_bootstrap = gm20b_is_lazy_bootstrap; -- cgit v1.2.2