[coreboot] Patch set updated for coreboot: 3322f8f mptable: Refactor mptable generation some more

Patrick Georgi (patrick@georgi-clan.de) gerrit at coreboot.org
Fri Oct 7 23:08:36 CEST 2011


Patrick Georgi (patrick at georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/246

-gerrit

commit 3322f8f5a5ce35ecc5f03ca56f587f1b85b04e78
Author: Patrick Georgi <patrick at georgi-clan.de>
Date:   Fri Oct 7 23:01:55 2011 +0200

    mptable: Refactor mptable generation some more
    
    The last couple of lines of every mptable function were mostly
    identical. Refactor into common code, a new function mptable_finalize.
    
    Coccinelle script:
      @@
      identifier mc;
      @@
      (
      -mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
      -mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
      -printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
      -return smp_next_mpe_entry(mc);
      +return mptable_finalize(mc);
      |
      -mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
      -mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
      -return smp_next_mpe_entry(mc);
      +return mptable_finalize(mc);
      )
    
    Change-Id: Ib2270d800bdd486c5eb49b328544d36bd2298c9e
    Signed-off-by: Patrick Georgi <patrick at georgi-clan.de>
---
 src/arch/x86/boot/mpspec.c                         |    9 ++++++++-
 src/arch/x86/include/arch/smp/mpspec.h             |    2 +-
 src/mainboard/advansus/a785e-i/mptable.c           |    7 +------
 src/mainboard/amd/bimini_fam10/mptable.c           |    7 +------
 src/mainboard/amd/dbm690t/mptable.c                |    7 +------
 src/mainboard/amd/inagua/mptable.c                 |    7 +------
 src/mainboard/amd/mahogany/mptable.c               |    7 +------
 src/mainboard/amd/mahogany_fam10/mptable.c         |    7 +------
 src/mainboard/amd/persimmon/mptable.c              |    7 +------
 src/mainboard/amd/pistachio/mptable.c              |    7 +------
 src/mainboard/amd/serengeti_cheetah/mptable.c      |    6 +-----
 .../amd/serengeti_cheetah_fam10/mptable.c          |    6 +-----
 src/mainboard/amd/tilapia_fam10/mptable.c          |    7 +------
 src/mainboard/amd/torpedo/mptable.c                |    7 +------
 src/mainboard/arima/hdama/mptable.c                |    6 +-----
 src/mainboard/asrock/939a785gmh/mptable.c          |    7 +------
 src/mainboard/asrock/e350m1/mptable.c              |    7 +------
 src/mainboard/asus/a8n_e/mptable.c                 |    7 +------
 src/mainboard/asus/a8v-e_deluxe/mptable.c          |    6 +-----
 src/mainboard/asus/a8v-e_se/mptable.c              |    6 +-----
 src/mainboard/asus/m2n-e/mptable.c                 |    7 +------
 src/mainboard/asus/m2v/mptable.c                   |    6 +-----
 src/mainboard/asus/m4a78-em/mptable.c              |    7 +------
 src/mainboard/asus/m4a785-m/mptable.c              |    7 +------
 src/mainboard/asus/p2b-d/mptable.c                 |    7 +------
 src/mainboard/asus/p2b-ds/mptable.c                |    7 +------
 src/mainboard/avalue/eax-785e/mptable.c            |    7 +------
 src/mainboard/broadcom/blast/mptable.c             |    6 +-----
 src/mainboard/dell/s1850/mptable.c                 |    7 +------
 src/mainboard/getac/p470/mptable.c                 |    7 +------
 src/mainboard/gigabyte/ga_2761gxdk/mptable.c       |    6 +-----
 src/mainboard/gigabyte/m57sli/mptable.c            |    6 +-----
 src/mainboard/gigabyte/ma785gmt/mptable.c          |    7 +------
 src/mainboard/gigabyte/ma78gm/mptable.c            |    7 +------
 src/mainboard/hp/dl145_g1/mptable.c                |    6 +-----
 src/mainboard/hp/dl145_g3/mptable.c                |    6 +-----
 src/mainboard/hp/dl165_g6_fam10/mptable.c          |    6 +-----
 src/mainboard/ibase/mb899/mptable.c                |    7 +------
 src/mainboard/ibm/e325/mptable.c                   |    6 +-----
 src/mainboard/ibm/e326/mptable.c                   |    6 +-----
 src/mainboard/iei/kino-780am2-fam10/mptable.c      |    7 +------
 src/mainboard/intel/d945gclf/mptable.c             |    7 +------
 src/mainboard/intel/eagleheights/mptable.c         |    6 +-----
 src/mainboard/intel/jarrell/mptable.c              |    7 +------
 src/mainboard/intel/mtarvon/mptable.c              |    7 +------
 src/mainboard/intel/truxton/mptable.c              |    7 +------
 src/mainboard/intel/xe7501devkit/mptable.c         |    6 +-----
 src/mainboard/iwave/iWRainbowG6/mptable.c          |    6 +-----
 src/mainboard/iwill/dk8_htx/mptable.c              |    6 +-----
 src/mainboard/iwill/dk8s2/mptable.c                |    6 +-----
 src/mainboard/iwill/dk8x/mptable.c                 |    6 +-----
 src/mainboard/jetway/pa78vm5/mptable.c             |    7 +------
 src/mainboard/kontron/986lcd-m/mptable.c           |    7 +------
 src/mainboard/kontron/kt690/mptable.c              |    7 +------
 src/mainboard/lenovo/t60/mptable.c                 |    7 +------
 src/mainboard/lenovo/x60/mptable.c                 |    7 +------
 src/mainboard/msi/ms7135/mptable.c                 |    7 +------
 src/mainboard/msi/ms7260/mptable.c                 |    7 +------
 src/mainboard/msi/ms9185/mptable.c                 |    6 +-----
 src/mainboard/msi/ms9282/mptable.c                 |    6 +-----
 src/mainboard/msi/ms9652_fam10/mptable.c           |    6 +-----
 src/mainboard/newisys/khepri/mptable.c             |    6 +-----
 src/mainboard/nvidia/l1_2pvv/mptable.c             |    6 +-----
 src/mainboard/roda/rk886ex/mptable.c               |    7 +------
 src/mainboard/siemens/sitemp_g1p1/mptable.c        |    7 +------
 src/mainboard/sunw/ultra40/mptable.c               |    6 +-----
 src/mainboard/supermicro/h8dme/mptable.c           |    6 +-----
 src/mainboard/supermicro/h8dmr/mptable.c           |    6 +-----
 src/mainboard/supermicro/h8dmr_fam10/mptable.c     |    6 +-----
 src/mainboard/supermicro/h8qgi/mptable.c           |    7 +------
 src/mainboard/supermicro/h8qme_fam10/mptable.c     |    6 +-----
 src/mainboard/supermicro/h8scm_fam10/mptable.c     |    7 +------
 src/mainboard/supermicro/x6dai_g/mptable.c         |    7 +------
 src/mainboard/supermicro/x6dhe_g/mptable.c         |    7 +------
 src/mainboard/supermicro/x6dhe_g2/mptable.c        |    7 +------
 src/mainboard/supermicro/x6dhr_ig/mptable.c        |    7 +------
 src/mainboard/supermicro/x6dhr_ig2/mptable.c       |    7 +------
 src/mainboard/technexion/tim5690/mptable.c         |    7 +------
 src/mainboard/technexion/tim8690/mptable.c         |    7 +------
 src/mainboard/tyan/s2735/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2850/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2875/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2880/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2881/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2882/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2885/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2891/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2892/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2895/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2912/mptable.c                 |    6 +-----
 src/mainboard/tyan/s2912_fam10/mptable.c           |    6 +-----
 src/mainboard/tyan/s4880/mptable.c                 |    6 +-----
 src/mainboard/tyan/s4882/mptable.c                 |    6 +-----
 src/mainboard/via/epia-n/mptable.c                 |    6 +-----
 src/mainboard/via/pc2500e/mptable.c                |    7 +------
 src/mainboard/via/vt8454c/mptable.c                |    5 +----
 96 files changed, 103 insertions(+), 519 deletions(-)

diff --git a/src/arch/x86/boot/mpspec.c b/src/arch/x86/boot/mpspec.c
index 604f191..209e0bb 100644
--- a/src/arch/x86/boot/mpspec.c
+++ b/src/arch/x86/boot/mpspec.c
@@ -40,7 +40,7 @@ void mptable_init(struct mp_config_table *mc, u32 lapic_addr)
 		mc->mpc_productid[i] = ' ';
 }
 
