move sboot to the root directory
[open-ath9k-htc-firmware.git] / sboot / utility / sh / make_fw.sh
diff --git a/sboot/utility/sh/make_fw.sh b/sboot/utility/sh/make_fw.sh
new file mode 100755 (executable)
index 0000000..3d0f828
--- /dev/null
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+# Copyright (c) 2013 Qualcomm Atheros, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted (subject to the limitations in the
+# disclaimer below) provided that the following conditions are met:
+#
+#  * Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#  * 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.
+#
+#  * Neither the name of Qualcomm Atheros nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+# GRANTED BY THIS LICENSE.  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 OWNER 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.
+
+# This script constructs an AR6002 ROM firmware binary image
+# for FPGA(if FPGA_FLAG is "1") or for actual silicon if FPGA_FLAG
+# is not "1".
+#
+# It takes two things as input:
+#   sw.rom.out, which is an ELF image of ROM software
+#        that was built for actual hardware or for FPGA
+#   data.rom.hw.bin OR data.rom.fpga.bin, which contains
+#        DataSets and other data that is to be included
+#        at the end of the firmware image
+#
+# It produces fw.rom.bin, a firmware image appropriate for
+# use with AR6002 ROM.
+#
+# The image is constructed by converting the sw.rom.out ELF
+# image to binary, padding at the end of that binary,
+# and appending the data binary from data.rom.*.bin.  So the
+# final fw.rom.bin image is a binary image that's exactly
+# the same size as the ROM hardware and which contains ROM
+# software (including literals, read-only data, data that
+# will be copied to RAM in order to initialize read/write data),
+# DataSet Metadata, and DataSets.
+
+
+sw_image=${sw_image:-$PRJ_ROOT/build/image/magpie/rom.out}
+sw_bin=${sw_bin:-$PRJ_ROOT/build/image/magpie/rom.bin}
+
+
+ds_in_rom="0x`xt-nm $sw_image | grep " _data_start_in_rom" | cut -b -8`"
+
+# Place data binary at the end of ROM.
+#data_start=$((9168*1024-`stat --format='%s' $data_bin`))
+
+xt-objcopy  \
+  --change-section-lma .lit4+0x400000 \
+  --change-section-vma .lit4+0x400000 \
+  --change-section-lma .rodata+0x400000 \
+  --change-section-vma .rodata+0x400000 \
+  --change-section-lma .dram0.literal+0x400000 \
+  --change-section-vma .dram0.literal+0x400000 \
+  --remove-section     .dport0.data \
+  --change-section-lma .data=$((ds_in_rom)) \
+  --change-section-vma .data=$((ds_in_rom)) \
+  -O binary $sw_image $sw_bin
+
+#cat $sw_bin $data_bin > $fw_bin
+
+#if [ `stat --format='%s' $fw_bin` -ne $((96*1024)) ]
+#then
+#  echo "$0 ERROR: firmware $fw_bin is NOT the expected size."
+#fi
+
+exit 0