Hello,
I have been trying to use Coreboot (with SeaBIOS as payload) on a VIA
EPIA-M mainboard, but had some problems with it. I have built
everything with the toolchain that comes with Coreboot.
To make everything (Coreboot + VGA BIOS + SeaBIOS) fit in the 256 KB
flash memory, I had to LZMA compress both Coreboot and SeaBIOS.
Unfortunately LZMA compression did not work for either Coreboot, nor
for the payload.
When compressing Coreboot's ramstage with LZMA, on boot it fails with
the following error message when trying to decompress it:
Trying CBFS ramstage loader.
CBFS: loading stage fallback/ramstage @ 0x100000 (151600 bytes), entry
@ 0x100000
CBFS: tried to decompress 43540 bytes with algorithm #1,but that
algorithm id is unsupported.
Ramstage was not loaded!
The next thing I tried was to omit the VGA BIOS, so I could fit
Coreboot and SeaBIOS uncompressed in the flash memory. With that
configuration Coreboot was able to finish successfully and then load
SeaBIOS. Unfortunately, SeaBIOS did not do much besides printing two
lines of text:
SeaBIOS (version rel-1.7.5-42-g275672e-20140817_233743-themachine)
0
After that, it would reboot the machine and it would do the same thing
over and over again.
It made no difference when I increased the debug output level of
SeaBIOS.
Next I tried to figure out why LZMA compression did not work.
LZMA compression is compiled when CBFS_CORE_WITH_LZMA is defined. I
figured out that it gets defined at the beginning of src/lib/cbfs.c,
depending on a few conditions. Even though I had enabled LZMA
compression through the configuration menu, the constant did not get
defined, though. So what I then tried was to define it unconditionally
in that cbfs.c file. I did not investigate further which condition
prevented it from being defined in the first place, but that change
allowed me to build a Coreboot ROM where the romstage LZMA
decompression worked fine.
LZMA decompression of the payload still did not work, though. It
failed with an error message:
CBFS: located payload @ fffed238, 48776 bytes.
Loading segment from rom address 0xfffed238
code (compression=1)
New segment dstaddr 0xe9880 memsize 0x16780 srcaddr 0xfffed270
filesize 0xbe50
(cleaned up) New segment addr 0xe9880 size 0x16780 offset 0xfffed270
filesize 0xbe50
Loading segment from rom address 0xfffed254
Entry Point 0x000fd1e9
Bounce Buffer at 0df95000, 303200 bytes
Loading Segment: addr: 0x00000000000e9880 memsz: 0x0000000000016780
filesz: 0x000000000000be50
lb: [0x0000000000100000, 0x0000000000125030)
Post relocation: addr: 0x00000000000e9880 memsz: 0x0000000000016780
filesz: 0x000000000000be50
using LZMA
lzma: Decoding error = 1
Could not load payload
Using a compressed Coreboot and uncompressed SeaBIOS did not change
SeaBIOS' behavior. It still prints only its version string and a 0 on
the next line.
I tried both the default configuration of SeaBIOS and with a more
stripped down configuration (leaving out unused stuff like XHCI and
OHCI, no splash screen etc. to reduce its size). None of the changes I
tried made a difference in SeaBIOS' behavior.
Any help or hints on what I might be missing are very appreciated.
If you need any more information, please let me know. I did not attach
any config files/log files yet, because I tried so many different
things.
Thanks
xchip