aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/google')
-rw-r--r--src/vendorcode/google/chromeos/Kconfig5
-rw-r--r--src/vendorcode/google/chromeos/ramoops.c33
2 files changed, 37 insertions, 1 deletions
diff --git a/src/vendorcode/google/chromeos/Kconfig b/src/vendorcode/google/chromeos/Kconfig
index a0ab55d596..29252a66b3 100644
--- a/src/vendorcode/google/chromeos/Kconfig
+++ b/src/vendorcode/google/chromeos/Kconfig
@@ -76,6 +76,11 @@ config CHROMEOS_RAMOOPS_DYNAMIC
default n
depends on CHROMEOS_RAMOOPS && HAVE_ACPI_TABLES
+config CHROMEOS_RAMOOPS_NON_ACPI
+ bool "Allocate RAM oops buffer in cbmem passed through cb tables to payload"
+ default n
+ depends on CHROMEOS_RAMOOPS && !HAVE_ACPI_TABLES
+
config CHROMEOS_RAMOOPS_RAM_START
hex "Physical address of preserved RAM"
default 0x00f00000
diff --git a/src/vendorcode/google/chromeos/ramoops.c b/src/vendorcode/google/chromeos/ramoops.c
index f7177e5397..07649c975c 100644
--- a/src/vendorcode/google/chromeos/ramoops.c
+++ b/src/vendorcode/google/chromeos/ramoops.c
@@ -20,6 +20,7 @@
#include <stddef.h>
#include <stdint.h>
+#include <boot/coreboot_tables.h>
#include <bootstate.h>
#include <console/console.h>
#include <cbmem.h>
@@ -99,4 +100,34 @@ void chromeos_ram_oops_init(chromeos_acpi_t *chromeos)
reserve_ram_oops_dynamic(chromeos);
}
-#endif /* CONFIG_HAVE_ACPI_TABLES */
+#elif IS_ENABLED(CONFIG_CHROMEOS_RAMOOPS_NON_ACPI)
+
+static void ramoops_alloc(void *arg)
+{
+ const size_t size = CONFIG_CHROMEOS_RAMOOPS_RAM_SIZE;
+
+ if (size == 0)
+ return;
+
+ if (cbmem_add(CBMEM_ID_RAM_OOPS, size) == NULL)
+ printk(BIOS_ERR, "Could not allocate RAMOOPS buffer\n");
+}
+
+BOOT_STATE_INIT_ENTRY(BS_WRITE_TABLES, BS_ON_ENTRY, ramoops_alloc, NULL);
+
+#endif
+
+void lb_ramoops(struct lb_header *header)
+{
+ void *buffer = cbmem_find(CBMEM_ID_RAM_OOPS);
+
+ if (buffer == NULL)
+ return;
+
+ struct lb_range *ramoops;
+ ramoops = (struct lb_range *)lb_new_record(header);
+ ramoops->tag = LB_TAG_RAM_OOPS;
+ ramoops->size = sizeof(*ramoops);
+ ramoops->range_start = (uintptr_t)buffer;
+ ramoops->range_size = CONFIG_CHROMEOS_RAMOOPS_RAM_SIZE;
+}