summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHu, Hebo <hebo.hu@intel.com>2019-03-29 15:10:31 +0800
committerchrome-bot <chrome-bot@chromium.org>2019-04-08 02:51:30 -0700
commitb6354559eac579681232adc63449a5aed2d25950 (patch)
treee273bb8ce5f0765efb15ee1c342b6f1e309406e9
parent6beb629714ce05108399cefc621b098fc58f03ce (diff)
downloadchrome-ec-b6354559eac579681232adc63449a5aed2d25950.tar.gz
ish/ish5: packing aontask binary and ecos main FW binary to final ec.bin
1: fixed module size not round up with page issue 2: fixed wrong kernel binary file issue, ISH only support RW image at current 3: add aontask binary into ec.bin BUG=b:122364080, b:120682121 BRANCH=none TEST=tested on arcada Change-Id: I786169c32b0e2c50cbe6ad7bf476ae9c56ea1d09 Signed-off-by: Hu, Hebo <hebo.hu@intel.com> Reviewed-on: https://chromium-review.googlesource.com/1545073 Commit-Ready: Hebo Hu <hebo.hu@intel.corp-partner.google.com> Tested-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Yuval Peress <peress@chromium.org> Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Hebo Hu <hebo.hu@intel.corp-partner.google.com>
-rw-r--r--chip/ish/build.mk27
-rwxr-xr-xchip/ish/util/pack_ec.py70
2 files changed, 82 insertions, 15 deletions
diff --git a/chip/ish/build.mk b/chip/ish/build.mk
index 4e7fdaa26a..b1481dfaf6 100644
--- a/chip/ish/build.mk
+++ b/chip/ish/build.mk
@@ -28,20 +28,39 @@ chip-$(CONFIG_DMA_PAGING)+=dma.o
chip-$(CONFIG_LOW_POWER_IDLE)+=power_mgt.o
ifeq ($(CONFIG_ISH_PM_AONTASK),y)
+
ish-aontask-fw=chip/ish/aontaskfw/ish_aontask
ish-aontask-dma=chip/ish/dma
ish-aontask-fw-bin=$(out)/$(ish-aontask-fw).bin
PROJECT_EXTRA+=$(ish-aontask-fw-bin)
+
+_aon_size_str=$(shell stat -L -c %s $(ish-aontask-fw-bin))
+_aon_size=$(shell echo "$$(($(_aon_size_str)))")
+
+$(out)/$(PROJECT).bin: $(ish-aontask-fw-bin) $(out)/RW/$(PROJECT).RW.flat
+
endif
+_kernel_size_str=$(shell stat -L -c %s $(out)/RW/$(PROJECT).RW.flat)
+_kernel_size=$(shell echo "$$(($(_kernel_size_str)))")
+
# location of the scripts and keys used to pack the SPI flash image
SCRIPTDIR:=./chip/${CHIP}/util
# Allow SPI size to be overridden by board specific size, default to 256KB.
CHIP_SPI_SIZE_KB?=256
-# Commands to convert $^ to $@.tmp - This will add the manifest header needed
+# Commands to convert ec.RW.flat to $@.tmp - This will add the manifest header needed
# to load the FW onto the ISH HW.
-cmd_obj_to_bin = $(OBJCOPY) --gap-fill=0xff -O binary $< $@.tmp1 ; \
- ${SCRIPTDIR}/pack_ec.py -o $@.tmp -i $@.tmp1 \
- --image_size $(_rw_size); rm -f $@.tmp1
+
+ifeq ($(CONFIG_ISH_PM_AONTASK),y)
+cmd_obj_to_bin = ${SCRIPTDIR}/pack_ec.py -o $@.tmp \
+ -k $(out)/RW/$(PROJECT).RW.flat \
+ --kernel-size $(_kernel_size) \
+ -a $(ish-aontask-fw-bin) \
+ --aon-size $(_aon_size);
+else
+cmd_obj_to_bin = ${SCRIPTDIR}/pack_ec.py -o $@.tmp \
+ -k $(out)/RW/$(PROJECT).RW.flat \
+ --kernel-size $(_kernel_size);
+endif
diff --git a/chip/ish/util/pack_ec.py b/chip/ish/util/pack_ec.py
index 7cb659d86b..71a63dd42f 100755
--- a/chip/ish/util/pack_ec.py
+++ b/chip/ish/util/pack_ec.py
@@ -1,4 +1,5 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-"
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
@@ -9,6 +10,14 @@
# https://chrome-internal.googlesource.com/chromeos/intel-ish/+/refs/heads/upstream/master/modules/api/ish_api/include/loader_common.h#211,
# and b/124788278#comment10
+"""Script to pack EC binary with manifest header.
+
+Package ecos main FW binary (kernel) and AON task binary into final EC binary
+image with a manifest header, ISH shim loader will parse this header and load
+each binaries into right memory location.
+"""
+
+from __future__ import print_function
import argparse
import struct
@@ -18,12 +27,22 @@ PAGE_SIZE = 0x1000
def parseargs():
parser = argparse.ArgumentParser()
- parser.add_argument("-i", "--input",
- help="EC binary to pack, usually ec.bin or ec.RO.flat.")
+ parser.add_argument("-k", "--kernel",
+ help="EC kernel binary to pack, \
+ usually ec.RW.bin or ec.RW.flat.",
+ required=True)
+ parser.add_argument("--kernel-size", type=int,
+ help="Size of EC kernel image",
+ required=True)
+ parser.add_argument("-a", "--aon",
+ help="EC aontask binary to pack, \
+ usually ish_aontask.bin.",
+ required=False)
+ parser.add_argument("--aon-size", type=int,
+ help="Size of EC aontask image",
+ required=False)
parser.add_argument("-o", "--output",
help="Output flash binary file")
- parser.add_argument("--image_size", type=int,
- help="Size of a single image")
return parser.parse_args()
@@ -38,24 +57,53 @@ def gen_manifest(ext_id, comp_app_name, code_offset, module_size):
# 4 bytes of code offset (little endian)
struct.pack_into('<I', m, 96, code_offset)
# 2 bytes of module in page size increments (little endian)
- struct.pack_into('<H', m, 100, module_size / PAGE_SIZE)
+ struct.pack_into('<H', m, 100, module_size)
return m
+def roundup_page(size):
+ """Returns roundup-ed page size from size of bytes"""
+ return int(size / PAGE_SIZE) + (size % PAGE_SIZE > 0)
+
def main():
args = parseargs()
+ print(" Packing EC image file for ISH")
with open(args.output, 'wb') as f:
+ print(" kernel binary size: %i" % args.kernel_size)
+ kern_rdup_pg_size = roundup_page(args.kernel_size)
# Add manifest for main ISH binary
- f.write(gen_manifest('ISHM', 'ISH_KERN', HEADER_SIZE, args.image_size))
+ f.write(gen_manifest('ISHM', 'ISH_KERN', HEADER_SIZE, kern_rdup_pg_size))
+
+ if args.aon is not None:
+ print(" AON binary size: %i" % args.aon_size)
+ aon_rdup_pg_size = roundup_page(args.aon_size)
+ # Add manifest for aontask binary
+ f.write(gen_manifest('ISHM', 'AON_TASK',
+ (HEADER_SIZE + kern_rdup_pg_size * PAGE_SIZE -
+ MANIFEST_ENTRY_SIZE), aon_rdup_pg_size))
+
# Add manifest that signals end of manifests
f.write(gen_manifest('ISHE', '', 0, 0))
+
# Pad the remaining HEADER with 0s
- f.write('\x00' * (HEADER_SIZE - (MANIFEST_ENTRY_SIZE * 2)))
+ if args.aon is not None:
+ f.write('\x00' * (HEADER_SIZE - (MANIFEST_ENTRY_SIZE * 3)))
+ else:
+ f.write('\x00' * (HEADER_SIZE - (MANIFEST_ENTRY_SIZE * 2)))
- # Append original image
- with open(args.input, 'rb') as in_file:
+ # Append original kernel image
+ with open(args.kernel, 'rb') as in_file:
f.write(in_file.read())
+ # Filling padings due to size round up as pages
+ f.write('\x00' * (kern_rdup_pg_size * PAGE_SIZE - args.kernel_size))
+
+ if args.aon is not None:
+ # Append original aon image
+ with open(args.aon, 'rb') as in_file:
+ f.write(in_file.read())
+ # Filling padings due to size round up as pages
+ f.write('\x00' * (aon_rdup_pg_size * PAGE_SIZE - args.aon_size))
if __name__ == '__main__':
- main() \ No newline at end of file
+ main()