Merge branch 'pci/vga'; commit '6a73336bde29' into for-linus
* pci/vga: vgaarb: Drop obsolete #ifndef vgaarb: Don't default exclusively to first video device with mem+io * commit '6a73336bde29': PCI: Remove "no hotplug settings from platform" warning
This commit is contained in:
commit
649ae75286
5 changed files with 40 additions and 62 deletions
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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 @@
|
||||||
#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 @@ both:
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
||||||
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)
|
||||||
/* 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)
|
||||||
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)
|
||||||
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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
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);
|
||||||
* 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);
|
||||||
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue