summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/.gitignore4
-rw-r--r--tools/Makefile47
-rw-r--r--tools/binman/README24
-rwxr-xr-xtools/binman/binman.py44
-rw-r--r--tools/binman/entry_test.py36
-rw-r--r--tools/binman/etype/u_boot_spl_with_ucode_ptr.py2
-rw-r--r--tools/binman/etype/u_boot_ucode.py11
-rw-r--r--tools/binman/ftest.py (renamed from tools/binman/func_test.py)108
-rw-r--r--tools/binman/image.py7
-rw-r--r--tools/binman/test/47_spl_bss_pad.dts17
-rw-r--r--tools/binman/test/48_x86-start16-spl.dts13
-rw-r--r--tools/binman/test/49_x86_ucode_spl.dts29
-rw-r--r--tools/binman/test/50_intel_mrc.dts13
-rw-r--r--tools/binman/test/Makefile39
-rwxr-xr-xtools/binman/test/bss_databin0 -> 5020 bytes
-rw-r--r--tools/binman/test/bss_data.c18
-rw-r--r--tools/binman/test/bss_data.lds16
-rw-r--r--tools/binman/test/u_boot_no_ucode_ptr.c4
-rw-r--r--tools/binman/test/u_boot_ucode_ptr.c4
-rwxr-xr-xtools/buildman/buildman.py6
-rw-r--r--tools/buildman/cmdline.py2
-rw-r--r--tools/buildman/test.py38
-rw-r--r--tools/dtoc/fdt_util.py3
-rw-r--r--tools/dtoc/test_dtoc.py82
-rw-r--r--tools/env/Makefile2
-rw-r--r--tools/env/aes.c1
-rw-r--r--tools/env/fw_env.c79
-rw-r--r--tools/env/fw_env.h5
-rw-r--r--tools/env/fw_env_main.c14
-rw-r--r--tools/libfdt/fdt.c2
-rw-r--r--tools/libfdt/fdt_addresses.c2
-rw-r--r--tools/libfdt/fdt_empty_tree.c2
-rw-r--r--tools/libfdt/fdt_overlay.c2
-rw-r--r--tools/libfdt/fdt_strerror.c2
-rw-r--r--tools/libfdt/fdt_sw.c2
-rw-r--r--tools/patman/test.py41
-rw-r--r--tools/rkcommon.c45
37 files changed, 463 insertions, 303 deletions
diff --git a/tools/.gitignore b/tools/.gitignore
index 5293d44697c..6a487d22027 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -1,4 +1,3 @@
-/_libfdt.so
/atmel_pmecc_params
/bin2header
/bmp_logo
@@ -17,9 +16,6 @@
/img2srec
/kwboot
/lib/
-/libfdt.py
-/libfdt.pyc
-/libfdt_wrap.c
/mips-relocs
/mkenvimage
/mkexynosspl
diff --git a/tools/Makefile b/tools/Makefile
index 5db2a542252..acbcd87af28 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -58,21 +58,17 @@ hostprogs-y += dumpimage mkimage
hostprogs-$(CONFIG_FIT_SIGNATURE) += fit_info fit_check_sign
FIT_SIG_OBJS-$(CONFIG_FIT_SIGNATURE) := common/image-sig.o
-# Flattened device tree objects
-LIBFDT_CSRCS := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c \
- fdt_empty_tree.c fdt_addresses.c fdt_overlay.c \
- fdt_region.c
-
-# Unfortunately setup.py below cannot handle srctree being ".." which it often
-# is. It fails with an error like:
-# Fatal error: can't create build/temp.linux-x86_64-2.7/../lib/libfdt/fdt.o:
-# No such file or directory
-# To fix this, use an absolute path.
-libfdt_tree := $(shell readlink -f $(srctree)/lib/libfdt)
-
-LIBFDT_SRCS := $(addprefix $(libfdt_tree)/, $(LIBFDT_CSRCS))
-LIBFDT_SWIG := $(addprefix $(libfdt_tree)/, pylibfdt/libfdt.i)
-LIBFDT_OBJS := $(addprefix lib/libfdt/, $(patsubst %.c, %.o, $(LIBFDT_CSRCS)))
+
+# The following files are synced with upstream DTC.
+# Use synced versions from scripts/dtc/libfdt/.
+LIBFDT_SRCS_SYNCED := fdt.c fdt_sw.c fdt_strerror.c fdt_empty_tree.c \
+ fdt_addresses.c fdt_overlay.c
+# The following files are locally modified for U-Boot (unfotunately).
+# Use U-Boot own versions from lib/libfdt/.
+LIBFDT_SRCS_UNSYNCED := fdt_ro.c fdt_wip.c fdt_rw.c fdt_region.c
+
+LIBFDT_OBJS := $(addprefix libfdt/, $(patsubst %.c, %.o, $(LIBFDT_SRCS_SYNCED))) \
+ $(addprefix lib/libfdt/, $(patsubst %.c, %.o, $(LIBFDT_SRCS_UNSYNCED)))
RSA_OBJS-$(CONFIG_FIT_SIGNATURE) := $(addprefix lib/rsa/, \
rsa-sign.o rsa-verify.o rsa-checksum.o \
@@ -123,23 +119,6 @@ mkimage-objs := $(dumpimage-mkimage-objs) mkimage.o
fit_info-objs := $(dumpimage-mkimage-objs) fit_info.o
fit_check_sign-objs := $(dumpimage-mkimage-objs) fit_check_sign.o
-# Unfortunately setup.py (or actually the Python distutil implementation)
-# puts files into the same directory as the .i file. We cannot touch the source
-# directory, so we copy the .i file into the tools/ build subdirectory before
-# calling setup. This directory is safe to write to. This ensures that we get
-# all three files in $(obj)/tools: _libfdt.so, libfdt.py and libfdt_wrap.c
-# The latter is a temporary file which we could actually remove.
-tools/_libfdt.so: $(LIBFDT_SRCS) $(LIBFDT_SWIG)
- $(Q)cp $(LIBFDT_SWIG) tools/.
- $(Q)unset CC; \
- unset CROSS_COMPILE; \
- LDFLAGS="$(HOSTLDFLAGS)" CFLAGS= VERSION="u-boot-$(UBOOTVERSION)" \
- CPPFLAGS="$(_hostc_flags)" OBJDIR=tools \
- SOURCES="$(LIBFDT_SRCS) tools/libfdt.i" \
- SWIG_OPTS="-I$(srctree)/lib/libfdt -I$(srctree)/lib" \
- $(PYTHON) $(libfdt_tree)/pylibfdt/setup.py --quiet build_ext \
- --build-lib tools
-
ifneq ($(CONFIG_MX23)$(CONFIG_MX28),)
# Add CONFIG_MXS into host CFLAGS, so we can check whether or not register
# the mxsimage support within tools/mxsimage.c .
@@ -231,10 +210,6 @@ clean-dirs := lib common
always := $(hostprogs-y)
-# Build a libfdt Python module if swig is available
-# Use 'sudo apt-get install swig libpython-dev' to enable this
-always += $(if $(shell which swig 2> /dev/null),_libfdt.so)
-
# Generated LCD/video logo
LOGO_H = $(objtree)/include/bmp_logo.h
LOGO_DATA_H = $(objtree)/include/bmp_logo_data.h
diff --git a/tools/binman/README b/tools/binman/README
index cb47e73599a..4ef76c8f089 100644
--- a/tools/binman/README
+++ b/tools/binman/README
@@ -206,6 +206,27 @@ for its instructions in the 'binman' node.
Binman has a few other options which you can see by running 'binman -h'.
+Enabling binman for a board
+---------------------------
+
+At present binman is invoked from a rule in the main Makefile. Typically you
+will have a rule like:
+
+ifneq ($(CONFIG_ARCH_<something>),)
+u-boot-<your_suffix>.bin: <input_file_1> <input_file_2> checkbinman FORCE
+ $(call if_changed,binman)
+endif
+
+This assumes that u-boot-<your_suffix>.bin is a target, and is the final file
+that you need to produce. You can make it a target by adding it to ALL-y
+either in the main Makefile or in a config.mk file in your arch subdirectory.
+
+Once binman is executed it will pick up its instructions from a device-tree
+file, typically <soc>-u-boot.dtsi, where <soc> is your CONFIG_SYS_SOC value.
+You can use other, more specific CONFIG options - see 'Automatic .dtsi
+inclusion' below.
+
+
Image description format
------------------------
@@ -446,7 +467,8 @@ If you are having trouble figuring out what is going on, you can uncomment
the 'warning' line in scripts/Makefile.lib to see what it has found:
# Uncomment for debugging
- # $(warning binman_dtsi_options: $(binman_dtsi_options))
+ # This shows all the files that were considered and the one that we chose.
+ # u_boot_dtsi_options_debug = $(u_boot_dtsi_options_raw)
Code coverage
diff --git a/tools/binman/binman.py b/tools/binman/binman.py
index 09dc36a3f79..3ccf25f1f88 100755
--- a/tools/binman/binman.py
+++ b/tools/binman/binman.py
@@ -10,6 +10,7 @@
"""See README for more information"""
+import glob
import os
import sys
import traceback
@@ -21,7 +22,7 @@ for dirname in ['../patman', '../dtoc', '..']:
sys.path.insert(0, os.path.join(our_path, dirname))
# Bring in the libfdt module
-sys.path.insert(0, 'tools')
+sys.path.insert(0, 'scripts/dtc/pylibfdt')
# Also allow entry-type modules to be brought in from the etype directory.
sys.path.insert(0, os.path.join(our_path, 'etype'))
@@ -34,7 +35,7 @@ def RunTests():
"""Run the functional tests and any embedded doctests"""
import entry_test
import fdt_test
- import func_test
+ import ftest
import test
import doctest
@@ -44,8 +45,12 @@ def RunTests():
suite.run(result)
sys.argv = [sys.argv[0]]
- for module in (func_test.TestFunctional, fdt_test.TestFdt,
- entry_test.TestEntry):
+
+ # Run the entry tests first ,since these need to be the first to import the
+ # 'entry' module.
+ suite = unittest.TestLoader().loadTestsFromTestCase(entry_test.TestEntry)
+ suite.run(result)
+ for module in (ftest.TestFunctional, fdt_test.TestFdt):
suite = unittest.TestLoader().loadTestsFromTestCase(module)
suite.run(result)
@@ -53,22 +58,41 @@ def RunTests():
for test, err in result.errors:
print test.id(), err
for test, err in result.failures:
- print err
+ print err, result.failures
+ if result.errors or result.failures:
+ print 'binman tests FAILED'
+ return 1
+ return 0
def RunTestCoverage():
"""Run the tests and check that we get 100% coverage"""
# This uses the build output from sandbox_spl to get _libfdt.so
- cmd = ('PYTHONPATH=%s/sandbox_spl/tools coverage run '
+ cmd = ('PYTHONPATH=$PYTHONPATH:%s/sandbox_spl/tools coverage run '
'--include "tools/binman/*.py" --omit "*test*,*binman.py" '
'tools/binman/binman.py -t' % options.build_dir)
os.system(cmd)
stdout = command.Output('coverage', 'report')
- coverage = stdout.splitlines()[-1].split(' ')[-1]
+ lines = stdout.splitlines()
+
+ test_set= set([os.path.basename(line.split()[0])
+ for line in lines if '/etype/' in line])
+ glob_list = glob.glob(os.path.join(our_path, 'etype/*.py'))
+ all_set = set([os.path.basename(item) for item in glob_list])
+ missing_list = all_set
+ missing_list.difference_update(test_set)
+ missing_list.remove('_testing.py')
+ coverage = lines[-1].split(' ')[-1]
+ ok = True
+ if missing_list:
+ print 'Missing tests for %s' % (', '.join(missing_list))
+ ok = False
if coverage != '100%':
print stdout
print "Type 'coverage html' to get a report in htmlcov/index.html"
- raise ValueError('Coverage error: %s, but should be 100%%' % coverage)
-
+ print 'Coverage error: %s, but should be 100%%' % coverage
+ ok = False
+ if not ok:
+ raise ValueError('Test coverage failure')
def RunBinman(options, args):
"""Main entry point to binman once arguments are parsed
@@ -86,7 +110,7 @@ def RunBinman(options, args):
sys.tracebacklimit = 0
if options.test:
- RunTests()
+ ret_code = RunTests()
elif options.test_coverage:
RunTestCoverage()
diff --git a/tools/binman/entry_test.py b/tools/binman/entry_test.py
index 8a9ae017f03..caa523ebf89 100644
--- a/tools/binman/entry_test.py
+++ b/tools/binman/entry_test.py
@@ -7,21 +7,55 @@
# Test for the Entry class
import collections
+import os
+import sys
import unittest
-import entry
+import fdt
+import fdt_util
+import tools
class TestEntry(unittest.TestCase):
+ def GetNode(self):
+ binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
+ tools.PrepareOutputDir(None)
+ fname = fdt_util.EnsureCompiled(
+ os.path.join(binman_dir,('test/05_simple.dts')))
+ dtb = fdt.FdtScan(fname)
+ return dtb.GetNode('/binman/u-boot')
+
+ def test1EntryNoImportLib(self):
+ """Test that we can import Entry subclassess successfully"""
+
+ sys.modules['importlib'] = None
+ global entry
+ import entry
+ entry.Entry.Create(None, self.GetNode(), 'u-boot')
+
+ def test2EntryImportLib(self):
+ del sys.modules['importlib']
+ global entry
+ reload(entry)
+ entry.Entry.Create(None, self.GetNode(), 'u-boot-spl')
+ tools._RemoveOutputDir()
+ del entry
+
def testEntryContents(self):
"""Test the Entry bass class"""
+ import entry
base_entry = entry.Entry(None, None, None, read_node=False)
self.assertEqual(True, base_entry.ObtainContents())
def testUnknownEntry(self):
"""Test that unknown entry types are detected"""
+ import entry
Node = collections.namedtuple('Node', ['name', 'path'])
node = Node('invalid-name', 'invalid-path')
with self.assertRaises(ValueError) as e:
entry.Entry.Create(None, node, node.name)
self.assertIn("Unknown entry type 'invalid-name' in node "
"'invalid-path'", str(e.exception))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tools/binman/etype/u_boot_spl_with_ucode_ptr.py b/tools/binman/etype/u_boot_spl_with_ucode_ptr.py
index 1c6706df6db..7b25ccb0488 100644
--- a/tools/binman/etype/u_boot_spl_with_ucode_ptr.py
+++ b/tools/binman/etype/u_boot_spl_with_ucode_ptr.py
@@ -25,4 +25,4 @@ class Entry_u_boot_spl_with_ucode_ptr(Entry_u_boot_with_ucode_ptr):
self.elf_fname = 'spl/u-boot-spl'
def GetDefaultFilename(self):
- return 'spl/u-boot-spl.bin'
+ return 'spl/u-boot-spl-nodtb.bin'
diff --git a/tools/binman/etype/u_boot_ucode.py b/tools/binman/etype/u_boot_ucode.py
index 8e51e99a119..f9f434d2cc2 100644
--- a/tools/binman/etype/u_boot_ucode.py
+++ b/tools/binman/etype/u_boot_ucode.py
@@ -58,13 +58,10 @@ class Entry_u_boot_ucode(Entry_blob):
def ObtainContents(self):
# If the image does not need microcode, there is nothing to do
ucode_dest_entry = self.image.FindEntryType('u-boot-with-ucode-ptr')
- if ucode_dest_entry and not ucode_dest_entry.target_pos:
- self.data = ''
- return True
-
- # Handle microcode in SPL image as well
- ucode_dest_entry = self.image.FindEntryType('u-boot-spl-with-ucode-ptr')
- if ucode_dest_entry and not ucode_dest_entry.target_pos:
+ ucode_dest_entry_spl = self.image.FindEntryType(
+ 'u-boot-spl-with-ucode-ptr')
+ if ((not ucode_dest_entry or not ucode_dest_entry.target_pos) and
+ (not ucode_dest_entry_spl or not ucode_dest_entry_spl.target_pos)):
self.data = ''
return True
diff --git a/tools/binman/func_test.py b/tools/binman/ftest.py
index c4207ce5d29..9083143894f 100644
--- a/tools/binman/func_test.py
+++ b/tools/binman/ftest.py
@@ -20,25 +20,27 @@ import binman
import cmdline
import command
import control
-import entry
import fdt
import fdt_util
import tools
import tout
# Contents of test files, corresponding to different entry types
-U_BOOT_DATA = '1234'
-U_BOOT_IMG_DATA = 'img'
-U_BOOT_SPL_DATA = '567'
-BLOB_DATA = '89'
-ME_DATA = '0abcd'
-VGA_DATA = 'vga'
-U_BOOT_DTB_DATA = 'udtb'
-X86_START16_DATA = 'start16'
-U_BOOT_NODTB_DATA = 'nodtb with microcode pointer somewhere in here'
-FSP_DATA = 'fsp'
-CMC_DATA = 'cmc'
-VBT_DATA = 'vbt'
+U_BOOT_DATA = '1234'
+U_BOOT_IMG_DATA = 'img'
+U_BOOT_SPL_DATA = '567'
+BLOB_DATA = '89'
+ME_DATA = '0abcd'
+VGA_DATA = 'vga'
+U_BOOT_DTB_DATA = 'udtb'
+X86_START16_DATA = 'start16'
+X86_START16_SPL_DATA = 'start16spl'
+U_BOOT_NODTB_DATA = 'nodtb with microcode pointer somewhere in here'
+U_BOOT_SPL_NODTB_DATA = 'splnodtb with microcode pointer somewhere in here'
+FSP_DATA = 'fsp'
+CMC_DATA = 'cmc'
+VBT_DATA = 'vbt'
+MRC_DATA = 'mrc'
class TestFunctional(unittest.TestCase):
"""Functional tests for binman
@@ -56,6 +58,9 @@ class TestFunctional(unittest.TestCase):
"""
@classmethod
def setUpClass(self):
+ global entry
+ import entry
+
# Handle the case where argv[0] is 'python'
self._binman_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
self._binman_pathname = os.path.join(self._binman_dir, 'binman')
@@ -72,10 +77,15 @@ class TestFunctional(unittest.TestCase):
TestFunctional._MakeInputFile('vga.bin', VGA_DATA)
TestFunctional._MakeInputFile('u-boot.dtb', U_BOOT_DTB_DATA)
TestFunctional._MakeInputFile('u-boot-x86-16bit.bin', X86_START16_DATA)
+ TestFunctional._MakeInputFile('spl/u-boot-x86-16bit-spl.bin',
+ X86_START16_SPL_DATA)
TestFunctional._MakeInputFile('u-boot-nodtb.bin', U_BOOT_NODTB_DATA)
+ TestFunctional._MakeInputFile('spl/u-boot-spl-nodtb.bin',
+ U_BOOT_SPL_NODTB_DATA)
TestFunctional._MakeInputFile('fsp.bin', FSP_DATA)
TestFunctional._MakeInputFile('cmc.bin', CMC_DATA)
TestFunctional._MakeInputFile('vbt.bin', VBT_DATA)
+ TestFunctional._MakeInputFile('mrc.bin', MRC_DATA)
self._output_setup = False
# ELF file with a '_dt_ucode_base_size' symbol
@@ -644,19 +654,11 @@ class TestFunctional(unittest.TestCase):
data = self._DoReadFile('33_x86-start16.dts')
self.assertEqual(X86_START16_DATA, data[:len(X86_START16_DATA)])
- def testPackUbootMicrocode(self):
- """Test that x86 microcode can be handled correctly
-
- We expect to see the following in the image, in order:
- u-boot-nodtb.bin with a microcode pointer inserted at the correct
- place
- u-boot.dtb with the microcode removed
- the microcode
- """
- data = self._DoReadFile('34_x86_ucode.dts', True)
+ def _RunMicrocodeTest(self, dts_fname, nodtb_data):
+ data = self._DoReadFile(dts_fname, True)
# Now check the device tree has no microcode
- second = data[len(U_BOOT_NODTB_DATA):]
+ second = data[len(nodtb_data):]
fname = tools.GetOutputFilename('test.dtb')
with open(fname, 'wb') as fd:
fd.write(second)
@@ -671,17 +673,30 @@ class TestFunctional(unittest.TestCase):
# Check that the microcode appears immediately after the Fdt
# This matches the concatenation of the data properties in
- # the /microcode/update@xxx nodes in x86_ucode.dts.
+ # the /microcode/update@xxx nodes in 34_x86_ucode.dts.
ucode_data = struct.pack('>4L', 0x12345678, 0x12345679, 0xabcd0000,
0x78235609)
self.assertEqual(ucode_data, third[:len(ucode_data)])
- ucode_pos = len(U_BOOT_NODTB_DATA) + fdt_len
+ ucode_pos = len(nodtb_data) + fdt_len
# Check that the microcode pointer was inserted. It should match the
# expected position and size
pos_and_size = struct.pack('<2L', 0xfffffe00 + ucode_pos,
len(ucode_data))
- first = data[:len(U_BOOT_NODTB_DATA)]
+ first = data[:len(nodtb_data)]
+ return first, pos_and_size
+
+ def testPackUbootMicrocode(self):
+ """Test that x86 microcode can be handled correctly
+
+ We expect to see the following in the image, in order:
+ u-boot-nodtb.bin with a microcode pointer inserted at the correct
+ place
+ u-boot.dtb with the microcode removed
+ the microcode
+ """
+ first, pos_and_size = self._RunMicrocodeTest('34_x86_ucode.dts',
+ U_BOOT_NODTB_DATA)
self.assertEqual('nodtb with microcode' + pos_and_size +
' somewhere in here', first)
@@ -811,3 +826,42 @@ class TestFunctional(unittest.TestCase):
"""Test that an image with a VBT binary can be created"""
data = self._DoReadFile('46_intel-vbt.dts')
self.assertEqual(VBT_DATA, data[:len(VBT_DATA)])
+
+ def testSplBssPad(self):
+ """Test that we can pad SPL's BSS with zeros"""
+ # ELF file with a '__bss_size' symbol
+ with open(self.TestFile('bss_data')) as fd:
+ TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ data = self._DoReadFile('47_spl_bss_pad.dts')
+ self.assertEqual(U_BOOT_SPL_DATA + (chr(0) * 10) + U_BOOT_DATA, data)
+
+ def testPackStart16Spl(self):
+ """Test that an image with an x86 start16 region can be created"""
+ data = self._DoReadFile('48_x86-start16-spl.dts')
+ self.assertEqual(X86_START16_SPL_DATA, data[:len(X86_START16_SPL_DATA)])
+
+ def testPackUbootSplMicrocode(self):
+ """Test that x86 microcode can be handled correctly in SPL
+
+ We expect to see the following in the image, in order:
+ u-boot-spl-nodtb.bin with a microcode pointer inserted at the
+ correct place
+ u-boot.dtb with the microcode removed
+ the microcode
+ """
+ # ELF file with a '_dt_ucode_base_size' symbol
+ with open(self.TestFile('u_boot_ucode_ptr')) as fd:
+ TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ first, pos_and_size = self._RunMicrocodeTest('49_x86_ucode_spl.dts',
+ U_BOOT_SPL_NODTB_DATA)
+ self.assertEqual('splnodtb with microc' + pos_and_size +
+ 'ter somewhere in here', first)
+
+ def testPackMrc(self):
+ """Test that an image with an MRC binary can be created"""
+ data = self._DoReadFile('50_intel_mrc.dts')
+ self.assertEqual(MRC_DATA, data[:len(MRC_DATA)])
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tools/binman/image.py b/tools/binman/image.py
index 07fc9306659..24c4f6f578a 100644
--- a/tools/binman/image.py
+++ b/tools/binman/image.py
@@ -9,8 +9,6 @@
from collections import OrderedDict
from operator import attrgetter
-import entry
-from entry import Entry
import fdt_util
import tools
@@ -48,6 +46,11 @@ class Image:
_entries: OrderedDict() of entries
"""
def __init__(self, name, node):
+ global entry
+ global Entry
+ import entry
+ from entry import Entry
+
self._node = node
self._name = name
self._size = None
diff --git a/tools/binman/test/47_spl_bss_pad.dts b/tools/binman/test/47_spl_bss_pad.dts
new file mode 100644
index 00000000000..6bd88b83f98
--- /dev/null
+++ b/tools/binman/test/47_spl_bss_pad.dts
@@ -0,0 +1,17 @@
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ u-boot-spl {
+ };
+
+ u-boot-spl-bss-pad {
+ };
+
+ u-boot {
+ };
+ };
+};
diff --git a/tools/binman/test/48_x86-start16-spl.dts b/tools/binman/test/48_x86-start16-spl.dts
new file mode 100644
index 00000000000..e2009f15f05
--- /dev/null
+++ b/tools/binman/test/48_x86-start16-spl.dts
@@ -0,0 +1,13 @@
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ size = <16>;
+
+ x86-start16-spl {
+ };
+ };
+};
diff --git a/tools/binman/test/49_x86_ucode_spl.dts b/tools/binman/test/49_x86_ucode_spl.dts
new file mode 100644
index 00000000000..67db93ad502
--- /dev/null
+++ b/tools/binman/test/49_x86_ucode_spl.dts
@@ -0,0 +1,29 @@
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ sort-by-pos;
+ end-at-4gb;
+ size = <0x200>;
+ u-boot-spl-with-ucode-ptr {
+ };
+
+ u-boot-dtb-with-ucode {
+ };
+
+ u-boot-ucode {
+ };
+ };
+
+ microcode {
+ update@0 {
+ data = <0x12345678 0x12345679>;
+ };
+ update@1 {
+ data = <0xabcd0000 0x78235609>;
+ };
+ };
+};
diff --git a/tools/binman/test/50_intel_mrc.dts b/tools/binman/test/50_intel_mrc.dts
new file mode 100644
index 00000000000..54cd52a2b71
--- /dev/null
+++ b/tools/binman/test/50_intel_mrc.dts
@@ -0,0 +1,13 @@
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ size = <16>;
+
+ intel-mrc {
+ };
+ };
+};
diff --git a/tools/binman/test/Makefile b/tools/binman/test/Makefile
new file mode 100644
index 00000000000..217d13c666f
--- /dev/null
+++ b/tools/binman/test/Makefile
@@ -0,0 +1,39 @@
+#
+# Builds test programs
+#
+# Copyright (C) 2017 Google, Inc
+# Written by Simon Glass <sjg@chromium.org>
+#
+# SPDX-License-Identifier: GPL-2.0+
+#
+
+CFLAGS := -march=i386 -m32 -nostdlib -I ../../../include
+
+LDS_UCODE := -T u_boot_ucode_ptr.lds
+
+TARGETS = u_boot_ucode_ptr u_boot_no_ucode_ptr bss_data
+
+all: $(TARGETS)
+
+u_boot_no_ucode_ptr: CFLAGS += $(LDS_UCODE)
+u_boot_no_ucode_ptr: u_boot_no_ucode_ptr.c
+
+u_boot_ucode_ptr: CFLAGS += $(LDS_UCODE)
+u_boot_ucode_ptr: u_boot_ucode_ptr.c
+
+bss_data: CFLAGS += bss_data.lds
+bss_data: bss_data.c
+
+clean:
+ rm -f $(TARGETS)
+
+help:
+ @echo "Makefile for binman test programs"
+ @echo
+ @echo "Intended for use on x86 hosts"
+ @echo
+ @echo "Targets:"
+ @echo
+ @echo -e "\thelp - Print help (this is it!)"
+ @echo -e "\tall - Builds test programs (default targget)"
+ @echo -e "\tclean - Delete output files"
diff --git a/tools/binman/test/bss_data b/tools/binman/test/bss_data
new file mode 100755
index 00000000000..afa28282aa1
--- /dev/null
+++ b/tools/binman/test/bss_data
Binary files differ
diff --git a/tools/binman/test/bss_data.c b/tools/binman/test/bss_data.c
new file mode 100644
index 00000000000..f865a9d9f67
--- /dev/null
+++ b/tools/binman/test/bss_data.c
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2016 Google, Inc
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ *
+ * Simple program to create a _dt_ucode_base_size symbol which can be read
+ * by 'nm'. This is used by binman tests.
+ */
+
+int bss_data[10];
+int __bss_size = sizeof(bss_data);
+
+int main()
+{
+ bss_data[2] = 2;
+
+ return 0;
+}
diff --git a/tools/binman/test/bss_data.lds b/tools/binman/test/bss_data.lds
new file mode 100644
index 00000000000..6b2fe09d351
--- /dev/null
+++ b/tools/binman/test/bss_data.lds
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2016 Google, Inc
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH(i386)
+ENTRY(_start)
+
+SECTIONS
+{
+ . = 0xfffffdf0;
+ _start = .;
+ __bss_size = 10;
+}
diff --git a/tools/binman/test/u_boot_no_ucode_ptr.c b/tools/binman/test/u_boot_no_ucode_ptr.c
index a17bb4c6c20..c4a2b85fc95 100644
--- a/tools/binman/test/u_boot_no_ucode_ptr.c
+++ b/tools/binman/test/u_boot_no_ucode_ptr.c
@@ -5,10 +5,6 @@
*
* Simple program to create a bad _dt_ucode_base_size symbol to create an
* error when it is used. This is used by binman tests.
- *
- * Build with:
- * cc -march=i386 -m32 -o u_boot_no_ucode_ptr -T u_boot_ucode_ptr.lds \
- -nostdlib u_boot_no_ucode_ptr.c
*/
static unsigned long not__dt_ucode_base_size[2]
diff --git a/tools/binman/test/u_boot_ucode_ptr.c b/tools/binman/test/u_boot_ucode_ptr.c
index 434c9f44003..24f349fb9e4 100644
--- a/tools/binman/test/u_boot_ucode_ptr.c
+++ b/tools/binman/test/u_boot_ucode_ptr.c
@@ -5,10 +5,6 @@
*
* Simple program to create a _dt_ucode_base_size symbol which can be read
* by 'nm'. This is used by binman tests.
- *
- * Build with:
- * cc -march=i386 -m32 -o u_boot_ucode_ptr -T u_boot_ucode_ptr.lds -nostdlib \
- u_boot_ucode_ptr.c
*/
static unsigned long _dt_ucode_base_size[2]
diff --git a/tools/buildman/buildman.py b/tools/buildman/buildman.py
index 607429df7bc..11a4f162c5f 100755
--- a/tools/buildman/buildman.py
+++ b/tools/buildman/buildman.py
@@ -30,7 +30,7 @@ import patchstream
import terminal
import toolchain
-def RunTests():
+def RunTests(skip_net_tests):
import func_test
import test
import doctest
@@ -41,6 +41,8 @@ def RunTests():
suite.run(result)
sys.argv = [sys.argv[0]]
+ if skip_net_tests:
+ test.use_network = False
for module in (test.TestBuild, func_test.TestFunctional):
suite = unittest.TestLoader().loadTestsFromTestCase(module)
suite.run(result)
@@ -56,7 +58,7 @@ options, args = cmdline.ParseArgs()
# Run our meagre tests
if options.test:
- RunTests()
+ RunTests(options.skip_net_tests)
# Build selected commits for selected boards
else:
diff --git a/tools/buildman/cmdline.py b/tools/buildman/cmdline.py
index 0060e0317c7..74247f0aff1 100644
--- a/tools/buildman/cmdline.py
+++ b/tools/buildman/cmdline.py
@@ -82,6 +82,8 @@ def ParseArgs():
default=False, help='Show a build summary')
parser.add_option('-S', '--show-sizes', action='store_true',
default=False, help='Show image size variation in summary')
+ parser.add_option('--skip-net-tests', action='store_true', default=False,
+ help='Skip tests which need the network')
parser.add_option('--step', type='int',
default=1, help='Only build every n commits (0=just first and last)')
parser.add_option('-t', '--test', action='store_true', dest='test',
diff --git a/tools/buildman/test.py b/tools/buildman/test.py
index 53ebc3756c9..e564a8a142f 100644
--- a/tools/buildman/test.py
+++ b/tools/buildman/test.py
@@ -24,6 +24,8 @@ import commit
import terminal
import toolchain
+use_network = True
+
settings_data = '''
# Buildman settings file
@@ -89,6 +91,7 @@ boards = [
['Active', 'arm', 'armv7', '', 'Tester', 'ARM Board 1', 'board0', ''],
['Active', 'arm', 'armv7', '', 'Tester', 'ARM Board 2', 'board1', ''],
['Active', 'powerpc', 'powerpc', '', 'Tester', 'PowerPC board 1', 'board2', ''],
+ ['Active', 'powerpc', 'mpc83xx', '', 'Tester', 'PowerPC board 2', 'board3', ''],
['Active', 'sandbox', 'sandbox', '', 'Tester', 'Sandbox board', 'board4', ''],
]
@@ -311,50 +314,60 @@ class TestBuild(unittest.TestCase):
def testBoardSingle(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['sandbox']),
- {'all': 1, 'sandbox': 1})
+ {'all': ['board4'], 'sandbox': ['board4']})
def testBoardArch(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['arm']),
- {'all': 2, 'arm': 2})
+ {'all': ['board0', 'board1'],
+ 'arm': ['board0', 'board1']})
def testBoardArchSingle(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['arm sandbox']),
- {'all': 3, 'arm': 2, 'sandbox' : 1})
+ {'sandbox': ['board4'],
+ 'all': ['board0', 'board1', 'board4'],
+ 'arm': ['board0', 'board1']})
+
def testBoardArchSingleMultiWord(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['arm', 'sandbox']),
- {'all': 3, 'arm': 2, 'sandbox' : 1})
+ {'sandbox': ['board4'], 'all': ['board0', 'board1', 'board4'], 'arm': ['board0', 'board1']})
def testBoardSingleAnd(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['Tester & arm']),
- {'all': 2, 'Tester&arm': 2})
+ {'Tester&arm': ['board0', 'board1'], 'all': ['board0', 'board1']})
def testBoardTwoAnd(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['Tester', '&', 'arm',
'Tester' '&', 'powerpc',
'sandbox']),
- {'all': 5, 'Tester&powerpc': 2, 'Tester&arm': 2,
- 'sandbox' : 1})
+ {'sandbox': ['board4'],
+ 'all': ['board0', 'board1', 'board2', 'board3',
+ 'board4'],
+ 'Tester&powerpc': ['board2', 'board3'],
+ 'Tester&arm': ['board0', 'board1']})
def testBoardAll(self):
"""Test single board selection"""
- self.assertEqual(self.boards.SelectBoards([]), {'all': 5})
+ self.assertEqual(self.boards.SelectBoards([]),
+ {'all': ['board0', 'board1', 'board2', 'board3',
+ 'board4']})
def testBoardRegularExpression(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['T.*r&^Po']),
- {'T.*r&^Po': 2, 'all': 2})
+ {'all': ['board2', 'board3'],
+ 'T.*r&^Po': ['board2', 'board3']})
def testBoardDuplicate(self):
"""Test single board selection"""
self.assertEqual(self.boards.SelectBoards(['sandbox sandbox',
'sandbox']),
- {'all': 1, 'sandbox': 1})
+ {'all': ['board4'], 'sandbox': ['board4']})
def CheckDirs(self, build, dirname):
self.assertEqual('base%s' % dirname, build._GetOutputDir(1))
self.assertEqual('base%s/fred' % dirname,
@@ -410,8 +423,9 @@ class TestBuild(unittest.TestCase):
def testToolchainDownload(self):
"""Test that we can download toolchains"""
- self.assertEqual('https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/x86_64-gcc-4.9.0-nolibc_arm-unknown-linux-gnueabi.tar.xz',
- self.toolchains.LocateArchUrl('arm'))
+ if use_network:
+ self.assertEqual('https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/x86_64-gcc-4.9.0-nolibc_arm-unknown-linux-gnueabi.tar.xz',
+ self.toolchains.LocateArchUrl('arm'))
if __name__ == "__main__":
diff --git a/tools/dtoc/fdt_util.py b/tools/dtoc/fdt_util.py
index 338d47a5e14..ba0b6cc3815 100644
--- a/tools/dtoc/fdt_util.py
+++ b/tools/dtoc/fdt_util.py
@@ -75,7 +75,8 @@ def EnsureCompiled(fname):
search_list = []
for path in search_paths:
search_list.extend(['-i', path])
- args = ['-I', 'dts', '-o', dtb_output, '-O', 'dtb']
+ args = ['-I', 'dts', '-o', dtb_output, '-O', 'dtb',
+ '-W', 'no-unit_address_vs_reg']
args.extend(search_list)
args.append(dts_input)
command.Run('dtc', *args)
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index cc009b2a256..41ed80e6dad 100644
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -26,6 +26,27 @@ import tools
our_path = os.path.dirname(os.path.realpath(__file__))
+HEADER = '''/*
+ * DO NOT MODIFY
+ *
+ * This file was generated by dtoc from a .dtb (device tree binary) file.
+ */
+
+#include <stdbool.h>
+#include <libfdt.h>'''
+
+C_HEADER = '''/*
+ * DO NOT MODIFY
+ *
+ * This file was generated by dtoc from a .dtb (device tree binary) file.
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dt-structs.h>
+'''
+
+
def get_dtb_file(dts_fname):
"""Compile a .dts file to a .dtb
@@ -104,13 +125,12 @@ class TestDtoc(unittest.TestCase):
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
lines = infile.read().splitlines()
- self.assertEqual(['#include <stdbool.h>', '#include <libfdt.h>'], lines)
+ self.assertEqual(HEADER.splitlines(), lines)
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
lines = infile.read().splitlines()
- self.assertEqual(['#include <common.h>', '#include <dm.h>',
- '#include <dt-structs.h>', ''], lines)
+ self.assertEqual(C_HEADER.splitlines() + [''], lines)
def test_simple(self):
"""Test output from some simple nodes with various types of data"""
@@ -119,8 +139,7 @@ class TestDtoc(unittest.TestCase):
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <stdbool.h>
-#include <libfdt.h>
+ self.assertEqual(HEADER + '''
struct dtd_sandbox_i2c_test {
};
struct dtd_sandbox_pmic_test {
@@ -144,10 +163,7 @@ struct dtd_sandbox_spl_test_2 {
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <common.h>
-#include <dm.h>
-#include <dt-structs.h>
-
+ self.assertEqual(C_HEADER + '''
static struct dtd_sandbox_spl_test dtv_spl_test = {
\t.bytearray\t\t= {0x6, 0x0, 0x0},
\t.byteval\t\t= 0x5,
@@ -225,8 +241,7 @@ U_BOOT_DEVICE(pmic_at_9) = {
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <stdbool.h>
-#include <libfdt.h>
+ self.assertEqual(HEADER + '''
struct dtd_source {
\tstruct phandle_2_arg clocks[4];
};
@@ -238,10 +253,7 @@ struct dtd_target {
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <common.h>
-#include <dm.h>
-#include <dt-structs.h>
-
+ self.assertEqual(C_HEADER + '''
static struct dtd_target dtv_phandle_target = {
\t.intval\t\t\t= 0x0,
};
@@ -291,8 +303,7 @@ U_BOOT_DEVICE(phandle_source) = {
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <stdbool.h>
-#include <libfdt.h>
+ self.assertEqual(HEADER + '''
struct dtd_compat1 {
\tfdt32_t\t\tintval;
};
@@ -303,10 +314,7 @@ struct dtd_compat1 {
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <common.h>
-#include <dm.h>
-#include <dt-structs.h>
-
+ self.assertEqual(C_HEADER + '''
static struct dtd_compat1 dtv_spl_test = {
\t.intval\t\t\t= 0x1,
};
@@ -325,8 +333,7 @@ U_BOOT_DEVICE(spl_test) = {
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <stdbool.h>
-#include <libfdt.h>
+ self.assertEqual(HEADER + '''
struct dtd_test1 {
\tfdt64_t\t\treg[2];
};
@@ -341,10 +348,7 @@ struct dtd_test3 {
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <common.h>
-#include <dm.h>
-#include <dt-structs.h>
-
+ self.assertEqual(C_HEADER + '''
static struct dtd_test1 dtv_test1 = {
\t.reg\t\t\t= {0x1234, 0x5678},
};
@@ -381,8 +385,7 @@ U_BOOT_DEVICE(test3) = {
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <stdbool.h>
-#include <libfdt.h>
+ self.assertEqual(HEADER + '''
struct dtd_test1 {
\tfdt32_t\t\treg[2];
};
@@ -394,10 +397,7 @@ struct dtd_test2 {
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <common.h>
-#include <dm.h>
-#include <dt-structs.h>
-
+ self.assertEqual(C_HEADER + '''
static struct dtd_test1 dtv_test1 = {
\t.reg\t\t\t= {0x1234, 0x5678},
};
@@ -425,8 +425,7 @@ U_BOOT_DEVICE(test2) = {
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <stdbool.h>
-#include <libfdt.h>
+ self.assertEqual(HEADER + '''
struct dtd_test1 {
\tfdt64_t\t\treg[2];
};
@@ -441,10 +440,7 @@ struct dtd_test3 {
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <common.h>
-#include <dm.h>
-#include <dt-structs.h>
-
+ self.assertEqual(C_HEADER + '''
static struct dtd_test1 dtv_test1 = {
\t.reg\t\t\t= {0x123400000000, 0x5678},
};
@@ -481,8 +477,7 @@ U_BOOT_DEVICE(test3) = {
dtb_platdata.run_steps(['struct'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <stdbool.h>
-#include <libfdt.h>
+ self.assertEqual(HEADER + '''
struct dtd_test1 {
\tfdt64_t\t\treg[2];
};
@@ -497,10 +492,7 @@ struct dtd_test3 {
dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
with open(output) as infile:
data = infile.read()
- self.assertEqual('''#include <common.h>
-#include <dm.h>
-#include <dt-structs.h>
-
+ self.assertEqual(C_HEADER + '''
static struct dtd_test1 dtv_test1 = {
\t.reg\t\t\t= {0x1234, 0x567800000000},
};
diff --git a/tools/env/Makefile b/tools/env/Makefile
index 95b28c0b3a3..95a03c98e75 100644
--- a/tools/env/Makefile
+++ b/tools/env/Makefile
@@ -25,7 +25,7 @@ hostprogs-y := fw_printenv
lib-y += fw_env.o \
crc32.o ctype.o linux_string.o \
- env_attr.o env_flags.o aes.o
+ env_attr.o env_flags.o
fw_printenv-objs := fw_env_main.o $(lib-y)
diff --git a/tools/env/aes.c b/tools/env/aes.c
deleted file mode 100644
index 9e42679e343..00000000000
--- a/tools/env/aes.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../lib/aes.c"
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index ab06415898c..963a6152a50 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -111,8 +111,6 @@ static struct environment environment = {
.flag_scheme = FLAG_NONE,
};
-static int env_aes_cbc_crypt(char *data, const int enc, uint8_t *key);
-
static int HaveRedundEnv = 0;
static unsigned char active_flag = 1;
@@ -217,34 +215,6 @@ char *fw_getdefenv(char *name)
return NULL;
}
-int parse_aes_key(char *key, uint8_t *bin_key)
-{
- char tmp[5] = { '0', 'x', 0, 0, 0 };
- unsigned long ul;
- int i;
-
- if (strnlen(key, 64) != 32) {
- fprintf(stderr,
- "## Error: '-a' option requires 16-byte AES key\n");
- return -1;
- }
-
- for (i = 0; i < 16; i++) {
- tmp[2] = key[0];
- tmp[3] = key[1];
- errno = 0;
- ul = strtoul(tmp, NULL, 16);
- if (errno) {
- fprintf(stderr,
- "## Error: '-a' option requires valid AES key\n");
- return -1;
- }
- bin_key[i] = ul & 0xff;
- key += 2;
- }
- return 0;
-}
-
/*
* Print the current definition of one, or more, or all
* environment variables
@@ -313,16 +283,6 @@ int fw_env_flush(struct env_opts *opts)
if (!opts)
opts = &default_opts;
- if (opts->aes_flag) {
- ret = env_aes_cbc_crypt(environment.data, 1,
- opts->aes_key);
- if (ret) {
- fprintf(stderr,
- "Error: can't encrypt env for flash\n");
- return ret;
- }
- }
-
/*
* Update CRC
*/
@@ -976,28 +936,6 @@ static int flash_flag_obsolete (int dev, int fd, off_t offset)
return rc;
}
-/* Encrypt or decrypt the environment before writing or reading it. */
-static int env_aes_cbc_crypt(char *payload, const int enc, uint8_t *key)
-{
- uint8_t *data = (uint8_t *)payload;
- const int len = usable_envsize;
- uint8_t key_exp[AES_EXPAND_KEY_LENGTH];
- uint32_t aes_blocks;
-
- /* First we expand the key. */
- aes_expand_key(key, key_exp);
-
- /* Calculate the number of AES blocks to encrypt. */
- aes_blocks = DIV_ROUND_UP(len, AES_KEY_LENGTH);
-
- if (enc)
- aes_cbc_encrypt_blocks(key_exp, data, data, aes_blocks);
- else
- aes_cbc_decrypt_blocks(key_exp, data, data, aes_blocks);
-
- return 0;
-}
-
static int flash_write (int fd_current, int fd_target, int dev_target)
{
int rc;
@@ -1182,13 +1120,6 @@ int fw_env_open(struct env_opts *opts)
crc0 = crc32 (0, (uint8_t *) environment.data, ENV_SIZE);
- if (opts->aes_flag) {
- ret = env_aes_cbc_crypt(environment.data, 0,
- opts->aes_key);
- if (ret)
- goto open_cleanup;
- }
-
crc0_ok = (crc0 == *environment.crc);
if (!HaveRedundEnv) {
if (!crc0_ok) {
@@ -1244,13 +1175,6 @@ int fw_env_open(struct env_opts *opts)
crc1 = crc32 (0, (uint8_t *) redundant->data, ENV_SIZE);
- if (opts->aes_flag) {
- ret = env_aes_cbc_crypt(redundant->data, 0,
- opts->aes_key);
- if (ret)
- goto open_cleanup;
- }
-
crc1_ok = (crc1 == redundant->crc);
flag1 = redundant->flags;
@@ -1498,9 +1422,6 @@ static int parse_config(struct env_opts *opts)
if (HaveRedundEnv)
usable_envsize -= sizeof(char);
- if (opts->aes_flag)
- usable_envsize &= ~(AES_KEY_LENGTH - 1);
-
return 0;
}
diff --git a/tools/env/fw_env.h b/tools/env/fw_env.h
index 2d37eb50530..b86ca78ba27 100644
--- a/tools/env/fw_env.h
+++ b/tools/env/fw_env.h
@@ -6,7 +6,6 @@
*/
#include <stdint.h>
-#include <uboot_aes.h>
/*
* Programs using the library must check which API is available,
@@ -19,13 +18,9 @@ struct env_opts {
#ifdef CONFIG_FILE
char *config_file;
#endif
- int aes_flag; /* Is AES encryption used? */
- uint8_t aes_key[AES_KEY_LENGTH];
char *lockname;
};
-int parse_aes_key(char *key, uint8_t *bin_key);
-
/**
* fw_printenv() - print one or several environment variables
*
diff --git a/tools/env/fw_env_main.c b/tools/env/fw_env_main.c
index 0b9063742ce..6fdf41c8760 100644
--- a/tools/env/fw_env_main.c
+++ b/tools/env/fw_env_main.c
@@ -43,7 +43,6 @@
static int do_printenv;
static struct option long_options[] = {
- {"aes", required_argument, NULL, 'a'},
{"config", required_argument, NULL, 'c'},
{"help", no_argument, NULL, 'h'},
{"script", required_argument, NULL, 's'},
@@ -70,9 +69,6 @@ void usage_printenv(void)
"\n"
" -h, --help print this help.\n"
" -v, --version display version\n"
-#ifdef CONFIG_ENV_AES
- " -a, --aes aes key to access environment\n"
-#endif
#ifdef CONFIG_FILE
" -c, --config configuration file, default:" CONFIG_FILE "\n"
#endif
@@ -89,9 +85,6 @@ void usage_env_set(void)
"\n"
" -h, --help print this help.\n"
" -v, --version display version\n"
-#ifdef CONFIG_ENV_AES
- " -a, --aes aes key to access environment\n"
-#endif
#ifdef CONFIG_FILE
" -c, --config configuration file, default:" CONFIG_FILE "\n"
#endif
@@ -130,13 +123,6 @@ static void parse_common_args(int argc, char *argv[])
while ((c = getopt_long(argc, argv, ":a:c:l:h:v", long_options, NULL)) !=
EOF) {
switch (c) {
- case 'a':
- if (parse_aes_key(optarg, env_opts.aes_key)) {
- fprintf(stderr, "AES key parse error\n");
- exit(EXIT_FAILURE);
- }
- env_opts.aes_flag = 1;
- break;
#ifdef CONFIG_FILE
case 'c':
env_opts.config_file = optarg;
diff --git a/tools/libfdt/fdt.c b/tools/libfdt/fdt.c
new file mode 100644
index 00000000000..8ba80919211
--- /dev/null
+++ b/tools/libfdt/fdt.c
@@ -0,0 +1,2 @@
+#include "fdt_host.h"
+#include "../scripts/dtc/libfdt/fdt.c"
diff --git a/tools/libfdt/fdt_addresses.c b/tools/libfdt/fdt_addresses.c
new file mode 100644
index 00000000000..242a2c083ba
--- /dev/null
+++ b/tools/libfdt/fdt_addresses.c
@@ -0,0 +1,2 @@
+#include "fdt_host.h"
+#include "../scripts/dtc/libfdt/fdt_addresses.c"
diff --git a/tools/libfdt/fdt_empty_tree.c b/tools/libfdt/fdt_empty_tree.c
new file mode 100644
index 00000000000..9ccbb1f94ea
--- /dev/null
+++ b/tools/libfdt/fdt_empty_tree.c
@@ -0,0 +1,2 @@
+#include "fdt_host.h"
+#include "../scripts/dtc/libfdt/fdt_empty_tree.c"
diff --git a/tools/libfdt/fdt_overlay.c b/tools/libfdt/fdt_overlay.c
new file mode 100644
index 00000000000..801ec374b15
--- /dev/null
+++ b/tools/libfdt/fdt_overlay.c
@@ -0,0 +1,2 @@
+#include "fdt_host.h"
+#include "../scripts/dtc/libfdt/fdt_overlay.c"
diff --git a/tools/libfdt/fdt_strerror.c b/tools/libfdt/fdt_strerror.c
new file mode 100644
index 00000000000..d7ed70bea47
--- /dev/null
+++ b/tools/libfdt/fdt_strerror.c
@@ -0,0 +1,2 @@
+#include "fdt_host.h"
+#include "../scripts/dtc/libfdt/fdt_strerror.c"
diff --git a/tools/libfdt/fdt_sw.c b/tools/libfdt/fdt_sw.c
new file mode 100644
index 00000000000..ed6b3275730
--- /dev/null
+++ b/tools/libfdt/fdt_sw.c
@@ -0,0 +1,2 @@
+#include "fdt_host.h"
+#include "../scripts/dtc/libfdt/fdt_sw.c"
diff --git a/tools/patman/test.py b/tools/patman/test.py
index 20dc9c1e0df..51145e83905 100644
--- a/tools/patman/test.py
+++ b/tools/patman/test.py
@@ -88,8 +88,7 @@ Signed-off-by: Simon Glass <sjg@chromium.org>
os.remove(expname)
def GetData(self, data_type):
- data='''
-From 4924887af52713cabea78420eff03badea8f0035 Mon Sep 17 00:00:00 2001
+ data='''From 4924887af52713cabea78420eff03badea8f0035 Mon Sep 17 00:00:00 2001
From: Simon Glass <sjg@chromium.org>
Date: Thu, 7 Apr 2011 10:14:41 -0700
Subject: [PATCH 1/4] Add microsecond boot time measurement
@@ -101,6 +100,7 @@ an available microsecond counter.
%s
---
README | 11 ++++++++
+ MAINTAINERS | 3 ++
common/bootstage.c | 50 ++++++++++++++++++++++++++++++++++++
include/bootstage.h | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++
include/common.h | 8 ++++++
@@ -130,19 +130,31 @@ index 6f3748d..f9e4e65 100644
- Standalone program support:
CONFIG_STANDALONE_LOAD_ADDR
+diff --git a/MAINTAINERS b/MAINTAINERS
+index b167b028ec..beb7dc634f 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -474,3 +474,8 @@ S: Maintained
+ T: git git://git.denx.de/u-boot.git
+ F: *
+ F: */
++
++BOOTSTAGE
++M: Simon Glass <sjg@chromium.org>
++L: u-boot@lists.denx.de
++F: common/bootstage.c
diff --git a/common/bootstage.c b/common/bootstage.c
new file mode 100644
index 0000000..2234c87
--- /dev/null
+++ b/common/bootstage.c
-@@ -0,0 +1,39 @@
+@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2011, Google Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
-+
+/*
+ * This module records the progress of boot and arbitrary commands, and
+ * permits accurate timestamping of each. The records can optionally be
@@ -151,26 +163,25 @@ index 0000000..2234c87
+
+#include <common.h>
+
-+
+struct bootstage_record {
-+ uint32_t time_us;
++ u32 time_us;
+ const char *name;
+};
+
+static struct bootstage_record record[BOOTSTAGE_COUNT];
+
-+uint32_t bootstage_mark(enum bootstage_id id, const char *name)
++u32 bootstage_mark(enum bootstage_id id, const char *name)
+{
+ struct bootstage_record *rec = &record[id];
+
+ /* Only record the first event for each */
+%sif (!rec->name) {
-+ rec->time_us = (uint32_t)timer_get_us();
++ rec->time_us = (u32)timer_get_us();
+ rec->name = name;
+ }
+ if (!rec->name &&
+ %ssomething_else) {
-+ rec->time_us = (uint32_t)timer_get_us();
++ rec->time_us = (u32)timer_get_us();
+ rec->name = name;
+ }
+%sreturn rec->time_us;
@@ -210,7 +221,7 @@ index 0000000..2234c87
self.assertEqual(result.errors, 0)
self.assertEqual(result.warnings, 0)
self.assertEqual(result.checks, 0)
- self.assertEqual(result.lines, 56)
+ self.assertEqual(result.lines, 62)
os.remove(inf)
def testNoSignoff(self):
@@ -221,18 +232,18 @@ index 0000000..2234c87
self.assertEqual(result.errors, 1)
self.assertEqual(result.warnings, 0)
self.assertEqual(result.checks, 0)
- self.assertEqual(result.lines, 56)
+ self.assertEqual(result.lines, 62)
os.remove(inf)
def testSpaces(self):
inf = self.SetupData('spaces')
result = checkpatch.CheckPatch(inf)
self.assertEqual(result.ok, False)
- self.assertEqual(len(result.problems), 2)
+ self.assertEqual(len(result.problems), 3)
self.assertEqual(result.errors, 0)
- self.assertEqual(result.warnings, 2)
+ self.assertEqual(result.warnings, 3)
self.assertEqual(result.checks, 0)
- self.assertEqual(result.lines, 56)
+ self.assertEqual(result.lines, 62)
os.remove(inf)
def testIndent(self):
@@ -243,7 +254,7 @@ index 0000000..2234c87
self.assertEqual(result.errors, 0)
self.assertEqual(result.warnings, 0)
self.assertEqual(result.checks, 1)
- self.assertEqual(result.lines, 56)
+ self.assertEqual(result.lines, 62)
os.remove(inf)
diff --git a/tools/rkcommon.c b/tools/rkcommon.c
index 1a24e165894..aed2b95fd62 100644
--- a/tools/rkcommon.c
+++ b/tools/rkcommon.c
@@ -58,9 +58,6 @@ struct header1_info {
* @spl_hdr: Boot ROM requires a 4-bytes spl header
* @spl_size: Spl size(include extra 4-bytes spl header)
* @spl_rc4: RC4 encode the SPL binary (same key as header)
- * @spl_boot0: A new-style (ARM_SOC_BOOT0_HOOK) image that should
- * have the boot magic (e.g. 'RK33') written to its first
- * word.
*/
struct spl_info {
@@ -68,19 +65,18 @@ struct spl_info {
const char *spl_hdr;
const uint32_t spl_size;
const bool spl_rc4;
- const bool spl_boot0;
};
static struct spl_info spl_infos[] = {
- { "rk3036", "RK30", 0x1000, false, false },
- { "rk3128", "RK31", 0x1800, false, false },
- { "rk3188", "RK31", 0x8000 - 0x800, true, false },
- { "rk322x", "RK32", 0x8000 - 0x1000, false, false },
- { "rk3288", "RK32", 0x8000, false, false },
- { "rk3328", "RK32", 0x8000 - 0x1000, false, false },
- { "rk3368", "RK33", 0x8000 - 0x1000, false, true },
- { "rk3399", "RK33", 0x30000 - 0x2000, false, true },
- { "rv1108", "RK11", 0x1800, false, false},
+ { "rk3036", "RK30", 0x1000, false },
+ { "rk3128", "RK31", 0x1800, false },
+ { "rk3188", "RK31", 0x8000 - 0x800, true },
+ { "rk322x", "RK32", 0x8000 - 0x1000, false },
+ { "rk3288", "RK32", 0x8000, false },
+ { "rk3328", "RK32", 0x8000 - 0x1000, false },
+ { "rk3368", "RK33", 0x8000 - 0x1000, false },
+ { "rk3399", "RK33", 0x30000 - 0x2000, false },
+ { "rv1108", "RK11", 0x1800, false },
};
static unsigned char rc4_key[16] = {
@@ -158,16 +154,6 @@ bool rkcommon_need_rc4_spl(struct image_tool_params *params)
return info->spl_rc4;
}
-bool rkcommon_spl_is_boot0(struct image_tool_params *params)
-{
- struct spl_info *info = rkcommon_get_spl_info(params->imagename);
-
- /*
- * info would not be NULL, because of we checked params before.
- */
- return info->spl_boot0;
-}
-
static void rkcommon_set_header0(void *buf, uint file_size,
struct image_tool_params *params)
{
@@ -366,15 +352,12 @@ int rkcommon_vrec_header(struct image_tool_params *params,
* have the first 4 bytes reserved for the spl_name). Reserving
* these 4 bytes is done using the BOOT0_HOOK infrastructure.
*
- * Depending on this, the header is either 0x800 (if this is a
- * 'boot0'-style payload, which has reserved 4 bytes at the
- * beginning for the 'spl_name' and expects us to overwrite
- * its first 4 bytes) or 0x804 bytes in length.
+ * The header is always at 0x800 (as we now use a payload
+ * prepadded using the boot0 hook for all targets): the first
+ * 4 bytes of these images can safely be overwritten using the
+ * boot magic.
*/
- if (rkcommon_spl_is_boot0(params))
- tparams->header_size = RK_SPL_HDR_START;
- else
- tparams->header_size = RK_SPL_HDR_START + 4;
+ tparams->header_size = RK_SPL_HDR_START;
/* Allocate, clear and install the header */
tparams->hdr = malloc(tparams->header_size);