diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 21 |
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 | } |