Den 28.08.2017 23.58, skrev Daniel Vetter:
Hi Noralf,
On Mon, Aug 28, 2017 at 07:17:42PM +0200, Noralf Trønnes wrote:
This adds device unplug support to drm_fb_helper, drm_fb_cma_helper (fbdev) and tinydrm.
My motivation for doing this is to make tinydrm useable with USB devices. This discussion gave insight into the problem: [PATCH v5 2/6] drm/bridge: Add a devm_ allocator for panel bridge. https://lists.freedesktop.org/archives/dri-devel/2017-August/149376.html
Looks a lot less scary than I thought, but I think needs a bit more polish.
I'm glad you made me look closer at unregister_framebuffer(), since it did handle this quite good. I was fooled by the 2 usb fbdev drivers that forked out unregistering to a worker.
I think it'd be also great if you could co-evolve the udl driver to get this right, since it looks like right now it'll just oops when you unplug when userspace is using the fbdev emulation. That way we'd be at least somewhat consistent with unpluggable drivers, and since it's only 1 other it should be doable. Unplugging is already hard, having 2 drivers do stuff differently (when we only have 2 with unplug support) pretty much guarnatees we'll never get this right.
I turns out that udl by default doesn't use fbdev mmap deferred io, because it interferes with shmem's use of page->lru. This means that no one uses it and since fbcon detaches itself on unregister_framebuffer(), udl is in the clear with regards to fbdev.
In my shmem gem library I'll work around the page->lru issue by using a shadow fbdev buffer. Since the library will have code from udl, I reckon that udl can switch to using it.
Noralf.
But maybe good to first develop this using your own driver only.
Cheers, Daniel
Noralf.
Noralf Trønnes (6): drm/fb-helper: Avoid NULL ptr dereference in fb_set_suspend() drm/fb-helper: Support device unplug drm/fb-cma-helper: Support device unplug drm/tinydrm: Embed drm_device in tinydrm_device drm/tinydrm/mi0283qt: Let the display pipe handle power drm/tinydrm: Support device unplug
drivers/gpu/drm/drm_fb_cma_helper.c | 139 +++++++++---------- drivers/gpu/drm/drm_fb_helper.c | 207 +++++++++++++++++++++++++++- drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 109 ++++++++++----- drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 2 +- drivers/gpu/drm/tinydrm/mi0283qt.c | 77 +++-------- drivers/gpu/drm/tinydrm/mipi-dbi.c | 27 ++-- drivers/gpu/drm/tinydrm/repaper.c | 19 ++- drivers/gpu/drm/tinydrm/st7586.c | 25 ++-- include/drm/drm_fb_cma_helper.h | 1 + include/drm/drm_fb_helper.h | 35 +++++ include/drm/tinydrm/tinydrm.h | 14 +- 11 files changed, 460 insertions(+), 195 deletions(-)
-- 2.7.4