Update Intel microcode include files from their web page.

This still requires someone to adjust the #includes in the
model_XXX_init.c files but with a script we're getting closer
to automate the update of 3rd party files.

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Myles Watson <mylesgw@gmail.com>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5593 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Stefan Reinauer 2010-05-26 17:08:13 +00:00 committed by Stefan Reinauer
parent f71fca0a7f
commit 89ef0a9f41
1 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,107 @@
#!/bin/bash
#
# This file is part of the coreboot project.
#
# Copyright (C) 2007-2010 coresystems GmbH
#
# This program 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; version 2 of the License.
#
# This program 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
MICROCODE_VERSION=20100209
MICROCODE_ARCHIVE=microcode-$MICROCODE_VERSION.tgz
MICROCODE_FILE=microcode-$MICROCODE_VERSION.dat
INTEL_MICROCODE=http://downloadmirror.intel.com/18683/eng/$MICROCODE_ARCHIVE
#
# Getting Intel(R) Microcode
#
get_microcode() {
printf "Getting microcode...\n"
wget -nv $INTEL_MICROCODE
tar xzf $MICROCODE_ARCHIVE
}
#
# Creating separate files per microcode
#
separate_microcode() {
printf "Separating microcode...\n"
csplit -s -n4 -k microcode-20100209.dat '/^\/\*.*\.inc.*\*\//' '{500}' 2> /dev/null
mv xx0000 header.inc
perl -pi -e 's,\ \ \ \ \ \ \ ,\ ,' header.inc
perl -pi -e 's,^,/,g' header.inc
perl -pi -e 's,^//\*,/\*,' header.inc
for i in xx????; do
name="`head -1 $i`"
name=${name%??}
name=${name:2}
name=$( echo $name )
name=microcode-${name%.inc}.h
cat header.inc $i > $name
done
rm -f xx???? header.inc
}
#
# Dump CPUIDs from all separated files
#
dump_cpuids() {
ls -1 microcode-*.h | while read F; do
CPUID="$( echo $( head -36 $F |tail -1|cut -d, -f4|sed s,0x,, ) | sed 's/0*//')"
echo "$CPUID:$F"
done
}
#
# Move microcode to target positions
#
move_microcode() {
printf "Moving microcode...\n"
dump_cpuids | sort | while read N; do
ID=$( echo $N | cut -d: -f1 )
F=$( echo $N | cut -d: -f2 )
if [ -d ../model_$ID ]; then
echo "Model: $ID Microcode: $F"
mv $F ../model_$ID/$F
else
ID2=${ID%?}x
if [ -d ../model_$ID2 ]; then
echo "Model: $ID($ID2) Microcode: $F (copied)"
mv $F ../model_$ID2/$F
else
ID1=${ID%??}xx
if [ -d ../model_$ID1 ]; then
echo "Model: $ID($ID1) Microcode: $F (copied)"
mv $F ../model_$ID1/$F
else
echo "Model: $ID Microcode: $F (erased)"
rm -f $F
fi
fi
fi
done
}
get_microcode
separate_microcode
move_microcode
rm -f $MICROCODE_ARCHIVE
rm -f $MICROCODE_FILE