Skip to content

Commit 020b8fe

Browse files
amd-yangpgregkh
authored andcommitted
drm/amdgpu: GFX12.1 scratch memory limit up to 57-bit
[ Upstream commit b2d13a4 ] The scratch aperture or gmc private aperture in flat memory contains 57 bits of data on gfx v12.1.0 compared to the 32 bits from previous. Add new helper kfd_init_apertures_v12 for gfx version >= v12.1.0 which supports 57-bit VA space. v2: - update pdd->scratch_limit (Yu, Lang) - update fixes tag (Felix Kuehling) - add helper kfd_init_apertures_v12 Fixes: db1882b ("drm/amdkfd: Update LDS, Scratch base for 57bit address") Signed-off-by: Philip Yang <Philip.Yang@amd.com> Reviewed-by: Lang Yu <lang.yu@amd.com> Acked-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 9c98072 commit 020b8fe

3 files changed

Lines changed: 34 additions & 13 deletions

File tree

drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1405,7 +1405,7 @@ static void gfx_v12_1_xcc_init_compute_vmid(struct amdgpu_device *adev,
14051405
/*
14061406
* Configure apertures:
14071407
* LDS: 0x20000000'00000000 - 0x20000001'00000000 (4GB)
1408-
* Scratch: 0x10000000'00000000 - 0x10000001'00000000 (4GB)
1408+
* Scratch: 0x10000000'00000000 - 0x11ffffff'ffffffff (128PB 57-bit)
14091409
*/
14101410
sh_mem_bases = REG_SET_FIELD(0, SH_MEM_BASES, PRIVATE_BASE,
14111411
(adev->gmc.private_aperture_start >> 58));

drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -654,9 +654,15 @@ static int gmc_v12_0_early_init(struct amdgpu_ip_block *ip_block)
654654
adev->gmc.shared_aperture_start = 0x2000000000000000ULL;
655655
adev->gmc.shared_aperture_end =
656656
adev->gmc.shared_aperture_start + (4ULL << 30) - 1;
657+
657658
adev->gmc.private_aperture_start = 0x1000000000000000ULL;
658-
adev->gmc.private_aperture_end =
659-
adev->gmc.private_aperture_start + (4ULL << 30) - 1;
659+
if (amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(12, 1, 0))
660+
adev->gmc.private_aperture_end =
661+
adev->gmc.private_aperture_start + (1ULL << 57) - 1;
662+
else
663+
adev->gmc.private_aperture_end =
664+
adev->gmc.private_aperture_start + (4ULL << 30) - 1;
665+
660666
adev->gmc.noretry_flags = AMDGPU_VM_NORETRY_FLAGS_TF;
661667

662668
return 0;

drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -342,20 +342,14 @@ static void kfd_init_apertures_vi(struct kfd_process_device *pdd, uint8_t id)
342342

343343
static void kfd_init_apertures_v9(struct kfd_process_device *pdd, uint8_t id)
344344
{
345-
if (KFD_GC_VERSION(pdd->dev) >= IP_VERSION(12, 1, 0))
346-
pdd->lds_base = pdd->dev->adev->gmc.shared_aperture_start;
347-
else
348-
pdd->lds_base = MAKE_LDS_APP_BASE_V9();
345+
pdd->lds_base = MAKE_LDS_APP_BASE_V9();
349346
pdd->lds_limit = MAKE_LDS_APP_LIMIT(pdd->lds_base);
350347

351348
pdd->gpuvm_base = AMDGPU_VA_RESERVED_BOTTOM;
352349
pdd->gpuvm_limit =
353350
pdd->dev->kfd->shared_resources.gpuvm_size - 1;
354351

355-
if (KFD_GC_VERSION(pdd->dev) >= IP_VERSION(12, 1, 0))
356-
pdd->scratch_base = pdd->dev->adev->gmc.private_aperture_start;
357-
else
358-
pdd->scratch_base = MAKE_SCRATCH_APP_BASE_V9();
352+
pdd->scratch_base = MAKE_SCRATCH_APP_BASE_V9();
359353
pdd->scratch_limit = MAKE_SCRATCH_APP_LIMIT(pdd->scratch_base);
360354

361355
/*
@@ -365,6 +359,25 @@ static void kfd_init_apertures_v9(struct kfd_process_device *pdd, uint8_t id)
365359
pdd->qpd.cwsr_base = AMDGPU_VA_RESERVED_TRAP_START(pdd->dev->adev);
366360
}
367361

362+
static void kfd_init_apertures_v12(struct kfd_process_device *pdd, uint8_t id)
363+
{
364+
pdd->lds_base = pdd->dev->adev->gmc.shared_aperture_start;
365+
pdd->lds_limit = pdd->dev->adev->gmc.shared_aperture_end;
366+
367+
pdd->gpuvm_base = AMDGPU_VA_RESERVED_BOTTOM;
368+
pdd->gpuvm_limit =
369+
pdd->dev->kfd->shared_resources.gpuvm_size - 1;
370+
371+
pdd->scratch_base = pdd->dev->adev->gmc.private_aperture_start;
372+
pdd->scratch_limit = pdd->dev->adev->gmc.private_aperture_end;
373+
374+
/*
375+
* Place TBA/TMA on opposite side of VM hole to prevent
376+
* stray faults from triggering SVM on these pages.
377+
*/
378+
pdd->qpd.cwsr_base = AMDGPU_VA_RESERVED_TRAP_START(pdd->dev->adev);
379+
}
380+
368381
int kfd_init_apertures(struct kfd_process *process)
369382
{
370383
uint8_t id = 0;
@@ -412,9 +425,11 @@ int kfd_init_apertures(struct kfd_process *process)
412425
kfd_init_apertures_vi(pdd, id);
413426
break;
414427
default:
415-
if (KFD_GC_VERSION(dev) >= IP_VERSION(9, 0, 1))
428+
if (KFD_GC_VERSION(dev) >= IP_VERSION(12, 1, 0)) {
429+
kfd_init_apertures_v12(pdd, id);
430+
} else if (KFD_GC_VERSION(dev) >= IP_VERSION(9, 0, 1)) {
416431
kfd_init_apertures_v9(pdd, id);
417-
else {
432+
} else {
418433
WARN(1, "Unexpected ASIC family %u",
419434
dev->adev->asic_type);
420435
return -EINVAL;

0 commit comments

Comments
 (0)