I respond in the same time to all bugs probably related to KMS.
Previously grub2 defaulted to start linux in text mode unless VESA
graphics mode was explicitly requested. Recently we changed to
defaulting to generic framebuffer when its support is enabled in linux.
I found 3 problems:
1) At least some KMS modules expect graphics card to be in text mode. It
would be kernel-side problem since on some firmware types this mode
isn't easily or sometimes isn't at all available. On the other hand it's
useful to be able to tell grub2 to start in text mode even if generic
framebuffer is supported by kernel. I added this ability to mainstream
grub. To use it add:
GRUB_GFXPAYLOAD_LINUX=text
to /etc/default/grub
2) generic framebuffer expects size in bytes and not 64KiB blocks. I
fixed it in mainstream
3) intelfb expects handover only from vesa. Attached patch to linux may
help.

None of 3 changes I mentioned is packaged in debian yet.

-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko

diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c
index 5ba3999..de6fda1 100644
--- a/drivers/video/intelfb/intelfbdrv.c
+++ b/drivers/video/intelfb/intelfbdrv.c
@@ -819,7 +819,8 @@ static int __devinit intelfb_pci_register(struct pci_dev *pdev,
 		bailout(dinfo);
 
 	if (FIXED_MODE(dinfo) &&
-	    screen_info.orig_video_isVGA != VIDEO_TYPE_VLFB) {
+	    screen_info.orig_video_isVGA != VIDEO_TYPE_VLFB
+	    && screen_info.orig_video_isVGA != VIDEO_TYPE_EFI) {
 		ERR_MSG("Video mode must be programmed at boot time.\n");
 		cleanup(dinfo);
 		return -ENODEV;
@@ -830,7 +831,8 @@ static int __devinit intelfb_pci_register(struct pci_dev *pdev,
 
 	/* Initialise dinfo and related data. */
 	/* If an initial mode was programmed at boot time, get its details. */
-	if (screen_info.orig_video_isVGA == VIDEO_TYPE_VLFB)
+	if (screen_info.orig_video_isVGA == VIDEO_TYPE_VLFB
+	    || screen_info.orig_video_isVGA == VIDEO_TYPE_EFI)
 		get_initial_mode(dinfo);
 
 	if (bailearly == 3)
@@ -978,7 +980,10 @@ static void __devinit get_initial_mode(struct intelfb_info *dinfo)
 
 	dinfo->initial_vga = 1;
 	dinfo->initial_fb_base = screen_info.lfb_base;
-	dinfo->initial_video_ram = screen_info.lfb_size * KB(64);
+
+	dinfo->initial_video_ram = screen_info.lfb_size;
+	if (screen_info.orig_video_isVGA == VIDEO_TYPE_VLFB)
+	  dinfo->initial_video_ram *= KB(64);
 	dinfo->initial_pitch = screen_info.lfb_linelength;
 
 	var = &dinfo->initial_var;

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to