aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2017-04-21 07:35:11 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-05-24 17:40:18 -0400
commit17b2e332a277bf8a1314bfa58ac17d38b77d3c14 (patch)
treea5d1df7a8428a3621c2b7eea2d59b1da9694fe5f /drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
parent3af906f0cf6bdf9b7c300a0fa34858a02c71c730 (diff)
drm/amdgpu:need som change on vega10 mailbox
if sriov gpu reset is invoked by job timeout, it is run in a global work-queue which is very slow and better not call msleep ortherwise it takes long time to get back CPU. so make below changes: 1: Change msleep 1 to mdelay 5 2: Ignore the ack fail from pf after time out, because VF FLR will clear ack, sometime VF FLR is done prior to the beginning of poll_ack so we can ignore this ack TODO: Put job_timedout (and the following gpu reset) in a driver thread, instead of the global work_struct. Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-by: Xiangliang Yu <Xiangliang.Yu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
index 712f36ef2efd..e967a7b17afe 100644
--- a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
+++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
@@ -124,8 +124,8 @@ static int xgpu_ai_poll_ack(struct amdgpu_device *adev)
124 r = -ETIME; 124 r = -ETIME;
125 break; 125 break;
126 } 126 }
127 msleep(1); 127 mdelay(5);
128 timeout -= 1; 128 timeout -= 5;
129 129
130 reg = RREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0, 130 reg = RREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0,
131 mmBIF_BX_PF0_MAILBOX_CONTROL)); 131 mmBIF_BX_PF0_MAILBOX_CONTROL));
@@ -141,12 +141,12 @@ static int xgpu_ai_poll_msg(struct amdgpu_device *adev, enum idh_event event)
141 r = xgpu_ai_mailbox_rcv_msg(adev, event); 141 r = xgpu_ai_mailbox_rcv_msg(adev, event);
142 while (r) { 142 while (r) {
143 if (timeout <= 0) { 143 if (timeout <= 0) {
144 pr_err("Doesn't get ack from pf.\n"); 144 pr_err("Doesn't get msg:%d from pf.\n", event);
145 r = -ETIME; 145 r = -ETIME;
146 break; 146 break;
147 } 147 }
148 msleep(1); 148 mdelay(5);
149 timeout -= 1; 149 timeout -= 5;
150 150
151 r = xgpu_ai_mailbox_rcv_msg(adev, event); 151 r = xgpu_ai_mailbox_rcv_msg(adev, event);
152 } 152 }
@@ -165,7 +165,7 @@ static int xgpu_ai_send_access_requests(struct amdgpu_device *adev,
165 /* start to poll ack */ 165 /* start to poll ack */
166 r = xgpu_ai_poll_ack(adev); 166 r = xgpu_ai_poll_ack(adev);
167 if (r) 167 if (r)
168 return r; 168 pr_err("Doesn't get ack from pf, continue\n");
169 169
170 xgpu_ai_mailbox_set_valid(adev, false); 170 xgpu_ai_mailbox_set_valid(adev, false);
171 171
@@ -174,8 +174,10 @@ static int xgpu_ai_send_access_requests(struct amdgpu_device *adev,
174 req == IDH_REQ_GPU_FINI_ACCESS || 174 req == IDH_REQ_GPU_FINI_ACCESS ||
175 req == IDH_REQ_GPU_RESET_ACCESS) { 175 req == IDH_REQ_GPU_RESET_ACCESS) {
176 r = xgpu_ai_poll_msg(adev, IDH_READY_TO_ACCESS_GPU); 176 r = xgpu_ai_poll_msg(adev, IDH_READY_TO_ACCESS_GPU);
177 if (r) 177 if (r) {
178 pr_err("Doesn't get READY_TO_ACCESS_GPU from pf, give up\n");
178 return r; 179 return r;
180 }
179 } 181 }
180 182
181 return 0; 183 return 0;
@@ -211,7 +213,7 @@ static int xgpu_ai_mailbox_ack_irq(struct amdgpu_device *adev,
211 struct amdgpu_irq_src *source, 213 struct amdgpu_irq_src *source,
212 struct amdgpu_iv_entry *entry) 214 struct amdgpu_iv_entry *entry)
213{ 215{
214 DRM_DEBUG("get ack intr and do nothing.\n"); 216 printk("get ack intr and do nothing.\n");
215 return 0; 217 return 0;
216} 218}
217 219