On 11/7/25 16:57, Timur Kristóf wrote: > The VCPU BO doesn't only contain the VCE firmware but also other > ranges that the VCE uses for its stack and data. Let's initialize > this to zero to avoid having garbage in the VCPU BO. > > Additionally, don't unmap/unreserve the VCPU BO. > The VCPU BO needs to stay at the same location before and after > sleep/resume because the FW code is not relocatable once it's > started. > > Signed-off-by: Timur Kristóf <[email protected]>
Reviewed-by: Christian König <[email protected]> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 23 +++-------------------- > 1 file changed, 3 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > index c4e9d1862108..3a986e3589a5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > @@ -314,40 +314,23 @@ int amdgpu_vce_suspend(struct amdgpu_device *adev) > */ > int amdgpu_vce_resume(struct amdgpu_device *adev) > { > - void *cpu_addr; > const struct common_firmware_header *hdr; > unsigned int offset; > - int r, idx; > + int idx; > > if (adev->vce.vcpu_bo == NULL) > return -EINVAL; > > - r = amdgpu_bo_reserve(adev->vce.vcpu_bo, false); > - if (r) { > - dev_err(adev->dev, "(%d) failed to reserve VCE bo\n", r); > - return r; > - } > - > - r = amdgpu_bo_kmap(adev->vce.vcpu_bo, &cpu_addr); > - if (r) { > - amdgpu_bo_unreserve(adev->vce.vcpu_bo); > - dev_err(adev->dev, "(%d) VCE map failed\n", r); > - return r; > - } > - > hdr = (const struct common_firmware_header *)adev->vce.fw->data; > offset = le32_to_cpu(hdr->ucode_array_offset_bytes); > > if (drm_dev_enter(adev_to_drm(adev), &idx)) { > - memcpy_toio(cpu_addr, adev->vce.fw->data + offset, > + memset_io(adev->vce.cpu_addr, 0, > amdgpu_bo_size(adev->vce.vcpu_bo)); > + memcpy_toio(adev->vce.cpu_addr, adev->vce.fw->data + offset, > adev->vce.fw->size - offset); > drm_dev_exit(idx); > } > > - amdgpu_bo_kunmap(adev->vce.vcpu_bo); > - > - amdgpu_bo_unreserve(adev->vce.vcpu_bo); > - > return 0; > } >
