From ed32288ee8a0664ebe6cd42a290deb0e07ebe356 Mon Sep 17 00:00:00 2001 From: Mahantesh Kumbar Date: Tue, 24 May 2016 15:32:22 +0530 Subject: gpu: nvgpu: ELPG init based on flag flag helps to enable/disable ELPG init in SW Bug N/A Change-Id: I73eb592b789c2c29db8a75018cbd1617dcf16df8 Signed-off-by: Mahantesh Kumbar Reviewed-on: http://git-master/r/1152430 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/platform_gk20a.h | 3 +++ drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c | 2 ++ drivers/gpu/nvgpu/gk20a/platform_vgpu_tegra.c | 1 + drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 4 +++- drivers/gpu/nvgpu/pci.c | 2 ++ 5 files changed, 11 insertions(+), 1 deletion(-) (limited to 'drivers/gpu') diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h index 38ce5a97..14f90c94 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h @@ -42,6 +42,9 @@ struct gk20a_platform { /* Should be populated at probe. */ bool can_railgate; + /* Should be populated at probe. */ + bool can_elpg; + /* Should be populated at probe. */ bool has_syncpoints; diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c index ca36d481..4d592d28 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c +++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c @@ -863,6 +863,7 @@ struct gk20a_platform gk20a_tegra_platform = { .railgate_delay = 500, .clockgate_delay = 50, .can_railgate = true, + .can_elpg = true, .enable_slcg = true, .enable_blcg = true, .enable_elcg = true, @@ -923,6 +924,7 @@ struct gk20a_platform gm20b_tegra_platform = { .railgate_delay = 500, .clockgate_delay = 50, .can_railgate = true, + .can_elpg = true, .enable_slcg = true, .enable_blcg = true, .enable_elcg = true, diff --git a/drivers/gpu/nvgpu/gk20a/platform_vgpu_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_vgpu_tegra.c index bb8d05b8..b260b3ac 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_vgpu_tegra.c +++ b/drivers/gpu/nvgpu/gk20a/platform_vgpu_tegra.c @@ -52,6 +52,7 @@ struct gk20a_platform vgpu_tegra_platform = { /* power management configuration */ .can_railgate = false, + .can_elpg = false, .enable_slcg = false, .enable_blcg = false, .enable_elcg = false, diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index a8ebaf7a..64828a3f 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c @@ -2462,6 +2462,7 @@ static int gk20a_prepare_ucode(struct gk20a *g) static int gk20a_init_pmu_setup_sw(struct gk20a *g) { + struct gk20a_platform *platform = dev_get_drvdata(g->dev); struct pmu_gk20a *pmu = &g->pmu; struct mm_gk20a *mm = &g->mm; struct vm_gk20a *vm = &mm->pmu.vm; @@ -2514,7 +2515,8 @@ static int gk20a_init_pmu_setup_sw(struct gk20a *g) pmu_seq_init(pmu); - INIT_WORK(&pmu->pg_init, pmu_setup_hw); + if (platform->can_elpg) + INIT_WORK(&pmu->pg_init, pmu_setup_hw); err = gk20a_gmmu_alloc_map(vm, GK20A_PMU_SEQ_BUF_SIZE, &pmu->seq_buf); if (err) { diff --git a/drivers/gpu/nvgpu/pci.c b/drivers/gpu/nvgpu/pci.c index 3057a625..cc68a681 100644 --- a/drivers/gpu/nvgpu/pci.c +++ b/drivers/gpu/nvgpu/pci.c @@ -57,6 +57,8 @@ static struct gk20a_platform nvgpu_pci_device = { .remove = nvgpu_pci_tegra_remove, .busy = nvgpu_pci_busy, + .can_elpg = false, + /* power management callbacks */ .is_railgated = nvgpu_pci_tegra_is_railgated, -- cgit v1.2.2