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

Vladimir Serbinenko (phcoder@gmail.com) gerrit at coreboot.org
Sat Jan 25 04:10:17 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 a2cbbd3bccb0dea7e106bc0521d46b13ee51c522
Author: Vladimir Serbinenko <phcoder at gmail.com>
Date:   Fri Jan 24 17:40:44 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
    
    This is proof of concept. If idea is accepted then there will be a laborous
    but easy task of adding version field to all mobos.
    
    If 16 bits is too much we can reduce it to 8 bits.
    
    Change-Id: Id3bb904fac44279dd420c2bf617199f890bb3e0e
    Signed-off-by: Vladimir Serbinenko <phcoder at gmail.com>
---
 payloads/nvramcui/nvramcui.c                       |  4 +-
 src/drivers/pc80/mc146818rtc_early.c               | 29 +++++++----
 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           |  3 ++
 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              |  4 +-
 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             | 60 ++++++++++++++++++++++
 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 ++
 164 files changed, 312 insertions(+), 25 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_early.c b/src/drivers/pc80/mc146818rtc_early.c
index 0652f27..6309103 100644
--- a/src/drivers/pc80/mc146818rtc_early.c
+++ b/src/drivers/pc80/mc146818rtc_early.c
@@ -20,11 +20,29 @@ static int cmos_error(void)
 	return (reg_d & RTC_VRT) == 0;
 }
 
+unsigned read_option_lowlevel(unsigned start, unsigned size, unsigned def)
+{
+#if CONFIG_USE_OPTION_TABLE
+	unsigned byte;
+	byte = cmos_read(start/8);
+	return (byte >> (start & 7U)) & ((1U << size) - 1U);
+#else
+	return def;
+#endif
+}
+
 static int cmos_chksum_valid(void)
 {
 #if CONFIG_USE_OPTION_TABLE
 	unsigned char addr;
 	u16 sum, old_sum;
+	unsigned version;
+
+	version = read_option_lowlevel(CMOS_VSTART_version, CMOS_VLEN_version,
+				       0);
+	if (version != CMOS_version_expected)
+		return 0;
+
 	sum = 0;
 	/* Compute the cmos checksum */
 	for(addr = LB_CKS_RANGE_START; addr <= LB_CKS_RANGE_END; addr++) {
@@ -91,14 +109,3 @@ static inline int do_normal_boot(void)
 
 	return (byte & (1<<1));
 }
-
-unsigned read_option_lowlevel(unsigned start, unsigned size, unsigned def)
-{
-#if CONFIG_USE_OPTION_TABLE
-	unsigned byte;
-	byte = cmos_read(start/8);
-	return (byte >> (start & 7U)) & ((1U << size) - 1U);
-#else
-	return def;
-#endif
-}
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..1f089bd 100644
--- a/src/mainboard/asus/m2v-mx_se/cmos.layout
+++ b/src/mainboard/asus/m2v-mx_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
 448          3       e       10       videoram_size
 728        256       h       0        user_data
 984         16       h       0        check_sum
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..851dff5 100644
--- a/src/mainboard/bachmann/ot200/cmos.layout
+++ b/src/mainboard/bachmann/ot200/cmos.layout
@@ -29,6 +29,9 @@ entries
 384          3       e       1        baud_rate
 387          4       e       2        debug_level
 
+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..56232db 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)
@@ -101,7 +103,7 @@ entries
 # coreboot config options: cpu
 424          1       e       2        hyper_threading
 
-#425        559       r       0        unused
+#425        558       r       0        unused
 
 # SandyBridge MRC Scrambler Seed values
 896         32        r       0        mrc_scrambler_seed
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..14bf0ed 100644
--- a/src/mainboard/msi/ms7135/cmos.layout
+++ b/src/mainboard/msi/ms7135/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
 448          4       e      10        ram_voltage
 452          4       e      11        nf4_voltage
 728        256       h       0        user_data
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 52a8b4f..04a1fa1 100644
--- a/src/mainboard/siemens/sitemp_g1p1/cmos.layout
+++ b/src/mainboard/siemens/sitemp_g1p1/cmos.layout
@@ -78,12 +78,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..a3ad5bc 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
  *
@@ -258,6 +261,9 @@ void write_cmos_layout_header(const char *header_filename)
 				cmos_entry->name, cmos_entry->bit);
 		fprintf(fp, "#define CMOS_VLEN_%s\t%d\n",
 				cmos_entry->name, cmos_entry->length);
+		if (strcmp (cmos_entry->name, "version") == 0)
+			fprintf(fp, "#define CMOS_version_expected\t%d\n",
+				cmos_entry->config_id);
 	}
 
 	layout.summed_area_start = cmos_checksum_start;
@@ -311,6 +317,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 +396,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 +499,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 +678,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 +910,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