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