mirror of
https://github.com/Fishwaldo/opensbi.git
synced 2025-03-15 19:31:32 +00:00
Makefile: Add support for device tree compilation
Add rules to compile dts files into dtb files using the device tree compiler (dtc). A platform can specify the DTS file to compile using the platform-dtb-y variable. The flattened device tree binary file to be used for building the final polatform firmware can be specified using the new FW_PAYLOAD_FDT firmware configuration option to point to the automatically compiled FDT file. Using the existing FW_PAYLOAD_FDT_PATH configuration option is still possible and will take precedence over the FW_PAYLOAD_FDT definition. Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
This commit is contained in:
parent
f4373731e3
commit
0df8269477
4 changed files with 25 additions and 0 deletions
11
Makefile
11
Makefile
|
@ -79,6 +79,7 @@ include $(firmware-object-mks)
|
|||
lib-objs-path-y=$(foreach obj,$(lib-objs-y),$(build_dir)/lib/$(obj))
|
||||
ifdef PLATFORM
|
||||
platform-objs-path-y=$(foreach obj,$(platform-objs-y),$(build_dir)/$(platform_subdir)/$(obj))
|
||||
platform-dtb-path-y=$(foreach obj,$(platform-dtb-y),$(build_dir)/$(platform_subdir)/$(obj))
|
||||
platform-common-objs-path-y=$(foreach obj,$(platform-common-objs-y),$(build_dir)/platform/common/$(obj))
|
||||
firmware-bins-path-y=$(foreach bin,$(firmware-bins-y),$(build_dir)/$(platform_subdir)/firmware/$(bin))
|
||||
endif
|
||||
|
@ -154,6 +155,9 @@ else
|
|||
OBJCOPY ?= objcopy
|
||||
endif
|
||||
|
||||
DTC = dtc
|
||||
DTCFLAGS = -O dtb
|
||||
|
||||
# Setup functions for compilation
|
||||
define dynamic_flags
|
||||
-I$(shell dirname $(2)) -D__OBJNAME__=$(subst -,_,$(shell basename $(1) .o))
|
||||
|
@ -212,10 +216,14 @@ compile_ar = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
|
|||
compile_objcopy = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
|
||||
echo " OBJCOPY $(subst $(build_dir)/,,$(1))"; \
|
||||
$(OBJCOPY) -S -O binary $(2) $(1)
|
||||
compile_dts = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
|
||||
echo " DTC $(subst $(build_dir)/,,$(1))"; \
|
||||
$(DTC) $(DTCFLAGS) -o $(1) $(2)
|
||||
|
||||
targets-y = $(build_dir)/lib/libsbi.a
|
||||
ifdef PLATFORM
|
||||
targets-y += $(build_dir)/$(platform_subdir)/lib/libplatsbi.a
|
||||
targets-y += $(platform-dtb-path-y)
|
||||
endif
|
||||
targets-y += $(firmware-bins-path-y)
|
||||
|
||||
|
@ -265,6 +273,9 @@ $(build_dir)/$(platform_subdir)/%.dep: $(src_dir)/%.S
|
|||
$(build_dir)/$(platform_subdir)/%.o: $(src_dir)/%.S
|
||||
$(call compile_as,$@,$<)
|
||||
|
||||
$(build_dir)/%.dtb: $(src_dir)/%.dts
|
||||
$(call compile_dts,$@,$<)
|
||||
|
||||
# Rule for "make docs"
|
||||
$(build_dir)/docs/latex/refman.pdf: $(build_dir)/docs/latex/refman.tex
|
||||
$(CMD_PREFIX)mkdir -p $(build_dir)/docs
|
||||
|
|
|
@ -57,6 +57,14 @@ device tree file is specified by the platform (c.f. *FW_PAYLOAD_FDT*),
|
|||
then the firmware will expect the FDT to be passed as an argument by
|
||||
the prior booting stage.
|
||||
|
||||
* **FW_PAYLOAD_FDT** - Path to an internal flattened device tree
|
||||
binary file defined by the platform code. The file name must match the
|
||||
DTB file name specified in the platform *objects.mk* file with the
|
||||
*platform-dtb-y* entry. This option results in *FW_PAYLOAD_FDT_PATH* to
|
||||
be automatically set. Specifying *FW_PAYLOAD_FDT_PATH* on the `make`
|
||||
command line disables *FW_PAYLOAD_FDT* and the command line specified
|
||||
device tree binary file is used for building the final firmware.
|
||||
|
||||
* **FW_PAYLOAD_FDT_ADDR** - Address where the FDT passed by the prior
|
||||
booting stage or specified by the *FW_PAYLOAD_FDT_PATH* parameter and
|
||||
embedded in the *.text* section will be placed before executing the
|
||||
|
|
|
@ -8,3 +8,4 @@
|
|||
#
|
||||
|
||||
$(build_dir)/$(platform_subdir)/firmware/fw_payload.o: $(FW_PAYLOAD_PATH_FINAL)
|
||||
$(build_dir)/$(platform_subdir)/firmware/fw_payload.o: $(FW_PAYLOAD_FDT_PATH)
|
||||
|
|
|
@ -39,6 +39,11 @@ ifdef FW_PAYLOAD_ALIGN
|
|||
firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_ALIGN=$(FW_PAYLOAD_ALIGN)
|
||||
endif
|
||||
|
||||
ifndef FW_PAYLOAD_FDT_PATH
|
||||
ifdef FW_PAYLOAD_FDT
|
||||
FW_PAYLOAD_FDT_PATH=$(build_dir)/$(platform_subdir)/$(FW_PAYLOAD_FDT)
|
||||
endif
|
||||
endif
|
||||
ifdef FW_PAYLOAD_FDT_PATH
|
||||
firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_PATH=$(FW_PAYLOAD_FDT_PATH)
|
||||
endif
|
||||
|
|
Loading…
Add table
Reference in a new issue