board_f: reserve noncached space below malloc area
authorVikas Manocha <vikas.manocha@st.com>
Fri, 16 Aug 2019 16:57:44 +0000 (09:57 -0700)
committerTom Rini <trini@konsulko.com>
Mon, 26 Aug 2019 15:46:20 +0000 (11:46 -0400)
Noncached area at present is being initialized to random space after malloc
area. It works in most the cases as it goes to stack area & stack is not
overwriting it being far from it.

Signed-off-by: Vikas Manocha <vikas.manocha@st.com>
common/board_f.c

index 31181a9dc4510c2b23bfc498e901479f71fb432b..6867abc8e67936455760de0d0af652e28fdec7bf 100644 (file)
@@ -467,12 +467,29 @@ static int reserve_uboot(void)
        return 0;
 }
 
+#ifdef CONFIG_SYS_NONCACHED_MEMORY
+static int reserve_noncached(void)
+{
+       /* round down to SECTION SIZE (typicaly 1MB) limit */
+       gd->start_addr_sp &= ~(MMU_SECTION_SIZE - 1);
+       gd->start_addr_sp -= CONFIG_SYS_NONCACHED_MEMORY;
+       debug("Reserving %dM for noncached_alloc() at: %08lx\n",
+             CONFIG_SYS_NONCACHED_MEMORY >> 20, gd->start_addr_sp);
+
+       return 0;
+}
+#endif
+
 /* reserve memory for malloc() area */
 static int reserve_malloc(void)
 {
        gd->start_addr_sp = gd->start_addr_sp - TOTAL_MALLOC_LEN;
        debug("Reserving %dk for malloc() at: %08lx\n",
              TOTAL_MALLOC_LEN >> 10, gd->start_addr_sp);
+#ifdef CONFIG_SYS_NONCACHED_MEMORY
+       reserve_noncached();
+#endif
+
        return 0;
 }