Merge 5.4.203 into android11-5.4-lts
Changes in 5.4.203 drm: remove drm_fb_helper_modinit powerpc/ftrace: Remove ftrace init tramp once kernel init is complete kexec_file: drop weak attribute from arch_kexec_apply_relocations[_add] net: mscc: ocelot: allow unregistered IP multicast flooding ARM: 8989/1: use .fpu assembler directives instead of assembler arguments ARM: 8990/1: use VFP assembler mnemonics in register load/store macros ARM: 8971/1: replace the sole use of a symbol with its definition crypto: arm/sha256-neon - avoid ADRL pseudo instruction crypto: arm/sha512-neon - avoid ADRL pseudo instruction ARM: 8933/1: replace Sun/Solaris style flag on section directive ARM: 8929/1: use APSR_nzcv instead of r15 as mrc operand ARM: OMAP2+: drop unnecessary adrl ARM: 9029/1: Make iwmmxt.S support Clang's integrated assembler crypto: arm - use Kconfig based compiler checks for crypto opcodes crypto: arm/ghash-ce - define fpu before fpu registers are referenced Linux 5.4.203 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I88af32308f769d0b30b66a0a6d9b0ddf2e5a49e1
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 202
|
||||
SUBLEVEL = 203
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* size immediately following the kernel, we could build this into
|
||||
* a binary blob, and concatenate the zImage using the cat command.
|
||||
*/
|
||||
.section .start,#alloc,#execinstr
|
||||
.section .start, "ax"
|
||||
.type _start, #function
|
||||
.globl _start
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* Author: Nicolas Pitre
|
||||
*/
|
||||
|
||||
.section ".start", #alloc, #execinstr
|
||||
.section ".start", "ax"
|
||||
|
||||
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
||||
orr r0, r0, #(1 << 7) @ enable big endian mode
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.section ".start", #alloc, #execinstr
|
||||
.section ".start", "ax"
|
||||
/*
|
||||
* sort out different calling conventions
|
||||
*/
|
||||
@@ -1274,7 +1274,7 @@ iflush:
|
||||
__armv5tej_mmu_cache_flush:
|
||||
tst r4, #1
|
||||
movne pc, lr
|
||||
1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate D cache
|
||||
1: mrc p15, 0, APSR_nzcv, c7, c14, 3 @ test,clean,invalidate D cache
|
||||
bne 1b
|
||||
mcr p15, 0, r0, c7, c5, 0 @ flush I cache
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain WB
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
.section .piggydata,#alloc
|
||||
.section .piggydata, "a"
|
||||
.globl input_data
|
||||
input_data:
|
||||
.incbin "arch/arm/boot/compressed/piggy_data"
|
||||
|
||||
@@ -30,7 +30,7 @@ config CRYPTO_SHA1_ARM_NEON
|
||||
|
||||
config CRYPTO_SHA1_ARM_CE
|
||||
tristate "SHA1 digest algorithm (ARM v8 Crypto Extensions)"
|
||||
depends on KERNEL_MODE_NEON
|
||||
depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
|
||||
select CRYPTO_SHA1_ARM
|
||||
select CRYPTO_HASH
|
||||
help
|
||||
@@ -39,7 +39,7 @@ config CRYPTO_SHA1_ARM_CE
|
||||
|
||||
config CRYPTO_SHA2_ARM_CE
|
||||
tristate "SHA-224/256 digest algorithm (ARM v8 Crypto Extensions)"
|
||||
depends on KERNEL_MODE_NEON
|
||||
depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
|
||||
select CRYPTO_SHA256_ARM
|
||||
select CRYPTO_HASH
|
||||
help
|
||||
@@ -115,7 +115,7 @@ config CRYPTO_AES_ARM_BS
|
||||
|
||||
config CRYPTO_AES_ARM_CE
|
||||
tristate "Accelerated AES using ARMv8 Crypto Extensions"
|
||||
depends on KERNEL_MODE_NEON
|
||||
depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
|
||||
select CRYPTO_BLKCIPHER
|
||||
select CRYPTO_LIB_AES
|
||||
select CRYPTO_SIMD
|
||||
@@ -125,7 +125,7 @@ config CRYPTO_AES_ARM_CE
|
||||
|
||||
config CRYPTO_GHASH_ARM_CE
|
||||
tristate "PMULL-accelerated GHASH using NEON/ARMv8 Crypto Extensions"
|
||||
depends on KERNEL_MODE_NEON
|
||||
depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
|
||||
select CRYPTO_HASH
|
||||
select CRYPTO_CRYPTD
|
||||
select CRYPTO_GF128MUL
|
||||
@@ -137,12 +137,14 @@ config CRYPTO_GHASH_ARM_CE
|
||||
|
||||
config CRYPTO_CRCT10DIF_ARM_CE
|
||||
tristate "CRCT10DIF digest algorithm using PMULL instructions"
|
||||
depends on KERNEL_MODE_NEON && CRC_T10DIF
|
||||
depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
|
||||
depends on CRC_T10DIF
|
||||
select CRYPTO_HASH
|
||||
|
||||
config CRYPTO_CRC32_ARM_CE
|
||||
tristate "CRC32(C) digest algorithm using CRC and/or PMULL instructions"
|
||||
depends on KERNEL_MODE_NEON && CRC32
|
||||
depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
|
||||
depends on CRC32
|
||||
select CRYPTO_HASH
|
||||
|
||||
config CRYPTO_CHACHA20_NEON
|
||||
|
||||
@@ -15,32 +15,12 @@ obj-$(CONFIG_CRYPTO_BLAKE2B_NEON) += blake2b-neon.o
|
||||
obj-$(CONFIG_CRYPTO_CHACHA20_NEON) += chacha-neon.o
|
||||
obj-$(CONFIG_CRYPTO_NHPOLY1305_NEON) += nhpoly1305-neon.o
|
||||
|
||||
ce-obj-$(CONFIG_CRYPTO_AES_ARM_CE) += aes-arm-ce.o
|
||||
ce-obj-$(CONFIG_CRYPTO_SHA1_ARM_CE) += sha1-arm-ce.o
|
||||
ce-obj-$(CONFIG_CRYPTO_SHA2_ARM_CE) += sha2-arm-ce.o
|
||||
ce-obj-$(CONFIG_CRYPTO_GHASH_ARM_CE) += ghash-arm-ce.o
|
||||
ce-obj-$(CONFIG_CRYPTO_CRCT10DIF_ARM_CE) += crct10dif-arm-ce.o
|
||||
crc-obj-$(CONFIG_CRYPTO_CRC32_ARM_CE) += crc32-arm-ce.o
|
||||
|
||||
ifneq ($(crc-obj-y)$(crc-obj-m),)
|
||||
ifeq ($(call as-instr,.arch armv8-a\n.arch_extension crc,y,n),y)
|
||||
ce-obj-y += $(crc-obj-y)
|
||||
ce-obj-m += $(crc-obj-m)
|
||||
else
|
||||
$(warning These CRC Extensions modules need binutils 2.23 or higher)
|
||||
$(warning $(crc-obj-y) $(crc-obj-m))
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(ce-obj-y)$(ce-obj-m),)
|
||||
ifeq ($(call as-instr,.fpu crypto-neon-fp-armv8,y,n),y)
|
||||
obj-y += $(ce-obj-y)
|
||||
obj-m += $(ce-obj-m)
|
||||
else
|
||||
$(warning These ARMv8 Crypto Extensions modules need binutils 2.23 or higher)
|
||||
$(warning $(ce-obj-y) $(ce-obj-m))
|
||||
endif
|
||||
endif
|
||||
obj-$(CONFIG_CRYPTO_AES_ARM_CE) += aes-arm-ce.o
|
||||
obj-$(CONFIG_CRYPTO_SHA1_ARM_CE) += sha1-arm-ce.o
|
||||
obj-$(CONFIG_CRYPTO_SHA2_ARM_CE) += sha2-arm-ce.o
|
||||
obj-$(CONFIG_CRYPTO_GHASH_ARM_CE) += ghash-arm-ce.o
|
||||
obj-$(CONFIG_CRYPTO_CRCT10DIF_ARM_CE) += crct10dif-arm-ce.o
|
||||
obj-$(CONFIG_CRYPTO_CRC32_ARM_CE) += crc32-arm-ce.o
|
||||
|
||||
aes-arm-y := aes-cipher-core.o aes-cipher-glue.o
|
||||
aes-arm-bs-y := aes-neonbs-core.o aes-neonbs-glue.o
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
#endif
|
||||
|
||||
.text
|
||||
.arch armv7-a
|
||||
.arch armv8-a
|
||||
.fpu crypto-neon-fp-armv8
|
||||
|
||||
init_crc .req r0
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/assembler.h>
|
||||
|
||||
.arch armv8-a
|
||||
.fpu crypto-neon-fp-armv8
|
||||
|
||||
SHASH .req q0
|
||||
T1 .req q1
|
||||
XL .req q2
|
||||
@@ -88,7 +91,6 @@
|
||||
T3_H .req d17
|
||||
|
||||
.text
|
||||
.fpu crypto-neon-fp-armv8
|
||||
|
||||
.macro __pmull_p64, rd, rn, rm, b1, b2, b3, b4
|
||||
vmull.p64 \rd, \rn, \rm
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <asm/assembler.h>
|
||||
|
||||
.text
|
||||
.arch armv8-a
|
||||
.fpu crypto-neon-fp-armv8
|
||||
|
||||
k0 .req q0
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <asm/assembler.h>
|
||||
|
||||
.text
|
||||
.arch armv8-a
|
||||
.fpu crypto-neon-fp-armv8
|
||||
|
||||
k0 .req q7
|
||||
|
||||
@@ -175,7 +175,6 @@ $code=<<___;
|
||||
#else
|
||||
.syntax unified
|
||||
# ifdef __thumb2__
|
||||
# define adrl adr
|
||||
.thumb
|
||||
# else
|
||||
.code 32
|
||||
@@ -471,7 +470,8 @@ sha256_block_data_order_neon:
|
||||
stmdb sp!,{r4-r12,lr}
|
||||
|
||||
sub $H,sp,#16*4+16
|
||||
adrl $Ktbl,K256
|
||||
adr $Ktbl,.Lsha256_block_data_order
|
||||
sub $Ktbl,$Ktbl,#.Lsha256_block_data_order-K256
|
||||
bic $H,$H,#15 @ align for 128-bit stores
|
||||
mov $t2,sp
|
||||
mov sp,$H @ alloca
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
#else
|
||||
.syntax unified
|
||||
# ifdef __thumb2__
|
||||
# define adrl adr
|
||||
.thumb
|
||||
# else
|
||||
.code 32
|
||||
@@ -1885,7 +1884,8 @@ sha256_block_data_order_neon:
|
||||
stmdb sp!,{r4-r12,lr}
|
||||
|
||||
sub r11,sp,#16*4+16
|
||||
adrl r14,K256
|
||||
adr r14,.Lsha256_block_data_order
|
||||
sub r14,r14,#.Lsha256_block_data_order-K256
|
||||
bic r11,r11,#15 @ align for 128-bit stores
|
||||
mov r12,sp
|
||||
mov sp,r11 @ alloca
|
||||
|
||||
@@ -212,7 +212,6 @@ $code=<<___;
|
||||
#else
|
||||
.syntax unified
|
||||
# ifdef __thumb2__
|
||||
# define adrl adr
|
||||
.thumb
|
||||
# else
|
||||
.code 32
|
||||
@@ -602,7 +601,8 @@ sha512_block_data_order_neon:
|
||||
dmb @ errata #451034 on early Cortex A8
|
||||
add $len,$inp,$len,lsl#7 @ len to point at the end of inp
|
||||
VFP_ABI_PUSH
|
||||
adrl $Ktbl,K512
|
||||
adr $Ktbl,.Lsha512_block_data_order
|
||||
sub $Ktbl,$Ktbl,.Lsha512_block_data_order-K512
|
||||
vldmia $ctx,{$A-$H} @ load context
|
||||
.Loop_neon:
|
||||
___
|
||||
|
||||
@@ -79,7 +79,6 @@
|
||||
#else
|
||||
.syntax unified
|
||||
# ifdef __thumb2__
|
||||
# define adrl adr
|
||||
.thumb
|
||||
# else
|
||||
.code 32
|
||||
@@ -543,7 +542,8 @@ sha512_block_data_order_neon:
|
||||
dmb @ errata #451034 on early Cortex A8
|
||||
add r2,r1,r2,lsl#7 @ len to point at the end of inp
|
||||
VFP_ABI_PUSH
|
||||
adrl r3,K512
|
||||
adr r3,.Lsha512_block_data_order
|
||||
sub r3,r3,.Lsha512_block_data_order-K512
|
||||
vldmia r0,{d16-d23} @ load context
|
||||
.Loop_neon:
|
||||
vshr.u64 d24,d20,#14 @ 0
|
||||
|
||||
@@ -279,10 +279,9 @@
|
||||
.endif ;\
|
||||
.popsection
|
||||
#define ALT_UP_B(label) \
|
||||
.equ up_b_offset, label - 9998b ;\
|
||||
.pushsection ".alt.smp.init", "a" ;\
|
||||
.long 9998b ;\
|
||||
W(b) . + up_b_offset ;\
|
||||
W(b) . + (label - 9998b) ;\
|
||||
.popsection
|
||||
#else
|
||||
#define ALT_SMP(instr...)
|
||||
|
||||
@@ -19,23 +19,25 @@
|
||||
|
||||
@ read all the working registers back into the VFP
|
||||
.macro VFPFLDMIA, base, tmp
|
||||
.fpu vfpv2
|
||||
#if __LINUX_ARM_ARCH__ < 6
|
||||
LDC p11, cr0, [\base],#33*4 @ FLDMIAX \base!, {d0-d15}
|
||||
fldmiax \base!, {d0-d15}
|
||||
#else
|
||||
LDC p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d0-d15}
|
||||
vldmia \base!, {d0-d15}
|
||||
#endif
|
||||
#ifdef CONFIG_VFPv3
|
||||
.fpu vfpv3
|
||||
#if __LINUX_ARM_ARCH__ <= 6
|
||||
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
||||
ldr \tmp, [\tmp, #0]
|
||||
tst \tmp, #HWCAP_VFPD32
|
||||
ldclne p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
||||
vldmiane \base!, {d16-d31}
|
||||
addeq \base, \base, #32*4 @ step over unused register space
|
||||
#else
|
||||
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
||||
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
||||
cmp \tmp, #2 @ 32 x 64bit registers?
|
||||
ldcleq p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
|
||||
vldmiaeq \base!, {d16-d31}
|
||||
addne \base, \base, #32*4 @ step over unused register space
|
||||
#endif
|
||||
#endif
|
||||
@@ -44,22 +46,23 @@
|
||||
@ write all the working registers out of the VFP
|
||||
.macro VFPFSTMIA, base, tmp
|
||||
#if __LINUX_ARM_ARCH__ < 6
|
||||
STC p11, cr0, [\base],#33*4 @ FSTMIAX \base!, {d0-d15}
|
||||
fstmiax \base!, {d0-d15}
|
||||
#else
|
||||
STC p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d0-d15}
|
||||
vstmia \base!, {d0-d15}
|
||||
#endif
|
||||
#ifdef CONFIG_VFPv3
|
||||
.fpu vfpv3
|
||||
#if __LINUX_ARM_ARCH__ <= 6
|
||||
ldr \tmp, =elf_hwcap @ may not have MVFR regs
|
||||
ldr \tmp, [\tmp, #0]
|
||||
tst \tmp, #HWCAP_VFPD32
|
||||
stclne p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
||||
vstmiane \base!, {d16-d31}
|
||||
addeq \base, \base, #32*4 @ step over unused register space
|
||||
#else
|
||||
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
|
||||
and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field
|
||||
cmp \tmp, #2 @ 32 x 64bit registers?
|
||||
stcleq p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
|
||||
vstmiaeq \base!, {d16-d31}
|
||||
addne \base, \base, #32*4 @ step over unused register space
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/assembler.h>
|
||||
#include "iwmmxt.h"
|
||||
|
||||
#if defined(CONFIG_CPU_PJ4) || defined(CONFIG_CPU_PJ4B)
|
||||
#define PJ4(code...) code
|
||||
@@ -113,33 +114,33 @@ concan_save:
|
||||
|
||||
concan_dump:
|
||||
|
||||
wstrw wCSSF, [r1, #MMX_WCSSF]
|
||||
wstrw wCASF, [r1, #MMX_WCASF]
|
||||
wstrw wCGR0, [r1, #MMX_WCGR0]
|
||||
wstrw wCGR1, [r1, #MMX_WCGR1]
|
||||
wstrw wCGR2, [r1, #MMX_WCGR2]
|
||||
wstrw wCGR3, [r1, #MMX_WCGR3]
|
||||
wstrw wCSSF, r1, MMX_WCSSF
|
||||
wstrw wCASF, r1, MMX_WCASF
|
||||
wstrw wCGR0, r1, MMX_WCGR0
|
||||
wstrw wCGR1, r1, MMX_WCGR1
|
||||
wstrw wCGR2, r1, MMX_WCGR2
|
||||
wstrw wCGR3, r1, MMX_WCGR3
|
||||
|
||||
1: @ MUP? wRn
|
||||
tst r2, #0x2
|
||||
beq 2f
|
||||
|
||||
wstrd wR0, [r1, #MMX_WR0]
|
||||
wstrd wR1, [r1, #MMX_WR1]
|
||||
wstrd wR2, [r1, #MMX_WR2]
|
||||
wstrd wR3, [r1, #MMX_WR3]
|
||||
wstrd wR4, [r1, #MMX_WR4]
|
||||
wstrd wR5, [r1, #MMX_WR5]
|
||||
wstrd wR6, [r1, #MMX_WR6]
|
||||
wstrd wR7, [r1, #MMX_WR7]
|
||||
wstrd wR8, [r1, #MMX_WR8]
|
||||
wstrd wR9, [r1, #MMX_WR9]
|
||||
wstrd wR10, [r1, #MMX_WR10]
|
||||
wstrd wR11, [r1, #MMX_WR11]
|
||||
wstrd wR12, [r1, #MMX_WR12]
|
||||
wstrd wR13, [r1, #MMX_WR13]
|
||||
wstrd wR14, [r1, #MMX_WR14]
|
||||
wstrd wR15, [r1, #MMX_WR15]
|
||||
wstrd wR0, r1, MMX_WR0
|
||||
wstrd wR1, r1, MMX_WR1
|
||||
wstrd wR2, r1, MMX_WR2
|
||||
wstrd wR3, r1, MMX_WR3
|
||||
wstrd wR4, r1, MMX_WR4
|
||||
wstrd wR5, r1, MMX_WR5
|
||||
wstrd wR6, r1, MMX_WR6
|
||||
wstrd wR7, r1, MMX_WR7
|
||||
wstrd wR8, r1, MMX_WR8
|
||||
wstrd wR9, r1, MMX_WR9
|
||||
wstrd wR10, r1, MMX_WR10
|
||||
wstrd wR11, r1, MMX_WR11
|
||||
wstrd wR12, r1, MMX_WR12
|
||||
wstrd wR13, r1, MMX_WR13
|
||||
wstrd wR14, r1, MMX_WR14
|
||||
wstrd wR15, r1, MMX_WR15
|
||||
|
||||
2: teq r0, #0 @ anything to load?
|
||||
reteq lr @ if not, return
|
||||
@@ -147,30 +148,30 @@ concan_dump:
|
||||
concan_load:
|
||||
|
||||
@ Load wRn
|
||||
wldrd wR0, [r0, #MMX_WR0]
|
||||
wldrd wR1, [r0, #MMX_WR1]
|
||||
wldrd wR2, [r0, #MMX_WR2]
|
||||
wldrd wR3, [r0, #MMX_WR3]
|
||||
wldrd wR4, [r0, #MMX_WR4]
|
||||
wldrd wR5, [r0, #MMX_WR5]
|
||||
wldrd wR6, [r0, #MMX_WR6]
|
||||
wldrd wR7, [r0, #MMX_WR7]
|
||||
wldrd wR8, [r0, #MMX_WR8]
|
||||
wldrd wR9, [r0, #MMX_WR9]
|
||||
wldrd wR10, [r0, #MMX_WR10]
|
||||
wldrd wR11, [r0, #MMX_WR11]
|
||||
wldrd wR12, [r0, #MMX_WR12]
|
||||
wldrd wR13, [r0, #MMX_WR13]
|
||||
wldrd wR14, [r0, #MMX_WR14]
|
||||
wldrd wR15, [r0, #MMX_WR15]
|
||||
wldrd wR0, r0, MMX_WR0
|
||||
wldrd wR1, r0, MMX_WR1
|
||||
wldrd wR2, r0, MMX_WR2
|
||||
wldrd wR3, r0, MMX_WR3
|
||||
wldrd wR4, r0, MMX_WR4
|
||||
wldrd wR5, r0, MMX_WR5
|
||||
wldrd wR6, r0, MMX_WR6
|
||||
wldrd wR7, r0, MMX_WR7
|
||||
wldrd wR8, r0, MMX_WR8
|
||||
wldrd wR9, r0, MMX_WR9
|
||||
wldrd wR10, r0, MMX_WR10
|
||||
wldrd wR11, r0, MMX_WR11
|
||||
wldrd wR12, r0, MMX_WR12
|
||||
wldrd wR13, r0, MMX_WR13
|
||||
wldrd wR14, r0, MMX_WR14
|
||||
wldrd wR15, r0, MMX_WR15
|
||||
|
||||
@ Load wCx
|
||||
wldrw wCSSF, [r0, #MMX_WCSSF]
|
||||
wldrw wCASF, [r0, #MMX_WCASF]
|
||||
wldrw wCGR0, [r0, #MMX_WCGR0]
|
||||
wldrw wCGR1, [r0, #MMX_WCGR1]
|
||||
wldrw wCGR2, [r0, #MMX_WCGR2]
|
||||
wldrw wCGR3, [r0, #MMX_WCGR3]
|
||||
wldrw wCSSF, r0, MMX_WCSSF
|
||||
wldrw wCASF, r0, MMX_WCASF
|
||||
wldrw wCGR0, r0, MMX_WCGR0
|
||||
wldrw wCGR1, r0, MMX_WCGR1
|
||||
wldrw wCGR2, r0, MMX_WCGR2
|
||||
wldrw wCGR3, r0, MMX_WCGR3
|
||||
|
||||
@ clear CUP/MUP (only if r1 != 0)
|
||||
teq r1, #0
|
||||
|
||||
47
arch/arm/kernel/iwmmxt.h
Normal file
47
arch/arm/kernel/iwmmxt.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
#ifndef __IWMMXT_H__
|
||||
#define __IWMMXT_H__
|
||||
|
||||
.irp b, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
|
||||
.set .LwR\b, \b
|
||||
.set .Lr\b, \b
|
||||
.endr
|
||||
|
||||
.set .LwCSSF, 0x2
|
||||
.set .LwCASF, 0x3
|
||||
.set .LwCGR0, 0x8
|
||||
.set .LwCGR1, 0x9
|
||||
.set .LwCGR2, 0xa
|
||||
.set .LwCGR3, 0xb
|
||||
|
||||
.macro wldrd, reg:req, base:req, offset:req
|
||||
.inst 0xedd00100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
|
||||
.endm
|
||||
|
||||
.macro wldrw, reg:req, base:req, offset:req
|
||||
.inst 0xfd900100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
|
||||
.endm
|
||||
|
||||
.macro wstrd, reg:req, base:req, offset:req
|
||||
.inst 0xedc00100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
|
||||
.endm
|
||||
|
||||
.macro wstrw, reg:req, base:req, offset:req
|
||||
.inst 0xfd800100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
|
||||
.endm
|
||||
|
||||
#ifdef __clang__
|
||||
|
||||
#define wCon c1
|
||||
|
||||
.macro tmrc, dest:req, control:req
|
||||
mrc p1, 0, \dest, \control, c0, 0
|
||||
.endm
|
||||
|
||||
.macro tmcr, control:req, src:req
|
||||
mcr p1, 0, \src, \control, c0, 0
|
||||
.endm
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -72,7 +72,7 @@ ENTRY(enable_omap3630_toggle_l2_on_restore)
|
||||
stmfd sp!, {lr} @ save registers on stack
|
||||
/* Setup so that we will disable and enable l2 */
|
||||
mov r1, #0x1
|
||||
adrl r3, l2dis_3630_offset @ may be too distant for plain adr
|
||||
adr r3, l2dis_3630_offset
|
||||
ldr r2, [r3] @ value for offset
|
||||
str r1, [r2, r3] @ write to l2dis_3630
|
||||
ldmfd sp!, {pc} @ restore regs and return
|
||||
|
||||
@@ -491,7 +491,7 @@ cpu_arm1020_name:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm1020_proc_info,#object
|
||||
__arm1020_proc_info:
|
||||
|
||||
@@ -449,7 +449,7 @@ arm1020e_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm1020e_proc_info,#object
|
||||
__arm1020e_proc_info:
|
||||
|
||||
@@ -443,7 +443,7 @@ arm1022_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm1022_proc_info,#object
|
||||
__arm1022_proc_info:
|
||||
|
||||
@@ -138,7 +138,7 @@ ENTRY(arm1026_flush_kern_cache_all)
|
||||
mov ip, #0
|
||||
__flush_whole_cache:
|
||||
#ifndef CONFIG_CPU_DCACHE_DISABLE
|
||||
1: mrc p15, 0, r15, c7, c14, 3 @ test, clean, invalidate
|
||||
1: mrc p15, 0, APSR_nzcv, c7, c14, 3 @ test, clean, invalidate
|
||||
bne 1b
|
||||
#endif
|
||||
tst r2, #VM_EXEC
|
||||
@@ -363,7 +363,7 @@ ENTRY(cpu_arm1026_switch_mm)
|
||||
#ifdef CONFIG_MMU
|
||||
mov r1, #0
|
||||
#ifndef CONFIG_CPU_DCACHE_DISABLE
|
||||
1: mrc p15, 0, r15, c7, c14, 3 @ test, clean, invalidate
|
||||
1: mrc p15, 0, APSR_nzcv, c7, c14, 3 @ test, clean, invalidate
|
||||
bne 1b
|
||||
#endif
|
||||
#ifndef CONFIG_CPU_ICACHE_DISABLE
|
||||
@@ -437,7 +437,7 @@ arm1026_crval:
|
||||
string cpu_arm1026_name, "ARM1026EJ-S"
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm1026_proc_info,#object
|
||||
__arm1026_proc_info:
|
||||
|
||||
@@ -172,7 +172,7 @@ arm720_crval:
|
||||
* See <asm/procinfo.h> for a definition of this structure.
|
||||
*/
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req
|
||||
.type __\name\()_proc_info,#object
|
||||
|
||||
@@ -128,7 +128,7 @@ __arm740_setup:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
.type __arm740_proc_info,#object
|
||||
__arm740_proc_info:
|
||||
.long 0x41807400
|
||||
|
||||
@@ -72,7 +72,7 @@ __arm7tdmi_setup:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \
|
||||
extra_hwcaps=0
|
||||
|
||||
@@ -434,7 +434,7 @@ arm920_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm920_proc_info,#object
|
||||
__arm920_proc_info:
|
||||
|
||||
@@ -412,7 +412,7 @@ arm922_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm922_proc_info,#object
|
||||
__arm922_proc_info:
|
||||
|
||||
@@ -477,7 +477,7 @@ arm925_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
|
||||
.type __\name\()_proc_info,#object
|
||||
|
||||
@@ -131,7 +131,7 @@ __flush_whole_cache:
|
||||
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
|
||||
mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache
|
||||
#else
|
||||
1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate
|
||||
1: mrc p15, 0, APSR_nzcv, c7, c14, 3 @ test,clean,invalidate
|
||||
bne 1b
|
||||
#endif
|
||||
tst r2, #VM_EXEC
|
||||
@@ -358,7 +358,7 @@ ENTRY(cpu_arm926_switch_mm)
|
||||
mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache
|
||||
#else
|
||||
@ && 'Clean & Invalidate whole DCache'
|
||||
1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate
|
||||
1: mrc p15, 0, APSR_nzcv, c7, c14, 3 @ test,clean,invalidate
|
||||
bne 1b
|
||||
#endif
|
||||
mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
|
||||
@@ -460,7 +460,7 @@ arm926_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm926_proc_info,#object
|
||||
__arm926_proc_info:
|
||||
|
||||
@@ -340,7 +340,7 @@ __arm940_setup:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __arm940_proc_info,#object
|
||||
__arm940_proc_info:
|
||||
|
||||
@@ -395,7 +395,7 @@ __arm946_setup:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
.type __arm946_proc_info,#object
|
||||
__arm946_proc_info:
|
||||
.long 0x41009460
|
||||
|
||||
@@ -66,7 +66,7 @@ __arm9tdmi_setup:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
|
||||
.type __\name\()_proc_info, #object
|
||||
|
||||
@@ -185,7 +185,7 @@ fa526_cr1_set:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __fa526_proc_info,#object
|
||||
__fa526_proc_info:
|
||||
|
||||
@@ -571,7 +571,7 @@ feroceon_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req
|
||||
.type __\name\()_proc_info,#object
|
||||
|
||||
@@ -416,7 +416,7 @@ mohawk_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __88sv331x_proc_info,#object
|
||||
__88sv331x_proc_info:
|
||||
|
||||
@@ -196,7 +196,7 @@ sa110_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.type __sa110_proc_info,#object
|
||||
__sa110_proc_info:
|
||||
|
||||
@@ -239,7 +239,7 @@ sa1100_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
|
||||
.type __\name\()_proc_info,#object
|
||||
|
||||
@@ -261,7 +261,7 @@ v6_crval:
|
||||
string cpu_elf_name, "v6"
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
/*
|
||||
* Match any ARMv6 processor core.
|
||||
|
||||
@@ -644,7 +644,7 @@ __v7_setup_stack:
|
||||
string cpu_elf_name, "v7"
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
/*
|
||||
* Standard v7 proc info content
|
||||
|
||||
@@ -93,7 +93,7 @@ ENTRY(cpu_cm7_proc_fin)
|
||||
ret lr
|
||||
ENDPROC(cpu_cm7_proc_fin)
|
||||
|
||||
.section ".init.text", #alloc, #execinstr
|
||||
.section ".init.text", "ax"
|
||||
|
||||
__v7m_cm7_setup:
|
||||
mov r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP)
|
||||
@@ -177,7 +177,7 @@ ENDPROC(__v7m_setup)
|
||||
string cpu_elf_name "v7m"
|
||||
string cpu_v7m_name "ARMv7-M"
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro __v7m_proc name, initfunc, cache_fns = nop_cache_fns, hwcaps = 0, proc_fns = v7m_processor_functions
|
||||
.long 0 /* proc_info_list.__cpu_mm_mmu_flags */
|
||||
|
||||
@@ -496,7 +496,7 @@ xsc3_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req
|
||||
.type __\name\()_proc_info,#object
|
||||
|
||||
@@ -610,7 +610,7 @@ xscale_crval:
|
||||
|
||||
.align
|
||||
|
||||
.section ".proc.info.init", #alloc
|
||||
.section ".proc.info.init", "a"
|
||||
|
||||
.macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
|
||||
.type __\name\()_proc_info,#object
|
||||
|
||||
@@ -8,6 +8,4 @@
|
||||
# ccflags-y := -DDEBUG
|
||||
# asflags-y := -DDEBUG
|
||||
|
||||
KBUILD_AFLAGS :=$(KBUILD_AFLAGS:-msoft-float=-Wa,-mfpu=softvfp+vfp -mfloat-abi=soft)
|
||||
|
||||
obj-y += vfpmodule.o entry.o vfphw.o vfpsingle.o vfpdouble.o
|
||||
|
||||
@@ -253,11 +253,14 @@ vfp_current_hw_state_address:
|
||||
|
||||
ENTRY(vfp_get_float)
|
||||
tbl_branch r0, r3, #3
|
||||
.fpu vfpv2
|
||||
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||
1: mrc p10, 0, r0, c\dr, c0, 0 @ fmrs r0, s0
|
||||
1: vmov r0, s\dr
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
1: mrc p10, 0, r0, c\dr, c0, 4 @ fmrs r0, s1
|
||||
.endr
|
||||
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
|
||||
1: vmov r0, s\dr
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
.endr
|
||||
@@ -265,11 +268,14 @@ ENDPROC(vfp_get_float)
|
||||
|
||||
ENTRY(vfp_put_float)
|
||||
tbl_branch r1, r3, #3
|
||||
.fpu vfpv2
|
||||
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||
1: mcr p10, 0, r0, c\dr, c0, 0 @ fmsr r0, s0
|
||||
1: vmov s\dr, r0
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
1: mcr p10, 0, r0, c\dr, c0, 4 @ fmsr r0, s1
|
||||
.endr
|
||||
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
|
||||
1: vmov s\dr, r0
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
.endr
|
||||
@@ -277,15 +283,17 @@ ENDPROC(vfp_put_float)
|
||||
|
||||
ENTRY(vfp_get_double)
|
||||
tbl_branch r0, r3, #3
|
||||
.fpu vfpv2
|
||||
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||
1: fmrrd r0, r1, d\dr
|
||||
1: vmov r0, r1, d\dr
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
.endr
|
||||
#ifdef CONFIG_VFPv3
|
||||
@ d16 - d31 registers
|
||||
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||
1: mrrc p11, 3, r0, r1, c\dr @ fmrrd r0, r1, d\dr
|
||||
.fpu vfpv3
|
||||
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
|
||||
1: vmov r0, r1, d\dr
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
.endr
|
||||
@@ -299,15 +307,17 @@ ENDPROC(vfp_get_double)
|
||||
|
||||
ENTRY(vfp_put_double)
|
||||
tbl_branch r2, r3, #3
|
||||
.fpu vfpv2
|
||||
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||
1: fmdrr d\dr, r0, r1
|
||||
1: vmov d\dr, r0, r1
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
.endr
|
||||
#ifdef CONFIG_VFPv3
|
||||
.fpu vfpv3
|
||||
@ d16 - d31 registers
|
||||
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||
1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr
|
||||
.irp dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
|
||||
1: vmov d\dr, r0, r1
|
||||
ret lr
|
||||
.org 1b + 8
|
||||
.endr
|
||||
|
||||
@@ -96,7 +96,7 @@ static inline bool arch_syscall_match_sym_name(const char *sym, const char *name
|
||||
#endif /* PPC64_ELF_ABI_v1 */
|
||||
#endif /* CONFIG_FTRACE_SYSCALLS */
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#if defined(CONFIG_PPC64) && defined(CONFIG_FUNCTION_TRACER)
|
||||
#include <asm/paca.h>
|
||||
|
||||
static inline void this_cpu_disable_ftrace(void)
|
||||
@@ -108,9 +108,12 @@ static inline void this_cpu_enable_ftrace(void)
|
||||
{
|
||||
get_paca()->ftrace_enabled = 1;
|
||||
}
|
||||
|
||||
void ftrace_free_init_tramp(void);
|
||||
#else /* CONFIG_PPC64 */
|
||||
static inline void this_cpu_disable_ftrace(void) { }
|
||||
static inline void this_cpu_enable_ftrace(void) { }
|
||||
static inline void ftrace_free_init_tramp(void) { }
|
||||
#endif /* CONFIG_PPC64 */
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
||||
@@ -328,9 +328,7 @@ static int setup_mcount_compiler_tramp(unsigned long tramp)
|
||||
|
||||
/* Is this a known long jump tramp? */
|
||||
for (i = 0; i < NUM_FTRACE_TRAMPS; i++)
|
||||
if (!ftrace_tramps[i])
|
||||
break;
|
||||
else if (ftrace_tramps[i] == tramp)
|
||||
if (ftrace_tramps[i] == tramp)
|
||||
return 0;
|
||||
|
||||
/* Is this a known plt tramp? */
|
||||
@@ -868,6 +866,17 @@ void arch_ftrace_update_code(int command)
|
||||
|
||||
extern unsigned int ftrace_tramp_text[], ftrace_tramp_init[];
|
||||
|
||||
void ftrace_free_init_tramp(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NUM_FTRACE_TRAMPS && ftrace_tramps[i]; i++)
|
||||
if (ftrace_tramps[i] == (unsigned long)ftrace_tramp_init) {
|
||||
ftrace_tramps[i] = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int __init ftrace_dyn_arch_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
#include <asm/fixmap.h>
|
||||
#include <asm/swiotlb.h>
|
||||
#include <asm/rtas.h>
|
||||
#include <asm/ftrace.h>
|
||||
|
||||
#include <mm/mmu_decl.h>
|
||||
|
||||
@@ -346,6 +347,7 @@ void free_initmem(void)
|
||||
mark_initmem_nx();
|
||||
init_mem_is_free = true;
|
||||
free_initmem_default(POISON_FREE_INITMEM);
|
||||
ftrace_free_init_tramp();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
#ifndef _S390_KEXEC_H
|
||||
#define _S390_KEXEC_H
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/setup.h>
|
||||
@@ -83,4 +85,12 @@ struct kimage_arch {
|
||||
extern const struct kexec_file_ops s390_kexec_image_ops;
|
||||
extern const struct kexec_file_ops s390_kexec_elf_ops;
|
||||
|
||||
#ifdef CONFIG_KEXEC_FILE
|
||||
struct purgatory_info;
|
||||
int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
|
||||
Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec,
|
||||
const Elf_Shdr *symtab);
|
||||
#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
|
||||
#endif
|
||||
#endif /*_S390_KEXEC_H */
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/ptrace.h>
|
||||
@@ -201,6 +202,14 @@ extern int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages,
|
||||
extern void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages);
|
||||
#define arch_kexec_pre_free_pages arch_kexec_pre_free_pages
|
||||
|
||||
#ifdef CONFIG_KEXEC_FILE
|
||||
struct purgatory_info;
|
||||
int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
|
||||
Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec,
|
||||
const Elf_Shdr *symtab);
|
||||
#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef void crash_vmclear_fn(void);
|
||||
|
||||
@@ -32,16 +32,6 @@
|
||||
#include <drm/drm_encoder.h>
|
||||
#include <drm/drm_modes.h>
|
||||
|
||||
/* drm_fb_helper.c */
|
||||
#ifdef CONFIG_DRM_FBDEV_EMULATION
|
||||
int drm_fb_helper_modinit(void);
|
||||
#else
|
||||
static inline int drm_fb_helper_modinit(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* drm_dp_aux_dev.c */
|
||||
#ifdef CONFIG_DRM_DP_AUX_CHARDEV
|
||||
int drm_dp_aux_dev_init(void);
|
||||
|
||||
@@ -2411,24 +2411,3 @@ int drm_fbdev_generic_setup(struct drm_device *dev, unsigned int preferred_bpp)
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fbdev_generic_setup);
|
||||
|
||||
/* The Kconfig DRM_KMS_HELPER selects FRAMEBUFFER_CONSOLE (if !EXPERT)
|
||||
* but the module doesn't depend on any fb console symbols. At least
|
||||
* attempt to load fbcon to avoid leaving the system without a usable console.
|
||||
*/
|
||||
int __init drm_fb_helper_modinit(void)
|
||||
{
|
||||
#if defined(CONFIG_FRAMEBUFFER_CONSOLE_MODULE) && !defined(CONFIG_EXPERT)
|
||||
const char name[] = "fbcon";
|
||||
struct module *fbcon;
|
||||
|
||||
mutex_lock(&module_mutex);
|
||||
fbcon = find_module(name);
|
||||
mutex_unlock(&module_mutex);
|
||||
|
||||
if (!fbcon)
|
||||
request_module_nowait(name);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_helper_modinit);
|
||||
|
||||
@@ -64,19 +64,18 @@ MODULE_PARM_DESC(edid_firmware,
|
||||
|
||||
static int __init drm_kms_helper_init(void)
|
||||
{
|
||||
int ret;
|
||||
/*
|
||||
* The Kconfig DRM_KMS_HELPER selects FRAMEBUFFER_CONSOLE (if !EXPERT)
|
||||
* but the module doesn't depend on any fb console symbols. At least
|
||||
* attempt to load fbcon to avoid leaving the system without a usable
|
||||
* console.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_DRM_FBDEV_EMULATION) &&
|
||||
IS_MODULE(CONFIG_FRAMEBUFFER_CONSOLE) &&
|
||||
!IS_ENABLED(CONFIG_EXPERT))
|
||||
request_module_nowait("fbcon");
|
||||
|
||||
/* Call init functions from specific kms helpers here */
|
||||
ret = drm_fb_helper_modinit();
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
ret = drm_dp_aux_dev_init();
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
out:
|
||||
return ret;
|
||||
return drm_dp_aux_dev_init();
|
||||
}
|
||||
|
||||
static void __exit drm_kms_helper_exit(void)
|
||||
|
||||
@@ -2153,8 +2153,12 @@ int ocelot_init(struct ocelot *ocelot)
|
||||
ocelot_write_rix(ocelot,
|
||||
ANA_PGID_PGID_PGID(GENMASK(ocelot->num_phys_ports, 0)),
|
||||
ANA_PGID_PGID, PGID_MC);
|
||||
ocelot_write_rix(ocelot, 0, ANA_PGID_PGID, PGID_MCIPV4);
|
||||
ocelot_write_rix(ocelot, 0, ANA_PGID_PGID, PGID_MCIPV6);
|
||||
ocelot_write_rix(ocelot,
|
||||
ANA_PGID_PGID_PGID(GENMASK(ocelot->num_phys_ports, 0)),
|
||||
ANA_PGID_PGID, PGID_MCIPV4);
|
||||
ocelot_write_rix(ocelot,
|
||||
ANA_PGID_PGID_PGID(GENMASK(ocelot->num_phys_ports, 0)),
|
||||
ANA_PGID_PGID, PGID_MCIPV6);
|
||||
|
||||
/* CPU port Injection/Extraction configuration */
|
||||
ocelot_write_rix(ocelot, QSYS_SWITCH_PORT_MODE_INGRESS_DROP_MODE |
|
||||
|
||||
@@ -186,14 +186,6 @@ void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name);
|
||||
int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
|
||||
unsigned long buf_len);
|
||||
void * __weak arch_kexec_kernel_image_load(struct kimage *image);
|
||||
int __weak arch_kexec_apply_relocations_add(struct purgatory_info *pi,
|
||||
Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec,
|
||||
const Elf_Shdr *symtab);
|
||||
int __weak arch_kexec_apply_relocations(struct purgatory_info *pi,
|
||||
Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec,
|
||||
const Elf_Shdr *symtab);
|
||||
|
||||
extern int kexec_add_buffer(struct kexec_buf *kbuf);
|
||||
int kexec_locate_mem_hole(struct kexec_buf *kbuf);
|
||||
@@ -216,6 +208,44 @@ extern int crash_exclude_mem_range(struct crash_mem *mem,
|
||||
unsigned long long mend);
|
||||
extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
|
||||
void **addr, unsigned long *sz);
|
||||
|
||||
#ifndef arch_kexec_apply_relocations_add
|
||||
/*
|
||||
* arch_kexec_apply_relocations_add - apply relocations of type RELA
|
||||
* @pi: Purgatory to be relocated.
|
||||
* @section: Section relocations applying to.
|
||||
* @relsec: Section containing RELAs.
|
||||
* @symtab: Corresponding symtab.
|
||||
*
|
||||
* Return: 0 on success, negative errno on error.
|
||||
*/
|
||||
static inline int
|
||||
arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec, const Elf_Shdr *symtab)
|
||||
{
|
||||
pr_err("RELA relocation unsupported.\n");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef arch_kexec_apply_relocations
|
||||
/*
|
||||
* arch_kexec_apply_relocations - apply relocations of type REL
|
||||
* @pi: Purgatory to be relocated.
|
||||
* @section: Section relocations applying to.
|
||||
* @relsec: Section containing RELs.
|
||||
* @symtab: Corresponding symtab.
|
||||
*
|
||||
* Return: 0 on success, negative errno on error.
|
||||
*/
|
||||
static inline int
|
||||
arch_kexec_apply_relocations(struct purgatory_info *pi, Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec, const Elf_Shdr *symtab)
|
||||
{
|
||||
pr_err("REL relocation unsupported.\n");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
#endif
|
||||
#endif /* CONFIG_KEXEC_FILE */
|
||||
|
||||
#ifdef CONFIG_KEXEC_ELF
|
||||
|
||||
@@ -107,40 +107,6 @@ int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* arch_kexec_apply_relocations_add - apply relocations of type RELA
|
||||
* @pi: Purgatory to be relocated.
|
||||
* @section: Section relocations applying to.
|
||||
* @relsec: Section containing RELAs.
|
||||
* @symtab: Corresponding symtab.
|
||||
*
|
||||
* Return: 0 on success, negative errno on error.
|
||||
*/
|
||||
int __weak
|
||||
arch_kexec_apply_relocations_add(struct purgatory_info *pi, Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec, const Elf_Shdr *symtab)
|
||||
{
|
||||
pr_err("RELA relocation unsupported.\n");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
/*
|
||||
* arch_kexec_apply_relocations - apply relocations of type REL
|
||||
* @pi: Purgatory to be relocated.
|
||||
* @section: Section relocations applying to.
|
||||
* @relsec: Section containing RELs.
|
||||
* @symtab: Corresponding symtab.
|
||||
*
|
||||
* Return: 0 on success, negative errno on error.
|
||||
*/
|
||||
int __weak
|
||||
arch_kexec_apply_relocations(struct purgatory_info *pi, Elf_Shdr *section,
|
||||
const Elf_Shdr *relsec, const Elf_Shdr *symtab)
|
||||
{
|
||||
pr_err("REL relocation unsupported.\n");
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
/*
|
||||
* Free up memory used by kernel, initrd, and command line. This is temporary
|
||||
* memory allocation which is not needed any more after these buffers have
|
||||
|
||||
Reference in New Issue
Block a user