blob: 1165d224847dab728c013f7bb3c6feb49aee0ce9 [file] [log] [blame]
#! /bin/bash
coreboot_dir="coreboot_minnowmax"
coreboot_repo="http://review.coreboot.org/coreboot.git"
coreboot_commit_id="4013469c5078"
fsp_dir="BAY_TRAIL_FSP_KIT"
fsp_package_file="BAY_TRAIL_FSP_KIT_GOLD3.tgz"
fsp_installer="BAY_TRAIL_FSP_KIT.se"
fsp_url="http://downloadmirror.intel.com/24496/eng/${fsp_package_file}"
fsp_checksum="7f47e663564cf57c07155b663330c996 *BAY_TRAIL_FSP_KIT_GOLD3.tgz"
uefi_rom="MinnowBoard.MAX.X64.083.R01.bin"
uefi_dir="MinnowBoard.MAX.X64.083.R01"
uefi_package_file="MinnowBoard.MAX_.X64.083.R01.zip"
uefi_rom_url="http://firmware.intel.com/sites/default/files/$uefi_package_file"
uefi_checksum="cf1e9f8efbb6a6759638c0897921235b *MinnowBoard.MAX_.X64.083.R01.zip"
final_checksum="" # issue in coreboot prevented reproducibility
RED='\033[1;31m'
green='\033[0;32m'
GREEN='\033[1;32m'
blue='\033[0;34m'
BLUE='\033[1;34m'
NC='\033[0m' # No Color
# shellcheck disable=SC2059
error ()
{
printf "${RED}ERROR: $1 ${NC}\n" >&2
if [ -n "$2" ]; then printf "${RED}Removing $2 ${NC}\n"; rm -rf "./$2"; fi
exit 1
}
please_install()
{
test -r /etc/os-release && . /etc/os-release
case "$ID_LIKE" in
debian) solution="sudo apt-get install $1" ;;
suse) solution="sudo zypper install $1" ;;
*) solution="using your OS packaging system" ;;
esac
error "Missing tool: Please install \'$1\' utility. (eg $solution)"
}
searchtool()
{
# $1 short name
# $2 search string
# $3 soft fail if set
# result: file name of that tool on stdout
# or no output if nothing suitable was found
search=GNU
if [ -n "$2" ]; then
search="$2"
fi
for i in "$1" "g$1" "gnu$1"; do
if [ -x "$(which "$i" 2>/dev/null)" ]; then
if [ "$($i --version < /dev/null 2>&1 | grep -c "$search")" \
-gt 0 ]; then
echo "$i"
return
fi
fi
done
please_install "$1"
[ -z "$3" ] && exit 1
false
}
# shellcheck disable=SC2059
printf "${blue}Checking required tools: ${BLUE}m4 bison flex g++ wget md5sum unzip tar${NC}\n"
searchtool m4 > /dev/null
searchtool bison > /dev/null
searchtool flex flex > /dev/null
searchtool g++ "Free Software Foundation" nofail > /dev/null || \
searchtool wget > /dev/null
searchtool md5sum > /dev/null
searchtool unzip > /dev/null
searchtool tar > /dev/null
# shellcheck disable=SC2059
printf "${green}All tools present.${NC}\n\n"
# shellcheck disable=SC2059
if [ ! -d "$coreboot_dir" ]; then
printf "${blue}Fetching coreboot repository:${NC} "
git clone "$coreboot_repo" "$coreboot_dir"
if [ $? -ne 0 ] || [ ! -d "$coreboot_dir" ]; then error "coreboot repo failed to download." "$coreboot_dir"; fi
sleep 1
printf "${green}coreboot repo downloaded successfully.${NC}\n"
fi
pushd "./$coreboot_dir" || error "couldn't cd to $coreboot_dir" "$coreboot_dir"
git checkout "$coreboot_commit_id" || error "Couldn't checkout $coreboot_commit_id"
# shellcheck disable=SC2059
if [ ! -d "$fsp_dir" ]; then
printf "${blue}Downloading & setting up FSP${NC}\n"
if [ ! -f "$fsp_package_file" ]; then
wget "$fsp_url" || error "FSP file $fsp_package_file not downloaded"
echo "$fsp_checksum" > fsp_checksum.txt
md5sum --check fsp_checksum.txt || error "md5sum for $fsp_package_file failed." "$fsp_package_file"
fi
if [ ! -f "$fsp_installer" ]; then
tar xvf "$fsp_package_file" || error "Failed to extract $fsp_package_file" "$fsp_package_file"
fi
chmod +x "$fsp_installer"
"./$fsp_installer" || error "Failed to run $fsp_installer successfully" "$fsp_installer"
printf "${green}FSP set up successfully.${NC}\n"
fi
# shellcheck disable=SC2059
if [ ! -f ./descriptor.bin ] || [ ! -f txe.bin ]; then
printf "${blue}Downloading / extracting Intel Firmware Descriptor & TXE${NC}\n"
if [ ! -f "$uefi_dir/$uefi_rom" ]; then
if [ ! -f "$uefi_package_file" ]; then
wget "$uefi_rom_url" || error "FSP file $uefi_package_file not downloaded"
echo "$uefi_checksum" > uefi_checksum.txt
md5sum --check uefi_checksum.txt || error "md5sum for $fsp_package_file failed." "$uefi_package_file"
fi
unzip "$uefi_package_file" || error "Could not unzip for $fsp_package_file" "$uefi_package_file"
fi
if [ ! -f util/ifdtool/ifdtool ]; then
make -C util/ifdtool || error "Couldn't build ifdtool"
fi
util/ifdtool/ifdtool -x "$uefi_dir/$uefi_rom" || error "Couldn't extract intel firmware descriptor" "flashregion*"
mv flashregion_0_flashdescriptor.bin descriptor.bin || error "Couldn't rename firmware descriptor" "flashregion*"
mv flashregion_2_intel_me.bin txe.bin || error "Couldn't rename TXE" "flashregion*"
rm -f flashregion*
printf "${green}Intel Firmware Descriptor & TXE extracted successfully.${NC}\n\n"
fi
# shellcheck disable=SC2059
if [ -z "$XGCCPATH" ] && [ ! -f ./util/crossgcc/xgcc/bin/i386-elf-gcc ]; then
printf "\n${blue}Building coreboot toolchain - This can take a while.${NC}\n"
make crossgcc-i386 CPUS="$(nproc)" || error "coreboot toolchain build failed" "./util/crossgcc/xgcc"
printf "${green}coreboot toolchain build successfully.${NC}\n\n"
fi
# shellcheck disable=SC2059
printf "${blue}Building coreboot${NC}\n"
cat << EOF > .config
CONFIG_VENDOR_INTEL=y
CONFIG_VGA_BIOS=y
CONFIG_VGA_BIOS_FILE="BAY_TRAIL_FSP_KIT/Graphics/INTEL_EMGD.VBIOS_GOLD_VERSION_36_2_3_3698/Vga.dat"
CONFIG_HAVE_IFD_BIN=y
CONFIG_HAVE_ME_BIN=y
CONFIG_FSP_FILE="BAY_TRAIL_FSP_KIT/FSP/BAYTRAIL_FSP_GOLD_003_16-SEP-2014.fd"
CONFIG_BOARD_INTEL_MINNOWMAX=y
CONFIG_ENABLE_BUILTIN_COM1=y
CONFIG_CPU_MICROCODE_HEADER_FILES="BAY_TRAIL_FSP_KIT/Microcode/M0130673322.h BAY_TRAIL_FSP_KIT/Microcode/M0130679901.h"
CONFIG_IFD_BIN_PATH="descriptor.bin"
CONFIG_ME_BIN_PATH="txe.bin"
CONFIG_HAVE_FSP_BIN=y
CONFIG_CONSOLE_POST=y
# CONFIG_POST_IO is not set
CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME="Minnowboard Max"
CONFIG_SEABIOS_THREAD_OPTIONROMS=y
EOF
make olddefconfig || "Make olddefconfig failed." ".config"
make clean
make || error "make failed" "build"
# shellcheck disable=SC2059
if [ -n "$final_checksum" ]; then
echo "$final_checksum" > final_checksum.txt
md5sum --check final_checksum.txt || error "md5sum for final rom (build/coreboot.rom) failed."
printf "${GREEN}coreboot build completed and checksummed successfully.\n\n"
else
md5sum -b build/coreboot.rom
printf "${GREEN}coreboot build completed successfully.\n\n"
fi
# shellcheck disable=SC2059
printf "${GREEN}Full 8MB rom available as ${coreboot_dir}/build/coreboot.rom${NC}\n"
printf "Flash MinnowBoard Max using dediprog with the command:\n"
printf " flashrom -p dediprog:voltage=1.8v -w %s/build/coreboot.rom\n" "${coreboot_dir}"
printf "For the MinnowBoard Turbot, use the command above, replacing '1.8v' with '3.5v'\n"
printf "Flash either board using a spi hook with the command:\n"
printf " flashrom -p ft2232_spi:type=2232h,port=A,divisor=4 -w %s/build/coreboot.rom\n\n" "${coreboot_dir}"