[coreboot-gerrit] Patch set updated for coreboot: 3905d09 cmos_options: Add and check version field.

Vladimir Serbinenko (phcoder@gmail.com) gerrit at coreboot.org
Mon Jan 27 01:54:27 CET 2014


Vladimir Serbinenko (phcoder at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4790

-gerrit

commit 3905d0910c0841429642fd512765cc6d40cda954
Author: Vladimir Serbinenko <phcoder at gmail.com>
Date:   Mon Jan 27 01:27:13 2014 +0100

    cmos_options: Add and check version field.
    
    This solves the issue with adding or moving options.
    
    The version field is a 16-bit checksum (of universal hashing family) of
    options and their positions but not of defaults. This way no need
    to maintain it manually
    
    Change-Id: Id3bb904fac44279dd420c2bf617199f890bb3e0e
    Signed-off-by: Vladimir Serbinenko <phcoder at gmail.com>
---
 payloads/nvramcui/nvramcui.c                       |  4 +-
 src/drivers/pc80/mc146818rtc.c                     | 92 +++++++++++++---------
 src/drivers/pc80/mc146818rtc_early.c               |  9 +++
 src/mainboard/advansus/a785e-i/cmos.layout         |  1 +
 src/mainboard/amd/bimini_fam10/cmos.layout         |  1 +
 src/mainboard/amd/db800/cmos.layout                |  1 +
 src/mainboard/amd/dbm690t/cmos.layout              |  1 +
 src/mainboard/amd/dinar/cmos.layout                |  1 +
 src/mainboard/amd/inagua/cmos.layout               |  1 +
 src/mainboard/amd/mahogany/cmos.layout             |  1 +
 src/mainboard/amd/mahogany_fam10/cmos.layout       |  1 +
 src/mainboard/amd/norwich/cmos.layout              |  1 +
 src/mainboard/amd/olivehill/cmos.layout            |  1 +
 src/mainboard/amd/parmer/cmos.layout               |  1 +
 src/mainboard/amd/persimmon/cmos.layout            |  1 +
 src/mainboard/amd/pistachio/cmos.layout            |  1 +
 src/mainboard/amd/rumba/cmos.layout                |  1 +
 src/mainboard/amd/serengeti_cheetah/cmos.layout    |  1 +
 .../amd/serengeti_cheetah_fam10/cmos.layout        |  1 +
 src/mainboard/amd/south_station/cmos.layout        |  1 +
 src/mainboard/amd/thatcher/cmos.layout             |  1 +
 src/mainboard/amd/tilapia_fam10/cmos.layout        |  1 +
 src/mainboard/amd/torpedo/cmos.layout              |  1 +
 src/mainboard/amd/union_station/cmos.layout        |  1 +
 src/mainboard/arima/hdama/cmos.layout              |  1 +
 src/mainboard/artecgroup/dbe61/cmos.layout         |  1 +
 src/mainboard/asrock/939a785gmh/cmos.layout        |  1 +
 src/mainboard/asrock/e350m1/cmos.layout            |  1 +
 src/mainboard/asrock/imb-a180/cmos.layout          |  1 +
 src/mainboard/asus/a8n_e/cmos.layout               |  1 +
 src/mainboard/asus/a8v-e_deluxe/cmos.layout        |  1 +
 src/mainboard/asus/a8v-e_se/cmos.layout            |  1 +
 src/mainboard/asus/dsbf/cmos.layout                |  3 +-
 src/mainboard/asus/f2a85-m/cmos.layout             |  1 +
 src/mainboard/asus/k8v-x/cmos.layout               |  1 +
 src/mainboard/asus/m2n-e/cmos.layout               |  1 +
 src/mainboard/asus/m2v-mx_se/cmos.layout           |  1 +
 src/mainboard/asus/m2v/cmos.layout                 |  1 +
 src/mainboard/asus/m4a78-em/cmos.layout            |  1 +
 src/mainboard/asus/m4a785-m/cmos.layout            |  1 +
 src/mainboard/asus/m4a785t-m/cmos.layout           |  1 +
 src/mainboard/asus/m5a88-v/cmos.layout             |  1 +
 src/mainboard/asus/mew-vm/cmos.layout              |  1 +
 src/mainboard/avalue/eax-785e/cmos.layout          |  1 +
 src/mainboard/bachmann/ot200/cmos.layout           |  2 +
 src/mainboard/bcom/winnetp680/cmos.layout          |  1 +
 src/mainboard/broadcom/blast/cmos.layout           |  1 +
 src/mainboard/digitallogic/adl855pc/cmos.layout    |  1 +
 src/mainboard/digitallogic/msm586seg/cmos.layout   |  1 +
 src/mainboard/digitallogic/msm800sev/cmos.layout   |  1 +
 src/mainboard/eaglelion/5bcm/cmos.layout           |  1 +
 src/mainboard/emulation/qemu-i440fx/cmos.layout    |  1 +
 src/mainboard/getac/p470/cmos.layout               |  2 +
 src/mainboard/gigabyte/ga_2761gxdk/cmos.layout     |  1 +
 src/mainboard/gigabyte/m57sli/cmos.layout          |  1 +
 src/mainboard/gigabyte/ma785gm/cmos.layout         |  1 +
 src/mainboard/gigabyte/ma785gmt/cmos.layout        |  1 +
 src/mainboard/gigabyte/ma78gm/cmos.layout          |  1 +
 src/mainboard/gizmosphere/gizmo/cmos.layout        |  1 +
 src/mainboard/google/bolt/cmos.layout              |  2 +
 src/mainboard/google/butterfly/cmos.layout         |  2 +
 src/mainboard/google/falco/cmos.layout             |  2 +
 src/mainboard/google/link/cmos.layout              |  2 +
 src/mainboard/google/parrot/cmos.layout            |  2 +
 src/mainboard/google/peppy/cmos.layout             |  2 +
 src/mainboard/google/slippy/cmos.layout            |  2 +
 src/mainboard/google/stout/cmos.layout             |  2 +
 src/mainboard/hp/dl145_g1/cmos.layout              |  1 +
 src/mainboard/hp/dl145_g3/cmos.layout              |  1 +
 src/mainboard/hp/dl165_g6_fam10/cmos.layout        |  1 +
 src/mainboard/ibase/mb899/cmos.layout              |  2 +
 src/mainboard/ibm/e325/cmos.layout                 |  1 +
 src/mainboard/ibm/e326/cmos.layout                 |  1 +
 src/mainboard/iei/juki-511p/cmos.layout            |  1 +
 src/mainboard/iei/kino-780am2-fam10/cmos.layout    |  1 +
 src/mainboard/iei/nova4899r/cmos.layout            |  1 +
 src/mainboard/intel/baskingridge/cmos.layout       |  2 +
 src/mainboard/intel/cougar_canyon2/cmos.layout     |  2 +
 src/mainboard/intel/d945gclf/cmos.layout           |  2 +
 src/mainboard/intel/eagleheights/cmos.layout       |  2 +
 src/mainboard/intel/emeraldlake2/cmos.layout       |  2 +
 src/mainboard/intel/jarrell/cmos.layout            |  1 +
 src/mainboard/intel/wtm2/cmos.layout               |  2 +
 src/mainboard/iwave/iWRainbowG6/cmos.layout        |  2 +
 src/mainboard/iwill/dk8_htx/cmos.layout            |  1 +
 src/mainboard/iwill/dk8s2/cmos.layout              |  1 +
 src/mainboard/iwill/dk8x/cmos.layout               |  1 +
 src/mainboard/jetway/j7f2/cmos.layout              |  1 +
 src/mainboard/jetway/pa78vm5/cmos.layout           |  1 +
 src/mainboard/kontron/986lcd-m/cmos.layout         |  2 +
 src/mainboard/kontron/kt690/cmos.layout            |  1 +
 src/mainboard/kontron/ktqm77/cmos.layout           |  2 +
 src/mainboard/lanner/em8510/cmos.layout            |  1 +
 src/mainboard/lenovo/t60/cmos.layout               |  2 +
 src/mainboard/lenovo/x201/cmos.layout              |  2 +
 src/mainboard/lenovo/x230/cmos.layout              |  2 +
 src/mainboard/lenovo/x60/cmos.layout               |  2 +
 src/mainboard/lippert/frontrunner-af/cmos.layout   |  1 +
 src/mainboard/lippert/frontrunner/cmos.layout      |  1 +
 src/mainboard/lippert/toucan-af/cmos.layout        |  1 +
 src/mainboard/msi/ms7135/cmos.layout               |  1 +
 src/mainboard/msi/ms7260/cmos.layout               |  1 +
 src/mainboard/msi/ms9185/cmos.layout               |  1 +
 src/mainboard/msi/ms9282/cmos.layout               |  1 +
 src/mainboard/msi/ms9652_fam10/cmos.layout         |  1 +
 src/mainboard/newisys/khepri/cmos.layout           |  1 +
 src/mainboard/nvidia/l1_2pvv/cmos.layout           |  1 +
 src/mainboard/pcengines/alix1c/cmos.layout         |  1 +
 src/mainboard/pcengines/alix2d/cmos.layout         |  1 +
 src/mainboard/roda/rk886ex/cmos.layout             |  2 +
 src/mainboard/roda/rk9/cmos.layout                 |  2 +
 src/mainboard/samsung/lumpy/cmos.layout            |  2 +
 src/mainboard/samsung/stumpy/cmos.layout           |  2 +
 src/mainboard/siemens/sitemp_g1p1/cmos.layout      | 11 +--
 src/mainboard/sunw/ultra40/cmos.layout             |  1 +
 src/mainboard/supermicro/h8dme/cmos.layout         |  1 +
 src/mainboard/supermicro/h8dmr/cmos.layout         |  1 +
 src/mainboard/supermicro/h8dmr_fam10/cmos.layout   |  1 +
 src/mainboard/supermicro/h8qgi/cmos.layout         |  1 +
 src/mainboard/supermicro/h8qme_fam10/cmos.layout   |  1 +
 src/mainboard/supermicro/h8scm/cmos.layout         |  1 +
 src/mainboard/supermicro/h8scm_fam10/cmos.layout   |  1 +
 src/mainboard/supermicro/x6dai_g/cmos.layout       |  1 +
 src/mainboard/supermicro/x6dhe_g/cmos.layout       |  1 +
 src/mainboard/supermicro/x6dhe_g2/cmos.layout      |  1 +
 src/mainboard/supermicro/x6dhr_ig/cmos.layout      |  1 +
 src/mainboard/supermicro/x6dhr_ig2/cmos.layout     |  1 +
 src/mainboard/supermicro/x7db8/cmos.layout         |  2 +
 src/mainboard/technexion/tim5690/cmos.layout       |  1 +
 src/mainboard/technexion/tim8690/cmos.layout       |  1 +
 src/mainboard/technologic/ts5300/cmos.layout       |  1 +
 src/mainboard/traverse/geos/cmos.layout            |  1 +
 src/mainboard/tyan/s2735/cmos.layout               |  1 +
 src/mainboard/tyan/s2850/cmos.layout               |  1 +
 src/mainboard/tyan/s2875/cmos.layout               |  1 +
 src/mainboard/tyan/s2880/cmos.layout               |  1 +
 src/mainboard/tyan/s2881/cmos.layout               |  1 +
 src/mainboard/tyan/s2882/cmos.layout               |  1 +
 src/mainboard/tyan/s2885/cmos.layout               |  1 +
 src/mainboard/tyan/s2891/cmos.layout               |  1 +
 src/mainboard/tyan/s2892/cmos.layout               |  1 +
 src/mainboard/tyan/s2895/cmos.layout               |  1 +
 src/mainboard/tyan/s2912/cmos.layout               |  1 +
 src/mainboard/tyan/s2912_fam10/cmos.layout         |  1 +
 src/mainboard/tyan/s4880/cmos.layout               |  1 +
 src/mainboard/tyan/s4882/cmos.layout               |  1 +
 src/mainboard/tyan/s8226/cmos.layout               |  1 +
 src/mainboard/via/epia-cn/cmos.layout              |  1 +
 src/mainboard/via/epia-m/cmos.layout               |  1 +
 src/mainboard/via/epia-m700/cmos.layout            |  1 +
 src/mainboard/via/epia-n/cmos.layout               |  1 +
 src/mainboard/via/epia/cmos.layout                 |  1 +
 src/mainboard/via/pc2500e/cmos.layout              |  1 +
 src/mainboard/via/vt8454c/cmos.layout              |  1 +
 src/mainboard/winent/mb6047/cmos.layout            |  1 +
 src/mainboard/winent/pl6064/cmos.layout            |  1 +
 src/mainboard/wyse/s50/cmos.layout                 |  1 +
 util/nvramtool/accessors/layout-bin.c              |  4 +
 util/nvramtool/accessors/layout-text.c             | 57 ++++++++++++++
 util/nvramtool/cli/nvramtool.c                     | 18 ++++-
 util/nvramtool/cmos_ops.c                          |  4 +
 util/nvramtool/input_file.c                        |  9 +++
 util/nvramtool/layout.c                            |  6 +-
 util/nvramtool/layout.h                            |  1 +
 util/nvramtool/lbtable.c                           |  4 +
 165 files changed, 352 insertions(+), 51 deletions(-)

diff --git a/payloads/nvramcui/nvramcui.c b/payloads/nvramcui/nvramcui.c
index daf153b..4765921 100644
--- a/payloads/nvramcui/nvramcui.c
+++ b/payloads/nvramcui/nvramcui.c
@@ -97,7 +97,7 @@ int main()
 	int maxlength=0;
 	struct cb_cmos_entries *option = first_cmos_entry(opttbl);
 	while (option) {
-		if ((option->config != 'r') && (strcmp("check_sum", option->name) != 0)) {
+		if ((option->config != 'r') && (option->config != 'v') && (strcmp("check_sum", option->name) != 0)) {
 			maxlength = max(maxlength, strlen(option->name));
 			numopts++;
 		}
@@ -113,7 +113,7 @@ int main()
 	/* walk over options, fetch details */
 	option = first_cmos_entry(opttbl);
 	for (i=0;i<numopts;i++) {
-		while ((option->config == 'r') || (strcmp("check_sum", option->name) == 0)) {
+		while ((option->config == 'r') || (option->config == 'v') || (strcmp("check_sum", option->name) == 0)) {
 			option = next_cmos_entry(option);
 		}
 		fields[2*i] = new_field(1, strlen(option->name), i*2, 1, 0, 0);
diff --git a/src/drivers/pc80/mc146818rtc.c b/src/drivers/pc80/mc146818rtc.c
index 0f44444..7909977 100644
--- a/src/drivers/pc80/mc146818rtc.c
+++ b/src/drivers/pc80/mc146818rtc.c
@@ -26,15 +26,10 @@ static void rtc_update_cmos_date(u8 has_century)
 }
 
 #if CONFIG_USE_OPTION_TABLE
-static struct cmos_checksum *get_cmos_checksum_range(void)
+static struct cmos_checksum *get_cmos_checksum_range(struct cmos_option_table *ct)
 {
-	struct cmos_option_table *ct;
 	struct cmos_checksum *cc;
 
-	ct = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, "cmos_layout.bin",
-				   CBFS_COMPONENT_CMOS_LAYOUT, NULL);
-	if (!ct)
-		return 0;
 	cc=(struct cmos_checksum*)((unsigned char *)ct + ct->header_length);
 	for(;cc->tag==LB_TAG_OPTION || cc->tag==LB_TAG_OPTION_ENUM
 		    || cc->tag == LB_TAG_OPTION_DEFAULTS;
@@ -44,24 +39,52 @@ static struct cmos_checksum *get_cmos_checksum_range(void)
 	return cc;
 }
 
-static int overlaps_checksum(u8 byte)
+static int overlaps_checksum(struct cmos_option_table *ct, u8 byte)
 {
 	struct cmos_checksum *cc;
 
-	cc = get_cmos_checksum_range();
+	cc = get_cmos_checksum_range(ct);
 	if (!cc)
 		return 0;
 
 	return (cc->range_start <= byte) && (byte <= cc->range_end);
 }
 
-static int rtc_checksum_valid(void)
+static struct cmos_entries *find_cmos_entry(struct cmos_option_table *ct, const char *name)
+{
+	size_t namelen;
+	struct cmos_entries *ce;
+
+	/* Figure out how long name is */
+	namelen = strnlen(name, CMOS_MAX_NAME_LENGTH);
+
+	/* find the requested entry record */
+	ce=(struct cmos_entries*)((unsigned char *)ct + ct->header_length);
+	for(;ce->tag==LB_TAG_OPTION;
+		ce=(struct cmos_entries*)((unsigned char *)ce + ce->size)) {
+		if (memcmp(ce->name, name, namelen) == 0) {
+			return ce;
+		}
+	}
+	return NULL;
+}
+
+static int rtc_checksum_valid(struct cmos_option_table *ct)
 {
 	int i;
 	u16 sum, old_sum;
 	struct cmos_checksum *cc;
+	struct cmos_entries *ce;
 
-	cc = get_cmos_checksum_range();
+	ce = find_cmos_entry(ct, "version");
+	if(!ce)
+		return 0;
+	if (cmos_read (ce->bit / 8) != (ce->config_id & 0xff))
+		return 0;
+	if (cmos_read (ce->bit / 8 + 1) != ((ce->config_id >> 8) & 0xff))
+		return 0;
+
+	cc = get_cmos_checksum_range(ct);
 	if (!cc)
 		return 0;
 
@@ -73,13 +96,13 @@ static int rtc_checksum_valid(void)
 	return sum == old_sum;
 }
 
-static void rtc_set_checksum(void)
+static void rtc_set_checksum(struct cmos_option_table *ct)
 {
 	int i;
 	u16 sum;
 	struct cmos_checksum *cc;
 
-	cc = get_cmos_checksum_range();
+	cc = get_cmos_checksum_range(ct);
 	if (!cc)
 		return;
 
@@ -109,6 +132,10 @@ void rtc_init(int invalid)
 	int checksum_invalid = 0;
 #if CONFIG_USE_OPTION_TABLE
 	unsigned char x;
+	struct cmos_option_table *ct = 0;
+
+	ct = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, "cmos_layout.bin",
+				   CBFS_COMPONENT_CMOS_LAYOUT, NULL);
 #endif
 
 #if CONFIG_HAVE_ACPI_RESUME
@@ -130,7 +157,7 @@ void rtc_init(int invalid)
 	cmos_invalid = !(x & RTC_VRT);
 
 	/* See if there is a CMOS checksum error */
-	checksum_invalid = !rtc_checksum_valid();
+	checksum_invalid = !ct || !rtc_checksum_valid(ct);
 
 #define CLEAR_CMOS 0
 #else
@@ -168,12 +195,13 @@ void rtc_init(int invalid)
 
 #if CONFIG_USE_OPTION_TABLE
 	/* See if there is a LB CMOS checksum error */
-	checksum_invalid = !rtc_checksum_valid();
+	checksum_invalid = !ct || !rtc_checksum_valid(ct);
 	if(checksum_invalid)
 		printk(BIOS_DEBUG, "RTC: coreboot checksum invalid\n");
 
 	/* Make certain we have a valid checksum */
-	rtc_set_checksum();
+	if (ct)
+		rtc_set_checksum(ct);
 #endif
 
 	/* Clear any pending interrupts */
@@ -222,13 +250,7 @@ enum cb_err get_option(void *dest, const char *name)
 {
 	struct cmos_option_table *ct;
 	struct cmos_entries *ce;
-	size_t namelen;
-	int found=0;
 
-	/* Figure out how long name is */
-	namelen = strnlen(name, CMOS_MAX_NAME_LENGTH);
-
-	/* find the requested entry record */
 	ct = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, "cmos_layout.bin",
 				   CBFS_COMPONENT_CMOS_LAYOUT, NULL);
 	if (!ct) {
@@ -236,27 +258,21 @@ enum cb_err get_option(void *dest, const char *name)
 						"Options are disabled\n");
 		return CB_CMOS_LAYOUT_NOT_FOUND;
 	}
-	ce=(struct cmos_entries*)((unsigned char *)ct + ct->header_length);
-	for(;ce->tag==LB_TAG_OPTION;
-		ce=(struct cmos_entries*)((unsigned char *)ce + ce->size)) {
-		if (memcmp(ce->name, name, namelen) == 0) {
-			found=1;
-			break;
-		}
-	}
-	if(!found) {
+
+	ce = find_cmos_entry(ct, name);
+	if(!ce) {
 		printk(BIOS_DEBUG, "WARNING: No CMOS option '%s'.\n", name);
 		return CB_CMOS_OPTION_NOT_FOUND;
 	}
-
 	if(get_cmos_value(ce->bit, ce->length, dest) != CB_SUCCESS)
 		return CB_CMOS_ACCESS_ERROR;
-	if(!rtc_checksum_valid())
+	if(!rtc_checksum_valid(ct))
 		return CB_CMOS_CHECKSUM_INVALID;
 	return CB_SUCCESS;
 }
 
-static enum cb_err set_cmos_value(unsigned long bit, unsigned long length,
+static enum cb_err set_cmos_value(struct cmos_option_table *ct,
+				  unsigned long bit, unsigned long length,
 				  void *vret)
 {
 	unsigned char *ret;
@@ -276,7 +292,7 @@ static enum cb_err set_cmos_value(unsigned long bit, unsigned long length,
 		uchar &= ~mask;
 		uchar |= (ret[0] << byte_bit);
 		cmos_write(uchar, byte);
-		if (overlaps_checksum (byte))
+		if (overlaps_checksum (ct, byte))
 			chksum_update_needed = 1;
 	} else {			/* more that one byte so transfer the whole bytes */
 		if (byte_bit || length % 8)
@@ -284,13 +300,13 @@ static enum cb_err set_cmos_value(unsigned long bit, unsigned long length,
 
 		for(i=0; length; i++, length-=8, byte++) {
 			cmos_write(ret[i], byte);
-			if (overlaps_checksum (byte))
+			if (overlaps_checksum (ct, byte))
 				chksum_update_needed = 1;
 		}
 	}
 
 	if (chksum_update_needed) {
-		rtc_set_checksum();
+		rtc_set_checksum(ct);
 	}
 	return CB_SUCCESS;
 }
@@ -331,12 +347,12 @@ enum cb_err set_option(const char *name, void *value)
 	if (ce->config == 's') {
 		length = MAX(strlen((const char *)value) * 8, ce->length - 8);
 		/* make sure the string is null terminated */
-		if (set_cmos_value(ce->bit + ce->length - 8, 8, &(u8[]){0})
+		if (set_cmos_value(ct, ce->bit + ce->length - 8, 8, &(u8[]){0})
 		    != CB_SUCCESS)
 			return (CB_CMOS_ACCESS_ERROR);
 	}
 
-	if (set_cmos_value(ce->bit, length, value) != CB_SUCCESS)
+	if (set_cmos_value(ct, ce->bit, length, value) != CB_SUCCESS)
 		return (CB_CMOS_ACCESS_ERROR);
 
 	return CB_SUCCESS;
diff --git a/src/drivers/pc80/mc146818rtc_early.c b/src/drivers/pc80/mc146818rtc_early.c
index 3bf7e82..f8d6295 100644
--- a/src/drivers/pc80/mc146818rtc_early.c
+++ b/src/drivers/pc80/mc146818rtc_early.c
@@ -71,6 +71,15 @@ static int cmos_chksum_valid(void)
 	unsigned char addr;
 	u16 sum, old_sum;
 	const struct cmos_checksum *cc;
+	const struct cmos_entries *ce;
+
+	ce = (const struct cmos_entries *) find_entry("version");
+	if (!ce)
+		return 0;
+	if (cmos_read (ce->bit / 8) != (ce->config_id & 0xff))
+		return 0;
+	if (cmos_read (ce->bit / 8 + 1) != ((ce->config_id >> 8) & 0xff))
+		return 0;
 
 	cc = (struct cmos_checksum *) find_first_entry();
 
diff --git a/src/mainboard/advansus/a785e-i/cmos.layout b/src/mainboard/advansus/a785e-i/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/advansus/a785e-i/cmos.layout
+++ b/src/mainboard/advansus/a785e-i/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/bimini_fam10/cmos.layout b/src/mainboard/amd/bimini_fam10/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/amd/bimini_fam10/cmos.layout
+++ b/src/mainboard/amd/bimini_fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/db800/cmos.layout b/src/mainboard/amd/db800/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/amd/db800/cmos.layout
+++ b/src/mainboard/amd/db800/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/amd/dbm690t/cmos.layout b/src/mainboard/amd/dbm690t/cmos.layout
index 86aadf5..6fcaa36 100644
--- a/src/mainboard/amd/dbm690t/cmos.layout
+++ b/src/mainboard/amd/dbm690t/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/dinar/cmos.layout b/src/mainboard/amd/dinar/cmos.layout
index 89ef0ca..1834e77 100644
--- a/src/mainboard/amd/dinar/cmos.layout
+++ b/src/mainboard/amd/dinar/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/inagua/cmos.layout b/src/mainboard/amd/inagua/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/amd/inagua/cmos.layout
+++ b/src/mainboard/amd/inagua/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/mahogany/cmos.layout b/src/mainboard/amd/mahogany/cmos.layout
index 37530b7..e638437 100644
--- a/src/mainboard/amd/mahogany/cmos.layout
+++ b/src/mainboard/amd/mahogany/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/mahogany_fam10/cmos.layout b/src/mainboard/amd/mahogany_fam10/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/amd/mahogany_fam10/cmos.layout
+++ b/src/mainboard/amd/mahogany_fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/norwich/cmos.layout b/src/mainboard/amd/norwich/cmos.layout
index 864d89a..0e71deb 100644
--- a/src/mainboard/amd/norwich/cmos.layout
+++ b/src/mainboard/amd/norwich/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 440          1       e       0        dcon_present
 1008         16      h       0        check_sum
 
diff --git a/src/mainboard/amd/olivehill/cmos.layout b/src/mainboard/amd/olivehill/cmos.layout
index 5520564..7df5c01 100644
--- a/src/mainboard/amd/olivehill/cmos.layout
+++ b/src/mainboard/amd/olivehill/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/parmer/cmos.layout b/src/mainboard/amd/parmer/cmos.layout
index 5520564..7df5c01 100644
--- a/src/mainboard/amd/parmer/cmos.layout
+++ b/src/mainboard/amd/parmer/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/persimmon/cmos.layout b/src/mainboard/amd/persimmon/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/amd/persimmon/cmos.layout
+++ b/src/mainboard/amd/persimmon/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/pistachio/cmos.layout b/src/mainboard/amd/pistachio/cmos.layout
index 86aadf5..6fcaa36 100644
--- a/src/mainboard/amd/pistachio/cmos.layout
+++ b/src/mainboard/amd/pistachio/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/rumba/cmos.layout b/src/mainboard/amd/rumba/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/amd/rumba/cmos.layout
+++ b/src/mainboard/amd/rumba/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/amd/serengeti_cheetah/cmos.layout b/src/mainboard/amd/serengeti_cheetah/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/amd/serengeti_cheetah/cmos.layout
+++ b/src/mainboard/amd/serengeti_cheetah/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/serengeti_cheetah_fam10/cmos.layout b/src/mainboard/amd/serengeti_cheetah_fam10/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/amd/serengeti_cheetah_fam10/cmos.layout
+++ b/src/mainboard/amd/serengeti_cheetah_fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/south_station/cmos.layout b/src/mainboard/amd/south_station/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/amd/south_station/cmos.layout
+++ b/src/mainboard/amd/south_station/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/thatcher/cmos.layout b/src/mainboard/amd/thatcher/cmos.layout
index 5520564..7df5c01 100644
--- a/src/mainboard/amd/thatcher/cmos.layout
+++ b/src/mainboard/amd/thatcher/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/tilapia_fam10/cmos.layout b/src/mainboard/amd/tilapia_fam10/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/amd/tilapia_fam10/cmos.layout
+++ b/src/mainboard/amd/tilapia_fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/torpedo/cmos.layout b/src/mainboard/amd/torpedo/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/amd/torpedo/cmos.layout
+++ b/src/mainboard/amd/torpedo/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/amd/union_station/cmos.layout b/src/mainboard/amd/union_station/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/amd/union_station/cmos.layout
+++ b/src/mainboard/amd/union_station/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/arima/hdama/cmos.layout b/src/mainboard/arima/hdama/cmos.layout
index d8e2eee..5284ec1 100644
--- a/src/mainboard/arima/hdama/cmos.layout
+++ b/src/mainboard/arima/hdama/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/artecgroup/dbe61/cmos.layout b/src/mainboard/artecgroup/dbe61/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/artecgroup/dbe61/cmos.layout
+++ b/src/mainboard/artecgroup/dbe61/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/asrock/939a785gmh/cmos.layout b/src/mainboard/asrock/939a785gmh/cmos.layout
index 37530b7..e638437 100644
--- a/src/mainboard/asrock/939a785gmh/cmos.layout
+++ b/src/mainboard/asrock/939a785gmh/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asrock/e350m1/cmos.layout b/src/mainboard/asrock/e350m1/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/asrock/e350m1/cmos.layout
+++ b/src/mainboard/asrock/e350m1/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asrock/imb-a180/cmos.layout b/src/mainboard/asrock/imb-a180/cmos.layout
index f6b5806..751ae20 100644
--- a/src/mainboard/asrock/imb-a180/cmos.layout
+++ b/src/mainboard/asrock/imb-a180/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/a8n_e/cmos.layout b/src/mainboard/asus/a8n_e/cmos.layout
index 726de26..b78884b 100644
--- a/src/mainboard/asus/a8n_e/cmos.layout
+++ b/src/mainboard/asus/a8n_e/cmos.layout
@@ -42,6 +42,7 @@ entries
     440 4 e 9 slow_cpu
     444 1 e 1 nmi
     445 1 e 1 iommu
+    448 16 v 0 version
     728 256 h 0 user_data
     984 16 h 0 check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/a8v-e_deluxe/cmos.layout b/src/mainboard/asus/a8v-e_deluxe/cmos.layout
index fc13a3c..cf6915c 100644
--- a/src/mainboard/asus/a8v-e_deluxe/cmos.layout
+++ b/src/mainboard/asus/a8v-e_deluxe/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/a8v-e_se/cmos.layout b/src/mainboard/asus/a8v-e_se/cmos.layout
index fc13a3c..cf6915c 100644
--- a/src/mainboard/asus/a8v-e_se/cmos.layout
+++ b/src/mainboard/asus/a8v-e_se/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/dsbf/cmos.layout b/src/mainboard/asus/dsbf/cmos.layout
index 29e78ad..bbca1f4 100644
--- a/src/mainboard/asus/dsbf/cmos.layout
+++ b/src/mainboard/asus/dsbf/cmos.layout
@@ -65,7 +65,8 @@ entries
 
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
-#120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/asus/f2a85-m/cmos.layout b/src/mainboard/asus/f2a85-m/cmos.layout
index 5520564..7df5c01 100644
--- a/src/mainboard/asus/f2a85-m/cmos.layout
+++ b/src/mainboard/asus/f2a85-m/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/k8v-x/cmos.layout b/src/mainboard/asus/k8v-x/cmos.layout
index fc13a3c..cf6915c 100644
--- a/src/mainboard/asus/k8v-x/cmos.layout
+++ b/src/mainboard/asus/k8v-x/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m2n-e/cmos.layout b/src/mainboard/asus/m2n-e/cmos.layout
index 7281d23..09aef35 100644
--- a/src/mainboard/asus/m2n-e/cmos.layout
+++ b/src/mainboard/asus/m2n-e/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m2v-mx_se/cmos.layout b/src/mainboard/asus/m2v-mx_se/cmos.layout
index f2e90e7..f90afbb 100644
--- a/src/mainboard/asus/m2v-mx_se/cmos.layout
+++ b/src/mainboard/asus/m2v-mx_se/cmos.layout
@@ -44,6 +44,7 @@ entries
 444          1       e       1        nmi
 445          1       e       1        iommu
 448          3       e       10       videoram_size
+456         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m2v/cmos.layout b/src/mainboard/asus/m2v/cmos.layout
index fc13a3c..cf6915c 100644
--- a/src/mainboard/asus/m2v/cmos.layout
+++ b/src/mainboard/asus/m2v/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m4a78-em/cmos.layout b/src/mainboard/asus/m4a78-em/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m4a78-em/cmos.layout
+++ b/src/mainboard/asus/m4a78-em/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m4a785-m/cmos.layout b/src/mainboard/asus/m4a785-m/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m4a785-m/cmos.layout
+++ b/src/mainboard/asus/m4a785-m/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m4a785t-m/cmos.layout b/src/mainboard/asus/m4a785t-m/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m4a785t-m/cmos.layout
+++ b/src/mainboard/asus/m4a785t-m/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m5a88-v/cmos.layout b/src/mainboard/asus/m5a88-v/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m5a88-v/cmos.layout
+++ b/src/mainboard/asus/m5a88-v/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/mew-vm/cmos.layout b/src/mainboard/asus/mew-vm/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/asus/mew-vm/cmos.layout
+++ b/src/mainboard/asus/mew-vm/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/avalue/eax-785e/cmos.layout b/src/mainboard/avalue/eax-785e/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/avalue/eax-785e/cmos.layout
+++ b/src/mainboard/avalue/eax-785e/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/bachmann/ot200/cmos.layout b/src/mainboard/bachmann/ot200/cmos.layout
index 90ade93..c12ac68 100644
--- a/src/mainboard/bachmann/ot200/cmos.layout
+++ b/src/mainboard/bachmann/ot200/cmos.layout
@@ -29,6 +29,8 @@ entries
 384          3       e       1        baud_rate
 387          4       e       2        debug_level
 
+448         16       v       0        version
+
 # -----------------------------------------------------------------
 # coreboot config options: check sums
 1008         16      h       0        check_sum
diff --git a/src/mainboard/bcom/winnetp680/cmos.layout b/src/mainboard/bcom/winnetp680/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/bcom/winnetp680/cmos.layout
+++ b/src/mainboard/bcom/winnetp680/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/broadcom/blast/cmos.layout b/src/mainboard/broadcom/blast/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/broadcom/blast/cmos.layout
+++ b/src/mainboard/broadcom/blast/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/digitallogic/adl855pc/cmos.layout b/src/mainboard/digitallogic/adl855pc/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/digitallogic/adl855pc/cmos.layout
+++ b/src/mainboard/digitallogic/adl855pc/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/digitallogic/msm586seg/cmos.layout b/src/mainboard/digitallogic/msm586seg/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/digitallogic/msm586seg/cmos.layout
+++ b/src/mainboard/digitallogic/msm586seg/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/digitallogic/msm800sev/cmos.layout b/src/mainboard/digitallogic/msm800sev/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/digitallogic/msm800sev/cmos.layout
+++ b/src/mainboard/digitallogic/msm800sev/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/eaglelion/5bcm/cmos.layout b/src/mainboard/eaglelion/5bcm/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/eaglelion/5bcm/cmos.layout
+++ b/src/mainboard/eaglelion/5bcm/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/emulation/qemu-i440fx/cmos.layout b/src/mainboard/emulation/qemu-i440fx/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/emulation/qemu-i440fx/cmos.layout
+++ b/src/mainboard/emulation/qemu-i440fx/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/getac/p470/cmos.layout b/src/mainboard/getac/p470/cmos.layout
index c879078..2580ab8 100644
--- a/src/mainboard/getac/p470/cmos.layout
+++ b/src/mainboard/getac/p470/cmos.layout
@@ -66,6 +66,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout b/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout
+++ b/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/m57sli/cmos.layout b/src/mainboard/gigabyte/m57sli/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/gigabyte/m57sli/cmos.layout
+++ b/src/mainboard/gigabyte/m57sli/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/ma785gm/cmos.layout b/src/mainboard/gigabyte/ma785gm/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/gigabyte/ma785gm/cmos.layout
+++ b/src/mainboard/gigabyte/ma785gm/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/ma785gmt/cmos.layout b/src/mainboard/gigabyte/ma785gmt/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/gigabyte/ma785gmt/cmos.layout
+++ b/src/mainboard/gigabyte/ma785gmt/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/ma78gm/cmos.layout b/src/mainboard/gigabyte/ma78gm/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/gigabyte/ma78gm/cmos.layout
+++ b/src/mainboard/gigabyte/ma78gm/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gizmosphere/gizmo/cmos.layout b/src/mainboard/gizmosphere/gizmo/cmos.layout
index 54ec400..451b3f6 100755
--- a/src/mainboard/gizmosphere/gizmo/cmos.layout
+++ b/src/mainboard/gizmosphere/gizmo/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/google/bolt/cmos.layout b/src/mainboard/google/bolt/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/bolt/cmos.layout
+++ b/src/mainboard/google/bolt/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/butterfly/cmos.layout b/src/mainboard/google/butterfly/cmos.layout
index f0163f1..0e3d0b2 100644
--- a/src/mainboard/google/butterfly/cmos.layout
+++ b/src/mainboard/google/butterfly/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/falco/cmos.layout b/src/mainboard/google/falco/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/falco/cmos.layout
+++ b/src/mainboard/google/falco/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/link/cmos.layout b/src/mainboard/google/link/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/google/link/cmos.layout
+++ b/src/mainboard/google/link/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/parrot/cmos.layout b/src/mainboard/google/parrot/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/google/parrot/cmos.layout
+++ b/src/mainboard/google/parrot/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/peppy/cmos.layout b/src/mainboard/google/peppy/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/peppy/cmos.layout
+++ b/src/mainboard/google/peppy/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/slippy/cmos.layout b/src/mainboard/google/slippy/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/slippy/cmos.layout
+++ b/src/mainboard/google/slippy/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/stout/cmos.layout b/src/mainboard/google/stout/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/google/stout/cmos.layout
+++ b/src/mainboard/google/stout/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/hp/dl145_g1/cmos.layout b/src/mainboard/hp/dl145_g1/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/hp/dl145_g1/cmos.layout
+++ b/src/mainboard/hp/dl145_g1/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/hp/dl145_g3/cmos.layout b/src/mainboard/hp/dl145_g3/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/hp/dl145_g3/cmos.layout
+++ b/src/mainboard/hp/dl145_g3/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/hp/dl165_g6_fam10/cmos.layout b/src/mainboard/hp/dl165_g6_fam10/cmos.layout
index 1c6a3cd..afded2c 100644
--- a/src/mainboard/hp/dl165_g6_fam10/cmos.layout
+++ b/src/mainboard/hp/dl165_g6_fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/ibase/mb899/cmos.layout b/src/mainboard/ibase/mb899/cmos.layout
index b3e8c4e..2e8ee32 100644
--- a/src/mainboard/ibase/mb899/cmos.layout
+++ b/src/mainboard/ibase/mb899/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/ibm/e325/cmos.layout b/src/mainboard/ibm/e325/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/ibm/e325/cmos.layout
+++ b/src/mainboard/ibm/e325/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/ibm/e326/cmos.layout b/src/mainboard/ibm/e326/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/ibm/e326/cmos.layout
+++ b/src/mainboard/ibm/e326/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iei/juki-511p/cmos.layout b/src/mainboard/iei/juki-511p/cmos.layout
index 67a3ce4..7663571 100644
--- a/src/mainboard/iei/juki-511p/cmos.layout
+++ b/src/mainboard/iei/juki-511p/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/iei/kino-780am2-fam10/cmos.layout b/src/mainboard/iei/kino-780am2-fam10/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/iei/kino-780am2-fam10/cmos.layout
+++ b/src/mainboard/iei/kino-780am2-fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iei/nova4899r/cmos.layout b/src/mainboard/iei/nova4899r/cmos.layout
index 67a3ce4..7663571 100644
--- a/src/mainboard/iei/nova4899r/cmos.layout
+++ b/src/mainboard/iei/nova4899r/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/intel/baskingridge/cmos.layout b/src/mainboard/intel/baskingridge/cmos.layout
index e8a088d..ededf51 100644
--- a/src/mainboard/intel/baskingridge/cmos.layout
+++ b/src/mainboard/intel/baskingridge/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/cougar_canyon2/cmos.layout b/src/mainboard/intel/cougar_canyon2/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/intel/cougar_canyon2/cmos.layout
+++ b/src/mainboard/intel/cougar_canyon2/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/d945gclf/cmos.layout b/src/mainboard/intel/d945gclf/cmos.layout
index 9997584..8e48aa1 100644
--- a/src/mainboard/intel/d945gclf/cmos.layout
+++ b/src/mainboard/intel/d945gclf/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/eagleheights/cmos.layout b/src/mainboard/intel/eagleheights/cmos.layout
index ae6f942..babdb2a 100644
--- a/src/mainboard/intel/eagleheights/cmos.layout
+++ b/src/mainboard/intel/eagleheights/cmos.layout
@@ -66,6 +66,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/emeraldlake2/cmos.layout b/src/mainboard/intel/emeraldlake2/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/intel/emeraldlake2/cmos.layout
+++ b/src/mainboard/intel/emeraldlake2/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/jarrell/cmos.layout b/src/mainboard/intel/jarrell/cmos.layout
index 1f225f8..c8c4303 100644
--- a/src/mainboard/intel/jarrell/cmos.layout
+++ b/src/mainboard/intel/jarrell/cmos.layout
@@ -39,6 +39,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/intel/wtm2/cmos.layout b/src/mainboard/intel/wtm2/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/intel/wtm2/cmos.layout
+++ b/src/mainboard/intel/wtm2/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/iwave/iWRainbowG6/cmos.layout b/src/mainboard/iwave/iWRainbowG6/cmos.layout
index ce98ffd..9830737 100644
--- a/src/mainboard/iwave/iWRainbowG6/cmos.layout
+++ b/src/mainboard/iwave/iWRainbowG6/cmos.layout
@@ -66,6 +66,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/iwill/dk8_htx/cmos.layout b/src/mainboard/iwill/dk8_htx/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/iwill/dk8_htx/cmos.layout
+++ b/src/mainboard/iwill/dk8_htx/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iwill/dk8s2/cmos.layout b/src/mainboard/iwill/dk8s2/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/iwill/dk8s2/cmos.layout
+++ b/src/mainboard/iwill/dk8s2/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iwill/dk8x/cmos.layout b/src/mainboard/iwill/dk8x/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/iwill/dk8x/cmos.layout
+++ b/src/mainboard/iwill/dk8x/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/jetway/j7f2/cmos.layout b/src/mainboard/jetway/j7f2/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/jetway/j7f2/cmos.layout
+++ b/src/mainboard/jetway/j7f2/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/jetway/pa78vm5/cmos.layout b/src/mainboard/jetway/pa78vm5/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/jetway/pa78vm5/cmos.layout
+++ b/src/mainboard/jetway/pa78vm5/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/kontron/986lcd-m/cmos.layout b/src/mainboard/kontron/986lcd-m/cmos.layout
index 4ae8834..df9c22f 100644
--- a/src/mainboard/kontron/986lcd-m/cmos.layout
+++ b/src/mainboard/kontron/986lcd-m/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/kontron/kt690/cmos.layout b/src/mainboard/kontron/kt690/cmos.layout
index 86aadf5..6fcaa36 100644
--- a/src/mainboard/kontron/kt690/cmos.layout
+++ b/src/mainboard/kontron/kt690/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/kontron/ktqm77/cmos.layout b/src/mainboard/kontron/ktqm77/cmos.layout
index dc6a44b..0ec6157 100644
--- a/src/mainboard/kontron/ktqm77/cmos.layout
+++ b/src/mainboard/kontron/ktqm77/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lanner/em8510/cmos.layout b/src/mainboard/lanner/em8510/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/lanner/em8510/cmos.layout
+++ b/src/mainboard/lanner/em8510/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/lenovo/t60/cmos.layout b/src/mainboard/lenovo/t60/cmos.layout
index fb036e0..24deb4f 100644
--- a/src/mainboard/lenovo/t60/cmos.layout
+++ b/src/mainboard/lenovo/t60/cmos.layout
@@ -66,6 +66,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lenovo/x201/cmos.layout b/src/mainboard/lenovo/x201/cmos.layout
index 6cf3787..23431ce 100644
--- a/src/mainboard/lenovo/x201/cmos.layout
+++ b/src/mainboard/lenovo/x201/cmos.layout
@@ -65,6 +65,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lenovo/x230/cmos.layout b/src/mainboard/lenovo/x230/cmos.layout
index 6f8822f..fb1b61c 100644
--- a/src/mainboard/lenovo/x230/cmos.layout
+++ b/src/mainboard/lenovo/x230/cmos.layout
@@ -65,6 +65,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lenovo/x60/cmos.layout b/src/mainboard/lenovo/x60/cmos.layout
index 469371e..c0cb680 100644
--- a/src/mainboard/lenovo/x60/cmos.layout
+++ b/src/mainboard/lenovo/x60/cmos.layout
@@ -66,6 +66,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lippert/frontrunner-af/cmos.layout b/src/mainboard/lippert/frontrunner-af/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/lippert/frontrunner-af/cmos.layout
+++ b/src/mainboard/lippert/frontrunner-af/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/lippert/frontrunner/cmos.layout b/src/mainboard/lippert/frontrunner/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/lippert/frontrunner/cmos.layout
+++ b/src/mainboard/lippert/frontrunner/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/lippert/toucan-af/cmos.layout b/src/mainboard/lippert/toucan-af/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/lippert/toucan-af/cmos.layout
+++ b/src/mainboard/lippert/toucan-af/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms7135/cmos.layout b/src/mainboard/msi/ms7135/cmos.layout
index 694554d..d089e28 100644
--- a/src/mainboard/msi/ms7135/cmos.layout
+++ b/src/mainboard/msi/ms7135/cmos.layout
@@ -45,6 +45,7 @@ entries
 445          1       e       1        iommu
 448          4       e      10        ram_voltage
 452          4       e      11        nf4_voltage
+456         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms7260/cmos.layout b/src/mainboard/msi/ms7260/cmos.layout
index da4de0a..cedbe86 100644
--- a/src/mainboard/msi/ms7260/cmos.layout
+++ b/src/mainboard/msi/ms7260/cmos.layout
@@ -65,6 +65,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms9185/cmos.layout b/src/mainboard/msi/ms9185/cmos.layout
index 1c6a3cd..afded2c 100644
--- a/src/mainboard/msi/ms9185/cmos.layout
+++ b/src/mainboard/msi/ms9185/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms9282/cmos.layout b/src/mainboard/msi/ms9282/cmos.layout
index 238b4ce..87d8c47 100644
--- a/src/mainboard/msi/ms9282/cmos.layout
+++ b/src/mainboard/msi/ms9282/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms9652_fam10/cmos.layout b/src/mainboard/msi/ms9652_fam10/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/msi/ms9652_fam10/cmos.layout
+++ b/src/mainboard/msi/ms9652_fam10/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/newisys/khepri/cmos.layout b/src/mainboard/newisys/khepri/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/newisys/khepri/cmos.layout
+++ b/src/mainboard/newisys/khepri/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/nvidia/l1_2pvv/cmos.layout b/src/mainboard/nvidia/l1_2pvv/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/nvidia/l1_2pvv/cmos.layout
+++ b/src/mainboard/nvidia/l1_2pvv/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/pcengines/alix1c/cmos.layout b/src/mainboard/pcengines/alix1c/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/pcengines/alix1c/cmos.layout
+++ b/src/mainboard/pcengines/alix1c/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/pcengines/alix2d/cmos.layout b/src/mainboard/pcengines/alix2d/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/pcengines/alix2d/cmos.layout
+++ b/src/mainboard/pcengines/alix2d/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/roda/rk886ex/cmos.layout b/src/mainboard/roda/rk886ex/cmos.layout
index c879078..2580ab8 100644
--- a/src/mainboard/roda/rk886ex/cmos.layout
+++ b/src/mainboard/roda/rk886ex/cmos.layout
@@ -66,6 +66,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/roda/rk9/cmos.layout b/src/mainboard/roda/rk9/cmos.layout
index 5c82567..f07c8f8 100644
--- a/src/mainboard/roda/rk9/cmos.layout
+++ b/src/mainboard/roda/rk9/cmos.layout
@@ -67,6 +67,8 @@ entries
 # -----------------------------------------------------------------
 0           120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/samsung/lumpy/cmos.layout b/src/mainboard/samsung/lumpy/cmos.layout
index 208e8ee..f49a848 100644
--- a/src/mainboard/samsung/lumpy/cmos.layout
+++ b/src/mainboard/samsung/lumpy/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/samsung/stumpy/cmos.layout b/src/mainboard/samsung/stumpy/cmos.layout
index ec393a5..2533e90 100644
--- a/src/mainboard/samsung/stumpy/cmos.layout
+++ b/src/mainboard/samsung/stumpy/cmos.layout
@@ -64,6 +64,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/siemens/sitemp_g1p1/cmos.layout b/src/mainboard/siemens/sitemp_g1p1/cmos.layout
index d03a191..b4ad0c5 100644
--- a/src/mainboard/siemens/sitemp_g1p1/cmos.layout
+++ b/src/mainboard/siemens/sitemp_g1p1/cmos.layout
@@ -77,12 +77,13 @@ entries
 436          4       e       14       chassis_t_min
 440          4       e       14       chassis_t_max
 444          4       e       15       chassis_dutycycle_min
-448          4       e       15       chassis_dutycycle_max
-#452          4       r       9        unused
-456          4       e       10       boot_delay
-460		     4       e       11       lcd_panel_id
+448         16       v       0        version
 #===========================================================
-464          512     s       0        boot_devices
+464          4       e       15       chassis_dutycycle_max
+468          4       e       10       boot_delay
+472	     4       e       11       lcd_panel_id
+#476	     4       r       0        unused
+480          496     s       0        boot_devices
 976          8       h       0        boot_default
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/sunw/ultra40/cmos.layout b/src/mainboard/sunw/ultra40/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/sunw/ultra40/cmos.layout
+++ b/src/mainboard/sunw/ultra40/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/h8dme/cmos.layout b/src/mainboard/supermicro/h8dme/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/supermicro/h8dme/cmos.layout
+++ b/src/mainboard/supermicro/h8dme/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/h8dmr/cmos.layout b/src/mainboard/supermicro/h8dmr/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/supermicro/h8dmr/cmos.layout
+++ b/src/mainboard/supermicro/h8dmr/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/h8dmr_fam10/cmos.layout b/src/mainboard/supermicro/h8dmr_fam10/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/supermicro/h8dmr_fam10/cmos.layout
+++ b/src/mainboard/supermicro/h8dmr_fam10/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/h8qgi/cmos.layout b/src/mainboard/supermicro/h8qgi/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/supermicro/h8qgi/cmos.layout
+++ b/src/mainboard/supermicro/h8qgi/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/h8qme_fam10/cmos.layout b/src/mainboard/supermicro/h8qme_fam10/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/supermicro/h8qme_fam10/cmos.layout
+++ b/src/mainboard/supermicro/h8qme_fam10/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/h8scm/cmos.layout b/src/mainboard/supermicro/h8scm/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/supermicro/h8scm/cmos.layout
+++ b/src/mainboard/supermicro/h8scm/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/h8scm_fam10/cmos.layout b/src/mainboard/supermicro/h8scm_fam10/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/supermicro/h8scm_fam10/cmos.layout
+++ b/src/mainboard/supermicro/h8scm_fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/x6dai_g/cmos.layout b/src/mainboard/supermicro/x6dai_g/cmos.layout
index 81f1a69..258939e 100644
--- a/src/mainboard/supermicro/x6dai_g/cmos.layout
+++ b/src/mainboard/supermicro/x6dai_g/cmos.layout
@@ -37,6 +37,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/x6dhe_g/cmos.layout b/src/mainboard/supermicro/x6dhe_g/cmos.layout
index 81f1a69..258939e 100644
--- a/src/mainboard/supermicro/x6dhe_g/cmos.layout
+++ b/src/mainboard/supermicro/x6dhe_g/cmos.layout
@@ -37,6 +37,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/x6dhe_g2/cmos.layout b/src/mainboard/supermicro/x6dhe_g2/cmos.layout
index 81f1a69..258939e 100644
--- a/src/mainboard/supermicro/x6dhe_g2/cmos.layout
+++ b/src/mainboard/supermicro/x6dhe_g2/cmos.layout
@@ -37,6 +37,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/x6dhr_ig/cmos.layout b/src/mainboard/supermicro/x6dhr_ig/cmos.layout
index 81f1a69..258939e 100644
--- a/src/mainboard/supermicro/x6dhr_ig/cmos.layout
+++ b/src/mainboard/supermicro/x6dhr_ig/cmos.layout
@@ -37,6 +37,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/x6dhr_ig2/cmos.layout b/src/mainboard/supermicro/x6dhr_ig2/cmos.layout
index 81f1a69..258939e 100644
--- a/src/mainboard/supermicro/x6dhr_ig2/cmos.layout
+++ b/src/mainboard/supermicro/x6dhr_ig2/cmos.layout
@@ -37,6 +37,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/supermicro/x7db8/cmos.layout b/src/mainboard/supermicro/x7db8/cmos.layout
index 29e78ad..32243b7 100644
--- a/src/mainboard/supermicro/x7db8/cmos.layout
+++ b/src/mainboard/supermicro/x7db8/cmos.layout
@@ -66,6 +66,8 @@ entries
 # -----------------------------------------------------------------
 0          120       r       0        reserved_memory
 #120        264       r       0        unused
+120         16       v       0        version
+#136        248       r       0        unused
 
 # -----------------------------------------------------------------
 # RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/technexion/tim5690/cmos.layout b/src/mainboard/technexion/tim5690/cmos.layout
index 86aadf5..6fcaa36 100644
--- a/src/mainboard/technexion/tim5690/cmos.layout
+++ b/src/mainboard/technexion/tim5690/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/technexion/tim8690/cmos.layout b/src/mainboard/technexion/tim8690/cmos.layout
index 86aadf5..6fcaa36 100644
--- a/src/mainboard/technexion/tim8690/cmos.layout
+++ b/src/mainboard/technexion/tim8690/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/technologic/ts5300/cmos.layout b/src/mainboard/technologic/ts5300/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/technologic/ts5300/cmos.layout
+++ b/src/mainboard/technologic/ts5300/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/traverse/geos/cmos.layout b/src/mainboard/traverse/geos/cmos.layout
index 864d89a..0e71deb 100644
--- a/src/mainboard/traverse/geos/cmos.layout
+++ b/src/mainboard/traverse/geos/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 440          1       e       0        dcon_present
 1008         16      h       0        check_sum
 
diff --git a/src/mainboard/tyan/s2735/cmos.layout b/src/mainboard/tyan/s2735/cmos.layout
index 608f028..42da3f9 100644
--- a/src/mainboard/tyan/s2735/cmos.layout
+++ b/src/mainboard/tyan/s2735/cmos.layout
@@ -39,6 +39,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 #440          4       e       9        slow_cpu
 444          1       e       1        nmi
 728        256       h       0        user_data
diff --git a/src/mainboard/tyan/s2850/cmos.layout b/src/mainboard/tyan/s2850/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2850/cmos.layout
+++ b/src/mainboard/tyan/s2850/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2875/cmos.layout b/src/mainboard/tyan/s2875/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2875/cmos.layout
+++ b/src/mainboard/tyan/s2875/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2880/cmos.layout b/src/mainboard/tyan/s2880/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2880/cmos.layout
+++ b/src/mainboard/tyan/s2880/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2881/cmos.layout b/src/mainboard/tyan/s2881/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2881/cmos.layout
+++ b/src/mainboard/tyan/s2881/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2882/cmos.layout b/src/mainboard/tyan/s2882/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2882/cmos.layout
+++ b/src/mainboard/tyan/s2882/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2885/cmos.layout b/src/mainboard/tyan/s2885/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2885/cmos.layout
+++ b/src/mainboard/tyan/s2885/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2891/cmos.layout b/src/mainboard/tyan/s2891/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2891/cmos.layout
+++ b/src/mainboard/tyan/s2891/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2892/cmos.layout b/src/mainboard/tyan/s2892/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2892/cmos.layout
+++ b/src/mainboard/tyan/s2892/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2895/cmos.layout b/src/mainboard/tyan/s2895/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s2895/cmos.layout
+++ b/src/mainboard/tyan/s2895/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2912/cmos.layout b/src/mainboard/tyan/s2912/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/tyan/s2912/cmos.layout
+++ b/src/mainboard/tyan/s2912/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s2912_fam10/cmos.layout b/src/mainboard/tyan/s2912_fam10/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/tyan/s2912_fam10/cmos.layout
+++ b/src/mainboard/tyan/s2912_fam10/cmos.layout
@@ -64,6 +64,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s4880/cmos.layout b/src/mainboard/tyan/s4880/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s4880/cmos.layout
+++ b/src/mainboard/tyan/s4880/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s4882/cmos.layout b/src/mainboard/tyan/s4882/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/tyan/s4882/cmos.layout
+++ b/src/mainboard/tyan/s4882/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/tyan/s8226/cmos.layout b/src/mainboard/tyan/s8226/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/tyan/s8226/cmos.layout
+++ b/src/mainboard/tyan/s8226/cmos.layout
@@ -63,6 +63,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/via/epia-cn/cmos.layout b/src/mainboard/via/epia-cn/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/via/epia-cn/cmos.layout
+++ b/src/mainboard/via/epia-cn/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/via/epia-m/cmos.layout b/src/mainboard/via/epia-m/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/via/epia-m/cmos.layout
+++ b/src/mainboard/via/epia-m/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/via/epia-m700/cmos.layout b/src/mainboard/via/epia-m700/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/via/epia-m700/cmos.layout
+++ b/src/mainboard/via/epia-m700/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/via/epia-n/cmos.layout b/src/mainboard/via/epia-n/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/via/epia-n/cmos.layout
+++ b/src/mainboard/via/epia-n/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/via/epia/cmos.layout b/src/mainboard/via/epia/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/via/epia/cmos.layout
+++ b/src/mainboard/via/epia/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/via/pc2500e/cmos.layout b/src/mainboard/via/pc2500e/cmos.layout
index fa5dc4c..0ca09ea 100644
--- a/src/mainboard/via/pc2500e/cmos.layout
+++ b/src/mainboard/via/pc2500e/cmos.layout
@@ -34,6 +34,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/via/vt8454c/cmos.layout b/src/mainboard/via/vt8454c/cmos.layout
index e80bb94..87984da 100644
--- a/src/mainboard/via/vt8454c/cmos.layout
+++ b/src/mainboard/via/vt8454c/cmos.layout
@@ -29,6 +29,7 @@ entries
 392          3       e       5        baud_rate
 400          1       e       1        power_on_after_fail
 412          4       e       6        debug_level
+448          16      v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/winent/mb6047/cmos.layout b/src/mainboard/winent/mb6047/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/winent/mb6047/cmos.layout
+++ b/src/mainboard/winent/mb6047/cmos.layout
@@ -43,6 +43,7 @@ entries
 440          4       e       9        slow_cpu
 444          1       e       1        nmi
 445          1       e       1        iommu
+448         16       v       0        version
 728        256       h       0        user_data
 984         16       h       0        check_sum
 # Reserve the extended AMD configuration registers
diff --git a/src/mainboard/winent/pl6064/cmos.layout b/src/mainboard/winent/pl6064/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/winent/pl6064/cmos.layout
+++ b/src/mainboard/winent/pl6064/cmos.layout
@@ -36,6 +36,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/src/mainboard/wyse/s50/cmos.layout b/src/mainboard/wyse/s50/cmos.layout
index e561358..341accd 100644
--- a/src/mainboard/wyse/s50/cmos.layout
+++ b/src/mainboard/wyse/s50/cmos.layout
@@ -59,6 +59,7 @@ entries
 424          4       e       7        boot_third
 428          4       h       0        boot_index
 432          8       h       0        boot_countdown
+448         16       v       0        version
 1008         16      h       0        check_sum
 
 enumerations
diff --git a/util/nvramtool/accessors/layout-bin.c b/util/nvramtool/accessors/layout-bin.c
index 4b7f8d6..79d2007 100644
--- a/util/nvramtool/accessors/layout-bin.c
+++ b/util/nvramtool/accessors/layout-bin.c
@@ -273,6 +273,10 @@ static void process_cmos_table(void)
 			cmos_entry.config = CMOS_ENTRY_HEX;
 			break;
 
+		case 'v':
+			cmos_entry.config = CMOS_ENTRY_VERSION;
+			break;
+
 		case 'r':
 			cmos_entry.config = CMOS_ENTRY_RESERVED;
 			break;
diff --git a/util/nvramtool/accessors/layout-text.c b/util/nvramtool/accessors/layout-text.c
index a06f560..e72e946 100644
--- a/util/nvramtool/accessors/layout-text.c
+++ b/util/nvramtool/accessors/layout-text.c
@@ -192,6 +192,9 @@ static int line_num;
 
 static const char *layout_filename = NULL;
 
+static unsigned int layout_checksum;
+static int version_bit = -1;
+
 /****************************************************************************
  * set_layout_filename
  *
@@ -311,6 +314,26 @@ void write_cmos_layout(FILE * f)
 		layout.summed_area_end, layout.checksum_at);
 }
 
+static void process_layout_checksum(void)
+{
+	cmos_entry_t cmos_entry;
+
+	if (version_bit < 0) {
+		fprintf(stderr,
+			"%s: version field not found.\n", prog_name);
+		exit(1);
+	}
+
+	memset (&cmos_entry, 0, sizeof (cmos_entry));
+
+	cmos_entry.bit = version_bit;
+	cmos_entry.length = 16;
+	cmos_entry.config_id = layout_checksum;
+	cmos_entry.config = 'v';
+	strcpy (cmos_entry.name, "version");
+	try_add_layout_file_entry(&cmos_entry);
+}
+
 /****************************************************************************
  * process_layout_file
  *
@@ -370,6 +393,8 @@ static void process_layout_file(FILE * f)
 	/* Skip past all enums.  They have already been processed. */
 	while (!process_enum(f, 1)) ;
 
+	process_layout_checksum();
+
 	/* Process CMOS checksum info. */
 	process_checksum_info(f);
 
@@ -471,6 +496,31 @@ static int process_entry(FILE * f, int skip_add)
 		create_entry(&cmos_entry, &line[match[1].rm_so],
 			     &line[match[2].rm_so], &line[match[3].rm_so],
 			     &line[match[4].rm_so], &line[match[5].rm_so]);
+
+
+		/* Special case of universal hashing. Small primes,
+		   different, chosen at random.
+		 */
+		layout_checksum = (layout_checksum * 307) % 0xffff;
+		layout_checksum += cmos_entry.bit * 43
+			+ cmos_entry.length * 257
+			+ cmos_entry.config_id * 313
+			+ cmos_entry.config * 509;
+		layout_checksum %= 0xffff;
+		layout_checksum += compute_ip_checksum(cmos_entry.name,
+						       strlen (cmos_entry.name))
+			* 89;
+		layout_checksum %= 0xffff;
+
+		if (cmos_entry.config == 'v') {
+			if (cmos_entry.length != 16) {
+				fprintf(stderr,
+					"%s: version is not 16-bit long.\n", prog_name);
+				exit(1);
+			}
+			version_bit = cmos_entry.bit;
+			break;
+		}
 		try_add_layout_file_entry(&cmos_entry);
 		break;
 	}
@@ -625,6 +675,10 @@ static void create_entry(cmos_entry_t * cmos_entry,
 		cmos_entry->config = CMOS_ENTRY_HEX;
 		break;
 
+	case 'v':
+		cmos_entry->config = CMOS_ENTRY_VERSION;
+		break;
+
 	case 's':
 		cmos_entry->config = CMOS_ENTRY_STRING;
 		break;
@@ -853,6 +907,9 @@ static char cmos_entry_char_value(cmos_entry_config_t config)
 	case CMOS_ENTRY_HEX:
 		return 'h';
 
+	case CMOS_ENTRY_VERSION:
+		return 'v';
+
 	case CMOS_ENTRY_RESERVED:
 		return 'r';
 
diff --git a/util/nvramtool/cli/nvramtool.c b/util/nvramtool/cli/nvramtool.c
index d5acc58..d2f833a 100644
--- a/util/nvramtool/cli/nvramtool.c
+++ b/util/nvramtool/cli/nvramtool.c
@@ -522,7 +522,8 @@ static int list_one_param(const char name[], int show_name)
 		exit(1);
 	}
 
-	if (e->config == CMOS_ENTRY_RESERVED) {
+	if (e->config == CMOS_ENTRY_RESERVED
+	    || e->config == CMOS_ENTRY_VERSION) {
 		fprintf(stderr, "%s: Parameter %s is reserved.\n", prog_name,
 			name);
 		exit(1);
@@ -546,6 +547,7 @@ static int list_all_params(void)
 
 	for (e = first_cmos_entry(); e != NULL; e = next_cmos_entry(e)) {
 		if ((e->config == CMOS_ENTRY_RESERVED)
+		    || (e->config == CMOS_ENTRY_VERSION)
 		    || is_checksum_name(e->name))
 			continue;
 
@@ -591,6 +593,7 @@ static void list_param_enums(const char name[])
 		break;
 
 	case CMOS_ENTRY_RESERVED:
+	case CMOS_ENTRY_VERSION:
 		printf("Parameter %s is reserved.\n", name);
 		break;
 
@@ -611,8 +614,8 @@ static void list_param_enums(const char name[])
  ****************************************************************************/
 static void set_one_param(const char name[], const char value[])
 {
-	const cmos_entry_t *e;
-	unsigned long long n;
+	const cmos_entry_t *e, *ev;
+	unsigned long long n, nv;
 
 	if (is_checksum_name(name) || (e = find_cmos_entry(name)) == NULL) {
 		fprintf(stderr, "%s: CMOS parameter %s not found.", prog_name,
@@ -686,9 +689,18 @@ static void set_one_param(const char name[], const char value[])
 		goto fail;
 	}
 
+	if ((ev = find_cmos_entry("version")) == NULL) {
+		fprintf(stderr, "%s: CMOS parameter %s not found.", prog_name,
+			"version");
+		exit(1);
+	}
+
+	prepare_cmos_write(ev, 0, &nv);
+
 	/* write the value to nonvolatile RAM */
 	set_iopl(3);
 	cmos_write(e, n);
+	cmos_write(ev, nv);
 	cmos_checksum_write(cmos_checksum_compute());
 	set_iopl(0);
 	return;
diff --git a/util/nvramtool/cmos_ops.c b/util/nvramtool/cmos_ops.c
index 91c9f45..e20b24c 100644
--- a/util/nvramtool/cmos_ops.c
+++ b/util/nvramtool/cmos_ops.c
@@ -71,6 +71,7 @@ int prepare_cmos_read(const cmos_entry_t * e)
 	switch (e->config) {
 	case CMOS_ENTRY_ENUM:
 	case CMOS_ENTRY_HEX:
+	case CMOS_ENTRY_VERSION:
 	case CMOS_ENTRY_STRING:
 		break;
 
@@ -141,6 +142,9 @@ int prepare_cmos_write(const cmos_entry_t * e, const char value_str[],
 			return CMOS_OP_NEGATIVE_INT;
 
 		break;
+	case CMOS_ENTRY_VERSION:
+		out = e->config_id;
+		break;
 
 	case CMOS_ENTRY_STRING:
 		if (e->length < (8 * strlen(value_str)))
diff --git a/util/nvramtool/input_file.c b/util/nvramtool/input_file.c
index 1520930..6ce2c5b 100644
--- a/util/nvramtool/input_file.c
+++ b/util/nvramtool/input_file.c
@@ -157,6 +157,14 @@ cmos_write_t *process_input_file(FILE * f)
 void do_cmos_writes(cmos_write_t * list)
 {
 	cmos_write_t *item;
+	const cmos_entry_t *ev;
+
+	ev = find_cmos_entry("version");
+	if (ev == NULL) {
+		fprintf(stderr, "%s: CMOS parameter %s not found.", prog_name,
+			"version");
+		exit(1);
+	}
 
 	set_iopl(3);
 
@@ -171,6 +179,7 @@ void do_cmos_writes(cmos_write_t * list)
 		free(item);
 	}
 
+	cmos_write(ev, ev->config_id);
 	cmos_checksum_write(cmos_checksum_compute());
 	set_iopl(0);
 }
diff --git a/util/nvramtool/layout.c b/util/nvramtool/layout.c
index f543d12..1872e2c 100644
--- a/util/nvramtool/layout.c
+++ b/util/nvramtool/layout.c
@@ -53,6 +53,7 @@ static int entries_overlap(const cmos_entry_t * p, const cmos_entry_t * q);
 static const cmos_enum_item_t *find_first_cmos_enum_id(unsigned config_id);
 
 const char checksum_param_name[] = "check_sum";
+const char version_param_name[] = "version";
 
 /* Newer versions of coreboot store the 3 pieces of information below in the
  * coreboot table so we don't have to rely on hardcoded values.
@@ -424,11 +425,12 @@ const cmos_enum_t *next_cmos_enum_id(const cmos_enum_t * last)
  * is_checksum_name
  *
  * Return 1 if 'name' matches the name of the parameter representing the CMOS
- * checksum.  Else return 0.
+ * checksum or version.  Else return 0.
  ****************************************************************************/
 int is_checksum_name(const char name[])
 {
-	return !strcmp(name, checksum_param_name);
+	return !strcmp(name, checksum_param_name)
+		&& !strcmp(name, version_param_name);
 }
 
 /****************************************************************************
diff --git a/util/nvramtool/layout.h b/util/nvramtool/layout.h
index 082c31b..b4e6d6e 100644
--- a/util/nvramtool/layout.h
+++ b/util/nvramtool/layout.h
@@ -50,6 +50,7 @@ typedef enum {
 	CMOS_ENTRY_HEX = 'h',
 	CMOS_ENTRY_STRING = 's',
 	CMOS_ENTRY_RESERVED = 'r',
+	CMOS_ENTRY_VERSION = 'v',
 } cmos_entry_config_t;
 
 /* This represents a CMOS parameter. */
diff --git a/util/nvramtool/lbtable.c b/util/nvramtool/lbtable.c
index 5f1f22d..60f8b44 100644
--- a/util/nvramtool/lbtable.c
+++ b/util/nvramtool/lbtable.c
@@ -775,6 +775,10 @@ static void print_option_record(const struct cmos_entries *cmos_entry)
 		strcpy(s, "HEX");
 		break;
 
+	case 'v':
+		strcpy(s, "VERSION");
+		break;
+
 	case 'r':
 		strcpy(s, "RESERVED");
 		break;



More information about the coreboot-gerrit mailing list