OSDN Git Service

accel/ivpu: Add Intel VPU MMU support
authorJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Tue, 17 Jan 2023 09:27:18 +0000 (10:27 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 19 Jan 2023 10:07:22 +0000 (11:07 +0100)
commit263b2ba5fc93c875129e0d2b4034d7d8a34b3d39
tree2526b4b3c8f76eba922575cf4087a31e93d8bdbd
parent35b137630f08d913fc2e33df33ccc2570dff3f7d
accel/ivpu: Add Intel VPU MMU support

VPU Memory Management Unit is based on ARM MMU-600.
It allows the creation of multiple virtual address spaces for
the device and map noncontinuous host memory (there is no dedicated
memory on the VPU).

Address space is implemented as a struct ivpu_mmu_context, it has an ID,
drm_mm allocator for VPU addresses and struct ivpu_mmu_pgtable that
holds actual 3-level, 4KB page table.
Context with ID 0 (global context) is created upon driver initialization
and it's mainly used for mapping memory required to execute
the firmware.
Contexts with non-zero IDs are user contexts allocated each time
the devices is open()-ed and they map command buffers and other
workload-related memory.
Workloads executing in a given contexts have access only
to the memory mapped in this context.

This patch is has two main files:
  - ivpu_mmu_context.c handles MMU page tables and memory mapping
  - ivpu_mmu.c implements a driver that programs the MMU device

Co-developed-by: Karol Wachowski <karol.wachowski@linux.intel.com>
Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com>
Co-developed-by: Krystian Pradzynski <krystian.pradzynski@linux.intel.com>
Signed-off-by: Krystian Pradzynski <krystian.pradzynski@linux.intel.com>
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20230117092723.60441-3-jacek.lawrynowicz@linux.intel.com
drivers/accel/ivpu/Makefile
drivers/accel/ivpu/ivpu_drv.c
drivers/accel/ivpu/ivpu_drv.h
drivers/accel/ivpu/ivpu_hw_mtl.c
drivers/accel/ivpu/ivpu_mmu.c [new file with mode: 0644]
drivers/accel/ivpu/ivpu_mmu.h [new file with mode: 0644]
drivers/accel/ivpu/ivpu_mmu_context.c [new file with mode: 0644]
drivers/accel/ivpu/ivpu_mmu_context.h [new file with mode: 0644]
include/uapi/drm/ivpu_accel.h