|PCIE_x16_comments = Works on hardware rev v2, but is ATM untested on v1. Patch: http://www.coreboot.org/pipermail/coreboot/2009-June/049459.html (Hopefully this get's commited in the next days. Date: 11.06.09)

Which board do you have?

The GIGABYTE GA-M57SLI-S4 seems to exist in 4 versions as of 2007/05.

There is a version with a PLCC socket for the BIOS chip (socketed BIOS), but this might be a pre-production board since nobody has so far (2007/03) confirmed the purchase of a GA-M57SLI-S4 board with socketed BIOS. The mainboard photo on the backside of the GA-M57SLI-S4 box shows a ROM socket too.

There are 4 volume revisions, 2 with PLCC32 (v1.0, v1.1) (soldered BIOS) and another 2 with single 8 pin SOIC (SPI). All 4 have unpopulated secondary pads. For the PLCC32 versions, the procedure outlined below can be used to add a ROM socket.

A PLCC32 revision of the GA-M57SLI-S4

An SPI revision of the GA-M57SLI-S4

Status

Device/functionality

Status

Comments

CPU

CPU works

OK

L1 cache enabled

OK

L2 cache enabled

OK

L3 cache enabled

N/A

Multiple CPU support

N/A

Multi-core support

OK

Hardware virtualization

Untested

RAM

EDO

N/A

SDRAM

N/A

SO-DIMM

N/A

DDR

N/A

DDR2

OK

DDR3

N/A

Dual channel support

OK

According to memtest86+ it works.

ECC support

Untested

On-board Hardware

On-board IDE 3.5"

OK

On-board IDE 2.5"

N/A

On-board SATA

OK

A FILO patch is needed (see below) as coreboot is too fast and the disks have not spun up yet when coreboot is done.

Use revision 3088 or higher. Flashrom now works on both the PLCC and SOIC/SPI versions of the board.

Before you begin

The fact that the BIOS is soldered onto the board complicates matters considerably, because it means that one flash of a faulty image will render your board unusable (it will be 'bricked'). Top Hat Flash does not work with the SST 49LF040B 33-4C-NHE soldered onto the GA-M57SLI-S4, but might work with other chips (FWH). This means a hardware hack is necessary to prevent accidental bricking of the board.

This board sells for around €83 ($104 in the US). With it's standard F8 legacy BIOS it requires the noapic boot parameter with most old kernels (legacy BIOS v. F12 is better).

This wiki page is maintained by Ward Vandewege (ward at gnu dot org).

If you're going to work on this board, you need a backup plan in the event you flash a faulty BIOS image. You have been warned!

PLCC32 hardware hack

If you have a PLCC32 revision, it is possible to desolder the BIOS chip, and replace it with a PLCC socket. You will need some tools (heat gun/pencil, good soldering iron, etc) and soldering experience to do that. The other option is to add a PLCC socket to the empty position next to the soldered-on BIOS chip. With an extra resistor and a switch, this allows switching between 2 BIOS chips. This has been documented carefully by ST; see his instructions.

If you don't feel like doing this yourself, you could try to find a commercial service to do it for you. One way to find a shop is to look for game console modification
shops, they do this sort of thing (and more advanced things) all day and should be able to help you for around $50 if you bring the needed components (PLCC socket, resistor, wire and switch). Possibly a friendly TV or radio repair shop could help too, but they may not have suitable soldering equipment for the surface mount parts.

Once you put a socket on the board, you will also discover that the RD1-PMC4 BiosSavior does not work with this motherboard: the RD1's built-in chip seems to be incompatible with the mainboard. This means you will need to hot-swap BIOS chips until you have a working coreboot chip. Plugging your BIOS chip into the RD1 and switching it to 'ORG' does work though. I have used the BiosSavior to ease hot swapping; it's a lot easier to pull out the BiosSavior and replace the chip plugged into it than to replace the ROM chip on the board.

This is the list of BiosSavior resellers: IOSS.
In the US, FrozenCPU seems to have stock (verified 2007/04). Eksitdata in Sweden also seems to have stock (verified 2007/03).

SOIC hardware hack

If you have an SOIC revision, you can add a second SOIC chip in the unpopulated position, and use a switch to toggle between both chips.

The most recent instructions by Peter Stuge can be found here [1]. This is the recommended modification. Peter's company also sells pre-modified boards if you don't want to do the soldering, contact peter at stuge dot se for more information.

Payload

If you want to boot from an IDE drive, SATA drive, USB stick or CDROM, you can use FILO.

Another possible payload is 'linux-as-a-bootloader' (LAB). You will need a 1MB ROM chip (the GA-M57SLI-S4 comes with a 512KB ROM chip) for this payload. It consists of a (stripped down) kernel + busybox, which can then be used to kexec a kernel from disk. If your disks are playing up, you will still have a busybox environment on boot, which could be useful for debugging.

