On Tue, Dec 30, 2014 at 10:32 AM, Simon Glass <s...@chromium.org> wrote: > This code is too x86-dependent at present. Correct it so that it can run on > big-endian machines. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > drivers/pci/pci_rom.c | 25 ++++++++++++++----------- > 1 file changed, 14 insertions(+), 11 deletions(-) > > diff --git a/drivers/pci/pci_rom.c b/drivers/pci/pci_rom.c > index 7d25cc9..86f0e95 100644 > --- a/drivers/pci/pci_rom.c > +++ b/drivers/pci/pci_rom.c > @@ -66,6 +66,7 @@ static int pci_rom_probe(pci_dev_t dev, uint class, > struct pci_rom_header *rom_header; > struct pci_rom_data *rom_data; > u16 vendor, device; > + u16 rom_vendor, rom_device; > u32 vendev; > u32 mapped_vendev; > u32 rom_address; > @@ -95,25 +96,27 @@ static int pci_rom_probe(pci_dev_t dev, uint class, > rom_header = (struct pci_rom_header *)rom_address; > > debug("PCI expansion ROM, signature %#04x, INIT size %#04x, data ptr > %#04x\n", > - le32_to_cpu(rom_header->signature), > - rom_header->size * 512, le32_to_cpu(rom_header->data)); > + le16_to_cpu(rom_header->signature), > + rom_header->size * 512, le16_to_cpu(rom_header->data)); > > - if (le32_to_cpu(rom_header->signature) != PCI_ROM_HDR) { > + if (le16_to_cpu(rom_header->signature) != PCI_ROM_HDR) { > printf("Incorrect expansion ROM header signature %04x\n", > - le32_to_cpu(rom_header->signature)); > + le16_to_cpu(rom_header->signature)); > return -EINVAL; > } > > - rom_data = (((void *)rom_header) + le32_to_cpu(rom_header->data)); > + rom_data = (((void *)rom_header) + le16_to_cpu(rom_header->data)); > + rom_vendor = le16_to_cpu(rom_data->vendor); > + rom_device = le16_to_cpu(rom_data->device); > > debug("PCI ROM image, vendor ID %04x, device ID %04x,\n", > - rom_data->vendor, rom_data->device); > + rom_vendor, rom_device); > > /* If the device id is mapped, a mismatch is expected */ > - if ((vendor != rom_data->vendor || device != rom_data->device) && > + if ((vendor != rom_vendor || device != rom_device) && > (vendev == mapped_vendev)) { > printf("ID mismatch: vendor ID %04x, device ID %04x\n", > - rom_data->vendor, rom_data->device); > + rom_vendor, rom_device); > return -EPERM; > } > > @@ -144,10 +147,10 @@ int pci_rom_load(uint16_t class, struct pci_rom_header > *rom_header, > image_size); > > rom_data = (struct pci_rom_data *)((void *)rom_header + > - le32_to_cpu(rom_header->data)); > + le16_to_cpu(rom_header->data)); > > - image_size = le32_to_cpu(rom_data->ilen) * 512; > - } while ((rom_data->type != 0) && (rom_data->indicator != 0)); > + image_size = le16_to_cpu(rom_data->ilen) * 512; > + } while ((rom_data->type != 0) && (rom_data->indicator == 0)); > > if (rom_data->type != 0) > return -EACCES; > --
Reviewed-by: Bin Meng <bmeng...@gmail.com> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot