[PATCH 0/2] Lima DRM driver
Qiang Yu
yuq825 at gmail.com
Thu Feb 7 15:33:56 UTC 2019
On Thu, Feb 7, 2019 at 5:39 PM Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> Am 07.02.19 um 10:09 schrieb Daniel Vetter:
> > On Wed, Feb 06, 2019 at 09:14:55PM +0800, Qiang Yu wrote:
> >> Kernel DRM driver for ARM Mali 400/450 GPUs.
> >>
> >> Since last RFC, all feedback has been addressed. Most Mali DTS
> >> changes are already upstreamed by SoC maintainers. The kernel
> >> driver and user-kernel interface are quite stable for several
> >> months, so I think it's ready to be upstreamed.
> >>
> >> 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.
> > All other render gpu drivers that have unified memory (aka is on the SoC)
> > use GEM directly, with some of the helpers we have. So msm, etnaviv, vc4
> > (and i915 is kinda the same too really). TTM makes sense if you have some
> > discrete memory to manage, but imo not in any other place really.
> >
> > What's the design choice behind this?
>
> Agree that this seems unnecessary complicated.
>
> Additional to that why do you use TTM_PL_FLAG_NO_EVICT? That is a
> serious show stopper and as far as I can of hand see completely unnecessary.
Just for simplification. There's no eviction for unified mem, but swap will be
introduced when this flag is not set. So I have to do vm table clear/restore and
call bo validation which I plan to implement in the future.
Thanks,
Qiang
>
> Christian.
>
> >
> > From an upstream pov having all soc gpu drivers use similar approaches
> > should help with shared infrastructure and stuff like that.
> >
> > Another one: What's the plan with extending this to panfrost? Or are the
> > architectures for command submission totally different, and we'll need
> > separate kernel drivers for utgard/midgard/bifrost?
> >
> > Thanks, 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.
> >>
> >> This patch serial is based on 5.0-rc5 and squash all the commits.
> >> For whole history of this driver's development, see:
> >> https://gitlab.freedesktop.org/lima/linux/commits/lima-5.0-rc5
> >> https://gitlab.freedesktop.org/lima/linux/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, and some
> >> single full screen application like kodi-gbm, see:
> >> https://gitlab.freedesktop.org/lima/mesa
> >>
> >> [rfc]
> >> https://lists.freedesktop.org/archives/dri-devel/2018-May/177314.html
> >>
> >> Lima Project Developers (1):
> >> drm/lima: driver for ARM Mali4xx GPUs
> >>
> >> Qiang Yu (1):
> >> drm/fourcc: add ARM tiled format modifier
> >>
> >> drivers/gpu/drm/Kconfig | 2 +
> >> drivers/gpu/drm/Makefile | 1 +
> >> drivers/gpu/drm/lima/Kconfig | 10 +
> >> drivers/gpu/drm/lima/Makefile | 22 ++
> >> drivers/gpu/drm/lima/lima_bcast.c | 46 +++
> >> drivers/gpu/drm/lima/lima_bcast.h | 14 +
> >> drivers/gpu/drm/lima/lima_ctx.c | 124 +++++++
> >> drivers/gpu/drm/lima/lima_ctx.h | 33 ++
> >> drivers/gpu/drm/lima/lima_device.c | 384 ++++++++++++++++++++
> >> drivers/gpu/drm/lima/lima_device.h | 116 ++++++
> >> drivers/gpu/drm/lima/lima_dlbu.c | 56 +++
> >> drivers/gpu/drm/lima/lima_dlbu.h | 18 +
> >> drivers/gpu/drm/lima/lima_drv.c | 459 ++++++++++++++++++++++++
> >> drivers/gpu/drm/lima/lima_drv.h | 59 ++++
> >> drivers/gpu/drm/lima/lima_gem.c | 485 +++++++++++++++++++++++++
> >> drivers/gpu/drm/lima/lima_gem.h | 25 ++
> >> drivers/gpu/drm/lima/lima_gem_prime.c | 144 ++++++++
> >> drivers/gpu/drm/lima/lima_gem_prime.h | 18 +
> >> drivers/gpu/drm/lima/lima_gp.c | 280 +++++++++++++++
> >> drivers/gpu/drm/lima/lima_gp.h | 16 +
> >> drivers/gpu/drm/lima/lima_l2_cache.c | 79 +++++
> >> drivers/gpu/drm/lima/lima_l2_cache.h | 14 +
> >> drivers/gpu/drm/lima/lima_mmu.c | 135 +++++++
> >> drivers/gpu/drm/lima/lima_mmu.h | 16 +
> >> drivers/gpu/drm/lima/lima_object.c | 103 ++++++
> >> drivers/gpu/drm/lima/lima_object.h | 72 ++++
> >> drivers/gpu/drm/lima/lima_pmu.c | 61 ++++
> >> drivers/gpu/drm/lima/lima_pmu.h | 12 +
> >> drivers/gpu/drm/lima/lima_pp.c | 419 ++++++++++++++++++++++
> >> drivers/gpu/drm/lima/lima_pp.h | 19 +
> >> drivers/gpu/drm/lima/lima_regs.h | 298 ++++++++++++++++
> >> drivers/gpu/drm/lima/lima_sched.c | 486 ++++++++++++++++++++++++++
> >> drivers/gpu/drm/lima/lima_sched.h | 108 ++++++
> >> drivers/gpu/drm/lima/lima_ttm.c | 319 +++++++++++++++++
> >> drivers/gpu/drm/lima/lima_ttm.h | 24 ++
> >> drivers/gpu/drm/lima/lima_vm.c | 354 +++++++++++++++++++
> >> drivers/gpu/drm/lima/lima_vm.h | 59 ++++
> >> include/uapi/drm/drm_fourcc.h | 9 +
> >> include/uapi/drm/lima_drm.h | 193 ++++++++++
> >> 39 files changed, 5092 insertions(+)
> >> 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.1
> >>
>
More information about the dri-devel
mailing list