* [Qemu-devel] Where's gpxe-eepro100-80862449.rom ? @ 2010-10-12 12:41 Markus Armbruster 2010-10-12 16:18 ` [Qemu-devel] " Stefan Weil 0 siblings, 1 reply; 43+ messages in thread From: Markus Armbruster @ 2010-10-12 12:41 UTC (permalink / raw) To: Stefan Weil; +Cc: qemu-devel Commit db667a12 added a reference to ROM file gpxe-eepro100-80862449.rom, but no such file. Intentional? ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? 2010-10-12 12:41 [Qemu-devel] Where's gpxe-eepro100-80862449.rom ? Markus Armbruster @ 2010-10-12 16:18 ` Stefan Weil 2010-10-13 7:13 ` Markus Armbruster 0 siblings, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-12 16:18 UTC (permalink / raw) To: Markus Armbruster; +Cc: qemu-devel [-- Attachment #1: Type: text/plain, Size: 1143 bytes --] Am 12.10.2010 14:41, schrieb Markus Armbruster: > Commit db667a12 added a reference to ROM file > gpxe-eepro100-80862449.rom, but no such file. Intentional? Yes. See http://lists.nongnu.org/archive/html/qemu-devel/2010-05/msg00418.html Citation from my former mail: Yes, it is missing. I did not add it for several reasons: * The new variant i82801 (which needs the missing ROM) is currently not available via model=i82801 (it can be selected by experts using other methods). * Experts can get the missing ROM from ROM-o-matic. * All three ROMs differ only in one or two bytes (device id). That's a waste of binary space (56832 bytes!). Therefore I plan to remove all but the first ROM file. The missing ones can be created by make or patched on the fly by QEMU during load. Maybe it is also possible to create ROM files which support more than one vendor/device entry - that would be the best solution. There is still nothing new regarding these last points because I did not spend any time on them. Do you think there is urgent need for a gpxe-eepro100-80862449.rom binary? [-- Attachment #2: Type: text/html, Size: 1800 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? 2010-10-12 16:18 ` [Qemu-devel] " Stefan Weil @ 2010-10-13 7:13 ` Markus Armbruster 2010-10-15 20:51 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM Stefan Weil ` (2 more replies) 0 siblings, 3 replies; 43+ messages in thread From: Markus Armbruster @ 2010-10-13 7:13 UTC (permalink / raw) To: Stefan Weil; +Cc: qemu-devel Stefan Weil <weil@mail.berlios.de> writes: > Am 12.10.2010 14:41, schrieb Markus Armbruster: >> Commit db667a12 added a reference to ROM file >> gpxe-eepro100-80862449.rom, but no such file. Intentional? > > Yes. See > http://lists.nongnu.org/archive/html/qemu-devel/2010-05/msg00418.html > > Citation from my former mail: > > Yes, it is missing. I did not add it for several reasons: > > * The new variant i82801 (which needs the missing ROM) is currently > not available > via model=i82801 (it can be selected by experts using other methods). It's available via -device i82801. -net nic,model= is obsolescent. > * Experts can get the missing ROM from ROM-o-matic. > > * All three ROMs differ only in one or two bytes (device id). That's > a waste > of binary space (56832 bytes!). Therefore I plan to remove all but > the first > ROM file. The missing ones can be created by make or patched on the > fly by > QEMU during load. Maybe it is also possible to create ROM files > which support > more than one vendor/device entry - that would be the best solution. No objections to creating by make or on load, but I'd be just fine with the duplicated ROMs. Disk space waste in the order of 100KiB is lost in the noise nowadays. My qemu/.git is >100MiB, and my build tree for all targets ~1.5GiB. > There is still nothing new regarding these last points > because I did not spend any time on them. > > Do you think there is urgent need for a gpxe-eepro100-80862449.rom binary? Well, "-device i82801" complains because it misses this binary. Do we want to ship that way? ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-13 7:13 ` Markus Armbruster @ 2010-10-15 20:51 ` Stefan Weil 2010-10-15 21:05 ` Anthony Liguori 2010-10-18 10:04 ` Gerd Hoffmann 2010-10-15 20:51 ` [Qemu-devel] [PATCH 2/2] eepro100: Use a single rom file for all i825xx devices Stefan Weil 2010-10-15 21:03 ` [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? Stefan Weil 2 siblings, 2 replies; 43+ messages in thread From: Stefan Weil @ 2010-10-15 20:51 UTC (permalink / raw) To: QEMU Developers; +Cc: Markus Armbruster, Michael S. Tsirkin PCI device with different device ids sometimes share the same rom code. Only the device id and the checksum differ in a boot rom for such devices. The i825xx ethernet controller family is a typical example which is implemented in hw/eepro100.c. It uses at least 3 different device ids, so normally 3 boot roms would be needed. By automatically patching the device id (and the checksum) in qemu, all emulated family members can share the same boot rom. Cc: Markus Armbruster <armbru@redhat.com> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Stefan Weil <weil@mail.berlios.de> --- hw/pci.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 1280d4d..c1f8218 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -1797,6 +1797,57 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p cpu_register_physical_memory(addr, size, pdev->rom_offset); } +/* Patch the PCI device id in a PCI rom image if necessary. + This is needed for an option rom which is used for more than one device. */ +static void pci_patch_device_id(PCIDevice *pdev, uint8_t *ptr, int size) +{ + uint16_t vendor_id; + uint16_t device_id; + uint16_t rom_vendor_id; + uint16_t rom_device_id; + uint16_t rom_magic; + uint16_t pcir_offset; + + /* Words in rom data are little endian (like in PCI configuration), + so they can be read / written with pci_get_word / pci_set_word. */ + + /* Only a valid rom will be patched. */ + rom_magic = pci_get_word(ptr); + if (rom_magic != 0xaa55) { + PCI_DPRINTF("Bad ROM magic %04x\n", rom_magic); + return; + } + pcir_offset = pci_get_word(ptr + 0x18); + if (pcir_offset + 8 >= size || memcmp(ptr + pcir_offset, "PCIR", 4)) { + PCI_DPRINTF("Bad PCIR offset 0x%x or signature\n", pcir_offset); + return; + } + + vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); + device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); + rom_vendor_id = pci_get_word(ptr + pcir_offset + 4); + rom_device_id = pci_get_word(ptr + pcir_offset + 6); + + /* Don't patch a rom with wrong vendor id (might be changed if needed). */ + if (vendor_id != rom_vendor_id) { + return; + } + + PCI_DPRINTF("ROM id %04x%04x / PCI id %04x%04x\n", + vendor_id, device_id, rom_vendor_id, rom_device_id); + + if (device_id != rom_device_id) { + /* Patch device id and checksum (at offset 6 for etherboot roms). */ + uint8_t checksum; + checksum = ptr[6]; + checksum += (uint8_t)rom_device_id + (uint8_t)(rom_device_id >> 8); + checksum -= (uint8_t)device_id + (uint8_t)(device_id >> 8); + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); + ptr[6] = checksum; + pci_set_word(ptr + pcir_offset + 6, device_id); + } +} + /* Add an option rom for the device */ static int pci_add_option_rom(PCIDevice *pdev) { @@ -1849,6 +1900,8 @@ static int pci_add_option_rom(PCIDevice *pdev) load_image(path, ptr); qemu_free(path); + pci_patch_device_id(pdev, ptr, size); + pci_register_bar(pdev, PCI_ROM_SLOT, size, 0, pci_map_option_rom); -- 1.7.1 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-15 20:51 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM Stefan Weil @ 2010-10-15 21:05 ` Anthony Liguori 2010-10-18 10:09 ` Gerd Hoffmann 2010-10-18 10:04 ` Gerd Hoffmann 1 sibling, 1 reply; 43+ messages in thread From: Anthony Liguori @ 2010-10-15 21:05 UTC (permalink / raw) To: Stefan Weil Cc: Kevin Wolf, Michael S. Tsirkin, seabios, QEMU Developers, Markus Armbruster On 10/15/2010 03:51 PM, Stefan Weil wrote: > PCI device with different device ids sometimes share > the same rom code. Only the device id and the checksum > differ in a boot rom for such devices. > BTW, SeaBIOS doesn't reject ROMs when they're loaded via rombar, only when they're loaded via romfile. Maybe it's better to use fw_cfg to explicitly tell SeaBIOS to ignore the PCI device id in the rom header for a certain device? Regards, Anthony Liguori > The i825xx ethernet controller family is a typical example > which is implemented in hw/eepro100.c. It uses at least > 3 different device ids, so normally 3 boot roms would be needed. > > By automatically patching the device id (and the checksum) > in qemu, all emulated family members can share the same > boot rom. > > Cc: Markus Armbruster<armbru@redhat.com> > Cc: Michael S. Tsirkin<mst@redhat.com> > Signed-off-by: Stefan Weil<weil@mail.berlios.de> > --- > hw/pci.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 53 insertions(+), 0 deletions(-) > > diff --git a/hw/pci.c b/hw/pci.c > index 1280d4d..c1f8218 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -1797,6 +1797,57 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p > cpu_register_physical_memory(addr, size, pdev->rom_offset); > } > > +/* Patch the PCI device id in a PCI rom image if necessary. > + This is needed for an option rom which is used for more than one device. */ > +static void pci_patch_device_id(PCIDevice *pdev, uint8_t *ptr, int size) > +{ > + uint16_t vendor_id; > + uint16_t device_id; > + uint16_t rom_vendor_id; > + uint16_t rom_device_id; > + uint16_t rom_magic; > + uint16_t pcir_offset; > + > + /* Words in rom data are little endian (like in PCI configuration), > + so they can be read / written with pci_get_word / pci_set_word. */ > + > + /* Only a valid rom will be patched. */ > + rom_magic = pci_get_word(ptr); > + if (rom_magic != 0xaa55) { > + PCI_DPRINTF("Bad ROM magic %04x\n", rom_magic); > + return; > + } > + pcir_offset = pci_get_word(ptr + 0x18); > + if (pcir_offset + 8>= size || memcmp(ptr + pcir_offset, "PCIR", 4)) { > + PCI_DPRINTF("Bad PCIR offset 0x%x or signature\n", pcir_offset); > + return; > + } > + > + vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); > + device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); > + rom_vendor_id = pci_get_word(ptr + pcir_offset + 4); > + rom_device_id = pci_get_word(ptr + pcir_offset + 6); > + > + /* Don't patch a rom with wrong vendor id (might be changed if needed). */ > + if (vendor_id != rom_vendor_id) { > + return; > + } > + > + PCI_DPRINTF("ROM id %04x%04x / PCI id %04x%04x\n", > + vendor_id, device_id, rom_vendor_id, rom_device_id); > + > + if (device_id != rom_device_id) { > + /* Patch device id and checksum (at offset 6 for etherboot roms). */ > + uint8_t checksum; > + checksum = ptr[6]; > + checksum += (uint8_t)rom_device_id + (uint8_t)(rom_device_id>> 8); > + checksum -= (uint8_t)device_id + (uint8_t)(device_id>> 8); > + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); > + ptr[6] = checksum; > + pci_set_word(ptr + pcir_offset + 6, device_id); > + } > +} > + > /* Add an option rom for the device */ > static int pci_add_option_rom(PCIDevice *pdev) > { > @@ -1849,6 +1900,8 @@ static int pci_add_option_rom(PCIDevice *pdev) > load_image(path, ptr); > qemu_free(path); > > + pci_patch_device_id(pdev, ptr, size); > + > pci_register_bar(pdev, PCI_ROM_SLOT, size, > 0, pci_map_option_rom); > > ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-15 21:05 ` Anthony Liguori @ 2010-10-18 10:09 ` Gerd Hoffmann 2010-10-18 18:39 ` Anthony Liguori 0 siblings, 1 reply; 43+ messages in thread From: Gerd Hoffmann @ 2010-10-18 10:09 UTC (permalink / raw) To: Anthony Liguori Cc: Kevin Wolf, Michael S. Tsirkin, seabios, QEMU Developers, Markus Armbruster On 10/15/10 23:05, Anthony Liguori wrote: > On 10/15/2010 03:51 PM, Stefan Weil wrote: >> PCI device with different device ids sometimes share >> the same rom code. Only the device id and the checksum >> differ in a boot rom for such devices. > > BTW, SeaBIOS doesn't reject ROMs when they're loaded via rombar, only > when they're loaded via romfile. SeaBIOS rejects them when loaded from the rom bar and doesn't reject them when loaded via fw_cfg. Using the rom bar is the prefered way though, fw_cfg is only there for compatibility with older versions. > Maybe it's better to use fw_cfg to explicitly tell SeaBIOS to ignore the > PCI device id in the rom header for a certain device? Patching the rom is fine IMHO. Why create + use a separate communication path when we can use a much simpler approach? cheers, Gerd ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 10:09 ` Gerd Hoffmann @ 2010-10-18 18:39 ` Anthony Liguori 2010-10-21 10:09 ` [SeaBIOS] " Avi Kivity 0 siblings, 1 reply; 43+ messages in thread From: Anthony Liguori @ 2010-10-18 18:39 UTC (permalink / raw) To: Gerd Hoffmann Cc: Kevin Wolf, Michael S. Tsirkin, seabios, QEMU Developers, Markus Armbruster On 10/18/2010 05:09 AM, Gerd Hoffmann wrote: > On 10/15/10 23:05, Anthony Liguori wrote: >> On 10/15/2010 03:51 PM, Stefan Weil wrote: >>> PCI device with different device ids sometimes share >>> the same rom code. Only the device id and the checksum >>> differ in a boot rom for such devices. >> >> BTW, SeaBIOS doesn't reject ROMs when they're loaded via rombar, only >> when they're loaded via romfile. > > SeaBIOS rejects them when loaded from the rom bar and doesn't reject > them when loaded via fw_cfg. What I meant was, rombar=0 in qdev. Sometimes my fingers don't work the same way my brain does :-) > Using the rom bar is the prefered way though, fw_cfg is only there for > compatibility with older versions. > >> Maybe it's better to use fw_cfg to explicitly tell SeaBIOS to ignore the >> PCI device id in the rom header for a certain device? > > Patching the rom is fine IMHO. Why create + use a separate > communication path when we can use a much simpler approach? How does this interact with PCI device passthrough? We clearly can't patch in that case whereas if we had a hint to SeaBIOS, it would still work. Regards, Anthony Liguori > cheers, > Gerd > ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [SeaBIOS] [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 18:39 ` Anthony Liguori @ 2010-10-21 10:09 ` Avi Kivity 2010-10-21 13:14 ` Anthony Liguori 0 siblings, 1 reply; 43+ messages in thread From: Avi Kivity @ 2010-10-21 10:09 UTC (permalink / raw) To: Anthony Liguori Cc: Kevin Wolf, Michael S. Tsirkin, seabios, Markus Armbruster, QEMU Developers, Gerd Hoffmann On 10/18/2010 08:39 PM, Anthony Liguori wrote: >> SeaBIOS rejects them when loaded from the rom bar and doesn't reject >> them when loaded via fw_cfg. > > > What I meant was, rombar=0 in qdev. Sometimes my fingers don't work > the same way my brain does :-) Are you using qmp or the human monitor protocol? -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [SeaBIOS] [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-21 10:09 ` [SeaBIOS] " Avi Kivity @ 2010-10-21 13:14 ` Anthony Liguori 2010-10-21 15:34 ` Avi Kivity 0 siblings, 1 reply; 43+ messages in thread From: Anthony Liguori @ 2010-10-21 13:14 UTC (permalink / raw) To: Avi Kivity Cc: Kevin Wolf, Michael S. Tsirkin, seabios, Markus Armbruster, QEMU Developers, Gerd Hoffmann On 10/21/2010 05:09 AM, Avi Kivity wrote: > On 10/18/2010 08:39 PM, Anthony Liguori wrote: >>> SeaBIOS rejects them when loaded from the rom bar and doesn't reject >>> them when loaded via fw_cfg. >> >> >> What I meant was, rombar=0 in qdev. Sometimes my fingers don't work >> the same way my brain does :-) > > > Are you using qmp or the human monitor protocol? I'm still running on a DCE/RPC implementation from the early 80s. Regards, Anthony Liguori ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [SeaBIOS] [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-21 13:14 ` Anthony Liguori @ 2010-10-21 15:34 ` Avi Kivity 0 siblings, 0 replies; 43+ messages in thread From: Avi Kivity @ 2010-10-21 15:34 UTC (permalink / raw) To: Anthony Liguori Cc: Kevin Wolf, Michael S. Tsirkin, seabios, QEMU Developers, Markus Armbruster On 10/21/2010 03:14 PM, Anthony Liguori wrote: > On 10/21/2010 05:09 AM, Avi Kivity wrote: >> On 10/18/2010 08:39 PM, Anthony Liguori wrote: >>>> SeaBIOS rejects them when loaded from the rom bar and doesn't >>>> reject them when loaded via fw_cfg. >>> >>> >>> What I meant was, rombar=0 in qdev. Sometimes my fingers don't work >>> the same way my brain does :-) >> >> >> Are you using qmp or the human monitor protocol? > > I'm still running on a DCE/RPC implementation from the early 80s. > Well, I hope you keep it up to date. I wouldn't want a vulnerability inserted into qemu by an attacker controlling a maintainer's hands. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-15 20:51 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM Stefan Weil 2010-10-15 21:05 ` Anthony Liguori @ 2010-10-18 10:04 ` Gerd Hoffmann 2010-10-18 11:16 ` Stefan Weil 1 sibling, 1 reply; 43+ messages in thread From: Gerd Hoffmann @ 2010-10-18 10:04 UTC (permalink / raw) To: Stefan Weil; +Cc: Michael S. Tsirkin, QEMU Developers, Markus Armbruster Hi, > + /* Don't patch a rom with wrong vendor id (might be changed if needed). */ > + if (vendor_id != rom_vendor_id) { > + return; > + } Yes, please drop that one. If this is accepted I'd like to use this for vga roms too, so we have to carry only two of them instead of four. > + if (device_id != rom_device_id) { > + /* Patch device id and checksum (at offset 6 for etherboot roms). */ Does this offset work for all roms? > /* Add an option rom for the device */ > static int pci_add_option_rom(PCIDevice *pdev) > { > @@ -1849,6 +1900,8 @@ static int pci_add_option_rom(PCIDevice *pdev) > load_image(path, ptr); > qemu_free(path); > > + pci_patch_device_id(pdev, ptr, size); > + I'd prefer this being opt-in per driver instead of being applied globally (and maybe also pass in a flag whenever a vendor mismatch is fine or not). cheers, Gerd ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 10:04 ` Gerd Hoffmann @ 2010-10-18 11:16 ` Stefan Weil 2010-10-18 11:54 ` Gerd Hoffmann 0 siblings, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-18 11:16 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: Michael S. Tsirkin, QEMU Developers, Markus Armbruster Am 18.10.2010 12:04, schrieb Gerd Hoffmann: > Hi, > >> + /* Don't patch a rom with wrong vendor id (might be changed if >> needed). */ >> + if (vendor_id != rom_vendor_id) { >> + return; >> + } > > Yes, please drop that one. If this is accepted I'd like to use this for > vga roms too, so we have to carry only two of them instead of four. > >> + if (device_id != rom_device_id) { >> + /* Patch device id and checksum (at offset 6 for etherboot >> roms). */ > > Does this offset work for all roms? As far as I know there is no well-defined checksum offset. The checksum is simply set by modifying any byte (which normally should be unused). Etherboot has some unused bytes at the beginning of rom data and always uses the same offset 6. For other roms which also don't use the byte at offset 6, this approach will work, too. If they store code or vital data at that location, we destroy that data, so it won't work. The VGA bios roms have a sequence of several bytes of zero starting at offset 6, so maybe this data is not important and we may change the byte at offset 6, but that should be checked before using this mechanism. > >> /* Add an option rom for the device */ >> static int pci_add_option_rom(PCIDevice *pdev) >> { >> @@ -1849,6 +1900,8 @@ static int pci_add_option_rom(PCIDevice *pdev) >> load_image(path, ptr); >> qemu_free(path); >> >> + pci_patch_device_id(pdev, ptr, size); >> + > > I'd prefer this being opt-in per driver instead of being applied > globally (and maybe also pass in a flag whenever a vendor mismatch is > fine or not). > > cheers, > Gerd As long as the driver specifies the romfile name, we get an implicitly defined behaviour: either the rom matches and nothing special is done, or it doesn't and the id(s) will be fixed. So neither flag nor opt-in seems to be needed. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 11:16 ` Stefan Weil @ 2010-10-18 11:54 ` Gerd Hoffmann 2010-10-18 13:16 ` Stefan Weil 0 siblings, 1 reply; 43+ messages in thread From: Gerd Hoffmann @ 2010-10-18 11:54 UTC (permalink / raw) To: Stefan Weil; +Cc: Markus Armbruster, QEMU Developers, Michael S. Tsirkin Hi, > As far as I know there is no well-defined checksum offset. > The checksum is simply set by modifying any byte (which > normally should be unused). > > Etherboot has some unused bytes at the beginning of rom data > and always uses the same offset 6. Ah, so you don't actually update the checksum but change some unused byte to make the checksum stay the same, right? > For other roms which also don't use the byte at offset 6, this approach > will work, too. If they store code or vital data at that location, > we destroy that data, so it won't work. > > The VGA bios roms have a sequence of several bytes of zero > starting at offset 6, so maybe this data is not important and > we may change the byte at offset 6, but that should be checked > before using this mechanism. From vgabios: .org 0 vgabios_start: .byte 0x55, 0xaa /* BIOS signature */ .byte 0x40 /* BIOS extension length */ vgabios_entry_point: jmp vgabios_init_func From seabios: struct rom_header { u16 signature; u8 size; u8 initVector[4]; u8 reserved[17]; u16 pcioffset; u16 pnpoffset; } PACKED; Hmm. So offset 6 is the last byte of initVector. If (and only if) you happen to know that the jump instruction takes 3 bytes only it is save to modify the unused 4th byte. Seems to be true for both vgabios and etherboot/gPXE. We can't assume this in general, although it is quite likely given that there hardly would be anything but a 16bit jump. > As long as the driver specifies the romfile name, > we get an implicitly defined behaviour: either the > rom matches and nothing special is done, or it doesn't > and the id(s) will be fixed. > So neither flag nor opt-in seems to be needed. When following this argumentation the vendor id sanity check shouldn't be there in the first place ;) Note that romfile is a pci bus property, so it isn't fully under the drivers control because it can be overridden from the command line for every pci device. cheers, Gerd ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 11:54 ` Gerd Hoffmann @ 2010-10-18 13:16 ` Stefan Weil 2010-10-18 13:30 ` Gerd Hoffmann 0 siblings, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-18 13:16 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: Markus Armbruster, QEMU Developers, Michael S. Tsirkin Hi, Am 18.10.2010 13:54, schrieb Gerd Hoffmann: > Hi, > >> As far as I know there is no well-defined checksum offset. >> The checksum is simply set by modifying any byte (which >> normally should be unused). >> >> Etherboot has some unused bytes at the beginning of rom data >> and always uses the same offset 6. > > Ah, so you don't actually update the checksum but change some unused > byte to make the checksum stay the same, right? Right. The sum of all bytes modulo 255 must be 0. Any byte can be modified to achieve this. > >> For other roms which also don't use the byte at offset 6, this approach >> will work, too. If they store code or vital data at that location, >> we destroy that data, so it won't work. >> >> The VGA bios roms have a sequence of several bytes of zero >> starting at offset 6, so maybe this data is not important and >> we may change the byte at offset 6, but that should be checked >> before using this mechanism. > > From vgabios: > > .org 0 > > vgabios_start: > .byte 0x55, 0xaa /* BIOS signature */ > .byte 0x40 /* BIOS extension length */ > > vgabios_entry_point: > jmp vgabios_init_func > > From seabios: > > struct rom_header { > u16 signature; > u8 size; > u8 initVector[4]; > u8 reserved[17]; > u16 pcioffset; > u16 pnpoffset; > } PACKED; > > Hmm. So offset 6 is the last byte of initVector. If (and only if) > you happen to know that the jump instruction takes 3 bytes only it is > save to modify the unused 4th byte. Seems to be true for both vgabios > and etherboot/gPXE. We can't assume this in general, although it is > quite likely given that there hardly would be anything but a 16bit jump. I agree. So it would work with vga bios, too. It looks like vgabios uses the last byte to fix the checksum (rom data ends with a sequence of 0xff, only last byte is different). > >> As long as the driver specifies the romfile name, >> we get an implicitly defined behaviour: either the >> rom matches and nothing special is done, or it doesn't >> and the id(s) will be fixed. > >> So neither flag nor opt-in seems to be needed. > > When following this argumentation the vendor id sanity check shouldn't > be there in the first place ;) The sanity check is simply there because I had no test case which patches the vendor id. How could I test with vga bios? > > Note that romfile is a pci bus property, so it isn't fully under the > drivers control because it can be overridden from the command line for > every pci device. Maybe this is an argument why the driver should not include any flags for id patching. A user who overrides the rom name from the command line should know what she/he does. > > cheers, > Gerd > Regards, Stefan ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 13:16 ` Stefan Weil @ 2010-10-18 13:30 ` Gerd Hoffmann 2010-10-18 15:50 ` Gerd Hoffmann 0 siblings, 1 reply; 43+ messages in thread From: Gerd Hoffmann @ 2010-10-18 13:30 UTC (permalink / raw) To: Stefan Weil; +Cc: Markus Armbruster, QEMU Developers, Michael S. Tsirkin Hi, >> When following this argumentation the vendor id sanity check shouldn't >> be there in the first place ;) > > The sanity check is simply there because I had no test case > which patches the vendor id. How could I test with vga bios? No trivial way as the vgabios needs to be patched to handle that. The vgabios searches for its hardware, right now the IDs are compile-time constants (same constants are compiled into the pci header). Needs to be changed to lookup the ID at runtime in the pci header. cheers, Gerd ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 13:30 ` Gerd Hoffmann @ 2010-10-18 15:50 ` Gerd Hoffmann 2010-10-18 17:54 ` Stefan Weil 2010-10-18 17:55 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and " Stefan Weil 0 siblings, 2 replies; 43+ messages in thread From: Gerd Hoffmann @ 2010-10-18 15:50 UTC (permalink / raw) To: Stefan Weil; +Cc: Markus Armbruster, QEMU Developers, Michael S. Tsirkin On 10/18/10 15:30, Gerd Hoffmann wrote: > Hi, > >>> When following this argumentation the vendor id sanity check shouldn't >>> be there in the first place ;) >> >> The sanity check is simply there because I had no test case >> which patches the vendor id. How could I test with vga bios? > > No trivial way as the vgabios needs to be patched to handle that. patchrom branches available now: http://cgit.freedesktop.org/~kraxel/vgabios/log/ http://cgit.freedesktop.org/spice/qemu/log/?h=patchrom very short instructions: (1) fetch+compile vgabios, copy new vgabios-pci binary so qemu can find it. (2) fetch qemu, apply/merge id patching, compile qemu (3) both standard and vmware vga should happily work with the same vgabios binary now, including vesa graphic modes. cheers, Gerd ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM 2010-10-18 15:50 ` Gerd Hoffmann @ 2010-10-18 17:54 ` Stefan Weil 2010-10-18 17:55 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and " Stefan Weil 1 sibling, 0 replies; 43+ messages in thread From: Stefan Weil @ 2010-10-18 17:54 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: Markus Armbruster, QEMU Developers, Michael S. Tsirkin Am 18.10.2010 17:50, schrieb Gerd Hoffmann: > On 10/18/10 15:30, Gerd Hoffmann wrote: >> Hi, >> >>>> When following this argumentation the vendor id sanity check shouldn't >>>> be there in the first place ;) >>> >>> The sanity check is simply there because I had no test case >>> which patches the vendor id. How could I test with vga bios? >> >> No trivial way as the vgabios needs to be patched to handle that. > > patchrom branches available now: > > http://cgit.freedesktop.org/~kraxel/vgabios/log/ > http://cgit.freedesktop.org/spice/qemu/log/?h=patchrom > > very short instructions: > > (1) fetch+compile vgabios, copy new vgabios-pci binary > so qemu can find it. > (2) fetch qemu, apply/merge id patching, compile qemu > (3) both standard and vmware vga should happily work > with the same vgabios binary now, including vesa > graphic modes. > > cheers, > Gerd > Hi Gerd, a new patch which also modifies the vendor id will follow immediately. Perhaps you can try it with your modified vga bios. Cheers, Stefan ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 15:50 ` Gerd Hoffmann 2010-10-18 17:54 ` Stefan Weil @ 2010-10-18 17:55 ` Stefan Weil 2010-10-18 17:58 ` [Qemu-devel] " Michael S. Tsirkin 2010-10-18 18:44 ` [Qemu-devel] " Anthony Liguori 1 sibling, 2 replies; 43+ messages in thread From: Stefan Weil @ 2010-10-18 17:55 UTC (permalink / raw) To: QEMU Developers; +Cc: Michael S. Tsirkin, Gerd Hoffmann, Markus Armbruster PCI devices with different vendor or device ids sometimes share the same rom code. Only the ids and the checksum differs in a boot rom for such devices. The i825xx ethernet controller family is a typical example which is implemented in hw/eepro100.c. It uses at least 3 different device ids, so normally 3 boot roms would be needed. By automatically patching vendor id and device id (and the checksum) in qemu, all emulated family members can share the same boot rom. VGA bios roms are another example with different vendor and device ids. v2: * Patch also the vendor id (and remove the sanity check for vendor id). Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Markus Armbruster <armbru@redhat.com> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Stefan Weil <weil@mail.berlios.de> --- hw/pci.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 58 insertions(+), 0 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 1280d4d..139eb24 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -1797,6 +1797,62 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p cpu_register_physical_memory(addr, size, pdev->rom_offset); } +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. + This is needed for an option rom which is used for more than one device. */ +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) +{ + uint16_t vendor_id; + uint16_t device_id; + uint16_t rom_vendor_id; + uint16_t rom_device_id; + uint16_t rom_magic; + uint16_t pcir_offset; + uint8_t checksum; + + /* Words in rom data are little endian (like in PCI configuration), + so they can be read / written with pci_get_word / pci_set_word. */ + + /* Only a valid rom will be patched. */ + rom_magic = pci_get_word(ptr); + if (rom_magic != 0xaa55) { + PCI_DPRINTF("Bad ROM magic %04x\n", rom_magic); + return; + } + pcir_offset = pci_get_word(ptr + 0x18); + if (pcir_offset + 8 >= size || memcmp(ptr + pcir_offset, "PCIR", 4)) { + PCI_DPRINTF("Bad PCIR offset 0x%x or signature\n", pcir_offset); + return; + } + + vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); + device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); + rom_vendor_id = pci_get_word(ptr + pcir_offset + 4); + rom_device_id = pci_get_word(ptr + pcir_offset + 6); + + PCI_DPRINTF("ROM id %04x%04x / PCI id %04x%04x\n", + vendor_id, device_id, rom_vendor_id, rom_device_id); + + checksum = ptr[6]; + + if (vendor_id != rom_vendor_id) { + /* Patch vendor id and checksum (at offset 6 for etherboot roms). */ + checksum += (uint8_t)rom_vendor_id + (uint8_t)(rom_vendor_id >> 8); + checksum -= (uint8_t)vendor_id + (uint8_t)(vendor_id >> 8); + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); + ptr[6] = checksum; + pci_set_word(ptr + pcir_offset + 4, vendor_id); + } + + if (device_id != rom_device_id) { + /* Patch device id and checksum (at offset 6 for etherboot roms). */ + checksum += (uint8_t)rom_device_id + (uint8_t)(rom_device_id >> 8); + checksum -= (uint8_t)device_id + (uint8_t)(device_id >> 8); + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); + ptr[6] = checksum; + pci_set_word(ptr + pcir_offset + 6, device_id); + } +} + /* Add an option rom for the device */ static int pci_add_option_rom(PCIDevice *pdev) { @@ -1849,6 +1905,8 @@ static int pci_add_option_rom(PCIDevice *pdev) load_image(path, ptr); qemu_free(path); + pci_patch_ids(pdev, ptr, size); + pci_register_bar(pdev, PCI_ROM_SLOT, size, 0, pci_map_option_rom); -- 1.7.1 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 17:55 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and " Stefan Weil @ 2010-10-18 17:58 ` Michael S. Tsirkin 2010-10-18 18:42 ` Anthony Liguori 2010-10-18 18:44 ` [Qemu-devel] " Anthony Liguori 1 sibling, 1 reply; 43+ messages in thread From: Michael S. Tsirkin @ 2010-10-18 17:58 UTC (permalink / raw) To: Stefan Weil; +Cc: Markus Armbruster, QEMU Developers, Gerd Hoffmann On Mon, Oct 18, 2010 at 07:55:11PM +0200, Stefan Weil wrote: > PCI devices with different vendor or device ids sometimes share > the same rom code. Only the ids and the checksum > differs in a boot rom for such devices. > > The i825xx ethernet controller family is a typical example > which is implemented in hw/eepro100.c. It uses at least > 3 different device ids, so normally 3 boot roms would be needed. > > By automatically patching vendor id and device id (and the checksum) > in qemu, all emulated family members can share the same boot rom. > > VGA bios roms are another example with different vendor and device ids. > > v2: > > * Patch also the vendor id (and remove the sanity check for vendor id). > > Cc: Gerd Hoffmann <kraxel@redhat.com> > Cc: Markus Armbruster <armbru@redhat.com> > Cc: Michael S. Tsirkin <mst@redhat.com> > Signed-off-by: Stefan Weil <weil@mail.berlios.de> > --- > hw/pci.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 58 insertions(+), 0 deletions(-) > > diff --git a/hw/pci.c b/hw/pci.c > index 1280d4d..139eb24 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -1797,6 +1797,62 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p > cpu_register_physical_memory(addr, size, pdev->rom_offset); > } > > +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. > + This is needed for an option rom which is used for more than one device. */ > +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) let's return an error code on malformed roms so management can detect errors? ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 17:58 ` [Qemu-devel] " Michael S. Tsirkin @ 2010-10-18 18:42 ` Anthony Liguori 2010-10-18 19:03 ` Michael S. Tsirkin 0 siblings, 1 reply; 43+ messages in thread From: Anthony Liguori @ 2010-10-18 18:42 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: Gerd Hoffmann, Markus Armbruster, QEMU Developers On 10/18/2010 12:58 PM, Michael S. Tsirkin wrote: > On Mon, Oct 18, 2010 at 07:55:11PM +0200, Stefan Weil wrote: > >> PCI devices with different vendor or device ids sometimes share >> the same rom code. Only the ids and the checksum >> differs in a boot rom for such devices. >> >> The i825xx ethernet controller family is a typical example >> which is implemented in hw/eepro100.c. It uses at least >> 3 different device ids, so normally 3 boot roms would be needed. >> >> By automatically patching vendor id and device id (and the checksum) >> in qemu, all emulated family members can share the same boot rom. >> >> VGA bios roms are another example with different vendor and device ids. >> >> v2: >> >> * Patch also the vendor id (and remove the sanity check for vendor id). >> >> Cc: Gerd Hoffmann<kraxel@redhat.com> >> Cc: Markus Armbruster<armbru@redhat.com> >> Cc: Michael S. Tsirkin<mst@redhat.com> >> Signed-off-by: Stefan Weil<weil@mail.berlios.de> >> --- >> hw/pci.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 58 insertions(+), 0 deletions(-) >> >> diff --git a/hw/pci.c b/hw/pci.c >> index 1280d4d..139eb24 100644 >> --- a/hw/pci.c >> +++ b/hw/pci.c >> @@ -1797,6 +1797,62 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p >> cpu_register_physical_memory(addr, size, pdev->rom_offset); >> } >> >> +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. >> + This is needed for an option rom which is used for more than one device. */ >> +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) >> > let's return an error code on malformed roms so management can detect errors? > A bad/missing PnP header does not mean it's an invalid ROM. Regards, Anthony Liguori ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 18:42 ` Anthony Liguori @ 2010-10-18 19:03 ` Michael S. Tsirkin 2010-10-18 19:36 ` Stefan Weil 2010-10-18 19:56 ` Anthony Liguori 0 siblings, 2 replies; 43+ messages in thread From: Michael S. Tsirkin @ 2010-10-18 19:03 UTC (permalink / raw) To: Anthony Liguori; +Cc: Gerd Hoffmann, Markus Armbruster, QEMU Developers On Mon, Oct 18, 2010 at 01:42:06PM -0500, Anthony Liguori wrote: > >>+/* Patch the PCI vendor and device ids in a PCI rom image if necessary. > >>+ This is needed for an option rom which is used for more than one device. */ > >>+static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) > >let's return an error code on malformed roms so management can detect errors? > > A bad/missing PnP header does not mean it's an invalid ROM. I don't see this as a generic capability - rather a specific hack that helps reduce some duplication for eepro100 and friends. As such, if we can't patch the id we know it's an invalid file. -- MST ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 19:03 ` Michael S. Tsirkin @ 2010-10-18 19:36 ` Stefan Weil 2010-10-18 19:59 ` Anthony Liguori 2010-10-19 6:40 ` Gerd Hoffmann 2010-10-18 19:56 ` Anthony Liguori 1 sibling, 2 replies; 43+ messages in thread From: Stefan Weil @ 2010-10-18 19:36 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: Gerd Hoffmann, Markus Armbruster, QEMU Developers Am 18.10.2010 21:03, schrieb Michael S. Tsirkin: > On Mon, Oct 18, 2010 at 01:42:06PM -0500, Anthony Liguori wrote: >>>> +/* Patch the PCI vendor and device ids in a PCI rom image if >>>> necessary. >>>> + This is needed for an option rom which is used for more than one >>>> device. */ >>>> +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) >>> let's return an error code on malformed roms so management can >>> detect errors? >> >> A bad/missing PnP header does not mean it's an invalid ROM. > > I don't see this as a generic capability - rather a specific > hack that helps reduce some duplication for eepro100 and friends. > As such, if we can't patch the id we know it's an invalid file. There is already some kind of error feedback: the rom will not work. For etherboot roms, booting from network won't work. This is a qemu internal error, so more error handling is not needed. Users who configure a device with their own rom file don't need an id patch, and their rom data will not be patched because they normally specify a rom file with correct ids. For the rare case where they configure a rom with a "wrong" id, their rom data will be patched (something they don't expect) or not modified because of the sanity checks (then the rom is ignored by the bios). Maybe a more perfect solution would only patch the preconfigured rom files but not user configured files, but I don't think we need this degree of perfection. Regards, Stefan ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 19:36 ` Stefan Weil @ 2010-10-18 19:59 ` Anthony Liguori 2010-10-19 6:40 ` Gerd Hoffmann 1 sibling, 0 replies; 43+ messages in thread From: Anthony Liguori @ 2010-10-18 19:59 UTC (permalink / raw) To: Stefan Weil Cc: QEMU Developers, Gerd Hoffmann, Markus Armbruster, Michael S. Tsirkin On 10/18/2010 02:36 PM, Stefan Weil wrote: > Maybe a more perfect solution would only patch the preconfigured > rom files but not user configured files, but I don't think we > need this degree of perfection. Generally speaking, patching third-party code is not something that we should get in the habit of doing unless we're very very sure that it's okay and we have as many checks in place as possible to avoid bad things from happening. There are so many bad things that can happen. If attempted to support attestation in QEMU and prepopulated a virtual TPM with checksums from the BIOS and ROMs, when the virtual BIOS attempts to measure itself if we've patched the ROM underneath of it, then the measurements will fail. In the very least, if we go this route, it has to be an optional feature. Regards, Anthony Liguori > Regards, > Stefan > ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 19:36 ` Stefan Weil 2010-10-18 19:59 ` Anthony Liguori @ 2010-10-19 6:40 ` Gerd Hoffmann 1 sibling, 0 replies; 43+ messages in thread From: Gerd Hoffmann @ 2010-10-19 6:40 UTC (permalink / raw) To: Stefan Weil; +Cc: QEMU Developers, Markus Armbruster, Michael S. Tsirkin On 10/18/10 21:36, Stefan Weil wrote: > There is already some kind of error feedback: the rom will not work. > For etherboot roms, booting from network won't work. VGA works, after hacking the vgabios to not have the PCI ID hardcoded elsewhere. Nevertheless /me gets the feeling that we better should not take that route. vgabios needs special patching to work. etherboot does not work as-is. Even if we make it work now it always will be fragile. The next rom update might break it again. The ID automagically adapting doesn't happen on real hardware ... cheers, Gerd ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 19:03 ` Michael S. Tsirkin 2010-10-18 19:36 ` Stefan Weil @ 2010-10-18 19:56 ` Anthony Liguori 1 sibling, 0 replies; 43+ messages in thread From: Anthony Liguori @ 2010-10-18 19:56 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: Gerd Hoffmann, Markus Armbruster, QEMU Developers On 10/18/2010 02:03 PM, Michael S. Tsirkin wrote: > On Mon, Oct 18, 2010 at 01:42:06PM -0500, Anthony Liguori wrote: > >>>> +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. >>>> + This is needed for an option rom which is used for more than one device. */ >>>> +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) >>>> >>> let's return an error code on malformed roms so management can detect errors? >>> >> A bad/missing PnP header does not mean it's an invalid ROM. >> > I don't see this as a generic capability - rather a specific > hack that helps reduce some duplication for eepro100 and friends. > As such, if we can't patch the id we know it's an invalid file. > This code is unconditional in the pci option rom loading path. If it's restricted to a qdev property that's defaulted to enabled for the eepro cards, that would be a reasonable argument to make. Regards, Anthony Liguori ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 17:55 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and " Stefan Weil 2010-10-18 17:58 ` [Qemu-devel] " Michael S. Tsirkin @ 2010-10-18 18:44 ` Anthony Liguori 2010-10-18 18:53 ` Anthony Liguori 1 sibling, 1 reply; 43+ messages in thread From: Anthony Liguori @ 2010-10-18 18:44 UTC (permalink / raw) To: Stefan Weil Cc: Markus Armbruster, Gerd Hoffmann, QEMU Developers, Michael S. Tsirkin On 10/18/2010 12:55 PM, Stefan Weil wrote: > PCI devices with different vendor or device ids sometimes share > the same rom code. Only the ids and the checksum > differs in a boot rom for such devices. > > The i825xx ethernet controller family is a typical example > which is implemented in hw/eepro100.c. It uses at least > 3 different device ids, so normally 3 boot roms would be needed. > > By automatically patching vendor id and device id (and the checksum) > in qemu, all emulated family members can share the same boot rom. > > VGA bios roms are another example with different vendor and device ids. > > v2: > > * Patch also the vendor id (and remove the sanity check for vendor id). > > Cc: Gerd Hoffmann<kraxel@redhat.com> > Cc: Markus Armbruster<armbru@redhat.com> > Cc: Michael S. Tsirkin<mst@redhat.com> > Signed-off-by: Stefan Weil<weil@mail.berlios.de> > I get very nervous about patching a ROM. Who's to say that the ROM doesn't somehow depend on the contents of its header? Maybe it has an internal CRC built into it or something like that. Regards, Anthony Liguori > --- > hw/pci.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 58 insertions(+), 0 deletions(-) > > diff --git a/hw/pci.c b/hw/pci.c > index 1280d4d..139eb24 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -1797,6 +1797,62 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p > cpu_register_physical_memory(addr, size, pdev->rom_offset); > } > > +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. > + This is needed for an option rom which is used for more than one device. */ > +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) > +{ > + uint16_t vendor_id; > + uint16_t device_id; > + uint16_t rom_vendor_id; > + uint16_t rom_device_id; > + uint16_t rom_magic; > + uint16_t pcir_offset; > + uint8_t checksum; > + > + /* Words in rom data are little endian (like in PCI configuration), > + so they can be read / written with pci_get_word / pci_set_word. */ > + > + /* Only a valid rom will be patched. */ > + rom_magic = pci_get_word(ptr); > + if (rom_magic != 0xaa55) { > + PCI_DPRINTF("Bad ROM magic %04x\n", rom_magic); > + return; > + } > + pcir_offset = pci_get_word(ptr + 0x18); > + if (pcir_offset + 8>= size || memcmp(ptr + pcir_offset, "PCIR", 4)) { > + PCI_DPRINTF("Bad PCIR offset 0x%x or signature\n", pcir_offset); > + return; > + } > + > + vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); > + device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); > + rom_vendor_id = pci_get_word(ptr + pcir_offset + 4); > + rom_device_id = pci_get_word(ptr + pcir_offset + 6); > + > + PCI_DPRINTF("ROM id %04x%04x / PCI id %04x%04x\n", > + vendor_id, device_id, rom_vendor_id, rom_device_id); > + > + checksum = ptr[6]; > + > + if (vendor_id != rom_vendor_id) { > + /* Patch vendor id and checksum (at offset 6 for etherboot roms). */ > + checksum += (uint8_t)rom_vendor_id + (uint8_t)(rom_vendor_id>> 8); > + checksum -= (uint8_t)vendor_id + (uint8_t)(vendor_id>> 8); > + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); > + ptr[6] = checksum; > + pci_set_word(ptr + pcir_offset + 4, vendor_id); > + } > + > + if (device_id != rom_device_id) { > + /* Patch device id and checksum (at offset 6 for etherboot roms). */ > + checksum += (uint8_t)rom_device_id + (uint8_t)(rom_device_id>> 8); > + checksum -= (uint8_t)device_id + (uint8_t)(device_id>> 8); > + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); > + ptr[6] = checksum; > + pci_set_word(ptr + pcir_offset + 6, device_id); > + } > +} > + > /* Add an option rom for the device */ > static int pci_add_option_rom(PCIDevice *pdev) > { > @@ -1849,6 +1905,8 @@ static int pci_add_option_rom(PCIDevice *pdev) > load_image(path, ptr); > qemu_free(path); > > + pci_patch_ids(pdev, ptr, size); > + > pci_register_bar(pdev, PCI_ROM_SLOT, size, > 0, pci_map_option_rom); > > ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 18:44 ` [Qemu-devel] " Anthony Liguori @ 2010-10-18 18:53 ` Anthony Liguori 2010-10-18 19:11 ` Stefan Weil 2010-10-19 21:08 ` Stefan Weil 0 siblings, 2 replies; 43+ messages in thread From: Anthony Liguori @ 2010-10-18 18:53 UTC (permalink / raw) Cc: QEMU Developers, Michael S. Tsirkin, Markus Armbruster, Gerd Hoffmann On 10/18/2010 01:44 PM, Anthony Liguori wrote: > On 10/18/2010 12:55 PM, Stefan Weil wrote: >> PCI devices with different vendor or device ids sometimes share >> the same rom code. Only the ids and the checksum >> differs in a boot rom for such devices. >> >> The i825xx ethernet controller family is a typical example >> which is implemented in hw/eepro100.c. It uses at least >> 3 different device ids, so normally 3 boot roms would be needed. >> >> By automatically patching vendor id and device id (and the checksum) >> in qemu, all emulated family members can share the same boot rom. >> >> VGA bios roms are another example with different vendor and device ids. >> >> v2: >> >> * Patch also the vendor id (and remove the sanity check for vendor id). >> >> Cc: Gerd Hoffmann<kraxel@redhat.com> >> Cc: Markus Armbruster<armbru@redhat.com> >> Cc: Michael S. Tsirkin<mst@redhat.com> >> Signed-off-by: Stefan Weil<weil@mail.berlios.de> > > I get very nervous about patching a ROM. Who's to say that the ROM > doesn't somehow depend on the contents of its header? Maybe it has an > internal CRC built into it or something like that. As part of PMM, ROMs typically reduce their size by decompressing and removing code or something of that nature and then rewrite themselves in scratch RAM. The BIOS then copies the resulting ROM (using the ROM size in the base header as an indication of how much to copy) into the option ROM space. So the likelihood of depending on the contents of the header seems non-trivial to me. Regards, Anthony Liguori > Regards, > > Anthony Liguori > >> --- >> hw/pci.c | 58 >> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 58 insertions(+), 0 deletions(-) >> >> diff --git a/hw/pci.c b/hw/pci.c >> index 1280d4d..139eb24 100644 >> --- a/hw/pci.c >> +++ b/hw/pci.c >> @@ -1797,6 +1797,62 @@ static void pci_map_option_rom(PCIDevice >> *pdev, int region_num, pcibus_t addr, p >> cpu_register_physical_memory(addr, size, pdev->rom_offset); >> } >> >> +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. >> + This is needed for an option rom which is used for more than one >> device. */ >> +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) >> +{ >> + uint16_t vendor_id; >> + uint16_t device_id; >> + uint16_t rom_vendor_id; >> + uint16_t rom_device_id; >> + uint16_t rom_magic; >> + uint16_t pcir_offset; >> + uint8_t checksum; >> + >> + /* Words in rom data are little endian (like in PCI configuration), >> + so they can be read / written with pci_get_word / >> pci_set_word. */ >> + >> + /* Only a valid rom will be patched. */ >> + rom_magic = pci_get_word(ptr); >> + if (rom_magic != 0xaa55) { >> + PCI_DPRINTF("Bad ROM magic %04x\n", rom_magic); >> + return; >> + } >> + pcir_offset = pci_get_word(ptr + 0x18); >> + if (pcir_offset + 8>= size || memcmp(ptr + pcir_offset, "PCIR", >> 4)) { >> + PCI_DPRINTF("Bad PCIR offset 0x%x or signature\n", >> pcir_offset); >> + return; >> + } >> + >> + vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); >> + device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); >> + rom_vendor_id = pci_get_word(ptr + pcir_offset + 4); >> + rom_device_id = pci_get_word(ptr + pcir_offset + 6); >> + >> + PCI_DPRINTF("ROM id %04x%04x / PCI id %04x%04x\n", >> + vendor_id, device_id, rom_vendor_id, rom_device_id); >> + >> + checksum = ptr[6]; >> + >> + if (vendor_id != rom_vendor_id) { >> + /* Patch vendor id and checksum (at offset 6 for etherboot >> roms). */ >> + checksum += (uint8_t)rom_vendor_id + >> (uint8_t)(rom_vendor_id>> 8); >> + checksum -= (uint8_t)vendor_id + (uint8_t)(vendor_id>> 8); >> + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); >> + ptr[6] = checksum; >> + pci_set_word(ptr + pcir_offset + 4, vendor_id); >> + } >> + >> + if (device_id != rom_device_id) { >> + /* Patch device id and checksum (at offset 6 for etherboot >> roms). */ >> + checksum += (uint8_t)rom_device_id + >> (uint8_t)(rom_device_id>> 8); >> + checksum -= (uint8_t)device_id + (uint8_t)(device_id>> 8); >> + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); >> + ptr[6] = checksum; >> + pci_set_word(ptr + pcir_offset + 6, device_id); >> + } >> +} >> + >> /* Add an option rom for the device */ >> static int pci_add_option_rom(PCIDevice *pdev) >> { >> @@ -1849,6 +1905,8 @@ static int pci_add_option_rom(PCIDevice *pdev) >> load_image(path, ptr); >> qemu_free(path); >> >> + pci_patch_ids(pdev, ptr, size); >> + >> pci_register_bar(pdev, PCI_ROM_SLOT, size, >> 0, pci_map_option_rom); >> > > ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 18:53 ` Anthony Liguori @ 2010-10-18 19:11 ` Stefan Weil 2010-10-19 8:37 ` Michael S. Tsirkin 2010-10-19 21:08 ` Stefan Weil 1 sibling, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-18 19:11 UTC (permalink / raw) To: Anthony Liguori Cc: QEMU Developers, Michael S. Tsirkin, Markus Armbruster, Gerd Hoffmann Am 18.10.2010 20:53, schrieb Anthony Liguori: > On 10/18/2010 01:44 PM, Anthony Liguori wrote: >> On 10/18/2010 12:55 PM, Stefan Weil wrote: >>> PCI devices with different vendor or device ids sometimes share >>> the same rom code. Only the ids and the checksum >>> differs in a boot rom for such devices. >>> >>> The i825xx ethernet controller family is a typical example >>> which is implemented in hw/eepro100.c. It uses at least >>> 3 different device ids, so normally 3 boot roms would be needed. >>> >>> By automatically patching vendor id and device id (and the checksum) >>> in qemu, all emulated family members can share the same boot rom. >>> >>> VGA bios roms are another example with different vendor and device ids. >>> >>> v2: >>> >>> * Patch also the vendor id (and remove the sanity check for vendor id). >>> >>> Cc: Gerd Hoffmann<kraxel@redhat.com> >>> Cc: Markus Armbruster<armbru@redhat.com> >>> Cc: Michael S. Tsirkin<mst@redhat.com> >>> Signed-off-by: Stefan Weil<weil@mail.berlios.de> >> >> I get very nervous about patching a ROM. Who's to say that the ROM >> doesn't somehow depend on the contents of its header? Maybe it has >> an internal CRC built into it or something like that. > > As part of PMM, ROMs typically reduce their size by decompressing and > removing code or something of that nature and then rewrite themselves > in scratch RAM. The BIOS then copies the resulting ROM (using the ROM > size in the base header as an indication of how much to copy) into the > option ROM space. > > So the likelihood of depending on the contents of the header seems > non-trivial to me. > > Regards, > > Anthony Liguori > [snip] Etherboot uses compressed code and always fixes the checksum by modifying the byte at relative address 6, so for etherboot there is no problem. The etherboot distribution even includes a perl script which can be used to patch vendor/device ids. I thought about using that script in QEMU's make but then decided against this alternate solution. VGA bios seems to work, too (practical test still is missing). What could happen for other kinds of roms? Either there is nothing to patch (the 99 % standard case), or they work, or they don't work. QEMU must only make sure that patching of the supported roms with supported devices work. Regards, Stefan Weil ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 19:11 ` Stefan Weil @ 2010-10-19 8:37 ` Michael S. Tsirkin 2010-10-19 21:15 ` Stefan Weil 0 siblings, 1 reply; 43+ messages in thread From: Michael S. Tsirkin @ 2010-10-19 8:37 UTC (permalink / raw) To: Stefan Weil; +Cc: QEMU Developers, Markus Armbruster, Gerd Hoffmann On Mon, Oct 18, 2010 at 09:11:55PM +0200, Stefan Weil wrote: > QEMU must only make sure that patching of the supported roms > with supported devices work. I think that's what Anthony was saying too - make this depend on a qdev property and set it only in eepro100 for now. -- MST ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-19 8:37 ` Michael S. Tsirkin @ 2010-10-19 21:15 ` Stefan Weil 2010-10-19 21:22 ` Anthony Liguori 0 siblings, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-19 21:15 UTC (permalink / raw) To: Michael S. Tsirkin; +Cc: QEMU Developers, Markus Armbruster, Gerd Hoffmann Am 19.10.2010 10:37, schrieb Michael S. Tsirkin: > On Mon, Oct 18, 2010 at 09:11:55PM +0200, Stefan Weil wrote: >> QEMU must only make sure that patching of the supported roms >> with supported devices work. > > I think that's what Anthony was saying too - make this depend > on a qdev property and set it only in eepro100 for now. > My new patch v3 implements something similar and does not need a new qdev property: Don't patch because the rom file was defined by the user: qemu -L pc-bios -boot n -netdev user,id=internet \ -device i82801,netdev=internet,romfile=gpxe-eepro100-80861209.rom Patch because we work with the built-in default rom file: qemu -L pc-bios -boot n -netdev user,id=internet \ -device i82801,netdev=internet This is a safe solution which respects user's rom data without adding much more complexity. Regards, Stefan ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-19 21:15 ` Stefan Weil @ 2010-10-19 21:22 ` Anthony Liguori 2010-10-19 21:25 ` Michael S. Tsirkin 0 siblings, 1 reply; 43+ messages in thread From: Anthony Liguori @ 2010-10-19 21:22 UTC (permalink / raw) To: Stefan Weil Cc: QEMU Developers, Gerd Hoffmann, Markus Armbruster, Michael S. Tsirkin On 10/19/2010 04:15 PM, Stefan Weil wrote: > Am 19.10.2010 10:37, schrieb Michael S. Tsirkin: >> On Mon, Oct 18, 2010 at 09:11:55PM +0200, Stefan Weil wrote: >>> QEMU must only make sure that patching of the supported roms >>> with supported devices work. >> >> I think that's what Anthony was saying too - make this depend >> on a qdev property and set it only in eepro100 for now. >> > > My new patch v3 implements something similar and does not need > a new qdev property: I prefer to have an explicit property in case a user actually wants to use this functionality. That said, if Michael's happy with the approach, I'm okay with it too. Regards, Anthony Liguori > Don't patch because the rom file was defined by the user: > > qemu -L pc-bios -boot n -netdev user,id=internet \ > -device i82801,netdev=internet,romfile=gpxe-eepro100-80861209.rom > > Patch because we work with the built-in default rom file: > > qemu -L pc-bios -boot n -netdev user,id=internet \ > -device i82801,netdev=internet > > This is a safe solution which respects user's rom data > without adding much more complexity. > > Regards, > Stefan > ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-19 21:22 ` Anthony Liguori @ 2010-10-19 21:25 ` Michael S. Tsirkin 0 siblings, 0 replies; 43+ messages in thread From: Michael S. Tsirkin @ 2010-10-19 21:25 UTC (permalink / raw) To: Anthony Liguori; +Cc: QEMU Developers, Markus Armbruster, Gerd Hoffmann On Tue, Oct 19, 2010 at 04:22:23PM -0500, Anthony Liguori wrote: > On 10/19/2010 04:15 PM, Stefan Weil wrote: > >Am 19.10.2010 10:37, schrieb Michael S. Tsirkin: > >>On Mon, Oct 18, 2010 at 09:11:55PM +0200, Stefan Weil wrote: > >>>QEMU must only make sure that patching of the supported roms > >>>with supported devices work. > >> > >>I think that's what Anthony was saying too - make this depend > >>on a qdev property and set it only in eepro100 for now. > >> > > > >My new patch v3 implements something similar and does not need > >a new qdev property: > > I prefer to have an explicit property in case a user actually wants > to use this functionality. That said, if Michael's happy with the > approach, I'm okay with it too. > > Regards, > > Anthony Liguori I currently feel kind of the same, just to make this explicit ... if you like, let me sleep on it. > >Don't patch because the rom file was defined by the user: > > > >qemu -L pc-bios -boot n -netdev user,id=internet \ > > -device i82801,netdev=internet,romfile=gpxe-eepro100-80861209.rom > > > >Patch because we work with the built-in default rom file: > > > >qemu -L pc-bios -boot n -netdev user,id=internet \ > > -device i82801,netdev=internet > > > >This is a safe solution which respects user's rom data > >without adding much more complexity. > > > >Regards, > >Stefan > > ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-18 18:53 ` Anthony Liguori 2010-10-18 19:11 ` Stefan Weil @ 2010-10-19 21:08 ` Stefan Weil 2010-10-20 7:19 ` [Qemu-devel] " Gerd Hoffmann 2010-11-22 6:29 ` Michael S. Tsirkin 1 sibling, 2 replies; 43+ messages in thread From: Stefan Weil @ 2010-10-19 21:08 UTC (permalink / raw) To: QEMU Developers; +Cc: Michael S. Tsirkin, Gerd Hoffmann, Markus Armbruster PCI devices with different vendor or device ids sometimes share the same rom code. Only the ids and the checksum differs in a boot rom for such devices. The i825xx ethernet controller family is a typical example which is implemented in hw/eepro100.c. It uses at least 3 different device ids, so normally 3 boot roms would be needed. By automatically patching vendor id and device id (and the checksum) in qemu, all emulated family members can share the same boot rom. VGA bios roms are another example with different vendor and device ids. Only qemu's built-in default rom files will be patched. v2: * Patch also the vendor id (and remove the sanity check for vendor id). v3: * Don't patch a rom file when its name was set by the user. Thus we avoid modifications of unknown rom data. Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Markus Armbruster <armbru@redhat.com> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Stefan Weil <weil@mail.berlios.de> --- hw/pci.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 69 insertions(+), 4 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 1280d4d..74cbea5 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -78,7 +78,7 @@ static struct BusInfo pci_bus_info = { static void pci_update_mappings(PCIDevice *d); static void pci_set_irq(void *opaque, int irq_num, int level); -static int pci_add_option_rom(PCIDevice *pdev); +static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom); static void pci_del_option_rom(PCIDevice *pdev); static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET; @@ -1672,6 +1672,7 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo *base) PCIDeviceInfo *info = container_of(base, PCIDeviceInfo, qdev); PCIBus *bus; int devfn, rc; + bool is_default_rom; /* initialize cap_present for pci_is_express() and pci_config_size() */ if (info->is_express) { @@ -1692,9 +1693,12 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo *base) } /* rom loading */ - if (pci_dev->romfile == NULL && info->romfile != NULL) + is_default_rom = false; + if (pci_dev->romfile == NULL && info->romfile != NULL) { pci_dev->romfile = qemu_strdup(info->romfile); - pci_add_option_rom(pci_dev); + is_default_rom = true; + } + pci_add_option_rom(pci_dev, is_default_rom); if (qdev->hotplugged) { rc = bus->hotplug(bus->hotplug_qdev, pci_dev, 1); @@ -1797,8 +1801,64 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p cpu_register_physical_memory(addr, size, pdev->rom_offset); } +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. + This is needed for an option rom which is used for more than one device. */ +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) +{ + uint16_t vendor_id; + uint16_t device_id; + uint16_t rom_vendor_id; + uint16_t rom_device_id; + uint16_t rom_magic; + uint16_t pcir_offset; + uint8_t checksum; + + /* Words in rom data are little endian (like in PCI configuration), + so they can be read / written with pci_get_word / pci_set_word. */ + + /* Only a valid rom will be patched. */ + rom_magic = pci_get_word(ptr); + if (rom_magic != 0xaa55) { + PCI_DPRINTF("Bad ROM magic %04x\n", rom_magic); + return; + } + pcir_offset = pci_get_word(ptr + 0x18); + if (pcir_offset + 8 >= size || memcmp(ptr + pcir_offset, "PCIR", 4)) { + PCI_DPRINTF("Bad PCIR offset 0x%x or signature\n", pcir_offset); + return; + } + + vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); + device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); + rom_vendor_id = pci_get_word(ptr + pcir_offset + 4); + rom_device_id = pci_get_word(ptr + pcir_offset + 6); + + PCI_DPRINTF("%s: ROM id %04x%04x / PCI id %04x%04x\n", pdev->romfile, + vendor_id, device_id, rom_vendor_id, rom_device_id); + + checksum = ptr[6]; + + if (vendor_id != rom_vendor_id) { + /* Patch vendor id and checksum (at offset 6 for etherboot roms). */ + checksum += (uint8_t)rom_vendor_id + (uint8_t)(rom_vendor_id >> 8); + checksum -= (uint8_t)vendor_id + (uint8_t)(vendor_id >> 8); + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); + ptr[6] = checksum; + pci_set_word(ptr + pcir_offset + 4, vendor_id); + } + + if (device_id != rom_device_id) { + /* Patch device id and checksum (at offset 6 for etherboot roms). */ + checksum += (uint8_t)rom_device_id + (uint8_t)(rom_device_id >> 8); + checksum -= (uint8_t)device_id + (uint8_t)(device_id >> 8); + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); + ptr[6] = checksum; + pci_set_word(ptr + pcir_offset + 6, device_id); + } +} + /* Add an option rom for the device */ -static int pci_add_option_rom(PCIDevice *pdev) +static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) { int size; char *path; @@ -1849,6 +1909,11 @@ static int pci_add_option_rom(PCIDevice *pdev) load_image(path, ptr); qemu_free(path); + if (is_default_rom) { + /* Only the default rom images will be patched (if needed). */ + pci_patch_ids(pdev, ptr, size); + } + pci_register_bar(pdev, PCI_ROM_SLOT, size, 0, pci_map_option_rom); -- 1.7.1 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-19 21:08 ` Stefan Weil @ 2010-10-20 7:19 ` Gerd Hoffmann 2010-10-20 20:30 ` Stefan Weil 2010-11-22 6:29 ` Michael S. Tsirkin 1 sibling, 1 reply; 43+ messages in thread From: Gerd Hoffmann @ 2010-10-20 7:19 UTC (permalink / raw) To: Stefan Weil; +Cc: Michael S. Tsirkin, QEMU Developers, Markus Armbruster Hi, > The i825xx ethernet controller family is a typical example > which is implemented in hw/eepro100.c. It uses at least > 3 different device ids, so normally 3 boot roms would be needed. Does this actually work now with the etherboot roms? cheers, Gerd ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-20 7:19 ` [Qemu-devel] " Gerd Hoffmann @ 2010-10-20 20:30 ` Stefan Weil 0 siblings, 0 replies; 43+ messages in thread From: Stefan Weil @ 2010-10-20 20:30 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: Michael S. Tsirkin, QEMU Developers, Markus Armbruster Am 20.10.2010 09:19, schrieb Gerd Hoffmann: > Hi, > >> The i825xx ethernet controller family is a typical example >> which is implemented in hw/eepro100.c. It uses at least >> 3 different device ids, so normally 3 boot roms would be needed. > > Does this actually work now with the etherboot roms? > > cheers, > Gerd Yes. I tested these two cases: qemu -L pc-bios -boot n -netdev user,id=internet \ -device i82801,netdev=internet,romfile=gpxe-eepro100-80861209.rom => no bootable device qemu -L pc-bios -boot n -netdev user,id=internet \ -device i82801,netdev=internet => device gets ip address via dhcp The same works with i82559c or other eepro100 variants, too. Cheers, Stefan ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: [PATCH 1/2] pci: Automatically patch PCI vendor id and device id in PCI ROM 2010-10-19 21:08 ` Stefan Weil 2010-10-20 7:19 ` [Qemu-devel] " Gerd Hoffmann @ 2010-11-22 6:29 ` Michael S. Tsirkin 1 sibling, 0 replies; 43+ messages in thread From: Michael S. Tsirkin @ 2010-11-22 6:29 UTC (permalink / raw) To: Stefan Weil; +Cc: Markus Armbruster, QEMU Developers, Gerd Hoffmann On Tue, Oct 19, 2010 at 11:08:21PM +0200, Stefan Weil wrote: > PCI devices with different vendor or device ids sometimes share > the same rom code. Only the ids and the checksum > differs in a boot rom for such devices. > > The i825xx ethernet controller family is a typical example > which is implemented in hw/eepro100.c. It uses at least > 3 different device ids, so normally 3 boot roms would be needed. > > By automatically patching vendor id and device id (and the checksum) > in qemu, all emulated family members can share the same boot rom. > > VGA bios roms are another example with different vendor and device ids. > > Only qemu's built-in default rom files will be patched. > > v2: > * Patch also the vendor id (and remove the sanity check for vendor id). > > v3: > * Don't patch a rom file when its name was set by the user. > Thus we avoid modifications of unknown rom data. > > Cc: Gerd Hoffmann <kraxel@redhat.com> > Cc: Markus Armbruster <armbru@redhat.com> > Cc: Michael S. Tsirkin <mst@redhat.com> > Signed-off-by: Stefan Weil <weil@mail.berlios.de> Looks safe enough for me. Applied. > --- > hw/pci.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- > 1 files changed, 69 insertions(+), 4 deletions(-) > > diff --git a/hw/pci.c b/hw/pci.c > index 1280d4d..74cbea5 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -78,7 +78,7 @@ static struct BusInfo pci_bus_info = { > > static void pci_update_mappings(PCIDevice *d); > static void pci_set_irq(void *opaque, int irq_num, int level); > -static int pci_add_option_rom(PCIDevice *pdev); > +static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom); > static void pci_del_option_rom(PCIDevice *pdev); > > static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET; > @@ -1672,6 +1672,7 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo *base) > PCIDeviceInfo *info = container_of(base, PCIDeviceInfo, qdev); > PCIBus *bus; > int devfn, rc; > + bool is_default_rom; > > /* initialize cap_present for pci_is_express() and pci_config_size() */ > if (info->is_express) { > @@ -1692,9 +1693,12 @@ static int pci_qdev_init(DeviceState *qdev, DeviceInfo *base) > } > > /* rom loading */ > - if (pci_dev->romfile == NULL && info->romfile != NULL) > + is_default_rom = false; > + if (pci_dev->romfile == NULL && info->romfile != NULL) { > pci_dev->romfile = qemu_strdup(info->romfile); > - pci_add_option_rom(pci_dev); > + is_default_rom = true; > + } > + pci_add_option_rom(pci_dev, is_default_rom); > > if (qdev->hotplugged) { > rc = bus->hotplug(bus->hotplug_qdev, pci_dev, 1); > @@ -1797,8 +1801,64 @@ static void pci_map_option_rom(PCIDevice *pdev, int region_num, pcibus_t addr, p > cpu_register_physical_memory(addr, size, pdev->rom_offset); > } > > +/* Patch the PCI vendor and device ids in a PCI rom image if necessary. > + This is needed for an option rom which is used for more than one device. */ > +static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, int size) > +{ > + uint16_t vendor_id; > + uint16_t device_id; > + uint16_t rom_vendor_id; > + uint16_t rom_device_id; > + uint16_t rom_magic; > + uint16_t pcir_offset; > + uint8_t checksum; > + > + /* Words in rom data are little endian (like in PCI configuration), > + so they can be read / written with pci_get_word / pci_set_word. */ > + > + /* Only a valid rom will be patched. */ > + rom_magic = pci_get_word(ptr); > + if (rom_magic != 0xaa55) { > + PCI_DPRINTF("Bad ROM magic %04x\n", rom_magic); > + return; > + } > + pcir_offset = pci_get_word(ptr + 0x18); > + if (pcir_offset + 8 >= size || memcmp(ptr + pcir_offset, "PCIR", 4)) { > + PCI_DPRINTF("Bad PCIR offset 0x%x or signature\n", pcir_offset); > + return; > + } > + > + vendor_id = pci_get_word(pdev->config + PCI_VENDOR_ID); > + device_id = pci_get_word(pdev->config + PCI_DEVICE_ID); > + rom_vendor_id = pci_get_word(ptr + pcir_offset + 4); > + rom_device_id = pci_get_word(ptr + pcir_offset + 6); > + > + PCI_DPRINTF("%s: ROM id %04x%04x / PCI id %04x%04x\n", pdev->romfile, > + vendor_id, device_id, rom_vendor_id, rom_device_id); > + > + checksum = ptr[6]; > + > + if (vendor_id != rom_vendor_id) { > + /* Patch vendor id and checksum (at offset 6 for etherboot roms). */ > + checksum += (uint8_t)rom_vendor_id + (uint8_t)(rom_vendor_id >> 8); > + checksum -= (uint8_t)vendor_id + (uint8_t)(vendor_id >> 8); > + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); > + ptr[6] = checksum; > + pci_set_word(ptr + pcir_offset + 4, vendor_id); > + } > + > + if (device_id != rom_device_id) { > + /* Patch device id and checksum (at offset 6 for etherboot roms). */ > + checksum += (uint8_t)rom_device_id + (uint8_t)(rom_device_id >> 8); > + checksum -= (uint8_t)device_id + (uint8_t)(device_id >> 8); > + PCI_DPRINTF("ROM checksum %02x / %02x\n", ptr[6], checksum); > + ptr[6] = checksum; > + pci_set_word(ptr + pcir_offset + 6, device_id); > + } > +} > + > /* Add an option rom for the device */ > -static int pci_add_option_rom(PCIDevice *pdev) > +static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > { > int size; > char *path; > @@ -1849,6 +1909,11 @@ static int pci_add_option_rom(PCIDevice *pdev) > load_image(path, ptr); > qemu_free(path); > > + if (is_default_rom) { > + /* Only the default rom images will be patched (if needed). */ > + pci_patch_ids(pdev, ptr, size); > + } > + > pci_register_bar(pdev, PCI_ROM_SLOT, size, > 0, pci_map_option_rom); > > -- > 1.7.1 ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] [PATCH 2/2] eepro100: Use a single rom file for all i825xx devices 2010-10-13 7:13 ` Markus Armbruster 2010-10-15 20:51 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM Stefan Weil @ 2010-10-15 20:51 ` Stefan Weil 2010-11-22 6:29 ` [Qemu-devel] " Michael S. Tsirkin 2010-10-15 21:03 ` [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? Stefan Weil 2 siblings, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-15 20:51 UTC (permalink / raw) To: QEMU Developers; +Cc: Markus Armbruster, Michael S. Tsirkin Patching the rom data during load (in qemu) now also supports i82801 (which had no rom file). We only need a single rom file for the whole device family, so remove the second one which is no longer needed. Cc: Markus Armbruster <armbru@redhat.com> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Stefan Weil <weil@mail.berlios.de> --- Makefile | 1 - hw/eepro100.c | 14 +++----------- pc-bios/README | 2 +- pc-bios/gpxe-eepro100-80861229.rom | Bin 56832 -> 0 bytes 4 files changed, 4 insertions(+), 13 deletions(-) delete mode 100644 pc-bios/gpxe-eepro100-80861229.rom diff --git a/Makefile b/Makefile index 252c817..b5f6ba4 100644 --- a/Makefile +++ b/Makefile @@ -178,7 +178,6 @@ ifdef INSTALL_BLOBS BLOBS=bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \ openbios-sparc32 openbios-sparc64 openbios-ppc \ gpxe-eepro100-80861209.rom \ -gpxe-eepro100-80861229.rom \ pxe-e1000.bin \ pxe-ne2k_pci.bin pxe-pcnet.bin \ pxe-rtl8139.bin pxe-virtio.bin \ diff --git a/hw/eepro100.c b/hw/eepro100.c index 218472d..5835b5a 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -2048,17 +2048,9 @@ static void eepro100_register_devices(void) size_t i; for (i = 0; i < ARRAY_SIZE(e100_devices); i++) { PCIDeviceInfo *pci_dev = &e100_devices[i].pci; - switch (e100_devices[i].device_id) { - case PCI_DEVICE_ID_INTEL_82551IT: - pci_dev->romfile = "gpxe-eepro100-80861209.rom"; - break; - case PCI_DEVICE_ID_INTEL_82557: - pci_dev->romfile = "gpxe-eepro100-80861229.rom"; - break; - case 0x2449: - pci_dev->romfile = "gpxe-eepro100-80862449.rom"; - break; - } + /* We use the same rom file for all device ids. + QEMU fixes the device id during rom load. */ + pci_dev->romfile = "gpxe-eepro100-80861209.rom"; pci_dev->init = e100_nic_init; pci_dev->exit = pci_nic_uninit; pci_dev->qdev.props = e100_properties; diff --git a/pc-bios/README b/pc-bios/README index 3172cf7..4b019e0 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -16,7 +16,7 @@ - The PXE roms come from Rom-o-Matic gPXE 0.9.9 with BANNER_TIMEOUT=0 e1000 8086:100E - eepro100 8086:1209, 8086:1229 + eepro100 8086:1209 (also used for 8086:1229 and 8086:2449) ns8390 1050:0940 pcnet32 1022:2000 rtl8139 10ec:8139 diff --git a/pc-bios/gpxe-eepro100-80861229.rom b/pc-bios/gpxe-eepro100-80861229.rom deleted file mode 100644 index 9cf397e3de03c4b6441893cf07d9ea63a36a65c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56832 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 -- 1.7.1 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: [PATCH 2/2] eepro100: Use a single rom file for all i825xx devices 2010-10-15 20:51 ` [Qemu-devel] [PATCH 2/2] eepro100: Use a single rom file for all i825xx devices Stefan Weil @ 2010-11-22 6:29 ` Michael S. Tsirkin 0 siblings, 0 replies; 43+ messages in thread From: Michael S. Tsirkin @ 2010-11-22 6:29 UTC (permalink / raw) To: Stefan Weil; +Cc: QEMU Developers, Markus Armbruster On Fri, Oct 15, 2010 at 10:51:07PM +0200, Stefan Weil wrote: > Patching the rom data during load (in qemu) now > also supports i82801 (which had no rom file). > > We only need a single rom file for the whole device family, > so remove the second one which is no longer needed. > > Cc: Markus Armbruster <armbru@redhat.com> > Cc: Michael S. Tsirkin <mst@redhat.com> > Signed-off-by: Stefan Weil <weil@mail.berlios.de> Applied, thanks. > --- > Makefile | 1 - > hw/eepro100.c | 14 +++----------- > pc-bios/README | 2 +- > pc-bios/gpxe-eepro100-80861229.rom | Bin 56832 -> 0 bytes > 4 files changed, 4 insertions(+), 13 deletions(-) > delete mode 100644 pc-bios/gpxe-eepro100-80861229.rom > > diff --git a/Makefile b/Makefile > index 252c817..b5f6ba4 100644 > --- a/Makefile > +++ b/Makefile > @@ -178,7 +178,6 @@ ifdef INSTALL_BLOBS > BLOBS=bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \ > openbios-sparc32 openbios-sparc64 openbios-ppc \ > gpxe-eepro100-80861209.rom \ > -gpxe-eepro100-80861229.rom \ > pxe-e1000.bin \ > pxe-ne2k_pci.bin pxe-pcnet.bin \ > pxe-rtl8139.bin pxe-virtio.bin \ > diff --git a/hw/eepro100.c b/hw/eepro100.c > index 218472d..5835b5a 100644 > --- a/hw/eepro100.c > +++ b/hw/eepro100.c > @@ -2048,17 +2048,9 @@ static void eepro100_register_devices(void) > size_t i; > for (i = 0; i < ARRAY_SIZE(e100_devices); i++) { > PCIDeviceInfo *pci_dev = &e100_devices[i].pci; > - switch (e100_devices[i].device_id) { > - case PCI_DEVICE_ID_INTEL_82551IT: > - pci_dev->romfile = "gpxe-eepro100-80861209.rom"; > - break; > - case PCI_DEVICE_ID_INTEL_82557: > - pci_dev->romfile = "gpxe-eepro100-80861229.rom"; > - break; > - case 0x2449: > - pci_dev->romfile = "gpxe-eepro100-80862449.rom"; > - break; > - } > + /* We use the same rom file for all device ids. > + QEMU fixes the device id during rom load. */ > + pci_dev->romfile = "gpxe-eepro100-80861209.rom"; > pci_dev->init = e100_nic_init; > pci_dev->exit = pci_nic_uninit; > pci_dev->qdev.props = e100_properties; > diff --git a/pc-bios/README b/pc-bios/README > index 3172cf7..4b019e0 100644 > --- a/pc-bios/README > +++ b/pc-bios/README > @@ -16,7 +16,7 @@ > - The PXE roms come from Rom-o-Matic gPXE 0.9.9 with BANNER_TIMEOUT=0 > > e1000 8086:100E > - eepro100 8086:1209, 8086:1229 > + eepro100 8086:1209 (also used for 8086:1229 and 8086:2449) > ns8390 1050:0940 > pcnet32 1022:2000 > rtl8139 10ec:8139 > diff --git a/pc-bios/gpxe-eepro100-80861229.rom b/pc-bios/gpxe-eepro100-80861229.rom > deleted file mode 100644 > index 9cf397e3de03c4b6441893cf07d9ea63a36a65c8..0000000000000000000000000000000000000000 > GIT binary patch > literal 0 > HcmV?d00001 > > literal 56832 > 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 > > -- > 1.7.1 ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? 2010-10-13 7:13 ` Markus Armbruster 2010-10-15 20:51 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM Stefan Weil 2010-10-15 20:51 ` [Qemu-devel] [PATCH 2/2] eepro100: Use a single rom file for all i825xx devices Stefan Weil @ 2010-10-15 21:03 ` Stefan Weil 2010-10-25 12:11 ` Markus Armbruster 2 siblings, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-15 21:03 UTC (permalink / raw) To: Markus Armbruster; +Cc: qemu-devel Am 13.10.2010 09:13, schrieb Markus Armbruster: > Stefan Weil<weil@mail.berlios.de> writes: > > >> Am 12.10.2010 14:41, schrieb Markus Armbruster: >> >>> Commit db667a12 added a reference to ROM file >>> gpxe-eepro100-80862449.rom, but no such file. Intentional? >>> >> Yes. See >> http://lists.nongnu.org/archive/html/qemu-devel/2010-05/msg00418.html >> >> Citation from my former mail: >> >> Yes, it is missing. I did not add it for several reasons: >> >> * The new variant i82801 (which needs the missing ROM) is currently >> not available >> via model=i82801 (it can be selected by experts using other methods). >> > It's available via -device i82801. -net nic,model= is obsolescent. > > >> * Experts can get the missing ROM from ROM-o-matic. >> >> * All three ROMs differ only in one or two bytes (device id). That's >> a waste >> of binary space (56832 bytes!). Therefore I plan to remove all but >> the first >> ROM file. The missing ones can be created by make or patched on the >> fly by >> QEMU during load. Maybe it is also possible to create ROM files >> which support >> more than one vendor/device entry - that would be the best solution. >> > No objections to creating by make or on load, but I'd be just fine with > the duplicated ROMs. Disk space waste in the order of 100KiB is lost in > the noise nowadays. My qemu/.git is>100MiB, and my build tree for all > targets ~1.5GiB. > > >> There is still nothing new regarding these last points >> because I did not spend any time on them. >> >> Do you think there is urgent need for a gpxe-eepro100-80862449.rom binary? >> > Well, "-device i82801" complains because it misses this binary. Do we > want to ship that way? > I just sent two patches which create the rom data on load. So -device i82801 no longer complains but gets the boot information from dhcp (tested with i386-softmmu). Your build tree will be made smaller by at least 50 KB :-) Do you think these patches should be added to stable-0.13, too? Regards, Stefan ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? 2010-10-15 21:03 ` [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? Stefan Weil @ 2010-10-25 12:11 ` Markus Armbruster 2010-10-25 16:23 ` Stefan Weil 0 siblings, 1 reply; 43+ messages in thread From: Markus Armbruster @ 2010-10-25 12:11 UTC (permalink / raw) To: Stefan Weil; +Cc: qemu-devel Stefan Weil <weil@mail.berlios.de> writes: > Am 13.10.2010 09:13, schrieb Markus Armbruster: >> Stefan Weil<weil@mail.berlios.de> writes: [...] >>> Do you think there is urgent need for a gpxe-eepro100-80862449.rom binary? >>> >> Well, "-device i82801" complains because it misses this binary. Do we >> want to ship that way? >> > > I just sent two patches which create the rom data on load. > So -device i82801 no longer complains but gets the boot > information from dhcp (tested with i386-softmmu). > > Your build tree will be made smaller by at least 50 KB :-) > > Do you think these patches should be added to stable-0.13, too? If the gain for "-device i82801" is worth the risk, which depends on the patch. Have we reached consensus on how to fix it in master? ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? 2010-10-25 12:11 ` Markus Armbruster @ 2010-10-25 16:23 ` Stefan Weil 2010-10-25 16:54 ` Michael S. Tsirkin 0 siblings, 1 reply; 43+ messages in thread From: Stefan Weil @ 2010-10-25 16:23 UTC (permalink / raw) To: Markus Armbruster; +Cc: qemu-devel, Michael S. Tsirkin Am 25.10.2010 14:11, schrieb Markus Armbruster: > Stefan Weil <weil@mail.berlios.de> writes: > >> Am 13.10.2010 09:13, schrieb Markus Armbruster: >>> Stefan Weil<weil@mail.berlios.de> writes: > [...] >>>> Do you think there is urgent need for a gpxe-eepro100-80862449.rom >>>> binary? >>>> >>> Well, "-device i82801" complains because it misses this binary. Do we >>> want to ship that way? >>> >> >> I just sent two patches which create the rom data on load. >> So -device i82801 no longer complains but gets the boot >> information from dhcp (tested with i386-softmmu). >> >> Your build tree will be made smaller by at least 50 KB :-) >> >> Do you think these patches should be added to stable-0.13, too? > > If the gain for "-device i82801" is worth the risk, which depends on the > patch. Have we reached consensus on how to fix it in master? The latest patch version fixes rom data only for the default roms, so the risk is minimized and full tests are possible. There is still no consensus whether we need a new qdev property (which allows users to have their rom data fixed, too) or not. My patch does not prevent adding that new qdev property, so I suggest applying my patch now and adding the property later (if it is ever needed). Regards Stefan ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? 2010-10-25 16:23 ` Stefan Weil @ 2010-10-25 16:54 ` Michael S. Tsirkin 2010-11-15 17:06 ` Stefan Weil 0 siblings, 1 reply; 43+ messages in thread From: Michael S. Tsirkin @ 2010-10-25 16:54 UTC (permalink / raw) To: Stefan Weil; +Cc: Markus Armbruster, qemu-devel On Mon, Oct 25, 2010 at 06:23:24PM +0200, Stefan Weil wrote: > Am 25.10.2010 14:11, schrieb Markus Armbruster: > >Stefan Weil <weil@mail.berlios.de> writes: > > > >>Am 13.10.2010 09:13, schrieb Markus Armbruster: > >>>Stefan Weil<weil@mail.berlios.de> writes: > >[...] > >>>>Do you think there is urgent need for a > >>>>gpxe-eepro100-80862449.rom binary? > >>>> > >>>Well, "-device i82801" complains because it misses this binary. Do we > >>>want to ship that way? > >>> > >> > >>I just sent two patches which create the rom data on load. > >>So -device i82801 no longer complains but gets the boot > >>information from dhcp (tested with i386-softmmu). > >> > >>Your build tree will be made smaller by at least 50 KB :-) > >> > >>Do you think these patches should be added to stable-0.13, too? > > > >If the gain for "-device i82801" is worth the risk, which depends on the > >patch. Have we reached consensus on how to fix it in master? > > > The latest patch version fixes rom data only for the default > roms, so the risk is minimized and full tests are possible. > > There is still no consensus whether we need a new qdev property > (which allows users to have their rom data fixed, too) or not. > > My patch does not prevent adding that new qdev property, > so I suggest applying my patch now and adding the property > later (if it is ever needed). > > Regards > Stefan Fair enough, I guess. -- MST ^ permalink raw reply [flat|nested] 43+ messages in thread
* [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? 2010-10-25 16:54 ` Michael S. Tsirkin @ 2010-11-15 17:06 ` Stefan Weil 0 siblings, 0 replies; 43+ messages in thread From: Stefan Weil @ 2010-11-15 17:06 UTC (permalink / raw) To: Anthony Liguori; +Cc: Michael S. Tsirkin, Markus Armbruster, qemu-devel Am 25.10.2010 18:54, schrieb Michael S. Tsirkin: > On Mon, Oct 25, 2010 at 06:23:24PM +0200, Stefan Weil wrote: > >> Am 25.10.2010 14:11, schrieb Markus Armbruster: >> >>> Stefan Weil<weil@mail.berlios.de> writes: >>> >>> >>>> Am 13.10.2010 09:13, schrieb Markus Armbruster: >>>> >>>>> Stefan Weil<weil@mail.berlios.de> writes: >>>>> >>> [...] >>> >>>>>> Do you think there is urgent need for a >>>>>> gpxe-eepro100-80862449.rom binary? >>>>>> >>>>>> >>>>> Well, "-device i82801" complains because it misses this binary. Do we >>>>> want to ship that way? >>>>> >>>>> >>>> I just sent two patches which create the rom data on load. >>>> So -device i82801 no longer complains but gets the boot >>>> information from dhcp (tested with i386-softmmu). >>>> >>>> Your build tree will be made smaller by at least 50 KB :-) >>>> >>>> Do you think these patches should be added to stable-0.13, too? >>>> >>> If the gain for "-device i82801" is worth the risk, which depends on the >>> patch. Have we reached consensus on how to fix it in master? >>> >> >> The latest patch version fixes rom data only for the default >> roms, so the risk is minimized and full tests are possible. >> >> There is still no consensus whether we need a new qdev property >> (which allows users to have their rom data fixed, too) or not. >> >> My patch does not prevent adding that new qdev property, >> so I suggest applying my patch now and adding the property >> later (if it is ever needed). >> >> Regards >> Stefan >> > Fair enough, I guess. > So is there consensus that both patches can be committed to qemu master? ^ permalink raw reply [flat|nested] 43+ messages in thread
end of thread, other threads:[~2010-11-22 6:29 UTC | newest] Thread overview: 43+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-10-12 12:41 [Qemu-devel] Where's gpxe-eepro100-80862449.rom ? Markus Armbruster 2010-10-12 16:18 ` [Qemu-devel] " Stefan Weil 2010-10-13 7:13 ` Markus Armbruster 2010-10-15 20:51 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI device id in PCI ROM Stefan Weil 2010-10-15 21:05 ` Anthony Liguori 2010-10-18 10:09 ` Gerd Hoffmann 2010-10-18 18:39 ` Anthony Liguori 2010-10-21 10:09 ` [SeaBIOS] " Avi Kivity 2010-10-21 13:14 ` Anthony Liguori 2010-10-21 15:34 ` Avi Kivity 2010-10-18 10:04 ` Gerd Hoffmann 2010-10-18 11:16 ` Stefan Weil 2010-10-18 11:54 ` Gerd Hoffmann 2010-10-18 13:16 ` Stefan Weil 2010-10-18 13:30 ` Gerd Hoffmann 2010-10-18 15:50 ` Gerd Hoffmann 2010-10-18 17:54 ` Stefan Weil 2010-10-18 17:55 ` [Qemu-devel] [PATCH 1/2] pci: Automatically patch PCI vendor id and " Stefan Weil 2010-10-18 17:58 ` [Qemu-devel] " Michael S. Tsirkin 2010-10-18 18:42 ` Anthony Liguori 2010-10-18 19:03 ` Michael S. Tsirkin 2010-10-18 19:36 ` Stefan Weil 2010-10-18 19:59 ` Anthony Liguori 2010-10-19 6:40 ` Gerd Hoffmann 2010-10-18 19:56 ` Anthony Liguori 2010-10-18 18:44 ` [Qemu-devel] " Anthony Liguori 2010-10-18 18:53 ` Anthony Liguori 2010-10-18 19:11 ` Stefan Weil 2010-10-19 8:37 ` Michael S. Tsirkin 2010-10-19 21:15 ` Stefan Weil 2010-10-19 21:22 ` Anthony Liguori 2010-10-19 21:25 ` Michael S. Tsirkin 2010-10-19 21:08 ` Stefan Weil 2010-10-20 7:19 ` [Qemu-devel] " Gerd Hoffmann 2010-10-20 20:30 ` Stefan Weil 2010-11-22 6:29 ` Michael S. Tsirkin 2010-10-15 20:51 ` [Qemu-devel] [PATCH 2/2] eepro100: Use a single rom file for all i825xx devices Stefan Weil 2010-11-22 6:29 ` [Qemu-devel] " Michael S. Tsirkin 2010-10-15 21:03 ` [Qemu-devel] Re: Where's gpxe-eepro100-80862449.rom ? Stefan Weil 2010-10-25 12:11 ` Markus Armbruster 2010-10-25 16:23 ` Stefan Weil 2010-10-25 16:54 ` Michael S. Tsirkin 2010-11-15 17:06 ` Stefan Weil
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).