Commit 649ae752 authored by Bjorn Helgaas's avatar Bjorn Helgaas

Merge branch 'pci/vga'; commit '6a73336b' into for-linus

* pci/vga:
  vgaarb: Drop obsolete #ifndef
  vgaarb: Don't default exclusively to first video device with mem+io

* commit '6a73336b':
  PCI: Remove "no hotplug settings from platform" warning
...@@ -38,27 +38,6 @@ static void pci_fixup_video(struct pci_dev *pdev) ...@@ -38,27 +38,6 @@ static void pci_fixup_video(struct pci_dev *pdev)
return; return;
/* Maybe, this machine supports legacy memory map. */ /* 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? */ /* Is VGA routed to us? */
bus = pdev->bus; bus = pdev->bus;
while (bus) { while (bus) {
...@@ -83,8 +62,7 @@ static void pci_fixup_video(struct pci_dev *pdev) ...@@ -83,8 +62,7 @@ static void pci_fixup_video(struct pci_dev *pdev)
pci_read_config_word(pdev, PCI_COMMAND, &config); pci_read_config_word(pdev, PCI_COMMAND, &config);
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
dev_printk(KERN_DEBUG, &pdev->dev, "Boot video device\n"); dev_printk(KERN_DEBUG, &pdev->dev, "Video device with shadowed ROM\n");
vga_set_default_device(pdev);
} }
} }
} }
......
...@@ -326,27 +326,6 @@ static void pci_fixup_video(struct pci_dev *pdev) ...@@ -326,27 +326,6 @@ static void pci_fixup_video(struct pci_dev *pdev)
struct pci_bus *bus; struct pci_bus *bus;
u16 config; 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? */ /* Is VGA routed to us? */
bus = pdev->bus; bus = pdev->bus;
while (bus) { while (bus) {
...@@ -371,8 +350,7 @@ static void pci_fixup_video(struct pci_dev *pdev) ...@@ -371,8 +350,7 @@ static void pci_fixup_video(struct pci_dev *pdev)
pci_read_config_word(pdev, PCI_COMMAND, &config); pci_read_config_word(pdev, PCI_COMMAND, &config);
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW;
dev_printk(KERN_DEBUG, &pdev->dev, "Boot video device\n"); dev_printk(KERN_DEBUG, &pdev->dev, "Video device with shadowed ROM\n");
vga_set_default_device(pdev);
} }
} }
} }
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/screen_info.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
...@@ -112,10 +113,8 @@ static int vga_str_to_iostate(char *buf, int str_size, int *io_state) ...@@ -112,10 +113,8 @@ static int vga_str_to_iostate(char *buf, int str_size, int *io_state)
return 1; return 1;
} }
#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
/* this is only used a cookie - it should not be dereferenced */ /* this is only used a cookie - it should not be dereferenced */
static struct pci_dev *vga_default; static struct pci_dev *vga_default;
#endif
static void vga_arb_device_card_gone(struct pci_dev *pdev); static void vga_arb_device_card_gone(struct pci_dev *pdev);
...@@ -131,7 +130,6 @@ static struct vga_device *vgadev_find(struct pci_dev *pdev) ...@@ -131,7 +130,6 @@ static struct vga_device *vgadev_find(struct pci_dev *pdev)
} }
/* Returns the default VGA device (vgacon's babe) */ /* Returns the default VGA device (vgacon's babe) */
#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
struct pci_dev *vga_default_device(void) struct pci_dev *vga_default_device(void)
{ {
return vga_default; return vga_default;
...@@ -147,7 +145,6 @@ void vga_set_default_device(struct pci_dev *pdev) ...@@ -147,7 +145,6 @@ void vga_set_default_device(struct pci_dev *pdev)
pci_dev_put(vga_default); pci_dev_put(vga_default);
vga_default = pci_dev_get(pdev); vga_default = pci_dev_get(pdev);
} }
#endif
static inline void vga_irq_set_state(struct vga_device *vgadev, bool state) static inline void vga_irq_set_state(struct vga_device *vgadev, bool state)
{ {
...@@ -583,11 +580,12 @@ static bool vga_arbiter_add_pci_device(struct pci_dev *pdev) ...@@ -583,11 +580,12 @@ static bool vga_arbiter_add_pci_device(struct pci_dev *pdev)
/* Deal with VGA default device. Use first enabled one /* Deal with VGA default device. Use first enabled one
* by default if arch doesn't have it's own hook * by default if arch doesn't have it's own hook
*/ */
#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
if (vga_default == NULL && if (vga_default == NULL &&
((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) {
pr_info("vgaarb: setting as boot device: PCI:%s\n",
pci_name(pdev));
vga_set_default_device(pdev); vga_set_default_device(pdev);
#endif }
vga_arbiter_check_bridge_sharing(vgadev); vga_arbiter_check_bridge_sharing(vgadev);
...@@ -621,10 +619,8 @@ static bool vga_arbiter_del_pci_device(struct pci_dev *pdev) ...@@ -621,10 +619,8 @@ static bool vga_arbiter_del_pci_device(struct pci_dev *pdev)
goto bail; goto bail;
} }
#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
if (vga_default == pdev) if (vga_default == pdev)
vga_set_default_device(NULL); vga_set_default_device(NULL);
#endif
if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM)) if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM))
vga_decode_count--; vga_decode_count--;
...@@ -1320,6 +1316,38 @@ static int __init vga_arb_device_init(void) ...@@ -1320,6 +1316,38 @@ static int __init vga_arb_device_init(void)
pr_info("vgaarb: loaded\n"); pr_info("vgaarb: loaded\n");
list_for_each_entry(vgadev, &vga_list, list) { list_for_each_entry(vgadev, &vga_list, list) {
#if defined(CONFIG_X86) || defined(CONFIG_IA64)
/* Override I/O based detection done by vga_arbiter_add_pci_device()
* as it may take the wrong device (e.g. on Apple system under EFI).
*
* Select the device owning the boot framebuffer if there is one.
*/
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(vgadev->pdev, i) & IORESOURCE_MEM))
continue;
start = pci_resource_start(vgadev->pdev, i);
end = pci_resource_end(vgadev->pdev, i);
if (!start || !end)
continue;
if (screen_info.lfb_base < start ||
(screen_info.lfb_base + screen_info.lfb_size) >= end)
continue;
if (!vga_default_device())
pr_info("vgaarb: setting as boot device: PCI:%s\n",
pci_name(vgadev->pdev));
else if (vgadev->pdev != vga_default_device())
pr_info("vgaarb: overriding boot device: PCI:%s\n",
pci_name(vgadev->pdev));
vga_set_default_device(vgadev->pdev);
}
#endif
if (vgadev->bridge_has_one_vga) if (vgadev->bridge_has_one_vga)
pr_info("vgaarb: bridge control possible %s\n", pci_name(vgadev->pdev)); pr_info("vgaarb: bridge control possible %s\n", pci_name(vgadev->pdev));
else else
......
...@@ -46,7 +46,6 @@ static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp) ...@@ -46,7 +46,6 @@ static void program_hpp_type0(struct pci_dev *dev, struct hpp_type0 *hpp)
*/ */
if (pci_is_pcie(dev)) if (pci_is_pcie(dev))
return; return;
dev_info(&dev->dev, "using default PCI settings\n");
hpp = &pci_default_type0; hpp = &pci_default_type0;
} }
...@@ -153,7 +152,6 @@ void pci_configure_slot(struct pci_dev *dev) ...@@ -153,7 +152,6 @@ void pci_configure_slot(struct pci_dev *dev)
{ {
struct pci_dev *cdev; struct pci_dev *cdev;
struct hotplug_params hpp; struct hotplug_params hpp;
int ret;
if (!(dev->hdr_type == PCI_HEADER_TYPE_NORMAL || if (!(dev->hdr_type == PCI_HEADER_TYPE_NORMAL ||
(dev->hdr_type == PCI_HEADER_TYPE_BRIDGE && (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
...@@ -163,9 +161,7 @@ void pci_configure_slot(struct pci_dev *dev) ...@@ -163,9 +161,7 @@ void pci_configure_slot(struct pci_dev *dev)
pcie_bus_configure_settings(dev->bus); pcie_bus_configure_settings(dev->bus);
memset(&hpp, 0, sizeof(hpp)); memset(&hpp, 0, sizeof(hpp));
ret = pci_get_hp_params(dev, &hpp); pci_get_hp_params(dev, &hpp);
if (ret)
dev_warn(&dev->dev, "no hotplug settings from platform\n");
program_hpp_type2(dev, hpp.t2); program_hpp_type2(dev, hpp.t2);
program_hpp_type1(dev, hpp.t1); program_hpp_type1(dev, hpp.t1);
......
...@@ -182,7 +182,6 @@ extern void vga_put(struct pci_dev *pdev, unsigned int rsrc); ...@@ -182,7 +182,6 @@ extern void vga_put(struct pci_dev *pdev, unsigned int rsrc);
* vga_get()... * vga_get()...
*/ */
#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
#ifdef CONFIG_VGA_ARB #ifdef CONFIG_VGA_ARB
extern struct pci_dev *vga_default_device(void); extern struct pci_dev *vga_default_device(void);
extern void vga_set_default_device(struct pci_dev *pdev); extern void vga_set_default_device(struct pci_dev *pdev);
...@@ -190,7 +189,6 @@ extern void vga_set_default_device(struct pci_dev *pdev); ...@@ -190,7 +189,6 @@ extern void vga_set_default_device(struct pci_dev *pdev);
static inline struct pci_dev *vga_default_device(void) { return NULL; }; static inline struct pci_dev *vga_default_device(void) { return NULL; };
static inline void vga_set_default_device(struct pci_dev *pdev) { }; static inline void vga_set_default_device(struct pci_dev *pdev) { };
#endif #endif
#endif
/** /**
* vga_conflicts * vga_conflicts
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment