[coreboot-gerrit] Patch set updated for coreboot: elog: Use rdev_mmap to find offset of ELOG

Furquan Shaikh (furquan@google.com) gerrit at coreboot.org
Sat Jul 16 03:57:21 CEST 2016


Furquan Shaikh (furquan at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15722

-gerrit

commit 2bb4537d528fc9765d8bea3cbf5e1a4410bddd04
Author: Furquan Shaikh <furquan at google.com>
Date:   Fri Jul 15 15:54:36 2016 -0700

    elog: Use rdev_mmap to find offset of ELOG
    
    In case of elog not being stored in CBMEM, calculate flash offset by
    using rdev_mmap instead of assuming that the entire flash is mapped just
    below 4GiB. This allows custom mappings of flash to correctly convert
    the flash offset to mmap address.
    
    BUG=chrome-os-partner:54186
    TEST=Verified behavior on reef. mosys able to read out the elog correctly.
    
    Change-Id: I3eacd2c9266ecc3da1bd45c86ff9d0e8153ca3f2
    Signed-off-by: Furquan Shaikh <furquan at google.com>
---
 src/drivers/elog/elog.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/drivers/elog/elog.c b/src/drivers/elog/elog.c
index 71eaad2..d05ce48 100644
--- a/src/drivers/elog/elog.c
+++ b/src/drivers/elog/elog.c
@@ -22,6 +22,8 @@
 #include <pc80/mc146818rtc.h>
 #endif
 #include <bcd.h>
+#include <boot_device.h>
+#include <commonlib/region.h>
 #include <fmap.h>
 #include <rtc.h>
 #include <smbios.h>
@@ -411,16 +413,16 @@ static int elog_shrink(void)
 /*
  * Convert a flash offset into a memory mapped flash address
  */
-static inline u8 *elog_flash_offset_to_address(u32 offset)
+static inline u8 *elog_flash_offset_to_address(void)
 {
-	u32 rom_size;
+	/* Only support memory-mapped SPI devices. */
+	if (!IS_ENABLED(CONFIG_SPI_FLASH_MEMORY_MAPPED))
+		return NULL;
 
 	if (!elog_spi)
 		return NULL;
 
-	rom_size = get_rom_size();
-
-	return (u8 *)((u32)~0UL - rom_size + 1 + offset);
+	return rdev_mmap(boot_device_ro(), flash_base, total_size);
 }
 
 /*
@@ -453,7 +455,7 @@ int elog_smbios_write_type15(unsigned long *current, int handle)
 #if CONFIG_ELOG_CBMEM
 	t->address = (u32)cbmem;
 #else
-	t->address = (u32)elog_flash_offset_to_address(flash_base);
+	t->address = (u32)elog_flash_offset_to_address();
 #endif
 	t->header_format = ELOG_HEADER_TYPE_OEM;
 	t->log_type_descriptors = 0;



More information about the coreboot-gerrit mailing list