libpayload: Add support for parsing RAMOOPS range from coreboot

CQ-DEPEND=CL:228856
BUG=chrome-os-partner:33676
BRANCH=None
TEST=Compiles and boots to kernel prompt. ramoops console log verified after
causing kernel to fault.

Change-Id: I5af9b995113ee30ac60347acba8fa945fb5cd17a
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: 80c843fc78b137eb5540f8fefc4a69545b896fb6
Original-Change-Id: I8886015977e1fd999ef74fe73d08cff935cbce5c
Original-Signed-off-by: Furquan Shaikh <furquan@google.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/228742
Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Original-Tested-by: Furquan Shaikh <furquan@chromium.org>
Original-Commit-Queue: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: http://review.coreboot.org/8754
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Furquan Shaikh 2014-11-08 17:19:31 -08:00 committed by Patrick Georgi
parent 522f9c6df1
commit 6b322cc619
3 changed files with 14 additions and 0 deletions

View File

@ -188,6 +188,7 @@ struct cb_gpios {
#define CB_TAG_VBNV 0x0019 #define CB_TAG_VBNV 0x0019
#define CB_TAG_VBOOT_HANDOFF 0x0020 #define CB_TAG_VBOOT_HANDOFF 0x0020
#define CB_TAG_DMA 0x0022 #define CB_TAG_DMA 0x0022
#define CB_TAG_RAM_OOPS 0x0023
struct lb_range { struct lb_range {
uint32_t tag; uint32_t tag;
uint32_t size; uint32_t size;

View File

@ -115,6 +115,8 @@ struct sysinfo_t {
void *acpi_gnvs; void *acpi_gnvs;
u32 board_id; u32 board_id;
void *wifi_calibration; void *wifi_calibration;
uint64_t ramoops_buffer;
uint32_t ramoops_buffer_size;
}; };
extern struct sysinfo_t lib_sysinfo; extern struct sysinfo_t lib_sysinfo;

View File

@ -189,6 +189,14 @@ static void cb_parse_wifi_calibration(void *ptr, struct sysinfo_t *info)
info->wifi_calibration = phys_to_virt(cbmem->cbmem_tab); info->wifi_calibration = phys_to_virt(cbmem->cbmem_tab);
} }
static void cb_parse_ramoops(void *ptr, struct sysinfo_t *info)
{
struct lb_range *ramoops = (struct lb_range *)ptr;
info->ramoops_buffer = ramoops->range_start;
info->ramoops_buffer_size = ramoops->range_size;
}
int cb_parse_header(void *addr, int len, struct sysinfo_t *info) int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
{ {
struct cb_header *header; struct cb_header *header;
@ -324,6 +332,9 @@ int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
case CB_TAG_WIFI_CALIBRATION: case CB_TAG_WIFI_CALIBRATION:
cb_parse_wifi_calibration(ptr, info); cb_parse_wifi_calibration(ptr, info);
break; break;
case CB_TAG_RAM_OOPS:
cb_parse_ramoops(ptr, info);
break;
default: default:
cb_parse_arch_specific(rec, info); cb_parse_arch_specific(rec, info);
break; break;