Re: [PATCH RFC 00/24] Lima DRM driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 18, 2018 at 05:27:51PM +0800, Qiang Yu wrote:
> Kernel DRM driver for ARM Mali 400/450 GPUs.
> 
> This implementation mainly take amdgpu DRM driver as reference.
> 
> - Mali 4xx GPUs have two kinds of processors GP and PP. GP is for
>   OpenGL vertex shader processing and PP is for fragment shader
>   processing. Each processor has its own MMU so prcessors work in
>   virtual address space.
> - There's only one GP but multiple PP (max 4 for mali 400 and 8
>   for mali 450) in the same mali 4xx GPU. All PPs are grouped
>   togather to handle a single fragment shader task divided by
>   FB output tiled pixels. Mali 400 user space driver is
>   responsible for assign target tiled pixels to each PP, but mali
>   450 has a HW module called DLBU to dynamically balance each
>   PP's load.
> - User space driver allocate buffer object and map into GPU
>   virtual address space, upload command stream and draw data with
>   CPU mmap of the buffer object, then submit task to GP/PP with
>   a register frame indicating where is the command stream and misc
>   settings.
> - There's no command stream validation/relocation due to each user
>   process has its own GPU virtual address space. GP/PP's MMU switch
>   virtual address space before running two tasks from different
>   user process. Error or evil user space code just get MMU fault
>   or GP/PP error IRQ, then the HW/SW will be recovered.
> - Use TTM as MM. TTM_PL_TT type memory is used as the content of
>   lima buffer object which is allocated from TTM page pool. all
>   lima buffer object gets pinned with TTM_PL_FLAG_NO_EVICT when
>   allocation, so there's no buffer eviction and swap for now. We
>   need reverse engineering to see if and how GP/PP support MMU
>   fault recovery (continue execution). Otherwise we have to
>   pin/unpin each envolved buffer when task creation/deletion.

Curios question, but why? The one thing that ttm does help you with is
keeping track of buffer moves from/to discrete memory. You get that
benefit at the cost of a nice midlayer which tends to get in the way. If
all you do is map buffers into pagetables, then rolling your own (like
e.g. etnaviv does) is I think much better: All the other ttm functionality
(reservatsions, drm_mm allocation management, fences) has all been
extracted and is available to any driver without ttm.
-Daniel