-unsigned char smp_compute_checksum(void *v, int len)
+static unsigned char smp_compute_checksum(void *v, int len)
 {
 	unsigned char *bytes;
 	unsigned char checksum;
@@ -396,3 +396,10 @@ void mptable_write_buses(struct mp_config_table *mc, int *max_pci_bus, int *isa_
 	smp_write_bus(mc, *isa_bus, "ISA   ");
 }
 
+void *mptable_finalize(struct mp_config_table *mc)
+{
+	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
+	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
+	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
+	return smp_next_mpe_entry(mc);
+}
diff --git a/src/arch/x86/include/arch/smp/mpspec.h b/src/arch/x86/include/arch/smp/mpspec.h
index e9a20c3..2eb1813 100644
--- a/src/arch/x86/include/arch/smp/mpspec.h
+++ b/src/arch/x86/include/arch/smp/mpspec.h
@@ -267,13 +267,13 @@ void smp_write_bus_hierarchy(struct mp_config_table *mc,
 void smp_write_compatibility_address_space(struct mp_config_table *mc,
 	unsigned char busid, unsigned char address_modifier,
 	unsigned int range_list);
-unsigned char smp_compute_checksum(void *v, int len);
 void *smp_write_floating_table(unsigned long addr, unsigned int virtualwire);
 unsigned long write_smp_table(unsigned long addr);
 
 void mptable_lintsrc(struct mp_config_table *mc, unsigned long bus_isa);
 void mptable_add_isa_interrupts(struct mp_config_table *mc, unsigned long bus_isa, unsigned long apicid, int external);
 void mptable_write_buses(struct mp_config_table *mc, int *max_pci_bus, int *isa_bus);
+void *mptable_finalize(struct mp_config_table *mc);
 
 #endif
 
diff --git a/src/mainboard/advansus/a785e-i/mptable.c b/src/mainboard/advansus/a785e-i/mptable.c
index d331929..6504049 100644
--- a/src/mainboard/advansus/a785e-i/mptable.c
+++ b/src/mainboard/advansus/a785e-i/mptable.c
@@ -140,12 +140,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/bimini_fam10/mptable.c b/src/mainboard/amd/bimini_fam10/mptable.c
index 65852af..2ab3f24 100644
--- a/src/mainboard/amd/bimini_fam10/mptable.c
+++ b/src/mainboard/amd/bimini_fam10/mptable.c
@@ -144,12 +144,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/dbm690t/mptable.c b/src/mainboard/amd/dbm690t/mptable.c
index 6d2c535..901591a 100644
--- a/src/mainboard/amd/dbm690t/mptable.c
+++ b/src/mainboard/amd/dbm690t/mptable.c
@@ -154,12 +154,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/inagua/mptable.c b/src/mainboard/amd/inagua/mptable.c
index 1fc69cb..fa7de7d 100644
--- a/src/mainboard/amd/inagua/mptable.c
+++ b/src/mainboard/amd/inagua/mptable.c
@@ -229,12 +229,7 @@ static void *smp_write_config_table(void *v)
   /* There is no extension information... */
 
   /* Compute the checksums */
-  mc->mpe_checksum =
-      smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-  mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-  printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-         mc, smp_next_mpe_entry(mc));
-  return smp_next_mpe_entry(mc);
+  return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/mahogany/mptable.c b/src/mainboard/amd/mahogany/mptable.c
index e31bce7..f79a579 100644
--- a/src/mainboard/amd/mahogany/mptable.c
+++ b/src/mainboard/amd/mahogany/mptable.c
@@ -161,12 +161,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/mahogany_fam10/mptable.c b/src/mainboard/amd/mahogany_fam10/mptable.c
index 024e87a..4bf3480 100644
--- a/src/mainboard/amd/mahogany_fam10/mptable.c
+++ b/src/mainboard/amd/mahogany_fam10/mptable.c
@@ -160,12 +160,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/persimmon/mptable.c b/src/mainboard/amd/persimmon/mptable.c
index 3e57ea0..a3b4b5c 100644
--- a/src/mainboard/amd/persimmon/mptable.c
+++ b/src/mainboard/amd/persimmon/mptable.c
@@ -147,12 +147,7 @@ static void *smp_write_config_table(void *v)
   /* There is no extension information... */
 
   /* Compute the checksums */
-  mc->mpe_checksum =
-      smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-  mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-  printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-         mc, smp_next_mpe_entry(mc));
-  return smp_next_mpe_entry(mc);
+  return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/pistachio/mptable.c b/src/mainboard/amd/pistachio/mptable.c
index 6d2c535..901591a 100644
--- a/src/mainboard/amd/pistachio/mptable.c
+++ b/src/mainboard/amd/pistachio/mptable.c
@@ -154,12 +154,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/serengeti_cheetah/mptable.c b/src/mainboard/amd/serengeti_cheetah/mptable.c
index 71e2d0e..ebd4cbc 100644
--- a/src/mainboard/amd/serengeti_cheetah/mptable.c
+++ b/src/mainboard/amd/serengeti_cheetah/mptable.c
@@ -159,11 +159,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/serengeti_cheetah_fam10/mptable.c b/src/mainboard/amd/serengeti_cheetah_fam10/mptable.c
index d3ebafb..d527f9c 100644
--- a/src/mainboard/amd/serengeti_cheetah_fam10/mptable.c
+++ b/src/mainboard/amd/serengeti_cheetah_fam10/mptable.c
@@ -183,11 +183,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/tilapia_fam10/mptable.c b/src/mainboard/amd/tilapia_fam10/mptable.c
index 024e87a..4bf3480 100644
--- a/src/mainboard/amd/tilapia_fam10/mptable.c
+++ b/src/mainboard/amd/tilapia_fam10/mptable.c
@@ -160,12 +160,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/amd/torpedo/mptable.c b/src/mainboard/amd/torpedo/mptable.c
index 91213d8..0381206 100755
--- a/src/mainboard/amd/torpedo/mptable.c
+++ b/src/mainboard/amd/torpedo/mptable.c
@@ -236,12 +236,7 @@ static void *smp_write_config_table(void *v)
   /* There is no extension information... */
 
   /* Compute the checksums */
