diff options
author | Bin Meng <bmeng.cn@gmail.com> | 2015-04-24 15:48:03 +0800 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-04-29 18:51:49 -0600 |
commit | d57c2f24fc90ead0c53b06a9ae3daa1b7c44f411 (patch) | |
tree | 04913fa9e38ab712130fd7abad11e1abe9349a67 | |
parent | afbf1404c13deca6bbbc4d037e27ddde6150acd8 (diff) | |
download | talos-obmc-uboot-d57c2f24fc90ead0c53b06a9ae3daa1b7c44f411.tar.gz talos-obmc-uboot-d57c2f24fc90ead0c53b06a9ae3daa1b7c44f411.zip |
pci: Option rom class is a 24-bit number
We should pass a u32 class number to pci_rom_probe() instead of a u16.
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | drivers/pci/pci_rom.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/pci/pci_rom.c b/drivers/pci/pci_rom.c index 48c0a77fdd..49c118d74a 100644 --- a/drivers/pci/pci_rom.c +++ b/drivers/pci/pci_rom.c @@ -67,6 +67,7 @@ static int pci_rom_probe(pci_dev_t dev, uint class, struct pci_rom_data *rom_data; u16 vendor, device; u16 rom_vendor, rom_device; + u32 rom_class; u32 vendev; u32 mapped_vendev; u32 rom_address; @@ -125,13 +126,13 @@ static int pci_rom_probe(pci_dev_t dev, uint class, /* Continue anyway */ } - debug("PCI ROM image, Class Code %04x%02x, Code Type %02x\n", - rom_data->class_hi, rom_data->class_lo, rom_data->type); + rom_class = (le16_to_cpu(rom_data->class_hi) << 8) | rom_data->class_lo; + debug("PCI ROM image, Class Code %06x, Code Type %02x\n", + rom_class, rom_data->type); - if (class != ((rom_data->class_hi << 8) | rom_data->class_lo)) { - debug("Class Code mismatch ROM %08x, dev %08x\n", - (rom_data->class_hi << 8) | rom_data->class_lo, - class); + if (class != rom_class) { + debug("Class Code mismatch ROM %06x, dev %06x\n", + rom_class, class); } *hdrp = rom_header; @@ -232,17 +233,18 @@ int pci_run_vga_bios(pci_dev_t dev, int (*int15_handler)(void), int exec_method) { struct pci_rom_header *rom, *ram; int vesa_mode = -1; - uint16_t class; + uint class; bool emulate; int ret; /* Only execute VGA ROMs */ - pci_read_config_word(dev, PCI_CLASS_DEVICE, &class); - if ((class ^ PCI_CLASS_DISPLAY_VGA) & 0xff00) { + pci_read_config_dword(dev, PCI_REVISION_ID, &class); + if (((class >> 16) ^ PCI_CLASS_DISPLAY_VGA) & 0xff00) { debug("%s: Class %#x, should be %#x\n", __func__, class, PCI_CLASS_DISPLAY_VGA); return -ENODEV; } + class >>= 8; if (!should_load_oprom(dev)) return -ENXIO; |