[PATCH] drm/amdgpu/vcn: add shared menory restore after wake up from sleep.

James Zhu jamesz at amd.com
Fri Apr 3 15:54:21 UTC 2020


On 2020-04-03 11:37 a.m., Alex Deucher wrote:
> On Fri, Apr 3, 2020 at 8:52 AM James Zhu <James.Zhu at amd.com> wrote:
>> VCN shared memory needs restore after wake up during S3 test.
> How big is the shared memory?  It might be better to allocate the
> memory once at sw_init and then free it in sw_fini rather than
> allocating and freeing in every suspend/resume.

Hi Alex,

After alignment, it is only 4k. I can change it as you suggest.

Best Regards!

James

>
> Alex
>
>> Signed-off-by: James Zhu <James.Zhu at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 26 ++++++++++++++++++++++++++
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h |  1 +
>>   2 files changed, 27 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>> index d653a18..5891390 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
>> @@ -205,6 +205,7 @@ int amdgpu_vcn_sw_fini(struct amdgpu_device *adev)
>>                  if (adev->vcn.harvest_config & (1 << j))
>>                          continue;
>>
>> +               kvfree(adev->vcn.inst[j].saved_shm_bo);
>>                  amdgpu_bo_free_kernel(&adev->vcn.inst[j].fw_shared_bo,
>>                                            &adev->vcn.inst[j].fw_shared_gpu_addr,
>>                                            (void **)&adev->vcn.inst[j].fw_shared_cpu_addr);
>> @@ -254,6 +255,18 @@ int amdgpu_vcn_suspend(struct amdgpu_device *adev)
>>                          return -ENOMEM;
>>
>>                  memcpy_fromio(adev->vcn.inst[i].saved_bo, ptr, size);
>> +
>> +               if (adev->vcn.inst[i].fw_shared_bo == NULL)
>> +                       return 0;
>> +
>> +               size = amdgpu_bo_size(adev->vcn.inst[i].fw_shared_bo);
>> +               ptr = adev->vcn.inst[i].fw_shared_cpu_addr;
>> +
>> +               adev->vcn.inst[i].saved_shm_bo = kvmalloc(size, GFP_KERNEL);
>> +               if (!adev->vcn.inst[i].saved_shm_bo)
>> +                       return -ENOMEM;
>> +
>> +               memcpy_fromio(adev->vcn.inst[i].saved_shm_bo, ptr, size);
>>          }
>>          return 0;
>>   }
>> @@ -291,6 +304,19 @@ int amdgpu_vcn_resume(struct amdgpu_device *adev)
>>                          }
>>                          memset_io(ptr, 0, size);
>>                  }
>> +
>> +               if (adev->vcn.inst[i].fw_shared_bo == NULL)
>> +                       return -EINVAL;
>> +
>> +               size = amdgpu_bo_size(adev->vcn.inst[i].fw_shared_bo);
>> +               ptr = adev->vcn.inst[i].fw_shared_cpu_addr;
>> +
>> +               if (adev->vcn.inst[i].saved_shm_bo != NULL) {
>> +                       memcpy_toio(ptr, adev->vcn.inst[i].saved_shm_bo, size);
>> +                       kvfree(adev->vcn.inst[i].saved_shm_bo);
>> +                       adev->vcn.inst[i].saved_shm_bo = NULL;
>> +               } else
>> +                       memset_io(ptr, 0, size);
>>          }
>>          return 0;
>>   }
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>> index f739e1a..bd77dae 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h
>> @@ -194,6 +194,7 @@ struct amdgpu_vcn_inst {
>>          atomic_t                dpg_enc_submission_cnt;
>>          void                    *fw_shared_cpu_addr;
>>          uint64_t                fw_shared_gpu_addr;
>> +       void                    *saved_shm_bo;
>>   };
>>
>>   struct amdgpu_vcn {
>> --
>> 2.7.4
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=02%7C01%7CJames.Zhu%40amd.com%7C46c4773164334ec712b708d7d7e4ebd6%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637215250518903143&sdata=Mj%2FgeXKkiNVFUUsyKAesC5eaanDg%2FvQQpQe1rhT9uek%3D&reserved=0


More information about the amd-gfx mailing list