summaryrefslogtreecommitdiff
path: root/cros/build
blob: 13f7d925c942d231015a97bd6b78b24147b0ce04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/sh

SCRIPT="$0"
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

OUTPUT="build/coreboot.rom"
TMP_DIFF="$SCRIPT_DIR/.image-diff.bin"
FLASHROM="/usr/local/sbin/flashrom"

BL1_NAME="E5250.nbl1.bin"
BL1_PATH="3rdparty/cpu/samsung/exynos5250/"
BL1_URL="http://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/exynos-pre-boot-0.0.2-r8.tbz2"

die() {
  echo "$*" >&2
  exit 1
}

create_diff_128k() {
  local image_file="$1"
  local diff_file="$2"
  cp -f "$image_file" "$diff_file"
  dd if=/dev/zero of=$diff_file bs=1 count=$((128*1024)) conv=notrunc
}

fast_flash_image() {
  local image_file="$1"
  local diff_file="$2"
  dut-control spi2_buf_en:on spi2_buf_on_flex_en:on spi2_vref:pp1800
  sudo ${FLASHROM} -p ft2232_spi:type=servo-v2,port=a -w "$image_file" -V \
    --noverify --ignore-fmap --diff "$diff_file"
  dut-control spi2_buf_en:off spi2_buf_on_flex_en:off spi2_vref:off
}

get_bl1() {
  wget "${BL1_URL}" -O /tmp/bl1.tbz2
  tar jxvf /tmp/bl1.tbz2
  mkdir -p "${BL1_PATH}"
  mv "exynos-pre-boot/firmware/${BL1_NAME}" "${BL1_PATH}"
  rm -rf exynos-pre-boot
  if [ ! -e "${BL1_PATH}/${BL1_NAME}" ]; then
    echo "Error getting BL1"
    exit 1
  fi
}

merge_bl1() {
  local outfile="$1"
  local bl1="${BL1_PATH}/${BL1_NAME}"

  if [ ! -e "$bl1" ]; then
    get_bl1
  fi

  # use the new BL1 which supports 30KB BL2/SPL/Coreboot
  local size="$(stat -c "%s" "$outfile")"
  local bl1_size="$(stat -c "%s" "$bl1")"

  [ "$bl1_size" = "$((0x2000))" ] || die "Incorrect BL1 input file."
  dd if="$bl1" of=${outfile} conv=notrunc
}

is_servod_ready() {
  ps -C servod >/dev/null 2>&1
}

main() {
  make
  merge_bl1 "$OUTPUT"
  create_diff_128k "$OUTPUT" "$TMP_DIFF"
  echo "OK: Generated image (with BL1) in $OUTPUT"
  if is_servod_ready; then
    echo "servod detected - flashing into device."
    fast_flash_image "$OUTPUT" "$TMP_DIFF"
    echo "OK: Generated and flashed 128k of image into device via servo."
  else
    echo "(servod is not running, flashing into device is skipped)"
  fi
}

set -e
main "$@"