summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index 0f1af8ab..234255ce 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -1244,18 +1244,19 @@ int pmu_mutex_release(struct pmu_gk20a *pmu, u32 id, u32 *token)
1244 return -EINVAL; 1244 return -EINVAL;
1245 } 1245 }
1246 1246
1247 if (--mutex->ref_cnt == 0) { 1247 if (--mutex->ref_cnt > 0)
1248 gk20a_writel(g, pwr_pmu_mutex_r(mutex->index), 1248 return -EBUSY;
1249 pwr_pmu_mutex_value_initial_lock_f());
1250 1249
1251 data = gk20a_readl(g, pwr_pmu_mutex_id_release_r()); 1250 gk20a_writel(g, pwr_pmu_mutex_r(mutex->index),
1252 data = set_field(data, pwr_pmu_mutex_id_release_value_m(), 1251 pwr_pmu_mutex_value_initial_lock_f());
1253 pwr_pmu_mutex_id_release_value_f(owner));
1254 gk20a_writel(g, pwr_pmu_mutex_id_release_r(), data);
1255 1252
1256 gk20a_dbg_pmu("mutex released: id=%d, token=0x%x", 1253 data = gk20a_readl(g, pwr_pmu_mutex_id_release_r());
1257 mutex->index, *token); 1254 data = set_field(data, pwr_pmu_mutex_id_release_value_m(),
1258 } 1255 pwr_pmu_mutex_id_release_value_f(owner));
1256 gk20a_writel(g, pwr_pmu_mutex_id_release_r(), data);
1257
1258 gk20a_dbg_pmu("mutex released: id=%d, token=0x%x",
1259 mutex->index, *token);
1259 1260
1260 return 0; 1261 return 0;
1261} 1262}