Buildrom vs. manual build

You can build a coreboot image with a kconfig-style configuration tool (buildrom) if you want to use FILO or LAB. This is by far the easiest way to build a ROM image. Continue to the Buildrom section.

If you want another payload or would like to get closer to the metal, you can use the manual build method outlined below under Manual build.

Buildrom

Skip this section if you want to do a manual build; in that case jump to Manual build below.

Configure to your liking. If you use the LAB payload, make sure to exclude the kexec binary and boot menu from the initramfs, otherwise your image will be too big. Please note that currently only the FILO and LAB payloads have been tested. The other payloads likely require some more work before they will be useable. Patches are welcome, of course.

make

If all goes well, you should now have a ROM image file

deploy/gigabyte-m57sli.rom

If you are building a FILO payload, it will be exactly 512KB in size. If you are building an LAB payload, the image will be 1MB.

FILO payload

Skip this section if you use the LAB payload.

When using FILO in GRUB emulation mode, it's important to get a few details right in your GRUB boot stanza. This is what mine looks like:

The problem is that the -lz really needs to go at the end of the gcc command line - otherwise it gets filtered out by gcc. When it encounters -lz, it has not yet seen any need for the libz library so it automatically removes it. Manually running

The binary will also be considerably larger than its dynamically linked cousin.

Note that you must build a 32-bit version of kexec, because buildrom puts a 32 bit kernel into the ROM image. A 32-bit kexec can kexec into a 64 bit kernel, so if your system is 64 bit this will work just fine.

The LAB code currently expects lab.conf and kexec to live in / on /dev/sda1.

Manual build

Skip this section if you used buildrom; in that case jump to Burning coreboot below.

Building the payload

In order to boot from a SATA disk, we use FILO.

Once you've downloaded FILO, you will need to put a file 'Config' in its root tree. An example can be found in the distribution, called 'defconfig'.

You can configure FILO to load GRUB. Here's my Config, which does that:

Now execute 'make', which will generate a filo.elf file that will be your payload. You will need to refer to this file to build coreboot as explained below, because it gets included in the coreboot ROM image.

Your menu.lst entry

When using FILO in GRUB emulation mode, it's important to get a few details right in your GRUB boot stanza. This is what mine looks like:

Also, the GA-M57SLI-S4 will not boot unless you add acpi_use_timer_override as a kernel option - and use a modern kernel (tested on 2.6.20.1 and up). Hopefully this will be fixed in newer kernels. If you have a somewhat older kernel (tested with 2.6.16 and up), add these options: apic=debug acpi_dbg_level=0xffffffff pci=noacpi,routeirq snd-hda-intel.enable_msi=1.

Current status of the coreboot v2 tree

Use revision 3088 or higher.

Building coreboot

Make sure that the path to your payload is correct, by editing

targets/gigabyte/m57sli/Config.lb

and updating all the lines that start with 'payload'. There are 2 occurrences, one for the normal image, and one for the fallback image.

If you get compilation errors, you may need to disable the stack protector that is now enabled by default in the version of GCC shipped with some newer distros. See the stack protector page.

Now build a target directory:

cd targets
./buildtarget gigabyte/m57sli

Finally build the image:

cd gigabyte/m57sli/m57sli
make

This will generate a linuxbios.rom image, which is 512KB large. That's the file that should be burned into your BIOS chip.

Burning coreboot

Make SURE that you have a fallback position: a ROM chip with backup copy of your factory ROM image (you can make one with flashrom), and either a socket on the board to plug the backup chip into, or the tools and skills to remove a 'bricked' BIOS chip from the board and replace it with a socket for the backup chip.

If you do not prepare properly, you are likely to brick your motherboard. You have been warned!

(that's assuming the image is called linuxbios.rom; if you used buildrom it would be called gigabyte-m57sli.rom and live in the 'deploy' subdirectory).

IF YOU ARE USING REVISION 3087 or older: note': You should upgrade to 3088 or higher. In prior releases, on the revision v2.0 of the motherboard there was an issue with the decoding of the I/O addresses into the LPC bridge of the MCP55 southbridge. It occurred only after booting with coreboot (the factory BIOS didn't have this issue). It prevented flashrom to access correctly the SPI interface of the ITE IT8716F chip, thus no reflashing was possible after a first burn of coreboot (without modchip). This issue was fixed and a full coreboot patch is on the tracks. There is also a workaround for the actual release of coreboot: before using flashrom after booting with coreboot, execute the commands:

There is also still an issue with I2C, which causes X startup to be very slow. You can bypass this problem by adding

Option "NoDDC2"

to your "Device" section. Update (14.9.2009): Is this a v1 specific problem? Is this problem maybe fixed with the IRQ-Fix patch?

If you can help out with these issues, please join the mailing list and let us know!

This work is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This work is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.