On Thu, Feb 7, 2019 at 5:39 PM Christian König <ckoenig.leichtzumerken@xxxxxxxxx> 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 > >> > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel