[coreboot-gerrit] New patch to review for coreboot: d074843 utils: pool together single-file scripts into a single directory

Stefan Tauner (stefan.tauner@gmx.at) gerrit at coreboot.org
Mon Apr 6 16:53:11 CEST 2015


Stefan Tauner (stefan.tauner at gmx.at) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9322

-gerrit

commit d07484398ab2ae2bacc0c5bcc34d3720634abd13
Author: Stefan Tauner <stefan.tauner at gmx.at>
Date:   Mon Apr 6 12:40:17 2015 +0200

    utils: pool together single-file scripts into a single directory
    
    This will most probably break things - do not commit yet!
    I want to get consensus about naming and what files to move at all before
    fixing anything.
    Shall we move gitconfig/ in there too?
    
    Signed-off-by: Stefan Tauner <stefan.tauner at gmx.at>
    Change-Id: I17d3f622a9c64724fe3471a92c243e6bd87ff7ca
---
 util/acpi/acpidump-all                |  50 -------
 util/dtd_parser/dtd_parser.py         | 213 ---------------------------
 util/exynos/fixed_cksum.py            |  59 --------
 util/exynos/variable_cksum.py         |  59 --------
 util/find_usbdebug/find_usbdebug.sh   | 149 -------------------
 util/genbuild_h/genbuild_h.sh         |  64 --------
 util/ipqheader/ipqheader.py           | 130 ----------------
 util/rockchip/LICENSE                 |  25 ----
 util/rockchip/make_idb.py             | 124 ----------------
 util/scripts/acpidump-all             |  50 +++++++
 util/scripts/dtd_parser.py            | 213 +++++++++++++++++++++++++++
 util/scripts/exynos_fixed_cksum.py    |  59 ++++++++
 util/scripts/exynos_variable_cksum.py |  59 ++++++++
 util/scripts/find_usbdebug.sh         | 149 +++++++++++++++++++
 util/scripts/genbuild_h.sh            |  64 ++++++++
 util/scripts/ipqheader.py             | 130 ++++++++++++++++
 util/scripts/rk_make_idb.py           | 150 +++++++++++++++++++
 util/scripts/xcompile                 | 269 ++++++++++++++++++++++++++++++++++
 util/xcompile/xcompile                | 269 ----------------------------------
 19 files changed, 1143 insertions(+), 1142 deletions(-)

