include: Add AM65X specific headers corresponding to SYSFW
[processor-firmware/system-firmware-image-gen.git] / Makefile
1 #
2 # Utility to generate an image tree blob (ITB) comprising a signed System
3 # Firmware (SYSFW) binary image as released by TI as well as domain-specific
4 # SYSFW configuration fragments provided in the form of C sources.
5 #
6 # Copyright (C) 2018-2019 Texas Instruments Incorporated - http://www.ti.com/
7 #       Andreas Dannenberg <dannenberg@ti.com>
8 #
9 #  Redistribution and use in source and binary forms, with or without
10 #  modification, are permitted provided that the following conditions
11 #  are met:
12 #
13 #    Redistributions of source code must retain the above copyright
14 #    notice, this list of conditions and the following disclaimer.
15 #
16 #    Redistributions in binary form must reproduce the above copyright
17 #    notice, this list of conditions and the following disclaimer in the
18 #    documentation and/or other materials provided with the
19 #    distribution.
20 #
21 #    Neither the name of Texas Instruments Incorporated nor the names of
22 #    its contributors may be used to endorse or promote products derived
23 #    from this software without specific prior written permission.
24 #
25 #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 #  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 #  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 #  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 #  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 #  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 #  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 #  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 #  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 #  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 #
38 SOC ?= am65x
40 # The HS SYSFW will only work on HS hardware when signed with valid
41 # keys, warn HS users if the SECDEV environment variable is not set
42 ifdef HS
43 ifeq ($(TI_SECURE_DEV_PKG),)
44 $(warning TI_SECURE_DEV_PKG should be set for HS, defaults may not work)
45 endif
46 endif
48 # If using the default SYSFW make sure to manually copy/populate the unsigned
49 # image into the root folder of this repository.
50 SYSFW_PATH ?= ti-sci-firmware-${SOC}-gp.bin
51 SYSFW_HS_PATH ?= ti-sci-firmware-${SOC}-hs-enc.bin
52 SYSFW_HS_INNER_CERT_PATH ?= ti-sci-firmware-${SOC}-hs-cert.bin
53 SYSFW_HS_CERTS_PATH ?= ti-sci-firmware-${SOC}-hs-certs.bin
55 # Must use FULL Git hash below, as it is used as part of an URL for direct DL
56 SYSFW_GIT_HASH ?= b41c4f097ab6f341462645f76059f48f78bbd17e
58 # URL to download SYSFW release binary from if not provided otherwise
59 SYSFW_DL_URL ?= https://git.ti.com/processor-firmware/ti-linux-firmware/blobs/raw/$(SYSFW_GIT_HASH)/ti-sysfw/$(SYSFW_PATH)
60 SYSFW_HS_DL_URL ?= https://git.ti.com/processor-firmware/ti-linux-firmware/blobs/raw/$(SYSFW_GIT_HASH)/ti-sysfw/$(SYSFW_HS_PATH)
61 SYSFW_HS_INNER_CERT_DL_URL ?= https://git.ti.com/processor-firmware/ti-linux-firmware/blobs/raw/$(SYSFW_GIT_HASH)/ti-sysfw/$(SYSFW_HS_INNER_CERT_PATH)
63 # Set HS SYSFW image signing key
64 ifdef HS
65 KEY ?= $(TI_SECURE_DEV_PKG)/keys/custMpk.pem
66 else
67 KEY ?= ti-degenerate-key.pem
68 endif
70 CROSS_COMPILE ?= arm-linux-gnueabihf-
72 CFLAGS ?= \
73         -fno-builtin \
74         -Wall \
75         -Iinclude/soc/${SOC}/
77 BINS ?= \
78         sysfw.bin \
79         board-cfg.bin \
80         pm-cfg.bin \
81         rm-cfg.bin \
82         sec-cfg.bin
84 ITB ?= sysfw.itb
85 ITS ?= $(basename $(ITB)).its
87 MKIMAGE ?= mkimage
89 .PHONY: all
90 all: $(ITB)
92 %.o: %.c
93         $(CROSS_COMPILE)gcc $(CFLAGS) -c -o $@ $<
95 %.bin: %.o
96         $(CROSS_COMPILE)objcopy -S -O binary $< $@
98 $(SYSFW_PATH):
99         @echo "Downloading SYSFW release image..."
100         wget $(SYSFW_DL_URL)
101         @echo "Download SUCCESS!"
103 $(SYSFW_HS_PATH):
104         @echo "Downloading HS SYSFW release image..."
105         wget $(SYSFW_HS_DL_URL)
106         @echo "Download SUCCESS!"
108 $(SYSFW_HS_INNER_CERT_PATH):
109         @echo "Downloading HS SYSFW release certificate..."
110         wget $(SYSFW_HS_INNER_CERT_DL_URL)
111         @echo "Download SUCCESS!"
113 ifdef HS
114 $(SYSFW_HS_CERTS_PATH): $(SYSFW_HS_INNER_CERT_PATH)
115         @echo "Signing the SYSFW inner certificate with $(KEY) key...";
116         ./gen_x509_cert.sh -d -c m3 -b $< -o $@ -l 0x40000 -k $(KEY);
118 sysfw.bin: $(SYSFW_HS_CERTS_PATH) $(SYSFW_HS_PATH)
119         cat $^ > $@
120 else
121 sysfw.bin: $(SYSFW_PATH) sysfw_version
122         @if [ -n "$(KEY)" ]; then \
123                 echo "Signing the SYSFW release image with $(KEY) key..."; \
124                 ./gen_x509_cert.sh -c m3 -b $< -o $@ -l 0x40000 -k $(KEY); \
125         else \
126                 echo "Signing the SYSFW release image with random key..."; \
127                 ./gen_x509_cert.sh -c m3 -b $< -o $@ -l 0x40000; \
128         fi
129 endif
131 $(ITS): $(BINS)
132         ./gen_its.sh $(BINS) > $@
134 $(ITB): $(ITS) $(BINS)
135         $(MKIMAGE) -f $< -r $@
137 .PHONY: sysfw_version
138 sysfw_version: $(SYSFW_PATH)
139         @echo "SYSFW Version:" `strings $(SYSFW_PATH) | grep -o 'v20[0-9][0-9]\.[0-9][0-9].*(.*'`
141 .PHONY: clean
142 clean:
143         -rm -f $(BINS)
144         -rm -f $(ITB)
145         -rm -f $(ITS)
146         -rm -f $(SYSFW_HS_CERTS_PATH)
148 .PHONY: mrproper
149 mrproper: clean
150         -rm -f $(SYSFW_PATH)
151         -rm -f $(SYSFW_HS_PATH)
152         -rm -f $(SYSFW_HS_INNER_CERT_PATH)