Firmware gen.sh update for ES1.1 HS testing
[processor-sdk/pdk.git] / packages / ti / drv / sciclient / tools / firmwareHeaderGen.sh
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 AM65XX-HS         : ./firmwareHeaderGen.sh am65x_sr2-hs
37 #         For J721E             : ./firmwareHeaderGen.sh j721e
38 #         For J721E-HS          : ./firmwareHeaderGen.sh j721e-hs
39 #         For J721E-HS (ES1.1)  : ./firmwareHeaderGen.sh j721e_sr1_1-hs
40 #         For AM64x             : ./firmwareHeaderGen.sh am64x
41 #         For J7200             : ./firmwareHeaderGen.sh j7200
42 export RM=rm
43 export MV=mv
44 export MAKE=gcc
45 export ECHO=echo
46 export CHMOD=chmod
47 export COPY=cp
48 export CAT=cat
49 #Default SOC is am65x .This can be changed by using first parameter
50 # as ,for example, "j721e". Assumes device type is GP by default.
51 export FW_SOC=am65x
52 export FW_SOC_TYPE=-gp
53 export BIN_EXT=
55 if [[ $OS == 'Windows_NT' ]]; then
56 export BIN2C_EXE=bin2c.exe
57 else
58 export BIN2C_EXE=bin2c.out
59 fi
61 # Specify paths relative to script
62 export SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}")" && pwd )
63 echo $SCRIPT_DIR
64 export SCI_CLIENT_DIR=$(cd "$SCRIPT_DIR/.." && pwd )
66 # Keeping everything within SCI client folder
67 export BIN2C_GEN=$SCI_CLIENT_DIR/tools/bin2c/$BIN2C_EXE
69 # ROOTDIR is used by x509CertificateGen.sh
70 # If not defined, try to get it relative to
71 # script location. This flexibility is useful
72 # when running this script from a git repo, outside
73 # PRSDK.
74 if [ "$#" -gt 1 ]; then
75 export ROOTDIR=$2
76 export FW_SOC=$1
77 elif [ "$#" -gt 0 ]; then
78 export ROOTDIR=$(cd "$SCI_CLIENT_DIR/../../.." && pwd )
79 export FW_SOC=$1
80 else
81 export ROOTDIR=$(cd "$SCI_CLIENT_DIR/../../.." && pwd )
82 fi
84 # Pickup correct sysfw binary
85 if [[ $FW_SOC == *"hs"* ]]; then
86   FW_SOC_TYPE=-hs-enc
87   FW_SOC=${FW_SOC%-hs}
88   BIN_EXT=-hs-enc
89 fi
91 if [[ $FW_SOC == *"vlab"* ]]; then
92   FW_SOC=${FW_SOC%-vlab}
93   FW_SOC_TYPE=-gp-vlab
94   BIN_EXT=-vlab
95 fi
96 if [[ $FW_SOC == *"zebu"* ]]; then
97   FW_SOC=${FW_SOC%-zebu}
98   FW_SOC_TYPE=-gp-zebu
99   BIN_EXT=-zebu
100 fi
102 export SCI_CLIENT_IN_SOC_DIR=$SCI_CLIENT_DIR/soc/sysfw/binaries
104 if [ "$FW_SOC" = "am65x" ]; then
105 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V0
106 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V0$BIN_EXT.h
107 export SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/sysfw$BIN_EXT.bin
108 export FIRMWARE_SILICON=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC$FW_SOC_TYPE.bin
109 export SYSFW_SE_INNER_CERT=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC${FW_SOC_TYPE%-enc}-cert.bin
110 export SYSFW_SE_CUST_CERT=$SCI_CLIENT_OUT_SOC_DIR/sysfw_cert.bin
111 export SYSFW_LOAD_ADDR=0x40000
112 fi
114 if [ "$FW_SOC" = "am65x_sr2" ]; then
115 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V0
116 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V0_sr2$BIN_EXT.h
117 export SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/sysfw_sr2$BIN_EXT.bin
118 export FIRMWARE_SILICON=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC$FW_SOC_TYPE.bin
119 export SYSFW_SE_INNER_CERT=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC${FW_SOC_TYPE%-enc}-cert.bin
120 export SYSFW_SE_CUST_CERT=$SCI_CLIENT_OUT_SOC_DIR/sysfw_cert.bin
121 export SYSFW_LOAD_ADDR=0x40000
122 fi
124 if [ "$FW_SOC" = "j721e" ]; then
125 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V1
126 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V1$BIN_EXT.h
127 export SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/tifs$BIN_EXT.bin
128 export FIRMWARE_SILICON=$SCI_CLIENT_IN_SOC_DIR/ti-fs-firmware-$FW_SOC$FW_SOC_TYPE.bin
129 export SYSFW_SE_INNER_CERT=$SCI_CLIENT_IN_SOC_DIR/ti-fs-firmware-$FW_SOC${FW_SOC_TYPE%-enc}-cert.bin
130 export SYSFW_SE_CUST_CERT=$SCI_CLIENT_OUT_SOC_DIR/tifs_cert.bin
131 export SYSFW_LOAD_ADDR=0x40000
132 fi
134 if [ "$FW_SOC" = "j721e_sr1_1" ]; then
135 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V1
136 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V1_sr1.1$BIN_EXT.h
137 export SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/tifs_sr1.1$BIN_EXT.bin
138 export FIRMWARE_SILICON=$SCI_CLIENT_IN_SOC_DIR/ti-fs-firmware-$FW_SOC$FW_SOC_TYPE.bin
139 export SYSFW_SE_INNER_CERT=$SCI_CLIENT_IN_SOC_DIR/ti-fs-firmware-$FW_SOC${FW_SOC_TYPE%-enc}-cert.bin
140 export SYSFW_SE_CUST_CERT=$SCI_CLIENT_OUT_SOC_DIR/tifs_cert_sr1.1.bin
141 export SYSFW_LOAD_ADDR=0x40000
142 fi
145 if [ "$FW_SOC" = "j7200" ]; then
146 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V2
147 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V2$BIN_EXT.h
148 export FIRMWARE_SILICON=$SCI_CLIENT_IN_SOC_DIR/ti-fs-firmware-$FW_SOC$FW_SOC_TYPE.bin
149 export SYSFW_SE_INNER_CERT=$SCI_CLIENT_IN_SOC_DIR/ti-fs-firmware-$FW_SOC${FW_SOC_TYPE%-enc}-cert.bin
150 export SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/tifs$BIN_EXT.bin
151 export SYSFW_SE_CUST_CERT=$SCI_CLIENT_OUT_SOC_DIR/tifs_cert.bin
152 export SYSFW_LOAD_ADDR=0x40000
153 fi
155 if [ "$FW_SOC" = "am64x" ]; then
156 export SCI_CLIENT_OUT_SOC_DIR=$SCI_CLIENT_DIR/soc/V3
157 SYSFW_SE_SIGNED=$SCI_CLIENT_OUT_SOC_DIR/sysfw$BIN_EXT.bin
158 export SCICLIENT_FIRMWARE_HEADER=sciclient_firmware_V3$BIN_EXT.h
159 export FIRMWARE_SILICON=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC$FW_SOC_TYPE.bin
160 export SYSFW_SE_INNER_CERT=$SCI_CLIENT_IN_SOC_DIR/ti-sci-firmware-$FW_SOC${FW_SOC_TYPE%-enc}-cert.bin
161 export SYSFW_SE_CUST_CERT=$SCI_CLIENT_OUT_SOC_DIR/sysfw_cert.bin
162 export SYSFW_LOAD_ADDR=0x44000
163 fi
166 # SBL_CERT_GEN may already be depending on how this is called
167 export SBL_CERT_GEN="${SBL_CERT_GEN:-$ROOTDIR/ti/build/makerules/x509CertificateGen.sh}"
169 # Confirm ROOTDIR is correct, if not error out.
170 if [ ! -f $SBL_CERT_GEN ]; then
171     echo "Error: $SBL_CERT_GEN not found!"
172     echo "       Usage $0 <pdk-install-path>"
173     exit 1
174 fi
176 $ECHO "Building the bin2c generation c tool"
177 cd $SCI_CLIENT_DIR/tools/bin2c/
178 $RM -f $BIN2C_EXE
179 $MAKE bin2c.c -o $BIN2C_EXE
180 cd -
182 $CHMOD a+x $SBL_CERT_GEN
183 $CHMOD a+x $BIN2C_GEN
185 if [[ $FW_SOC == *"gp"* || $FW_SOC_TYPE == *"gp"* ]]; then
186 $ECHO "Generating the Header file for " $FIRMWARE_SILICON
187 export SBL_CERT_KEY=$ROOTDIR/ti/build/makerules/rom_degenerateKey.pem
188 $SBL_CERT_GEN -b $FIRMWARE_SILICON -o $SYSFW_SE_SIGNED -c DMSC_I -l $SYSFW_LOAD_ADDR -k $SBL_CERT_KEY
189 else
190 $ECHO "Generating outer certificate for " $SYSFW_SE_INNER_CERT
191 export SBL_CERT_KEY=$ROOTDIR/ti/build/makerules/k3_dev_mpk.pem
192 $SBL_CERT_GEN -b $SYSFW_SE_INNER_CERT -o $SYSFW_SE_CUST_CERT -c DMSC_O -l $SYSFW_LOAD_ADDR -k $SBL_CERT_KEY
194 $ECHO "Generating the Header file for " $FIRMWARE_SILICON
195 $CAT $SYSFW_SE_CUST_CERT $FIRMWARE_SILICON > $SYSFW_SE_SIGNED
196 $RM -f $SYSFW_SE_CUST_CERT
197 fi
199 $ECHO "Generating the Header file for the soc in the folder"
200 $BIN2C_GEN $SYSFW_SE_SIGNED $SCICLIENT_FIRMWARE_HEADER SCICLIENT_FIRMWARE > $SCI_CLIENT_OUT_SOC_DIR/$SCICLIENT_FIRMWARE_HEADER
202 $ECHO "Done."