ARM updates for 5.8-rc1:
- remove a now unnecessary usage of the KERNEL_DS for sys_oabi_epoll_ctl() - update my email address in a number of drivers - decompressor EFI updates from Ard Biesheuvel - module unwind section handling updates - sparsemem Kconfig cleanups - make act_mm macro respect THREAD_SIZE -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEuNNh8scc2k/wOAE+9OeQG+StrGQFAl7VacAACgkQ9OeQG+St rGRHaA//Z8m+8LnSd+sqwrlEZYVj6IdPoihOhVZRsEhp4Fb09ZENOxL06W4lynHy tPcs4YAqLyp3Xmn+pk5NuH3SBoFGPOuUxseMpQKyT2ZnA126LB/3sW+xFPSbCayY gBHT7QhX6MxJEwxCxgvp2McOs6F55rYENcjozQ+DQMiNY5MTm0fKgGgbn1kpzglz 7N2U7MR9ulXTCof3hZolQWBMOKa6LRldG7C3ajPITeOtk+vjyAPobqrkbzRDsIPV 09j6BruFQoUbuyxtycNC0x+BDotrS/NN5OyhR07eJR5R0QNDW+qn8iqrkkVQUQsr mZpTR8CelzLL2+/1CDY2KrweY13eFbDoxiTVJl9aqCdlOsJKxwk1yv4HrEcpbBoK vtKwPDxPIKxFeJSCJX3xFjg9g6mRrBJ5CItPOThVgEqNt/dsbogqXlX4UhIjXzPs DBbeQ+EEZgNg7Ws/EwXIwtM8ZPc+bZZY8fskJd0gRCjbiCtstXXNjsHRd1vZ16KM yytpDxEIB7A+6lxcnV80VSCjD++A//kVThZ5kBl+ec1HOxRSyYOGIMGUMZhuyfE8 f4xE3KVVsbqHGyh94C6tDLx73XgkmjfNx8YAgGRss+fQBoJbmwkJ0fDy4MhKlznD UnVcOXSjs7Iqih7R+icAtbIkbo1EUF5Mwu2I3SEZ/FOJmzEbbCY= =vMHE -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm Pull ARM updates from Russell King: - remove a now unnecessary usage of the KERNEL_DS for sys_oabi_epoll_ctl() - update my email address in a number of drivers - decompressor EFI updates from Ard Biesheuvel - module unwind section handling updates - sparsemem Kconfig cleanups - make act_mm macro respect THREAD_SIZE * tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm: ARM: 8980/1: Allow either FLATMEM or SPARSEMEM on the multiplatform build ARM: 8979/1: Remove redundant ARCH_SPARSEMEM_DEFAULT setting ARM: 8978/1: mm: make act_mm() respect THREAD_SIZE ARM: decompressor: run decompressor in place if loaded via UEFI ARM: decompressor: move GOT into .data for EFI enabled builds ARM: decompressor: defer loading of the contents of the LC0 structure ARM: decompressor: split off _edata and stack base into separate object ARM: decompressor: move headroom variable out of LC0 ARM: 8976/1: module: allow arch overrides for .init section names ARM: 8975/1: module: fix handling of unwind init sections ARM: 8974/1: use SPARSMEM_STATIC when SPARSEMEM is enabled ARM: 8971/1: replace the sole use of a symbol with its definition ARM: 8969/1: decompressor: simplify libfdt builds Update rmk's email address in various drivers ARM: compat: remove KERNEL_DS usage in sys_oabi_epoll_ctl()
This commit is contained in:
commit
c2b0fc847f
@ -313,6 +313,9 @@ choice
|
||||
config ARCH_MULTIPLATFORM
|
||||
bool "Allow multiple platforms to be selected"
|
||||
depends on MMU
|
||||
select ARCH_FLATMEM_ENABLE
|
||||
select ARCH_SPARSEMEM_ENABLE
|
||||
select ARCH_SELECT_MEMORY_MODEL
|
||||
select ARM_HAS_SG_CHAIN
|
||||
select ARM_PATCH_PHYS_VIRT
|
||||
select AUTO_ZRELADDR
|
||||
@ -1516,11 +1519,15 @@ config OABI_COMPAT
|
||||
config ARCH_HAS_HOLES_MEMORYMODEL
|
||||
bool
|
||||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
config ARCH_SELECT_MEMORY_MODEL
|
||||
bool
|
||||
|
||||
config ARCH_SPARSEMEM_DEFAULT
|
||||
def_bool ARCH_SPARSEMEM_ENABLE
|
||||
config ARCH_FLATMEM_ENABLE
|
||||
bool
|
||||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
bool
|
||||
select SPARSEMEM_STATIC if SPARSEMEM
|
||||
|
||||
config HAVE_ARCH_PFN_VALID
|
||||
def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM
|
||||
|
9
arch/arm/boot/compressed/.gitignore
vendored
9
arch/arm/boot/compressed/.gitignore
vendored
@ -7,12 +7,3 @@ hyp-stub.S
|
||||
piggy_data
|
||||
vmlinux
|
||||
vmlinux.lds
|
||||
|
||||
# borrowed libfdt files
|
||||
fdt.c
|
||||
fdt.h
|
||||
fdt_ro.c
|
||||
fdt_rw.c
|
||||
fdt_wip.c
|
||||
libfdt.h
|
||||
libfdt_internal.h
|
||||
|
@ -76,29 +76,30 @@ compress-$(CONFIG_KERNEL_LZMA) = lzma
|
||||
compress-$(CONFIG_KERNEL_XZ) = xzkern
|
||||
compress-$(CONFIG_KERNEL_LZ4) = lz4
|
||||
|
||||
# Borrowed libfdt files for the ATAG compatibility mode
|
||||
|
||||
libfdt := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c
|
||||
libfdt_hdrs := fdt.h libfdt.h libfdt_internal.h
|
||||
|
||||
libfdt_objs := $(addsuffix .o, $(basename $(libfdt)))
|
||||
|
||||
$(addprefix $(obj)/,$(libfdt) $(libfdt_hdrs)): $(obj)/%: $(srctree)/scripts/dtc/libfdt/%
|
||||
$(call cmd,shipped)
|
||||
|
||||
$(addprefix $(obj)/,$(libfdt_objs) atags_to_fdt.o): \
|
||||
$(addprefix $(obj)/,$(libfdt_hdrs))
|
||||
libfdt_objs := fdt_rw.o fdt_ro.o fdt_wip.o fdt.o
|
||||
|
||||
ifeq ($(CONFIG_ARM_ATAG_DTB_COMPAT),y)
|
||||
OBJS += $(libfdt_objs) atags_to_fdt.o
|
||||
endif
|
||||
|
||||
# -fstack-protector-strong triggers protection checks in this code,
|
||||
# but it is being used too early to link to meaningful stack_chk logic.
|
||||
nossp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
|
||||
$(foreach o, $(libfdt_objs) atags_to_fdt.o, \
|
||||
$(eval CFLAGS_$(o) := -I $(srctree)/scripts/dtc/libfdt $(nossp-flags-y)))
|
||||
|
||||
# These were previously generated C files. When you are building the kernel
|
||||
# with O=, make sure to remove the stale files in the output tree. Otherwise,
|
||||
# the build system wrongly compiles the stale ones.
|
||||
ifdef building_out_of_srctree
|
||||
$(shell rm -f $(addprefix $(obj)/, fdt_rw.c fdt_ro.c fdt_wip.c fdt.c))
|
||||
endif
|
||||
|
||||
targets := vmlinux vmlinux.lds piggy_data piggy.o \
|
||||
lib1funcs.o ashldi3.o bswapsdi2.o \
|
||||
head.o $(OBJS)
|
||||
|
||||
clean-files += piggy_data lib1funcs.S ashldi3.S bswapsdi2.S \
|
||||
$(libfdt) $(libfdt_hdrs) hyp-stub.S
|
||||
clean-files += piggy_data lib1funcs.S ashldi3.S bswapsdi2.S hyp-stub.S
|
||||
|
||||
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||
|
||||
@ -107,15 +108,6 @@ ORIG_CFLAGS := $(KBUILD_CFLAGS)
|
||||
KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
|
||||
endif
|
||||
|
||||
# -fstack-protector-strong triggers protection checks in this code,
|
||||
# but it is being used too early to link to meaningful stack_chk logic.
|
||||
nossp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
|
||||
CFLAGS_atags_to_fdt.o := $(nossp-flags-y)
|
||||
CFLAGS_fdt.o := $(nossp-flags-y)
|
||||
CFLAGS_fdt_ro.o := $(nossp-flags-y)
|
||||
CFLAGS_fdt_rw.o := $(nossp-flags-y)
|
||||
CFLAGS_fdt_wip.o := $(nossp-flags-y)
|
||||
|
||||
ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin \
|
||||
-I$(obj) $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
|
||||
asflags-y := -DZIMAGE
|
||||
|
@ -1,4 +1,5 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/libfdt_env.h>
|
||||
#include <asm/setup.h>
|
||||
#include <libfdt.h>
|
||||
|
||||
|
2
arch/arm/boot/compressed/fdt.c
Normal file
2
arch/arm/boot/compressed/fdt.c
Normal file
@ -0,0 +1,2 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include "../../../../lib/fdt.c"
|
2
arch/arm/boot/compressed/fdt_ro.c
Normal file
2
arch/arm/boot/compressed/fdt_ro.c
Normal file
@ -0,0 +1,2 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include "../../../../lib/fdt_ro.c"
|
2
arch/arm/boot/compressed/fdt_rw.c
Normal file
2
arch/arm/boot/compressed/fdt_rw.c
Normal file
@ -0,0 +1,2 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include "../../../../lib/fdt_rw.c"
|
2
arch/arm/boot/compressed/fdt_wip.c
Normal file
2
arch/arm/boot/compressed/fdt_wip.c
Normal file
@ -0,0 +1,2 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include "../../../../lib/fdt_wip.c"
|
@ -287,28 +287,22 @@ not_angel:
|
||||
*/
|
||||
mov r0, pc
|
||||
cmp r0, r4
|
||||
ldrcc r0, LC0+28
|
||||
ldrcc r0, .Lheadroom
|
||||
addcc r0, r0, pc
|
||||
cmpcc r4, r0
|
||||
orrcc r4, r4, #1 @ remember we skipped cache_on
|
||||
blcs cache_on
|
||||
|
||||
restart: adr r0, LC0
|
||||
ldmia r0, {r1, r2, r3, r6, r11, r12}
|
||||
ldr sp, [r0, #24]
|
||||
|
||||
/*
|
||||
* We might be running at a different address. We need
|
||||
* to fix up various pointers.
|
||||
*/
|
||||
sub r0, r0, r1 @ calculate the delta offset
|
||||
add r6, r6, r0 @ _edata
|
||||
restart: adr r0, LC1
|
||||
ldr sp, [r0]
|
||||
ldr r6, [r0, #4]
|
||||
add sp, sp, r0
|
||||
add r6, r6, r0
|
||||
|
||||
get_inflated_image_size r9, r10, lr
|
||||
|
||||
#ifndef CONFIG_ZBOOT_ROM
|
||||
/* malloc space is above the relocated stack (64k max) */
|
||||
add sp, sp, r0
|
||||
add r10, sp, #0x10000
|
||||
#else
|
||||
/*
|
||||
@ -322,9 +316,6 @@ restart: adr r0, LC0
|
||||
mov r5, #0 @ init dtb size to 0
|
||||
#ifdef CONFIG_ARM_APPENDED_DTB
|
||||
/*
|
||||
* r0 = delta
|
||||
* r2 = BSS start
|
||||
* r3 = BSS end
|
||||
* r4 = final kernel address (possibly with LSB set)
|
||||
* r5 = appended dtb size (still unknown)
|
||||
* r6 = _edata
|
||||
@ -332,8 +323,6 @@ restart: adr r0, LC0
|
||||
* r8 = atags/device tree pointer
|
||||
* r9 = size of decompressed image
|
||||
* r10 = end of this image, including bss/stack/malloc space if non XIP
|
||||
* r11 = GOT start
|
||||
* r12 = GOT end
|
||||
* sp = stack pointer
|
||||
*
|
||||
* if there are device trees (dtb) appended to zImage, advance r10 so that the
|
||||
@ -381,7 +370,6 @@ restart: adr r0, LC0
|
||||
/* temporarily relocate the stack past the DTB work space */
|
||||
add sp, sp, r5
|
||||
|
||||
stmfd sp!, {r0-r3, ip, lr}
|
||||
mov r0, r8
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
@ -400,7 +388,6 @@ restart: adr r0, LC0
|
||||
mov r2, r5
|
||||
bleq atags_to_fdt
|
||||
|
||||
ldmfd sp!, {r0-r3, ip, lr}
|
||||
sub sp, sp, r5
|
||||
#endif
|
||||
|
||||
@ -537,6 +524,10 @@ dtb_check_done:
|
||||
mov pc, r0
|
||||
|
||||
wont_overwrite:
|
||||
adr r0, LC0
|
||||
ldmia r0, {r1, r2, r3, r11, r12}
|
||||
sub r0, r0, r1 @ calculate the delta offset
|
||||
|
||||
/*
|
||||
* If delta is zero, we are running at the address we were linked at.
|
||||
* r0 = delta
|
||||
@ -660,13 +651,18 @@ not_relocated: mov r0, #0
|
||||
LC0: .word LC0 @ r1
|
||||
.word __bss_start @ r2
|
||||
.word _end @ r3
|
||||
.word _edata @ r6
|
||||
.word _got_start @ r11
|
||||
.word _got_end @ ip
|
||||
.word .L_user_stack_end @ sp
|
||||
.word _end - restart + 16384 + 1024*1024
|
||||
.size LC0, . - LC0
|
||||
|
||||
.type LC1, #object
|
||||
LC1: .word .L_user_stack_end - LC1 @ sp
|
||||
.word _edata - LC1 @ r6
|
||||
.size LC1, . - LC1
|
||||
|
||||
.Lheadroom:
|
||||
.word _end - restart + 16384 + 1024*1024
|
||||
|
||||
.Linflated_image_size_offset:
|
||||
.long (input_data_end - 4) - .
|
||||
|
||||
@ -1434,38 +1430,26 @@ reloc_code_end:
|
||||
|
||||
#ifdef CONFIG_EFI_STUB
|
||||
ENTRY(efi_enter_kernel)
|
||||
mov r7, r0 @ preserve image base
|
||||
mov r4, r1 @ preserve DT pointer
|
||||
mov r4, r0 @ preserve image base
|
||||
mov r8, r1 @ preserve DT pointer
|
||||
|
||||
mov r0, r4 @ DT start
|
||||
add r1, r4, r2 @ DT end
|
||||
mrc p15, 0, r0, c1, c0, 0 @ read SCTLR
|
||||
tst r0, #0x1 @ MMU enabled?
|
||||
orreq r4, r4, #1 @ set LSB if not
|
||||
|
||||
mov r0, r8 @ DT start
|
||||
add r1, r8, r2 @ DT end
|
||||
bl cache_clean_flush
|
||||
|
||||
mov r0, r7 @ relocated zImage
|
||||
ldr r1, =_edata @ size of zImage
|
||||
add r1, r1, r0 @ end of zImage
|
||||
bl cache_clean_flush
|
||||
adr r0, 0f @ switch to our stack
|
||||
ldr sp, [r0]
|
||||
add sp, sp, r0
|
||||
|
||||
@ The PE/COFF loader might not have cleaned the code we are
|
||||
@ running beyond the PoU, and so calling cache_off below from
|
||||
@ inside the PE/COFF loader allocated region is unsafe unless
|
||||
@ we explicitly clean it to the PoC.
|
||||
ARM( adrl r0, call_cache_fn )
|
||||
THUMB( adr r0, call_cache_fn ) @ region of code we will
|
||||
adr r1, 0f @ run with MMU off
|
||||
bl cache_clean_flush
|
||||
bl cache_off
|
||||
|
||||
@ Set parameters for booting zImage according to boot protocol
|
||||
@ put FDT address in r2, it was returned by efi_entry()
|
||||
@ r1 is the machine type, and r0 needs to be 0
|
||||
mov r0, #0
|
||||
mov r1, #0xFFFFFFFF
|
||||
mov r2, r4
|
||||
add r7, r7, #(__efi_start - start)
|
||||
mov pc, r7 @ no mode switch
|
||||
mov r5, #0 @ appended DTB size
|
||||
mov r7, #0xFFFFFFFF @ machine ID
|
||||
b wont_overwrite
|
||||
ENDPROC(efi_enter_kernel)
|
||||
0:
|
||||
0: .long .L_user_stack_end - .
|
||||
#endif
|
||||
|
||||
.align
|
||||
|
@ -1,24 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ARM_LIBFDT_ENV_H
|
||||
#define _ARM_LIBFDT_ENV_H
|
||||
|
||||
#include <linux/limits.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#define INT32_MAX S32_MAX
|
||||
#define UINT32_MAX U32_MAX
|
||||
|
||||
typedef __be16 fdt16_t;
|
||||
typedef __be32 fdt32_t;
|
||||
typedef __be64 fdt64_t;
|
||||
|
||||
#define fdt16_to_cpu(x) be16_to_cpu(x)
|
||||
#define cpu_to_fdt16(x) cpu_to_be16(x)
|
||||
#define fdt32_to_cpu(x) be32_to_cpu(x)
|
||||
#define cpu_to_fdt32(x) cpu_to_be32(x)
|
||||
#define fdt64_to_cpu(x) be64_to_cpu(x)
|
||||
#define cpu_to_fdt64(x) cpu_to_be64(x)
|
||||
|
||||
#endif
|
@ -63,9 +63,11 @@ SECTIONS
|
||||
_etext = .;
|
||||
|
||||
.got.plt : { *(.got.plt) }
|
||||
#ifndef CONFIG_EFI_STUB
|
||||
_got_start = .;
|
||||
.got : { *(.got) }
|
||||
_got_end = .;
|
||||
#endif
|
||||
|
||||
/* ensure the zImage file size is always a multiple of 64 bits */
|
||||
/* (without a dummy byte, ld just ignores the empty section) */
|
||||
@ -74,6 +76,9 @@ SECTIONS
|
||||
#ifdef CONFIG_EFI_STUB
|
||||
.data : ALIGN(4096) {
|
||||
__pecoff_data_start = .;
|
||||
_got_start = .;
|
||||
*(.got)
|
||||
_got_end = .;
|
||||
/*
|
||||
* The EFI stub always executes from RAM, and runs strictly before the
|
||||
* decompressor, so we can make an exception for its r/w data, and keep it
|
||||
|
@ -269,10 +269,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...)
|
||||
|
@ -55,6 +55,13 @@ void *module_alloc(unsigned long size)
|
||||
}
|
||||
#endif
|
||||
|
||||
bool module_init_section(const char *name)
|
||||
{
|
||||
return strstarts(name, ".init") ||
|
||||
strstarts(name, ".ARM.extab.init") ||
|
||||
strstarts(name, ".ARM.exidx.init");
|
||||
}
|
||||
|
||||
bool module_exit_section(const char *name)
|
||||
{
|
||||
return strstarts(name, ".exit") ||
|
||||
@ -409,8 +416,17 @@ module_arch_cleanup(struct module *mod)
|
||||
#ifdef CONFIG_ARM_UNWIND
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARM_SEC_MAX; i++)
|
||||
if (mod->arch.unwind[i])
|
||||
unwind_table_del(mod->arch.unwind[i]);
|
||||
for (i = 0; i < ARM_SEC_MAX; i++) {
|
||||
unwind_table_del(mod->arch.unwind[i]);
|
||||
mod->arch.unwind[i] = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void __weak module_arch_freeing_init(struct module *mod)
|
||||
{
|
||||
#ifdef CONFIG_ARM_UNWIND
|
||||
unwind_table_del(mod->arch.unwind[ARM_SEC_INIT]);
|
||||
mod->arch.unwind[ARM_SEC_INIT] = NULL;
|
||||
#endif
|
||||
}
|
||||
|
@ -253,20 +253,15 @@ asmlinkage long sys_oabi_epoll_ctl(int epfd, int op, int fd,
|
||||
{
|
||||
struct oabi_epoll_event user;
|
||||
struct epoll_event kernel;
|
||||
mm_segment_t fs;
|
||||
long ret;
|
||||
|
||||
if (op == EPOLL_CTL_DEL)
|
||||
return sys_epoll_ctl(epfd, op, fd, NULL);
|
||||
if (copy_from_user(&user, event, sizeof(user)))
|
||||
if (ep_op_has_event(op) &&
|
||||
copy_from_user(&user, event, sizeof(user)))
|
||||
return -EFAULT;
|
||||
|
||||
kernel.events = user.events;
|
||||
kernel.data = user.data;
|
||||
fs = get_fs();
|
||||
set_fs(KERNEL_DS);
|
||||
ret = sys_epoll_ctl(epfd, op, fd, &kernel);
|
||||
set_fs(fs);
|
||||
return ret;
|
||||
|
||||
return do_epoll_ctl(epfd, op, fd, &kernel, false);
|
||||
}
|
||||
|
||||
asmlinkage long sys_oabi_epoll_wait(int epfd,
|
||||
|
@ -5,6 +5,7 @@
|
||||
* VMA_VM_FLAGS
|
||||
* VM_EXEC
|
||||
*/
|
||||
#include <linux/const.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
||||
@ -30,7 +31,7 @@
|
||||
* act_mm - get current->active_mm
|
||||
*/
|
||||
.macro act_mm, rd
|
||||
bic \rd, sp, #8128
|
||||
bic \rd, sp, #(THREAD_SIZE - 1) & ~63
|
||||
bic \rd, \rd, #63
|
||||
ldr \rd, [\rd, #TI_TASK]
|
||||
.if (TSK_ACTIVE_MM > IMM12_MASK)
|
||||
|
@ -199,14 +199,8 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
|
||||
unsigned long kernel_base;
|
||||
efi_status_t status;
|
||||
|
||||
/*
|
||||
* Verify that the DRAM base address is compatible with the ARM
|
||||
* boot protocol, which determines the base of DRAM by masking
|
||||
* off the low 27 bits of the address at which the zImage is
|
||||
* loaded. These assumptions are made by the decompressor,
|
||||
* before any memory map is available.
|
||||
*/
|
||||
kernel_base = round_up(dram_base, SZ_128M);
|
||||
/* use a 16 MiB aligned base for the decompressed kernel */
|
||||
kernel_base = round_up(dram_base, SZ_16M) + TEXT_OFFSET;
|
||||
|
||||
/*
|
||||
* Note that some platforms (notably, the Raspberry Pi 2) put
|
||||
@ -215,41 +209,14 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
|
||||
* base of the kernel image is only partially used at the moment.
|
||||
* (Up to 5 pages are used for the swapper page tables)
|
||||
*/
|
||||
kernel_base += TEXT_OFFSET - 5 * PAGE_SIZE;
|
||||
|
||||
status = reserve_kernel_base(kernel_base, reserve_addr, reserve_size);
|
||||
status = reserve_kernel_base(kernel_base - 5 * PAGE_SIZE, reserve_addr,
|
||||
reserve_size);
|
||||
if (status != EFI_SUCCESS) {
|
||||
efi_err("Unable to allocate memory for uncompressed kernel.\n");
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Relocate the zImage, so that it appears in the lowest 128 MB
|
||||
* memory window.
|
||||
*/
|
||||
*image_addr = (unsigned long)image->image_base;
|
||||
*image_size = image->image_size;
|
||||
status = efi_relocate_kernel(image_addr, *image_size, *image_size,
|
||||
kernel_base + MAX_UNCOMP_KERNEL_SIZE, 0, 0);
|
||||
if (status != EFI_SUCCESS) {
|
||||
efi_err("Failed to relocate kernel.\n");
|
||||
efi_free(*reserve_size, *reserve_addr);
|
||||
*reserve_size = 0;
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check to see if we were able to allocate memory low enough
|
||||
* in memory. The kernel determines the base of DRAM from the
|
||||
* address at which the zImage is loaded.
|
||||
*/
|
||||
if (*image_addr + *image_size > dram_base + ZIMAGE_OFFSET_LIMIT) {
|
||||
efi_err("Failed to relocate kernel, no low memory available.\n");
|
||||
efi_free(*reserve_size, *reserve_addr);
|
||||
*reserve_size = 0;
|
||||
efi_free(*image_size, *image_addr);
|
||||
*image_size = 0;
|
||||
return EFI_LOAD_ERROR;
|
||||
}
|
||||
*image_addr = kernel_base;
|
||||
*image_size = 0;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@ -311,7 +311,7 @@ static void __exit armada_drm_exit(void)
|
||||
}
|
||||
module_exit(armada_drm_exit);
|
||||
|
||||
MODULE_AUTHOR("Russell King <rmk+kernel@arm.linux.org.uk>");
|
||||
MODULE_AUTHOR("Russell King <rmk+kernel@armlinux.org.uk>");
|
||||
MODULE_DESCRIPTION("Armada DRM Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:armada-drm");
|
||||
|
@ -630,7 +630,7 @@ static struct platform_driver snd_dw_hdmi_driver = {
|
||||
|
||||
module_platform_driver(snd_dw_hdmi_driver);
|
||||
|
||||
MODULE_AUTHOR("Russell King <rmk+kernel@arm.linux.org.uk>");
|
||||
MODULE_AUTHOR("Russell King <rmk+kernel@armlinux.org.uk>");
|
||||
MODULE_DESCRIPTION("Synopsis Designware HDMI AHB ALSA interface");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_ALIAS("platform:" DRIVER_NAME);
|
||||
|
@ -736,7 +736,7 @@ static void __exit etnaviv_exit(void)
|
||||
module_exit(etnaviv_exit);
|
||||
|
||||
MODULE_AUTHOR("Christian Gmeiner <christian.gmeiner@gmail.com>");
|
||||
MODULE_AUTHOR("Russell King <rmk+kernel@arm.linux.org.uk>");
|
||||
MODULE_AUTHOR("Russell King <rmk+kernel@armlinux.org.uk>");
|
||||
MODULE_AUTHOR("Lucas Stach <l.stach@pengutronix.de>");
|
||||
MODULE_DESCRIPTION("etnaviv DRM Driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* cec-notifier.c - notify CEC drivers of physical address changes
|
||||
*
|
||||
* Copyright 2016 Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
* Copyright 2016 Russell King.
|
||||
* Copyright 2016-2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* Software PHY emulation
|
||||
*
|
||||
* Code taken from fixed_phy.c by Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
* Code taken from fixed_phy.c by Russell King.
|
||||
*
|
||||
* Author: Vitaly Bordug <vbordug@ru.mvista.com>
|
||||
* Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
|
@ -29,6 +29,11 @@ void *module_alloc(unsigned long size);
|
||||
/* Free memory returned from module_alloc. */
|
||||
void module_memfree(void *module_region);
|
||||
|
||||
/* Determines if the section name is an init section (that is only used during
|
||||
* module loading).
|
||||
*/
|
||||
bool module_init_section(const char *name);
|
||||
|
||||
/* Determines if the section name is an exit section (that is only used during
|
||||
* module unloading)
|
||||
*/
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* cec-notifier.h - notify CEC drivers of physical address changes
|
||||
*
|
||||
* Copyright 2016 Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
* Copyright 2016 Russell King.
|
||||
* Copyright 2016-2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
|
||||
|
@ -2400,7 +2400,7 @@ static void layout_sections(struct module *mod, struct load_info *info)
|
||||
if ((s->sh_flags & masks[m][0]) != masks[m][0]
|
||||
|| (s->sh_flags & masks[m][1])
|
||||
|| s->sh_entsize != ~0UL
|
||||
|| strstarts(sname, ".init"))
|
||||
|| module_init_section(sname))
|
||||
continue;
|
||||
s->sh_entsize = get_offset(mod, &mod->core_layout.size, s, i);
|
||||
pr_debug("\t%s\n", sname);
|
||||
@ -2433,7 +2433,7 @@ static void layout_sections(struct module *mod, struct load_info *info)
|
||||
if ((s->sh_flags & masks[m][0]) != masks[m][0]
|
||||
|| (s->sh_flags & masks[m][1])
|
||||
|| s->sh_entsize != ~0UL
|
||||
|| !strstarts(sname, ".init"))
|
||||
|| !module_init_section(sname))
|
||||
continue;
|
||||
s->sh_entsize = (get_offset(mod, &mod->init_layout.size, s, i)
|
||||
| INIT_OFFSET_MASK);
|
||||
@ -2768,6 +2768,11 @@ void * __weak module_alloc(unsigned long size)
|
||||
return vmalloc_exec(size);
|
||||
}
|
||||
|
||||
bool __weak module_init_section(const char *name)
|
||||
{
|
||||
return strstarts(name, ".init");
|
||||
}
|
||||
|
||||
bool __weak module_exit_section(const char *name)
|
||||
{
|
||||
return strstarts(name, ".exit");
|
||||
|
Loading…
Reference in New Issue
Block a user