common function to allocate ramoops buffer
authorVadim Bendebury <vbendeb@chromium.org>
Thu, 16 Jun 2016 02:02:06 +0000 (19:02 -0700)
committerchrome-bot <chrome-bot@chromium.org>
Fri, 17 Jun 2016 08:48:46 +0000 (01:48 -0700)
This code was first introduced on the storm board under
https://chromium-review.googlesource.com/#/c/227169, and was
thoroughly discussed at the time.

Now it is being moved to a common file so that it is available to
other boards as necessary.

BRANCH=none
BUG=chrome-os-partner:54290
TEST=test compiling storm failed due to unrelated problems. Verified
     that ramoops gets created on kevin (using an additional patch).

Change-Id: Ia76e0a7754d321d5dfda4f402b9177a822cda553
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/353180
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
src/board/storm/board.c
src/boot/ramoops.c
src/boot/ramoops.h

index 7a6d9c9..68d84df 100644 (file)
@@ -247,49 +247,6 @@ void board_dac_gpio_config(void)
                        GPIO_16MA, 1);
 }
 
-static void set_ramoops_buffer(void)
-{
-       uint64_t base, total_size, record_size;
-
-       /*
-        * Hardcoded record and total sizes could be defined through Kconfig.
-        *
-        * The 'total_size' bytes of memory, aligned at 'record_size' boundary
-        * is found at the top of available memory as defined in the coreboot
-        * table and assigned to the ramoops cache.
-        *
-        * This is fairly brittle, as other parts of depthcharge or libpayload
-        * could be using this memory for something. But this is no worse than
-        * hardcoding this area to any particular address.
-        *
-        * A proper solution would be to have coreboot assign this memory and
-        * explicitly describe this in the coreboot memory table.
-        */
-       record_size = 0x20000;
-       total_size = 0x100000;
-       base = 0;
-
-       /* Let's allocate it as high as possible in the available memory */
-       for (int i = 0; i < lib_sysinfo.n_memranges; i++) {
-               uint64_t new_base, size;
-               struct memrange *range = lib_sysinfo.memrange + i;
-
-               size = range->size;
-               if ((range->type != CB_MEM_RAM) ||
-                   (size < (total_size + record_size)))
-                       continue;
-
-               /* Record size aligned area is guaranteed to fit. */
-               new_base = ALIGN_DOWN(range->base + size - total_size,
-                                     record_size);
-               if (new_base > base)
-                       base = new_base;
-
-       }
-       if (base)
-               ramoops_buffer(base, total_size, record_size);
-}
-
 static uint8_t kb_buffer[4];
 static int kb_in, kb_out;
 
@@ -423,7 +380,7 @@ static int board_setup(void)
 
        list_insert_after(&ipq_enet_fixup.list_node, &device_tree_fixups);
 
-       set_ramoops_buffer();
+       ramoops_common_set_buffer();
 
        return 0;
 }
index d74f202..20be2dd 100644 (file)
@@ -96,6 +96,50 @@ void ramoops_buffer(uint64_t start, uint64_t size, uint64_t record_size)
        memory_mark_used(start, start + size);
 }
 
+void ramoops_common_set_buffer(void)
+{
+       uint64_t base, total_size, record_size;
+
+       /*
+        * Hardcoded record and total sizes could be defined through Kconfig.
+        *
+        * The 'total_size' bytes of memory, aligned at 'record_size' boundary
+        * is found at the top of available memory as defined in the coreboot
+        * table and assigned to the ramoops cache.
+        *
+        * This is fairly brittle, as other parts of depthcharge or libpayload
+        * could be using this memory for something. But this is no worse than
+        * hardcoding this area to any particular address.
+        *
+        * A proper solution would be to have coreboot assign this memory and
+        * explicitly describe this in the coreboot memory table.
+        */
+       record_size = 0x20000;
+       total_size = 0x100000;
+       base = 0;
+
+       /* Let's allocate it as high as possible in the available memory */
+       for (int i = 0; i < lib_sysinfo.n_memranges; i++) {
+               uint64_t new_base, size;
+               struct memrange *range = lib_sysinfo.memrange + i;
+
+               size = range->size;
+               if ((range->type != CB_MEM_RAM) ||
+                   (size < (total_size + record_size)))
+                       continue;
+
+               /* Record size aligned area is guaranteed to fit. */
+               new_base = ALIGN_DOWN(range->base + size - total_size,
+                                     record_size);
+               if (new_base > base)
+                       base = new_base;
+
+       }
+
+       if (base)
+               ramoops_buffer(base, total_size, record_size);
+}
+
 static int ramoops_init(void)
 {
        if ((lib_sysinfo.ramoops_buffer == 0) ||
index 5b03a1e..7ad15e5 100644 (file)
@@ -21,5 +21,6 @@
 #include <stdint.h>
 
 void ramoops_buffer(uint64_t start, uint64_t size, uint64_t record_size);
+void ramoops_common_set_buffer(void);
 
 #endif /* __BOOT_RAMOOPS_H__ */