1*0d6140beSAndroid Build Coastguard Worker#!/bin/sh 2*0d6140beSAndroid Build Coastguard Worker# 3*0d6140beSAndroid Build Coastguard Worker# Copyright (C) 2010 Google Inc. 4*0d6140beSAndroid Build Coastguard Worker# Written by David Hendricks for Google Inc. 5*0d6140beSAndroid Build Coastguard Worker# 6*0d6140beSAndroid Build Coastguard Worker# This program is free software; you can redistribute it and/or modify 7*0d6140beSAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by 8*0d6140beSAndroid Build Coastguard Worker# the Free Software Foundation; either version 2 of the License, or 9*0d6140beSAndroid Build Coastguard Worker# (at your option) any later version. 10*0d6140beSAndroid Build Coastguard Worker# 11*0d6140beSAndroid Build Coastguard Worker# This program is distributed in the hope that it will be useful, 12*0d6140beSAndroid Build Coastguard Worker# but WITHOUT ANY WARRANTY; without even the implied warranty of 13*0d6140beSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*0d6140beSAndroid Build Coastguard Worker# GNU General Public License for more details. 15*0d6140beSAndroid Build Coastguard Worker# 16*0d6140beSAndroid Build Coastguard Worker# This script attempts to test Flashrom partial write capability by writing 17*0d6140beSAndroid Build Coastguard Worker# patterns of 0xff and 0x00 bytes to the lowest 128kB of flash. 128kB is chosen 18*0d6140beSAndroid Build Coastguard Worker# since 64kB is usually the largest possible block size, so we will try to 19*0d6140beSAndroid Build Coastguard Worker# cover at least two blocks with this test. 20*0d6140beSAndroid Build Coastguard Worker 21*0d6140beSAndroid Build Coastguard WorkerEXIT_SUCCESS=0 22*0d6140beSAndroid Build Coastguard WorkerEXIT_FAILURE=1 23*0d6140beSAndroid Build Coastguard Worker 24*0d6140beSAndroid Build Coastguard Worker# The copy of flashrom to test. If unset, we'll assume the user wants to test 25*0d6140beSAndroid Build Coastguard Worker# a newly built flashrom binary in the parent directory (this script should 26*0d6140beSAndroid Build Coastguard Worker# reside in flashrom/util). 27*0d6140beSAndroid Build Coastguard Workerif [ -z "$FLASHROM" ] ; then 28*0d6140beSAndroid Build Coastguard Worker FLASHROM="../flashrom" 29*0d6140beSAndroid Build Coastguard Workerfi 30*0d6140beSAndroid Build Coastguard Workerecho "testing flashrom binary: ${FLASHROM}" 31*0d6140beSAndroid Build Coastguard Worker 32*0d6140beSAndroid Build Coastguard WorkerOLDDIR=$(pwd) 33*0d6140beSAndroid Build Coastguard Worker 34*0d6140beSAndroid Build Coastguard Worker# test data location 35*0d6140beSAndroid Build Coastguard WorkerTMPDIR=$(mktemp -d -t flashrom_test.XXXXXXXXXX) 36*0d6140beSAndroid Build Coastguard Workerif [ "$?" != "0" ] ; then 37*0d6140beSAndroid Build Coastguard Worker echo "Could not create temporary directory" 38*0d6140beSAndroid Build Coastguard Worker exit $EXIT_FAILURE 39*0d6140beSAndroid Build Coastguard Workerfi 40*0d6140beSAndroid Build Coastguard Worker 41*0d6140beSAndroid Build Coastguard WorkerZERO_4K="00_4k.bin" 42*0d6140beSAndroid Build Coastguard WorkerFF_4K="ff_4k.bin" 43*0d6140beSAndroid Build Coastguard WorkerFF_4K_TEXT="ff_4k.txt" 44*0d6140beSAndroid Build Coastguard Worker 45*0d6140beSAndroid Build Coastguard WorkerTESTFILE="test.bin" 46*0d6140beSAndroid Build Coastguard Worker 47*0d6140beSAndroid Build Coastguard Workerwhich uuencode > /dev/null 48*0d6140beSAndroid Build Coastguard Workerif [ "$?" != "0" ] ; then 49*0d6140beSAndroid Build Coastguard Worker echo "uuencode is required to use this script" 50*0d6140beSAndroid Build Coastguard Worker exit $EXIT_FAILURE 51*0d6140beSAndroid Build Coastguard Workerfi 52*0d6140beSAndroid Build Coastguard Worker 53*0d6140beSAndroid Build Coastguard Workerwhich flashrom > /dev/null 54*0d6140beSAndroid Build Coastguard Workerif [ "$?" != "0" ] ; then 55*0d6140beSAndroid Build Coastguard Worker echo "Please install a stable version of flashrom in your path." 56*0d6140beSAndroid Build Coastguard Worker echo "This will be used to compare the test flashrom binary and " 57*0d6140beSAndroid Build Coastguard Worker echo "restore your firmware image at the end of the test." 58*0d6140beSAndroid Build Coastguard Worker exit $EXIT_FAILURE 59*0d6140beSAndroid Build Coastguard Workerfi 60*0d6140beSAndroid Build Coastguard Worker 61*0d6140beSAndroid Build Coastguard Worker# Keep a copy of flashrom with the test data 62*0d6140beSAndroid Build Coastguard Workercp "$FLASHROM" "${TMPDIR}/" 63*0d6140beSAndroid Build Coastguard Workercd "$TMPDIR" 64*0d6140beSAndroid Build Coastguard Workerecho "Running test in ${TMPDIR}" 65*0d6140beSAndroid Build Coastguard Worker 66*0d6140beSAndroid Build Coastguard Worker# Make 4k worth of 0xff bytes 67*0d6140beSAndroid Build Coastguard Workerecho "begin 640 $FF_4K" > "$FF_4K_TEXT" 68*0d6140beSAndroid Build Coastguard Workeri=0 69*0d6140beSAndroid Build Coastguard Workerwhile [ $i -le 90 ] ; do 70*0d6140beSAndroid Build Coastguard Worker echo "M____________________________________________________________" >> "$FF_4K_TEXT" 71*0d6140beSAndroid Build Coastguard Worker i=$((${i} + 1)) 72*0d6140beSAndroid Build Coastguard Workerdone 73*0d6140beSAndroid Build Coastguard Workerecho "!_P``" >> "$FF_4K_TEXT" 74*0d6140beSAndroid Build Coastguard Workerecho "\`" >> "$FF_4K_TEXT" 75*0d6140beSAndroid Build Coastguard Workerecho "end" >> "$FF_4K_TEXT" 76*0d6140beSAndroid Build Coastguard Workeruudecode -o "$FF_4K" "$FF_4K_TEXT" 77*0d6140beSAndroid Build Coastguard Workerrm -f "$FF_4K_TEXT" 78*0d6140beSAndroid Build Coastguard Worker 79*0d6140beSAndroid Build Coastguard Worker# Make 4k worth of 0x00 bytes 80*0d6140beSAndroid Build Coastguard Workerdd if=/dev/zero of="$ZERO_4K" bs=1 count=4096 2> /dev/null 81*0d6140beSAndroid Build Coastguard Workerecho "ffh pattern written in ${FF_4K}" 82*0d6140beSAndroid Build Coastguard Workerecho "00h pattern written in ${ZERO_4K}" 83*0d6140beSAndroid Build Coastguard Worker 84*0d6140beSAndroid Build Coastguard Workerecho "Reading BIOS image" 85*0d6140beSAndroid Build Coastguard WorkerBIOS="bios.bin" 86*0d6140beSAndroid Build Coastguard Workerflashrom ${FLASHROM_PARAM} -r "$BIOS" > /dev/null 87*0d6140beSAndroid Build Coastguard Workerecho "Original image saved as ${BIOS}" 88*0d6140beSAndroid Build Coastguard Worker 89*0d6140beSAndroid Build Coastguard Worker# $1: exit code 90*0d6140beSAndroid Build Coastguard Workerdo_exit() { 91*0d6140beSAndroid Build Coastguard Worker if [ ${1} -eq ${EXIT_FAILURE} ] ; then 92*0d6140beSAndroid Build Coastguard Worker echo "Result: FAILED" 93*0d6140beSAndroid Build Coastguard Worker else 94*0d6140beSAndroid Build Coastguard Worker echo "Result: PASSED" 95*0d6140beSAndroid Build Coastguard Worker fi 96*0d6140beSAndroid Build Coastguard Worker 97*0d6140beSAndroid Build Coastguard Worker echo "restoring original bios image using system's flashrom" 98*0d6140beSAndroid Build Coastguard Worker flashrom ${FLASHROM_PARAM} -w "$BIOS" 99*0d6140beSAndroid Build Coastguard Worker echo "test files remain in ${TMPDIR}" 100*0d6140beSAndroid Build Coastguard Worker cd "$OLDDIR" 101*0d6140beSAndroid Build Coastguard Worker exit "$1" 102*0d6140beSAndroid Build Coastguard Worker} 103*0d6140beSAndroid Build Coastguard Worker 104*0d6140beSAndroid Build Coastguard Worker# 105*0d6140beSAndroid Build Coastguard Worker# Actual tests are performed below. 106*0d6140beSAndroid Build Coastguard Worker# 107*0d6140beSAndroid Build Coastguard WorkerNUM_REGIONS=16 108*0d6140beSAndroid Build Coastguard Worker 109*0d6140beSAndroid Build Coastguard Worker# Make a layout - 4K regions on 4K boundaries. This will test basic 110*0d6140beSAndroid Build Coastguard Worker# functionality of erasing and writing specific blocks. 111*0d6140beSAndroid Build Coastguard Workerecho " 112*0d6140beSAndroid Build Coastguard Worker0x000000:0x000fff 00_0 113*0d6140beSAndroid Build Coastguard Worker0x001000:0x001fff ff_0 114*0d6140beSAndroid Build Coastguard Worker 115*0d6140beSAndroid Build Coastguard Worker0x002000:0x002fff 00_1 116*0d6140beSAndroid Build Coastguard Worker0x003000:0x003fff ff_1 117*0d6140beSAndroid Build Coastguard Worker 118*0d6140beSAndroid Build Coastguard Worker0x004000:0x004fff 00_2 119*0d6140beSAndroid Build Coastguard Worker0x005000:0x005fff ff_2 120*0d6140beSAndroid Build Coastguard Worker 121*0d6140beSAndroid Build Coastguard Worker0x006000:0x006fff 00_3 122*0d6140beSAndroid Build Coastguard Worker0x007000:0x007fff ff_3 123*0d6140beSAndroid Build Coastguard Worker 124*0d6140beSAndroid Build Coastguard Worker0x008000:0x008fff 00_4 125*0d6140beSAndroid Build Coastguard Worker0x009000:0x009fff ff_4 126*0d6140beSAndroid Build Coastguard Worker 127*0d6140beSAndroid Build Coastguard Worker0x00a000:0x00afff 00_5 128*0d6140beSAndroid Build Coastguard Worker0x00b000:0x00bfff ff_5 129*0d6140beSAndroid Build Coastguard Worker 130*0d6140beSAndroid Build Coastguard Worker0x00c000:0x00cfff 00_6 131*0d6140beSAndroid Build Coastguard Worker0x00d000:0x00dfff ff_6 132*0d6140beSAndroid Build Coastguard Worker 133*0d6140beSAndroid Build Coastguard Worker0x00e000:0x00efff 00_7 134*0d6140beSAndroid Build Coastguard Worker0x00f000:0x00ffff ff_7 135*0d6140beSAndroid Build Coastguard Worker 136*0d6140beSAndroid Build Coastguard Worker0x010000:0x010fff 00_8 137*0d6140beSAndroid Build Coastguard Worker0x011000:0x011fff ff_8 138*0d6140beSAndroid Build Coastguard Worker 139*0d6140beSAndroid Build Coastguard Worker0x012000:0x012fff 00_9 140*0d6140beSAndroid Build Coastguard Worker0x013000:0x013fff ff_9 141*0d6140beSAndroid Build Coastguard Worker 142*0d6140beSAndroid Build Coastguard Worker0x014000:0x014fff 00_10 143*0d6140beSAndroid Build Coastguard Worker0x015000:0x015fff ff_10 144*0d6140beSAndroid Build Coastguard Worker 145*0d6140beSAndroid Build Coastguard Worker0x016000:0x016fff 00_11 146*0d6140beSAndroid Build Coastguard Worker0x017000:0x017fff ff_11 147*0d6140beSAndroid Build Coastguard Worker 148*0d6140beSAndroid Build Coastguard Worker0x018000:0x018fff 00_12 149*0d6140beSAndroid Build Coastguard Worker0x019000:0x019fff ff_12 150*0d6140beSAndroid Build Coastguard Worker 151*0d6140beSAndroid Build Coastguard Worker0x01a000:0x01afff 00_13 152*0d6140beSAndroid Build Coastguard Worker0x01b000:0x01bfff ff_13 153*0d6140beSAndroid Build Coastguard Worker 154*0d6140beSAndroid Build Coastguard Worker0x01c000:0x01cfff 00_14 155*0d6140beSAndroid Build Coastguard Worker0x01d000:0x01dfff ff_14 156*0d6140beSAndroid Build Coastguard Worker 157*0d6140beSAndroid Build Coastguard Worker0x01e000:0x01efff 00_15 158*0d6140beSAndroid Build Coastguard Worker0x01f000:0x01ffff ff_15 159*0d6140beSAndroid Build Coastguard Worker" > layout_4k_aligned.txt 160*0d6140beSAndroid Build Coastguard Worker 161*0d6140beSAndroid Build Coastguard Workercp "$BIOS" "$TESTFILE" 162*0d6140beSAndroid Build Coastguard Workeri=0 163*0d6140beSAndroid Build Coastguard Workerwhile [ $i -lt $NUM_REGIONS ] ; do 164*0d6140beSAndroid Build Coastguard Worker echo -n "aligned region ${i} test: " 165*0d6140beSAndroid Build Coastguard Worker offset=$((${i} * 8192)) 166*0d6140beSAndroid Build Coastguard Worker dd if=${ZERO_4K} of=${TESTFILE} bs=1 conv=notrunc seek=${offset} 2> /dev/null 167*0d6140beSAndroid Build Coastguard Worker dd if=${FF_4K} of=${TESTFILE} bs=1 conv=notrunc seek=$((${offset} + 4096)) 2> /dev/null 168*0d6140beSAndroid Build Coastguard Worker 169*0d6140beSAndroid Build Coastguard Worker ./flashrom ${FLASHROM_PARAM} -l layout_4k_aligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null 170*0d6140beSAndroid Build Coastguard Worker if [ "$?" != "0" ] ; then 171*0d6140beSAndroid Build Coastguard Worker echo "failed to flash region" 172*0d6140beSAndroid Build Coastguard Worker do_exit "$EXIT_FAILURE" 173*0d6140beSAndroid Build Coastguard Worker fi 174*0d6140beSAndroid Build Coastguard Worker 175*0d6140beSAndroid Build Coastguard Worker # download the entire ROM image and use diff to compare to ensure 176*0d6140beSAndroid Build Coastguard Worker # flashrom logic does not violate user-specified regions 177*0d6140beSAndroid Build Coastguard Worker flashrom ${FLASHROM_PARAM} -r difftest.bin > /dev/null 178*0d6140beSAndroid Build Coastguard Worker diff -q difftest.bin "$TESTFILE" 179*0d6140beSAndroid Build Coastguard Worker if [ "$?" != "0" ] ; then 180*0d6140beSAndroid Build Coastguard Worker echo "failed diff test" 181*0d6140beSAndroid Build Coastguard Worker do_exit "$EXIT_FAILURE" 182*0d6140beSAndroid Build Coastguard Worker fi 183*0d6140beSAndroid Build Coastguard Worker rm -f difftest.bin 184*0d6140beSAndroid Build Coastguard Worker 185*0d6140beSAndroid Build Coastguard Worker i=$((${i} + 1)) 186*0d6140beSAndroid Build Coastguard Worker echo "passed" 187*0d6140beSAndroid Build Coastguard Workerdone 188*0d6140beSAndroid Build Coastguard Worker 189*0d6140beSAndroid Build Coastguard Worker# Make a layout - 4K regions on 4.5K boundaries. This will help find problems 190*0d6140beSAndroid Build Coastguard Worker# with logic that only operates on part of a block. For example, if a user 191*0d6140beSAndroid Build Coastguard Worker# wishes to re-write a fraction of a block, then: 192*0d6140beSAndroid Build Coastguard Worker# 1. The whole block must be erased. 193*0d6140beSAndroid Build Coastguard Worker# 2. The old content must be restored at unspecified offsets. 194*0d6140beSAndroid Build Coastguard Worker# 3. The new content must be written at specified offsets. 195*0d6140beSAndroid Build Coastguard Worker# 196*0d6140beSAndroid Build Coastguard Worker# Note: The last chunk of 0xff bytes is only 2k as to avoid overrunning a 128kB 197*0d6140beSAndroid Build Coastguard Worker# test image. 198*0d6140beSAndroid Build Coastguard Worker# 199*0d6140beSAndroid Build Coastguard Workerecho " 200*0d6140beSAndroid Build Coastguard Worker0x000800:0x0017ff 00_0 201*0d6140beSAndroid Build Coastguard Worker0x001800:0x0027ff ff_0 202*0d6140beSAndroid Build Coastguard Worker 203*0d6140beSAndroid Build Coastguard Worker0x002800:0x0037ff 00_1 204*0d6140beSAndroid Build Coastguard Worker0x003800:0x0047ff ff_1 205*0d6140beSAndroid Build Coastguard Worker 206*0d6140beSAndroid Build Coastguard Worker0x004800:0x0057ff 00_2 207*0d6140beSAndroid Build Coastguard Worker0x005800:0x0067ff ff_2 208*0d6140beSAndroid Build Coastguard Worker 209*0d6140beSAndroid Build Coastguard Worker0x006800:0x0077ff 00_3 210*0d6140beSAndroid Build Coastguard Worker0x007800:0x0087ff ff_3 211*0d6140beSAndroid Build Coastguard Worker 212*0d6140beSAndroid Build Coastguard Worker0x008800:0x0097ff 00_4 213*0d6140beSAndroid Build Coastguard Worker0x009800:0x00a7ff ff_4 214*0d6140beSAndroid Build Coastguard Worker 215*0d6140beSAndroid Build Coastguard Worker0x00a800:0x00b7ff 00_5 216*0d6140beSAndroid Build Coastguard Worker0x00b800:0x00c7ff ff_5 217*0d6140beSAndroid Build Coastguard Worker 218*0d6140beSAndroid Build Coastguard Worker0x00c800:0x00d7ff 00_6 219*0d6140beSAndroid Build Coastguard Worker0x00d800:0x00e7ff ff_6 220*0d6140beSAndroid Build Coastguard Worker 221*0d6140beSAndroid Build Coastguard Worker0x00e800:0x00f7ff 00_7 222*0d6140beSAndroid Build Coastguard Worker0x00f800:0x0107ff ff_7 223*0d6140beSAndroid Build Coastguard Worker 224*0d6140beSAndroid Build Coastguard Worker0x010800:0x0117ff 00_8 225*0d6140beSAndroid Build Coastguard Worker0x011800:0x0127ff ff_8 226*0d6140beSAndroid Build Coastguard Worker 227*0d6140beSAndroid Build Coastguard Worker0x012800:0x0137ff 00_9 228*0d6140beSAndroid Build Coastguard Worker0x013800:0x0147ff ff_9 229*0d6140beSAndroid Build Coastguard Worker 230*0d6140beSAndroid Build Coastguard Worker0x014800:0x0157ff 00_10 231*0d6140beSAndroid Build Coastguard Worker0x015800:0x0167ff ff_10 232*0d6140beSAndroid Build Coastguard Worker 233*0d6140beSAndroid Build Coastguard Worker0x016800:0x0177ff 00_11 234*0d6140beSAndroid Build Coastguard Worker0x017800:0x0187ff ff_11 235*0d6140beSAndroid Build Coastguard Worker 236*0d6140beSAndroid Build Coastguard Worker0x018800:0x0197ff 00_12 237*0d6140beSAndroid Build Coastguard Worker0x019800:0x01a7ff ff_12 238*0d6140beSAndroid Build Coastguard Worker 239*0d6140beSAndroid Build Coastguard Worker0x01a800:0x01b7ff 00_13 240*0d6140beSAndroid Build Coastguard Worker0x01b800:0x01c7ff ff_13 241*0d6140beSAndroid Build Coastguard Worker 242*0d6140beSAndroid Build Coastguard Worker0x01c800:0x01d7ff 00_14 243*0d6140beSAndroid Build Coastguard Worker0x01d800:0x01e7ff ff_14 244*0d6140beSAndroid Build Coastguard Worker 245*0d6140beSAndroid Build Coastguard Worker0x01e800:0x01f7ff 00_15 246*0d6140beSAndroid Build Coastguard Worker0x01f800:0x01ffff ff_15 247*0d6140beSAndroid Build Coastguard Worker" > layout_unaligned.txt 248*0d6140beSAndroid Build Coastguard Worker 249*0d6140beSAndroid Build Coastguard Worker# reset the test file and ROM to the original state 250*0d6140beSAndroid Build Coastguard Workerflashrom ${FLASHROM_PARAM} -w "$BIOS" > /dev/null 251*0d6140beSAndroid Build Coastguard Workercp "$BIOS" "$TESTFILE" 252*0d6140beSAndroid Build Coastguard Worker 253*0d6140beSAndroid Build Coastguard Workeri=0 254*0d6140beSAndroid Build Coastguard Workerwhile [ $i -lt $NUM_REGIONS ] ; do 255*0d6140beSAndroid Build Coastguard Worker echo -n "unaligned region ${i} test: " 256*0d6140beSAndroid Build Coastguard Worker 257*0d6140beSAndroid Build Coastguard Worker offset=$(($((${i} * 8192)) + 2048)) 258*0d6140beSAndroid Build Coastguard Worker # Protect against too long write 259*0d6140beSAndroid Build Coastguard Worker writelen=4096 260*0d6140beSAndroid Build Coastguard Worker if [ $((${offset} + 4096 + 4096)) -ge 131072 ]; then 261*0d6140beSAndroid Build Coastguard Worker writelen=$((131072 - $((${offset} + 4096)))) 262*0d6140beSAndroid Build Coastguard Worker if [ ${writelen} -lt 0 ]; then 263*0d6140beSAndroid Build Coastguard Worker writelen=0 264*0d6140beSAndroid Build Coastguard Worker fi 265*0d6140beSAndroid Build Coastguard Worker fi 266*0d6140beSAndroid Build Coastguard Worker dd if=${ZERO_4K} of=${TESTFILE} bs=1 conv=notrunc seek=${offset} 2> /dev/null 267*0d6140beSAndroid Build Coastguard Worker dd if=${FF_4K} of=${TESTFILE} bs=1 conv=notrunc seek=$((${offset} + 4096)) count=writelen 2> /dev/null 268*0d6140beSAndroid Build Coastguard Worker 269*0d6140beSAndroid Build Coastguard Worker ./flashrom ${FLASHROM_PARAM} -l layout_unaligned.txt -i 00_${i} -i ff_${i} -w "$TESTFILE" > /dev/null 270*0d6140beSAndroid Build Coastguard Worker if [ "$?" != "0" ] ; then 271*0d6140beSAndroid Build Coastguard Worker echo "failed to flash region" 272*0d6140beSAndroid Build Coastguard Worker do_exit "$EXIT_FAILURE" 273*0d6140beSAndroid Build Coastguard Worker fi 274*0d6140beSAndroid Build Coastguard Worker 275*0d6140beSAndroid Build Coastguard Worker # download the entire ROM image and use diff to compare to ensure 276*0d6140beSAndroid Build Coastguard Worker # flashrom logic does not violate user-specified regions 277*0d6140beSAndroid Build Coastguard Worker flashrom ${FLASHROM_PARAM} -r difftest.bin > /dev/null 278*0d6140beSAndroid Build Coastguard Worker diff -q difftest.bin "$TESTFILE" 279*0d6140beSAndroid Build Coastguard Worker if [ "$?" != "0" ] ; then 280*0d6140beSAndroid Build Coastguard Worker echo "failed diff test" 281*0d6140beSAndroid Build Coastguard Worker do_exit "$EXIT_FAILURE" 282*0d6140beSAndroid Build Coastguard Worker fi 283*0d6140beSAndroid Build Coastguard Worker rm -f difftest.bin 284*0d6140beSAndroid Build Coastguard Worker 285*0d6140beSAndroid Build Coastguard Worker i=$((${i} + 1)) 286*0d6140beSAndroid Build Coastguard Worker echo "passed" 287*0d6140beSAndroid Build Coastguard Workerdone 288*0d6140beSAndroid Build Coastguard Worker 289*0d6140beSAndroid Build Coastguard Workerdo_exit "$EXIT_SUCCESS" 290