A question. How is one supposed to make use of this script?
As part of my effort to re-enable L2 cache on SECC Pentium 2/3s I'd also split off model_63x, model_65x and model_67x (patch submitted earlier and fell into limbo) and introduce all available microcode to the family. Actually I would like to see one folder and one microcode update file for one family of CPUs. Less overhead on so many fronts - number of files, compiler processing and license headers.
Regards Keith
Message: 3 Date: Wed, 26 May 2010 19:08:14 +0200 From: repository service svn@coreboot.org To: coreboot@coreboot.org Subject: [coreboot] [commit] r5593 - trunk/src/cpu/intel/microcode Message-ID: E1OHK5W-0002j4-5Z@ra.coresystems.de Content-Type: text/plain; charset=UTF-8
Author: stepan Date: Wed May 26 19:08:13 2010 New Revision: 5593 URL: https://tracker.coreboot.org/trac/coreboot/changeset/5593
Log: 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
Added: trunk/src/cpu/intel/microcode/update-microcodes.sh
Added: trunk/src/cpu/intel/microcode/update-microcodes.sh
--- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/src/cpu/intel/microcode/update-microcodes.sh Wed May 26 19:08:13 2010 (r5593) @@ -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
On 5/27/10 3:50 AM, Keith Hui wrote:
A question. How is one supposed to make use of this script?
$ cd src/cpu/intel/microcode $ sh update-microcode.sh
Then you cd to your CPU model directory and check what's there.
As part of my effort to re-enable L2 cache on SECC Pentium 2/3s I'd also split off model_63x, model_65x and model_67x (patch submitted earlier and fell into limbo) and introduce all available microcode to the family.
If a model_635 directory is there, the script will copy a model 635 microcode there. Next it would try model_63x, then model_6xx, then delete the file.
I'd suggest that you wipe old existing microcode files before running the script so you see which ones are outdated and which ones are new.
Actually I would like to see one folder and one microcode update file for one family of CPUs. Less overhead on so many fronts - number of files, compiler processing and license headers.
The files are all automatically generated (now) so it's not really an issue. The way it's done now with single files allows you to comment in/out single microcodes.
Generally, mid term I want to move microcode to CBFS and wipe it completely from the coreboot source tree. Instead coreboot should be able to parse an intel microcode file specified in Kconfig, or it could download it automatically and use it. This way we don't have to carry around potentially troublesome binary hunks.
Stefan