<html>
<head>
<base href="https://bugs.freedesktop.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - Raven: `amdgpu_device_ip_resume_phase2()` takes 750 ms"
href="https://bugs.freedesktop.org/show_bug.cgi?id=107375">107375</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Raven: `amdgpu_device_ip_resume_phase2()` takes 750 ms
</td>
</tr>
<tr>
<th>Product</th>
<td>DRI
</td>
</tr>
<tr>
<th>Version</th>
<td>DRI git
</td>
</tr>
<tr>
<th>Hardware</th>
<td>Other
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>medium
</td>
</tr>
<tr>
<th>Component</th>
<td>DRM/AMDgpu
</td>
</tr>
<tr>
<th>Assignee</th>
<td>dri-devel@lists.freedesktop.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>pmenzel+bugs.freedesktop@molgen.mpg.de
</td>
</tr></table>
<p>
<div>
<pre>Created <span class=""><a href="attachment.cgi?id=140810" name="attach_140810" title="HTML output of `sudo ./sleepgraph.py -config config/suspend-callgraph.cfg` (devicelist: amdgpu, maxdepth: 12)">attachment 140810</a> <a href="attachment.cgi?id=140810&action=edit" title="HTML output of `sudo ./sleepgraph.py -config config/suspend-callgraph.cfg` (devicelist: amdgpu, maxdepth: 12)">[details]</a></span>
HTML output of `sudo ./sleepgraph.py -config config/suspend-callgraph.cfg`
(devicelist: amdgpu, maxdepth: 12)
Profiling the suspend and resume time [1] on a MSI B350M MORTAR (MS-7A37) with
AMD Ryzen 3 2200G with Radeon Vega Graphics with Linux 4.18-rc6+ and
amd-staging-drm-next [2], `pci_pm_suspend()` takes over one second, which is
too long [3], cf. <a class="bz_bug_link
bz_status_NEW "
title="NEW - Raven: pci_pm_resume takes over 1 second"
href="show_bug.cgi?id=107278">bug 107278</a> [3].
The majority of that, 750 ms, is spent in `amdgpu_device_ip_resume_phase2()`.
• amdgpu_device_ip_resume_phase2 [amdgpu] (747.134 ms @ 97.889371)
• psp_resume [amdgpu] (673.370 ms @ 97.889371)
[…]
• psp_hw_start [amdgpu] (88.577 ms @ 97.889379)
[…]
• psp_np_fw_load [amdgpu] (584.783 ms @ 97.977957)
[…]
• dm_resume [amdgpu] (44.992 ms @ 98.567232)
[…]
• dc_link_detect [amdgpu] (17.777 ms @ 98.568212)
(EDID read takes 8 ms?)
[…]
• drm_atomic_helper_resume (25.139 ms @ 98.587030)
[…]
[…]
In the PSP code the problem is `psp_cmd_submit_buf()`, which takes from 45 ms
to 141 ms. Something is wrong there.
```
static int
psp_cmd_submit_buf(struct psp_context *psp,
struct amdgpu_firmware_info *ucode,
struct psp_gfx_cmd_resp *cmd, uint64_t fence_mc_addr,
int index)
{
int ret;
memset(psp->cmd_buf_mem, 0, PSP_CMD_BUFFER_SIZE);
memcpy(psp->cmd_buf_mem, cmd, sizeof(struct psp_gfx_cmd_resp));
ret = psp_cmd_submit(psp, ucode, psp->cmd_buf_mc_addr,
fence_mc_addr, index);
while (*((unsigned int *)psp->fence_buf) != index) {
msleep(1);
}
return ret;
}
```
Also, I wonder why the sleep in the trace is 3 ms instead of 1 ms like in the
code.
[1]: <a href="https://01.org/suspendresume">https://01.org/suspendresume</a>
[2]: <a href="https://cgit.freedesktop.org/~agd5f/linux/log/?h=amd-staging-drm-next">https://cgit.freedesktop.org/~agd5f/linux/log/?h=amd-staging-drm-next</a>
[3]: <a class="bz_bug_link
bz_status_NEW "
title="NEW - Raven: pci_pm_resume takes over 1 second"
href="show_bug.cgi?id=107278">https://bugs.freedesktop.org/show_bug.cgi?id=107278</a></pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>