From: w00502114 <bobo.shaobowang(a)huawei.com>
backport SME feature from mainline
Alexandru Elisei (1):
arm64: Do not trap PMSNEVFR_EL1
Marc Zyngier (10):
KVM: arm64: Let vcpu_sve_pffr() handle HYP VAs
KVM: arm64: Provide KVM's own save/restore SVE primitives
KVM: arm64: Use {read,write}_sysreg_el1 to access ZCR_EL1
KVM: arm64: Introduce vcpu_sve_vq() helper
arm64: sve: Provide a conditional update accessor for ZCR_ELx
KVM: arm64: Map SVE context at EL2 when available
KVM: arm64: Rework SVE host-save/guest-restore
KVM: arm64: Save guest's ZCR_EL1 before saving the FPSIMD state
KVM: arm64: Save/restore SVE state for nVHE
KVM: arm64: Always start with clearing SME flag on load
Mark Brown (54):
arm64/sve: Remove redundant system_supports_sve() tests
arm64/sve: Add compile time checks for SVE hooks in generic functions
arm64/sve: Rework SVE access trap to convert state in registers
arm64/sve: Split _sve_flush macro into separate Z and predicate
flushes
arm64/sve: Skip flushing Z registers with 128 bit vectors
arm64/sve: Use the sve_flush macros in sve_load_from_fpsimd_state()
arm64/sve: Remove sve_load_from_fpsimd_state()
arm64/sve: Better handle failure to allocate SVE register storage
arm64/fp: Reindent fpsimd_save()
arm64/sve: Make access to FFR optional
arm64/sve: Rename find_supported_vector_length()
arm64/sve: Use accessor functions for vector lengths in thread_struct
arm64/sve: Put system wide vector length information into structs
arm64/sve: Explicitly load vector length when restoring SVE state
arm64/sve: Track vector lengths for tasks in an array
arm64/sve: Make sysctl interface for SVE reusable by SME
arm64/sve: Generalise vector length configuration prctl() for SME
arm64/sve: Minor clarification of ABI documentation
arm64: cpufeature: Always specify and use a field width for
capabilities
arm64/sme: Provide ABI documentation for SME
arm64/sme: System register and exception syndrome definitions
arm64/sme: Manually encode SME instructions
arm64: Disable fine grained traps on boot
arm64/sme: Early CPU setup for SME
arm64/sme: Basic enumeration support
arm64/sme: Identify supported SME vector lengths at boot
arm64/sme: Implement sysctl to set the default vector length
arm64/sme: Implement vector length configuration prctl()s
arm64/sme: Implement support for TPIDR2
arm64/sme: Implement SVCR context switching
arm64/sme: Implement streaming SVE context switching
arm64/sme: Implement ZA context switching
arm64/sme: Implement traps and syscall handling for SME
arm64/sme: Disable ZA and streaming mode when handling signals
arm64/sme: Implement streaming SVE signal handling
arm64/sme: Implement ZA signal handling
arm64/sme: Implement ptrace support for streaming mode SVE registers
arm64/sme: Add ptrace support for ZA
arm64/sme: Disable streaming mode and ZA when flushing CPU state
arm64/sme: Save and restore streaming mode over EFI runtime calls
arm64/sme: Provide Kconfig for SME
arm64/sme: Add ID_AA64SMFR0_EL1 to __read_sysreg_by_encoding()
arm64/sme: More sensibly define the size for the ZA register set
KVM: arm64: Hide SME system registers from guests
KVM: arm64: Trap SME usage in guest
KVM: arm64: Handle SME host state when running guests
arm64/fp: Make SVE and SME length register definition match
architecture
arm64/fp: Rename SVE and SME LEN field name to _WIDTH
arm64/sme: Drop SYS_ from SMIDR_EL1 defines
arm64/sme: Standardise bitfield names for SVCR
arm64/sme: Remove _EL0 from name of SVCR - FIXME sysreg.h
arm64/sme: Fix tests for 0b1111 value ID registers
arm64/sme: Fix SVE/SME typo in ABI documentation
arm64/sme: Fix EFI save/restore
Wan Jiabing (1):
arm64/sme: Fix NULL check after kzalloc
Xiaofei Tan (1):
arm64: sve: Provide sve_cond_update_zcr_vq fallback when !ARM64_SVE
Documentation/arm64/elf_hwcaps.rst | 34 +
Documentation/arm64/index.rst | 1 +
Documentation/arm64/sme.rst | 428 ++++++++++
Documentation/arm64/sve.rst | 72 +-
arch/arm64/Kconfig | 11 +
arch/arm64/include/asm/cpu.h | 4 +
arch/arm64/include/asm/cpucaps.h | 2 +
arch/arm64/include/asm/cpufeature.h | 25 +
arch/arm64/include/asm/esr.h | 13 +-
arch/arm64/include/asm/exception.h | 1 +
arch/arm64/include/asm/fpsimd.h | 262 ++++++-
arch/arm64/include/asm/fpsimdmacros.h | 108 ++-
arch/arm64/include/asm/hwcap.h | 8 +
arch/arm64/include/asm/kvm_arm.h | 1 +
arch/arm64/include/asm/kvm_host.h | 14 +-
arch/arm64/include/asm/kvm_hyp.h | 2 +
arch/arm64/include/asm/processor.h | 78 +-
arch/arm64/include/asm/signal_common.h | 19 +-
arch/arm64/include/asm/sysreg.h | 79 +-
arch/arm64/include/asm/thread_info.h | 4 +-
arch/arm64/include/uapi/asm/hwcap.h | 8 +
arch/arm64/include/uapi/asm/ptrace.h | 69 +-
arch/arm64/include/uapi/asm/sigcontext.h | 55 +-
arch/arm64/kernel/cpufeature.c | 282 +++++--
arch/arm64/kernel/cpuinfo.c | 13 +
arch/arm64/kernel/entry-common.c | 11 +
arch/arm64/kernel/entry-fpsimd.S | 72 +-
arch/arm64/kernel/fpsimd.c | 944 ++++++++++++++++++-----
arch/arm64/kernel/head.S | 87 +++
arch/arm64/kernel/process.c | 45 +-
arch/arm64/kernel/ptrace.c | 373 +++++++--
arch/arm64/kernel/signal.c | 175 ++++-
arch/arm64/kernel/syscall.c | 29 +-
arch/arm64/kernel/traps.c | 1 +
arch/arm64/kvm/fpsimd.c | 70 +-
arch/arm64/kvm/guest.c | 6 +-
arch/arm64/kvm/hyp/fpsimd.S | 12 +
arch/arm64/kvm/hyp/include/hyp/switch.h | 75 +-
arch/arm64/kvm/hyp/nvhe/switch.c | 38 +-
arch/arm64/kvm/hyp/vhe/switch.c | 10 +-
arch/arm64/kvm/reset.c | 14 +-
arch/arm64/kvm/sys_regs.c | 8 +-
include/uapi/linux/elf.h | 2 +
include/uapi/linux/prctl.h | 9 +
kernel/sys.c | 12 +
45 files changed, 3126 insertions(+), 460 deletions(-)
create mode 100644 Documentation/arm64/sme.rst
--
2.25.1