diff --git a/drivers/gpu/nvgpu/common/pmu/ipc/pmu_msg.c b/drivers/gpu/nvgpu/common/pmu/ipc/pmu_msg.c index 36234322b..9c5b23bc4 100644 --- a/drivers/gpu/nvgpu/common/pmu/ipc/pmu_msg.c +++ b/drivers/gpu/nvgpu/common/pmu/ipc/pmu_msg.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -561,7 +560,9 @@ void nvgpu_pmu_rpc_handler(struct gk20a *g, struct pmu_msg *msg, nvgpu_pmu_perfmon_rpc_handler(g, pmu, &rpc, rpc_payload); break; case PMU_UNIT_VOLT: - nvgpu_pmu_volt_rpc_handler(g, &rpc); + if (pmu->volt_rpc_handler != NULL) { + pmu->volt_rpc_handler(g, &rpc); + } break; case PMU_UNIT_CLK: nvgpu_pmu_dbg(g, "reply PMU_UNIT_CLK"); diff --git a/drivers/gpu/nvgpu/common/pmu/volt/volt_dev.c b/drivers/gpu/nvgpu/common/pmu/volt/volt_dev.c index 31550b127..ff2613198 100644 --- a/drivers/gpu/nvgpu/common/pmu/volt/volt_dev.c +++ b/drivers/gpu/nvgpu/common/pmu/volt/volt_dev.c @@ -592,6 +592,8 @@ int nvgpu_volt_dev_sw_setup(struct gk20a *g) } } + g->pmu.volt_rpc_handler = nvgpu_pmu_volt_rpc_handler; + done: nvgpu_log_info(g, " done status %x", status); return status; diff --git a/drivers/gpu/nvgpu/include/nvgpu/pmu.h b/drivers/gpu/nvgpu/include/nvgpu/pmu.h index 1f08490b4..07d6b685c 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/pmu.h +++ b/drivers/gpu/nvgpu/include/nvgpu/pmu.h @@ -243,6 +243,8 @@ struct nvgpu_pmu { void (*remove_support)(struct nvgpu_pmu *pmu); void (*therm_rpc_handler)(struct gk20a *g, struct nv_pmu_rpc_header *rpc); + void (*volt_rpc_handler)(struct gk20a *g, + struct nv_pmu_rpc_header *rpc); bool sw_ready; struct nvgpu_mutex isr_mutex;