1 #!/bin/bash
2 #
3 # Copyright (c) 2018-2020, Texas Instruments Incorporated
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 #
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 #
13 # * Redistributions in binary form must reproduce the above copyright
14 # notice, this list of conditions and the following disclaimer in the
15 # documentation and/or other materials provided with the distribution.
16 #
17 # * Neither the name of Texas Instruments Incorporated nor the names of
18 # its contributors may be used to endorse or promote products derived
19 # from this software without specific prior written permission.
20 #
21 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28 # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31 # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #
33 # Usage : For AM65XX : ./firmwareHeaderGen.sh am65x
34 # For AM65XX : ./firmwareHeaderGen.sh am65x_sr2
35 # For AM65XX-HS : ./firmwareHeaderGen.sh am65x-hs
36 # For J721E : ./firmwareHeaderGen.sh j721e
37 # For J721E-HS : ./firmwareHeaderGen.sh j721e-hs
38 # For AM64x : ./firmwareHeaderGen.sh am64x-vlab
39 # For AM64x : ./firmwareHeaderGen.sh am64x-zebu
40 export RM=rm
41 export MV=mv
42 export MAKE=gcc
43 export ECHO=echo
44 export CHMOD=chmod
45 export COPY=cp
46 export CAT=cat
47 #Default SOC is am65x .This can be changed by using first parameter
48 # as ,for example, "j721e". Assumes device type is GP by default.
49 export FW_SOC=am65x
50 export FW_SOC_TYPE=gp
51 export BIN_EXT=
53 if [[ $OS == 'Windows_NT' ]]; then
54 export BIN2C_EXE=bin2c.exe
55 else
56 export BIN2C_EXE=bin2c.out
57 fi
59 # Specify paths relative to script
60 export SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}")" && pwd )
61 echo $SCRIPT_DIR
62 export SCI_CLIENT_DIR=$(cd "$SCRIPT_DIR/.." && pwd )
64 # Keeping everything within SCI client folder
65 export BIN2C_GEN=$SCI_CLIENT_DIR/tools/bin2c/$BIN2C_EXE
67 # ROOTDIR is used by x509CertificateGen.sh
68 # If not defined, try to get it relative to
69 # script location. This flexibility is useful
70 # when running this script from a git repo, outside
71 # PRSDK.
72 if [ "$#" -gt 1 ]; then
73 export ROOTDIR=$2
74 export FW_SOC=$1
75 elif [ "$#" -gt 0 ]; then
76 export ROOTDIR=$(cd "$SCI_CLIENT_DIR/../../.." && pwd )
77 export FW_SOC=$1
78 else
79 export ROOTDIR=$(cd "$SCI_CLIENT_DIR/../../.." && pwd )
80 fi
82 # Pickup correct sysfw binary
83 if [[ $FW_SOC == *"hs"* ]]; then
84 FW_SOC_TYPE=hs-enc
85 FW_SOC=${FW_SOC%-hs}
86 BIN_EXT=-hs-enc
87 fi
89 if [[ $FW_SOC == *"vlab"* ]]; then
90 FW_SOC=${FW_SOC%-vlab}
91 FW_SOC_TYPE=gp-vlab-rom
92 fi
93 if [[ $FW_SOC == *"zebu"* ]]; then
94 FW_SOC=${FW_SOC%-zebu}
95 FW_SOC_TYPE=gp-zebu-rom
96 fi
98 export SCI_CLIENT_IN_SOC_DIR=$SCI_CLIENT_DIR/soc/sysfw/binaries
100 if [ "$FW_SOC" = "am65x" ]; then
101 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V0
102 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V0.h
103 export SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/sysfw$BIN_EXT.bin
104 export SYSFW_LOAD_ADDR=0x40000
105 fi
107 if [ "$FW_SOC" = "am65x_sr2" ]; then
108 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V0
109 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V0_sr2.h
110 SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/sysfw_sr2$BIN_EXT.bin
111 export SYSFW_LOAD_ADDR=0x40000
112 fi
114 if [ "$FW_SOC" = "j721e" ]; then
115 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V1
116 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V1.h
117 SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/sysfw$BIN_EXT.bin
118 export SYSFW_LOAD_ADDR=0x40000
119 fi
121 if [ "$FW_SOC" = "am64x" ]; then
122 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V3
123 SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/sysfw$BIN_EXT.bin
124 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V3.h
125 export SYSFW_LOAD_ADDR=0x44000
126 fi
128 export FIRMWARE_SILICON=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC-$FW_SOC_TYPE.bin
129 export SYSFW_SE_INNER_CERT=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC-hs-cert.bin
130 export SYSFW_SE_CUST_CERT=$SCI_CLIENT_OUT_SOC_DIR/sysfw_cert.bin
132 # SBL_CERT_GEN may already be depending on how this is called
133 export SBL_CERT_GEN="${SBL_CERT_GEN:-$ROOTDIR/ti/build/makerules/x509CertificateGen.sh}"
135 # Confirm ROOTDIR is correct, if not error out.
136 if [ ! -f $SBL_CERT_GEN ]; then
137 echo "Error: $SBL_CERT_GEN not found!"
138 echo " Usage $0 <pdk-install-path>"
139 exit 1
140 fi
142 $ECHO "Building the bin2c generation c tool"
143 cd $SCI_CLIENT_DIR/tools/bin2c/
144 $RM -f $BIN2C_EXE
145 $MAKE bin2c.c -o $BIN2C_EXE
146 cd -
148 $CHMOD a+x $SBL_CERT_GEN
149 $CHMOD a+x $BIN2C_GEN
151 if [[ $FW_SOC_TYPE == *"gp"* ]]; then
152 $ECHO "Generating the Header file for " $FIRMWARE_SILICON
153 export SBL_CERT_KEY=$ROOTDIR/ti/build/makerules/rom_degenerateKey.pem
154 $SBL_CERT_GEN -b $FIRMWARE_SILICON -o $SYSFW_SE_SIGNED -c DMSC_I -l $SYSFW_LOAD_ADDR -k $SBL_CERT_KEY
155 else
156 $ECHO "Generating outer certificate for " $SYSFW_SE_INNER_CERT
157 export SBL_CERT_KEY=$ROOTDIR/ti/build/makerules/k3_dev_mpk.pem
158 $SBL_CERT_GEN -b $SYSFW_SE_INNER_CERT -o $SYSFW_SE_CUST_CERT -c DMSC_O -l $SYSFW_LOAD_ADDR -k $SBL_CERT_KEY
160 $ECHO "Generating the Header file for " $FIRMWARE_SILICON
161 $CAT $SYSFW_SE_CUST_CERT $FIRMWARE_SILICON > $SYSFW_SE_SIGNED
162 $RM -f $SYSFW_SE_CUST_CERT
163 fi
165 $ECHO "Generating the Header file for the soc in the folder"
166 $BIN2C_GEN $SYSFW_SE_SIGNED $SCICLIENT_FIRMWARE_HEADER SCICLIENT_FIRMWARE > $SCI_CLIENT_OUT_SOC_DIR/$SCICLIENT_FIRMWARE_HEADER
168 $ECHO "Done."