#!/bin/bash
# Script to update seabios in an Acer c720 image.

CBFSTOOL=~/src/coreboot/coreboot/build/cbfstool
ORIGFILE=../image-20140117.rom
FINALFILE=image.rom
PAYLOAD=~/src/coreboot/seabios/out/bios.bin.elf

# Build seabios for coreboot and set CONFIG_CBFS_LOCATION=0xffe00000
# and place final bios.bin.elf at $PAYLOAD

# On c720, run:
#  sudo flashrom -r /tmp/image.rom
#  scp /tmp/image.rom buildmachine:$ORIGFILE

# Extract vgabios from seabios CBFS area of original image.
ORIGCBFSFILE=orig-seabios.cbfs
dd if=$ORIGFILE of=$ORIGCBFSFILE skip=2 bs=2M count=1
$CBFSTOOL $ORIGCBFSFILE extract -n pci8086,0406.rom -f pci8086,0406.rom

# Build new seabios CBFS image.
CBFSFILE=seabios.cbfs
dd if=/dev/zero of=bootblock count=1 bs=64
$CBFSTOOL $CBFSFILE create -s $(( 2*1024*1024 )) -B bootblock -m x86

$CBFSTOOL $CBFSFILE add-payload -f $PAYLOAD -n payload -c lzma
$CBFSTOOL $CBFSFILE add -f pci8086,0406.rom -n pci8086,0a06.rom -t optionrom

$CBFSTOOL $CBFSFILE add -f bootorder -n bootorder -t raw
$CBFSTOOL $CBFSFILE add -f boot-menu-message -n etc/boot-menu-message -t raw
$CBFSTOOL $CBFSFILE add -f boot-menu-key -n etc/boot-menu-key -t raw

/bin/echo -ne \\0737 | dd of=$CBFSFILE seek=$(( (2*1024*1024) - 2 )) bs=1 conv=notrunc
$CBFSTOOL $CBFSFILE print

# Combine seabios CBFS with original rom to build final image.
cp $ORIGFILE $FINALFILE
dd if=$CBFSFILE of=$FINALFILE seek=2 bs=2M conv=notrunc

# On c720, run:
#  scp buildmachine:$FINALFILE /tmp/newimage.rom
#  sudo flashrom -w /tmp/newimage.rom -i RW_LEGACY
