summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAnup Patel <anup.patel@wdc.com>2020-05-25 12:12:35 +0300
committerAnup Patel <anup@brainfault.org>2020-06-05 06:32:59 +0300
commit4e3876d5be1118aae5318c91e431e8cfedf580b1 (patch)
tree0c0589d3909f20881336d189aa64c1abee95733f /scripts
parentc6c65ee8614d51395242c0500b4419dfa35a4e33 (diff)
downloadopensbi-4e3876d5be1118aae5318c91e431e8cfedf580b1.tar.xz
Makefile: Add mechanism for platforms to have multiple builtin DTBs
Currently, we can only include one DTB as builtin for a platform using FDT_PAYLOAD_DTB make variable in platform config.mk. This patch adds new mechanism using which we can convert any DTS file to C source and futher compile-n-link it with libplatsbi.a. The generated C source will have the DTB contents as an array "const char <varprefix>_start[]" where <varprefix> is specified in platform objects.mk makefile. Example1 -------- If we have built-in k210.dts and desired <varprefix> is "dt_k210" then specify following in platform objects.mk: platform-objs-y += k210.o platform-varprefix-k210.o = dt_k210 Example2 -------- If we have built-in abc/k210.dts and desired <varprefix> is "dt_abc_k210" then specify following in platform objects.mk: platform-objs-y += abc/k210.o platform-varprefix-abc-k210.o = dt_abc_k210 Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/d2c.sh67
1 files changed, 67 insertions, 0 deletions
diff --git a/scripts/d2c.sh b/scripts/d2c.sh
new file mode 100755
index 0000000..821a995
--- /dev/null
+++ b/scripts/d2c.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+function usage()
+{
+ echo "Usage:"
+ echo " $0 [options]"
+ echo "Options:"
+ echo " -h Display help or usage"
+ echo " -i <input_file_path> Input binary file path"
+ echo " -a <c_align> Output C array alignment"
+ echo " -p <c_prefix> Output C array name prefix"
+ exit 1;
+}
+
+# Command line options
+INPUT_PATH=""
+OUTPUT_C_ALIGN=""
+OUTPUT_C_PREFIX=""
+
+while getopts "hi:a:p:o:" o; do
+ case "${o}" in
+ h)
+ usage
+ ;;
+ i)
+ INPUT_PATH=${OPTARG}
+ ;;
+ a)
+ OUTPUT_C_ALIGN=${OPTARG}
+ ;;
+ p)
+ OUTPUT_C_PREFIX=${OPTARG}
+ ;;
+ *)
+ usage
+ ;;
+ esac
+done
+shift $((OPTIND-1))
+
+if [ -z "${INPUT_PATH}" ]; then
+ echo "Must specify input file path"
+ usage
+fi
+
+if [ ! -f "${INPUT_PATH}" ]; then
+ echo "The input path should be a file"
+ usage
+fi
+
+if [ -z "${OUTPUT_C_ALIGN}" ]; then
+ echo "Must provide output C array alignment"
+ usage
+fi
+
+if [ -z "${OUTPUT_C_PREFIX}" ]; then
+ echo "Must provide output C array name prefix"
+ usage
+fi
+
+printf "const char __attribute__((aligned(%s))) %s_start[] = {\n" "${OUTPUT_C_ALIGN}" "${OUTPUT_C_PREFIX}"
+
+od -v -t x1 -An ${INPUT_PATH} | awk '{for (i=1; i<=NF; i++) printf " 0x%s,", $i; printf "\n"; }'
+
+printf "};\n"
+
+printf "const unsigned long %s_size = sizeof(%s_start);\n" "${OUTPUT_C_PREFIX}" "${OUTPUT_C_PREFIX}"