-  mc->mpe_checksum =
-      smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-  mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-  printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-         mc, smp_next_mpe_entry(mc));
-  return smp_next_mpe_entry(mc);
+  return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/arima/hdama/mptable.c b/src/mainboard/arima/hdama/mptable.c
index 648a313..19bbf25 100644
--- a/src/mainboard/arima/hdama/mptable.c
+++ b/src/mainboard/arima/hdama/mptable.c
@@ -248,11 +248,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 static void reboot_if_hotswap(void)
diff --git a/src/mainboard/asrock/939a785gmh/mptable.c b/src/mainboard/asrock/939a785gmh/mptable.c
index f1f4a46..95b1271 100644
--- a/src/mainboard/asrock/939a785gmh/mptable.c
+++ b/src/mainboard/asrock/939a785gmh/mptable.c
@@ -159,12 +159,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asrock/e350m1/mptable.c b/src/mainboard/asrock/e350m1/mptable.c
index 712419a..397e829 100644
--- a/src/mainboard/asrock/e350m1/mptable.c
+++ b/src/mainboard/asrock/e350m1/mptable.c
@@ -147,12 +147,7 @@ static void *smp_write_config_table(void *v)
   /* There is no extension information... */
 
   /* Compute the checksums */
-  mc->mpe_checksum =
-      smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-  mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-  printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-         mc, smp_next_mpe_entry(mc));
-  return smp_next_mpe_entry(mc);
+  return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/a8n_e/mptable.c b/src/mainboard/asus/a8n_e/mptable.c
index d790c76..349ae74 100644
--- a/src/mainboard/asus/a8n_e/mptable.c
+++ b/src/mainboard/asus/a8n_e/mptable.c
@@ -113,12 +113,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums. */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/a8v-e_deluxe/mptable.c b/src/mainboard/asus/a8v-e_deluxe/mptable.c
index 6c67533..999dd6c 100644
--- a/src/mainboard/asus/a8v-e_deluxe/mptable.c
+++ b/src/mainboard/asus/a8v-e_deluxe/mptable.c
@@ -105,11 +105,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums. */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc),
-						mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/a8v-e_se/mptable.c b/src/mainboard/asus/a8v-e_se/mptable.c
index 6c67533..999dd6c 100644
--- a/src/mainboard/asus/a8v-e_se/mptable.c
+++ b/src/mainboard/asus/a8v-e_se/mptable.c
@@ -105,11 +105,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums. */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc),
-						mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/m2n-e/mptable.c b/src/mainboard/asus/m2n-e/mptable.c
index 716c754..29b9d07 100644
--- a/src/mainboard/asus/m2n-e/mptable.c
+++ b/src/mainboard/asus/m2n-e/mptable.c
@@ -94,12 +94,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, bus_isa);
 
 	/* Compute the checksums. */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/m2v/mptable.c b/src/mainboard/asus/m2v/mptable.c
