Den 30.07.2016 17:48, skrev Noralf Trønnes:
Den 29.07.2016 10:23, skrev Daniel Vetter:
Actually adding David. -Daniel
On Fri, Jul 29, 2016 at 10:20:51AM +0200, Daniel Vetter wrote:
On Thu, Jul 28, 2016 at 04:15:04PM +0200, Noralf Trønnes wrote:
This patchset explores the idea of adding a DRM text mode (like VGA text mode) to get an alternative to fbcon/fbdev.
David Hermann has done alot of work on a fbcon replacement:
- drm: add kernel-log renderer (Mar 2014)[1]
- kmscon: development started Nov 2011 added to systemd Oct 2014 removed from systemd Jul 2015[2]
Since this work seems to have stalled, I propose an alternative solution to this problem that will also give VT console support while we're waiting for a userspace console.
The idea is that the driver provides a modeset like with the fbdev emulation code, and from this a text buffer representation is made. The console code can now write to this text buffer and ask for the text buffer to be flushed/rendered to the pixel buffer.
In this hack/implementation of the idea, I have just hijacked a CMA backed fbdev framebuffer to keep it simple. I have reused the default buffer format that VT uses. Getting panic handling to actually work, seems to be a challenge as Daniel describes on the DRMJanitors page[3].
Is this idea of a DRM text mode worth developing further?
I guess some simpler drm console with vt support which would allow us to get rid of fbdev could make sense. And there's definitely going to be a lot of overlap with a full userspace solution using something like kmscon.
But we can't just add a new drm text console, there's a pile of prep work needed that David started for either approach:
- Nuking fbdev means no more fbdev drivers for firmware consoles
(uboot, uefi, vga, ...). The simpledrm driver would cover this, would be great to get that landed (especially now that we have the simple pipe helpers!).
I have rebased simpledrm on drm_simple_display_pipe and have it working on a Raspberry Pi. modetest gives me a wrong picture, but that is probably because of some wrong format conversion since fbdev using the native rgb565 format works fine.
I could finish this up and send a patch unless David is working on something?
I have used this version of simpledrm: [PATCH 09/11] drm: add SimpleDRM driver https://lists.freedesktop.org/archives/dri-devel/2014-January/052594.html
I have solved the format conversion problem.
Is there any reason why simpledrm can't use drm_gem_cma_helper? This is how it allocates memory:
int sdrm_gem_get_pages(struct sdrm_gem_object *obj) { [...] num = obj->base.size >> PAGE_SHIFT; obj->pages = drm_malloc_ab(num, sizeof(*obj->pages)); [...] for (i = 0; i < num; ++i) { obj->pages[i] = alloc_page(GFP_KERNEL | __GFP_ZERO); [...] obj->vmapping = vmap(obj->pages, num, 0, PAGE_KERNEL); [...] }
The simpledrm driver has this set_config:
static int sdrm_crtc_set_config(struct drm_mode_set *set) { struct drm_device *ddev; struct sdrm_device *sdrm; struct sdrm_framebuffer *fb; [...] ddev = set->crtc->dev; sdrm = ddev->dev_private; [...] fb = to_sdrm_fb(set->fb); [...] if (set->mode->hdisplay != sdrm->fb_width || set->mode->vdisplay != sdrm->fb_height) return -EINVAL; if (fb->base.width <= set->x || fb->base.height <= set->y || fb->base.width - set->x < sdrm->fb_width || fb->base.height - set->y < sdrm->fb_height) return -EINVAL; [...] }
Do I need to perform any of these checks in the new check function? And if so, how?
static int sdrm_display_pipe_check(struct drm_simple_display_pipe *pipe, struct drm_plane_state *plane_state, struct drm_crtc_state *crtc_state) { struct sdrm_device *sdrm = pipe_to_sdrm(pipe);
return 0; }
Noralf.