There was a patch submitted by Keith Packard which prevents fbcon from using non-desktop displays, but this breaks vive, and other HMD development/use on embedded and other fbdev systems ( https://patchwork.kernel.org/patch/10053989/ ).

Even if the vive is the only device connected, it will still not permit it to be operated.  See https://github.com/linux-sunxi/linux-sunxi/issues/291 for dri with a lot of debugging turned on.

I can understand that most users would probably prefer that the vive isn't automatically used if no other displays are available, however, the current behavior prevents use of the vive on all devices that use fbdev for their primary output.

This patch allows enabling of non-desktop devices both as a kernel command line as well as by setting /sys/module/drm_kms_helper/parameters/drm_fbdev_permit_non_desktop.

I've never sent an email to the kernel devel list, so I'm still a little nervous.  Especially because this is against a different branch, and I'm starting to think that I should be messaging there, but this is something that really needs to go upstream.

Signed-off-by:

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 035784ddd..8bfaf79ff 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -55,6 +55,11 @@ MODULE_PARM_DESC(drm_fbdev_overalloc,
                 "Overallocation of the fbdev buffer (%) [default="
                 __MODULE_STRING(CONFIG_DRM_FBDEV_OVERALLOC) "]");
 
+static bool drm_fbdev_permit_non_desktop;
+module_param(drm_fbdev_permit_non_desktop, bool, 0644);
+MODULE_PARM_DESC(drm_fbdev_permit_non_desktop,
+               "Allow the framebuffer to use non-desktop displays [default=off]");
+
 static LIST_HEAD(kernel_fb_helper_list);
 static DEFINE_MUTEX(kernel_fb_helper_lock);
 
@@ -2109,7 +2114,7 @@ static bool drm_connector_enabled(struct drm_connector *connector, bool strict)
 {
        bool enable;
 
-       if (connector->display_info.non_desktop)
+       if (connector->display_info.non_desktop && !drm_fbdev_permit_non_desktop)
                return false;
 
        if (strict)