[coreboot] New patch to review for coreboot: c3c95f4 SMM: Add support for malloc in SMM if using TSEG

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Tue Jul 24 00:30:03 CEST 2012


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1312

-gerrit

commit c3c95f4dd8516b21a68193072f21418517a8a06f
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Sat Jun 23 13:33:32 2012 -0700

    SMM: Add support for malloc in SMM if using TSEG
    
    This is used by the SPI driver and ELOG.
    
    It requires SMM TSEG and a _heap/_eheap region defined in the
    linker script.  The first time malloc is called in SMM the
    start and end pointers to the heap region will be relocated
    for the TSEG region.
    
    Enable SPI flash and ELOG in SMM and successfully
    allocate memory.  The allocated addresses are verified
    to be sure they are within the TSEG heap region:
    
    smm.elf:00014000 B _eheap
    smm.elf:00010000 B _heap
    TSEG base is 0xad000000
    
    Memory allocated in ELOG:
    ELOG: MEM @0xad018030
    
    Change-Id: I5cca38e4888d597cbbfcd9983cd6a7ae3600c2a3
    Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
---
 src/console/Makefile.inc |    1 +
 src/lib/Makefile.inc     |    1 +
 src/lib/malloc.c         |    9 +++++++++
 3 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/src/console/Makefile.inc b/src/console/Makefile.inc
index f3b8758..f8928ad 100644
--- a/src/console/Makefile.inc
+++ b/src/console/Makefile.inc
@@ -7,6 +7,7 @@ ramstage-y += die.c
 
 smm-y += printk.c
 smm-y += vtxprintf.c
+smm-$(CONFIG_SMM_TSEG) += die.c
 
 romstage-y += vtxprintf.c
 romstage-$(CONFIG_CACHE_AS_RAM) += console.c
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index a3235a2..ec57bc2 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -32,6 +32,7 @@ endif
 ramstage-y += memcmp.c
 ramstage-y += memmove.c
 ramstage-y += malloc.c
+smm-$(CONFIG_SMM_TSEG) += malloc.c
 ramstage-y += delay.c
 ramstage-y += fallback_boot.c
 ramstage-y += compute_ip_checksum.c
diff --git a/src/lib/malloc.c b/src/lib/malloc.c
index d2011a1..43e514a 100644
--- a/src/lib/malloc.c
+++ b/src/lib/malloc.c
@@ -1,5 +1,8 @@
 #include <stdlib.h>
 #include <console/console.h>
+#ifdef __SMM__
+#include <cpu/x86/smm.h>
+#endif
 
 #if CONFIG_DEBUG_MALLOC
 #define MALLOCDBG(x...) printk(BIOS_SPEW, x)
@@ -43,5 +46,11 @@ void *memalign(size_t boundary, size_t size)
 
 void *malloc(size_t size)
 {
+#if CONFIG_SMM_TSEG && defined(__SMM__)
+	if (!free_mem_ptr) {
+		free_mem_ptr = &_heap + smi_get_tseg_base();
+		free_mem_end_ptr = &_eheap + smi_get_tseg_base();
+	}
+#endif
 	return memalign(sizeof(u64), size);
 }




More information about the coreboot mailing list