[PATCH v5 00/17] Imagination Technologies PowerVR DRM driver

Masahiro Yamada masahiroy at kernel.org
Wed Aug 23 22:31:21 UTC 2023


On Fri, Aug 18, 2023 at 4:35 AM Sarah Walker <sarah.walker at imgtec.com> 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@intel.com/
> drm/sched: Move schedule policy to scheduler / entity:
>   https://lore.kernel.org/dri-devel/20230404002211.3611376-3-matthew.brost@intel.com/
> drm/sched: Add DRM_SCHED_POLICY_SINGLE_ENTITY scheduling policy:
>   https://lore.kernel.org/dri-devel/20230404002211.3611376-4-matthew.brost@intel.com/
> drm/sched: Start run wq before TDR in drm_sched_start:
>   https://lore.kernel.org/dri-devel/20230404002211.3611376-6-matthew.brost@intel.com/
> drm/sched: Submit job before starting TDR:
>   https://lore.kernel.org/dri-devel/20230404002211.3611376-7-matthew.brost@intel.com/
> drm/sched: Add helper to set TDR timeout:
>   https://lore.kernel.org/dri-devel/20230404002211.3611376-8-matthew.brost@intel.com/
>
> [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@imgtec.com/
>
> RFC v2: https://lore.kernel.org/dri-devel/20230413103419.293493-1-sarah.walker@imgtec.com/
>
> v3: https://lore.kernel.org/dri-devel/20230613144800.52657-1-sarah.walker@imgtec.com/
>
> v4: https://lore.kernel.org/dri-devel/20230714142355.111382-1-sarah.walker@imgtec.com/
>
> 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


More information about the dri-devel mailing list