/branches/gl-inet/target/linux/ipq806x/patches-4.14/0060-HACK-arch-arm-force-ZRELADDR-on-arch-qcom.patch |
@@ -0,0 +1,62 @@ |
From fa71139b55e114aa8c3c4823ff8ee7d49ee810d4 Mon Sep 17 00:00:00 2001 |
From: Mathieu Olivari <mathieu@codeaurora.org> |
Date: Wed, 29 Apr 2015 15:21:46 -0700 |
Subject: [PATCH 60/69] 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 |
@@ -341,7 +341,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 TIMER_OF |
select COMMON_CLK |
select GENERIC_CLOCKEVENTS |
--- a/arch/arm/Makefile |
+++ b/arch/arm/Makefile |
@@ -255,9 +255,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 |