Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02196144 authored by Russell King's avatar Russell King
Browse files

Merge branch 'devel-stable' into for-next

parents 7f3d1f98 fe9c0589
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -240,15 +240,6 @@ config NEED_RET_TO_USER
config ARCH_MTD_XIP
	bool

config VECTORS_BASE
	hex
	default 0xffff0000 if MMU || CPU_HIGH_VECTOR
	default DRAM_BASE if REMAP_VECTORS_TO_RAM
	default 0x00000000
	help
	  The base address of exception vectors.  This must be two pages
	  in size.

config ARM_PATCH_PHYS_VIRT
	bool "Patch physical to virtual translations at runtime" if EMBEDDED
	default y
@@ -2006,6 +1997,17 @@ config XIP_PHYS_ADDR
	  be linked for and stored to.  This address is dependent on your
	  own flash usage.

config XIP_DEFLATED_DATA
	bool "Store kernel .data section compressed in ROM"
	depends on XIP_KERNEL
	select ZLIB_INFLATE
	help
	  Before the kernel is actually executed, its .data section has to be
	  copied to RAM from ROM. This option allows for storing that data
	  in compressed form and decompressed to RAM rather than merely being
	  copied, saving some precious ROM space. A possible drawback is a
	  slightly longer boot delay.

config KEXEC
	bool "Kexec system call (EXPERIMENTAL)"
	depends on (!SMP || PM_SLEEP_SMP)
+2 −2
Original line number Diff line number Diff line
@@ -52,8 +52,8 @@ config REMAP_VECTORS_TO_RAM

config ARM_MPU
       bool 'Use the ARM v7 PMSA Compliant MPU'
       depends on CPU_V7
       default y
       depends on CPU_V7 || CPU_V7M
       default y if CPU_V7
       help
         Some ARM systems without an MMU have instead a Memory Protection
         Unit (MPU) that defines the type and permissions for regions of
+12 −1
Original line number Diff line number Diff line
@@ -31,8 +31,19 @@ targets := Image zImage xipImage bootpImage uImage

ifeq ($(CONFIG_XIP_KERNEL),y)

cmd_deflate_xip_data = $(CONFIG_SHELL) -c \
	'$(srctree)/$(src)/deflate_xip_data.sh $< $@ || { rm -f $@; false; }'

ifeq ($(CONFIG_XIP_DEFLATED_DATA),y)
quiet_cmd_mkxip = XIPZ    $@
cmd_mkxip = $(cmd_objcopy) && $(cmd_deflate_xip_data)
else
quiet_cmd_mkxip = $(quiet_cmd_objcopy)
cmd_mkxip = $(cmd_objcopy)
endif

$(obj)/xipImage: vmlinux FORCE
	$(call if_changed,objcopy)
	$(call if_changed,mkxip)
	@$(kecho) '  Physical Address of xipImage: $(CONFIG_XIP_PHYS_ADDR)'

$(obj)/Image $(obj)/zImage: FORCE
+64 −0
Original line number Diff line number Diff line
#!/bin/sh

# XIP kernel .data segment compressor
#
# Created by:	Nicolas Pitre, August 2017
# Copyright:	(C) 2017  Linaro Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.

# This script locates the start of the .data section in xipImage and
# substitutes it with a compressed version. The needed offsets are obtained
# from symbol addresses in vmlinux. It is expected that .data extends to
# the end of xipImage.

set -e

VMLINUX="$1"
XIPIMAGE="$2"

DD="dd status=none"

# Use "make V=1" to debug this script.
case "$KBUILD_VERBOSE" in
*1*)
	set -x
	;;
esac

sym_val() {
	# extract hex value for symbol in $1
	local val=$($NM "$VMLINUX" | sed -n "/ $1$/{s/ .*$//p;q}")
	[ "$val" ] || { echo "can't find $1 in $VMLINUX" 1>&2; exit 1; }
	# convert from hex to decimal
	echo $((0x$val))
}

__data_loc=$(sym_val __data_loc)
_edata_loc=$(sym_val _edata_loc)
base_offset=$(sym_val _xiprom)

# convert to file based offsets
data_start=$(($__data_loc - $base_offset))
data_end=$(($_edata_loc - $base_offset))

# Make sure data occupies the last part of the file.
file_end=$(stat -c "%s" "$XIPIMAGE")
if [ "$file_end" != "$data_end" ]; then
	printf "end of xipImage doesn't match with _edata_loc (%#x vs %#x)\n" \
	       $(($file_end + $base_offset)) $_edata_loc 2>&1
	exit 1;
fi

# be ready to clean up
trap 'rm -f "$XIPIMAGE.tmp"' 0 1 2 3

# substitute the data section by a compressed version
$DD if="$XIPIMAGE" count=$data_start iflag=count_bytes of="$XIPIMAGE.tmp"
$DD if="$XIPIMAGE"  skip=$data_start iflag=skip_bytes |
gzip -9 >> "$XIPIMAGE.tmp"

# replace kernel binary
mv -f "$XIPIMAGE.tmp" "$XIPIMAGE"
+10 −0
Original line number Diff line number Diff line
@@ -173,6 +173,11 @@ static inline unsigned int __attribute_const__ read_cpuid_cachetype(void)
	return read_cpuid(CPUID_CACHETYPE);
}

static inline unsigned int __attribute_const__ read_cpuid_mputype(void)
{
	return read_cpuid(CPUID_MPUIR);
}

#elif defined(CONFIG_CPU_V7M)

static inline unsigned int __attribute_const__ read_cpuid_id(void)
@@ -185,6 +190,11 @@ static inline unsigned int __attribute_const__ read_cpuid_cachetype(void)
	return readl(BASEADDR_V7M_SCB + V7M_SCB_CTR);
}

static inline unsigned int __attribute_const__ read_cpuid_mputype(void)
{
	return readl(BASEADDR_V7M_SCB + MPU_TYPE);
}

#else /* ifdef CONFIG_CPU_CP15 / elif defined(CONFIG_CPU_V7M) */

static inline unsigned int __attribute_const__ read_cpuid_id(void)
Loading