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