[coreboot] Patch set updated for coreboot: 9d238f2 snow: cleanup ramstage and call hardwaremain()

David Hendricks (dhendrix@chromium.org) gerrit at coreboot.org
Thu Feb 7 05:23:47 CET 2013


David Hendricks (dhendrix at chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2302

-gerrit

commit 9d238f29d861a05c6f2f00956f909b4600fdb379
Author: David Hendricks <dhendrix at chromium.org>
Date:   Wed Feb 6 16:29:42 2013 -0800

    snow: cleanup ramstage and call hardwaremain()
    
    ** do not submit **
    
    It dies when trying to init CBMEM, but at least it gets somewhere...
    
    Change-Id: I30200432535244de971a7cea9f7902f5e9b46403
    Signed-off-by: David Hendricks <dhendrix at chromium.org>
---
 src/arch/armv7/boot/coreboot_table.c | 17 +++++++++++++++++
 src/lib/compute_ip_checksum.c        |  5 +++++
 src/mainboard/google/snow/ramstage.c | 21 ++++++++++++++-------
 3 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/src/arch/armv7/boot/coreboot_table.c b/src/arch/armv7/boot/coreboot_table.c
index b2d88aa..014316b 100644
--- a/src/arch/armv7/boot/coreboot_table.c
+++ b/src/arch/armv7/boot/coreboot_table.c
@@ -391,21 +391,30 @@ static void lb_reserve_table_memory(struct lb_header *head)
 static unsigned long lb_table_fini(struct lb_header *head, int fixup)
 {
 	struct lb_record *rec, *first_rec;
+	printk(BIOS_DEBUG, "%s: entered\n", __func__);
 	rec = lb_last_record(head);
 	if (head->table_entries) {
 		head->table_bytes += rec->size;
 	}
+	printk(BIOS_DEBUG, "%s: checkpoint 1\n", __func__);
+	printk(BIOS_DEBUG, "%s: table_entries: %s, head->table_bytes: 0x%x\n",
+			__func__, head->table_entries ? "yes" : "no", head->table_bytes);
 
 	if (fixup)
 		lb_reserve_table_memory(head);
 
+	printk(BIOS_DEBUG, "%s: checkpoint 2\n", __func__);
 	first_rec = lb_first_record(head);
+	printk(BIOS_DEBUG, "%s: checkpoint 3, first_rec: %p\n", __func__, first_rec);
 	head->table_checksum = compute_ip_checksum(first_rec, head->table_bytes);
+	printk(BIOS_DEBUG, "%s: checkpoint 4\n", __func__);
 	head->header_checksum = 0;
 	head->header_checksum = compute_ip_checksum(head, sizeof(*head));
+	printk(BIOS_DEBUG, "%s: checkpoint 5\n", __func__);
 	printk(BIOS_DEBUG,
 	       "Wrote coreboot table at: %p, 0x%x bytes, checksum %x\n",
 	       head, head->table_bytes, head->table_checksum);
+	printk(BIOS_DEBUG, "%s: exitingn", __func__);
 	return (unsigned long)rec + rec->size;
 }
 
@@ -603,10 +612,18 @@ unsigned long write_coreboot_table(
 	struct lb_memory *mem;
 
 #if CONFIG_WRITE_HIGH_TABLES
+	printk(BIOS_DEBUG, "low_table_start: 0x%lx, low_table_end: 0x%lx, "
+			   "rom_table_start: 0x%lx, rom_table_end: 0x%lx\n",
+			   low_table_start, low_table_end,
+			   rom_table_start, rom_table_end);
 	printk(BIOS_DEBUG, "Writing high table forward entry at 0x%08lx\n",
 			low_table_end);
 	head = lb_table_init(low_table_end);
+	printk(BIOS_DEBUG, "low_table_end: 0x%lx, head: 0x%p,... ",
+			low_table_end, head);
+	printk(BIOS_DEBUG, "writing head (0x%p)... ", head);
 	lb_forward(head, (struct lb_header*)rom_table_end);
+	printk(BIOS_DEBUG, "done\n");
 
 	low_table_end = (unsigned long) lb_table_fini(head, 0);
 	printk(BIOS_DEBUG, "New low_table_end: 0x%08lx\n", low_table_end);
diff --git a/src/lib/compute_ip_checksum.c b/src/lib/compute_ip_checksum.c
index 48f93d4..58f691a 100644
--- a/src/lib/compute_ip_checksum.c
+++ b/src/lib/compute_ip_checksum.c
@@ -1,6 +1,8 @@
 #include <stdint.h>
 #include <ip_checksum.h>
 
+#include <console/console.h>
+
 unsigned long compute_ip_checksum(void *addr, unsigned long length)
 {
 	uint8_t *ptr;
@@ -15,6 +17,7 @@ unsigned long compute_ip_checksum(void *addr, unsigned long length)
 	 */
 	sum = 0;
 	ptr = addr;
+	printk(BIOS_DEBUG, "%s: ptr: 0x%p, length: %ld\n", __func__, ptr, length);
 	for(i = 0; i < length; i++) {
 		unsigned long v;
 		v = ptr[i];
@@ -28,8 +31,10 @@ unsigned long compute_ip_checksum(void *addr, unsigned long length)
 			sum = (sum + (sum >> 16)) & 0xFFFF;
 		}
 	}
+	printk(BIOS_DEBUG, "%s: done\n", __func__);
 	value.byte[0] = sum & 0xff;
 	value.byte[1] = (sum >> 8) & 0xff;
+	printk(BIOS_DEBUG, "%s: exiting...\n", __func__);
 	return (~value.word) & 0xFFFF;
 }
 
diff --git a/src/mainboard/google/snow/ramstage.c b/src/mainboard/google/snow/ramstage.c
index 50050d3..d280dbe 100644
--- a/src/mainboard/google/snow/ramstage.c
+++ b/src/mainboard/google/snow/ramstage.c
@@ -19,14 +19,21 @@
 
 #include <console/console.h>
 
+#if CONFIG_WRITE_HIGH_TABLES
+#include <cbmem.h>
+#endif
+
+void hardwaremain(int boot_complete);
 void main(void)
 {
-//	volatile unsigned long *pshold = (unsigned long *)0x1004330c;
-//	*pshold &= ~0x100;	/* shut down */
-
-	/* FIXME: console_init() seems to cause things to die... Maybe
-	   we need to reset our stack pointer? */
-//	console_init();
+	console_init();
 	printk(BIOS_INFO, "hello from ramstage\n");
-	while (1);
+
+#if CONFIG_WRITE_HIGH_TABLES
+	/* Leave some space for ACPI tables */
+	high_tables_base = CONFIG_RAMBASE;
+	high_tables_size = CONFIG_RAMBASE + 0x100000;
+#endif
+
+	hardwaremain(0);
 }



More information about the coreboot mailing list