The entire series of 7 patches looks good to me. Reviewed-by: Vitaly Prosyak [email protected]
Yes — for SDMA 5.0 the maximum COPY transfer size should be 1 << 22 (0x400000). I validated the limits using the new IGT tests. On 2026-02-19 11:02, Alex Deucher wrote: > SDMA 4.4.x has increased transfer limits. > > v2: fix harder, use shifts to make it more obvious > > Cc: Vitaly Prosyak <[email protected]> > Signed-off-by: Alex Deucher <[email protected]> > --- > drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c > b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c > index a35d9951e22a9..44f0f23e11484 100644 > --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c > @@ -2604,18 +2604,31 @@ static void sdma_v4_0_emit_fill_buffer(struct > amdgpu_ib *ib, > } > > static const struct amdgpu_buffer_funcs sdma_v4_0_buffer_funcs = { > - .copy_max_bytes = 0x400000, > + .copy_max_bytes = 1 << 22, > .copy_num_dw = 7, > .emit_copy_buffer = sdma_v4_0_emit_copy_buffer, > > - .fill_max_bytes = 0x400000, > + .fill_max_bytes = 1 << 22, > + .fill_num_dw = 5, > + .emit_fill_buffer = sdma_v4_0_emit_fill_buffer, > +}; > + > +static const struct amdgpu_buffer_funcs sdma_v4_4_buffer_funcs = { > + .copy_max_bytes = 1 << 30, > + .copy_num_dw = 7, > + .emit_copy_buffer = sdma_v4_0_emit_copy_buffer, > + > + .fill_max_bytes = 1 << 30, > .fill_num_dw = 5, > .emit_fill_buffer = sdma_v4_0_emit_fill_buffer, > }; > > static void sdma_v4_0_set_buffer_funcs(struct amdgpu_device *adev) > { > - adev->mman.buffer_funcs = &sdma_v4_0_buffer_funcs; > + if (amdgpu_ip_version(adev, SDMA0_HWIP, 0) >= IP_VERSION(4, 4, 0)) > + adev->mman.buffer_funcs = &sdma_v4_4_buffer_funcs; > + else > + adev->mman.buffer_funcs = &sdma_v4_0_buffer_funcs; > if (adev->sdma.has_page_queue) > adev->mman.buffer_funcs_ring = &adev->sdma.instance[0].page; > else
