On Fri, Aug 18, 2023 at 4:35 AM Sarah Walker <sarah.walker@xxxxxxxxxx> wrote: > > This patch series adds the initial DRM driver for Imagination Technologies PowerVR > GPUs, starting with those based on our Rogue architecture. It's worth pointing > out that this is a new driver, written from the ground up, rather than a > refactored version of our existing downstream driver (pvrsrvkm). > > This new DRM driver supports: > - GEM shmem allocations > - dma-buf / PRIME > - Per-context userspace managed virtual address space > - DRM sync objects (binary and timeline) > - Power management suspend / resume > - GPU job submission (geometry, fragment, compute, transfer) > - META firmware processor > - MIPS firmware processor > - GPU hang detection and recovery > > Currently our main focus is on the AXE-1-16M GPU. Testing so far has been done > using a TI SK-AM62 board (AXE-1-16M GPU). Firmware for the AXE-1-16M can be > found here: > https://gitlab.freedesktop.org/frankbinns/linux-firmware/-/tree/powervr > > A Vulkan driver that works with our downstream kernel driver has already been > merged into Mesa [1][2]. Support for this new DRM driver is being maintained in > a merge request [3], with the branch located here: > https://gitlab.freedesktop.org/frankbinns/mesa/-/tree/powervr-winsys > > Job stream formats are documented at: > https://gitlab.freedesktop.org/mesa/mesa/-/blob/f8d2b42ae65c2f16f36a43e0ae39d288431e4263/src/imagination/csbgen/rogue_kmd_stream.xml > > The Vulkan driver is progressing towards Vulkan 1.0. We're code complete, and > are working towards passing conformance. The current combination of this kernel > driver with the Mesa Vulkan driver (powervr-mesa-next branch) achieves 88.3% conformance. > > The code in this patch series, along with some of its history, can also be found here: > https://gitlab.freedesktop.org/frankbinns/powervr/-/tree/powervr-next > > This patch series has dependencies on a number of patches not yet merged. They > are listed below : > > drm/sched: Convert drm scheduler to use a work queue rather than kthread: > https://lore.kernel.org/dri-devel/20230404002211.3611376-2-matthew.brost@xxxxxxxxx/ > drm/sched: Move schedule policy to scheduler / entity: > https://lore.kernel.org/dri-devel/20230404002211.3611376-3-matthew.brost@xxxxxxxxx/ > drm/sched: Add DRM_SCHED_POLICY_SINGLE_ENTITY scheduling policy: > https://lore.kernel.org/dri-devel/20230404002211.3611376-4-matthew.brost@xxxxxxxxx/ > drm/sched: Start run wq before TDR in drm_sched_start: > https://lore.kernel.org/dri-devel/20230404002211.3611376-6-matthew.brost@xxxxxxxxx/ > drm/sched: Submit job before starting TDR: > https://lore.kernel.org/dri-devel/20230404002211.3611376-7-matthew.brost@xxxxxxxxx/ > drm/sched: Add helper to set TDR timeout: > https://lore.kernel.org/dri-devel/20230404002211.3611376-8-matthew.brost@xxxxxxxxx/ > > [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15243 > [2] https://gitlab.freedesktop.org/mesa/mesa/-/tree/main/src/imagination/vulkan > [3] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15507 > > High level summary of changes: > > v5: > * Retrieve GPU device information from firmware image header > * Address issues with DT binding and example DTS > * Update VM code for upstream GPU VA manager > * BOs are always zeroed on allocation > * Update copyright > > v4: > * Implemented hang recovery via firmware hard reset > * Add support for partial render jobs > * Move to a threaded IRQ > * Remove unnecessary read/write and clock helpers > * Remove device tree elements not relevant to AXE-1-16M > * Clean up resource acquisition > * Remove unused DT binding attributes > > v3: > * Use drm_sched for scheduling > * Use GPU VA manager > * Use runtime PM > * Use drm_gem_shmem > * GPU watchdog and device loss handling > * DT binding changes: remove unused attributes, add additionProperties:false > > v2: > * Redesigned and simplified UAPI based on RFC feedback from XDC 2022 > * Support for transfer and partial render jobs > * Support for timeline sync objects > > RFC v1: https://lore.kernel.org/dri-devel/20220815165156.118212-1-sarah.walker@xxxxxxxxxx/ > > RFC v2: https://lore.kernel.org/dri-devel/20230413103419.293493-1-sarah.walker@xxxxxxxxxx/ > > v3: https://lore.kernel.org/dri-devel/20230613144800.52657-1-sarah.walker@xxxxxxxxxx/ > > v4: https://lore.kernel.org/dri-devel/20230714142355.111382-1-sarah.walker@xxxxxxxxxx/ > > Matt Coster (1): > sizes.h: Add entries between 32G and 64T > > Sarah Walker (16): > dt-bindings: gpu: Add Imagination Technologies PowerVR GPU > drm/imagination/uapi: Add PowerVR driver UAPI > drm/imagination: Add skeleton PowerVR driver > drm/imagination: Get GPU resources > drm/imagination: Add GPU register and FWIF headers > drm/imagination: Add GPU ID parsing and firmware loading > drm/imagination: Add GEM and VM related code > drm/imagination: Implement power management > drm/imagination: Implement firmware infrastructure and META FW support > drm/imagination: Implement MIPS firmware processor and MMU support > drm/imagination: Implement free list and HWRT create and destroy > ioctls > drm/imagination: Implement context creation/destruction ioctls > drm/imagination: Implement job submission and scheduling > drm/imagination: Add firmware trace to debugfs > drm/imagination: Add driver documentation > arm64: dts: ti: k3-am62-main: Add GPU device node [DO NOT MERGE] I failed to compile this patch set. I applied this series to linux next-20230822 and set CONFIG_DRM_POWERVR=m. I got this error. CC [M] drivers/gpu/drm/imagination/pvr_ccb.o In file included from drivers/gpu/drm/imagination/pvr_ccb.c:4: drivers/gpu/drm/imagination/pvr_ccb.h:7:10: fatal error: pvr_rogue_fwif.h: No such file or directory 7 | #include "pvr_rogue_fwif.h" | ^~~~~~~~~~~~~~~~~~ compilation terminated. Did you forget to do 'git add' or am I missing something? I do not see pvr_rogue_fwif.h in the following diff stat. > .../devicetree/bindings/gpu/img,powervr.yaml | 75 + > Documentation/gpu/drivers.rst | 2 + > Documentation/gpu/imagination/index.rst | 14 + > Documentation/gpu/imagination/uapi.rst | 174 + > .../gpu/imagination/virtual_memory.rst | 462 ++ > MAINTAINERS | 10 + > arch/arm64/boot/dts/ti/k3-am62-main.dtsi | 9 + > drivers/gpu/drm/Kconfig | 2 + > drivers/gpu/drm/Makefile | 1 + > drivers/gpu/drm/imagination/Kconfig | 16 + > drivers/gpu/drm/imagination/Makefile | 35 + > drivers/gpu/drm/imagination/pvr_ccb.c | 641 ++ > drivers/gpu/drm/imagination/pvr_ccb.h | 71 + > drivers/gpu/drm/imagination/pvr_cccb.c | 267 + > drivers/gpu/drm/imagination/pvr_cccb.h | 109 + > drivers/gpu/drm/imagination/pvr_context.c | 460 ++ > drivers/gpu/drm/imagination/pvr_context.h | 205 + > drivers/gpu/drm/imagination/pvr_debugfs.c | 53 + > drivers/gpu/drm/imagination/pvr_debugfs.h | 29 + > drivers/gpu/drm/imagination/pvr_device.c | 651 ++ > drivers/gpu/drm/imagination/pvr_device.h | 704 ++ > drivers/gpu/drm/imagination/pvr_device_info.c | 253 + > drivers/gpu/drm/imagination/pvr_device_info.h | 185 + > drivers/gpu/drm/imagination/pvr_drv.c | 1515 ++++ > drivers/gpu/drm/imagination/pvr_drv.h | 129 + > drivers/gpu/drm/imagination/pvr_free_list.c | 625 ++ > drivers/gpu/drm/imagination/pvr_free_list.h | 195 + > drivers/gpu/drm/imagination/pvr_fw.c | 1470 ++++ > drivers/gpu/drm/imagination/pvr_fw.h | 508 ++ > drivers/gpu/drm/imagination/pvr_fw_info.h | 135 + > drivers/gpu/drm/imagination/pvr_fw_meta.c | 554 ++ > drivers/gpu/drm/imagination/pvr_fw_meta.h | 14 + > drivers/gpu/drm/imagination/pvr_fw_mips.c | 250 + > drivers/gpu/drm/imagination/pvr_fw_mips.h | 38 + > .../gpu/drm/imagination/pvr_fw_startstop.c | 301 + > .../gpu/drm/imagination/pvr_fw_startstop.h | 13 + > drivers/gpu/drm/imagination/pvr_fw_trace.c | 515 ++ > drivers/gpu/drm/imagination/pvr_fw_trace.h | 78 + > drivers/gpu/drm/imagination/pvr_gem.c | 396 ++ > drivers/gpu/drm/imagination/pvr_gem.h | 184 + > drivers/gpu/drm/imagination/pvr_hwrt.c | 549 ++ > drivers/gpu/drm/imagination/pvr_hwrt.h | 165 + > drivers/gpu/drm/imagination/pvr_job.c | 770 ++ > drivers/gpu/drm/imagination/pvr_job.h | 161 + > drivers/gpu/drm/imagination/pvr_mmu.c | 2523 +++++++ > drivers/gpu/drm/imagination/pvr_mmu.h | 108 + > drivers/gpu/drm/imagination/pvr_params.c | 147 + > drivers/gpu/drm/imagination/pvr_params.h | 72 + > drivers/gpu/drm/imagination/pvr_power.c | 421 ++ > drivers/gpu/drm/imagination/pvr_power.h | 39 + > drivers/gpu/drm/imagination/pvr_queue.c | 1455 ++++ > drivers/gpu/drm/imagination/pvr_queue.h | 179 + > .../gpu/drm/imagination/pvr_rogue_cr_defs.h | 6193 +++++++++++++++++ > .../imagination/pvr_rogue_cr_defs_client.h | 159 + > drivers/gpu/drm/imagination/pvr_rogue_defs.h | 179 + > drivers/gpu/drm/imagination/pvr_rogue_fwif.h | 2208 ++++++ > .../drm/imagination/pvr_rogue_fwif_check.h | 491 ++ > .../drm/imagination/pvr_rogue_fwif_client.h | 371 + > .../imagination/pvr_rogue_fwif_client_check.h | 133 + > .../drm/imagination/pvr_rogue_fwif_common.h | 60 + > .../drm/imagination/pvr_rogue_fwif_dev_info.h | 112 + > .../pvr_rogue_fwif_resetframework.h | 28 + > .../gpu/drm/imagination/pvr_rogue_fwif_sf.h | 1648 +++++ > .../drm/imagination/pvr_rogue_fwif_shared.h | 258 + > .../imagination/pvr_rogue_fwif_shared_check.h | 108 + > .../drm/imagination/pvr_rogue_fwif_stream.h | 78 + > .../drm/imagination/pvr_rogue_heap_config.h | 113 + > drivers/gpu/drm/imagination/pvr_rogue_meta.h | 356 + > drivers/gpu/drm/imagination/pvr_rogue_mips.h | 335 + > .../drm/imagination/pvr_rogue_mips_check.h | 58 + > .../gpu/drm/imagination/pvr_rogue_mmu_defs.h | 136 + > drivers/gpu/drm/imagination/pvr_stream.c | 285 + > drivers/gpu/drm/imagination/pvr_stream.h | 75 + > drivers/gpu/drm/imagination/pvr_stream_defs.c | 351 + > drivers/gpu/drm/imagination/pvr_stream_defs.h | 16 + > drivers/gpu/drm/imagination/pvr_sync.c | 287 + > drivers/gpu/drm/imagination/pvr_sync.h | 84 + > drivers/gpu/drm/imagination/pvr_vm.c | 906 +++ > drivers/gpu/drm/imagination/pvr_vm.h | 60 + > drivers/gpu/drm/imagination/pvr_vm_mips.c | 208 + > drivers/gpu/drm/imagination/pvr_vm_mips.h | 22 + > include/linux/sizes.h | 9 + > include/uapi/drm/pvr_drm.h | 1303 ++++ > 83 files changed, 34567 insertions(+) > create mode 100644 Documentation/devicetree/bindings/gpu/img,powervr.yaml > create mode 100644 Documentation/gpu/imagination/index.rst > create mode 100644 Documentation/gpu/imagination/uapi.rst > create mode 100644 Documentation/gpu/imagination/virtual_memory.rst > create mode 100644 drivers/gpu/drm/imagination/Kconfig > create mode 100644 drivers/gpu/drm/imagination/Makefile > create mode 100644 drivers/gpu/drm/imagination/pvr_ccb.c > create mode 100644 drivers/gpu/drm/imagination/pvr_ccb.h > create mode 100644 drivers/gpu/drm/imagination/pvr_cccb.c > create mode 100644 drivers/gpu/drm/imagination/pvr_cccb.h > create mode 100644 drivers/gpu/drm/imagination/pvr_context.c > create mode 100644 drivers/gpu/drm/imagination/pvr_context.h > create mode 100644 drivers/gpu/drm/imagination/pvr_debugfs.c > create mode 100644 drivers/gpu/drm/imagination/pvr_debugfs.h > create mode 100644 drivers/gpu/drm/imagination/pvr_device.c > create mode 100644 drivers/gpu/drm/imagination/pvr_device.h > create mode 100644 drivers/gpu/drm/imagination/pvr_device_info.c > create mode 100644 drivers/gpu/drm/imagination/pvr_device_info.h > create mode 100644 drivers/gpu/drm/imagination/pvr_drv.c > create mode 100644 drivers/gpu/drm/imagination/pvr_drv.h > create mode 100644 drivers/gpu/drm/imagination/pvr_free_list.c > create mode 100644 drivers/gpu/drm/imagination/pvr_free_list.h > create mode 100644 drivers/gpu/drm/imagination/pvr_fw.c > create mode 100644 drivers/gpu/drm/imagination/pvr_fw.h > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_info.h > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_meta.c > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_meta.h > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_mips.c > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_mips.h > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_startstop.c > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_startstop.h > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_trace.c > create mode 100644 drivers/gpu/drm/imagination/pvr_fw_trace.h > create mode 100644 drivers/gpu/drm/imagination/pvr_gem.c > create mode 100644 drivers/gpu/drm/imagination/pvr_gem.h > create mode 100644 drivers/gpu/drm/imagination/pvr_hwrt.c > create mode 100644 drivers/gpu/drm/imagination/pvr_hwrt.h > create mode 100644 drivers/gpu/drm/imagination/pvr_job.c > create mode 100644 drivers/gpu/drm/imagination/pvr_job.h > create mode 100644 drivers/gpu/drm/imagination/pvr_mmu.c > create mode 100644 drivers/gpu/drm/imagination/pvr_mmu.h > create mode 100644 drivers/gpu/drm/imagination/pvr_params.c > create mode 100644 drivers/gpu/drm/imagination/pvr_params.h > create mode 100644 drivers/gpu/drm/imagination/pvr_power.c > create mode 100644 drivers/gpu/drm/imagination/pvr_power.h > create mode 100644 drivers/gpu/drm/imagination/pvr_queue.c > create mode 100644 drivers/gpu/drm/imagination/pvr_queue.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_cr_defs.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_cr_defs_client.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_defs.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_check.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_client.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_client_check.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_common.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_dev_info.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_resetframework.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_sf.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_shared.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_shared_check.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_fwif_stream.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_heap_config.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_meta.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_mips.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_mips_check.h > create mode 100644 drivers/gpu/drm/imagination/pvr_rogue_mmu_defs.h > create mode 100644 drivers/gpu/drm/imagination/pvr_stream.c > create mode 100644 drivers/gpu/drm/imagination/pvr_stream.h > create mode 100644 drivers/gpu/drm/imagination/pvr_stream_defs.c > create mode 100644 drivers/gpu/drm/imagination/pvr_stream_defs.h > create mode 100644 drivers/gpu/drm/imagination/pvr_sync.c > create mode 100644 drivers/gpu/drm/imagination/pvr_sync.h > create mode 100644 drivers/gpu/drm/imagination/pvr_vm.c > create mode 100644 drivers/gpu/drm/imagination/pvr_vm.h > create mode 100644 drivers/gpu/drm/imagination/pvr_vm_mips.c > create mode 100644 drivers/gpu/drm/imagination/pvr_vm_mips.h > create mode 100644 include/uapi/drm/pvr_drm.h > > -- > 2.41.0 > -- Best Regards Masahiro Yamada