forked from beagleboard/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PCI: fix pci_fixup_video as it blows up on sparc64
This reverts much of the original pci_fixup_video change and makes it work for all arches that need it. fixed, and tested on x86, x86_64 and IA64 dig. Signed-off-by: Eiichiro Oiwa <[email protected]> Acked-by: David Miller <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
- Loading branch information
1 parent
35ae61a
commit 6b5c76b
Showing
5 changed files
with
128 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -342,6 +342,61 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PB1, pcie_r | |
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC, pcie_rootport_aspm_quirk ); | ||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MCH_PC1, pcie_rootport_aspm_quirk ); | ||
|
||
/* | ||
* Fixup to mark boot BIOS video selected by BIOS before it changes | ||
* | ||
* From information provided by "Jon Smirl" <[email protected]> | ||
* | ||
* The standard boot ROM sequence for an x86 machine uses the BIOS | ||
* to select an initial video card for boot display. This boot video | ||
* card will have it's BIOS copied to C0000 in system RAM. | ||
* IORESOURCE_ROM_SHADOW is used to associate the boot video | ||
* card with this copy. On laptops this copy has to be used since | ||
* the main ROM may be compressed or combined with another image. | ||
* See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW | ||
* is marked here since the boot video device will be the only enabled | ||
* video device at this point. | ||
*/ | ||
|
||
static void __devinit pci_fixup_video(struct pci_dev *pdev) | ||
{ | ||
struct pci_dev *bridge; | ||
struct pci_bus *bus; | ||
u16 config; | ||
|
||
if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA) | ||
return; | ||
|
||
/* Is VGA routed to us? */ | ||
bus = pdev->bus; | ||
while (bus) { | ||
bridge = bus->self; | ||
|
||
/* | ||
* From information provided by | ||
* "David Miller" <[email protected]> | ||
* The bridge control register is valid for PCI header | ||
* type BRIDGE, or CARDBUS. Host to PCI controllers use | ||
* PCI header type NORMAL. | ||
*/ | ||
if (bridge | ||
&&((bridge->hdr_type == PCI_HEADER_TYPE_BRIDGE) | ||
||(bridge->hdr_type == PCI_HEADER_TYPE_CARDBUS))) { | ||
pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, | ||
&config); | ||
if (!(config & PCI_BRIDGE_CTL_VGA)) | ||
return; | ||
} | ||
bus = bus->parent; | ||
} | ||
pci_read_config_word(pdev, PCI_COMMAND, &config); | ||
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { | ||
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; | ||
printk(KERN_DEBUG "Boot video device is %s\n", pci_name(pdev)); | ||
} | ||
} | ||
DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video); | ||
|
||
/* | ||
* Some Toshiba laptops need extra code to enable their TI TSB43AB22/A. | ||
* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# | ||
# Makefile for the ia64-specific parts of the pci bus | ||
# | ||
obj-y := pci.o | ||
obj-y := pci.o fixup.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* Exceptions for specific devices. Usually work-arounds for fatal design flaws. | ||
* Derived from fixup.c of i386 tree. | ||
*/ | ||
|
||
#include <linux/pci.h> | ||
#include <linux/init.h> | ||
|
||
#include <asm/machvec.h> | ||
|
||
/* | ||
* Fixup to mark boot BIOS video selected by BIOS before it changes | ||
* | ||
* From information provided by "Jon Smirl" <[email protected]> | ||
* | ||
* The standard boot ROM sequence for an x86 machine uses the BIOS | ||
* to select an initial video card for boot display. This boot video | ||
* card will have it's BIOS copied to C0000 in system RAM. | ||
* IORESOURCE_ROM_SHADOW is used to associate the boot video | ||
* card with this copy. On laptops this copy has to be used since | ||
* the main ROM may be compressed or combined with another image. | ||
* See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW | ||
* is marked here since the boot video device will be the only enabled | ||
* video device at this point. | ||
*/ | ||
|
||
static void __devinit pci_fixup_video(struct pci_dev *pdev) | ||
{ | ||
struct pci_dev *bridge; | ||
struct pci_bus *bus; | ||
u16 config; | ||
|
||
if ((strcmp(platform_name, "dig") != 0) | ||
&& (strcmp(platform_name, "hpzx1") != 0)) | ||
return; | ||
/* Maybe, this machine supports legacy memory map. */ | ||
|
||
if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA) | ||
return; | ||
|
||
/* Is VGA routed to us? */ | ||
bus = pdev->bus; | ||
while (bus) { | ||
bridge = bus->self; | ||
|
||
/* | ||
* From information provided by | ||
* "David Miller" <[email protected]> | ||
* The bridge control register is valid for PCI header | ||
* type BRIDGE, or CARDBUS. Host to PCI controllers use | ||
* PCI header type NORMAL. | ||
*/ | ||
if (bridge | ||
&&((bridge->hdr_type == PCI_HEADER_TYPE_BRIDGE) | ||
||(bridge->hdr_type == PCI_HEADER_TYPE_CARDBUS))) { | ||
pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, | ||
&config); | ||
if (!(config & PCI_BRIDGE_CTL_VGA)) | ||
return; | ||
} | ||
bus = bus->parent; | ||
} | ||
pci_read_config_word(pdev, PCI_COMMAND, &config); | ||
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { | ||
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; | ||
printk(KERN_DEBUG "Boot video device is %s\n", pci_name(pdev)); | ||
} | ||
} | ||
DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1619,52 +1619,6 @@ static void __devinit fixup_rev1_53c810(struct pci_dev* dev) | |
} | ||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, fixup_rev1_53c810); | ||
|
||
/* | ||
* Fixup to mark boot BIOS video selected by BIOS before it changes | ||
* | ||
* From information provided by "Jon Smirl" <[email protected]> | ||
* | ||
* The standard boot ROM sequence for an x86 machine uses the BIOS | ||
* to select an initial video card for boot display. This boot video | ||
* card will have it's BIOS copied to C0000 in system RAM. | ||
* IORESOURCE_ROM_SHADOW is used to associate the boot video | ||
* card with this copy. On laptops this copy has to be used since | ||
* the main ROM may be compressed or combined with another image. | ||
* See pci_map_rom() for use of this flag. IORESOURCE_ROM_SHADOW | ||
* is marked here since the boot video device will be the only enabled | ||
* video device at this point. | ||
*/ | ||
|
||
static void __devinit fixup_video(struct pci_dev *pdev) | ||
{ | ||
struct pci_dev *bridge; | ||
struct pci_bus *bus; | ||
u16 config; | ||
|
||
if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA) | ||
return; | ||
|
||
/* Is VGA routed to us? */ | ||
bus = pdev->bus; | ||
while (bus) { | ||
bridge = bus->self; | ||
if (bridge) { | ||
pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, | ||
&config); | ||
if (!(config & PCI_BRIDGE_CTL_VGA)) | ||
return; | ||
} | ||
bus = bus->parent; | ||
} | ||
pci_read_config_word(pdev, PCI_COMMAND, &config); | ||
if (config & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { | ||
pdev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_SHADOW; | ||
printk(KERN_DEBUG "Boot video device is %s\n", pci_name(pdev)); | ||
} | ||
} | ||
DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, fixup_video); | ||
|
||
|
||
static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, struct pci_fixup *end) | ||
{ | ||
while (f < end) { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters