ramdump: Use RAMDUMP_TEXTOFFSET to integrate text modifications [1/1]
PD#SWPL-182182
PD#SWPL-190334
Problem:
TEXTOFFSET was changed from 0x00208000 to 0x02008000, causing some
devices to fail to start.
1. t5d Android U upgrade project, ko becomes build, uImage size
increases to 36MB. It is too big to relocate.
2. There is only 48MB in 0x020080000~0x5000000 area, and cannot
open kasan.
Solution:
1. use new config CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET instead of
CONFIG_AMLOGIC_RAMDUMP. And TEXTOFFSET is 0x00208000 default.
2. Use a new solution instead of modifying TEXT. Specifically,
during kernel panic, move 0-24MB to a higher address. Reboot to
uboot and then copy back.
Verify:
T5D
Change-Id: I1c9c086b89129893e5542676b54228e03b4e34c2
Signed-off-by: dongqing.li <dongqing.li@amlogic.com>
diff --git a/amlogic_utils.sh b/amlogic_utils.sh
index 7fc3ee1..6b6dcef 100644
--- a/amlogic_utils.sh
+++ b/amlogic_utils.sh
@@ -1313,7 +1313,7 @@
if [ "${ARCH}" = "arm64" ]; then
(cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
elif [ "${ARCH}" = "arm" ]; then
- (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x2008000 uImage)
+ (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x00208000 uImage)
fi
set +x
fi
@@ -1551,7 +1551,12 @@
function set_default_parameters () {
if [ "${ARCH}" = "arm" ]; then
- ARGS+=("LOADADDR=0x02008000")
+ CONFIGFILE=${ROOT_DIR}/${FRAGMENT_CONFIG}
+ if [[ -f "${CONFIGFILE}" && `grep "CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET=y" "${CONFIGFILE}"` ]]; then
+ ARGS+=("LOADADDR=0x02008000")
+ else
+ ARGS+=("LOADADDR=0x00208000")
+ fi
else
ARCH=arm64
fi
@@ -1872,7 +1877,14 @@
export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
- tool_args+=("LOADADDR=0x02008000")
+ CONFIGFILE=${ROOT_DIR}/${FRAGMENT_CONFIG}
+ echo "android 32bit config file: ${CONFIGFILE}"
+ if [[ -f "${CONFIGFILE}" && `grep "CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET=y" "${CONFIGFILE}"` ]]; then
+ # FRAGMENT_CONFIG: ./common_drivers/arch/arm/configs/amlogic_a32.fragment
+ tool_args+=("LOADADDR=0x02008000")
+ else
+ tool_args+=("LOADADDR=0x00208000")
+ fi
tool_args+=("DEPMOD=depmod")
tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
diff --git a/auto_patch/common14-5.15/common/02_not_arm64_android/0005-ramdump-set-TEXT_OFFSET-to-0x02008000-for-ker5.15-1-1.patch b/auto_patch/common14-5.15/common/02_not_arm64_android/0005-ramdump-set-TEXT_OFFSET-to-0x02008000-for-ker5.15-1-1.patch
index ac59838..8bde0c7 100644
--- a/auto_patch/common14-5.15/common/02_not_arm64_android/0005-ramdump-set-TEXT_OFFSET-to-0x02008000-for-ker5.15-1-1.patch
+++ b/auto_patch/common14-5.15/common/02_not_arm64_android/0005-ramdump-set-TEXT_OFFSET-to-0x02008000-for-ker5.15-1-1.patch
@@ -1,4 +1,4 @@
-From fea98028a3f7ab002b31e043ef99c510aae6e9f6 Mon Sep 17 00:00:00 2001
+From ecd5798236a9951058abdb97cc8c777c77dca798 Mon Sep 17 00:00:00 2001
From: "dongqing.li" <dongqing.li@amlogic.com>
Date: Wed, 18 Oct 2023 17:16:57 +0800
Subject: [PATCH] ramdump: set TEXT_OFFSET=0x02008000 for ker5.15-u32 [1/1]
@@ -28,30 +28,30 @@
arch/arm/boot/Makefile | 5 +++++
arch/arm/boot/compressed/head.S | 5 +++++
arch/arm/kernel/head.S | 10 ++++++++++
- arch/arm/kernel/smp.c | 4 ++++
- 5 files changed, 25 insertions(+)
+ arch/arm/kernel/smp.c | 8 ++++++++
+ 5 files changed, 29 insertions(+)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
-index 790d4418a070..d318a5b977e7 100644
+index 790d4418a070..45ef1626c5c1 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -153,6 +153,7 @@ textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000
textofs-$(CONFIG_ARCH_MESON) := 0x00208000
textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000
textofs-$(CONFIG_AMLOGIC_DRIVER) := 0x00208000
-+textofs-$(CONFIG_AMLOGIC_RAMDUMP) := 0x02008000
++textofs-$(CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET) := 0x02008000
# Machine directory name. This list is sorted alphanumerically
# by CONFIG_* macro name.
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile
-index 54a09f9464fb..5d5454622bfc 100644
+index 54a09f9464fb..9ad634fe9e7f 100644
--- a/arch/arm/boot/Makefile
+++ b/arch/arm/boot/Makefile
@@ -17,6 +17,11 @@ ifneq ($(MACHINE),)
include $(MACHINE)/Makefile.boot
endif
-+ifeq ($(CONFIG_AMLOGIC_RAMDUMP),y)
++ifeq ($(CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET),y)
+zreladdr-y += 0x02008000
+params_phys-y := 0x02000100
+initrd_phys-y := 0x02900000
@@ -60,14 +60,14 @@
# ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET)
# PARAMS_PHYS must be within 4MB of ZRELADDR
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
-index bf79f2f78d23..d85b1bfec712 100644
+index bf79f2f78d23..6e8e611623ee 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -313,7 +313,12 @@ not_angel:
1:
#endif /* CONFIG_USE_OF */
/* Determine final kernel image address. */
-+#ifdef CONFIG_AMLOGIC_RAMDUMP
++#ifdef CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET
+ ldr r3, =TEXT_OFFSET
+ add r4, r0, r3
+#else
@@ -77,14 +77,14 @@
ldr r4, =zreladdr
#endif
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
-index 3fc7f9750ce4..ac31b60f7540 100644
+index 3fc7f9750ce4..10908ab96a4a 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -65,7 +65,12 @@ kernel_sec_end:
.popsection
.macro pgtbl, rd, phys
-+#ifdef CONFIG_AMLOGIC_RAMDUMP
++#ifdef CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET
+ ldr r3, =TEXT_OFFSET
+ add \rd, \phys, r3
+#else
@@ -97,7 +97,7 @@
#ifndef CONFIG_XIP_KERNEL
adr_l r8, _text @ __pa(_text)
-+#ifdef CONFIG_AMLOGIC_RAMDUMP
++#ifdef CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET
+ ldr r3, =TEXT_OFFSET
+ sub r8, r8, r3
+#else
@@ -107,24 +107,28 @@
ldr r8, =PLAT_PHYS_OFFSET @ always constant in this case
#endif
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index 083662ead0a8..6f74caa15b36 100644
+index 083662ead0a8..3d2524da9d79 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
-@@ -55,6 +55,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_raise);
+@@ -55,6 +55,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_raise);
EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_entry);
EXPORT_TRACEPOINT_SYMBOL_GPL(ipi_exit);
++#ifdef CONFIG_AMLOGIC_RAMDUMP
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/debug.h>
++#endif
+
/*
* as from 2.5, kernels no longer have an init_tasks structure
* so we need some other way of telling a new secondary core
-@@ -656,6 +659,7 @@ static void do_handle_IPI(int ipinr)
+@@ -656,6 +661,9 @@ static void do_handle_IPI(int ipinr)
break;
case IPI_CPU_STOP:
++#ifdef CONFIG_AMLOGIC_RAMDUMP
+ trace_android_vh_ipi_stop(get_irq_regs());
++#endif
ipi_cpu_stop(cpu);
break;
diff --git a/scripts/amlogic/amlogic_smarthome_utils.sh b/scripts/amlogic/amlogic_smarthome_utils.sh
index cdce09c..ab1abd9 100644
--- a/scripts/amlogic/amlogic_smarthome_utils.sh
+++ b/scripts/amlogic/amlogic_smarthome_utils.sh
@@ -93,7 +93,14 @@
OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
elif [[ $ARCH == arm ]]; then
OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
- tool_args+=("LOADADDR=0x02008000")
+ CONFIGFILE=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
+ echo "linux 32bit config file: ${CONFIGFILE}"
+ if [[ -f "${CONFIGFILE}" && `grep "CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET=y" "${CONFIGFILE}"` ]]; then
+ # DEFCONFIG: arch/arm/configs/meson64_a32_smarthome_defconfig OR amlogic_gx32_defconfig
+ tool_args+=("LOADADDR=0x02008000")
+ else
+ tool_args+=("LOADADDR=0x00208000")
+ fi
elif [[ $ARCH == riscv ]]; then
OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
fi