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

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

 



On Wed, May 23, 2018 at 5:02 PM, Daniel Vetter <daniel@xxxxxxxx> wrote:
> 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.

Yeah, I can spend more time to write one without that much redundant
functionality of TTM, but as there's one that can be used directly, I give
up. I also see virtio GPU use this way.

If I'm going to write a new one, I also want the ttm_page_alloc.c page
pool. But my interface won't be that generic as TTM.

Regards,
Qiang

> -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
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux