bf91a40
                                                                                                                                                                                                                                                               
bf91a40
Delivered-To: jwboyer@gmail.com
bf91a40
Received: by 10.229.187.201 with SMTP id cx9csp141480qcb;
bf91a40
        Mon, 16 Apr 2012 13:27:50 -0700 (PDT)
bf91a40
Received: by 10.60.0.201 with SMTP id 9mr17463209oeg.59.1334608065659;
bf91a40
        Mon, 16 Apr 2012 13:27:45 -0700 (PDT)
bf91a40
Return-Path: <linux-kernel-owner@vger.kernel.org>
bf91a40
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
bf91a40
        by mx.google.com with ESMTP id 4si12245496oei.14.2012.04.16.13.27.44;
bf91a40
        Mon, 16 Apr 2012 13:27:45 -0700 (PDT)
bf91a40
Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
bf91a40
Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=linux-kernel-owner@vger.kernel.org
bf91a40
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
bf91a40
	id S1755065Ab2DPU02 (ORCPT <rfc822;padmanabhlinux@gmail.com>
bf91a40
	+ 99 others); Mon, 16 Apr 2012 16:26:28 -0400
bf91a40
Received: from mx1.redhat.com ([209.132.183.28]:1184 "EHLO mx1.redhat.com"
bf91a40
	rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
bf91a40
	id S1754698Ab2DPU01 (ORCPT <rfc822;linux-kernel@vger.kernel.org>);
bf91a40
	Mon, 16 Apr 2012 16:26:27 -0400
bf91a40
Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])
bf91a40
	by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q3GKQPYb007336
bf91a40
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
bf91a40
	Mon, 16 Apr 2012 16:26:25 -0400
bf91a40
Received: from cavan.codon.org.uk (ovpn-113-122.phx2.redhat.com [10.3.113.122])
bf91a40
	by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q3GKQNG5011412
bf91a40
	(version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO);
bf91a40
	Mon, 16 Apr 2012 16:26:24 -0400
bf91a40
Received: from nat-pool-rdu.redhat.com ([66.187.233.202] helo=x220.boston.devel.redhat.com)
bf91a40
	by cavan.codon.org.uk with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
bf91a40
	(Exim 4.72)
bf91a40
	(envelope-from <mjg@redhat.com>)
bf91a40
	id 1SJsVA-0003T4-U8; Mon, 16 Apr 2012 21:26:21 +0100
bf91a40
From:	Matthew Garrett <mjg@redhat.com>
bf91a40
To:	linux-kernel@vger.kernel.org
bf91a40
Cc:	Matthew Garrett <mjg@redhat.com>, benh@kernel.crashing.org,
bf91a40
	airlied@redhat.com
bf91a40
Subject: [PATCH V2 1/4] vgaarb: Add support for setting the default video device
bf91a40
Date:	Mon, 16 Apr 2012 16:26:02 -0400
bf91a40
Message-Id: <1334607965-9582-1-git-send-email-mjg@redhat.com>
bf91a40
X-SA-Do-Not-Run: Yes
bf91a40
X-SA-Exim-Connect-IP: 66.187.233.202
bf91a40
X-SA-Exim-Mail-From: mjg@redhat.com
bf91a40
X-SA-Exim-Scanned: No (on cavan.codon.org.uk); SAEximRunCond expanded to false
bf91a40
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11
bf91a40
Sender:	linux-kernel-owner@vger.kernel.org
bf91a40
Precedence: bulk
bf91a40
List-ID: <linux-kernel.vger.kernel.org>
bf91a40
X-Mailing-List:	linux-kernel@vger.kernel.org
bf91a40
bf91a40
The default VGA device is a somewhat fluid concept on platforms with
bf91a40
multiple GPUs. Add support for setting it so switching code can update
bf91a40
things appropriately, and make sure that the sysfs code returns the right
bf91a40
device if it's changed.
bf91a40
bf91a40
Signed-off-by: Matthew Garrett <mjg@redhat.com>
bf91a40
Cc: benh@kernel.crashing.org
bf91a40
Cc: airlied@redhat.com
bf91a40
---
bf91a40
Updated to fix builds when __ARCH_HAS_VGA_DEFAULT_DEVICE is false.
bf91a40
bf91a40
 drivers/gpu/vga/vgaarb.c |    7 +++++++
bf91a40
 drivers/pci/pci-sysfs.c  |    5 +++++
bf91a40
 include/linux/vgaarb.h   |    2 ++
bf91a40
 3 files changed, 14 insertions(+)
bf91a40
bf91a40
diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c
bf91a40
index 111d956..e223b96 100644
bf91a40
--- a/drivers/gpu/vga/vgaarb.c
bf91a40
+++ b/drivers/gpu/vga/vgaarb.c
bf91a40
@@ -136,6 +136,11 @@ struct pci_dev *vga_default_device(void)
bf91a40
 {
bf91a40
 	return vga_default;
bf91a40
 }
bf91a40
+
bf91a40
+void vga_set_default_device(struct pci_dev *pdev)
bf91a40
+{
bf91a40
+	vga_default = pdev;
bf91a40
+}
bf91a40
 #endif
bf91a40
 
bf91a40
 static inline void vga_irq_set_state(struct vga_device *vgadev, bool state)
bf91a40
@@ -605,10 +610,12 @@ static bool vga_arbiter_del_pci_device(struct pci_dev *pdev)
bf91a40
 		goto bail;
bf91a40
 	}
bf91a40
 
bf91a40
+#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
bf91a40
 	if (vga_default == pdev) {
bf91a40
 		pci_dev_put(vga_default);
bf91a40
 		vga_default = NULL;
bf91a40
 	}
bf91a40
+#endif
bf91a40
 
bf91a40
 	if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM))
bf91a40
 		vga_decode_count--;
bf91a40
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
bf91a40
index a3cd8ca..7dd9f2b 100644
bf91a40
--- a/drivers/pci/pci-sysfs.c
bf91a40
+++ b/drivers/pci/pci-sysfs.c
bf91a40
@@ -27,6 +27,7 @@
bf91a40
 #include <linux/security.h>
bf91a40
 #include <linux/pci-aspm.h>
bf91a40
 #include <linux/slab.h>
bf91a40
+#include <linux/vgaarb.h>
bf91a40
 #include "pci.h"
bf91a40
 
bf91a40
 static int sysfs_initialized;	/* = 0 */
bf91a40
@@ -414,6 +415,10 @@ static ssize_t
bf91a40
 boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf)
bf91a40
 {
bf91a40
 	struct pci_dev *pdev = to_pci_dev(dev);
bf91a40
+	struct pci_dev *vga_dev = vga_default_device();
bf91a40
+
bf91a40
+	if (vga_dev)
bf91a40
+		return sprintf(buf, "%u\n", (pdev == vga_dev));
bf91a40
 
bf91a40
 	return sprintf(buf, "%u\n",
bf91a40
 		!!(pdev->resource[PCI_ROM_RESOURCE].flags &
bf91a40
diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h
bf91a40
index 9c3120d..759a25b 100644
bf91a40
--- a/include/linux/vgaarb.h
bf91a40
+++ b/include/linux/vgaarb.h
bf91a40
@@ -31,6 +31,7 @@
bf91a40
 #ifndef LINUX_VGA_H
bf91a40
 #define LINUX_VGA_H
bf91a40
 
bf91a40
+#include <video/vga.h>
bf91a40
 
bf91a40
 /* Legacy VGA regions */
bf91a40
 #define VGA_RSRC_NONE	       0x00
bf91a40
@@ -181,6 +182,7 @@ extern void vga_put(struct pci_dev *pdev, unsigned int rsrc);
bf91a40
 
bf91a40
 #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
bf91a40
 extern struct pci_dev *vga_default_device(void);
bf91a40
+extern void vga_set_default_device(struct pci_dev *pdev);
bf91a40
 #endif
bf91a40
 
bf91a40
 /**
bf91a40
-- 
bf91a40
1.7.10
bf91a40
bf91a40
--
bf91a40
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
bf91a40
the body of a message to majordomo@vger.kernel.org
bf91a40
More majordomo info at  http://vger.kernel.org/majordomo-info.html
bf91a40
Please read the FAQ at  http://www.tux.org/lkml/
bf91a40
                                                                                                                                                                                                                                                               
bf91a40
Delivered-To: jwboyer@gmail.com
bf91a40
Received: by 10.229.187.201 with SMTP id cx9csp141468qcb;
bf91a40
        Mon, 16 Apr 2012 13:27:10 -0700 (PDT)
bf91a40
Received: by 10.182.202.69 with SMTP id kg5mr18039202obc.35.1334608025784;
bf91a40
        Mon, 16 Apr 2012 13:27:05 -0700 (PDT)
bf91a40
Return-Path: <linux-kernel-owner@vger.kernel.org>
bf91a40
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
bf91a40
        by mx.google.com with ESMTP id p9si5895556obv.34.2012.04.16.13.27.01;
bf91a40
        Mon, 16 Apr 2012 13:27:05 -0700 (PDT)
bf91a40
Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
bf91a40
Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=linux-kernel-owner@vger.kernel.org
bf91a40
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
bf91a40
	id S1755523Ab2DPU0b (ORCPT <rfc822;padmanabhlinux@gmail.com>
bf91a40
	+ 99 others); Mon, 16 Apr 2012 16:26:31 -0400
bf91a40
Received: from mx1.redhat.com ([209.132.183.28]:15578 "EHLO mx1.redhat.com"
bf91a40
	rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
bf91a40
	id S1752993Ab2DPU00 (ORCPT <rfc822;linux-kernel@vger.kernel.org>);
bf91a40
	Mon, 16 Apr 2012 16:26:26 -0400
bf91a40
Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25])
bf91a40
	by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q3GKQPu2015452
bf91a40
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
bf91a40
	for <linux-kernel@vger.kernel.org>; Mon, 16 Apr 2012 16:26:25 -0400
bf91a40
Received: from cavan.codon.org.uk (ovpn-113-122.phx2.redhat.com [10.3.113.122])
bf91a40
	by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q3GKQOk2005441
bf91a40
	(version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO);
bf91a40
	Mon, 16 Apr 2012 16:26:25 -0400
bf91a40
Received: from nat-pool-rdu.redhat.com ([66.187.233.202] helo=x220.boston.devel.redhat.com)
bf91a40
	by cavan.codon.org.uk with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
bf91a40
	(Exim 4.72)
bf91a40
	(envelope-from <mjg@redhat.com>)
bf91a40
	id 1SJsVC-0003T4-AS; Mon, 16 Apr 2012 21:26:22 +0100
bf91a40
From:	Matthew Garrett <mjg@redhat.com>
bf91a40
To:	linux-kernel@vger.kernel.org
bf91a40
Cc:	Matthew Garrett <mjg@redhat.com>, airlied@redhat.com
bf91a40
Subject: [PATCH V2 2/4] vga-switcheroo: Use vga_default_device()
bf91a40
Date:	Mon, 16 Apr 2012 16:26:03 -0400
bf91a40
Message-Id: <1334607965-9582-2-git-send-email-mjg@redhat.com>
bf91a40
In-Reply-To: <1334607965-9582-1-git-send-email-mjg@redhat.com>
bf91a40
References: <1334607965-9582-1-git-send-email-mjg@redhat.com>
bf91a40
X-SA-Do-Not-Run: Yes
bf91a40
X-SA-Exim-Connect-IP: 66.187.233.202
bf91a40
X-SA-Exim-Mail-From: mjg@redhat.com
bf91a40
X-SA-Exim-Scanned: No (on cavan.codon.org.uk); SAEximRunCond expanded to false
bf91a40
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25
bf91a40
Sender:	linux-kernel-owner@vger.kernel.org
bf91a40
Precedence: bulk
bf91a40
List-ID: <linux-kernel.vger.kernel.org>
bf91a40
X-Mailing-List:	linux-kernel@vger.kernel.org
bf91a40
bf91a40
vga-switcheroo currently changes the default VGA device by fiddling with
bf91a40
the IORESOURCE_ROM_SHADOW flag on the device. This isn't strictly accurate,
bf91a40
since there's no guarantee that switching also changes the ROM decoding.
bf91a40
Switch over to using the vgaarb functions for this.
bf91a40
bf91a40
Signed-off-by: Matthew Garrett <mjg@redhat.com>
bf91a40
Cc: airlied@redhat.com
bf91a40
---
bf91a40
 drivers/gpu/vga/vga_switcheroo.c |    9 +++++----
bf91a40
 1 file changed, 5 insertions(+), 4 deletions(-)
bf91a40
bf91a40
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
bf91a40
index 9a2c805..44c664e 100644
bf91a40
--- a/drivers/gpu/vga/vga_switcheroo.c
bf91a40
+++ b/drivers/gpu/vga/vga_switcheroo.c
bf91a40
@@ -28,6 +28,8 @@
bf91a40
 #include <linux/pci.h>
bf91a40
 #include <linux/vga_switcheroo.h>
bf91a40
 
bf91a40
+#include <linux/vgaarb.h>
bf91a40
+
bf91a40
 struct vga_switcheroo_client {
bf91a40
 	struct pci_dev *pdev;
bf91a40
 	struct fb_info *fb_info;
bf91a40
@@ -140,7 +142,7 @@ int vga_switcheroo_register_client(struct pci_dev *pdev,
bf91a40
 	vgasr_priv.clients[index].reprobe = reprobe;
bf91a40
 	vgasr_priv.clients[index].can_switch = can_switch;
bf91a40
 	vgasr_priv.clients[index].id = -1;
bf91a40
-	if (pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW)
bf91a40
+	if (pdev == vga_default_device())
bf91a40
 		vgasr_priv.clients[index].active = true;
bf91a40
 
bf91a40
 	vgasr_priv.registered_clients |= (1 << index);
bf91a40
@@ -248,9 +250,8 @@ static int vga_switchto_stage1(struct vga_switcheroo_client *new_client)
bf91a40
 	if (new_client->pwr_state == VGA_SWITCHEROO_OFF)
bf91a40
 		vga_switchon(new_client);
bf91a40
 
bf91a40
-	/* swap shadow resource to denote boot VGA device has changed so X starts on new device */
bf91a40
-	active->pdev->resource[PCI_ROM_RESOURCE].flags &= ~IORESOURCE_ROM_SHADOW;
bf91a40
-	new_client->pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
bf91a40
+	vga_set_default_device(new_client->pdev);
bf91a40
+
bf91a40
 	return 0;
bf91a40
 }
bf91a40
 
bf91a40
-- 
bf91a40
1.7.10
bf91a40
bf91a40
--
bf91a40
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
bf91a40
the body of a message to majordomo@vger.kernel.org
bf91a40
More majordomo info at  http://vger.kernel.org/majordomo-info.html
bf91a40
Please read the FAQ at  http://www.tux.org/lkml/
bf91a40
                                                                                                                                                                                                                                                               
bf91a40
Delivered-To: jwboyer@gmail.com
bf91a40
Received: by 10.229.187.201 with SMTP id cx9csp141463qcb;
bf91a40
        Mon, 16 Apr 2012 13:27:04 -0700 (PDT)
bf91a40
Received: by 10.60.10.137 with SMTP id i9mr18822682oeb.23.1334608019708;
bf91a40
        Mon, 16 Apr 2012 13:26:59 -0700 (PDT)
bf91a40
Return-Path: <linux-kernel-owner@vger.kernel.org>
bf91a40
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
bf91a40
        by mx.google.com with ESMTP id h6si5711741obv.22.2012.04.16.13.26.58;
bf91a40
        Mon, 16 Apr 2012 13:26:59 -0700 (PDT)
bf91a40
Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
bf91a40
Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=linux-kernel-owner@vger.kernel.org
bf91a40
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
bf91a40
	id S1755396Ab2DPU0a (ORCPT <rfc822;padmanabhlinux@gmail.com>
bf91a40
	+ 99 others); Mon, 16 Apr 2012 16:26:30 -0400
bf91a40
Received: from mx1.redhat.com ([209.132.183.28]:4863 "EHLO mx1.redhat.com"
bf91a40
	rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
bf91a40
	id S1754084Ab2DPU01 (ORCPT <rfc822;linux-kernel@vger.kernel.org>);
bf91a40
	Mon, 16 Apr 2012 16:26:27 -0400
bf91a40
Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23])
bf91a40
	by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q3GKQQrr007340
bf91a40
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
bf91a40
	Mon, 16 Apr 2012 16:26:26 -0400
bf91a40
Received: from cavan.codon.org.uk (ovpn-113-122.phx2.redhat.com [10.3.113.122])
bf91a40
	by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q3GKQPuK005698
bf91a40
	(version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO);
bf91a40
	Mon, 16 Apr 2012 16:26:26 -0400
bf91a40
Received: from nat-pool-rdu.redhat.com ([66.187.233.202] helo=x220.boston.devel.redhat.com)
bf91a40
	by cavan.codon.org.uk with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
bf91a40
	(Exim 4.72)
bf91a40
	(envelope-from <mjg@redhat.com>)
bf91a40
	id 1SJsVD-0003T4-F3; Mon, 16 Apr 2012 21:26:23 +0100
bf91a40
From:	Matthew Garrett <mjg@redhat.com>
bf91a40
To:	linux-kernel@vger.kernel.org
bf91a40
Cc:	Matthew Garrett <mjg@redhat.com>, mingo@redhat.com, hpa@zytor.com
bf91a40
Subject: [PATCH V2 3/4] x86: Use vga_default_device() when determining whether an fb is primary
bf91a40
Date:	Mon, 16 Apr 2012 16:26:04 -0400
bf91a40
Message-Id: <1334607965-9582-3-git-send-email-mjg@redhat.com>
bf91a40
In-Reply-To: <1334607965-9582-1-git-send-email-mjg@redhat.com>
bf91a40
References: <1334607965-9582-1-git-send-email-mjg@redhat.com>
bf91a40
X-SA-Do-Not-Run: Yes
bf91a40
X-SA-Exim-Connect-IP: 66.187.233.202
bf91a40
X-SA-Exim-Mail-From: mjg@redhat.com
bf91a40
X-SA-Exim-Scanned: No (on cavan.codon.org.uk); SAEximRunCond expanded to false
bf91a40
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23
bf91a40
Sender:	linux-kernel-owner@vger.kernel.org
bf91a40
Precedence: bulk
bf91a40
List-ID: <linux-kernel.vger.kernel.org>
bf91a40
X-Mailing-List:	linux-kernel@vger.kernel.org
bf91a40
bf91a40
IORESOURCE_ROM_SHADOW is not necessarily an indication that the hardware
bf91a40
is the primary device. Add support for using the vgaarb functions and
bf91a40
fall back if nothing's set them.
bf91a40
bf91a40
Signed-off-by: Matthew Garrett <mjg@redhat.com>
bf91a40
Cc: mingo@redhat.com
bf91a40
Cc: hpa@zytor.com
bf91a40
---
bf91a40
 arch/x86/video/fbdev.c |   20 +++++++++++++++-----
bf91a40
 1 file changed, 15 insertions(+), 5 deletions(-)
bf91a40
bf91a40
diff --git a/arch/x86/video/fbdev.c b/arch/x86/video/fbdev.c
bf91a40
index c5ffb6a..d5644bb 100644
bf91a40
--- a/arch/x86/video/fbdev.c
bf91a40
+++ b/arch/x86/video/fbdev.c
bf91a40
@@ -9,24 +9,34 @@
bf91a40
 #include <linux/fb.h>
bf91a40
 #include <linux/pci.h>
bf91a40
 #include <linux/module.h>
bf91a40
+#include <linux/vgaarb.h>
bf91a40
 
bf91a40
 int fb_is_primary_device(struct fb_info *info)
bf91a40
 {
bf91a40
 	struct device *device = info->device;
bf91a40
 	struct pci_dev *pci_dev = NULL;
bf91a40
+	struct pci_dev *default_device = vga_default_device();
bf91a40
 	struct resource *res = NULL;
bf91a40
-	int retval = 0;
bf91a40
 
bf91a40
 	if (device)
bf91a40
 		pci_dev = to_pci_dev(device);
bf91a40
 
bf91a40
-	if (pci_dev)
bf91a40
-		res = &pci_dev->resource[PCI_ROM_RESOURCE];
bf91a40
+	if (!pci_dev)
bf91a40
+		return 0;
bf91a40
+
bf91a40
+	if (default_device) {
bf91a40
+		if (pci_dev == default_device)
bf91a40
+			return 1;
bf91a40
+		else
bf91a40
+			return 0;
bf91a40
+	}
bf91a40
+
bf91a40
+	res = &pci_dev->resource[PCI_ROM_RESOURCE];
bf91a40
 
bf91a40
 	if (res && res->flags & IORESOURCE_ROM_SHADOW)
bf91a40
-		retval = 1;
bf91a40
+		return 1;
bf91a40
 
bf91a40
-	return retval;
bf91a40
+	return 0;
bf91a40
 }
bf91a40
 EXPORT_SYMBOL(fb_is_primary_device);
bf91a40
 MODULE_LICENSE("GPL");
bf91a40
-- 
bf91a40
1.7.10
bf91a40
bf91a40
--
bf91a40
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
bf91a40
the body of a message to majordomo@vger.kernel.org
bf91a40
More majordomo info at  http://vger.kernel.org/majordomo-info.html
bf91a40
Please read the FAQ at  http://www.tux.org/lkml/
bf91a40
                                                                                                                                                                                                                                                               
bf91a40
Delivered-To: jwboyer@gmail.com
bf91a40
Received: by 10.229.187.201 with SMTP id cx9csp141467qcb;
bf91a40
        Mon, 16 Apr 2012 13:27:10 -0700 (PDT)
bf91a40
Received: by 10.182.183.73 with SMTP id ek9mr17996942obc.15.1334608026429;
bf91a40
        Mon, 16 Apr 2012 13:27:06 -0700 (PDT)
bf91a40
Return-Path: <linux-kernel-owner@vger.kernel.org>
bf91a40
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
bf91a40
        by mx.google.com with ESMTP id ry6si1466151obc.95.2012.04.16.13.27.02;
bf91a40
        Mon, 16 Apr 2012 13:27:06 -0700 (PDT)
bf91a40
Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
bf91a40
Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=linux-kernel-owner@vger.kernel.org
bf91a40
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
bf91a40
	id S1755405Ab2DPU0z (ORCPT <rfc822;padmanabhlinux@gmail.com>
bf91a40
	+ 99 others); Mon, 16 Apr 2012 16:26:55 -0400
bf91a40
Received: from mx1.redhat.com ([209.132.183.28]:27749 "EHLO mx1.redhat.com"
bf91a40
	rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
bf91a40
	id S1755265Ab2DPU03 (ORCPT <rfc822;linux-kernel@vger.kernel.org>);
bf91a40
	Mon, 16 Apr 2012 16:26:29 -0400
bf91a40
Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25])
bf91a40
	by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q3GKQShl015458
bf91a40
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
bf91a40
	Mon, 16 Apr 2012 16:26:28 -0400
bf91a40
Received: from cavan.codon.org.uk (ovpn-113-122.phx2.redhat.com [10.3.113.122])
bf91a40
	by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q3GKQQwW005450
bf91a40
	(version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO);
bf91a40
	Mon, 16 Apr 2012 16:26:27 -0400
bf91a40
Received: from nat-pool-rdu.redhat.com ([66.187.233.202] helo=x220.boston.devel.redhat.com)
bf91a40
	by cavan.codon.org.uk with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
bf91a40
	(Exim 4.72)
bf91a40
	(envelope-from <mjg@redhat.com>)
bf91a40
	id 1SJsVE-0003T4-Uv; Mon, 16 Apr 2012 21:26:25 +0100
bf91a40
From:	Matthew Garrett <mjg@redhat.com>
bf91a40
To:	linux-kernel@vger.kernel.org
bf91a40
Cc:	Matthew Garrett <mjg@redhat.com>, hpa@zytor.com,
bf91a40
	matt.fleming@intel.com
bf91a40
Subject: [PATCH V2 4/4] efifb: Implement vga_default_device()
bf91a40
Date:	Mon, 16 Apr 2012 16:26:05 -0400
bf91a40
Message-Id: <1334607965-9582-4-git-send-email-mjg@redhat.com>
bf91a40
In-Reply-To: <1334607965-9582-1-git-send-email-mjg@redhat.com>
bf91a40
References: <1334607965-9582-1-git-send-email-mjg@redhat.com>
bf91a40
X-SA-Do-Not-Run: Yes
bf91a40
X-SA-Exim-Connect-IP: 66.187.233.202
bf91a40
X-SA-Exim-Mail-From: mjg@redhat.com
bf91a40
X-SA-Exim-Scanned: No (on cavan.codon.org.uk); SAEximRunCond expanded to false
bf91a40
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25
bf91a40
Sender:	linux-kernel-owner@vger.kernel.org
bf91a40
Precedence: bulk
bf91a40
List-ID: <linux-kernel.vger.kernel.org>
bf91a40
X-Mailing-List:	linux-kernel@vger.kernel.org
bf91a40
bf91a40
EFI doesn't typically make use of the legacy VGA ROM, but it may still be
bf91a40
configured to pass that through to a given video device. This may lead to
bf91a40
an inaccurate choice of default video device. Add support to efifb to pick
bf91a40
out the correct active video device.
bf91a40
bf91a40
Signed-off-by: Matthew Garrett <mjg@redhat.com>
bf91a40
Cc: hpa@zytor.com
bf91a40
Cc: matt.fleming@intel.com
bf91a40
---
bf91a40
 arch/x86/include/asm/vga.h |    6 ++++
bf91a40
 drivers/video/efifb.c      |   77 ++++++++++++++++++++++++++++++++------------
bf91a40
 2 files changed, 63 insertions(+), 20 deletions(-)
bf91a40
bf91a40
diff --git a/arch/x86/include/asm/vga.h b/arch/x86/include/asm/vga.h
bf91a40
index c4b9dc2..2723c07 100644
bf91a40
--- a/arch/x86/include/asm/vga.h
bf91a40
+++ b/arch/x86/include/asm/vga.h
bf91a40
@@ -17,4 +17,10 @@
bf91a40
 #define vga_readb(x) (*(x))
bf91a40
 #define vga_writeb(x, y) (*(y) = (x))
bf91a40
 
acc7107
+#ifdef CONFIG_FB_EFI
bf91a40
+#define __ARCH_HAS_VGA_DEFAULT_DEVICE
bf91a40
+extern struct pci_dev *vga_default_device(void);
bf91a40
+extern void vga_set_default_device(struct pci_dev *pdev);
bf91a40
+#endif
bf91a40
+
bf91a40
 #endif /* _ASM_X86_VGA_H */
bf91a40
diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c
bf91a40
index 784139a..66ed991 100644
bf91a40
--- a/drivers/video/efifb.c
bf91a40
+++ b/drivers/video/efifb.c
bf91a40
@@ -18,6 +18,8 @@
bf91a40
 
bf91a40
 static bool request_mem_succeeded = false;
bf91a40
 
bf91a40
+static struct pci_dev *default_vga;
bf91a40
+
bf91a40
 static struct fb_var_screeninfo efifb_defined __devinitdata = {
bf91a40
 	.activate		= FB_ACTIVATE_NOW,
bf91a40
 	.height			= -1,
bf91a40
@@ -298,35 +300,70 @@ static struct fb_ops efifb_ops = {
bf91a40
 	.fb_imageblit	= cfb_imageblit,
bf91a40
 };
bf91a40
 
bf91a40
+struct pci_dev *vga_default_device(void)
bf91a40
+{
bf91a40
+	return default_vga;
bf91a40
+}
bf91a40
+
bf91a40
+void vga_set_default_device(struct pci_dev *pdev)
bf91a40
+{
bf91a40
+	default_vga = pdev;
bf91a40
+}
bf91a40
+
bf91a40
 static int __init efifb_setup(char *options)
bf91a40
 {
bf91a40
 	char *this_opt;
bf91a40
 	int i;
bf91a40
+	struct pci_dev *dev = NULL;
bf91a40
+
bf91a40
+	if (options && *options) {
bf91a40
+		while ((this_opt = strsep(&options, ",")) != NULL) {
bf91a40
+			if (!*this_opt) continue;
bf91a40
+
bf91a40
+			for (i = 0; i < M_UNKNOWN; i++) {
bf91a40
+				if (!strcmp(this_opt, dmi_list[i].optname) &&
bf91a40
+				    dmi_list[i].base != 0) {
bf91a40
+					screen_info.lfb_base = dmi_list[i].base;
bf91a40
+					screen_info.lfb_linelength = dmi_list[i].stride;
bf91a40
+					screen_info.lfb_width = dmi_list[i].width;
bf91a40
+					screen_info.lfb_height = dmi_list[i].height;
bf91a40
+				}
bf91a40
+			}
bf91a40
+			if (!strncmp(this_opt, "base:", 5))
bf91a40
+				screen_info.lfb_base = simple_strtoul(this_opt+5, NULL, 0);
bf91a40
+			else if (!strncmp(this_opt, "stride:", 7))
bf91a40
+				screen_info.lfb_linelength = simple_strtoul(this_opt+7, NULL, 0) * 4;
bf91a40
+			else if (!strncmp(this_opt, "height:", 7))
bf91a40
+				screen_info.lfb_height = simple_strtoul(this_opt+7, NULL, 0);
bf91a40
+			else if (!strncmp(this_opt, "width:", 6))
bf91a40
+				screen_info.lfb_width = simple_strtoul(this_opt+6, NULL, 0);
bf91a40
+		}
bf91a40
+	}
bf91a40
 
bf91a40
-	if (!options || !*options)
bf91a40
-		return 0;
bf91a40
+	for_each_pci_dev(dev) {
bf91a40
+		int i;
bf91a40
 
bf91a40
-	while ((this_opt = strsep(&options, ",")) != NULL) {
bf91a40
-		if (!*this_opt) continue;
bf91a40
+		if ((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
bf91a40
+			continue;
bf91a40
 
bf91a40
-		for (i = 0; i < M_UNKNOWN; i++) {
bf91a40
-			if (!strcmp(this_opt, dmi_list[i].optname) &&
bf91a40
-					dmi_list[i].base != 0) {
bf91a40
-				screen_info.lfb_base = dmi_list[i].base;
bf91a40
-				screen_info.lfb_linelength = dmi_list[i].stride;
bf91a40
-				screen_info.lfb_width = dmi_list[i].width;
bf91a40
-				screen_info.lfb_height = dmi_list[i].height;
bf91a40
-			}
bf91a40
+		for (i=0; i < DEVICE_COUNT_RESOURCE; i++) {
bf91a40
+			resource_size_t start, end;
bf91a40
+
bf91a40
+			if (!(pci_resource_flags(dev, i) & IORESOURCE_MEM))
bf91a40
+				continue;
bf91a40
+
bf91a40
+			start = pci_resource_start(dev, i);
bf91a40
+			end  = pci_resource_end(dev, i);
bf91a40
+
bf91a40
+			if (!start || !end)
bf91a40
+				continue;
bf91a40
+
bf91a40
+			if (screen_info.lfb_base >= start &&
bf91a40
+			    (screen_info.lfb_base + screen_info.lfb_size) < end)
bf91a40
+				default_vga = dev;
bf91a40
 		}
bf91a40
-		if (!strncmp(this_opt, "base:", 5))
bf91a40
-			screen_info.lfb_base = simple_strtoul(this_opt+5, NULL, 0);
bf91a40
-		else if (!strncmp(this_opt, "stride:", 7))
bf91a40
-			screen_info.lfb_linelength = simple_strtoul(this_opt+7, NULL, 0) * 4;
bf91a40
-		else if (!strncmp(this_opt, "height:", 7))
bf91a40
-			screen_info.lfb_height = simple_strtoul(this_opt+7, NULL, 0);
bf91a40
-		else if (!strncmp(this_opt, "width:", 6))
bf91a40
-			screen_info.lfb_width = simple_strtoul(this_opt+6, NULL, 0);
bf91a40
 	}
bf91a40
+
bf91a40
 	return 0;
bf91a40
 }
bf91a40
 
bf91a40
-- 
bf91a40
1.7.10
bf91a40
bf91a40
--
bf91a40
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
bf91a40
the body of a message to majordomo@vger.kernel.org
bf91a40
More majordomo info at  http://vger.kernel.org/majordomo-info.html
bf91a40
Please read the FAQ at  http://www.tux.org/lkml/
acc7107
acc7107
acc7107
acc7107
Path: news.gmane.org!not-for-mail
acc7107
From: Dave Airlie <airlied@gmail.com>
acc7107
Newsgroups: gmane.linux.kernel
acc7107
Subject: [PATCH] x86/vga: set the default device from the fixup.
acc7107
Date: Mon, 14 May 2012 17:01:20 +0100
acc7107
Lines: 42
acc7107
Approved: news@gmane.org
acc7107
Message-ID: <1337011280-7166-1-git-send-email-airlied@gmail.com>
acc7107
NNTP-Posting-Host: plane.gmane.org
acc7107
X-Trace: dough.gmane.org 1337011751 27684 80.91.229.3 (14 May 2012 16:09:11 GMT)
acc7107
X-Complaints-To: usenet@dough.gmane.org
acc7107
NNTP-Posting-Date: Mon, 14 May 2012 16:09:11 +0000 (UTC)
acc7107
Cc: Dave Airlie <airlied@redhat.com>, Matthew Garrett <mjg@redhat.com>,
acc7107
	"H. Peter Anvin" <hpa@zytor.com>
acc7107
To: linux-kernel@vger.kernel.org
acc7107
Original-X-From: linux-kernel-owner@vger.kernel.org Mon May 14 18:09:10 2012
acc7107
Return-path: <linux-kernel-owner@vger.kernel.org>
acc7107
Envelope-to: glk-linux-kernel-3@plane.gmane.org
acc7107
Original-Received: from vger.kernel.org ([209.132.180.67])
acc7107
	by plane.gmane.org with esmtp (Exim 4.69)
acc7107
	(envelope-from <linux-kernel-owner@vger.kernel.org>)
acc7107
	id 1STxpW-0007oo-4X
acc7107
	for glk-linux-kernel-3@plane.gmane.org; Mon, 14 May 2012 18:09:02 +0200
acc7107
Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
acc7107
	id S1756889Ab2ENQIs (ORCPT <rfc822;glk-linux-kernel-3@m.gmane.org>);
acc7107
	Mon, 14 May 2012 12:08:48 -0400
acc7107
Original-Received: from mx1.redhat.com ([209.132.183.28]:34445 "EHLO mx1.redhat.com"
acc7107
	rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
acc7107
	id S1756736Ab2ENQIm (ORCPT <rfc822;linux-kernel@vger.kernel.org>);
acc7107
	Mon, 14 May 2012 12:08:42 -0400
acc7107
Original-Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24])
acc7107
	by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q4EG8ftT012092
acc7107
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
acc7107
	Mon, 14 May 2012 12:08:42 -0400
acc7107
Original-Received: from optimus.redhat.com (vpn1-5-164.ams2.redhat.com [10.36.5.164])
acc7107
	by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q4EG5Ch0001452;
acc7107
	Mon, 14 May 2012 12:05:12 -0400
acc7107
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24
acc7107
Original-Sender: linux-kernel-owner@vger.kernel.org
acc7107
Precedence: bulk
acc7107
List-ID: <linux-kernel.vger.kernel.org>
acc7107
X-Mailing-List: linux-kernel@vger.kernel.org
acc7107
Xref: news.gmane.org gmane.linux.kernel:1296685
acc7107
Archived-At: <http://permalink.gmane.org/gmane.linux.kernel/1296685>
acc7107
acc7107
From: Dave Airlie <airlied@redhat.com>
acc7107
acc7107
Since Matthew's efi/vga changes on non-EFI machines we were failing
acc7107
to tell the vgaarb/switcheroo what the default device was, this
acc7107
sets the default device in the quirk if none has been set before.
acc7107
acc7107
This fixes the switcheroo on my T410s.
acc7107
acc7107
[hpa: please ack to put this on top of the other patches in my -next tree].
acc7107
acc7107
Signed-off-by: Dave Airlie <airlied@redhat.com>
acc7107
Cc: Matthew Garrett <mjg@redhat.com>
acc7107
Cc: H. Peter Anvin <hpa@zytor.com>
acc7107
acc7107
---
acc7107
 arch/x86/pci/fixup.c |    3 +++
acc7107
 1 files changed, 3 insertions(+), 0 deletions(-)
acc7107
acc7107
diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c
acc7107
index d0e6e40..cf81c02 100644
acc7107
--- a/arch/x86/pci/fixup.c
acc7107
+++ b/arch/x86/pci/fixup.c
acc7107
@@ -7,6 +7,7 @@
acc7107
 #include <linux/pci.h>
acc7107
 #include <linux/init.h>
acc7107
 #include <asm/pci_x86.h>
acc7107
+#include <asm/vga.h>
acc7107
 
acc7107
 static void __devinit pci_fixup_i450nx(struct pci_dev *d)
acc7107
 {
acc7107
@@ -348,6 +349,8 @@ static void __devinit pci_fixup_video(struct pci_dev *pdev)
acc7107
 	if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
acc7107
 		pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
acc7107
 		dev_printk(KERN_DEBUG, &pdev->dev, "Boot video device\n");
acc7107
+		if (vga_default_device() == NULL)
acc7107
+			vga_set_default_device(pdev);
acc7107
 	}
acc7107
 }
acc7107
 DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
acc7107
-- 
acc7107
1.7.6
acc7107