-
Notifications
You must be signed in to change notification settings - Fork 102
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The arm64 code allocates an internal constant to every CPU feature it can detect, distinct from the public hwcap numbers we use to expose some features to userspace. Currently this is maintained manually which is an irritating source of conflicts when working on new features, to avoid this replace the header with a simple text file listing the names we've assigned and sort it to minimise conflicts. As part of doing this we also do the Kbuild hookup required to hook up an arch tools directory and to generate header files in there. This will result in a renumbering and reordering of the existing constants, since they are all internal only the values should not be important. The reordering will impact the order in which some steps in enumeration handle features but the algorithm is not intended to depend on this and I haven't seen any issues when testing. Due to the UAO cpucap having been removed in the past we end up with ARM64_NCAPS being 1 smaller than it was before. Signed-off-by: Mark Brown <broonie@kernel.org> Reviewed-by: Mark Rutland <mark.rutland@arm.com> Tested-by: Mark Rutland <mark.rutland@arm.com> Link: https://lore.kernel.org/r/20210428121231.11219-1-broonie@kernel.org Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
- Loading branch information
Showing
6 changed files
with
132 additions
and
74 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 was deleted.
Oops, something went wrong.
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,22 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
|
||
gen := arch/$(ARCH)/include/generated | ||
kapi := $(gen)/asm | ||
|
||
kapi-hdrs-y := $(kapi)/cpucaps.h | ||
|
||
targets += $(addprefix ../../../,$(gen-y) $(kapi-hdrs-y)) | ||
|
||
PHONY += kapi | ||
|
||
kapi: $(kapi-hdrs-y) $(gen-y) | ||
|
||
# Create output directory if not already present | ||
_dummy := $(shell [ -d '$(kapi)' ] || mkdir -p '$(kapi)') | ||
|
||
quiet_cmd_gen_cpucaps = GEN $@ | ||
cmd_gen_cpucaps = mkdir -p $(dir $@) && \ | ||
$(AWK) -f $(filter-out $(PHONY),$^) > $@ | ||
|
||
$(kapi)/cpucaps.h: $(src)/gen-cpucaps.awk $(src)/cpucaps FORCE | ||
$(call if_changed,gen_cpucaps) |
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,65 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# | ||
# Internal CPU capabilities constants, keep this list sorted | ||
|
||
BTI | ||
HAS_32BIT_EL0 | ||
HAS_32BIT_EL1 | ||
HAS_ADDRESS_AUTH | ||
HAS_ADDRESS_AUTH_ARCH | ||
HAS_ADDRESS_AUTH_IMP_DEF | ||
HAS_AMU_EXTN | ||
HAS_ARMv8_4_TTL | ||
HAS_CACHE_DIC | ||
HAS_CACHE_IDC | ||
HAS_CNP | ||
HAS_CRC32 | ||
HAS_DCPODP | ||
HAS_DCPOP | ||
HAS_E0PD | ||
HAS_EPAN | ||
HAS_GENERIC_AUTH | ||
HAS_GENERIC_AUTH_ARCH | ||
HAS_GENERIC_AUTH_IMP_DEF | ||
HAS_IRQ_PRIO_MASKING | ||
HAS_LDAPR | ||
HAS_LSE_ATOMICS | ||
HAS_NO_FPSIMD | ||
HAS_NO_HW_PREFETCH | ||
HAS_PAN | ||
HAS_RAS_EXTN | ||
HAS_RNG | ||
HAS_SB | ||
HAS_STAGE2_FWB | ||
HAS_SYSREG_GIC_CPUIF | ||
HAS_TLB_RANGE | ||
HAS_VIRT_HOST_EXTN | ||
HW_DBM | ||
KVM_PROTECTED_MODE | ||
MISMATCHED_CACHE_TYPE | ||
MTE | ||
SPECTRE_V2 | ||
SPECTRE_V3A | ||
SPECTRE_V4 | ||
SSBS | ||
SVE | ||
UNMAP_KERNEL_AT_EL0 | ||
WORKAROUND_834220 | ||
WORKAROUND_843419 | ||
WORKAROUND_845719 | ||
WORKAROUND_858921 | ||
WORKAROUND_1418040 | ||
WORKAROUND_1463225 | ||
WORKAROUND_1508412 | ||
WORKAROUND_1542419 | ||
WORKAROUND_CAVIUM_23154 | ||
WORKAROUND_CAVIUM_27456 | ||
WORKAROUND_CAVIUM_30115 | ||
WORKAROUND_CAVIUM_TX2_219_PRFM | ||
WORKAROUND_CAVIUM_TX2_219_TVM | ||
WORKAROUND_CLEAN_CACHE | ||
WORKAROUND_DEVICE_LOAD_ACQUIRE | ||
WORKAROUND_NVIDIA_CARMEL_CNP | ||
WORKAROUND_QCOM_FALKOR_E1003 | ||
WORKAROUND_REPEAT_TLBI | ||
WORKAROUND_SPECULATIVE_AT |
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,40 @@ | ||
#!/bin/awk -f | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# gen-cpucaps.awk: arm64 cpucaps header generator | ||
# | ||
# Usage: awk -f gen-cpucaps.awk cpucaps.txt | ||
|
||
# Log an error and terminate | ||
function fatal(msg) { | ||
print "Error at line " NR ": " msg > "/dev/stderr" | ||
exit 1 | ||
} | ||
|
||
# skip blank lines and comment lines | ||
/^$/ { next } | ||
/^#/ { next } | ||
|
||
BEGIN { | ||
print "#ifndef __ASM_CPUCAPS_H" | ||
print "#define __ASM_CPUCAPS_H" | ||
print "" | ||
print "/* Generated file - do not edit */" | ||
cap_num = 0 | ||
print "" | ||
} | ||
|
||
/^[vA-Z0-9_]+$/ { | ||
printf("#define ARM64_%-30s\t%d\n", $0, cap_num++) | ||
next | ||
} | ||
|
||
END { | ||
printf("#define ARM64_NCAPS\t\t\t\t%d\n", cap_num) | ||
print "" | ||
print "#endif" | ||
} | ||
|
||
# Any lines not handled by previous rules are unexpected | ||
{ | ||
fatal("unhandled statement") | ||
} |