[SeaBIOS] How to load but not run Option ROMs?
kevin at koconnor.net
Wed Jul 16 20:03:38 CEST 2014
On Sat, Jul 12, 2014 at 01:00:01PM +0200, Paul Menzel wrote:
> Dear SeaBIOS folks,
> in the thread *Help for Coreboot project*  on the coreboot mailing
> list, Denis Carikli wrote that to get graphics under Linux (not GRUB or
> SeaBIOS) with AMD/ATI graphics devices it is enough to place/load(?) the
> Video BIOS/VGA Option ROM at the right place and not run it.
> The same is needed for some Intel devices (Google Chromebooks) so the
> VBT, needed for setting up the panel, is found.
> Enabling that option in coreboot (currently only possible by changing
> `def_bool` to `y`) and disabling Option ROM handling in SeaBIOS did not
> work. I think SeaBIOS overwrote the region (`/proc/iomem`).
Right - SeaBIOS considers itself the sole owner of memory between
0xc0000-0xfffff. It initializes and manages that memory.
> Looking for configuration options in SeaBIOS, there is the Kconfig
> option `OPTIONROMS_DEPLOYED`, which only available for QEMU though. Also
> it uses placed/loaded Option ROMs and still runs them.
As Gerd mentioned, that option is not what you want.
> I guess more Kconfig options have to be added to support my use case. Is
> that wanted or should I do as Denis wrote and patch the SeaBIOS locally?
If you don't want the optionrom to be executed I think it would be
better to just modify the optionrom so that it didn't do anything when
run. For example, by modifying the 4th byte of the image to be the
lretw instruction (0xcb), and then updating the checksum. That way
the rom gets loaded into memory but effectively does not execute any
code when loaded. No need for a custom SeaBIOS image.
Another approach which may be possible would be to figure out what
tables Linux wants to read from the optionrom, place those tables in a
coreboot table or cbfs file, and then teach the cbvga SeaVGABIOS code
to load those tables. If that is feasible one could then use
the SeaVGABIOS as a vga optionrom.
More information about the SeaBIOS