ramoops: Add support for passing ramoops region through cb tables.
CQ-DEPEND=CL:228856 BUG=chrome-os-partner:33676 BRANCH=None TEST=ramoops buffer verified on ryu. Original-Change-Id: I29584f89ded0c22c4f255a40951a179b54761053 Original-Signed-off-by: Furquan Shaikh <furquan@google.com> Original-Reviewed-on: https://chromium-review.googlesource.com/228744 Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org> Original-Commit-Queue: Furquan Shaikh <furquan@chromium.org> Original-Tested-by: Furquan Shaikh <furquan@chromium.org> (cherry picked from commit e8b2c8b75c51160df177edc14c90e5bd3836e931) Signed-off-by: Aaron Durbin <adurbin@chromium.org> Change-Id: I5fdeb59056945a602584584edce9c782151ca8ea Reviewed-on: http://review.coreboot.org/9442 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
aed887f3cb
commit
efb546dfeb
|
@ -227,6 +227,7 @@ struct lb_gpios {
|
||||||
#define LB_TAG_VBNV 0x0019
|
#define LB_TAG_VBNV 0x0019
|
||||||
#define LB_TAB_VBOOT_HANDOFF 0x0020
|
#define LB_TAB_VBOOT_HANDOFF 0x0020
|
||||||
#define LB_TAB_DMA 0x0022
|
#define LB_TAB_DMA 0x0022
|
||||||
|
#define LB_TAG_RAM_OOPS 0x0023
|
||||||
struct lb_range {
|
struct lb_range {
|
||||||
uint32_t tag;
|
uint32_t tag;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
@ -235,6 +236,8 @@ struct lb_range {
|
||||||
uint32_t range_size;
|
uint32_t range_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void lb_ramoops(struct lb_header *header);
|
||||||
|
|
||||||
#define LB_TAG_TIMESTAMPS 0x0016
|
#define LB_TAG_TIMESTAMPS 0x0016
|
||||||
#define LB_TAG_CBMEM_CONSOLE 0x0017
|
#define LB_TAG_CBMEM_CONSOLE 0x0017
|
||||||
#define LB_TAG_MRC_CACHE 0x0018
|
#define LB_TAG_MRC_CACHE 0x0018
|
||||||
|
|
|
@ -473,6 +473,10 @@ unsigned long write_coreboot_table(
|
||||||
/* Add board-specific table entries, if any. */
|
/* Add board-specific table entries, if any. */
|
||||||
lb_board(head);
|
lb_board(head);
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_CHROMEOS_RAMOOPS)
|
||||||
|
lb_ramoops(head);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Remember where my valid memory ranges are */
|
/* Remember where my valid memory ranges are */
|
||||||
return lb_table_fini(head);
|
return lb_table_fini(head);
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,11 @@ config CHROMEOS_RAMOOPS_DYNAMIC
|
||||||
default n
|
default n
|
||||||
depends on CHROMEOS_RAMOOPS && HAVE_ACPI_TABLES
|
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
|
config CHROMEOS_RAMOOPS_RAM_START
|
||||||
hex "Physical address of preserved RAM"
|
hex "Physical address of preserved RAM"
|
||||||
default 0x00f00000
|
default 0x00f00000
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <boot/coreboot_tables.h>
|
||||||
#include <bootstate.h>
|
#include <bootstate.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <cbmem.h>
|
#include <cbmem.h>
|
||||||
|
@ -99,4 +100,34 @@ void chromeos_ram_oops_init(chromeos_acpi_t *chromeos)
|
||||||
reserve_ram_oops_dynamic(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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue