drm/amdkfd: Add an error print if SDMA RLC is not idle
The message will be useful when troubleshooting the issues. Signed-off-by: Yong Zhao <Yong.Zhao@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -152,8 +152,10 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd,
|
|||||||
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
data = RREG32(sdmax_gfx_context_cntl);
|
data = RREG32(sdmax_gfx_context_cntl);
|
||||||
@@ -271,8 +273,10 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
|
|||||||
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -510,8 +510,10 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd,
|
|||||||
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
data = RREG32(sdmax_gfx_context_cntl);
|
data = RREG32(sdmax_gfx_context_cntl);
|
||||||
@@ -762,8 +764,10 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
|
|||||||
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -427,8 +427,10 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd,
|
|||||||
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
if (m->sdma_engine_id) {
|
if (m->sdma_engine_id) {
|
||||||
@@ -660,8 +662,10 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
|
|||||||
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -411,8 +411,10 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd,
|
|||||||
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
if (m->sdma_engine_id) {
|
if (m->sdma_engine_id) {
|
||||||
@@ -656,8 +658,10 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
|
|||||||
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -409,8 +409,10 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd,
|
|||||||
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
data = RREG32(sdmax_gfx_context_cntl);
|
data = RREG32(sdmax_gfx_context_cntl);
|
||||||
@@ -600,8 +602,10 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
|
|||||||
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
|
||||||
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
|
||||||
break;
|
break;
|
||||||
if (time_after(jiffies, end_jiffies))
|
if (time_after(jiffies, end_jiffies)) {
|
||||||
|
pr_err("SDMA RLC not idle in %s\n", __func__);
|
||||||
return -ETIME;
|
return -ETIME;
|
||||||
|
}
|
||||||
usleep_range(500, 1000);
|
usleep_range(500, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user