From 6c1a77dfa9e48395d40d01b20de4311ef889d3ab Mon Sep 17 00:00:00 2001 From: rmylavarapu Date: Tue, 1 Feb 2022 15:29:16 +0000 Subject: [PATCH] gpu: nvgpu: gsp: add cmdq/msgq init check - Instead of waiting for mailbox update waiting for cmdq/msgq initialization request would be the better way to check the communication between NVGPU and GSP before sending any cmd. NVGPU-7342 Signed-off-by: Ramesh Mylavarapu Change-Id: I6d20764516cee14ad84da7cc9a06c9370675786f Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2650148 Tested-by: mobile promotions Reviewed-by: mobile promotions --- .../common/gsp_scheduler/gsp_scheduler.c | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/gpu/nvgpu/common/gsp_scheduler/gsp_scheduler.c b/drivers/gpu/nvgpu/common/gsp_scheduler/gsp_scheduler.c index b68e638ed..fc5bad85e 100644 --- a/drivers/gpu/nvgpu/common/gsp_scheduler/gsp_scheduler.c +++ b/drivers/gpu/nvgpu/common/gsp_scheduler/gsp_scheduler.c @@ -91,6 +91,28 @@ void nvgpu_gsp_sched_sw_deinit(struct gk20a *g) } } +static int gsp_sched_wait_for_init(struct gk20a *g, + struct nvgpu_gsp_sched *gsp_sched, signed int timeoutms) +{ + nvgpu_log_fn(g, " "); + + do { + if (gsp_sched->gsp_ready) { + break; + } + + if (timeoutms <= 0) { + nvgpu_err(g, "gsp wait for init timedout"); + return -1; + } + + nvgpu_msleep(10); + timeoutms -= 10; + } while (true); + + return 0; +} + int nvgpu_gsp_sched_sw_init(struct gk20a *g) { int err = 0; @@ -177,6 +199,12 @@ int nvgpu_gsp_sched_bootstrap_ns(struct gk20a *g) goto de_init; } + status = gsp_sched_wait_for_init(g, gsp_sched, GSP_WAIT_TIME_MS); + if (status != 0) { + nvgpu_err(g, "gsp wait for basic init failed "); + goto de_init; + } + return status; de_init: nvgpu_gsp_sched_sw_deinit(g);