[coreboot-gerrit] Patch set updated for coreboot: c5c6374 A tool for IPQ8064 encapsulation

Marc Jones (marc.jones@se-eng.com) gerrit at coreboot.org
Tue Oct 28 17:50:43 CET 2014


Marc Jones (marc.jones at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6976

-gerrit

commit c5c63749ad29b80f410c22c75104e5c7756a0829
Author: Vadim Bendebury <vbendeb at chromium.org>
Date:   Mon Apr 7 13:36:48 2014 -0700

    A tool for IPQ8064 encapsulation
    
    This is a copy of the tool provided by the vendor. It adds a
    header which tells the early stage loader where to load the next phase
    blob for execution. It is going to be used to encapsulate the
    bootblock.
    
    Usage of this tool is as follows:
    
      ipqheader.py <base-addr> <input-file> <output-file>
    
    Old-Change-Id: I448c006719f4f3dd5a6716ff2e47f7fc275c805e
    Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/193494
    Reviewed-by: Furquan Shaikh <furquan at chromium.org>
    Reviewed-by: Stefan Reinauer <reinauer at chromium.org>
    (cherry picked from commit 201630f8637eb627f0894ecd7bceb31017244ad4)
    
    Make ipqheader.py executable
    
    Modify the utility to become a Linux executable. While at it, fix the
    program name reported by error messages.
    
    Old-Change-Id: I25061d43fdea72655a696deb9e494e9c7382f670
    Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/193495
    Reviewed-by: Furquan Shaikh <furquan at chromium.org>
    Reviewed-by: Stefan Reinauer <reinauer at chromium.org>
    (cherry picked from commit bbbf69c754aa3b6a1bf17ab3ced1c739c3ee0688)
    
    ipq8064: SBL headers must have 4 byte aligned blob sizes
    
    It turns out that for SBL3 to load the next phase, the sizes in the
    MBN header must be 4 byres aligned. This change makes sure that this
    requirement is enforced.
    
    Old-Change-Id: Ia64f04bb281ae772b060d2f7713c98dd348972ba
    Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/196167
    (cherry picked from commit fa6a52a07cb87ecf2538a6b0d47605d79104e4cc)
    
    Add proper license to the ipqheader tool
    
    This patch adds a vanilla BSD 3-Clause license.
    
    Original-Change-Id: I9da7176e670b598808ef5be2461b6105a4c5f6c5
    Original-Signed-off-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/225783
    Original-Reviewed-by: Trevor Bourget <tbourget at codeaurora.org>
    Original-Tested-by: Trevor Bourget <tbourget at codeaurora.org>
    Original-Reviewed-by: David Hendricks <dhendrix at chromium.org>
    (cherry picked from commit a0c47a8d74f1ac131c91e978b6d68bbcfaa52c37)
    
    Squashed 4 commits for the ipqheader util.
    
    Change-Id: I144c01947a89e1348a06aa82590e972e2ec31247
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
---
 util/ipqheader/ipqheader.py | 130 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 130 insertions(+)

diff --git a/util/ipqheader/ipqheader.py b/util/ipqheader/ipqheader.py
new file mode 100755
index 0000000..eb1a316
--- /dev/null
+++ b/util/ipqheader/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()
+



More information about the coreboot-gerrit mailing list