kernel: re-apply 300-arch-arm-force-ZRELADDR-on-arch-qcom.patch on 4.9 (FS#549)
Fixes memory corruption issues. See commit bdcba36442 for more
details.
Signed-off-by: Felix Fietkau <nbd@nbd.name>
			
			
This commit is contained in:
		@@ -56,7 +56,6 @@ CONFIG_ARM_THUMB=y
 | 
				
			|||||||
CONFIG_ARM_UNWIND=y
 | 
					CONFIG_ARM_UNWIND=y
 | 
				
			||||||
CONFIG_ARM_VIRT_EXT=y
 | 
					CONFIG_ARM_VIRT_EXT=y
 | 
				
			||||||
CONFIG_AT803X_PHY=y
 | 
					CONFIG_AT803X_PHY=y
 | 
				
			||||||
CONFIG_AUTO_ZRELADDR=y
 | 
					 | 
				
			||||||
# CONFIG_B53 is not set
 | 
					# CONFIG_B53 is not set
 | 
				
			||||||
# CONFIG_BINFMT_FLAT is not set
 | 
					# CONFIG_BINFMT_FLAT is not set
 | 
				
			||||||
CONFIG_BLK_DEV_LOOP=y
 | 
					CONFIG_BLK_DEV_LOOP=y
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					From b12e230f09d4481424e6a5d7e2ae566b6954e83f Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Mathieu Olivari <mathieu@codeaurora.org>
 | 
				
			||||||
 | 
					Date: Wed, 29 Apr 2015 15:21:46 -0700
 | 
				
			||||||
 | 
					Subject: [PATCH] HACK: arch: arm: force ZRELADDR on arch-qcom
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARCH_QCOM is using the ARCH_MULTIPLATFORM option, as now recommended
 | 
				
			||||||
 | 
					on most ARM architectures. This automatically calculate ZRELADDR by
 | 
				
			||||||
 | 
					masking PHYS_OFFSET with 0xf8000000.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					However, on IPQ806x, the first ~20MB of RAM is reserved for the hardware
 | 
				
			||||||
 | 
					network accelerators, and the bootloader removes this section from the
 | 
				
			||||||
 | 
					layout passed from the ATAGS (when used).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For newer bootloader, when DT is used, this is not a problem, we just
 | 
				
			||||||
 | 
					reserve this memory in the device tree. But if the bootloader doesn't
 | 
				
			||||||
 | 
					have DT support, then ATAGS have to be used. In this case, the ARM
 | 
				
			||||||
 | 
					decompressor will position the kernel in this low mem, which will not be
 | 
				
			||||||
 | 
					in the RAM section mapped by the bootloader, which means the kernel will
 | 
				
			||||||
 | 
					freeze in the middle of the boot process trying to map the memory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As a work around, this patch allows disabling AUTO_ZRELADDR when
 | 
				
			||||||
 | 
					ARCH_QCOM is selected. It makes the zImage usage possible on bootloaders
 | 
				
			||||||
 | 
					which don't support device-tree, which is the case on certain early
 | 
				
			||||||
 | 
					IPQ806x based designs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 arch/arm/Kconfig                 | 2 +-
 | 
				
			||||||
 | 
					 arch/arm/Makefile                | 2 ++
 | 
				
			||||||
 | 
					 arch/arm/mach-qcom/Makefile.boot | 1 +
 | 
				
			||||||
 | 
					 3 files changed, 4 insertions(+), 1 deletion(-)
 | 
				
			||||||
 | 
					 create mode 100644 arch/arm/mach-qcom/Makefile.boot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/arch/arm/Kconfig
 | 
				
			||||||
 | 
					+++ b/arch/arm/Kconfig
 | 
				
			||||||
 | 
					@@ -332,7 +332,7 @@ config ARCH_MULTIPLATFORM
 | 
				
			||||||
 | 
					 	depends on MMU
 | 
				
			||||||
 | 
					 	select ARM_HAS_SG_CHAIN
 | 
				
			||||||
 | 
					 	select ARM_PATCH_PHYS_VIRT
 | 
				
			||||||
 | 
					-	select AUTO_ZRELADDR
 | 
				
			||||||
 | 
					+	select AUTO_ZRELADDR if !ARCH_QCOM
 | 
				
			||||||
 | 
					 	select CLKSRC_OF
 | 
				
			||||||
 | 
					 	select COMMON_CLK
 | 
				
			||||||
 | 
					 	select GENERIC_CLOCKEVENTS
 | 
				
			||||||
 | 
					--- a/arch/arm/Makefile
 | 
				
			||||||
 | 
					+++ b/arch/arm/Makefile
 | 
				
			||||||
 | 
					@@ -251,9 +251,11 @@ MACHINE  := arch/arm/mach-$(word 1,$(mac
 | 
				
			||||||
 | 
					 else
 | 
				
			||||||
 | 
					 MACHINE  :=
 | 
				
			||||||
 | 
					 endif
 | 
				
			||||||
 | 
					+ifeq ($(CONFIG_ARCH_QCOM),)
 | 
				
			||||||
 | 
					 ifeq ($(CONFIG_ARCH_MULTIPLATFORM),y)
 | 
				
			||||||
 | 
					 MACHINE  :=
 | 
				
			||||||
 | 
					 endif
 | 
				
			||||||
 | 
					+endif
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
 | 
				
			||||||
 | 
					 platdirs := $(patsubst %,arch/arm/plat-%/,$(sort $(plat-y)))
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/arch/arm/mach-qcom/Makefile.boot
 | 
				
			||||||
 | 
					@@ -0,0 +1 @@
 | 
				
			||||||
 | 
					+zreladdr-y+= 0x42208000
 | 
				
			||||||
		Reference in New Issue
	
	Block a user