aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/airoha/patches-5.15/0004-ARM-9124-1-uncompress-Parse-linux-usable-memory-rang.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/airoha/patches-5.15/0004-ARM-9124-1-uncompress-Parse-linux-usable-memory-rang.patch')
-rw-r--r--target/linux/airoha/patches-5.15/0004-ARM-9124-1-uncompress-Parse-linux-usable-memory-rang.patch56
1 files changed, 26 insertions, 30 deletions
diff --git a/target/linux/airoha/patches-5.15/0004-ARM-9124-1-uncompress-Parse-linux-usable-memory-rang.patch b/target/linux/airoha/patches-5.15/0004-ARM-9124-1-uncompress-Parse-linux-usable-memory-rang.patch
index f13ab2b0ed..0f0cbaa10f 100644
--- a/target/linux/airoha/patches-5.15/0004-ARM-9124-1-uncompress-Parse-linux-usable-memory-rang.patch
+++ b/target/linux/airoha/patches-5.15/0004-ARM-9124-1-uncompress-Parse-linux-usable-memory-rang.patch
@@ -21,11 +21,9 @@ Signed-off-by: Daniel Danzberger <daniel@dd-wrt.com>
.../arm/boot/compressed/fdt_check_mem_start.c | 48 ++++++++++++++++---
1 file changed, 42 insertions(+), 6 deletions(-)
-diff --git a/arch/arm/boot/compressed/fdt_check_mem_start.c b/arch/arm/boot/compressed/fdt_check_mem_start.c
-index 62450d824c3c..9291a2661bdf 100644
--- a/arch/arm/boot/compressed/fdt_check_mem_start.c
+++ b/arch/arm/boot/compressed/fdt_check_mem_start.c
-@@ -55,16 +55,17 @@ static uint64_t get_val(const fdt32_t *cells, uint32_t ncells)
+@@ -55,16 +55,17 @@ static uint64_t get_val(const fdt32_t *c
* DTB, and, if out-of-range, replace it by the real start address.
* To preserve backwards compatibility (systems reserving a block of memory
* at the start of physical memory, kdump, ...), the traditional method is
@@ -39,18 +37,18 @@ index 62450d824c3c..9291a2661bdf 100644
{
- uint32_t addr_cells, size_cells, base;
+ uint32_t addr_cells, size_cells, usable_base, base;
- uint32_t fdt_mem_start = 0xffffffff;
+ uint32_t fdt_mem_start = 0xffffffff;
- const fdt32_t *reg, *endp;
- uint64_t size, end;
+ const fdt32_t *usable, *reg, *endp;
+ uint64_t size, usable_end, end;
- const char *type;
- int offset, len;
-
-@@ -80,6 +81,27 @@ uint32_t fdt_check_mem_start(uint32_t mem_start, const void *fdt)
- if (addr_cells > 2 || size_cells > 2)
- return mem_start;
-
+ const char *type;
+ int offset, len;
+
+@@ -80,6 +81,27 @@ uint32_t fdt_check_mem_start(uint32_t me
+ if (addr_cells > 2 || size_cells > 2)
+ return mem_start;
+
+ /*
+ * Usable memory in case of a crash dump kernel
+ * This property describes a limitation: memory within this range is
@@ -72,13 +70,13 @@ index 62450d824c3c..9291a2661bdf 100644
+ usable_end = usable_base + size;
+ }
+
- /* Walk all memory nodes and regions */
- for (offset = fdt_next_node(fdt, -1, NULL); offset >= 0;
- offset = fdt_next_node(fdt, offset, NULL)) {
-@@ -107,7 +129,20 @@ uint32_t fdt_check_mem_start(uint32_t mem_start, const void *fdt)
-
- base = fdt32_ld(reg + addr_cells - 1);
- end = base + size;
+ /* Walk all memory nodes and regions */
+ for (offset = fdt_next_node(fdt, -1, NULL); offset >= 0;
+ offset = fdt_next_node(fdt, offset, NULL)) {
+@@ -107,7 +129,20 @@ uint32_t fdt_check_mem_start(uint32_t me
+
+ base = fdt32_ld(reg + addr_cells - 1);
+ end = base + size;
- if (mem_start >= base && mem_start < end) {
+ if (usable) {
+ /*
@@ -94,18 +92,16 @@ index 62450d824c3c..9291a2661bdf 100644
+ if (end <= base)
+ continue;
+ } else if (mem_start >= base && mem_start < end) {
- /* Calculated address is valid, use it */
- return mem_start;
- }
-@@ -123,7 +158,8 @@ uint32_t fdt_check_mem_start(uint32_t mem_start, const void *fdt)
- }
-
- /*
+ /* Calculated address is valid, use it */
+ return mem_start;
+ }
+@@ -123,7 +158,8 @@ uint32_t fdt_check_mem_start(uint32_t me
+ }
+
+ /*
- * The calculated address is not usable.
+ * The calculated address is not usable, or was overridden by the
+ * "linux,usable-memory-range" property.
- * Use the lowest usable physical memory address from the DTB instead,
- * and make sure this is a multiple of 2 MiB for phys/virt patching.
- */
---
-2.35.1
+ * Use the lowest usable physical memory address from the DTB instead,
+ * and make sure this is a multiple of 2 MiB for phys/virt patching.
+ */