Skip to content

Commit e81f449

Browse files
kwachowsJeevakaPrabu
authored andcommitted
accel/ivpu: Increase DMA address range
Increase DMA address range to: * 128 GB on 37xx (due to MMU limitations) * 256 GB on other generations Merge User and DMA ranges on 40xx and above as it is possible to access whole 256 GBs from both FW and DMA. Increase User range on 37xx from 255MB to 511MB to allow loading very large models. Do not set global_alias_pio_base/size on other generations than 37xx as it's only used on 37xx anyway. Signed-off-by: Karol Wachowski <karol.wachowski@intel.com> Signed-off-by: Andrzej Kacprowski <Andrzej.Kacprowski@intel.com> Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20241017145817.121590-11-jacek.lawrynowicz@linux.intel.com
1 parent 49d98a9 commit e81f449

3 files changed

Lines changed: 11 additions & 9 deletions

File tree

drivers/accel/ivpu/ivpu_fw.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,8 +570,10 @@ void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params
570570
boot_params->ipc_payload_area_start = ipc_mem_rx->vpu_addr + ivpu_bo_size(ipc_mem_rx) / 2;
571571
boot_params->ipc_payload_area_size = ivpu_bo_size(ipc_mem_rx) / 2;
572572

573-
boot_params->global_aliased_pio_base = vdev->hw->ranges.user.start;
574-
boot_params->global_aliased_pio_size = ivpu_hw_range_size(&vdev->hw->ranges.user);
573+
if (ivpu_hw_ip_gen(vdev) == IVPU_HW_IP_37XX) {
574+
boot_params->global_aliased_pio_base = vdev->hw->ranges.user.start;
575+
boot_params->global_aliased_pio_size = ivpu_hw_range_size(&vdev->hw->ranges.user);
576+
}
575577

576578
/* Allow configuration for L2C_PAGE_TABLE with boot param value */
577579
boot_params->autoconfig = 1;

drivers/accel/ivpu/ivpu_hw.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,14 @@ static void memory_ranges_init(struct ivpu_device *vdev)
111111
{
112112
if (ivpu_hw_ip_gen(vdev) == IVPU_HW_IP_37XX) {
113113
ivpu_hw_range_init(&vdev->hw->ranges.global, 0x80000000, SZ_512M);
114-
ivpu_hw_range_init(&vdev->hw->ranges.user, 0xc0000000, 255 * SZ_1M);
114+
ivpu_hw_range_init(&vdev->hw->ranges.user, 0x88000000, 511 * SZ_1M);
115115
ivpu_hw_range_init(&vdev->hw->ranges.shave, 0x180000000, SZ_2G);
116-
ivpu_hw_range_init(&vdev->hw->ranges.dma, 0x200000000, SZ_8G);
116+
ivpu_hw_range_init(&vdev->hw->ranges.dma, 0x200000000, SZ_128G);
117117
} else {
118118
ivpu_hw_range_init(&vdev->hw->ranges.global, 0x80000000, SZ_512M);
119-
ivpu_hw_range_init(&vdev->hw->ranges.user, 0x80000000, SZ_256M);
120-
ivpu_hw_range_init(&vdev->hw->ranges.shave, 0x80000000 + SZ_256M, SZ_2G - SZ_256M);
121-
ivpu_hw_range_init(&vdev->hw->ranges.dma, 0x200000000, SZ_8G);
119+
ivpu_hw_range_init(&vdev->hw->ranges.shave, 0x80000000, SZ_2G);
120+
ivpu_hw_range_init(&vdev->hw->ranges.user, 0x100000000, SZ_256G);
121+
vdev->hw->ranges.dma = vdev->hw->ranges.user;
122122
}
123123
}
124124

drivers/accel/ivpu/ivpu_mmu_context.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,8 +571,8 @@ void ivpu_mmu_context_init(struct ivpu_device *vdev, struct ivpu_mmu_context *ct
571571
start = vdev->hw->ranges.global.start;
572572
end = vdev->hw->ranges.shave.end;
573573
} else {
574-
start = vdev->hw->ranges.user.start;
575-
end = vdev->hw->ranges.dma.end;
574+
start = min_t(u64, vdev->hw->ranges.user.start, vdev->hw->ranges.shave.start);
575+
end = max_t(u64, vdev->hw->ranges.user.end, vdev->hw->ranges.dma.end);
576576
}
577577

578578
drm_mm_init(&ctx->mm, start, end - start);

0 commit comments

Comments
 (0)