Laszlo Ersek <ler...@redhat.com> writes: > This patch allows the user to usefully specify > > -drive file=img_1,if=pflash,format=raw,readonly \ > -drive file=img_2,if=pflash,format=raw > > on the command line. The flash images will be mapped under 4G in their > reverse unit order -- that is, with their base addresses progressing > downwards, in increasing unit order. > > (The unit number increases with command line order if not explicitly > specified.) > > This accommodates the following use case: suppose that OVMF is split in > two parts, a writeable host file for non-volatile variable storage, and a > read-only part for bootstrap and decompressible executable code. > > The binary code part would be read-only, centrally managed on the host > system, and passed in as unit 0. The variable store would be writeable, > VM-specific, and passed in as unit 1. > > 00000000ffe00000-00000000ffe1ffff (prio 0, R-): system.flash1 > 00000000ffe20000-00000000ffffffff (prio 0, R-): system.flash0 > > (If the guest tries to write to the flash range that is backed by the > read-only drive, bdrv_write() in pflash_update() will correctly deny the > write with -EACCES, and pflash_update() won't care, which suits us well.)
Before this patch: You can define as many if=pflash drives as you want. Any with non-zero index are silently ignored. If you don't specify one with index=0, you get a ROM at the top of the 32 bit address space, contents taken from -bios (default "bios.bin"). Up to its last 128KiB are aliased at the top of the ISA address space. If you do specify one with index=0, you get a pflash device at the top of the 32 bit address space, with contents from the drive, and -bios is silently ignored. Up to its last 128KiB are copied to a ROM at the top of the (20 bit) ISA address space. After this patch (please correct misunderstandings): Now the drives after the first unused index are silently ignored. If you don't specify one with index=0, no change. If you do, you now get N pflash devices, where N is the first unused index. Each pflash's contents is taken from the respective drive. The flashes are mapped at the top of the 32 bit address space in reverse index order. -bios is silently ignored, as before. Up to the last 128KiB of the index=0 flash are copied to a ROM at the top of the ISA address space. Thus, no change for index=0. For index=1..N, we now get additional flash devices. Correct?