diff --git a/util/acpi/acpidump-all b/util/acpi/acpidump-all
deleted file mode 100755
index aa73a15..0000000
--- a/util/acpi/acpidump-all
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/bash
-#
-# Copyright (C) 2007-2010 by 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-#
-
-rm -rf out
-mkdir out
-
-# walk through all ACPI tables with their addresses
-# example:
-#    RSDT @ 0xcf6794ba
-# we can not just dump the tables by their names because some
-# machines have double ACPI tables
-
-acpidump | grep "@ 0x" | while read line
-do
-  NAME=$( echo `echo $line|cut -f1 -d@` )
-  FNAME=$( echo $NAME | sed s/\ /_/g |sed s/\!/b/g )
-  ADDR=$( echo `echo $line|cut -f2 -d@` )
-  if [ "${!FNAME}" == "" ]; then
-    eval $FNAME=0
-  else
-    eval $FNAME=$(( ${!FNAME} + 1 ))
-  fi
-  printf "Processing table \"$NAME\" at $ADDR ... "
-  printf "${!FNAME} tables of that kind found before.\n"
-
-  # acpidump -s ${!FNAME} --table "$NAME" > out/$FNAME-$ADDR-${!FNAME}.txt
-  acpidump -b -s ${!FNAME} --table "$NAME" > out/$FNAME-$ADDR-${!FNAME}.bin
-  if [ "`file -b out/$FNAME-$ADDR-${!FNAME}.bin`" != "ASCII text" ]; then
-    iasl -d out/$FNAME-$ADDR-${!FNAME}.bin &>/dev/null
-  else
-    printf "Skipping $NAME because it was not dumped correctly.\n\n"
-  fi
-
-done
-
diff --git a/util/dtd_parser/dtd_parser.py b/util/dtd_parser/dtd_parser.py
deleted file mode 100755
index 23cc7e7..0000000
--- a/util/dtd_parser/dtd_parser.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#!/usr/bin/python
-# dtd_parser.py - DTD structure parser
-#
-# Copyright (C) 2012 The ChromiumOS Authors.  All rights reserved.
-#
-# 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
-#
-
-'''
-DTD string parser/generator.
-
-Detailed timing descriptor (DTD) is an 18 byte array describing video mode
-(screen resolution, display properties, etc.) in EDID and used by Intel Option
-ROM. Option ROM can support multiple video modes, specific mode is picked by
-the BIOS through the appropriate Option ROM callback function.
-
-This program allows to interpret the 18 byte hex DTD dump, and/or modify
-certain values and generate a new DTD.
-'''
-
-import sys
-
-#
-# The DTD array format description can be found in
-# http://en.wikipedia.org/wiki/Extended_display_identification_data, (see the
-# EDID Detailed Timing Descriptor section).
-#
-# The below dictionary describes how different DTD parameters are laid out in
-# the array. Note that many parameters span multiple bit fields in the DTD.
-#
-# The keys in the dictionary are stings (field names), the values are tuples
-# of either numbers or tri-tuples. If the element of the tuple is a number, it
-# is the offset in DTD, and the entire byte is used in this field. If the
-# element is a tri-tuple, its components are (DTD offset, bit shift, field
-# width).
-#
-# The partial values are extracted from the DTD fields and concatenated
-# together to form actual parameter value.
-#
-
-dtd_descriptor  = {
-    'dclck' : (1, 0),
-    'hor_active' : ((4, 4, 4), 2),
-    'hor_blank' : ((4, 0, 4), 3),
-    'vert_act' : ((7, 4, 4), 5),
-    'vert_blank' : ((7, 0, 4), 6),
-    'hsync_offset' : ((11, 6, 2), 8),
-    'hsync_pulse_width' : ((11, 4, 2), 9),
-    'vsync_offset' : ((11, 2, 2), (10, 4, 4)),
-    'vsync_pulse_width' : ((11, 0, 2), (10, 0, 4)),
-    'hor_image_size' : ((14, 4, 4), 12),
-    'vert_image_size' : ((14, 0, 4), 13),
-    'hor_border' : (15,),
-    'vert_border' : (16,),
-    'interlaced' : ((17, 7, 1),),
-    'reserved' : ((17, 5, 2), (17, 0, 1)),
-    'digital_separate' : ((17, 3, 2),),
-    'vert_polarity' : ((17, 2, 1),),
-    'hor_polarity' : ((17, 1, 1),),
-    }
-
-PREFIX = 'attr_'
-
-class DTD(object):
-    '''An object containing all DTD information.
-
-    The attributes are created dynamically when the input DTD string is
-    parsed. For each element of the above dictionary two attributes are added:
-
-    'attr_<param>' to hold the actual parameter value
-    'max_attr_<param>' to hold the maximum allowed value for this parameter.
-    '''
-
-    def __init__(self):
-        for name in dtd_descriptor:
-            setattr(self, PREFIX + name, 0)
-
-    def init(self, sarray):
-        '''Initialize the object with values from a DTD array.
-
-        Inputs:
-
-        sarray: a string, an array of ASCII hex representations of the 18 DTD
-                bytes.
-
-        Raises: implicitly raises ValueError or IndexError exceptions in case
-                the input string has less than 18 elements, or some of the
-                elements can not be converted to integer.
-        '''
-
-        harray = [int(x, 16) for x in sarray]
-        for name, desc in dtd_descriptor.iteritems():
-            attr_value = 0
-            total_width = 0
-            for tup in desc:
-                if isinstance(tup, tuple):
-                    offset, shift, width = tup
-                else:
-                    offset, shift, width = tup, 0, 8
-
-                mask = (1 << width) - 1
-                attr_value = (attr_value << width) + (
-                    (harray[offset] >> shift) & mask)
-                total_width += width
-            setattr(self, PREFIX + name, attr_value)
-            setattr(self, 'max_' + PREFIX + name, (1 << total_width) - 1)
-
-    def __str__(self):
-        text = []
-        for name in sorted(dtd_descriptor.keys()):
-            text.append('%20s: %d' % (name, getattr(self, PREFIX + name)))
-        return '\n'.join(text)
-
-    def inhex(self):
-        '''Generate contents of the DTD as a 18 byte ASCII hex array.'''
-
-        result = [0] * 18
-        for name, desc in dtd_descriptor.iteritems():
-            attr_value = getattr(self, PREFIX + name)
-            rdesc = list(desc)
-            rdesc.reverse()
-            for tup in rdesc:
-                if isinstance(tup, tuple):
-                    offset, shift, width = tup
-                else:
-                    offset, shift, width = tup, 0, 8
-
-                mask = (1 << width) - 1
-                value = attr_value & mask
-                attr_value = attr_value >> width
-                result[offset] = (result[offset] & ~(
-                        mask << shift)) | (value << shift)
-
-        return ' '.join('%2.2x' % x for x in result)
-
-    def handle_input(self, name):
-        '''Get user input and set a new parameter value if required.
-
-        Display the parameter name, its current value, and prompt user for a
-        new value.
-
-        If the user enters a dot, stop processing (return True).
-
-        Empty user input means that this parameter does not have to change,
-        but the next parameter should be prompted.
-
-        If input is non-empty, it is interpreted as a hex number, checked if
-        it fits the parameter and the new parameter value is set if checks
-        pass.
-
-        Inputs:
-
-        name - a string, parameter name, a key in dtd_descriptor
-
-        Returns:
-
-        Boolean, True meaning no more field are required to be modified, False
-                 meaning that more field mods need to be prompted..
-        '''
-
-        param = PREFIX + name
-        vmax = getattr(self, 'max_' + param)
-        new_value = raw_input('%s : %d '  % (name, getattr(self, param)))
-        if new_value == '':
-            return False
-        if new_value == '.':
-            return True
-        new_int = int(new_value)
-        if new_int > vmax:
-            print '%s exceeds maximum for %s (%d)' % (new_value, name, vmax)
-        else:
-            setattr(self, param, new_int)
-        return False
-
-def main(args):
-    if args[0] == '-m':
-        modify = True
-        base = 1
-    else:
-        modify = False
-        base = 0
-
-    d = DTD()
-    d.init(args[base:])
-    if modify:
-        for line in str(d).splitlines():
-            if d.handle_input(line.split(':')[0].strip()):
-                break
-    print d
-    if modify:
-        print d.inhex()
-
-
-if __name__ == '__main__':
-    try:
-        main(sys.argv[1:])
-    except (ValueError, IndexError):
-        print """
-A string of 18 byte values in hex is required.
-'-m' preceding the string will allow setting new parameter values.
-"""
-        sys.exit(1)
diff --git a/util/exynos/fixed_cksum.py b/util/exynos/fixed_cksum.py
deleted file mode 100755
index 66da060..0000000
--- a/util/exynos/fixed_cksum.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2013 Google Inc.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-#    derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-
-"""
-This utility computes and fills Exynos ROM checksum (for BL1 or BL2).
-(Algorithm from U-Boot: tools/mkexynosspl.c)
-
-Input: IN OUT DATA_SIZE
-
-Output:
-
-  IN padded out to DATA_SIZE, checksum at the end, written to OUT.
-"""
-
-import struct
-import sys
-
-def main(argv):
-  if len(argv) != 4:
-    exit('usage: %s IN OUT DATA_SIZE' % argv[0])
-
-  in_name, out_name = argv[1:3]
-  size = int(argv[3], 0)
-  checksum_format = "<I"
-  with open(in_name, "rb") as in_file, open(out_name, "wb") as out_file:
-    data = in_file.read()
-    checksum_size = struct.calcsize(checksum_format)
-    data_size = size - checksum_size
-    assert len(data) <= data_size
-    checksum = struct.pack(checksum_format, sum(map(ord, data)))
-    out_file.write(data + bytearray(data_size - len(data)) + checksum)
-
-
-if __name__ == '__main__':
-  main(sys.argv)
diff --git a/util/exynos/variable_cksum.py b/util/exynos/variable_cksum.py
deleted file mode 100755
index 75cdc74..0000000
--- a/util/exynos/variable_cksum.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (C) 2013 Google Inc.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. The name of the author may not be used to endorse or promote products
-#    derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-
-"""
-This utility computes and fills Exynos ROM checksum (for BL1 or BL2).
-(Algorithm from U-Boot: tools/mkexynosspl.c)
-
-Input: IN OUT
-
-Output:
-
-  Checksum header added to IN and written to OUT.
-  Header: uint32_t size, checksum, reserved[2].
-"""
-
-import struct
-import sys
-
-def main(argv):
-  if len(argv) != 3:
-    exit('usage: %s IN OUT' % argv[0])
-
-  in_name, out_name = argv[1:3]
-  header_format = "<IIII"
-  with open(in_name, "rb") as in_file, open(out_name, "wb") as out_file:
-    data = in_file.read()
-    header = struct.pack(header_format,
-                         struct.calcsize(header_format) + len(data),
-                         sum(map(ord, data)),
-                         0, 0)
-    out_file.write(header + data)
-
-
-if __name__ == '__main__':
-  main(sys.argv)
diff --git a/util/find_usbdebug/find_usbdebug.sh b/util/find_usbdebug/find_usbdebug.sh
deleted file mode 100755
index 2f82219..0000000
--- a/util/find_usbdebug/find_usbdebug.sh
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/bin/sh
-
-# Copyright 2008 Carl-Daniel Hailfinger
-# Copyright 2015 Stefan Tauner
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# 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.
-
-LANG=C
-# Some tools emmit errors that don't matter (bugs in lspci/PCI firmware and lsusb).
-# To shown them anyway (e.g. for debugging) comment next line.
-exec 2>/dev/null
-
-if [ "$1" = "-h" ]; then
-	printf "Usage: $0 [-h | path to dmesg log]
-
-This script tries to find USB ports compatible with USB2/EHCI debug devices and
-helps you to find their physical locations. To that end, attach at least one
-uniquely identifiable device to a USB port and run this script. The device needs
-to be visible in the output of \"lsusb -t\" (debug devices are often *not*!).
-
-After determining compatibility of the USB controllers the script will print the
-devices attached to the debug port as shown by lsusb. If nothing shows up simply
-switch ports and repeat the process.
-
-Note: usually only one port is supported for debugging.\n"
-	exit 0
-fi
-uid=`id -u`
-if [ "$uid" -ne 0 ]; then
-	echo "Must be run as root. Exiting."
-	exit 1
-fi
-dmesgfile=$1
-
-find_devs_in_tree () {
-	bus=$1
-	port=$2
-	busstr=`printf "Bus %02d" "$bus"`
-	portstr="Port $port"
-
-	found=
-	# Iterate over the output of lsusb -t because it contains the physical port names
-	while IFS='' read -r line; do
-		# We need to keep track of the current bus "branch"
-		# Look out for lines starting with /: (that indicate a bus)
-		if [ "${line#*/:}" != "$line" ]; then
-			if [ "${line#*$busstr}" != "$line" ]; then
-				cur_bus=$busstr
-			else
-				cur_bus=
-			fi
-			continue
-		fi
-
-		# Skip all lines not belonging to the wanted bus number
-		if [ "$cur_bus" != "$busstr" ]; then
-			continue
-		fi
-
-		# check for matching physical USB port, and take only IF 0 into account
-		if [ "${line#*$portstr}" != "$line" -a "${line#*If 0}" != "$line" ]; then
-			dev=`echo ${line#*Dev } | cut -d ',' -f 1`
-			lsusb -s "$bus":"$dev"
-			found="yes"
-		fi
-	done<< EOF
-$(lsusb -t)
-EOF
-	if [ -z "$found" ]; then
-		echo "none"
-	fi
-}
-
-debug_lspci_devs=`lspci -nvvD |
-	grep -i "^[0-9a-f]\|debug port" |
-	grep -iB1 --no-group-separator "debug port" |
-	grep -vi "debug port" |
-	cut -f 1 -d" " |
-	sort |
-	xargs echo`
-
-if [ -z "$debug_lspci_devs" ]; then
-	printf "No USB controller with debug capability found by lspci.\n
-Possible reasons: lspci too old, USB controller does not support a debug device, ... Exiting.\n"
-	exit 1
-fi
-printf "The following PCI devices support a USB debug port (says lspci): $debug_lspci_devs\n"
-
-debug_dmesg_devs_with_port=`( test -z "$dmesgfile" &&
-	dmesg ||
-	cat "$dmesgfile") |
-	grep -i "ehci.*debug port" |
-	sed "s/.* \([0-9a-f]*:*[0-9a-f]\{2\}:[0-9a-f]\{2\}\.[0-9a-f]\).*ebug port /\1 /" |
-	sort`
-
-debug_dmesg_devs=`echo "$debug_dmesg_devs_with_port" |
-	cut -f 1 -d" " |
-	xargs echo`
-
-if [ -z "$debug_dmesg_devs" ]; then
-	printf "dmesg does not show any supported ports.\n
-Possible reasons: dmesg scrolled off, kernel too old, USB controller does not support a debug device, ... Exiting.\n
-Note: You can specify a file containing kernel messages as an argument to this program (e.g. /var/log/dmesg)."
-	exit 1
-fi
-
-if [ "$debug_lspci_devs" != "$debug_dmesg_devs" ]; then
-	echo "lspci and the kernel do not agree on USB debug device support. Exiting."
-	exit 1
-fi
-
-printf "and the kernel agrees, good.\n\n"
-
-while true; do
-	for dev in $debug_dmesg_devs; do
-		bus=`lsusb -v |
-			grep "^Bus\|iSerial.*" |
-			grep -B1 --no-group-separator "iSerial.*$dev" |
-			grep "^Bus" |
-			sed "s/Bus *0*\([0-9a-f]*\).*/\1/"`
-		port=`echo "$debug_dmesg_devs_with_port" |
-			grep "^$dev" |
-			cut -f 2 -d" "`
-
-		echo "Device(s) currently connected to the debug-capable port $port on PCI device $dev, USB bus $bus:"
-
-		find_devs_in_tree $bus $port
-		echo
-	done
-
-	echo "Enter 'q' to abort or anything else to repeat"
-	read r
-	if [ $? -ne 0 -o "$r" = "q" ]; then
-		break;
-	fi
-done
-
-return 0
diff --git a/util/genbuild_h/genbuild_h.sh b/util/genbuild_h/genbuild_h.sh
deleted file mode 100755
index 55a3b85..0000000
--- a/util/genbuild_h/genbuild_h.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/sh
-
-# This file is part of the coreboot project.
-#
-# Copyright (C) 2014 Sage Electronic Engineering, LLC.
-#
-# 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
-#
-
-DATE=""
-GITREV=""
-TIMESOURCE=""
-if [ -d "${top}/.git" ] && [ -f "$(command -v git)" ]; then
-	GITREV=$(LANG= git log remotes/origin/master -1 --format=format:%h)
-	TIMESOURCE=git
-	DATE=$(git log --pretty=format:%ct -1)
-else
-	GITREV=Unknown
-	TIMESOURCE="LANG= TZ=UTC date"
-	DATE=$(date +%s)
-fi
-
-our_date() {
-case $(uname) in
-NetBSD|OpenBSD|DragonFly|FreeBSD)
-	TZ=UTC date -r $1 $2
-	;;
-*)
-	TZ=UTC date -d @$1 $2
-esac
-}
-
-#Print out the information that goes into build.h
-printf "/* build system definitions (autogenerated) */\n"
-printf "#ifndef __BUILD_H\n"
-printf "#define __BUILD_H\n\n"
-printf "#define COREBOOT_VERSION %s\n" "\"$KERNELVERSION\""
-
-#See if the build is running in a git repo and the git command is available
-printf "/* timesource: $TIMESOURCE */\n"
-printf "#define COREBOOT_VERSION_TIMESTAMP $DATE\n"
-printf "#define COREBOOT_ORIGIN_GIT_REVISION \"$GITREV\"\n"
-
-printf "#define COREBOOT_EXTRA_VERSION \"%s\"\n" "$COREBOOT_EXTRA_VERSION"
-printf "#define COREBOOT_BUILD \"$(LANG= our_date "$DATE")\"\n"
-printf "#define COREBOOT_BUILD_YEAR_BCD 0x$(our_date "$DATE" +%y)\n"
-printf "#define COREBOOT_BUILD_MONTH_BCD 0x$(our_date "$DATE" +%m)\n"
-printf "#define COREBOOT_BUILD_DAY_BCD 0x$(our_date "$DATE" +%d)\n"
-printf "#define COREBOOT_BUILD_WEEKDAY_BCD 0x$(our_date "$DATE" +%w)\n"
-printf "#define COREBOOT_DMI_DATE \"$(our_date "$DATE" +%m/%d/%Y)\"\n"
-printf "\n"
-printf "#define COREBOOT_COMPILE_TIME \"$(our_date "$DATE" +%T)\"\n"
-printf "#endif\n"
diff --git a/util/ipqheader/ipqheader.py b/util/ipqheader/ipqheader.py
deleted file mode 100755
index eb1a316..0000000
--- a/util/ipqheader/ipqheader.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (c) 2013 The Linux Foundation. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice,
-#    this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice,
-#    this list of conditions and the following disclaimer in the documentation
-#    and/or other materials provided with the distribution.
-#
-# 3. Neither the name of the copyright holder nor the names of its
-#    contributors may be used to endorse or promote products derived from this
-#    software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-
-import os
-import struct
-import sys
-
-PROG_NAME = os.path.basename(sys.argv[0])
-
-def create_header(base, size):
-    """Returns a packed MBN header image with the specified base and size.
-
-    @arg base: integer, specifies the image load address in RAM
-    @arg size: integer, specifies the size of the image
-    @returns: string, the MBN header
-    """
-
-    # SBLs require size to be 4 bytes aligned.
-    size = (size + 3) & 0xfffffffc
-
-    # We currently do not support appending certificates. Signing GPL
-    # code might violate the GPL. So U-Boot will never be signed. So
-    # this is not required for U-Boot.
-
-    header = [
-        0x5,         # Type: APPSBL
-        0x3,         # Version: 3
-        0x0,         # Image source pointer
-        base,        # Image destination pointer
-        size,        # Code Size + Cert Size + Signature Size
-        size,        # Code Size
-        base + size, # Destination + Code Size
-        0x0,         # Signature Size
-        base + size, # Destination + Code Size + Signature Size
-        0x0,         # Cert Size
-    ]
-
-    header_packed = struct.pack('<10I', *header)
-    return header_packed
-
-def mkheader(base_addr, infname, outfname):
-    """Prepends the image with the MBN header.
-
-    @arg base_addr: integer, specifies the image load address in RAM
-    @arg infname: string, image filename
-    @arg outfname: string, output image with header prepended
-    @raises IOError: if reading/writing input/output file fails
-    """
-    with open(infname, "rb") as infp:
-        image = infp.read()
-        insize = len(image)
-
-    if base_addr > 0xFFFFFFFF:
-        raise ValueError("invalid base address")
-
-    if base_addr + insize > 0xFFFFFFFF:
-        raise ValueError("invalid destination range")
-
-    header = create_header(base_addr, insize)
-    with open(outfname, "wb") as outfp:
-        outfp.write(header)
-        outfp.write(image)
-
-def usage(msg=None):
-    """Print command usage.
-
-    @arg msg: string, error message if any (default: None)
-    """
-    if msg != None:
-        sys.stderr.write("%s: %s\n" % (PROG_NAME, msg))
-
-    print "Usage: %s <base-addr> <input-file> <output-file>" % PROG_NAME
-
-    if msg != None:
-        exit(1)
-
-def main():
-    """Main entry function"""
-
-    if len(sys.argv) != 4:
-        usage("incorrect number of arguments")
-
-    try:
-        base_addr = int(sys.argv[1], 0)
-        infname = sys.argv[2]
-        outfname = sys.argv[3]
-    except ValueError as e:
-        sys.stderr.write("mkheader: invalid base address '%s'\n" % sys.argv[1])
-        exit(1)
-
-    try:
-        mkheader(base_addr, infname, outfname)
-    except IOError as e:
-        sys.stderr.write("%s: %s\n" % (PROG_NAME, e))
-        exit(1)
-    except ValueError as e:
-        sys.stderr.write("%s: %s\n" % (PROG_NAME, e))
-        exit(1)
-
-if __name__ == "__main__":
-    main()
-
diff --git a/util/rockchip/LICENSE b/util/rockchip/LICENSE
deleted file mode 100644
index cb4d35b..0000000
--- a/util/rockchip/LICENSE
+++ /dev/null
@@ -1,25 +0,0 @@
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/util/rockchip/make_idb.py b/util/rockchip/make_idb.py
deleted file mode 100755
index e95f5c2..0000000
--- a/util/rockchip/make_idb.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2014 Google Inc. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import struct
-import sys
-from io import SEEK_SET, SEEK_END
-
-class IDBTool:
-  def __init__(self):
-    print "Initialize IDBTool"
-
-  def p_rc4(self, buf, length):
-    key = (124,78,3,4,85,5,9,7,45,44,123,56,23,13,23,17)
-    K = key * 16
-    S = [i for i in range(256)]
-
-    j = 0
-    for i in range(256):
-      j = (j + S[i] + K[i]) % 256
-      temp = S[i]; S[i] = S[j]; S[j] = temp;
-
-    i = j = k = 0
-    for x in range(length):
-      i = (i+1) % 256
-      j = (j + S[i]) % 256
-      temp = S[i]; S[i] = S[j]; S[j] = temp
-      k = (S[i] + S[j]) % 256
-      buf[x] = struct.pack('B', ord(buf[x]) ^ S[k])
-
-  def makeIDB(self, from_file, to_file, rc4_flag = False, align_flag = False):
-    try:
-      fin = open(from_file, 'rb')
-    except:
-      sys.exit("Failed to open file : " + from_file)
-
-    try:
-      fin.seek(0, SEEK_END)
-      if (fin.tell() > 4 * 1024 * 1024):
-        sys.exit("Input file is more than 4MB")
-      fin.seek(0)
-      data = fin.read()
-    finally:
-      fin.close()
-
-    data_len = len(data)
-    SECTOR_SIZE = 512
-    PAGE_ALIGN  = 4
-    sectors = (data_len + 4 - 1) / SECTOR_SIZE + 1
-    pages = (sectors - 1) / PAGE_ALIGN + 1
-    sectors = pages * PAGE_ALIGN;
-
-    buf = [B'\0'] * sectors * SECTOR_SIZE
-    buf[:4] = "RK32"
-    buf[4 : 4+data_len] = data
-
-    idblock = [B'\0'] * 4 * SECTOR_SIZE
-    blank   = [B'\0'] * 4 * SECTOR_SIZE
-    idblock[:4] = ['\x55', '\xAA', '\xF0', '\x0F']
-
-    if (not rc4_flag):
-      idblock[8:12] = struct.pack("<I", 1)
-    else:
-      for i in range(sectors):
-        list_tmp = buf[SECTOR_SIZE*i : SECTOR_SIZE*(i+1)]
-        self.p_rc4(list_tmp, SECTOR_SIZE)
-        buf[SECTOR_SIZE*i : SECTOR_SIZE*(i+1)] = list_tmp
-
-    idblock[12:16] = struct.pack("<HH", 4, 4);
-    idblock[506:510] = struct.pack("<HH", sectors, sectors);
-    self.p_rc4(idblock, SECTOR_SIZE)
-
-    try:
-      fout = open(to_file, "wb+")
-    except:
-      sys.exit("Failed to open output file : " + to_file)
-
-    try:
-      if (align_flag):
-        fout.write(''.join(idblock))
-        fout.write(''.join(blank))
-
-        for s in xrange(0, sectors * SECTOR_SIZE, PAGE_ALIGN * SECTOR_SIZE):
-          fout.write(''.join(buf[s : s + PAGE_ALIGN * SECTOR_SIZE]))
-          fout.write(''.join(blank))
-      else:
-        fout.write(''.join(idblock))
-        fout.write(''.join(buf))
-      fout.flush()
-    except:
-      sys.exit("Failed to write data to : " + to_file)
-    finally:
-      fout.close()
-    print "DONE"
-
-def usage():
-  print "Usage: make_idb.py [--enable-rc4] [--enable-align] [--to=out] --from=in"
-
-if __name__ == '__main__':
-  rc4_flag = align_flag = False
-  to_file = "IDBlock.bin"
-
-  for para in sys.argv[1:]:
-    if (para == "--enable-rc4"):
-      rc4_flag = True
-    elif (para == "--enable-align"):
-      align_flag = True
-    elif (para.startswith("--to=")):
-      to_file = para.split('=')[1]
-    elif (para.startswith("--from=")):
-      from_file = para.split('=')[1]
-    elif (para == "--help" or para == "-h"):
-      usage()
-      sys.exit()
-    else:
-      usage()
-      sys.exit()
-  if ('from_file' not in vars() or to_file == ''):
-    usage()
-    sys.exit()
-
-  idbtool = IDBTool()
-  idbtool.makeIDB(from_file, to_file, rc4_flag, align_flag)
diff --git a/util/scripts/acpidump-all b/util/scripts/acpidump-all
new file mode 100755
index 0000000..aa73a15
--- /dev/null
+++ b/util/scripts/acpidump-all
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Copyright (C) 2007-2010 by 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+#
+
+rm -rf out
+mkdir out
+
+# walk through all ACPI tables with their addresses
+# example:
+#    RSDT @ 0xcf6794ba
+# we can not just dump the tables by their names because some
+# machines have double ACPI tables
+
+acpidump | grep "@ 0x" | while read line
+do
+  NAME=$( echo `echo $line|cut -f1 -d@` )
+  FNAME=$( echo $NAME | sed s/\ /_/g |sed s/\!/b/g )
+  ADDR=$( echo `echo $line|cut -f2 -d@` )
+  if [ "${!FNAME}" == "" ]; then
+    eval $FNAME=0
+  else
+    eval $FNAME=$(( ${!FNAME} + 1 ))
+  fi
+  printf "Processing table \"$NAME\" at $ADDR ... "
+  printf "${!FNAME} tables of that kind found before.\n"
+
+  # acpidump -s ${!FNAME} --table "$NAME" > out/$FNAME-$ADDR-${!FNAME}.txt
+  acpidump -b -s ${!FNAME} --table "$NAME" > out/$FNAME-$ADDR-${!FNAME}.bin
+  if [ "`file -b out/$FNAME-$ADDR-${!FNAME}.bin`" != "ASCII text" ]; then
+    iasl -d out/$FNAME-$ADDR-${!FNAME}.bin &>/dev/null
+  else
+    printf "Skipping $NAME because it was not dumped correctly.\n\n"
+  fi
+
+done
+
diff --git a/util/scripts/dtd_parser.py b/util/scripts/dtd_parser.py
new file mode 100755
index 0000000..23cc7e7
--- /dev/null
+++ b/util/scripts/dtd_parser.py
@@ -0,0 +1,213 @@
+#!/usr/bin/python
+# dtd_parser.py - DTD structure parser
+#
+# Copyright (C) 2012 The ChromiumOS Authors.  All rights reserved.
+#
+# 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
+#
+
+'''
+DTD string parser/generator.
+
+Detailed timing descriptor (DTD) is an 18 byte array describing video mode
+(screen resolution, display properties, etc.) in EDID and used by Intel Option
+ROM. Option ROM can support multiple video modes, specific mode is picked by
+the BIOS through the appropriate Option ROM callback function.
+
+This program allows to interpret the 18 byte hex DTD dump, and/or modify
+certain values and generate a new DTD.
+'''
+
+import sys
+
+#
+# The DTD array format description can be found in
+# http://en.wikipedia.org/wiki/Extended_display_identification_data, (see the
+# EDID Detailed Timing Descriptor section).
+#
+# The below dictionary describes how different DTD parameters are laid out in
+# the array. Note that many parameters span multiple bit fields in the DTD.
+#
+# The keys in the dictionary are stings (field names), the values are tuples
+# of either numbers or tri-tuples. If the element of the tuple is a number, it
+# is the offset in DTD, and the entire byte is used in this field. If the
+# element is a tri-tuple, its components are (DTD offset, bit shift, field
+# width).
+#
+# The partial values are extracted from the DTD fields and concatenated
+# together to form actual parameter value.
+#
+
+dtd_descriptor  = {
+    'dclck' : (1, 0),
+    'hor_active' : ((4, 4, 4), 2),
+    'hor_blank' : ((4, 0, 4), 3),
+    'vert_act' : ((7, 4, 4), 5),
+    'vert_blank' : ((7, 0, 4), 6),
+    'hsync_offset' : ((11, 6, 2), 8),
+    'hsync_pulse_width' : ((11, 4, 2), 9),
+    'vsync_offset' : ((11, 2, 2), (10, 4, 4)),
+    'vsync_pulse_width' : ((11, 0, 2), (10, 0, 4)),
+    'hor_image_size' : ((14, 4, 4), 12),
+    'vert_image_size' : ((14, 0, 4), 13),
+    'hor_border' : (15,),
+    'vert_border' : (16,),
+    'interlaced' : ((17, 7, 1),),
+    'reserved' : ((17, 5, 2), (17, 0, 1)),
+    'digital_separate' : ((17, 3, 2),),
+    'vert_polarity' : ((17, 2, 1),),
+    'hor_polarity' : ((17, 1, 1),),
+    }
+
+PREFIX = 'attr_'
+
+class DTD(object):
+    '''An object containing all DTD information.
+
+    The attributes are created dynamically when the input DTD string is
+    parsed. For each element of the above dictionary two attributes are added:
+
+    'attr_<param>' to hold the actual parameter value
+    'max_attr_<param>' to hold the maximum allowed value for this parameter.
+    '''
+
+    def __init__(self):
+        for name in dtd_descriptor:
+            setattr(self, PREFIX + name, 0)
+
+    def init(self, sarray):
+        '''Initialize the object with values from a DTD array.
+
+        Inputs:
+
+        sarray: a string, an array of ASCII hex representations of the 18 DTD
+                bytes.
+
+        Raises: implicitly raises ValueError or IndexError exceptions in case
+                the input string has less than 18 elements, or some of the
+                elements can not be converted to integer.
+        '''
+
+        harray = [int(x, 16) for x in sarray]
+        for name, desc in dtd_descriptor.iteritems():
+            attr_value = 0
+            total_width = 0
+            for tup in desc:
+                if isinstance(tup, tuple):
+                    offset, shift, width = tup
+                else:
+                    offset, shift, width = tup, 0, 8
+
+                mask = (1 << width) - 1
+                attr_value = (attr_value << width) + (
+                    (harray[offset] >> shift) & mask)
+                total_width += width
+            setattr(self, PREFIX + name, attr_value)
+            setattr(self, 'max_' + PREFIX + name, (1 << total_width) - 1)
+
+    def __str__(self):
+        text = []
+        for name in sorted(dtd_descriptor.keys()):
+            text.append('%20s: %d' % (name, getattr(self, PREFIX + name)))
+        return '\n'.join(text)
+
+    def inhex(self):
+        '''Generate contents of the DTD as a 18 byte ASCII hex array.'''
+
+        result = [0] * 18
+        for name, desc in dtd_descriptor.iteritems():
+            attr_value = getattr(self, PREFIX + name)
+            rdesc = list(desc)
+            rdesc.reverse()
+            for tup in rdesc:
+                if isinstance(tup, tuple):
+                    offset, shift, width = tup
+                else:
+                    offset, shift, width = tup, 0, 8
+
+                mask = (1 << width) - 1
+                value = attr_value & mask
+                attr_value = attr_value >> width
+                result[offset] = (result[offset] & ~(
+                        mask << shift)) | (value << shift)
+
+        return ' '.join('%2.2x' % x for x in result)
+
+    def handle_input(self, name):
+        '''Get user input and set a new parameter value if required.
+
+        Display the parameter name, its current value, and prompt user for a
+        new value.
+
+        If the user enters a dot, stop processing (return True).
+
+        Empty user input means that this parameter does not have to change,
+        but the next parameter should be prompted.
+
+        If input is non-empty, it is interpreted as a hex number, checked if
+        it fits the parameter and the new parameter value is set if checks
+        pass.
+
+        Inputs:
+
+        name - a string, parameter name, a key in dtd_descriptor
+
+        Returns:
+
+        Boolean, True meaning no more field are required to be modified, False
+                 meaning that more field mods need to be prompted..
+        '''
+
+        param = PREFIX + name
+        vmax = getattr(self, 'max_' + param)
+        new_value = raw_input('%s : %d '  % (name, getattr(self, param)))
+        if new_value == '':
+            return False
+        if new_value == '.':
+            return True
+        new_int = int(new_value)
+        if new_int > vmax:
+            print '%s exceeds maximum for %s (%d)' % (new_value, name, vmax)
+        else:
+            setattr(self, param, new_int)
+        return False
+
+def main(args):
+    if args[0] == '-m':
+        modify = True
+        base = 1
+    else:
+        modify = False
+        base = 0
+
+    d = DTD()
+    d.init(args[base:])
+    if modify:
+        for line in str(d).splitlines():
+            if d.handle_input(line.split(':')[0].strip()):
+                break
+    print d
+    if modify:
+        print d.inhex()
+
+
+if __name__ == '__main__':
+    try:
+        main(sys.argv[1:])
+    except (ValueError, IndexError):
+        print """
+A string of 18 byte values in hex is required.
+'-m' preceding the string will allow setting new parameter values.
+"""
+        sys.exit(1)
diff --git a/util/scripts/exynos_fixed_cksum.py b/util/scripts/exynos_fixed_cksum.py
new file mode 100755
index 0000000..66da060
--- /dev/null
+++ b/util/scripts/exynos_fixed_cksum.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2013 Google Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+"""
+This utility computes and fills Exynos ROM checksum (for BL1 or BL2).
+(Algorithm from U-Boot: tools/mkexynosspl.c)
+
+Input: IN OUT DATA_SIZE
+
+Output:
+
+  IN padded out to DATA_SIZE, checksum at the end, written to OUT.
+"""
+
+import struct
+import sys
+
+def main(argv):
+  if len(argv) != 4:
+    exit('usage: %s IN OUT DATA_SIZE' % argv[0])
+
+  in_name, out_name = argv[1:3]
+  size = int(argv[3], 0)
+  checksum_format = "<I"
+  with open(in_name, "rb") as in_file, open(out_name, "wb") as out_file:
+    data = in_file.read()
+    checksum_size = struct.calcsize(checksum_format)
+    data_size = size - checksum_size
+    assert len(data) <= data_size
+    checksum = struct.pack(checksum_format, sum(map(ord, data)))
+    out_file.write(data + bytearray(data_size - len(data)) + checksum)
+
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/util/scripts/exynos_variable_cksum.py b/util/scripts/exynos_variable_cksum.py
new file mode 100755
index 0000000..75cdc74
--- /dev/null
+++ b/util/scripts/exynos_variable_cksum.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2013 Google Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+"""
+This utility computes and fills Exynos ROM checksum (for BL1 or BL2).
+(Algorithm from U-Boot: tools/mkexynosspl.c)
+
+Input: IN OUT
+
+Output:
+
+  Checksum header added to IN and written to OUT.
+  Header: uint32_t size, checksum, reserved[2].
+"""
+
+import struct
+import sys
+
+def main(argv):
+  if len(argv) != 3:
+    exit('usage: %s IN OUT' % argv[0])
+
+  in_name, out_name = argv[1:3]
+  header_format = "<IIII"
+  with open(in_name, "rb") as in_file, open(out_name, "wb") as out_file:
+    data = in_file.read()
+    header = struct.pack(header_format,
+                         struct.calcsize(header_format) + len(data),
+                         sum(map(ord, data)),
+                         0, 0)
+    out_file.write(header + data)
+
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/util/scripts/find_usbdebug.sh b/util/scripts/find_usbdebug.sh
new file mode 100755
index 0000000..2f82219
--- /dev/null
+++ b/util/scripts/find_usbdebug.sh
@@ -0,0 +1,149 @@
+#!/bin/sh
+
+# Copyright 2008 Carl-Daniel Hailfinger
+# Copyright 2015 Stefan Tauner
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# 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.
+
+LANG=C
+# Some tools emmit errors that don't matter (bugs in lspci/PCI firmware and lsusb).
+# To shown them anyway (e.g. for debugging) comment next line.
+exec 2>/dev/null
+
+if [ "$1" = "-h" ]; then
+	printf "Usage: $0 [-h | path to dmesg log]
+
+This script tries to find USB ports compatible with USB2/EHCI debug devices and
+helps you to find their physical locations. To that end, attach at least one
+uniquely identifiable device to a USB port and run this script. The device needs
+to be visible in the output of \"lsusb -t\" (debug devices are often *not*!).
+
+After determining compatibility of the USB controllers the script will print the
+devices attached to the debug port as shown by lsusb. If nothing shows up simply
+switch ports and repeat the process.
+
+Note: usually only one port is supported for debugging.\n"
+	exit 0
+fi
+uid=`id -u`
+if [ "$uid" -ne 0 ]; then
+	echo "Must be run as root. Exiting."
+	exit 1
+fi
+dmesgfile=$1
+
+find_devs_in_tree () {
+	bus=$1
+	port=$2
+	busstr=`printf "Bus %02d" "$bus"`
+	portstr="Port $port"
+
+	found=
+	# Iterate over the output of lsusb -t because it contains the physical port names
+	while IFS='' read -r line; do
+		# We need to keep track of the current bus "branch"
+		# Look out for lines starting with /: (that indicate a bus)
+		if [ "${line#*/:}" != "$line" ]; then
+			if [ "${line#*$busstr}" != "$line" ]; then
+				cur_bus=$busstr
+			else
+				cur_bus=
+			fi
+			continue
+		fi
+
+		# Skip all lines not belonging to the wanted bus number
+		if [ "$cur_bus" != "$busstr" ]; then
+			continue
+		fi
+
+		# check for matching physical USB port, and take only IF 0 into account
+		if [ "${line#*$portstr}" != "$line" -a "${line#*If 0}" != "$line" ]; then
+			dev=`echo ${line#*Dev } | cut -d ',' -f 1`
+			lsusb -s "$bus":"$dev"
+			found="yes"
+		fi
+	done<< EOF
+$(lsusb -t)
+EOF
+	if [ -z "$found" ]; then
+		echo "none"
+	fi
+}
+
+debug_lspci_devs=`lspci -nvvD |
+	grep -i "^[0-9a-f]\|debug port" |
+	grep -iB1 --no-group-separator "debug port" |
+	grep -vi "debug port" |
+	cut -f 1 -d" " |
+	sort |
+	xargs echo`
+
+if [ -z "$debug_lspci_devs" ]; then
+	printf "No USB controller with debug capability found by lspci.\n
+Possible reasons: lspci too old, USB controller does not support a debug device, ... Exiting.\n"
+	exit 1
+fi
+printf "The following PCI devices support a USB debug port (says lspci): $debug_lspci_devs\n"
+
+debug_dmesg_devs_with_port=`( test -z "$dmesgfile" &&
+	dmesg ||
+	cat "$dmesgfile") |
+	grep -i "ehci.*debug port" |
+	sed "s/.* \([0-9a-f]*:*[0-9a-f]\{2\}:[0-9a-f]\{2\}\.[0-9a-f]\).*ebug port /\1 /" |
+	sort`
+
+debug_dmesg_devs=`echo "$debug_dmesg_devs_with_port" |
+	cut -f 1 -d" " |
+	xargs echo`
+
+if [ -z "$debug_dmesg_devs" ]; then
+	printf "dmesg does not show any supported ports.\n
+Possible reasons: dmesg scrolled off, kernel too old, USB controller does not support a debug device, ... Exiting.\n
+Note: You can specify a file containing kernel messages as an argument to this program (e.g. /var/log/dmesg)."
+	exit 1
+fi
+
+if [ "$debug_lspci_devs" != "$debug_dmesg_devs" ]; then
+	echo "lspci and the kernel do not agree on USB debug device support. Exiting."
+	exit 1
+fi
+
+printf "and the kernel agrees, good.\n\n"
+
+while true; do
+	for dev in $debug_dmesg_devs; do
+		bus=`lsusb -v |
+			grep "^Bus\|iSerial.*" |
+			grep -B1 --no-group-separator "iSerial.*$dev" |
+			grep "^Bus" |
+			sed "s/Bus *0*\([0-9a-f]*\).*/\1/"`
+		port=`echo "$debug_dmesg_devs_with_port" |
+			grep "^$dev" |
+			cut -f 2 -d" "`
+
+		echo "Device(s) currently connected to the debug-capable port $port on PCI device $dev, USB bus $bus:"
+
+		find_devs_in_tree $bus $port
+		echo
+	done
+
+	echo "Enter 'q' to abort or anything else to repeat"
+	read r
+	if [ $? -ne 0 -o "$r" = "q" ]; then
+		break;
+	fi
+done
+
+return 0
diff --git a/util/scripts/genbuild_h.sh b/util/scripts/genbuild_h.sh
new file mode 100755
index 0000000..55a3b85
--- /dev/null
+++ b/util/scripts/genbuild_h.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# This file is part of the coreboot project.
+#
+# Copyright (C) 2014 Sage Electronic Engineering, LLC.
+#
+# 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
+#
+
+DATE=""
+GITREV=""
+TIMESOURCE=""
+if [ -d "${top}/.git" ] && [ -f "$(command -v git)" ]; then
+	GITREV=$(LANG= git log remotes/origin/master -1 --format=format:%h)
+	TIMESOURCE=git
+	DATE=$(git log --pretty=format:%ct -1)
+else
+	GITREV=Unknown
+	TIMESOURCE="LANG= TZ=UTC date"
+	DATE=$(date +%s)
+fi
+
+our_date() {
+case $(uname) in
+NetBSD|OpenBSD|DragonFly|FreeBSD)
+	TZ=UTC date -r $1 $2
+	;;
+*)
+	TZ=UTC date -d @$1 $2
+esac
+}
+
+#Print out the information that goes into build.h
+printf "/* build system definitions (autogenerated) */\n"
+printf "#ifndef __BUILD_H\n"
+printf "#define __BUILD_H\n\n"
+printf "#define COREBOOT_VERSION %s\n" "\"$KERNELVERSION\""
+
+#See if the build is running in a git repo and the git command is available
+printf "/* timesource: $TIMESOURCE */\n"
+printf "#define COREBOOT_VERSION_TIMESTAMP $DATE\n"
+printf "#define COREBOOT_ORIGIN_GIT_REVISION \"$GITREV\"\n"
+
+printf "#define COREBOOT_EXTRA_VERSION \"%s\"\n" "$COREBOOT_EXTRA_VERSION"
+printf "#define COREBOOT_BUILD \"$(LANG= our_date "$DATE")\"\n"
+printf "#define COREBOOT_BUILD_YEAR_BCD 0x$(our_date "$DATE" +%y)\n"
+printf "#define COREBOOT_BUILD_MONTH_BCD 0x$(our_date "$DATE" +%m)\n"
+printf "#define COREBOOT_BUILD_DAY_BCD 0x$(our_date "$DATE" +%d)\n"
+printf "#define COREBOOT_BUILD_WEEKDAY_BCD 0x$(our_date "$DATE" +%w)\n"
+printf "#define COREBOOT_DMI_DATE \"$(our_date "$DATE" +%m/%d/%Y)\"\n"
+printf "\n"
+printf "#define COREBOOT_COMPILE_TIME \"$(our_date "$DATE" +%T)\"\n"
+printf "#endif\n"
diff --git a/util/scripts/ipqheader.py b/util/scripts/ipqheader.py
new file mode 100755
index 0000000..eb1a316
--- /dev/null
+++ b/util/scripts/ipqheader.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2013 The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+#    this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from this
+#    software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+import os
+import struct
+import sys
+
+PROG_NAME = os.path.basename(sys.argv[0])
+
+def create_header(base, size):
+    """Returns a packed MBN header image with the specified base and size.
+
+    @arg base: integer, specifies the image load address in RAM
+    @arg size: integer, specifies the size of the image
+    @returns: string, the MBN header
+    """
+
+    # SBLs require size to be 4 bytes aligned.
+    size = (size + 3) & 0xfffffffc
+
+    # We currently do not support appending certificates. Signing GPL
+    # code might violate the GPL. So U-Boot will never be signed. So
+    # this is not required for U-Boot.
+
+    header = [
+        0x5,         # Type: APPSBL
+        0x3,         # Version: 3
+        0x0,         # Image source pointer
+        base,        # Image destination pointer
+        size,        # Code Size + Cert Size + Signature Size
+        size,        # Code Size
+        base + size, # Destination + Code Size
+        0x0,         # Signature Size
+        base + size, # Destination + Code Size + Signature Size
+        0x0,         # Cert Size
+    ]
+
+    header_packed = struct.pack('<10I', *header)
+    return header_packed
+
+def mkheader(base_addr, infname, outfname):
+    """Prepends the image with the MBN header.
+
+    @arg base_addr: integer, specifies the image load address in RAM
+    @arg infname: string, image filename
+    @arg outfname: string, output image with header prepended
+    @raises IOError: if reading/writing input/output file fails
+    """
+    with open(infname, "rb") as infp:
+        image = infp.read()
+        insize = len(image)
+
+    if base_addr > 0xFFFFFFFF:
+        raise ValueError("invalid base address")
+
+    if base_addr + insize > 0xFFFFFFFF:
+        raise ValueError("invalid destination range")
+
+    header = create_header(base_addr, insize)
+    with open(outfname, "wb") as outfp:
+        outfp.write(header)
+        outfp.write(image)
+
+def usage(msg=None):
+    """Print command usage.
+
+    @arg msg: string, error message if any (default: None)
+    """
+    if msg != None:
+        sys.stderr.write("%s: %s\n" % (PROG_NAME, msg))
+
+    print "Usage: %s <base-addr> <input-file> <output-file>" % PROG_NAME
+
+    if msg != None:
+        exit(1)
+
+def main():
+    """Main entry function"""
+
+    if len(sys.argv) != 4:
+        usage("incorrect number of arguments")
+
+    try:
+        base_addr = int(sys.argv[1], 0)
+        infname = sys.argv[2]
+        outfname = sys.argv[3]
+    except ValueError as e:
+        sys.stderr.write("mkheader: invalid base address '%s'\n" % sys.argv[1])
+        exit(1)
+
+    try:
+        mkheader(base_addr, infname, outfname)
+    except IOError as e:
+        sys.stderr.write("%s: %s\n" % (PROG_NAME, e))
+        exit(1)
+    except ValueError as e:
+        sys.stderr.write("%s: %s\n" % (PROG_NAME, e))
+        exit(1)
+
+if __name__ == "__main__":
+    main()
+
diff --git a/util/scripts/rk_make_idb.py b/util/scripts/rk_make_idb.py
new file mode 100755
index 0000000..26e26b8
--- /dev/null
+++ b/util/scripts/rk_make_idb.py
@@ -0,0 +1,150 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+"""
+Creates a Rockchip ID Block (IDB), optionally RC4 encrypted and aligned
+"""
+
+import struct
+import sys
+from io import SEEK_SET, SEEK_END
+
+class IDBTool:
+  def __init__(self):
+    print "Initialize IDBTool"
+
+  def p_rc4(self, buf, length):
+    key = (124,78,3,4,85,5,9,7,45,44,123,56,23,13,23,17)
+    K = key * 16
+    S = [i for i in range(256)]
+
+    j = 0
+    for i in range(256):
+      j = (j + S[i] + K[i]) % 256
+      temp = S[i]; S[i] = S[j]; S[j] = temp;
+
+    i = j = k = 0
+    for x in range(length):
+      i = (i+1) % 256
+      j = (j + S[i]) % 256
+      temp = S[i]; S[i] = S[j]; S[j] = temp
+      k = (S[i] + S[j]) % 256
+      buf[x] = struct.pack('B', ord(buf[x]) ^ S[k])
+
+  def makeIDB(self, from_file, to_file, rc4_flag = False, align_flag = False):
+    try:
+      fin = open(from_file, 'rb')
+    except:
+      sys.exit("Failed to open file : " + from_file)
+
+    try:
+      fin.seek(0, SEEK_END)
+      if (fin.tell() > 4 * 1024 * 1024):
+        sys.exit("Input file is more than 4MB")
+      fin.seek(0)
+      data = fin.read()
+    finally:
+      fin.close()
+
+    data_len = len(data)
+    SECTOR_SIZE = 512
+    PAGE_ALIGN  = 4
+    sectors = (data_len + 4 - 1) / SECTOR_SIZE + 1
+    pages = (sectors - 1) / PAGE_ALIGN + 1
+    sectors = pages * PAGE_ALIGN;
+
+    buf = [B'\0'] * sectors * SECTOR_SIZE
+    buf[:4] = "RK32"
+    buf[4 : 4+data_len] = data
+
+    idblock = [B'\0'] * 4 * SECTOR_SIZE
+    blank   = [B'\0'] * 4 * SECTOR_SIZE
+    idblock[:4] = ['\x55', '\xAA', '\xF0', '\x0F']
+
+    if (not rc4_flag):
+      idblock[8:12] = struct.pack("<I", 1)
+    else:
+      for i in range(sectors):
+        list_tmp = buf[SECTOR_SIZE*i : SECTOR_SIZE*(i+1)]
+        self.p_rc4(list_tmp, SECTOR_SIZE)
+        buf[SECTOR_SIZE*i : SECTOR_SIZE*(i+1)] = list_tmp
+
+    idblock[12:16] = struct.pack("<HH", 4, 4);
+    idblock[506:510] = struct.pack("<HH", sectors, sectors);
+    self.p_rc4(idblock, SECTOR_SIZE)
+
+    try:
+      fout = open(to_file, "wb+")
+    except:
+      sys.exit("Failed to open output file : " + to_file)
+
+    try:
+      if (align_flag):
+        fout.write(''.join(idblock))
+        fout.write(''.join(blank))
+
+        for s in xrange(0, sectors * SECTOR_SIZE, PAGE_ALIGN * SECTOR_SIZE):
+          fout.write(''.join(buf[s : s + PAGE_ALIGN * SECTOR_SIZE]))
+          fout.write(''.join(blank))
+      else:
+        fout.write(''.join(idblock))
+        fout.write(''.join(buf))
+      fout.flush()
+    except:
+      sys.exit("Failed to write data to : " + to_file)
+    finally:
+      fout.close()
+    print "DONE"
+
+def usage():
+  print "Usage: make_idb.py [--enable-rc4] [--enable-align] [--to=out] --from=in"
+
+if __name__ == '__main__':
+  rc4_flag = align_flag = False
+  to_file = "IDBlock.bin"
+
+  for para in sys.argv[1:]:
+    if (para == "--enable-rc4"):
+      rc4_flag = True
+    elif (para == "--enable-align"):
+      align_flag = True
+    elif (para.startswith("--to=")):
+      to_file = para.split('=')[1]
+    elif (para.startswith("--from=")):
+      from_file = para.split('=')[1]
+    elif (para == "--help" or para == "-h"):
+      usage()
+      sys.exit()
+    else:
+      usage()
+      sys.exit()
+  if ('from_file' not in vars() or to_file == ''):
+    usage()
+    sys.exit()
+
+  idbtool = IDBTool()
+  idbtool.makeIDB(from_file, to_file, rc4_flag, align_flag)
diff --git a/util/scripts/xcompile b/util/scripts/xcompile
new file mode 100755
index 0000000..5809ec0
--- /dev/null
+++ b/util/scripts/xcompile
@@ -0,0 +1,269 @@
+#!/bin/bash
+#
+# This file is part of the coreboot project.
+#
+# Copyright (C) 2007-2010 coresystems GmbH
+# Copyright (C) 2012 Google Inc
+#
+# 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
+#
+
+TMPFILE=""
+XGCCPATH=${1:-"`pwd`/util/crossgcc/xgcc/bin/"}
+
+die() {
+	echo "ERROR: $*" >&2
+	exit 1
+}
+
+clean_up() {
+	if [ -n "$TMPFILE" ]; then
+		rm -f "$TMPFILE" "$TMPFILE.c" "$TMPFILE.o"
+	fi
+}
+
+# Create temporary file(s).
+TMPFILE="$(mktemp /tmp/temp.XXXX 2>/dev/null || echo /tmp/temp.78gOIUGz)"
+touch "$TMPFILE"
+trap clean_up EXIT
+
+
+program_exists() {
+	type "$1" >/dev/null 2>&1
+}
+
+
+if [ "$(${XGCCPATH}/iasl 2>/dev/null | grep -c ACPI)" -gt 0 ]; then
+	IASL=${XGCCPATH}iasl
+elif [ "$(iasl 2>/dev/null | grep -c ACPI)" -gt 0 ]; then
+	IASL=iasl
+else
+	die "no iasl found"
+fi
+
+if program_exists gcc; then
+	HOSTCC=gcc
+elif program_exists cc; then
+	HOSTCC=cc
+else
+	die "no host compiler found"
+fi
+
+cat <<EOF
+# platform agnostic and host tools
+IASL:=${IASL}
+HOSTCC:=${HOSTCC}
+
+EOF
+
+testcc() {
+	local tmp_c="$TMPFILE.c"
+	local tmp_o="$TMPFILE.o"
+	rm -f "$tmp_c" "$tmp_o"
+	echo "void _start(void) {}" >"$tmp_c"
+	"$1" -nostdlib -Werror $2 "$tmp_c" -o "$tmp_o" >/dev/null 2>&1
+}
+
+testas() {
+	local gccprefixes="$1"
+	local twidth="$2"
+	local arch="$3"
+	local use_dash_twidth="$4"
+	local obj_file="$TMPFILE.o"
+	local full_arch="elf$twidth-$arch"
+
+	rm -f "$obj_file"
+	[ -n "$use_dash_twidth" ] && use_dash_twidth="--$twidth"
+	${gccprefixes}as $use_dash_twidth -o "$obj_file" $TMPFILE 2>/dev/null ||
+		return 1
+
+	# Check output content type.
+	local obj_type="$(${gccprefixes}objdump -p $obj_file)"
+	local obj_arch="$(expr "$obj_type" : '.*format \(.[a-z0-9-]*\)')"
+	[ "$obj_arch" = "$full_arch" ] || return 1
+
+	# Architecture matched.
+	GCCPREFIX="$gccprefixes"
+
+	if [ -z "$use_dash_twidth" ]; then
+		ASFLAGS=""
+		CFLAGS=""
+		LDFLAGS=""
+	else
+		ASFLAGS="--$twidth"
+		CFLAGS="-m$twidth"
+		LDFLAGS="-b $full_arch"
+
+	fi
+
+	# Special parameters only available in dash_twidth mode.
+	[ -n "$use_dash_twidth" ] && case "$full_arch" in
+		"elf32-i386" )
+			LDFLAGS="$LDFLAGS -melf_i386"
+			CFLAGS="$CFLAGS -Wl,-b,elf32-i386 -Wl,-melf_i386"
+			;;
+	esac
+
+	return 0
+}
+
+detect_special_flags() {
+	local architecture="$1"
+	# GCC 4.6 is much more picky about unused variables.
+	# Turn off it's warnings for now:
+	testcc "$CC"   "$CFLAGS -Wno-unused-but-set-variable " &&
+		CFLAGS="$CFLAGS -Wno-unused-but-set-variable "
+
+	# Use bfd linker instead of gold if available:
+	testcc "$CC"   "$CFLAGS -fuse-ld=bfd" &&
+		CFLAGS="$CFLAGS -fuse-ld=bfd" && LINKER_SUFFIX='.bfd'
+
+	testcc "$CC"   "$CFLAGS -fno-stack-protector"&&
+		CFLAGS="$CFLAGS -fno-stack-protector"
+	testcc "$CC"   "$CFLAGS -Wl,--build-id=none" &&
+		CFLAGS="$CFLAGS -Wl,--build-id=none"
+
+	case "$architecture" in
+	x86)
+		testcc "$CC"   "$CFLAGS -Wa,--divide" &&
+			CFLAGS="$CFLAGS -Wa,--divide"
+		# Always build for i686 -- no sse/mmx instructions since SMM
+		# modules are compiled using these flags. Note that this
+		# doesn't prevent a project using xcompile to explicitly
+		# specify -mmsse, etc flags.
+		CFLAGS="$CFLAGS  -march=i686"
+		;;
+	mipsel)
+		testcc "$CC" "$CFLAGS -mno-abicalls -fno-pic" && \
+                  CFLAGS+=" -mno-abicalls -fno-pic"
+		;;
+	esac
+}
+
+report_arch_toolchain() {
+	cat <<EOF
+# elf${TWIDTH}-${TBFDARCH} toolchain (${GCCPREFIX}gcc)
+ARCH_SUPPORTED+=${TARCH}
+SUBARCH_SUPPORTED+=${TSUPP-${TARCH}}
+CC_${TARCH}:=${GCCPREFIX}gcc
+CFLAGS_${TARCH}:=${CFLAGS}
+CPP_${TARCH}:=${GCCPREFIX}cpp
+AS_${TARCH}:=${GCCPREFIX}as ${ASFLAGS}
+LD_${TARCH}:=${GCCPREFIX}ld${LINKER_SUFFIX} ${LDFLAGS}
+NM_${TARCH}:=${GCCPREFIX}nm
+OBJCOPY_${TARCH}:=${GCCPREFIX}objcopy
+OBJDUMP_${TARCH}:=${GCCPREFIX}objdump
+READELF_${TARCH}:=${GCCPREFIX}readelf
+STRIP_${TARCH}:=${GCCPREFIX}strip
+AR_${TARCH}:=${GCCPREFIX}ar
+
+EOF
+}
+
+# Architecture definition
+SUPPORTED_ARCHITECTURE="x86 arm arm64 riscv mipsel"
+
+arch_config_arm() {
+	TARCH="arm"
+	TBFDARCHS="littlearm"
+	TCLIST="armv7a armv7-a"
+	TWIDTH="32"
+	TSUPP="arm armv4 armv7"
+	TABI="eabi"
+}
+
+arch_config_arm64() {
+	TARCH="arm64"
+	TBFDARCHS="littleaarch64"
+	TCLIST="aarch64"
+	TWIDTH="64"
+	TSUPP="arm64 armv8_64"
+	TABI="elf"
+}
+
+arch_config_riscv() {
+	TARCH="riscv"
+	TBFDARCHS="littleriscv"
+	TCLIST="riscv"
+	TWIDTH="64"
+	TABI="elf"
+}
+
+arch_config_x86() {
+	TARCH="x86_32"
+	TBFDARCHS="i386"
+	TCLIST="i386 x86_64"
+	TWIDTH="32"
+	TABI="elf"
+}
+
+arch_config_mipsel() {
+	TARCH="mips"
+	TBFDARCHS="tradlittlemips littlemips"
+	TCLIST="mipsel"
+	TWIDTH="32"
+	TSUPP="mips mipsel"
+	TABI="elf"
+}
+
+test_architecture() {
+	architecture=$1
+
+	GCCPREFIX="invalid"
+	unset TARCH TBFDARCH TCLIST TWIDTH TSUPP TABI
+	if type arch_config_$architecture > /dev/null; then
+		arch_config_$architecture
+	else
+		die "no architecture definition for $architecture"
+	fi
+
+	# To override toolchain, define CROSS_COMPILE_$arch or CROSS_COMPILE as
+	# environment variable.
+	# Ex: CROSS_COMPILE_arm="armv7a-cros-linux-gnueabi-"
+	#     CROSS_COMPILE_x86="i686-pc-linux-gnu-"
+	search="$(eval echo \$CROSS_COMPILE_$architecture 2>/dev/null)"
+	search="$search $CROSS_COMPILE"
+	for toolchain in $TCLIST; do
+		search="$search $XGCCPATH$toolchain-$TABI-"
+		search="$search $toolchain-$TABI-"
+		search="$search $toolchain-linux-gnu-"
+		search="$search $toolchain-"
+	done
+	echo "# $architecture TARCH_SEARCH=$search"
+
+	# Search toolchain by checking assembler capability.
+	for TBFDARCH in $TBFDARCHS; do
+		for gccprefixes in $search ""; do
+			program_exists "${gccprefixes}as" || continue
+			testas "$gccprefixes" "$TWIDTH" "$TBFDARCH" "" && break
+			testas "$gccprefixes" "$TWIDTH" "$TBFDARCH" "TRUE" && break
+		done
+		[ "$GCCPREFIX" = "invalid" ] || break
+	done
+
+	if [ "$GCCPREFIX" = "invalid" ]; then
+		echo "Warning: no suitable GCC for $architecture." >&2
+		continue
+	fi
+	CC="${GCCPREFIX}"gcc
+
+	detect_special_flags "$architecture"
+	report_arch_toolchain
+}
+
+# This loops over all supported architectures.
+for architecture in $SUPPORTED_ARCHITECTURE; do
+	test_architecture $architecture
+done
+
diff --git a/util/xcompile/xcompile b/util/xcompile/xcompile
deleted file mode 100755
index 5809ec0..0000000
--- a/util/xcompile/xcompile
+++ /dev/null
@@ -1,269 +0,0 @@
-#!/bin/bash
-#
-# This file is part of the coreboot project.
-#
-# Copyright (C) 2007-2010 coresystems GmbH
-# Copyright (C) 2012 Google Inc
-#
-# 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
-#
-
-TMPFILE=""
-XGCCPATH=${1:-"`pwd`/util/crossgcc/xgcc/bin/"}
-
-die() {
-	echo "ERROR: $*" >&2
-	exit 1
-}
-
-clean_up() {
-	if [ -n "$TMPFILE" ]; then
-		rm -f "$TMPFILE" "$TMPFILE.c" "$TMPFILE.o"
-	fi
-}
-
-# Create temporary file(s).
-TMPFILE="$(mktemp /tmp/temp.XXXX 2>/dev/null || echo /tmp/temp.78gOIUGz)"
-touch "$TMPFILE"
-trap clean_up EXIT
-
-
-program_exists() {
-	type "$1" >/dev/null 2>&1
-}
-
-
-if [ "$(${XGCCPATH}/iasl 2>/dev/null | grep -c ACPI)" -gt 0 ]; then
-	IASL=${XGCCPATH}iasl
-elif [ "$(iasl 2>/dev/null | grep -c ACPI)" -gt 0 ]; then
-	IASL=iasl
-else
-	die "no iasl found"
-fi
-
-if program_exists gcc; then
-	HOSTCC=gcc
-elif program_exists cc; then
-	HOSTCC=cc
-else
-	die "no host compiler found"
-fi
-
-cat <<EOF
-# platform agnostic and host tools
-IASL:=${IASL}
-HOSTCC:=${HOSTCC}
-
-EOF
-
-testcc() {
-	local tmp_c="$TMPFILE.c"
-	local tmp_o="$TMPFILE.o"
-	rm -f "$tmp_c" "$tmp_o"
-	echo "void _start(void) {}" >"$tmp_c"
-	"$1" -nostdlib -Werror $2 "$tmp_c" -o "$tmp_o" >/dev/null 2>&1
-}
-
-testas() {
-	local gccprefixes="$1"
-	local twidth="$2"
-	local arch="$3"
-	local use_dash_twidth="$4"
-	local obj_file="$TMPFILE.o"
-	local full_arch="elf$twidth-$arch"
-
-	rm -f "$obj_file"
-	[ -n "$use_dash_twidth" ] && use_dash_twidth="--$twidth"
-	${gccprefixes}as $use_dash_twidth -o "$obj_file" $TMPFILE 2>/dev/null ||
-		return 1
-
-	# Check output content type.
-	local obj_type="$(${gccprefixes}objdump -p $obj_file)"
-	local obj_arch="$(expr "$obj_type" : '.*format \(.[a-z0-9-]*\)')"
-	[ "$obj_arch" = "$full_arch" ] || return 1
-
-	# Architecture matched.
-	GCCPREFIX="$gccprefixes"
-
-	if [ -z "$use_dash_twidth" ]; then
-		ASFLAGS=""
-		CFLAGS=""
-		LDFLAGS=""
-	else
-		ASFLAGS="--$twidth"
-		CFLAGS="-m$twidth"
-		LDFLAGS="-b $full_arch"
-
-	fi
-
-	# Special parameters only available in dash_twidth mode.
-	[ -n "$use_dash_twidth" ] && case "$full_arch" in
-		"elf32-i386" )
-			LDFLAGS="$LDFLAGS -melf_i386"
-			CFLAGS="$CFLAGS -Wl,-b,elf32-i386 -Wl,-melf_i386"
-			;;
-	esac
-
-	return 0
-}
-
-detect_special_flags() {
-	local architecture="$1"
-	# GCC 4.6 is much more picky about unused variables.
-	# Turn off it's warnings for now:
-	testcc "$CC"   "$CFLAGS -Wno-unused-but-set-variable " &&
-		CFLAGS="$CFLAGS -Wno-unused-but-set-variable "
-
-	# Use bfd linker instead of gold if available:
-	testcc "$CC"   "$CFLAGS -fuse-ld=bfd" &&
-		CFLAGS="$CFLAGS -fuse-ld=bfd" && LINKER_SUFFIX='.bfd'
-
-	testcc "$CC"   "$CFLAGS -fno-stack-protector"&&
-		CFLAGS="$CFLAGS -fno-stack-protector"
-	testcc "$CC"   "$CFLAGS -Wl,--build-id=none" &&
-		CFLAGS="$CFLAGS -Wl,--build-id=none"
-
-	case "$architecture" in
-	x86)
-		testcc "$CC"   "$CFLAGS -Wa,--divide" &&
-			CFLAGS="$CFLAGS -Wa,--divide"
-		# Always build for i686 -- no sse/mmx instructions since SMM
-		# modules are compiled using these flags. Note that this
-		# doesn't prevent a project using xcompile to explicitly
-		# specify -mmsse, etc flags.
-		CFLAGS="$CFLAGS  -march=i686"
-		;;
-	mipsel)
-		testcc "$CC" "$CFLAGS -mno-abicalls -fno-pic" && \
-                  CFLAGS+=" -mno-abicalls -fno-pic"
-		;;
-	esac
-}
-
-report_arch_toolchain() {
-	cat <<EOF
-# elf${TWIDTH}-${TBFDARCH} toolchain (${GCCPREFIX}gcc)
-ARCH_SUPPORTED+=${TARCH}
-SUBARCH_SUPPORTED+=${TSUPP-${TARCH}}
-CC_${TARCH}:=${GCCPREFIX}gcc
-CFLAGS_${TARCH}:=${CFLAGS}
-CPP_${TARCH}:=${GCCPREFIX}cpp
-AS_${TARCH}:=${GCCPREFIX}as ${ASFLAGS}
-LD_${TARCH}:=${GCCPREFIX}ld${LINKER_SUFFIX} ${LDFLAGS}
-NM_${TARCH}:=${GCCPREFIX}nm
-OBJCOPY_${TARCH}:=${GCCPREFIX}objcopy
-OBJDUMP_${TARCH}:=${GCCPREFIX}objdump
-READELF_${TARCH}:=${GCCPREFIX}readelf
-STRIP_${TARCH}:=${GCCPREFIX}strip
-AR_${TARCH}:=${GCCPREFIX}ar
-
-EOF
-}
-
-# Architecture definition
-SUPPORTED_ARCHITECTURE="x86 arm arm64 riscv mipsel"
-
-arch_config_arm() {
-	TARCH="arm"
-	TBFDARCHS="littlearm"
-	TCLIST="armv7a armv7-a"
-	TWIDTH="32"
-	TSUPP="arm armv4 armv7"
-	TABI="eabi"
-}
-
-arch_config_arm64() {
-	TARCH="arm64"
-	TBFDARCHS="littleaarch64"
-	TCLIST="aarch64"
-	TWIDTH="64"
-	TSUPP="arm64 armv8_64"
-	TABI="elf"
-}
-
-arch_config_riscv() {
-	TARCH="riscv"
-	TBFDARCHS="littleriscv"
-	TCLIST="riscv"
-	TWIDTH="64"
-	TABI="elf"
-}
-
-arch_config_x86() {
-	TARCH="x86_32"
-	TBFDARCHS="i386"
-	TCLIST="i386 x86_64"
-	TWIDTH="32"
-	TABI="elf"
-}
-
-arch_config_mipsel() {
-	TARCH="mips"
-	TBFDARCHS="tradlittlemips littlemips"
-	TCLIST="mipsel"
-	TWIDTH="32"
-	TSUPP="mips mipsel"
-	TABI="elf"
-}
-
-test_architecture() {
-	architecture=$1
-
-	GCCPREFIX="invalid"
-	unset TARCH TBFDARCH TCLIST TWIDTH TSUPP TABI
-	if type arch_config_$architecture > /dev/null; then
-		arch_config_$architecture
-	else
-		die "no architecture definition for $architecture"
-	fi
-
-	# To override toolchain, define CROSS_COMPILE_$arch or CROSS_COMPILE as
-	# environment variable.
-	# Ex: CROSS_COMPILE_arm="armv7a-cros-linux-gnueabi-"
-	#     CROSS_COMPILE_x86="i686-pc-linux-gnu-"
-	search="$(eval echo \$CROSS_COMPILE_$architecture 2>/dev/null)"
-	search="$search $CROSS_COMPILE"
-	for toolchain in $TCLIST; do
-		search="$search $XGCCPATH$toolchain-$TABI-"
-		search="$search $toolchain-$TABI-"
-		search="$search $toolchain-linux-gnu-"
-		search="$search $toolchain-"
-	done
-	echo "# $architecture TARCH_SEARCH=$search"
-
-	# Search toolchain by checking assembler capability.
-	for TBFDARCH in $TBFDARCHS; do
-		for gccprefixes in $search ""; do
-			program_exists "${gccprefixes}as" || continue
-			testas "$gccprefixes" "$TWIDTH" "$TBFDARCH" "" && break
-			testas "$gccprefixes" "$TWIDTH" "$TBFDARCH" "TRUE" && break
-		done
-		[ "$GCCPREFIX" = "invalid" ] || break
-	done
-
-	if [ "$GCCPREFIX" = "invalid" ]; then
-		echo "Warning: no suitable GCC for $architecture." >&2
-		continue
-	fi
-	CC="${GCCPREFIX}"gcc
-
-	detect_special_flags "$architecture"
-	report_arch_toolchain
-}
-
-# This loops over all supported architectures.
-for architecture in $SUPPORTED_ARCHITECTURE; do
-	test_architecture $architecture
-done
-



More information about the coreboot-gerrit mailing list