From 13bebeced17c206995bd17c573d094968cc0fbca Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Thu, 20 Apr 2017 14:08:26 -0700 Subject: gpu: nvgpu: Use retry timer for short delays CPU timer is inaccurate for short delays, and can produce false timeouts. Bug 1903521 Change-Id: I688b5a59489b62cbd59e418d641fd188ecd3b7e0 Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/1467002 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gm206/bios_gm206.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'drivers/gpu/nvgpu/gm206') diff --git a/drivers/gpu/nvgpu/gm206/bios_gm206.c b/drivers/gpu/nvgpu/gm206/bios_gm206.c index f460a053..6db37d72 100644 --- a/drivers/gpu/nvgpu/gm206/bios_gm206.c +++ b/drivers/gpu/nvgpu/gm206/bios_gm206.c @@ -105,8 +105,10 @@ static int gm206_bios_devinit(struct gk20a *g) gk20a_dbg_fn(""); g->ops.pmu.reset(g); - nvgpu_timeout_init(g, &timeout, PMU_BOOT_TIMEOUT_MAX / 1000, - NVGPU_TIMER_CPU_TIMER); + nvgpu_timeout_init(g, &timeout, + PMU_BOOT_TIMEOUT_MAX / + PMU_BOOT_TIMEOUT_DEFAULT, + NVGPU_TIMER_RETRY_TIMER); do { u32 w = gk20a_readl(g, pwr_falcon_dmactl_r()) & (pwr_falcon_dmactl_dmem_scrubbing_m() | @@ -152,8 +154,10 @@ static int gm206_bios_devinit(struct gk20a *g) gk20a_writel(g, pwr_falcon_cpuctl_r(), pwr_falcon_cpuctl_startcpu_f(1)); - nvgpu_timeout_init(g, &timeout, PMU_BOOT_TIMEOUT_MAX / 1000, - NVGPU_TIMER_CPU_TIMER); + nvgpu_timeout_init(g, &timeout, + PMU_BOOT_TIMEOUT_MAX / + PMU_BOOT_TIMEOUT_DEFAULT, + NVGPU_TIMER_RETRY_TIMER); do { devinit_completed = pwr_falcon_cpuctl_halt_intr_v( gk20a_readl(g, pwr_falcon_cpuctl_r())) && @@ -183,8 +187,10 @@ static int gm206_bios_preos(struct gk20a *g) gk20a_dbg_fn(""); g->ops.pmu.reset(g); - nvgpu_timeout_init(g, &timeout, PMU_BOOT_TIMEOUT_MAX / 1000, - NVGPU_TIMER_CPU_TIMER); + nvgpu_timeout_init(g, &timeout, + PMU_BOOT_TIMEOUT_MAX / + PMU_BOOT_TIMEOUT_DEFAULT, + NVGPU_TIMER_RETRY_TIMER); do { u32 w = gk20a_readl(g, pwr_falcon_dmactl_r()) & (pwr_falcon_dmactl_dmem_scrubbing_m() | @@ -222,7 +228,9 @@ static int gm206_bios_preos(struct gk20a *g) gk20a_writel(g, pwr_falcon_cpuctl_r(), pwr_falcon_cpuctl_startcpu_f(1)); - nvgpu_timeout_init(g, &timeout, PMU_BOOT_TIMEOUT_MAX / 1000, + nvgpu_timeout_init(g, &timeout, + PMU_BOOT_TIMEOUT_MAX / + PMU_BOOT_TIMEOUT_DEFAULT, NVGPU_TIMER_CPU_TIMER); do { val = pwr_falcon_cpuctl_halt_intr_v( -- cgit v1.2.2