[PATCH v3 00/14] drm: Add a driver for CSF-based Mali GPUs

Tatsuyuki Ishi ishitatsuyuki at gmail.com
Sun Dec 10 04:58:51 UTC 2023


> On Dec 5, 2023, at 2:32, Boris Brezillon <boris.brezillon at collabora.com> wrote:
> 
> Hello,
> 
> This is the 3rd version of the kernel driver for Mali CSF-based GPUs.
> 
> With all the DRM dependencies being merged (drm-sched single entity and
> drm_gpuvm), I thought now was a good time to post a new version. Note
> that the iommu series we depend on [1] has been merged recently. The
> only remaining dependency that hasn't been merged yet is this rather
> trival drm_gpuvm [2] patch.
> 
> As for v2, I pushed a branch based on drm-misc-next and containing
> all the dependencies that are not yet available in drm-misc-next
> here[3], and another [4] containing extra patches to have things
> working on rk3588. The CSF firmware binary can be found here[5], and
> should be placed under /lib/firmware/arm/mali/arch10.8/mali_csffw.bin.
> 
> The mesa MR adding v10 support on top of panthor is available here [6].
> 
> Regarding the GPL2+MIT relicensing, Liviu did an audit and found two
> more people that I didn't spot initially: Clément Péron for the devfreq
> code, and Alexey Sheplyakov for some bits in panthor_gpu.c. Both are
> Cc-ed on the relevant patches. The rest of the code is either new, or
> covered by the Linaro, Arm and Collabora acks.
> 
> And here is a non-exhaustive changelog, check each commit for a detailed
> changelog.
> 
> v3;
> - Quite a few changes at the MMU/sched level to make the fix some
>  race conditions and deadlocks
> - Addition of the a sync-only VM_BIND operation (to support
>  vkQueueSparseBind with zero commands).

Hi Boris,

Just wanted to point out that vkQueueBindSparse's semantics is rather different
from vkQueueSubmit when it comes to synchronization.  In short,
vkQueueBindSparse does not operate on a particular timeline (aka scheduling
queue / drm_sched_entity).  The property of following a timeline order is known
as “submission order” [1] in Vulkan, and applies to vkQueueSubmit only and not
vkQueueBindSparse.

Hence, an implementation that takes full advantage of Vulkan semantics would
essentially have an infinite amount of VM_BIND contexts.  It would also not need
sync-only VM_BIND submissions, assuming that drmSyncobjTransfer works.

I’m not saying that the driver should always be implemented that way; in
particular, app developers are also confused by the semantics and native Vulkan
games can be terribly wrong [2].  D3D12 has serializing semantics for
UpdateTileMappings, so for D3D12 emulation one timeline is fine also.

Tatsuyuki.

[1]: https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#synchronization-submission-order
[2]: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10234

> - Addition of a VM_GET_STATE ioctl
> - Various cosmetic changes (see the commit changelogs for more details)
> - Various fixes (see the commit changelogs for more details)
> 
> v2:
> - Rename the driver (pancsf -> panthor)
> - Split the commit adding the driver to ease review
> - Use drm_sched for dependency tracking/job submission
> - Add a VM_BIND ioctl
> - Add the concept of exclusive VM for BOs that are only ever mapped to a
>  single VM
> - Document the code and uAPI
> - Add a DT binding doc
> 
> Regards,
> 
> Boris
> 
> [1]https://lore.kernel.org/linux-arm-kernel/20231124142434.1577550-1-boris.brezillon@collabora.com/T/
> [2]https://patchwork.freedesktop.org/patch/570380/
> [3]https://gitlab.freedesktop.org/panfrost/linux/-/tree/panthor-v3
> [4]https://gitlab.freedesktop.org/panfrost/linux/-/tree/panthor-v3+rk3588
> [5]https://gitlab.com/firefly-linux/external/libmali/-/raw/firefly/firmware/g610/mali_csffw.bin
> [6]https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26358
> 
> Boris Brezillon (13):
>  drm/panthor: Add uAPI
>  drm/panthor: Add GPU register definitions
>  drm/panthor: Add the device logical block
>  drm/panthor: Add the GPU logical block
>  drm/panthor: Add GEM logical block
>  drm/panthor: Add the devfreq logical block
>  drm/panthor: Add the MMU/VM logical block
>  drm/panthor: Add the FW logical block
>  drm/panthor: Add the heap logical block
>  drm/panthor: Add the scheduler logical block
>  drm/panthor: Add the driver frontend block
>  drm/panthor: Allow driver compilation
>  drm/panthor: Add an entry to MAINTAINERS
> 
> Liviu Dudau (1):
>  dt-bindings: gpu: mali-valhall-csf: Add support for Arm Mali CSF GPUs
> 
> .../bindings/gpu/arm,mali-valhall-csf.yaml    |  147 +
> Documentation/gpu/driver-uapi.rst             |    5 +
> MAINTAINERS                                   |   11 +
> drivers/gpu/drm/Kconfig                       |    2 +
> drivers/gpu/drm/Makefile                      |    1 +
> drivers/gpu/drm/panthor/Kconfig               |   23 +
> drivers/gpu/drm/panthor/Makefile              |   15 +
> drivers/gpu/drm/panthor/panthor_devfreq.c     |  283 ++
> drivers/gpu/drm/panthor/panthor_devfreq.h     |   25 +
> drivers/gpu/drm/panthor/panthor_device.c      |  497 +++
> drivers/gpu/drm/panthor/panthor_device.h      |  381 ++
> drivers/gpu/drm/panthor/panthor_drv.c         | 1454 +++++++
> drivers/gpu/drm/panthor/panthor_fw.c          | 1332 +++++++
> drivers/gpu/drm/panthor/panthor_fw.h          |  504 +++
> drivers/gpu/drm/panthor/panthor_gem.c         |  227 ++
> drivers/gpu/drm/panthor/panthor_gem.h         |  144 +
> drivers/gpu/drm/panthor/panthor_gpu.c         |  481 +++
> drivers/gpu/drm/panthor/panthor_gpu.h         |   52 +
> drivers/gpu/drm/panthor/panthor_heap.c        |  517 +++
> drivers/gpu/drm/panthor/panthor_heap.h        |   36 +
> drivers/gpu/drm/panthor/panthor_mmu.c         | 2653 +++++++++++++
> drivers/gpu/drm/panthor/panthor_mmu.h         |  101 +
> drivers/gpu/drm/panthor/panthor_regs.h        |  237 ++
> drivers/gpu/drm/panthor/panthor_sched.c       | 3410 +++++++++++++++++
> drivers/gpu/drm/panthor/panthor_sched.h       |   48 +
> include/uapi/drm/panthor_drm.h                |  892 +++++
> 26 files changed, 13478 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/gpu/arm,mali-valhall-csf.yaml
> create mode 100644 drivers/gpu/drm/panthor/Kconfig
> create mode 100644 drivers/gpu/drm/panthor/Makefile
> create mode 100644 drivers/gpu/drm/panthor/panthor_devfreq.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_devfreq.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_device.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_device.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_drv.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_fw.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_fw.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_gem.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_gem.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_gpu.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_gpu.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_heap.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_heap.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_mmu.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_mmu.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_regs.h
> create mode 100644 drivers/gpu/drm/panthor/panthor_sched.c
> create mode 100644 drivers/gpu/drm/panthor/panthor_sched.h
> create mode 100644 include/uapi/drm/panthor_drm.h
> 
> -- 
> 2.43.0
> 
> 



More information about the dri-devel mailing list