Initializing and registering fbdev requires at least one DRM connector and will fail otherwise. In order to support headless setups (for instance for GPU rendering with the GBM backend, where a DRI card node is required to provide GEM memory reservation), add a check on the number of registered connectors before initializing fbdev.
Signed-off-by: Paul Kocialkowski contact@paulk.fr --- drivers/gpu/drm/sun4i/sun4i_framebuffer.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c index 5f29850ef8ac..19a265e4a93a 100644 --- a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c +++ b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c @@ -49,6 +49,8 @@ static struct drm_mode_config_helper_funcs sun4i_de_mode_config_helpers = {
int sun4i_framebuffer_init(struct drm_device *drm) { + int ret; + drm_mode_config_reset(drm);
drm->mode_config.max_width = 8192; @@ -57,7 +59,13 @@ int sun4i_framebuffer_init(struct drm_device *drm) drm->mode_config.funcs = &sun4i_de_mode_config_funcs; drm->mode_config.helper_private = &sun4i_de_mode_config_helpers;
- return drm_fb_cma_fbdev_init(drm, 32, 0); + if (drm->mode_config.num_connector > 0) { + ret = drm_fb_cma_fbdev_init(drm, 32, 0); + if (ret) + return ret; + } + + return 0; }
void sun4i_framebuffer_free(struct drm_device *drm)
On Tue, Aug 07, 2018 at 09:39:19PM +0200, Paul Kocialkowski wrote:
sun4i is a pure kms driver, why exactly do you need it for gbm backed rendering? What exactly is rendering here, and why does it insist on a display card node, even if that display card node is 100% defunct? -Daniel
Hi,
Le mardi 07 août 2018 à 22:18 +0200, Daniel Vetter a écrit :
The non-free Mali blobs provide GPU support with a GBM interface that takes a DRM fd in order to reserve the memory it needs for its rendering targets. This uses the GEM interface available through the DRI card node (and there is no render node with the non-free Mali driver). Allwinner has a minimalistic out-of-tree driver pretty much only for this purpose.
I crafted this patch when someone on IRC tried to get the out-of-tree Mali GPU driver going with the mainline kernel in order to do rendering in a GBM buffer, since it's apparently the only option for headless rendering with the blob.
In my opinion, supporting the pipeline of an out-of-tree GPU driver that only works with a non-free userspace blob is not a valid reason to do anything. Still, it felt like adding support for the headless use-case wouldn't hurt, whatever the underlying use case for it may be. I found that other drivers also implement the same mechanism (perhaps for different reasons).
Cheers,
Paul
On Tue, Aug 07, 2018 at 10:31:30PM +0200, Paul Kocialkowski wrote:
If you start considering the DMA constraints and the API in itself, it does hurt. You'll get buffers that are not meant for the GPU, and might not be accessible, and from another device without using dma-buf, which again works because the hardware is dumb enough, but is breaking a lot of expectations in the process.
If one wants to do headless rendering, mali-drm or lima looks like a better solution.
Maxime
Hi,
On Mon, 2018-08-20 at 11:56 +0200, Maxime Ripard wrote:
You're right, this is too much abuse. I'm dropping this patch then.
Cheers,
Paul
dri-devel@lists.freedesktop.org