forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
firmware: Restore support for built-in firmware
Commit 5620a0d ("firmware: delete in-kernel firmware") removed the entire firmware directory. Unfortunately it thereby also removed the support for built-in firmware. This restores the ability to build firmware directly into the kernel by pruning the original Makefile to the necessary minimum. The default for EXTRA_FIRMWARE_DIR is now the standard directory /lib/firmware/. Fixes: 5620a0d ("firmware: delete in-kernel firmware") Signed-off-by: Markus Trippelsdorf <[email protected]> Acked-by: Greg K-H <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Showing
4 changed files
with
71 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
*.gen.S | ||
*.fw | ||
*.bin | ||
*.csp | ||
*.dsp | ||
ihex2fw |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# | ||
# kbuild file for firmware/ | ||
# | ||
|
||
# Create $(fwabs) from $(CONFIG_EXTRA_FIRMWARE_DIR) -- if it doesn't have a | ||
# leading /, it's relative to $(srctree). | ||
fwdir := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE_DIR)) | ||
fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir)) | ||
|
||
fw-external-y := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE)) | ||
|
||
quiet_cmd_fwbin = MK_FW $@ | ||
cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \ | ||
FWSTR="$(subst /,_,$(subst .,_,$(subst -,_,$(patsubst \ | ||
firmware/%.gen.S,%,$@))))"; \ | ||
ASM_WORD=$(if $(CONFIG_64BIT),.quad,.long); \ | ||
ASM_ALIGN=$(if $(CONFIG_64BIT),3,2); \ | ||
PROGBITS=$(if $(CONFIG_ARM),%,@)progbits; \ | ||
echo "/* Generated by firmware/Makefile */" > $@;\ | ||
echo " .section .rodata" >>$@;\ | ||
echo " .p2align $${ASM_ALIGN}" >>$@;\ | ||
echo "_fw_$${FWSTR}_bin:" >>$@;\ | ||
echo " .incbin \"$(2)\"" >>$@;\ | ||
echo "_fw_end:" >>$@;\ | ||
echo " .section .rodata.str,\"aMS\",$${PROGBITS},1" >>$@;\ | ||
echo " .p2align $${ASM_ALIGN}" >>$@;\ | ||
echo "_fw_$${FWSTR}_name:" >>$@;\ | ||
echo " .string \"$$FWNAME\"" >>$@;\ | ||
echo " .section .builtin_fw,\"a\",$${PROGBITS}" >>$@;\ | ||
echo " .p2align $${ASM_ALIGN}" >>$@;\ | ||
echo " $${ASM_WORD} _fw_$${FWSTR}_name" >>$@;\ | ||
echo " $${ASM_WORD} _fw_$${FWSTR}_bin" >>$@;\ | ||
echo " $${ASM_WORD} _fw_end - _fw_$${FWSTR}_bin" >>$@; | ||
|
||
# One of these files will change, or come into existence, whenever | ||
# the configuration changes between 32-bit and 64-bit. The .S files | ||
# need to change when that happens. | ||
wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \ | ||
include/config/ppc32.h include/config/ppc64.h \ | ||
include/config/superh32.h include/config/superh64.h \ | ||
include/config/x86_32.h include/config/x86_64.h \ | ||
firmware/Makefile) | ||
|
||
$(patsubst %,$(obj)/%.gen.S, $(fw-external-y)): %: $(wordsize_deps) \ | ||
include/config/extra/firmware/dir.h | ||
$(call cmd,fwbin,$(fwabs)/$(patsubst $(obj)/%.gen.S,%,$@)) | ||
|
||
# The .o files depend on the binaries directly; the .S files don't. | ||
$(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/% | ||
|
||
obj-y += $(patsubst %,%.gen.o, $(fw-external-y)) | ||
|
||
ifeq ($(KBUILD_SRC),) | ||
# Makefile.build only creates subdirectories for O= builds, but external | ||
# firmware might live outside the kernel source tree | ||
_dummy := $(foreach d,$(addprefix $(obj)/,$(dir $(fw-external-y))), $(shell [ -d $(d) ] || mkdir -p $(d))) | ||
endif | ||
|
||
targets := $(patsubst $(obj)/%,%, \ | ||
$(shell find $(obj) -name \*.gen.S 2>/dev/null)) | ||
# Without this, built-in.o won't be created when it's empty, and the | ||
# final vmlinux link will fail. | ||
obj- := dummy |