> - Use drm_sched for GPU task schedule. Each OpenGL context should
>   have a lima context object in the kernel to distinguish tasks
>   from different user. drm_sched gets task from each lima context
>   in a fair way.
> 
> Not implemented:
> - Dump buffer support
> - Power management
> - Performance counter
> 
> This patch serial just pack a pair of .c/.h files in each patch.
> For whole history of this driver's development, see:
> https://github.com/yuq/linux-lima/commits/lima-4.17-rc4
> 
> Mesa driver is still in development and not ready for daily usage,
> but can run some simple tests like kmscube and glamrk2, see:
> https://github.com/yuq/mesa-lima
> 
> Andrei Paulau (1):
>   arm64/dts: add switch-delay for meson mali
> 
> Lima Project Developers (10):
>   drm/lima: add mali 4xx GPU hardware regs
>   drm/lima: add lima core driver
>   drm/lima: add GPU device functions
>   drm/lima: add PMU related functions
>   drm/lima: add PP related functions
>   drm/lima: add MMU related functions
>   drm/lima: add GPU virtual memory space handing
>   drm/lima: add GEM related functions
>   drm/lima: add GEM Prime related functions
>   drm/lima: add makefile and kconfig
> 
> Qiang Yu (12):
>   dt-bindings: add switch-delay property for mali-utgard
>   arm64/dts: add switch-delay for meson mali
>   Revert "drm: Nerf the preclose callback for modern drivers"
>   drm/lima: add lima uapi header
>   drm/lima: add L2 cache functions
>   drm/lima: add GP related functions
>   drm/lima: add BCAST related function
>   drm/lima: add DLBU related functions
>   drm/lima: add TTM subsystem functions
>   drm/lima: add buffer object functions
>   drm/lima: add GPU schedule using DRM_SCHED
>   drm/lima: add context related functions
> 
> Simon Shields (1):
>   ARM: dts: add gpu node to exynos4
> 
>  .../bindings/gpu/arm,mali-utgard.txt          |   4 +
>  arch/arm/boot/dts/exynos4.dtsi                |  33 ++
>  arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi   |   1 +
>  .../boot/dts/amlogic/meson-gxl-mali.dtsi      |   1 +
>  drivers/gpu/drm/Kconfig                       |   2 +
>  drivers/gpu/drm/Makefile                      |   1 +
>  drivers/gpu/drm/drm_file.c                    |   8 +-
>  drivers/gpu/drm/lima/Kconfig                  |   9 +
>  drivers/gpu/drm/lima/Makefile                 |  19 +
>  drivers/gpu/drm/lima/lima_bcast.c             |  65 +++
>  drivers/gpu/drm/lima/lima_bcast.h             |  34 ++
>  drivers/gpu/drm/lima/lima_ctx.c               | 143 +++++
>  drivers/gpu/drm/lima/lima_ctx.h               |  51 ++
>  drivers/gpu/drm/lima/lima_device.c            | 407 ++++++++++++++
>  drivers/gpu/drm/lima/lima_device.h            | 136 +++++
>  drivers/gpu/drm/lima/lima_dlbu.c              |  75 +++
>  drivers/gpu/drm/lima/lima_dlbu.h              |  37 ++
>  drivers/gpu/drm/lima/lima_drv.c               | 466 ++++++++++++++++
>  drivers/gpu/drm/lima/lima_drv.h               |  77 +++
>  drivers/gpu/drm/lima/lima_gem.c               | 459 ++++++++++++++++
>  drivers/gpu/drm/lima/lima_gem.h               |  41 ++
>  drivers/gpu/drm/lima/lima_gem_prime.c         |  66 +++
>  drivers/gpu/drm/lima/lima_gem_prime.h         |  31 ++
>  drivers/gpu/drm/lima/lima_gp.c                | 293 +++++++++++
>  drivers/gpu/drm/lima/lima_gp.h                |  34 ++
>  drivers/gpu/drm/lima/lima_l2_cache.c          |  98 ++++
>  drivers/gpu/drm/lima/lima_l2_cache.h          |  32 ++
>  drivers/gpu/drm/lima/lima_mmu.c               | 154 ++++++
>  drivers/gpu/drm/lima/lima_mmu.h               |  34 ++
>  drivers/gpu/drm/lima/lima_object.c            | 120 +++++
>  drivers/gpu/drm/lima/lima_object.h            |  87 +++
>  drivers/gpu/drm/lima/lima_pmu.c               |  85 +++
>  drivers/gpu/drm/lima/lima_pmu.h               |  30 ++
>  drivers/gpu/drm/lima/lima_pp.c                | 418 +++++++++++++++
>  drivers/gpu/drm/lima/lima_pp.h                |  37 ++
>  drivers/gpu/drm/lima/lima_regs.h              | 304 +++++++++++
>  drivers/gpu/drm/lima/lima_sched.c             | 497 ++++++++++++++++++
>  drivers/gpu/drm/lima/lima_sched.h             | 126 +++++
>  drivers/gpu/drm/lima/lima_ttm.c               | 409 ++++++++++++++
>  drivers/gpu/drm/lima/lima_ttm.h               |  44 ++
>  drivers/gpu/drm/lima/lima_vm.c                | 312 +++++++++++
>  drivers/gpu/drm/lima/lima_vm.h                |  73 +++
>  include/drm/drm_drv.h                         |  23 +-
>  include/uapi/drm/lima_drm.h                   | 195 +++++++
>  44 files changed, 5565 insertions(+), 6 deletions(-)
>  create mode 100644 drivers/gpu/drm/lima/Kconfig
>  create mode 100644 drivers/gpu/drm/lima/Makefile
>  create mode 100644 drivers/gpu/drm/lima/lima_bcast.c
>  create mode 100644 drivers/gpu/drm/lima/lima_bcast.h
>  create mode 100644 drivers/gpu/drm/lima/lima_ctx.c
>  create mode 100644 drivers/gpu/drm/lima/lima_ctx.h
>  create mode 100644 drivers/gpu/drm/lima/lima_device.c
>  create mode 100644 drivers/gpu/drm/lima/lima_device.h
>  create mode 100644 drivers/gpu/drm/lima/lima_dlbu.c
>  create mode 100644 drivers/gpu/drm/lima/lima_dlbu.h
>  create mode 100644 drivers/gpu/drm/lima/lima_drv.c
>  create mode 100644 drivers/gpu/drm/lima/lima_drv.h
>  create mode 100644 drivers/gpu/drm/lima/lima_gem.c
>  create mode 100644 drivers/gpu/drm/lima/lima_gem.h
>  create mode 100644 drivers/gpu/drm/lima/lima_gem_prime.c
>  create mode 100644 drivers/gpu/drm/lima/lima_gem_prime.h
>  create mode 100644 drivers/gpu/drm/lima/lima_gp.c
>  create mode 100644 drivers/gpu/drm/lima/lima_gp.h
>  create mode 100644 drivers/gpu/drm/lima/lima_l2_cache.c
>  create mode 100644 drivers/gpu/drm/lima/lima_l2_cache.h
>  create mode 100644 drivers/gpu/drm/lima/lima_mmu.c
>  create mode 100644 drivers/gpu/drm/lima/lima_mmu.h
>  create mode 100644 drivers/gpu/drm/lima/lima_object.c
>  create mode 100644 drivers/gpu/drm/lima/lima_object.h
>  create mode 100644 drivers/gpu/drm/lima/lima_pmu.c
>  create mode 100644 drivers/gpu/drm/lima/lima_pmu.h
>  create mode 100644 drivers/gpu/drm/lima/lima_pp.c
>  create mode 100644 drivers/gpu/drm/lima/lima_pp.h
>  create mode 100644 drivers/gpu/drm/lima/lima_regs.h
>  create mode 100644 drivers/gpu/drm/lima/lima_sched.c
>  create mode 100644 drivers/gpu/drm/lima/lima_sched.h
>  create mode 100644 drivers/gpu/drm/lima/lima_ttm.c
>  create mode 100644 drivers/gpu/drm/lima/lima_ttm.h
>  create mode 100644 drivers/gpu/drm/lima/lima_vm.c
>  create mode 100644 drivers/gpu/drm/lima/lima_vm.h
>  create mode 100644 include/uapi/drm/lima_drm.h
> 
> -- 
> 2.17.0
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux