Hi Greg, Please post-pone this patch until its regression fix for dual-GPU macs can be applied with it. I'm not sure if Bjorn has already queue the fix or not. See https://patchwork.kernel.org/patch/4771201/ Once those can be applied together I will provide back-ports for older longterm trees. Bruno On Tue, 02 Sep 2014 14:57:29 -0700 gregkh@xxxxxxxxxxxxxxxxxxx wrote: > This is a note to let you know that I've just added the patch titled > > x86, ia64: Move EFI_FB vga_default_device() initialization to pci_vga_fixup() > > to the 3.16-stable tree which can be found at: > http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary > > The filename of the patch is: > x86-ia64-move-efi_fb-vga_default_device-initialization-to-pci_vga_fixup.patch > and it can be found in the queue-3.16 subdirectory. > > If you, or anyone else, feels it should not be added to the stable tree, > please let <stable@xxxxxxxxxxxxxxx> know about it. > > > From 20cde694027e7477cc532833e38ab9fcaa83fb64 Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Bruno=20Pr=C3=A9mont?= <bonbons@xxxxxxxxxxxxxxxxx> > Date: Wed, 25 Jun 2014 00:55:01 +0200 > Subject: x86, ia64: Move EFI_FB vga_default_device() initialization to pci_vga_fixup() > MIME-Version: 1.0 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 8bit > > From: =?UTF-8?q?Bruno=20Pr=C3=A9mont?= <bonbons@xxxxxxxxxxxxxxxxx> > > commit 20cde694027e7477cc532833e38ab9fcaa83fb64 upstream. > > Commit b4aa0163056b ("efifb: Implement vga_default_device() (v2)") added > efifb vga_default_device() so EFI systems that do not load shadow VBIOS or > setup VGA get proper value for boot_vga PCI sysfs attribute on the > corresponding PCI device. > > Xorg doesn't detect devices when boot_vga=0, e.g., on some EFI systems such > as MacBookAir2,1. Xorg detects the GPU and finds the DRI device but then > bails out with "no devices detected". > > Note: When vga_default_device() is set boot_vga PCI sysfs attribute > reflects its state. When unset this attribute is 1 whenever > IORESOURCE_ROM_SHADOW flag is set. > > With introduction of sysfb/simplefb/simpledrm efifb is getting obsolete > while having native drivers for the GPU also makes selecting sysfb/efifb > optional. > > Remove the efifb implementation of vga_default_device() and initialize > vgaarb's vga_default_device() with the PCI GPU that matches boot > screen_info in pci_fixup_video(). > > [bhelgaas: remove unused "dev" in efifb_setup()] > Fixes: b4aa0163056b ("efifb: Implement vga_default_device() (v2)") > Tested-by: Anibal Francisco Martinez Cortina <linuxkid.zeuz@xxxxxxxxx> > Signed-off-by: Bruno Prémont <bonbons@xxxxxxxxxxxxxxxxx> > Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > Acked-by: Matthew Garrett <matthew.garrett@xxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > > --- > arch/ia64/pci/fixup.c | 22 ++++++++++++++++++++++ > arch/x86/include/asm/vga.h | 6 ------ > arch/x86/pci/fixup.c | 21 +++++++++++++++++++++ > drivers/video/fbdev/efifb.c | 39 --------------------------------------- > 4 files changed, 43 insertions(+), 45 deletions(-) > > --- a/arch/ia64/pci/fixup.c > +++ b/arch/ia64/pci/fixup.c > @@ -6,6 +6,7 @@ > #include <linux/pci.h> > #include <linux/init.h> > #include <linux/vgaarb.h> > +#include <linux/screen_info.h> > > #include <asm/machvec.h> > > @@ -37,6 +38,27 @@ static void pci_fixup_video(struct pci_d > return; > /* Maybe, this machine supports legacy memory map. */ > > + if (!vga_default_device()) { > + resource_size_t start, end; > + int i; > + > + /* Does firmware framebuffer belong to us? */ > + for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { > + if (!(pci_resource_flags(pdev, i) & IORESOURCE_MEM)) > + continue; > + > + start = pci_resource_start(pdev, i); > + end = pci_resource_end(pdev, i); > + > + if (!start || !end) > + continue; > + > + if (screen_info.lfb_base >= start && > + (screen_info.lfb_base + screen_info.lfb_size) < end) > + vga_set_default_device(pdev); > + } > + } > + > /* Is VGA routed to us? */ > bus = pdev->bus; > while (bus) { > --- a/arch/x86/include/asm/vga.h > +++ b/arch/x86/include/asm/vga.h > @@ -17,10 +17,4 @@ > #define vga_readb(x) (*(x)) > #define vga_writeb(x, y) (*(y) = (x)) > > -#ifdef CONFIG_FB_EFI > -#define __ARCH_HAS_VGA_DEFAULT_DEVICE > -extern struct pci_dev *vga_default_device(void); > -extern void vga_set_default_device(struct pci_dev *pdev); > -#endif > - > #endif /* _ASM_X86_VGA_H */ > --- a/arch/x86/pci/fixup.c > +++ b/arch/x86/pci/fixup.c > @@ -326,6 +326,27 @@ static void pci_fixup_video(struct pci_d > struct pci_bus *bus; > u16 config; > > + if (!vga_default_device()) { > + resource_size_t start, end; > + int i; > + > + /* Does firmware framebuffer belong to us? */ > + for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { > + if (!(pci_resource_flags(pdev, i) & IORESOURCE_MEM)) > + continue; > + > + start = pci_resource_start(pdev, i); > + end = pci_resource_end(pdev, i); > + > + if (!start || !end) > + continue; > + > + if (screen_info.lfb_base >= start && > + (screen_info.lfb_base + screen_info.lfb_size) < end) > + vga_set_default_device(pdev); > + } > + } > + > /* Is VGA routed to us? */ > bus = pdev->bus; > while (bus) { > --- a/drivers/video/fbdev/efifb.c > +++ b/drivers/video/fbdev/efifb.c > @@ -19,8 +19,6 @@ > > static bool request_mem_succeeded = false; > > -static struct pci_dev *default_vga; > - > static struct fb_var_screeninfo efifb_defined = { > .activate = FB_ACTIVATE_NOW, > .height = -1, > @@ -84,23 +82,10 @@ static struct fb_ops efifb_ops = { > .fb_imageblit = cfb_imageblit, > }; > > -struct pci_dev *vga_default_device(void) > -{ > - return default_vga; > -} > - > -EXPORT_SYMBOL_GPL(vga_default_device); > - > -void vga_set_default_device(struct pci_dev *pdev) > -{ > - default_vga = pdev; > -} > - > static int efifb_setup(char *options) > { > char *this_opt; > int i; > - struct pci_dev *dev = NULL; > > if (options && *options) { > while ((this_opt = strsep(&options, ",")) != NULL) { > @@ -126,30 +111,6 @@ static int efifb_setup(char *options) > } > } > > - for_each_pci_dev(dev) { > - int i; > - > - if ((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) > - continue; > - > - for (i=0; i < DEVICE_COUNT_RESOURCE; i++) { > - resource_size_t start, end; > - > - if (!(pci_resource_flags(dev, i) & IORESOURCE_MEM)) > - continue; > - > - start = pci_resource_start(dev, i); > - end = pci_resource_end(dev, i); > - > - if (!start || !end) > - continue; > - > - if (screen_info.lfb_base >= start && > - (screen_info.lfb_base + screen_info.lfb_size) < end) > - default_vga = dev; > - } > - } > - > return 0; > } > > > > Patches currently in stable-queue which might be from bonbons@xxxxxxxxxxxxxxxxx are > > queue-3.16/x86-ia64-move-efi_fb-vga_default_device-initialization-to-pci_vga_fixup.patch > queue-3.16/x86-efi-enforce-config_relocatable-for-efi-boot-stub.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html