mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-12 19:04:59 +00:00
Change-Id: I9f37e291c00c0640c6600d8fdd6dcc13c3e5b8d5 Signed-off-by: Duncan Laurie <dlaurie@google.com> Signed-off-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: http://review.coreboot.org/855 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
108 lines
2.6 KiB
Bash
Executable File
108 lines
2.6 KiB
Bash
Executable File
#!/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=20111110
|
|
MICROCODE_ARCHIVE=microcode-$MICROCODE_VERSION.tgz
|
|
MICROCODE_FILE=microcode.dat
|
|
INTEL_MICROCODE=http://downloadmirror.intel.com/20728/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_FILE '/^\/\*.*\.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
|
|
|