Yes. IIRC, some asics' amdgpu_gfx_ctrl() is implemented as synchronous (upon function returns, gfx block is guaranteed to be in power-up state). Anyway, let me confirm about that soon.
BR, Xiaojie > On Nov 16, 2019, at 12:52 AM, Alex Deucher <[email protected]> wrote: > >> On Fri, Nov 15, 2019 at 11:46 AM Yuan, Xiaojie <[email protected]> wrote: >> >> Hi Alex, >> >> IMHO, driver sending Disallow_Gfxoff message to SMU doesn't mean gfx block >> will be immediately powered up, so I'm not sure MMIO register access will be >> successful within this time window(maybe GRBM access will be pending until >> gfx block is powered up?) >> >> If you are not in a hurry to commit this fix, I can verify on my Navi boards >> next Monday. > > That would be great. Maybe we can add a delay in that function to > take that into account? > > Thanks! > > Alex > >> >> BR, >> Xiaojie >> >>> On Nov 15, 2019, at 12:44 AM, Alex Deucher <[email protected]> wrote: >>> >>> When gfxoff is enabled, accessing gfx registers via MMIO >>> can lead to a hang. >>> >>> Bug: https://bugzilla.kernel.org/show_bug.cgi?id=205497 >>> Signed-off-by: Alex Deucher <[email protected]> >>> --- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 6 +++++- >>> 1 file changed, 5 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >>> index 6ddea7607ad0..5f3b3a705b29 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >>> @@ -659,15 +659,19 @@ static int amdgpu_info_ioctl(struct drm_device *dev, >>> void *data, struct drm_file >>> return -ENOMEM; >>> alloc_size = info->read_mmr_reg.count * sizeof(*regs); >>> >>> - for (i = 0; i < info->read_mmr_reg.count; i++) >>> + amdgpu_gfx_off_ctrl(adev, false); >>> + for (i = 0; i < info->read_mmr_reg.count; i++) { >>> if (amdgpu_asic_read_register(adev, se_num, sh_num, >>> info->read_mmr_reg.dword_offset + i, >>> ®s[i])) { >>> DRM_DEBUG_KMS("unallowed offset %#x\n", >>> info->read_mmr_reg.dword_offset + i); >>> kfree(regs); >>> + amdgpu_gfx_off_ctrl(adev, true); >>> return -EFAULT; >>> } >>> + } >>> + amdgpu_gfx_off_ctrl(adev, true); >>> n = copy_to_user(out, regs, min(size, alloc_size)); >>> kfree(regs); >>> return n ? -EFAULT : 0; >>> -- >>> 2.23.0 >>> >>> _______________________________________________ >>> amd-gfx mailing list >>> [email protected] >>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/amd-gfx
