elog: Get rid of elog_reinit_descriptor.

This function was just a wrapper around elog_init_descriptor, and all it did
was pass the current backing store location and size back in so it would be
reused. Those values, which never change, are now set in
elog_setup_descriptors, eliminating those parameters to init and eliminating
the need for _reinit_.

Built and booted on Link. Ran mosys eventlog list. Added 2000 events to
the log and ran mosys eventlog list again.

Change-Id: I133768aa798dfc10f32e14db95235a88666890c3
Signed-off-by: Gabe Black <gabeblack@google.com>
Reviewed-on: https://gerrit.chromium.org/gerrit/49307
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Commit-Queue: Gabe Black <gabeblack@chromium.org>
Tested-by: Gabe Black <gabeblack@chromium.org>
Reviewed-on: http://review.coreboot.org/4242
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Gabe Black 2013-04-24 17:36:53 -07:00 committed by Alexandru Gagniuc
parent 331eb084bb
commit 42cb7090c5
1 changed files with 19 additions and 26 deletions

View File

@ -377,25 +377,19 @@ static void elog_validate_and_fill(struct elog_descriptor *elog)
} }
/* /*
* Initialize a new ELOG descriptor * (Re)initialize a new ELOG descriptor
*/ */
static void elog_init_descriptor(struct elog_descriptor *elog, static void elog_init_descriptor(struct elog_descriptor *elog)
u8 *buffer, u32 size)
{ {
elog_debug("elog_init_descriptor(buffer=0x%p size=%u)\n", buffer, size); elog_debug("elog_init_descriptor()\n");
elog->area_state = ELOG_AREA_UNDEFINED; elog->area_state = ELOG_AREA_UNDEFINED;
elog->header_state = ELOG_HEADER_INVALID; elog->header_state = ELOG_HEADER_INVALID;
elog->event_buffer_state = ELOG_EVENT_BUFFER_OK; elog->event_buffer_state = ELOG_EVENT_BUFFER_OK;
elog->backing_store = buffer;
elog->total_size = size;
/* Fill memory buffer by reading from SPI */ /* Fill memory buffer by reading from SPI */
elog_spi->read(elog_spi, elog->flash_base, size, buffer); elog_spi->read(elog_spi, elog->flash_base, elog->total_size,
elog->backing_store);
/* Data starts immediately after header */
elog->data = &buffer[sizeof(struct elog_header)];
elog->data_size = size - sizeof(struct elog_header);
elog->next_event_offset = 0; elog->next_event_offset = 0;
elog->last_event_offset = 0; elog->last_event_offset = 0;
@ -405,21 +399,13 @@ static void elog_init_descriptor(struct elog_descriptor *elog,
elog_validate_and_fill(elog); elog_validate_and_fill(elog);
} }
/*
* Re-initialize an existing ELOG descriptor
*/
static void elog_reinit_descriptor(struct elog_descriptor *elog)
{
elog_debug("elog_reinit_descriptor()\n");
elog_init_descriptor(elog, elog->backing_store, elog->total_size);
}
/* /*
* Create ELOG descriptor data structures for all ELOG areas. * Create ELOG descriptor data structures for all ELOG areas.
*/ */
static int elog_setup_descriptors(u32 flash_base, u32 area_size) static int elog_setup_descriptors(u32 flash_base, u32 area_size)
{ {
u8 *area; u8 *area;
struct elog_descriptor *flash = elog_get_flash();
elog_debug("elog_setup_descriptors(base=0x%08x size=%u)\n", elog_debug("elog_setup_descriptors(base=0x%08x size=%u)\n",
flash_base, area_size); flash_base, area_size);
@ -435,8 +421,15 @@ static int elog_setup_descriptors(u32 flash_base, u32 area_size)
printk(BIOS_ERR, "ELOG: Unable to allocate backing store\n"); printk(BIOS_ERR, "ELOG: Unable to allocate backing store\n");
return -1; return -1;
} }
elog_get_flash()->flash_base = flash_base; flash->flash_base = flash_base;
elog_init_descriptor(elog_get_flash(), area, area_size); flash->backing_store = area;
flash->total_size = area_size;
/* Data starts immediately after header */
flash->data = area + sizeof(struct elog_header);
flash->data_size = area_size - sizeof(struct elog_header);
elog_init_descriptor(flash);
return 0; return 0;
} }
@ -449,7 +442,7 @@ static void elog_flash_erase_area(void)
elog_flash_erase(elog->backing_store, elog->total_size); elog_flash_erase(elog->backing_store, elog->total_size);
memset(elog->backing_store, ELOG_TYPE_EOL, elog->total_size); memset(elog->backing_store, ELOG_TYPE_EOL, elog->total_size);
elog_reinit_descriptor(elog); elog_init_descriptor(elog);
} }
static void elog_prepare_empty(struct elog_descriptor *elog) static void elog_prepare_empty(struct elog_descriptor *elog)
@ -470,7 +463,7 @@ static void elog_prepare_empty(struct elog_descriptor *elog)
header->reserved[1] = ELOG_TYPE_EOL; header->reserved[1] = ELOG_TYPE_EOL;
elog_flash_write(elog->backing_store, header->header_size); elog_flash_write(elog->backing_store, header->header_size);
elog_reinit_descriptor(elog); elog_init_descriptor(elog);
} }
static int elog_sync_flash_to_mem(void) static int elog_sync_flash_to_mem(void)
@ -490,7 +483,7 @@ static int elog_sync_flash_to_mem(void)
elog_spi->read(elog_spi, flash->flash_base + sizeof(struct elog_header), elog_spi->read(elog_spi, flash->flash_base + sizeof(struct elog_header),
flash->next_event_offset, flash->data); flash->next_event_offset, flash->data);
elog_reinit_descriptor(flash); elog_init_descriptor(flash);
return elog_is_area_valid(flash) ? 0 : -1; return elog_is_area_valid(flash) ? 0 : -1;
} }
@ -569,7 +562,7 @@ static int elog_shrink(void)
elog_flash_erase(flash->backing_store, flash->total_size); elog_flash_erase(flash->backing_store, flash->total_size);
elog_flash_write(flash->backing_store, flash->total_size); elog_flash_write(flash->backing_store, flash->total_size);
elog_reinit_descriptor(flash); elog_init_descriptor(flash);
/* Ensure the area was successfully erased */ /* Ensure the area was successfully erased */
if (flash->next_event_offset >= CONFIG_ELOG_FULL_THRESHOLD) { if (flash->next_event_offset >= CONFIG_ELOG_FULL_THRESHOLD) {