Re: [PATCH v5 00/17] Imagination Technologies PowerVR DRM driver
From: Masahiro Yamada
Date: Wed Aug 23 2023 - 18:32:49 EST
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