mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-17 14:16:00 -05:00
Pull SoC device tree updates from Arnd Bergmann:
"There is very little going on with new SoC support this time, all the
new chips are variations of others that we already support, and they
are all based on ARMv8 cores:
- Mediatek MT7981B (Filogic 820) and MT7988A (Filogic 880) are
networking SoCs designed to be used in wireless routers, similar to
the already supported MT7986A (Filogic 830).
- NXP i.MX8DXP is a variant of i.MX8QXP, with two CPU cores less.
These are used in many embedded and industrial applications.
- Renesas R8A779G2 (R-Car V4H ES2.0) and R8A779H0 (R-Car V4M) are
automotive SoCs.
- TI J722S is another automotive variant of its K3 family, related to
the AM62 series.
There are a total of 7 new arm32 machines and 45 arm64 ones, including
- Two Android phones based on the old Tegra30 chip
- Two machines using Cortex-A53 SoCs from Allwinner, a mini PC and a
SoM development board
- A set-top box using Amlogic Meson G12A S905X2
- Eight embedded board using NXP i.MX6/8/9
- Three machines using Mediatek network router chips
- Ten Chromebooks, all based on Mediatek MT8186
- One development board based on Mediatek MT8395 (Genio 1200)
- Seven tablets and phones based on Qualcomm SoCs, most of them from
Samsung.
- A third development board for Qualcomm SM8550 (Snapdragon 8 Gen 2)
- Three variants of the "White Hawk" board for Renesas automotive
SoCs
- Ten Rockchips RK35xx based machines, including NAS, Tablet, Game
console and industrial form factors.
- Three evaluation boards for TI K3 based SoCs
The other changes are mainly the usual feature additions for existing
hardware, cleanups, and dtc compile time fixes. One notable change is
the inclusion of PowerVR SGX GPU nodes on TI SoCs"
* tag 'soc-dt-6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (824 commits)
riscv: dts: Move BUILTIN_DTB_SOURCE to common Kconfig
riscv: dts: starfive: jh7100: fix root clock names
ARM: dts: samsung: exynos4412: decrease memory to account for unusable region
arm64: dts: qcom: sm8250-xiaomi-elish: set rotation
arm64: dts: qcom: sm8650: Fix SPMI channels size
arm64: dts: qcom: sm8550: Fix SPMI channels size
arm64: dts: rockchip: Fix name for UART pin header on qnap-ts433
arm: dts: marvell: clearfog-gtr-l8: align port numbers with enclosure
arm: dts: marvell: clearfog-gtr-l8: add support for second sfp connector
dt-bindings: soc: renesas: renesas-soc: Add pattern for gray-hawk
dtc: Enable dtc interrupt_provider check
arm64: dts: st: add video encoder support to stm32mp255
arm64: dts: st: add video decoder support to stm32mp255
ARM: dts: stm32: enable crypto accelerator on stm32mp135f-dk
ARM: dts: stm32: enable CRC on stm32mp135f-dk
ARM: dts: stm32: add CRC on stm32mp131
ARM: dts: add stm32f769-disco-mb1166-reva09
ARM: dts: stm32: add display support on stm32f769-disco
ARM: dts: stm32: rename mmc_vcard to vcc-3v3 on stm32f769-disco
ARM: dts: stm32: add DSI support on stm32f769
...
579 lines
21 KiB
Makefile
579 lines
21 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# Backward compatibility
|
|
asflags-y += $(EXTRA_AFLAGS)
|
|
ccflags-y += $(EXTRA_CFLAGS)
|
|
cppflags-y += $(EXTRA_CPPFLAGS)
|
|
ldflags-y += $(EXTRA_LDFLAGS)
|
|
|
|
# flags that take effect in current and sub directories
|
|
KBUILD_AFLAGS += $(subdir-asflags-y)
|
|
KBUILD_CFLAGS += $(subdir-ccflags-y)
|
|
KBUILD_RUSTFLAGS += $(subdir-rustflags-y)
|
|
|
|
# Figure out what we need to build from the various variables
|
|
# ===========================================================================
|
|
|
|
# When an object is listed to be built compiled-in and modular,
|
|
# only build the compiled-in version
|
|
obj-m := $(filter-out $(obj-y),$(obj-m))
|
|
|
|
# Libraries are always collected in one lib file.
|
|
# Filter out objects already built-in
|
|
lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m)))
|
|
|
|
# Subdirectories we need to descend into
|
|
subdir-ym := $(sort $(subdir-y) $(subdir-m) \
|
|
$(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m))))
|
|
|
|
# Handle objects in subdirs:
|
|
# - If we encounter foo/ in $(obj-y), replace it by foo/built-in.a and
|
|
# foo/modules.order
|
|
# - If we encounter foo/ in $(obj-m), replace it by foo/modules.order
|
|
#
|
|
# Generate modules.order to determine modorder. Unfortunately, we don't have
|
|
# information about ordering between -y and -m subdirs. Just put -y's first.
|
|
|
|
ifdef need-modorder
|
|
obj-m := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m))
|
|
else
|
|
obj-m := $(filter-out %/, $(obj-m))
|
|
endif
|
|
|
|
ifdef need-builtin
|
|
obj-y := $(patsubst %/, %/built-in.a, $(obj-y))
|
|
else
|
|
obj-y := $(filter-out %/, $(obj-y))
|
|
endif
|
|
|
|
# Expand $(foo-objs) $(foo-y) etc. by replacing their individuals
|
|
suffix-search = $(strip $(foreach s, $3, $($(1:%$(strip $2)=%$s))))
|
|
# List composite targets that are constructed by combining other targets
|
|
multi-search = $(sort $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $m)))
|
|
# List primitive targets that are compiled from source files
|
|
real-search = $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $(call suffix-search, $m, $2, $3), $m))
|
|
|
|
# If $(foo-objs), $(foo-y), $(foo-m), or $(foo-) exists, foo.o is a composite object
|
|
multi-obj-y := $(call multi-search, $(obj-y), .o, -objs -y)
|
|
multi-obj-m := $(call multi-search, $(obj-m), .o, -objs -y -m)
|
|
multi-obj-ym := $(multi-obj-y) $(multi-obj-m)
|
|
|
|
# Replace multi-part objects by their individual parts,
|
|
# including built-in.a from subdirectories
|
|
real-obj-y := $(call real-search, $(obj-y), .o, -objs -y)
|
|
real-obj-m := $(call real-search, $(obj-m), .o, -objs -y -m)
|
|
|
|
always-y += $(always-m)
|
|
|
|
# hostprogs-always-y += foo
|
|
# ... is a shorthand for
|
|
# hostprogs += foo
|
|
# always-y += foo
|
|
hostprogs += $(hostprogs-always-y) $(hostprogs-always-m)
|
|
always-y += $(hostprogs-always-y) $(hostprogs-always-m)
|
|
|
|
# userprogs-always-y is likewise.
|
|
userprogs += $(userprogs-always-y) $(userprogs-always-m)
|
|
always-y += $(userprogs-always-y) $(userprogs-always-m)
|
|
|
|
# DTB
|
|
# If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built
|
|
dtb-$(CONFIG_OF_ALL_DTBS) += $(dtb-)
|
|
|
|
# Composite DTB (i.e. DTB constructed by overlay)
|
|
multi-dtb-y := $(call multi-search, $(dtb-y), .dtb, -dtbs)
|
|
# Primitive DTB compiled from *.dts
|
|
real-dtb-y := $(call real-search, $(dtb-y), .dtb, -dtbs)
|
|
# Base DTB that overlay is applied onto
|
|
base-dtb-y := $(filter %.dtb, $(call real-search, $(multi-dtb-y), .dtb, -dtbs))
|
|
|
|
always-y += $(dtb-y)
|
|
|
|
# Add subdir path
|
|
|
|
ifneq ($(obj),.)
|
|
extra-y := $(addprefix $(obj)/,$(extra-y))
|
|
always-y := $(addprefix $(obj)/,$(always-y))
|
|
targets := $(addprefix $(obj)/,$(targets))
|
|
obj-m := $(addprefix $(obj)/,$(obj-m))
|
|
lib-y := $(addprefix $(obj)/,$(lib-y))
|
|
real-obj-y := $(addprefix $(obj)/,$(real-obj-y))
|
|
real-obj-m := $(addprefix $(obj)/,$(real-obj-m))
|
|
multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m))
|
|
multi-dtb-y := $(addprefix $(obj)/, $(multi-dtb-y))
|
|
real-dtb-y := $(addprefix $(obj)/, $(real-dtb-y))
|
|
subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
|
|
endif
|
|
|
|
# Finds the multi-part object the current object will be linked into.
|
|
# If the object belongs to two or more multi-part objects, list them all.
|
|
modname-multi = $(sort $(foreach m,$(multi-obj-ym),\
|
|
$(if $(filter $*.o, $(call suffix-search, $m, .o, -objs -y -m)),$(m:.o=))))
|
|
|
|
__modname = $(or $(modname-multi),$(basetarget))
|
|
|
|
modname = $(subst $(space),:,$(__modname))
|
|
modfile = $(addprefix $(obj)/,$(__modname))
|
|
|
|
# target with $(obj)/ and its suffix stripped
|
|
target-stem = $(basename $(patsubst $(obj)/%,%,$@))
|
|
|
|
# These flags are needed for modversions and compiling, so we define them here
|
|
# $(modname_flags) defines KBUILD_MODNAME as the name of the module it will
|
|
# end up in (or would, if it gets compiled in)
|
|
name-fix-token = $(subst $(comma),_,$(subst -,_,$1))
|
|
name-fix = $(call stringify,$(call name-fix-token,$1))
|
|
basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget))
|
|
modname_flags = -DKBUILD_MODNAME=$(call name-fix,$(modname)) \
|
|
-D__KBUILD_MODNAME=kmod_$(call name-fix-token,$(modname))
|
|
modfile_flags = -DKBUILD_MODFILE=$(call stringify,$(modfile))
|
|
|
|
_c_flags = $(filter-out $(CFLAGS_REMOVE_$(target-stem).o), \
|
|
$(filter-out $(ccflags-remove-y), \
|
|
$(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(ccflags-y)) \
|
|
$(CFLAGS_$(target-stem).o))
|
|
_rust_flags = $(filter-out $(RUSTFLAGS_REMOVE_$(target-stem).o), \
|
|
$(filter-out $(rustflags-remove-y), \
|
|
$(KBUILD_RUSTFLAGS) $(rustflags-y)) \
|
|
$(RUSTFLAGS_$(target-stem).o))
|
|
_a_flags = $(filter-out $(AFLAGS_REMOVE_$(target-stem).o), \
|
|
$(filter-out $(asflags-remove-y), \
|
|
$(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) $(asflags-y)) \
|
|
$(AFLAGS_$(target-stem).o))
|
|
_cpp_flags = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(target-stem).lds)
|
|
|
|
#
|
|
# Enable gcov profiling flags for a file, directory or for all files depending
|
|
# on variables GCOV_PROFILE_obj.o, GCOV_PROFILE and CONFIG_GCOV_PROFILE_ALL
|
|
# (in this order)
|
|
#
|
|
ifeq ($(CONFIG_GCOV_KERNEL),y)
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \
|
|
$(CFLAGS_GCOV))
|
|
endif
|
|
|
|
#
|
|
# Enable address sanitizer flags for kernel except some files or directories
|
|
# we don't want to check (depends on variables KASAN_SANITIZE_obj.o, KASAN_SANITIZE)
|
|
#
|
|
ifeq ($(CONFIG_KASAN),y)
|
|
ifneq ($(CONFIG_KASAN_HW_TAGS),y)
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(KASAN_SANITIZE_$(basetarget).o)$(KASAN_SANITIZE)y), \
|
|
$(CFLAGS_KASAN), $(CFLAGS_KASAN_NOSANITIZE))
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CONFIG_KMSAN),y)
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(KMSAN_SANITIZE_$(basetarget).o)$(KMSAN_SANITIZE)y), \
|
|
$(CFLAGS_KMSAN))
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(KMSAN_ENABLE_CHECKS_$(basetarget).o)$(KMSAN_ENABLE_CHECKS)y), \
|
|
, -mllvm -msan-disable-checks=1)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_UBSAN),y)
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(UBSAN_SANITIZE_$(basetarget).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)), \
|
|
$(CFLAGS_UBSAN))
|
|
endif
|
|
|
|
ifeq ($(CONFIG_KCOV),y)
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(KCOV_INSTRUMENT_$(basetarget).o)$(KCOV_INSTRUMENT)$(CONFIG_KCOV_INSTRUMENT_ALL)), \
|
|
$(CFLAGS_KCOV))
|
|
endif
|
|
|
|
#
|
|
# Enable KCSAN flags except some files or directories we don't want to check
|
|
# (depends on variables KCSAN_SANITIZE_obj.o, KCSAN_SANITIZE)
|
|
#
|
|
ifeq ($(CONFIG_KCSAN),y)
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(KCSAN_SANITIZE_$(basetarget).o)$(KCSAN_SANITIZE)y), \
|
|
$(CFLAGS_KCSAN))
|
|
# Some uninstrumented files provide implied barriers required to avoid false
|
|
# positives: set KCSAN_INSTRUMENT_BARRIERS for barrier instrumentation only.
|
|
_c_flags += $(if $(patsubst n%,, \
|
|
$(KCSAN_INSTRUMENT_BARRIERS_$(basetarget).o)$(KCSAN_INSTRUMENT_BARRIERS)n), \
|
|
-D__KCSAN_INSTRUMENT_BARRIERS__)
|
|
endif
|
|
|
|
# $(srctree)/$(src) for including checkin headers from generated source files
|
|
# $(objtree)/$(obj) for including generated headers from checkin source files
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
ifdef building_out_of_srctree
|
|
_c_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
|
|
_a_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
|
|
_cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
|
|
endif
|
|
endif
|
|
|
|
part-of-module = $(if $(filter $(basename $@).o, $(real-obj-m)),y)
|
|
quiet_modtag = $(if $(part-of-module),[M], )
|
|
|
|
modkern_cflags = \
|
|
$(if $(part-of-module), \
|
|
$(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \
|
|
$(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL) $(modfile_flags))
|
|
|
|
modkern_rustflags = \
|
|
$(if $(part-of-module), \
|
|
$(KBUILD_RUSTFLAGS_MODULE) $(RUSTFLAGS_MODULE), \
|
|
$(KBUILD_RUSTFLAGS_KERNEL) $(RUSTFLAGS_KERNEL))
|
|
|
|
modkern_aflags = $(if $(part-of-module), \
|
|
$(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE), \
|
|
$(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL))
|
|
|
|
c_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
|
-include $(srctree)/include/linux/compiler_types.h \
|
|
$(_c_flags) $(modkern_cflags) \
|
|
$(basename_flags) $(modname_flags)
|
|
|
|
rust_flags = $(_rust_flags) $(modkern_rustflags) @$(objtree)/include/generated/rustc_cfg
|
|
|
|
a_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
|
$(_a_flags) $(modkern_aflags)
|
|
|
|
cpp_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
|
$(_cpp_flags)
|
|
|
|
ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F))
|
|
|
|
DTC_INCLUDE := $(srctree)/scripts/dtc/include-prefixes
|
|
|
|
dtc_cpp_flags = -Wp,-MMD,$(depfile).pre.tmp -nostdinc \
|
|
$(addprefix -I,$(DTC_INCLUDE)) \
|
|
-undef -D__DTS__
|
|
|
|
ifdef CONFIG_OBJTOOL
|
|
|
|
objtool := $(objtree)/tools/objtool/objtool
|
|
|
|
objtool-args-$(CONFIG_HAVE_JUMP_LABEL_HACK) += --hacks=jump_label
|
|
objtool-args-$(CONFIG_HAVE_NOINSTR_HACK) += --hacks=noinstr
|
|
objtool-args-$(CONFIG_MITIGATION_CALL_DEPTH_TRACKING) += --hacks=skylake
|
|
objtool-args-$(CONFIG_X86_KERNEL_IBT) += --ibt
|
|
objtool-args-$(CONFIG_FINEIBT) += --cfi
|
|
objtool-args-$(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL) += --mcount
|
|
ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL
|
|
objtool-args-$(CONFIG_HAVE_OBJTOOL_NOP_MCOUNT) += --mnop
|
|
endif
|
|
objtool-args-$(CONFIG_UNWINDER_ORC) += --orc
|
|
objtool-args-$(CONFIG_MITIGATION_RETPOLINE) += --retpoline
|
|
objtool-args-$(CONFIG_MITIGATION_RETHUNK) += --rethunk
|
|
objtool-args-$(CONFIG_MITIGATION_SLS) += --sls
|
|
objtool-args-$(CONFIG_STACK_VALIDATION) += --stackval
|
|
objtool-args-$(CONFIG_HAVE_STATIC_CALL_INLINE) += --static-call
|
|
objtool-args-$(CONFIG_HAVE_UACCESS_VALIDATION) += --uaccess
|
|
objtool-args-$(CONFIG_GCOV_KERNEL) += --no-unreachable
|
|
objtool-args-$(CONFIG_PREFIX_SYMBOLS) += --prefix=$(CONFIG_FUNCTION_PADDING_BYTES)
|
|
|
|
objtool-args = $(objtool-args-y) \
|
|
$(if $(delay-objtool), --link) \
|
|
$(if $(part-of-module), --module)
|
|
|
|
delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT))
|
|
|
|
cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool-args) $@)
|
|
cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd)
|
|
|
|
endif # CONFIG_OBJTOOL
|
|
|
|
# Useful for describing the dependency of composite objects
|
|
# Usage:
|
|
# $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add)
|
|
define multi_depend
|
|
$(foreach m, $1, \
|
|
$(eval $m: \
|
|
$(addprefix $(obj)/, $(call suffix-search, $(patsubst $(obj)/%,%,$m), $2, $3))))
|
|
endef
|
|
|
|
# Copy a file
|
|
# ===========================================================================
|
|
# 'cp' preserves permissions. If you use it to copy a file in read-only srctree,
|
|
# the copy would be read-only as well, leading to an error when executing the
|
|
# rule next time. Use 'cat' instead in order to generate a writable file.
|
|
quiet_cmd_copy = COPY $@
|
|
cmd_copy = cat $< > $@
|
|
|
|
$(obj)/%: $(src)/%_shipped
|
|
$(call cmd,copy)
|
|
|
|
# Commands useful for building a boot image
|
|
# ===========================================================================
|
|
#
|
|
# Use as following:
|
|
#
|
|
# target: source(s) FORCE
|
|
# $(if_changed,ld/objcopy/gzip)
|
|
#
|
|
# and add target to 'targets' so that we know we have to
|
|
# read in the saved command line
|
|
|
|
# Linking
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_ld = LD $@
|
|
cmd_ld = $(LD) $(ld_flags) $(real-prereqs) -o $@
|
|
|
|
# Archive
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_ar = AR $@
|
|
cmd_ar = rm -f $@; $(AR) cDPrsT $@ $(real-prereqs)
|
|
|
|
# Objcopy
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_objcopy = OBJCOPY $@
|
|
cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
|
|
|
|
# Gzip
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_gzip = GZIP $@
|
|
cmd_gzip = cat $(real-prereqs) | $(KGZIP) -n -f -9 > $@
|
|
|
|
# DTC
|
|
# ---------------------------------------------------------------------------
|
|
DTC ?= $(objtree)/scripts/dtc/dtc
|
|
DTC_FLAGS += \
|
|
-Wno-unique_unit_address
|
|
|
|
# Disable noisy checks by default
|
|
ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),)
|
|
DTC_FLAGS += -Wno-unit_address_vs_reg \
|
|
-Wno-avoid_unnecessary_addr_size \
|
|
-Wno-alias_paths \
|
|
-Wno-graph_child_address \
|
|
-Wno-simple_bus_reg
|
|
else
|
|
DTC_FLAGS += \
|
|
-Wunique_unit_address_if_enabled
|
|
endif
|
|
|
|
ifneq ($(findstring 2,$(KBUILD_EXTRA_WARN)),)
|
|
DTC_FLAGS += -Wnode_name_chars_strict \
|
|
-Wproperty_name_chars_strict \
|
|
-Wunique_unit_address
|
|
endif
|
|
|
|
DTC_FLAGS += $(DTC_FLAGS_$(basetarget))
|
|
|
|
# Set -@ if the target is a base DTB that overlay is applied onto
|
|
DTC_FLAGS += $(if $(filter $(patsubst $(obj)/%,%,$@), $(base-dtb-y)), -@)
|
|
|
|
# Generate an assembly file to wrap the output of the device tree compiler
|
|
quiet_cmd_wrap_S_dtb = WRAP $@
|
|
cmd_wrap_S_dtb = { \
|
|
symbase=__$(patsubst .%,%,$(suffix $<))_$(subst -,_,$(notdir $*)); \
|
|
echo '\#include <asm-generic/vmlinux.lds.h>'; \
|
|
echo '.section .dtb.init.rodata,"a"'; \
|
|
echo '.balign STRUCT_ALIGNMENT'; \
|
|
echo ".global $${symbase}_begin"; \
|
|
echo "$${symbase}_begin:"; \
|
|
echo '.incbin "$<" '; \
|
|
echo ".global $${symbase}_end"; \
|
|
echo "$${symbase}_end:"; \
|
|
echo '.balign STRUCT_ALIGNMENT'; \
|
|
} > $@
|
|
|
|
$(obj)/%.dtb.S: $(obj)/%.dtb FORCE
|
|
$(call if_changed,wrap_S_dtb)
|
|
|
|
$(obj)/%.dtbo.S: $(obj)/%.dtbo FORCE
|
|
$(call if_changed,wrap_S_dtb)
|
|
|
|
quiet_cmd_dtc = DTC $@
|
|
cmd_dtc = $(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
|
|
$(DTC) -o $@ -b 0 \
|
|
$(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \
|
|
-d $(depfile).dtc.tmp $(dtc-tmp) ; \
|
|
cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
|
|
|
|
quiet_cmd_fdtoverlay = DTOVL $@
|
|
cmd_fdtoverlay = $(objtree)/scripts/dtc/fdtoverlay -o $@ -i $(real-prereqs)
|
|
|
|
$(multi-dtb-y): FORCE
|
|
$(call if_changed,fdtoverlay)
|
|
$(call multi_depend, $(multi-dtb-y), .dtb, -dtbs)
|
|
|
|
ifneq ($(CHECK_DTBS)$(CHECK_DT_BINDING),)
|
|
DT_CHECKER ?= dt-validate
|
|
DT_CHECKER_FLAGS ?= $(if $(DT_SCHEMA_FILES),-l $(DT_SCHEMA_FILES),-m)
|
|
DT_BINDING_DIR := Documentation/devicetree/bindings
|
|
DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.json
|
|
|
|
quiet_cmd_dtb = DTC_CHK $@
|
|
cmd_dtb = $(cmd_dtc) ; $(DT_CHECKER) $(DT_CHECKER_FLAGS) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@ || true
|
|
else
|
|
quiet_cmd_dtb = $(quiet_cmd_dtc)
|
|
cmd_dtb = $(cmd_dtc)
|
|
endif
|
|
|
|
$(obj)/%.dtb: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE
|
|
$(call if_changed_dep,dtb)
|
|
|
|
$(obj)/%.dtbo: $(src)/%.dtso $(DTC) FORCE
|
|
$(call if_changed_dep,dtc)
|
|
|
|
dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
|
|
|
|
# Bzip2
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Bzip2 and LZMA do not include size in file... so we have to fake that;
|
|
# append the size as a 32-bit littleendian number as gzip does.
|
|
size_append = printf $(shell \
|
|
dec_size=0; \
|
|
for F in $(real-prereqs); do \
|
|
fsize=$$($(CONFIG_SHELL) $(srctree)/scripts/file-size.sh $$F); \
|
|
dec_size=$$(expr $$dec_size + $$fsize); \
|
|
done; \
|
|
printf "%08x\n" $$dec_size | \
|
|
sed 's/\(..\)/\1 /g' | { \
|
|
read ch0 ch1 ch2 ch3; \
|
|
for ch in $$ch3 $$ch2 $$ch1 $$ch0; do \
|
|
printf '%s%03o' '\\' $$((0x$$ch)); \
|
|
done; \
|
|
} \
|
|
)
|
|
|
|
quiet_cmd_file_size = GEN $@
|
|
cmd_file_size = $(size_append) > $@
|
|
|
|
quiet_cmd_bzip2 = BZIP2 $@
|
|
cmd_bzip2 = cat $(real-prereqs) | $(KBZIP2) -9 > $@
|
|
|
|
quiet_cmd_bzip2_with_size = BZIP2 $@
|
|
cmd_bzip2_with_size = { cat $(real-prereqs) | $(KBZIP2) -9; $(size_append); } > $@
|
|
|
|
# Lzma
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_lzma = LZMA $@
|
|
cmd_lzma = cat $(real-prereqs) | $(LZMA) -9 > $@
|
|
|
|
quiet_cmd_lzma_with_size = LZMA $@
|
|
cmd_lzma_with_size = { cat $(real-prereqs) | $(LZMA) -9; $(size_append); } > $@
|
|
|
|
quiet_cmd_lzo = LZO $@
|
|
cmd_lzo = cat $(real-prereqs) | $(KLZOP) -9 > $@
|
|
|
|
quiet_cmd_lzo_with_size = LZO $@
|
|
cmd_lzo_with_size = { cat $(real-prereqs) | $(KLZOP) -9; $(size_append); } > $@
|
|
|
|
quiet_cmd_lz4 = LZ4 $@
|
|
cmd_lz4 = cat $(real-prereqs) | $(LZ4) -l -c1 stdin stdout > $@
|
|
|
|
quiet_cmd_lz4_with_size = LZ4 $@
|
|
cmd_lz4_with_size = { cat $(real-prereqs) | $(LZ4) -l -c1 stdin stdout; \
|
|
$(size_append); } > $@
|
|
|
|
# U-Boot mkimage
|
|
# ---------------------------------------------------------------------------
|
|
|
|
MKIMAGE := $(srctree)/scripts/mkuboot.sh
|
|
|
|
# SRCARCH just happens to match slightly more than ARCH (on sparc), so reduces
|
|
# the number of overrides in arch makefiles
|
|
UIMAGE_ARCH ?= $(SRCARCH)
|
|
UIMAGE_COMPRESSION ?= $(or $(2),none)
|
|
UIMAGE_OPTS-y ?=
|
|
UIMAGE_TYPE ?= kernel
|
|
UIMAGE_LOADADDR ?= arch_must_set_this
|
|
UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR)
|
|
UIMAGE_NAME ?= Linux-$(KERNELRELEASE)
|
|
|
|
quiet_cmd_uimage = UIMAGE $@
|
|
cmd_uimage = $(BASH) $(MKIMAGE) -A $(UIMAGE_ARCH) -O linux \
|
|
-C $(UIMAGE_COMPRESSION) $(UIMAGE_OPTS-y) \
|
|
-T $(UIMAGE_TYPE) \
|
|
-a $(UIMAGE_LOADADDR) -e $(UIMAGE_ENTRYADDR) \
|
|
-n '$(UIMAGE_NAME)' -d $< $@
|
|
|
|
# XZ
|
|
# ---------------------------------------------------------------------------
|
|
# Use xzkern to compress the kernel image and xzmisc to compress other things.
|
|
#
|
|
# xzkern uses a big LZMA2 dictionary since it doesn't increase memory usage
|
|
# of the kernel decompressor. A BCJ filter is used if it is available for
|
|
# the target architecture. xzkern also appends uncompressed size of the data
|
|
# using size_append. The .xz format has the size information available at
|
|
# the end of the file too, but it's in more complex format and it's good to
|
|
# avoid changing the part of the boot code that reads the uncompressed size.
|
|
# Note that the bytes added by size_append will make the xz tool think that
|
|
# the file is corrupt. This is expected.
|
|
#
|
|
# xzmisc doesn't use size_append, so it can be used to create normal .xz
|
|
# files. xzmisc uses smaller LZMA2 dictionary than xzkern, because a very
|
|
# big dictionary would increase the memory usage too much in the multi-call
|
|
# decompression mode. A BCJ filter isn't used either.
|
|
quiet_cmd_xzkern = XZKERN $@
|
|
cmd_xzkern = cat $(real-prereqs) | sh $(srctree)/scripts/xz_wrap.sh > $@
|
|
|
|
quiet_cmd_xzkern_with_size = XZKERN $@
|
|
cmd_xzkern_with_size = { cat $(real-prereqs) | sh $(srctree)/scripts/xz_wrap.sh; \
|
|
$(size_append); } > $@
|
|
|
|
quiet_cmd_xzmisc = XZMISC $@
|
|
cmd_xzmisc = cat $(real-prereqs) | $(XZ) --check=crc32 --lzma2=dict=1MiB > $@
|
|
|
|
# ZSTD
|
|
# ---------------------------------------------------------------------------
|
|
# Appends the uncompressed size of the data using size_append. The .zst
|
|
# format has the size information available at the beginning of the file too,
|
|
# but it's in a more complex format and it's good to avoid changing the part
|
|
# of the boot code that reads the uncompressed size.
|
|
#
|
|
# Note that the bytes added by size_append will make the zstd tool think that
|
|
# the file is corrupt. This is expected.
|
|
#
|
|
# zstd uses a maximum window size of 8 MB. zstd22 uses a maximum window size of
|
|
# 128 MB. zstd22 is used for kernel compression because it is decompressed in a
|
|
# single pass, so zstd doesn't need to allocate a window buffer. When streaming
|
|
# decompression is used, like initramfs decompression, zstd22 should likely not
|
|
# be used because it would require zstd to allocate a 128 MB buffer.
|
|
|
|
quiet_cmd_zstd = ZSTD $@
|
|
cmd_zstd = cat $(real-prereqs) | $(ZSTD) -19 > $@
|
|
|
|
quiet_cmd_zstd22 = ZSTD22 $@
|
|
cmd_zstd22 = cat $(real-prereqs) | $(ZSTD) -22 --ultra > $@
|
|
|
|
quiet_cmd_zstd22_with_size = ZSTD22 $@
|
|
cmd_zstd22_with_size = { cat $(real-prereqs) | $(ZSTD) -22 --ultra; $(size_append); } > $@
|
|
|
|
# ASM offsets
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Default sed regexp - multiline due to syntax constraints
|
|
#
|
|
# Use [:space:] because LLVM's integrated assembler inserts <tab> around
|
|
# the .ascii directive whereas GCC keeps the <space> as-is.
|
|
define sed-offsets
|
|
's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; \
|
|
/^->/{s:->#\(.*\):/* \1 */:; \
|
|
s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
|
|
s:->::; p;}'
|
|
endef
|
|
|
|
# Use filechk to avoid rebuilds when a header changes, but the resulting file
|
|
# does not
|
|
define filechk_offsets
|
|
echo "#ifndef $2"; \
|
|
echo "#define $2"; \
|
|
echo "/*"; \
|
|
echo " * DO NOT MODIFY."; \
|
|
echo " *"; \
|
|
echo " * This file was generated by Kbuild"; \
|
|
echo " */"; \
|
|
echo ""; \
|
|
sed -ne $(sed-offsets) < $<; \
|
|
echo ""; \
|
|
echo "#endif"
|
|
endef
|