Aaron Durbin (adurbin(a)google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9129
-gerrit
commit 3caf88c201111e825a381f737cf8291ede9af524
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Thu Mar 26 12:29:12 2015 -0500
coreboot: add memory pool infrastructure
The memory pool infrastructure provides an allocator with
very simple free()ing semantics: only the most recent allocation
can be free from the pool. However, it can be reset and when
not used any longer.
Change-Id: I5ae9ab35bb769d78bbc2866c5ae3b5ce2cdce5fa
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
---
src/include/mem_pool.h | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++
src/lib/Makefile.inc | 5 ++++
src/lib/mem_pool.c | 51 +++++++++++++++++++++++++++++++++++
3 files changed, 129 insertions(+)
diff --git a/src/include/mem_pool.h b/src/include/mem_pool.h
new file mode 100644
index 0000000..ca01fcb
--- /dev/null
+++ b/src/include/mem_pool.h
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2015 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef _MEM_POOL_H_
+#define _MEM_POOL_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+/*
+ * The memory pool allows one to allocate memory from a fixed size buffer
+ * that also allows freeing semantics for reuse. However, the current
+ * limitation is that the most recent allocation is the only one that
+ * can be freed. If one tries to free any allocation that isn't the
+ * most recently allocated it will result in a leak within the memory pool.
+ *
+ * The memory returned by allocations are at least 8 byte aligned. Note
+ * that this requires the backing buffer to start on at least an 8 byte
+ * alignment.
+ */
+
+struct mem_pool {
+ uint8_t *buf;
+ size_t size;
+ uint8_t *last_alloc;
+ size_t free_offset;
+};
+
+#define MEM_POOL_INIT(buf_, size_) \
+ { \
+ .buf = (buf_), \
+ .size = (size_), \
+ .last_alloc = NULL, \
+ .free_offset = 0, \
+ }
+
+static inline void mem_pool_reset(struct mem_pool *mp)
+{
+ mp->last_alloc = NULL;
+ mp->free_offset = 0;
+}
+
+/* Initialize a memory pool. */
+static inline void mem_pool_init(struct mem_pool *mp, void *buf, size_t sz)
+{
+ mp->buf = buf;
+ mp->size = sz;
+ mem_pool_reset(mp);
+}
+
+/* Allocate requested size from the memory pool. NULL returned on error. */
+void *mem_pool_alloc(struct mem_pool *mp, size_t sz);
+
+/* Free allocation from memory pool. */
+void mem_pool_free(struct mem_pool *mp, void *alloc);
+
+#endif /* _MEM_POOL_H_ */
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index d641b11..1a1e2aa 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -25,6 +25,7 @@ bootblock-$(CONFIG_COMMON_CBFS_SPI_WRAPPER) += cbfs_spi.c
bootblock-$(CONFIG_CONSOLE_CBMEM) += cbmem_console.c
bootblock-y += memchr.c
bootblock-y += memcmp.c
+bootblock-y += mem_pool.c
bootblock-y += region.c
verstage-y += prog_ops.c
@@ -36,6 +37,7 @@ verstage-$(CONFIG_CONSOLE_CBMEM) += cbmem_console.c
verstage-$(CONFIG_COMMON_CBFS_SPI_WRAPPER) += cbfs_spi.c
verstage-y += tlcl.c
verstage-$(CONFIG_GENERIC_UDELAY) += timer.c
+verstage-y += mem_pool.c
romstage-y += prog_ops.c
romstage-y += memchr.c
@@ -114,6 +116,9 @@ ramstage-y += cbmem_stage_cache.c
romstage-y += cbmem_stage_cache.c
endif
+romstage-y += mem_pool.c
+ramstage-y += mem_pool.c
+
romstage-y += region.c
ramstage-y += region.c
diff --git a/src/lib/mem_pool.c b/src/lib/mem_pool.c
new file mode 100644
index 0000000..b3b2f5e
--- /dev/null
+++ b/src/lib/mem_pool.c
@@ -0,0 +1,51 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2015 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <mem_pool.h>
+#include <stdlib.h>
+
+void *mem_pool_alloc(struct mem_pool *mp, size_t sz)
+{
+ void *p;
+
+ /* Make all allocations be at least 8 byte aligned. */
+ sz = ALIGN_UP(sz, 8);
+
+ /* Determine if any space available. */
+ if ((mp->size - mp->free_offset) < sz)
+ return NULL;
+
+ p = &mp->buf[mp->free_offset];
+
+ mp->free_offset += sz;
+ mp->last_alloc = p;
+
+ return p;
+}
+
+void mem_pool_free(struct mem_pool *mp, void *p)
+{
+ /* Determine if p was the most recent allocation. */
+ if (p == NULL || mp->last_alloc != p)
+ return;
+
+ mp->free_offset = mp->last_alloc - mp->buf;
+ /* No way to track allocation before this one. */
+ mp->last_alloc = NULL;
+}
Aaron Durbin (adurbin(a)google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9130
-gerrit
commit 61e7d7912b897088f2f98f83981af8b7cec53cd0
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Thu Mar 26 14:55:34 2015 -0500
x86: set smbios rom size based on CONFIG_ROM_SIZE
Instead of relying on the CBFS header's romsize field use
the CONFIG_ROM_SIZE Kconfig variable. That value is what is
used to create the rom file as it is. Therefore, just remove
the dependency.
Change-Id: If855d7378df20080061e27e4988e96aee233d1e0
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
---
src/arch/x86/boot/smbios.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/src/arch/x86/boot/smbios.c b/src/arch/x86/boot/smbios.c
index 4b96d61..4c3490d 100644
--- a/src/arch/x86/boot/smbios.c
+++ b/src/arch/x86/boot/smbios.c
@@ -28,7 +28,6 @@
#include <device/device.h>
#include <arch/cpu.h>
#include <cpu/x86/name.h>
-#include <cbfs_core.h>
#include <arch/byteorder.h>
#include <elog.h>
#include <memory_info.h>
@@ -258,14 +257,7 @@ static int smbios_write_type0(unsigned long *current, int handle)
vboot_data->vbt10 = (u32)t->eos + (version_offset - 1);
#endif
- {
- const struct cbfs_header *header;
- u32 romsize = CONFIG_ROM_SIZE;
- header = cbfs_get_header(CBFS_DEFAULT_MEDIA);
- if (header != CBFS_HEADER_INVALID_ADDRESS)
- romsize = ntohl(header->romsize);
- t->bios_rom_size = (romsize / 65535) - 1;
- }
+ t->bios_rom_size = (CONFIG_ROM_SIZE / 65535) - 1;
t->system_bios_major_release = 4;
t->bios_characteristics =
Aaron Durbin (adurbin(a)google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8943
-gerrit
commit 1789095317a39de3ccff1ee60b3b058a52290b63
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Tue Mar 24 09:20:45 2015 -0500
coreboot: differentiate on early reliable writable globals
There is a big difference between the boards supported in coreboot
and the properties they provide within each stage during the bootflow.
The leads to core infrastructure relying on supporting the least
common denominator when writing APIs.
Therefore, provide PLATFORM_HAS_EARLY_WRITABLE_GLOBALS which indicates
that the platform has reliable writable global variables in the early
stages of boot. For x86 that would be romstage, and for the other
architetures which have SRAM it would encompass bootblock and romstage.
Change-Id: I2cefeaee0551ee241e138fcee0d199679002c3be
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
---
src/Kconfig | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/src/Kconfig b/src/Kconfig
index 7aee478..2625266 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -293,6 +293,25 @@ config SYSTEM_TYPE_LAPTOP
default n
bool
+config PLATFORM_HAS_EARLY_WRITABLE_GLOBALS
+ bool
+ default y if !ARCH_X86
+ help
+ This option signals to the rest of the infrastructure that
+ the platform supports writable globals in bootblock and
+ romstage. Fox traditional x86 systems without any SRAM this
+ would mean cache-as-ram globals are migrated correctly from
+ the CAR area once memory is trained. After the migration the
+ variables are accessible using the CAR API. This behavior
+ puts such x86 systems on par with ARM and MIPS systems.
+
+config PLATFORM_NO_EARLY_WRITABLE_GLOBALS
+ bool
+ default y if !PLATFORM_HAS_EARLY_WRITABLE_GLOBALS
+ help
+ This is just the opposite of PLATFORM_HAS_EARLY_WRITABLE_GLOBALS
+ to enable cleaner Makefiles.
+
menu "Chipset"
comment "CPU"
the following patch was just integrated into master:
commit 98d9678b74ef59420adebaa8aa33c13d58cf58f9
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Sat Mar 28 14:41:04 2015 -0500
google/veyron_pinky: Don't auto select CHROMEOS
Indicate to reset of coreboot that MAINBOARD_HAS_CHROMEOS
instead of auto-selecting it.
Change-Id: Ide84bc0d8f801c79457dc05f768dd717a8a2f700
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Reviewed-on: http://review.coreboot.org/9154
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin(a)google.com>
See http://review.coreboot.org/9154 for details.
-gerrit
the following patch was just integrated into master:
commit e73dae4bf590c6ad054f0d736b82089fd65a6c0d
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Sun Mar 29 22:16:55 2015 -0500
x86: fix SMM programs linked with gc-sections
Commit f69a99db (coreboot: x86: enable gc-sections) added
gc-sections to the linker command line. The SMM-specific
linker scripts were not interrogated to see if all the
sections were being included properly. .data, .bss, and .sbss
did not have the proper globs set to put the SMM programs in
the expected order.
Lastly, explicitly set the ENTRY for the SMM programs.
Change-Id: Ibb579d18d4819af666d6ec7dfc30776e8c404b71
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Reviewed-on: http://review.coreboot.org/9160
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi(a)google.com>
See http://review.coreboot.org/9160 for details.
-gerrit
the following patch was just integrated into master:
commit 83a8df52b049e9d6f09a8fca6b58dc080c2865cd
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Fri Mar 27 21:01:52 2015 -0500
broadwell: fix HAVE_REFCODE_BLOB build errors
When building HAVE_REFCODE_BLOB there are a couple of errors. One
is a failure building !CHROME_OS. The other is from a header
change where console_tx_byte() was declared.
Change-Id: I4110debd6d3818d4a803ed22037166c226f2ed11
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Reviewed-on: http://review.coreboot.org/9142
Tested-by: build bot (Jenkins)
Reviewed-by: Duncan Laurie <dlaurie(a)google.com>
See http://review.coreboot.org/9142 for details.
-gerrit