index 9dd57f5..5dc340a 100644
--- a/src/mainboard/asus/m2v/mptable.c
+++ b/src/mainboard/asus/m2v/mptable.c
@@ -136,11 +136,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums. */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc),
-						mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/m4a78-em/mptable.c b/src/mainboard/asus/m4a78-em/mptable.c
index 024e87a..4bf3480 100644
--- a/src/mainboard/asus/m4a78-em/mptable.c
+++ b/src/mainboard/asus/m4a78-em/mptable.c
@@ -160,12 +160,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/m4a785-m/mptable.c b/src/mainboard/asus/m4a785-m/mptable.c
index 024e87a..4bf3480 100644
--- a/src/mainboard/asus/m4a785-m/mptable.c
+++ b/src/mainboard/asus/m4a785-m/mptable.c
@@ -160,12 +160,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/p2b-d/mptable.c b/src/mainboard/asus/p2b-d/mptable.c
index 7030023..43f3a85 100644
--- a/src/mainboard/asus/p2b-d/mptable.c
+++ b/src/mainboard/asus/p2b-d/mptable.c
@@ -52,12 +52,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, isa_bus);
 
 	/* Compute the checksums. */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/asus/p2b-ds/mptable.c b/src/mainboard/asus/p2b-ds/mptable.c
index 31d360d..153c62c 100644
--- a/src/mainboard/asus/p2b-ds/mptable.c
+++ b/src/mainboard/asus/p2b-ds/mptable.c
@@ -53,12 +53,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, 0x1);
 
 	/* Compute the checksums. */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/avalue/eax-785e/mptable.c b/src/mainboard/avalue/eax-785e/mptable.c
index 5182ee7..021f635 100644
--- a/src/mainboard/avalue/eax-785e/mptable.c
+++ b/src/mainboard/avalue/eax-785e/mptable.c
@@ -142,12 +142,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/broadcom/blast/mptable.c b/src/mainboard/broadcom/blast/mptable.c
index dc09fad..b747d2e 100644
--- a/src/mainboard/broadcom/blast/mptable.c
+++ b/src/mainboard/broadcom/blast/mptable.c
@@ -134,11 +134,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/dell/s1850/mptable.c b/src/mainboard/dell/s1850/mptable.c
index 334e6ff..a71dab0 100644
--- a/src/mainboard/dell/s1850/mptable.c
+++ b/src/mainboard/dell/s1850/mptable.c
@@ -148,12 +148,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/getac/p470/mptable.c b/src/mainboard/getac/p470/mptable.c
index 33b256f..5954c97 100644
--- a/src/mainboard/getac/p470/mptable.c
+++ b/src/mainboard/getac/p470/mptable.c
@@ -74,12 +74,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, isa_bus);
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/gigabyte/ga_2761gxdk/mptable.c b/src/mainboard/gigabyte/ga_2761gxdk/mptable.c
index b79ddfb..b52cda9 100644
--- a/src/mainboard/gigabyte/ga_2761gxdk/mptable.c
+++ b/src/mainboard/gigabyte/ga_2761gxdk/mptable.c
@@ -108,11 +108,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/gigabyte/m57sli/mptable.c b/src/mainboard/gigabyte/m57sli/mptable.c
index 57fea2c..5aa7e61 100644
--- a/src/mainboard/gigabyte/m57sli/mptable.c
+++ b/src/mainboard/gigabyte/m57sli/mptable.c
@@ -114,11 +114,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/gigabyte/ma785gmt/mptable.c b/src/mainboard/gigabyte/ma785gmt/mptable.c
index 024e87a..4bf3480 100644
--- a/src/mainboard/gigabyte/ma785gmt/mptable.c
+++ b/src/mainboard/gigabyte/ma785gmt/mptable.c
@@ -160,12 +160,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/gigabyte/ma78gm/mptable.c b/src/mainboard/gigabyte/ma78gm/mptable.c
index 024e87a..4bf3480 100644
--- a/src/mainboard/gigabyte/ma78gm/mptable.c
+++ b/src/mainboard/gigabyte/ma78gm/mptable.c
@@ -160,12 +160,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/hp/dl145_g1/mptable.c b/src/mainboard/hp/dl145_g1/mptable.c
index 1d63af8..010f986 100644
--- a/src/mainboard/hp/dl145_g1/mptable.c
+++ b/src/mainboard/hp/dl145_g1/mptable.c
@@ -87,11 +87,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/hp/dl145_g3/mptable.c b/src/mainboard/hp/dl145_g3/mptable.c
index f0786a0..466b7fc 100644
--- a/src/mainboard/hp/dl145_g3/mptable.c
+++ b/src/mainboard/hp/dl145_g3/mptable.c
@@ -179,11 +179,7 @@ static void *smp_write_config_table(void *v)
 
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/hp/dl165_g6_fam10/mptable.c b/src/mainboard/hp/dl165_g6_fam10/mptable.c
index 860b86b..c246721 100644
--- a/src/mainboard/hp/dl165_g6_fam10/mptable.c
+++ b/src/mainboard/hp/dl165_g6_fam10/mptable.c
@@ -157,11 +157,7 @@ static void *smp_write_config_table(void *v)
 
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/ibase/mb899/mptable.c b/src/mainboard/ibase/mb899/mptable.c
index 7ee2ed8..0ff1896 100644
--- a/src/mainboard/ibase/mb899/mptable.c
+++ b/src/mainboard/ibase/mb899/mptable.c
@@ -122,12 +122,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, isa_bus);
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/ibm/e325/mptable.c b/src/mainboard/ibm/e325/mptable.c
index 2a4c7f3..6431f32 100644
--- a/src/mainboard/ibm/e325/mptable.c
+++ b/src/mainboard/ibm/e325/mptable.c
@@ -120,11 +120,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/ibm/e326/mptable.c b/src/mainboard/ibm/e326/mptable.c
index 0b66b44..e81bf8f 100644
--- a/src/mainboard/ibm/e326/mptable.c
+++ b/src/mainboard/ibm/e326/mptable.c
@@ -119,11 +119,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/iei/kino-780am2-fam10/mptable.c b/src/mainboard/iei/kino-780am2-fam10/mptable.c
index 024e87a..4bf3480 100644
--- a/src/mainboard/iei/kino-780am2-fam10/mptable.c
+++ b/src/mainboard/iei/kino-780am2-fam10/mptable.c
@@ -160,12 +160,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/intel/d945gclf/mptable.c b/src/mainboard/intel/d945gclf/mptable.c
index 6dcdf72..ab537cb 100644
--- a/src/mainboard/intel/d945gclf/mptable.c
+++ b/src/mainboard/intel/d945gclf/mptable.c
@@ -79,12 +79,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, isa_bus);
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/intel/eagleheights/mptable.c b/src/mainboard/intel/eagleheights/mptable.c
index 1717b36..8571864 100644
--- a/src/mainboard/intel/eagleheights/mptable.c
+++ b/src/mainboard/intel/eagleheights/mptable.c
@@ -219,11 +219,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/intel/jarrell/mptable.c b/src/mainboard/intel/jarrell/mptable.c
index 5b28642..b665703 100644
--- a/src/mainboard/intel/jarrell/mptable.c
+++ b/src/mainboard/intel/jarrell/mptable.c
@@ -227,12 +227,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/intel/mtarvon/mptable.c b/src/mainboard/intel/mtarvon/mptable.c
index b578ce8..0c025f0 100644
--- a/src/mainboard/intel/mtarvon/mptable.c
+++ b/src/mainboard/intel/mtarvon/mptable.c
@@ -100,12 +100,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/intel/truxton/mptable.c b/src/mainboard/intel/truxton/mptable.c
index c602fa8..506a1d0 100644
--- a/src/mainboard/intel/truxton/mptable.c
+++ b/src/mainboard/intel/truxton/mptable.c
@@ -128,12 +128,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/intel/xe7501devkit/mptable.c b/src/mainboard/intel/xe7501devkit/mptable.c
index 9b28db1..99fd5af 100644
--- a/src/mainboard/intel/xe7501devkit/mptable.c
+++ b/src/mainboard/intel/xe7501devkit/mptable.c
@@ -131,11 +131,7 @@ static void *smp_write_config_table(void* v)
 	xe7501devkit_register_interrupts(mc);
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/iwave/iWRainbowG6/mptable.c b/src/mainboard/iwave/iWRainbowG6/mptable.c
index 45a3c14..bf94b8c 100644
--- a/src/mainboard/iwave/iWRainbowG6/mptable.c
+++ b/src/mainboard/iwave/iWRainbowG6/mptable.c
@@ -94,11 +94,7 @@ void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/iwill/dk8_htx/mptable.c b/src/mainboard/iwill/dk8_htx/mptable.c
index 8aad009..fd53bd7 100644
--- a/src/mainboard/iwill/dk8_htx/mptable.c
+++ b/src/mainboard/iwill/dk8_htx/mptable.c
@@ -171,11 +171,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/iwill/dk8s2/mptable.c b/src/mainboard/iwill/dk8s2/mptable.c
index 7fd370f..d78ce20 100644
--- a/src/mainboard/iwill/dk8s2/mptable.c
+++ b/src/mainboard/iwill/dk8s2/mptable.c
@@ -153,11 +153,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/iwill/dk8x/mptable.c b/src/mainboard/iwill/dk8x/mptable.c
index 7fd370f..d78ce20 100644
--- a/src/mainboard/iwill/dk8x/mptable.c
+++ b/src/mainboard/iwill/dk8x/mptable.c
@@ -153,11 +153,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/jetway/pa78vm5/mptable.c b/src/mainboard/jetway/pa78vm5/mptable.c
index e8afa39..11b4357 100644
--- a/src/mainboard/jetway/pa78vm5/mptable.c
+++ b/src/mainboard/jetway/pa78vm5/mptable.c
@@ -161,12 +161,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/kontron/986lcd-m/mptable.c b/src/mainboard/kontron/986lcd-m/mptable.c
index 8280203..ab63b45 100644
--- a/src/mainboard/kontron/986lcd-m/mptable.c
+++ b/src/mainboard/kontron/986lcd-m/mptable.c
@@ -105,12 +105,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, isa_bus);
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/kontron/kt690/mptable.c b/src/mainboard/kontron/kt690/mptable.c
index 1b32543..21a0d05 100644
--- a/src/mainboard/kontron/kt690/mptable.c
+++ b/src/mainboard/kontron/kt690/mptable.c
@@ -153,12 +153,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/lenovo/t60/mptable.c b/src/mainboard/lenovo/t60/mptable.c
index 5d8ce23..a74aca8 100644
--- a/src/mainboard/lenovo/t60/mptable.c
+++ b/src/mainboard/lenovo/t60/mptable.c
@@ -67,12 +67,7 @@ static void *smp_write_config_table(void *v)
 	smp_write_lintsrc(mc, mp_ExtINT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_HIGH, isa_bus, 0, MP_APIC_ALL, 0);
 	smp_write_lintsrc(mc, mp_NMI,    MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_HIGH, isa_bus, 0, MP_APIC_ALL, 1);
 
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/lenovo/x60/mptable.c b/src/mainboard/lenovo/x60/mptable.c
index a366860..0ce10ed 100644
--- a/src/mainboard/lenovo/x60/mptable.c
+++ b/src/mainboard/lenovo/x60/mptable.c
@@ -69,12 +69,7 @@ static void *smp_write_config_table(void *v)
 	smp_write_lintsrc(mc, mp_ExtINT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_HIGH, isa_bus, 0, MP_APIC_ALL, 0);
 	smp_write_lintsrc(mc, mp_NMI,    MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_HIGH, isa_bus, 0, MP_APIC_ALL, 1);
 
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/msi/ms7135/mptable.c b/src/mainboard/msi/ms7135/mptable.c
index 3b19141..4262af1 100644
--- a/src/mainboard/msi/ms7135/mptable.c
+++ b/src/mainboard/msi/ms7135/mptable.c
@@ -149,12 +149,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/msi/ms7260/mptable.c b/src/mainboard/msi/ms7260/mptable.c
index d14dd72..bef81ef 100644
--- a/src/mainboard/msi/ms7260/mptable.c
+++ b/src/mainboard/msi/ms7260/mptable.c
@@ -99,12 +99,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums. */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/msi/ms9185/mptable.c b/src/mainboard/msi/ms9185/mptable.c
index 314acf0..0f97dca 100644
--- a/src/mainboard/msi/ms9185/mptable.c
+++ b/src/mainboard/msi/ms9185/mptable.c
@@ -150,11 +150,7 @@ static void *smp_write_config_table(void *v)
        /* There is no extension information... */
 
        /* Compute the checksums */
