Re: drm: simpledrm: fbdev emulation error with CONFIG_DRM_SIMPLEDRM enabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Amanoel

Am 25.08.21 um 21:12 schrieb Amanoel Dawod:

No problem, managed to boot directly into a text terminal and grabbed DRM
related dmesg log.
Hopefully it's what you're looking for :)

Find it attached please.

Thanks, this was helpful. The failure is shown at

[    3.263394] [drm:0xffffffffc0303583] bad framebuffer height 2304, should be >= 768 && <= 768

where the FB height is too large. But I'm puzzled why this happens. The only way seems to be tiling, which isn't supported by Linux' simple framebuffers AFAIK. All framebuffers are supposed to be linear.

You said that the resolution is 3840 x 2160, but the attached log says 1024x768. I guess that the former is the monitor's native resolution and the latter is the display mode?

The attached patch adds a few extra lines of debugging output. Could you please apply it, rebuild, and report back with the log.

Best regards
Thomas



--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
From 0558d0df9faac232056e6f55a33d10ca301bf7e8 Mon Sep 17 00:00:00 2001
From: Thomas Zimmermann <tzimmermann@xxxxxxx>
Date: Thu, 26 Aug 2021 20:26:35 +0200
Subject: [PATCH] fb extra output

---
 drivers/gpu/drm/drm_fb_helper.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 3ab078321045..d3e412efbbda 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -1631,9 +1631,14 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
 		sizes.surface_width  = max_t(u32, desired_mode->hdisplay + x, sizes.surface_width);
 		sizes.surface_height = max_t(u32, desired_mode->vdisplay + y, sizes.surface_height);
 
+		DRM_ERROR("x=%d y=%d, desired_mode->hdisplay=%u desired_mode->vdisplay=%u sizes.surface_width=%u sizes.surface_height=%u\n",
+			  x, y, desired_mode->hdisplay, sizes.surface_width, desired_mode->vdisplay + y, sizes.surface_height);
+
 		for (j = 0; j < mode_set->num_connectors; j++) {
 			struct drm_connector *connector = mode_set->connectors[j];
 
+			DRM_ERROR("connector->has_tile=%d\n", (int)connector->has_tile);
+
 			if (connector->has_tile &&
 			    desired_mode->hdisplay == connector->tile_h_size &&
 			    desired_mode->vdisplay == connector->tile_v_size) {
-- 
2.32.0

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux