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,
>>>                             &regs[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

Reply via email to