-       mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-       mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-       printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-               mc, smp_next_mpe_entry(mc));
-       return smp_next_mpe_entry(mc);
+       return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/msi/ms9282/mptable.c b/src/mainboard/msi/ms9282/mptable.c
index 5a6ec69..baba6b5 100644
--- a/src/mainboard/msi/ms9282/mptable.c
+++ b/src/mainboard/msi/ms9282/mptable.c
@@ -119,11 +119,7 @@ static void *smp_write_config_table(void *v)
        /* There is no extension information... */
 
        /* Compute the checksums */
-       mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-       mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-       printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-               mc, smp_next_mpe_entry(mc));
-       return smp_next_mpe_entry(mc);
+       return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/msi/ms9652_fam10/mptable.c b/src/mainboard/msi/ms9652_fam10/mptable.c
index 279f1a7..5e45380 100644
--- a/src/mainboard/msi/ms9652_fam10/mptable.c
+++ b/src/mainboard/msi/ms9652_fam10/mptable.c
@@ -108,11 +108,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/newisys/khepri/mptable.c b/src/mainboard/newisys/khepri/mptable.c
index dca1cff..4017fce 100644
--- a/src/mainboard/newisys/khepri/mptable.c
+++ b/src/mainboard/newisys/khepri/mptable.c
@@ -154,11 +154,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/nvidia/l1_2pvv/mptable.c b/src/mainboard/nvidia/l1_2pvv/mptable.c
index 50b1849..5d13701 100644
--- a/src/mainboard/nvidia/l1_2pvv/mptable.c
+++ b/src/mainboard/nvidia/l1_2pvv/mptable.c
@@ -165,11 +165,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/roda/rk886ex/mptable.c b/src/mainboard/roda/rk886ex/mptable.c
index 33b256f..5954c97 100644
--- a/src/mainboard/roda/rk886ex/mptable.c
+++ b/src/mainboard/roda/rk886ex/mptable.c
@@ -74,12 +74,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, isa_bus);
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/siemens/sitemp_g1p1/mptable.c b/src/mainboard/siemens/sitemp_g1p1/mptable.c
index 3abadcf..4180c36 100644
--- a/src/mainboard/siemens/sitemp_g1p1/mptable.c
+++ b/src/mainboard/siemens/sitemp_g1p1/mptable.c
@@ -68,12 +68,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, bus_isa);
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/sunw/ultra40/mptable.c b/src/mainboard/sunw/ultra40/mptable.c
index 7e6c018..c00c4b8 100644
--- a/src/mainboard/sunw/ultra40/mptable.c
+++ b/src/mainboard/sunw/ultra40/mptable.c
@@ -186,11 +186,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/h8dme/mptable.c b/src/mainboard/supermicro/h8dme/mptable.c
index f16c4b2..cdbe7d6 100644
--- a/src/mainboard/supermicro/h8dme/mptable.c
+++ b/src/mainboard/supermicro/h8dme/mptable.c
@@ -121,11 +121,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/h8dmr/mptable.c b/src/mainboard/supermicro/h8dmr/mptable.c
index 96ba983..734fac9 100644
--- a/src/mainboard/supermicro/h8dmr/mptable.c
+++ b/src/mainboard/supermicro/h8dmr/mptable.c
@@ -122,11 +122,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/h8dmr_fam10/mptable.c b/src/mainboard/supermicro/h8dmr_fam10/mptable.c
index 50697d7..f2ee7a8 100644
--- a/src/mainboard/supermicro/h8dmr_fam10/mptable.c
+++ b/src/mainboard/supermicro/h8dmr_fam10/mptable.c
@@ -108,11 +108,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/h8qgi/mptable.c b/src/mainboard/supermicro/h8qgi/mptable.c
index 6956027..7373cb8 100755
--- a/src/mainboard/supermicro/h8qgi/mptable.c
+++ b/src/mainboard/supermicro/h8qgi/mptable.c
@@ -184,12 +184,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-		smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-			mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/h8qme_fam10/mptable.c b/src/mainboard/supermicro/h8qme_fam10/mptable.c
index b59c2ad..2e7c4af 100644
--- a/src/mainboard/supermicro/h8qme_fam10/mptable.c
+++ b/src/mainboard/supermicro/h8qme_fam10/mptable.c
@@ -106,11 +106,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/h8scm_fam10/mptable.c b/src/mainboard/supermicro/h8scm_fam10/mptable.c
index eb6e6a4..b2c1c92 100644
--- a/src/mainboard/supermicro/h8scm_fam10/mptable.c
+++ b/src/mainboard/supermicro/h8scm_fam10/mptable.c
@@ -174,12 +174,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/x6dai_g/mptable.c b/src/mainboard/supermicro/x6dai_g/mptable.c
index 4b86f3d..acd719d 100644
--- a/src/mainboard/supermicro/x6dai_g/mptable.c
+++ b/src/mainboard/supermicro/x6dai_g/mptable.c
@@ -77,12 +77,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/x6dhe_g/mptable.c b/src/mainboard/supermicro/x6dhe_g/mptable.c
index 07fbe9d..f5f4100 100644
--- a/src/mainboard/supermicro/x6dhe_g/mptable.c
+++ b/src/mainboard/supermicro/x6dhe_g/mptable.c
@@ -121,12 +121,7 @@ static void *smp_write_config_table(void *v)
 	/* FIXME verify I have the irqs handled for all of the risers */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/x6dhe_g2/mptable.c b/src/mainboard/supermicro/x6dhe_g2/mptable.c
index 2fae456..e39a700 100644
--- a/src/mainboard/supermicro/x6dhe_g2/mptable.c
+++ b/src/mainboard/supermicro/x6dhe_g2/mptable.c
@@ -122,12 +122,7 @@ static void *smp_write_config_table(void *v)
 	/* FIXME verify I have the irqs handled for all of the risers */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/x6dhr_ig/mptable.c b/src/mainboard/supermicro/x6dhr_ig/mptable.c
index 1782726..143138d 100644
--- a/src/mainboard/supermicro/x6dhr_ig/mptable.c
+++ b/src/mainboard/supermicro/x6dhr_ig/mptable.c
@@ -169,12 +169,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/supermicro/x6dhr_ig2/mptable.c b/src/mainboard/supermicro/x6dhr_ig2/mptable.c
index a6ee5a6..a374f5c 100644
--- a/src/mainboard/supermicro/x6dhr_ig2/mptable.c
+++ b/src/mainboard/supermicro/x6dhr_ig2/mptable.c
@@ -157,12 +157,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/technexion/tim5690/mptable.c b/src/mainboard/technexion/tim5690/mptable.c
index 1b32543..21a0d05 100644
--- a/src/mainboard/technexion/tim5690/mptable.c
+++ b/src/mainboard/technexion/tim5690/mptable.c
@@ -153,12 +153,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/technexion/tim8690/mptable.c b/src/mainboard/technexion/tim8690/mptable.c
index 1b32543..21a0d05 100644
--- a/src/mainboard/technexion/tim8690/mptable.c
+++ b/src/mainboard/technexion/tim8690/mptable.c
@@ -153,12 +153,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2735/mptable.c b/src/mainboard/tyan/s2735/mptable.c
index 91fca62..9612a4c 100644
--- a/src/mainboard/tyan/s2735/mptable.c
+++ b/src/mainboard/tyan/s2735/mptable.c
@@ -119,11 +119,7 @@ Compatibility Bus Address
  predefined range: 0x00000001	// There is no extension information...
 */
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2850/mptable.c b/src/mainboard/tyan/s2850/mptable.c
index cd772b9..5144cec 100644
--- a/src/mainboard/tyan/s2850/mptable.c
+++ b/src/mainboard/tyan/s2850/mptable.c
@@ -152,11 +152,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2875/mptable.c b/src/mainboard/tyan/s2875/mptable.c
index f29f4cf..67de027 100644
--- a/src/mainboard/tyan/s2875/mptable.c
+++ b/src/mainboard/tyan/s2875/mptable.c
@@ -169,11 +169,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2880/mptable.c b/src/mainboard/tyan/s2880/mptable.c
index 7566de3..e0058fa 100644
--- a/src/mainboard/tyan/s2880/mptable.c
+++ b/src/mainboard/tyan/s2880/mptable.c
@@ -195,11 +195,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2881/mptable.c b/src/mainboard/tyan/s2881/mptable.c
index e303bfb..80b35bc 100644
--- a/src/mainboard/tyan/s2881/mptable.c
+++ b/src/mainboard/tyan/s2881/mptable.c
@@ -98,11 +98,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2882/mptable.c b/src/mainboard/tyan/s2882/mptable.c
index 8ec323c..b028abb 100644
--- a/src/mainboard/tyan/s2882/mptable.c
+++ b/src/mainboard/tyan/s2882/mptable.c
@@ -207,11 +207,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2885/mptable.c b/src/mainboard/tyan/s2885/mptable.c
index a33f7c5..fc5109f 100644
--- a/src/mainboard/tyan/s2885/mptable.c
+++ b/src/mainboard/tyan/s2885/mptable.c
@@ -110,11 +110,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2891/mptable.c b/src/mainboard/tyan/s2891/mptable.c
index 85248cc..12d6e78 100644
--- a/src/mainboard/tyan/s2891/mptable.c
+++ b/src/mainboard/tyan/s2891/mptable.c
@@ -135,11 +135,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2892/mptable.c b/src/mainboard/tyan/s2892/mptable.c
index aafe043..7af319a 100644
--- a/src/mainboard/tyan/s2892/mptable.c
+++ b/src/mainboard/tyan/s2892/mptable.c
@@ -157,11 +157,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2895/mptable.c b/src/mainboard/tyan/s2895/mptable.c
index ef4f4ef..a383cb2 100644
--- a/src/mainboard/tyan/s2895/mptable.c
+++ b/src/mainboard/tyan/s2895/mptable.c
@@ -185,11 +185,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2912/mptable.c b/src/mainboard/tyan/s2912/mptable.c
index e105442..49720dc 100644
--- a/src/mainboard/tyan/s2912/mptable.c
+++ b/src/mainboard/tyan/s2912/mptable.c
@@ -106,11 +106,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s2912_fam10/mptable.c b/src/mainboard/tyan/s2912_fam10/mptable.c
index 6778565..393362b 100644
--- a/src/mainboard/tyan/s2912_fam10/mptable.c
+++ b/src/mainboard/tyan/s2912_fam10/mptable.c
@@ -106,11 +106,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s4880/mptable.c b/src/mainboard/tyan/s4880/mptable.c
index dde7f88..6646718 100644
--- a/src/mainboard/tyan/s4880/mptable.c
+++ b/src/mainboard/tyan/s4880/mptable.c
@@ -201,11 +201,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/tyan/s4882/mptable.c b/src/mainboard/tyan/s4882/mptable.c
index ee78b11..c1da3e5 100644
--- a/src/mainboard/tyan/s4882/mptable.c
+++ b/src/mainboard/tyan/s4882/mptable.c
@@ -200,11 +200,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/via/epia-n/mptable.c b/src/mainboard/via/epia-n/mptable.c
index 3b217ae..c7c554a 100644
--- a/src/mainboard/via/epia-n/mptable.c
+++ b/src/mainboard/via/epia-n/mptable.c
@@ -39,11 +39,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/via/pc2500e/mptable.c b/src/mainboard/via/pc2500e/mptable.c
index 82cbad6..939f21d 100644
--- a/src/mainboard/via/pc2500e/mptable.c
+++ b/src/mainboard/via/pc2500e/mptable.c
@@ -88,12 +88,7 @@ static void *smp_write_config_table(void *v)
 	/* There is no extension information... */
 
 	/* Compute the checksums */
-	mc->mpe_checksum =
-	    smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n",
-		     mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)
diff --git a/src/mainboard/via/vt8454c/mptable.c b/src/mainboard/via/vt8454c/mptable.c
index d254fb1..575237f 100644
--- a/src/mainboard/via/vt8454c/mptable.c
+++ b/src/mainboard/via/vt8454c/mptable.c
@@ -58,10 +58,7 @@ static void *smp_write_config_table(void *v)
 	mptable_lintsrc(mc, 0x0);
 
 	/* Compute the checksums */
-	mc->mpe_checksum = smp_compute_checksum(smp_next_mpc_entry(mc), mc->mpe_length);
-	mc->mpc_checksum = smp_compute_checksum(mc, mc->mpc_length);
-	printk(BIOS_DEBUG, "Wrote the mp table end at: %p - %p\n", mc, smp_next_mpe_entry(mc));
-	return smp_next_mpe_entry(mc);
+	return mptable_finalize(mc);
 }
 
 unsigned long write_smp_table(unsigned long addr)




More information about the coreboot mailing list