[coreboot-gerrit] Patch set updated for coreboot: 7b0018d cmos_options: Add and check version field.
Vladimir Serbinenko (phcoder@gmail.com)
gerrit at coreboot.org
Sun Jan 26 19:58:31 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 7b0018d2ca22e21f78280f2d8a121ad57ef25f87
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
Change-Id: Id3bb904fac44279dd420c2bf617199f890bb3e0e
Signed-off-by: Vladimir Serbinenko <phcoder at gmail.com>
---
payloads/nvramcui/nvramcui.c | 4 +-
src/drivers/pc80/mc146818rtc.c | 5 ++
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 | 2 +
src/mainboard/bcom/winnetp680/cmos.layout | 1 +
src/mainboard/broadcom/blast/cmos.layout | 1 +
src/mainboard/digitallogic/adl855pc/cmos.layout | 1 +
src/mainboard/digitallogic/msm586seg/cmos.layout | 1 +
src/mainboard/digitallogic/msm800sev/cmos.layout | 1 +
src/mainboard/eaglelion/5bcm/cmos.layout | 1 +
src/mainboard/emulation/qemu-i440fx/cmos.layout | 1 +
src/mainboard/getac/p470/cmos.layout | 2 +
src/mainboard/gigabyte/ga_2761gxdk/cmos.layout | 1 +
src/mainboard/gigabyte/m57sli/cmos.layout | 1 +
src/mainboard/gigabyte/ma785gm/cmos.layout | 1 +
src/mainboard/gigabyte/ma785gmt/cmos.layout | 1 +
src/mainboard/gigabyte/ma78gm/cmos.layout | 1 +
src/mainboard/gizmosphere/gizmo/cmos.layout | 1 +
src/mainboard/google/bolt/cmos.layout | 2 +
src/mainboard/google/butterfly/cmos.layout | 2 +
src/mainboard/google/falco/cmos.layout | 2 +
src/mainboard/google/link/cmos.layout | 2 +
src/mainboard/google/parrot/cmos.layout | 2 +
src/mainboard/google/peppy/cmos.layout | 2 +
src/mainboard/google/slippy/cmos.layout | 2 +
src/mainboard/google/stout/cmos.layout | 2 +
src/mainboard/hp/dl145_g1/cmos.layout | 1 +
src/mainboard/hp/dl145_g3/cmos.layout | 1 +
src/mainboard/hp/dl165_g6_fam10/cmos.layout | 1 +
src/mainboard/ibase/mb899/cmos.layout | 2 +
src/mainboard/ibm/e325/cmos.layout | 1 +
src/mainboard/ibm/e326/cmos.layout | 1 +
src/mainboard/iei/juki-511p/cmos.layout | 1 +
src/mainboard/iei/kino-780am2-fam10/cmos.layout | 1 +
src/mainboard/iei/nova4899r/cmos.layout | 1 +
src/mainboard/intel/baskingridge/cmos.layout | 2 +
src/mainboard/intel/cougar_canyon2/cmos.layout | 2 +
src/mainboard/intel/d945gclf/cmos.layout | 2 +
src/mainboard/intel/eagleheights/cmos.layout | 2 +
src/mainboard/intel/emeraldlake2/cmos.layout | 2 +
src/mainboard/intel/jarrell/cmos.layout | 1 +
src/mainboard/intel/wtm2/cmos.layout | 2 +
src/mainboard/iwave/iWRainbowG6/cmos.layout | 2 +
src/mainboard/iwill/dk8_htx/cmos.layout | 1 +
src/mainboard/iwill/dk8s2/cmos.layout | 1 +
src/mainboard/iwill/dk8x/cmos.layout | 1 +
src/mainboard/jetway/j7f2/cmos.layout | 1 +
src/mainboard/jetway/pa78vm5/cmos.layout | 1 +
src/mainboard/kontron/986lcd-m/cmos.layout | 2 +
src/mainboard/kontron/kt690/cmos.layout | 1 +
src/mainboard/kontron/ktqm77/cmos.layout | 2 +
src/mainboard/lanner/em8510/cmos.layout | 1 +
src/mainboard/lenovo/t60/cmos.layout | 2 +
src/mainboard/lenovo/x201/cmos.layout | 2 +
src/mainboard/lenovo/x230/cmos.layout | 2 +
src/mainboard/lenovo/x60/cmos.layout | 2 +
src/mainboard/lippert/frontrunner-af/cmos.layout | 1 +
src/mainboard/lippert/frontrunner/cmos.layout | 1 +
src/mainboard/lippert/toucan-af/cmos.layout | 1 +
src/mainboard/msi/ms7135/cmos.layout | 1 +
src/mainboard/msi/ms7260/cmos.layout | 1 +
src/mainboard/msi/ms9185/cmos.layout | 1 +
src/mainboard/msi/ms9282/cmos.layout | 1 +
src/mainboard/msi/ms9652_fam10/cmos.layout | 1 +
src/mainboard/newisys/khepri/cmos.layout | 1 +
src/mainboard/nvidia/l1_2pvv/cmos.layout | 1 +
src/mainboard/pcengines/alix1c/cmos.layout | 1 +
src/mainboard/pcengines/alix2d/cmos.layout | 1 +
src/mainboard/roda/rk886ex/cmos.layout | 2 +
src/mainboard/roda/rk9/cmos.layout | 2 +
src/mainboard/samsung/lumpy/cmos.layout | 2 +
src/mainboard/samsung/stumpy/cmos.layout | 2 +
src/mainboard/siemens/sitemp_g1p1/cmos.layout | 11 ++--
src/mainboard/sunw/ultra40/cmos.layout | 1 +
src/mainboard/supermicro/h8dme/cmos.layout | 1 +
src/mainboard/supermicro/h8dmr/cmos.layout | 1 +
src/mainboard/supermicro/h8dmr_fam10/cmos.layout | 1 +
src/mainboard/supermicro/h8qgi/cmos.layout | 1 +
src/mainboard/supermicro/h8qme_fam10/cmos.layout | 1 +
src/mainboard/supermicro/h8scm/cmos.layout | 1 +
src/mainboard/supermicro/h8scm_fam10/cmos.layout | 1 +
src/mainboard/supermicro/x6dai_g/cmos.layout | 1 +
src/mainboard/supermicro/x6dhe_g/cmos.layout | 1 +
src/mainboard/supermicro/x6dhe_g2/cmos.layout | 1 +
src/mainboard/supermicro/x6dhr_ig/cmos.layout | 1 +
src/mainboard/supermicro/x6dhr_ig2/cmos.layout | 1 +
src/mainboard/supermicro/x7db8/cmos.layout | 2 +
src/mainboard/technexion/tim5690/cmos.layout | 1 +
src/mainboard/technexion/tim8690/cmos.layout | 1 +
src/mainboard/technologic/ts5300/cmos.layout | 1 +
src/mainboard/traverse/geos/cmos.layout | 1 +
src/mainboard/tyan/s2735/cmos.layout | 1 +
src/mainboard/tyan/s2850/cmos.layout | 1 +
src/mainboard/tyan/s2875/cmos.layout | 1 +
src/mainboard/tyan/s2880/cmos.layout | 1 +
src/mainboard/tyan/s2881/cmos.layout | 1 +
src/mainboard/tyan/s2882/cmos.layout | 1 +
src/mainboard/tyan/s2885/cmos.layout | 1 +
src/mainboard/tyan/s2891/cmos.layout | 1 +
src/mainboard/tyan/s2892/cmos.layout | 1 +
src/mainboard/tyan/s2895/cmos.layout | 1 +
src/mainboard/tyan/s2912/cmos.layout | 1 +
src/mainboard/tyan/s2912_fam10/cmos.layout | 1 +
src/mainboard/tyan/s4880/cmos.layout | 1 +
src/mainboard/tyan/s4882/cmos.layout | 1 +
src/mainboard/tyan/s8226/cmos.layout | 1 +
src/mainboard/via/epia-cn/cmos.layout | 1 +
src/mainboard/via/epia-m/cmos.layout | 1 +
src/mainboard/via/epia-m700/cmos.layout | 1 +
src/mainboard/via/epia-n/cmos.layout | 1 +
src/mainboard/via/epia/cmos.layout | 1 +
src/mainboard/via/pc2500e/cmos.layout | 1 +
src/mainboard/via/vt8454c/cmos.layout | 1 +
src/mainboard/winent/mb6047/cmos.layout | 1 +
src/mainboard/winent/pl6064/cmos.layout | 1 +
src/mainboard/wyse/s50/cmos.layout | 1 +
util/nvramtool/accessors/layout-bin.c | 4 ++
util/nvramtool/accessors/layout-text.c | 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 ++
165 files changed, 315 insertions(+), 24 deletions(-)
diff --git a/payloads/nvramcui/nvramcui.c b/payloads/nvramcui/nvramcui.c
index daf153b..4765921 100644
--- a/payloads/nvramcui/nvramcui.c
+++ b/payloads/nvramcui/nvramcui.c
@@ -97,7 +97,7 @@ int main()
int maxlength=0;
struct cb_cmos_entries *option = first_cmos_entry(opttbl);
while (option) {
- if ((option->config != 'r') && (strcmp("check_sum", option->name) != 0)) {
+ if ((option->config != 'r') && (option->config != 'v') && (strcmp("check_sum", option->name) != 0)) {
maxlength = max(maxlength, strlen(option->name));
numopts++;
}
@@ -113,7 +113,7 @@ int main()
/* walk over options, fetch details */
option = first_cmos_entry(opttbl);
for (i=0;i<numopts;i++) {
- while ((option->config == 'r') || (strcmp("check_sum", option->name) == 0)) {
+ while ((option->config == 'r') || (option->config == 'v') || (strcmp("check_sum", option->name) == 0)) {
option = next_cmos_entry(option);
}
fields[2*i] = new_field(1, strlen(option->name), i*2, 1, 0, 0);
diff --git a/src/drivers/pc80/mc146818rtc.c b/src/drivers/pc80/mc146818rtc.c
index 51cd6c3..6dfb3e1 100644
--- a/src/drivers/pc80/mc146818rtc.c
+++ b/src/drivers/pc80/mc146818rtc.c
@@ -187,6 +187,7 @@ enum cb_err get_option(void *dest, const char *name)
struct cmos_entries *ce;
size_t namelen;
int found=0;
+ u16 version;
/* Figure out how long name is */
namelen = strnlen(name, CMOS_MAX_NAME_LENGTH);
@@ -216,6 +217,10 @@ enum cb_err get_option(void *dest, const char *name)
return CB_CMOS_ACCESS_ERROR;
if(!rtc_checksum_valid(LB_CKS_RANGE_START, LB_CKS_RANGE_END,LB_CKS_LOC))
return CB_CMOS_CHECKSUM_INVALID;
+ if(get_cmos_value(CMOS_VSTART_version, CMOS_VLEN_version, &version) != CB_SUCCESS)
+ return CB_CMOS_ACCESS_ERROR;
+ if(version != CMOS_version_expected)
+ return CB_CMOS_CHECKSUM_INVALID;
return CB_SUCCESS;
}
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..f90afbb 100644
--- a/src/mainboard/asus/m2v-mx_se/cmos.layout
+++ b/src/mainboard/asus/m2v-mx_se/cmos.layout
@@ -44,6 +44,7 @@ entries
444 1 e 1 nmi
445 1 e 1 iommu
448 3 e 10 videoram_size
+456 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m2v/cmos.layout b/src/mainboard/asus/m2v/cmos.layout
index fc13a3c..cf6915c 100644
--- a/src/mainboard/asus/m2v/cmos.layout
+++ b/src/mainboard/asus/m2v/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m4a78-em/cmos.layout b/src/mainboard/asus/m4a78-em/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m4a78-em/cmos.layout
+++ b/src/mainboard/asus/m4a78-em/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m4a785-m/cmos.layout b/src/mainboard/asus/m4a785-m/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m4a785-m/cmos.layout
+++ b/src/mainboard/asus/m4a785-m/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m4a785t-m/cmos.layout b/src/mainboard/asus/m4a785t-m/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m4a785t-m/cmos.layout
+++ b/src/mainboard/asus/m4a785t-m/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/m5a88-v/cmos.layout b/src/mainboard/asus/m5a88-v/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/asus/m5a88-v/cmos.layout
+++ b/src/mainboard/asus/m5a88-v/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/asus/mew-vm/cmos.layout b/src/mainboard/asus/mew-vm/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/asus/mew-vm/cmos.layout
+++ b/src/mainboard/asus/mew-vm/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/avalue/eax-785e/cmos.layout b/src/mainboard/avalue/eax-785e/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/avalue/eax-785e/cmos.layout
+++ b/src/mainboard/avalue/eax-785e/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/bachmann/ot200/cmos.layout b/src/mainboard/bachmann/ot200/cmos.layout
index 90ade93..c12ac68 100644
--- a/src/mainboard/bachmann/ot200/cmos.layout
+++ b/src/mainboard/bachmann/ot200/cmos.layout
@@ -29,6 +29,8 @@ entries
384 3 e 1 baud_rate
387 4 e 2 debug_level
+448 16 v 0 version
+
# -----------------------------------------------------------------
# coreboot config options: check sums
1008 16 h 0 check_sum
diff --git a/src/mainboard/bcom/winnetp680/cmos.layout b/src/mainboard/bcom/winnetp680/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/bcom/winnetp680/cmos.layout
+++ b/src/mainboard/bcom/winnetp680/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/broadcom/blast/cmos.layout b/src/mainboard/broadcom/blast/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/broadcom/blast/cmos.layout
+++ b/src/mainboard/broadcom/blast/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/digitallogic/adl855pc/cmos.layout b/src/mainboard/digitallogic/adl855pc/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/digitallogic/adl855pc/cmos.layout
+++ b/src/mainboard/digitallogic/adl855pc/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/digitallogic/msm586seg/cmos.layout b/src/mainboard/digitallogic/msm586seg/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/digitallogic/msm586seg/cmos.layout
+++ b/src/mainboard/digitallogic/msm586seg/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/digitallogic/msm800sev/cmos.layout b/src/mainboard/digitallogic/msm800sev/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/digitallogic/msm800sev/cmos.layout
+++ b/src/mainboard/digitallogic/msm800sev/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/eaglelion/5bcm/cmos.layout b/src/mainboard/eaglelion/5bcm/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/eaglelion/5bcm/cmos.layout
+++ b/src/mainboard/eaglelion/5bcm/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/emulation/qemu-i440fx/cmos.layout b/src/mainboard/emulation/qemu-i440fx/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/emulation/qemu-i440fx/cmos.layout
+++ b/src/mainboard/emulation/qemu-i440fx/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/getac/p470/cmos.layout b/src/mainboard/getac/p470/cmos.layout
index c879078..2580ab8 100644
--- a/src/mainboard/getac/p470/cmos.layout
+++ b/src/mainboard/getac/p470/cmos.layout
@@ -66,6 +66,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout b/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout
+++ b/src/mainboard/gigabyte/ga_2761gxdk/cmos.layout
@@ -64,6 +64,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/m57sli/cmos.layout b/src/mainboard/gigabyte/m57sli/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/gigabyte/m57sli/cmos.layout
+++ b/src/mainboard/gigabyte/m57sli/cmos.layout
@@ -64,6 +64,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/ma785gm/cmos.layout b/src/mainboard/gigabyte/ma785gm/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/gigabyte/ma785gm/cmos.layout
+++ b/src/mainboard/gigabyte/ma785gm/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/ma785gmt/cmos.layout b/src/mainboard/gigabyte/ma785gmt/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/gigabyte/ma785gmt/cmos.layout
+++ b/src/mainboard/gigabyte/ma785gmt/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gigabyte/ma78gm/cmos.layout b/src/mainboard/gigabyte/ma78gm/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/gigabyte/ma78gm/cmos.layout
+++ b/src/mainboard/gigabyte/ma78gm/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/gizmosphere/gizmo/cmos.layout b/src/mainboard/gizmosphere/gizmo/cmos.layout
index 54ec400..451b3f6 100755
--- a/src/mainboard/gizmosphere/gizmo/cmos.layout
+++ b/src/mainboard/gizmosphere/gizmo/cmos.layout
@@ -64,6 +64,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/google/bolt/cmos.layout b/src/mainboard/google/bolt/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/bolt/cmos.layout
+++ b/src/mainboard/google/bolt/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/butterfly/cmos.layout b/src/mainboard/google/butterfly/cmos.layout
index f0163f1..0e3d0b2 100644
--- a/src/mainboard/google/butterfly/cmos.layout
+++ b/src/mainboard/google/butterfly/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/falco/cmos.layout b/src/mainboard/google/falco/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/falco/cmos.layout
+++ b/src/mainboard/google/falco/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/link/cmos.layout b/src/mainboard/google/link/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/google/link/cmos.layout
+++ b/src/mainboard/google/link/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/parrot/cmos.layout b/src/mainboard/google/parrot/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/google/parrot/cmos.layout
+++ b/src/mainboard/google/parrot/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/peppy/cmos.layout b/src/mainboard/google/peppy/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/peppy/cmos.layout
+++ b/src/mainboard/google/peppy/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/slippy/cmos.layout b/src/mainboard/google/slippy/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/google/slippy/cmos.layout
+++ b/src/mainboard/google/slippy/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/google/stout/cmos.layout b/src/mainboard/google/stout/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/google/stout/cmos.layout
+++ b/src/mainboard/google/stout/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/hp/dl145_g1/cmos.layout b/src/mainboard/hp/dl145_g1/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/hp/dl145_g1/cmos.layout
+++ b/src/mainboard/hp/dl145_g1/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/hp/dl145_g3/cmos.layout b/src/mainboard/hp/dl145_g3/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/hp/dl145_g3/cmos.layout
+++ b/src/mainboard/hp/dl145_g3/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/hp/dl165_g6_fam10/cmos.layout b/src/mainboard/hp/dl165_g6_fam10/cmos.layout
index 1c6a3cd..afded2c 100644
--- a/src/mainboard/hp/dl165_g6_fam10/cmos.layout
+++ b/src/mainboard/hp/dl165_g6_fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/ibase/mb899/cmos.layout b/src/mainboard/ibase/mb899/cmos.layout
index b3e8c4e..2e8ee32 100644
--- a/src/mainboard/ibase/mb899/cmos.layout
+++ b/src/mainboard/ibase/mb899/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/ibm/e325/cmos.layout b/src/mainboard/ibm/e325/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/ibm/e325/cmos.layout
+++ b/src/mainboard/ibm/e325/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/ibm/e326/cmos.layout b/src/mainboard/ibm/e326/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/ibm/e326/cmos.layout
+++ b/src/mainboard/ibm/e326/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iei/juki-511p/cmos.layout b/src/mainboard/iei/juki-511p/cmos.layout
index 67a3ce4..7663571 100644
--- a/src/mainboard/iei/juki-511p/cmos.layout
+++ b/src/mainboard/iei/juki-511p/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/iei/kino-780am2-fam10/cmos.layout b/src/mainboard/iei/kino-780am2-fam10/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/iei/kino-780am2-fam10/cmos.layout
+++ b/src/mainboard/iei/kino-780am2-fam10/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iei/nova4899r/cmos.layout b/src/mainboard/iei/nova4899r/cmos.layout
index 67a3ce4..7663571 100644
--- a/src/mainboard/iei/nova4899r/cmos.layout
+++ b/src/mainboard/iei/nova4899r/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/intel/baskingridge/cmos.layout b/src/mainboard/intel/baskingridge/cmos.layout
index e8a088d..ededf51 100644
--- a/src/mainboard/intel/baskingridge/cmos.layout
+++ b/src/mainboard/intel/baskingridge/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/cougar_canyon2/cmos.layout b/src/mainboard/intel/cougar_canyon2/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/intel/cougar_canyon2/cmos.layout
+++ b/src/mainboard/intel/cougar_canyon2/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/d945gclf/cmos.layout b/src/mainboard/intel/d945gclf/cmos.layout
index 9997584..8e48aa1 100644
--- a/src/mainboard/intel/d945gclf/cmos.layout
+++ b/src/mainboard/intel/d945gclf/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/eagleheights/cmos.layout b/src/mainboard/intel/eagleheights/cmos.layout
index ae6f942..babdb2a 100644
--- a/src/mainboard/intel/eagleheights/cmos.layout
+++ b/src/mainboard/intel/eagleheights/cmos.layout
@@ -66,6 +66,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/emeraldlake2/cmos.layout b/src/mainboard/intel/emeraldlake2/cmos.layout
index b7320b5..fa791f0 100644
--- a/src/mainboard/intel/emeraldlake2/cmos.layout
+++ b/src/mainboard/intel/emeraldlake2/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/intel/jarrell/cmos.layout b/src/mainboard/intel/jarrell/cmos.layout
index 1f225f8..c8c4303 100644
--- a/src/mainboard/intel/jarrell/cmos.layout
+++ b/src/mainboard/intel/jarrell/cmos.layout
@@ -39,6 +39,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/intel/wtm2/cmos.layout b/src/mainboard/intel/wtm2/cmos.layout
index afdd3c6..e73c2cf 100644
--- a/src/mainboard/intel/wtm2/cmos.layout
+++ b/src/mainboard/intel/wtm2/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/iwave/iWRainbowG6/cmos.layout b/src/mainboard/iwave/iWRainbowG6/cmos.layout
index ce98ffd..9830737 100644
--- a/src/mainboard/iwave/iWRainbowG6/cmos.layout
+++ b/src/mainboard/iwave/iWRainbowG6/cmos.layout
@@ -66,6 +66,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/iwill/dk8_htx/cmos.layout b/src/mainboard/iwill/dk8_htx/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/iwill/dk8_htx/cmos.layout
+++ b/src/mainboard/iwill/dk8_htx/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iwill/dk8s2/cmos.layout b/src/mainboard/iwill/dk8s2/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/iwill/dk8s2/cmos.layout
+++ b/src/mainboard/iwill/dk8s2/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/iwill/dk8x/cmos.layout b/src/mainboard/iwill/dk8x/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/iwill/dk8x/cmos.layout
+++ b/src/mainboard/iwill/dk8x/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/jetway/j7f2/cmos.layout b/src/mainboard/jetway/j7f2/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/jetway/j7f2/cmos.layout
+++ b/src/mainboard/jetway/j7f2/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/jetway/pa78vm5/cmos.layout b/src/mainboard/jetway/pa78vm5/cmos.layout
index 53fdef5..e14309a 100644
--- a/src/mainboard/jetway/pa78vm5/cmos.layout
+++ b/src/mainboard/jetway/pa78vm5/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/kontron/986lcd-m/cmos.layout b/src/mainboard/kontron/986lcd-m/cmos.layout
index 4ae8834..df9c22f 100644
--- a/src/mainboard/kontron/986lcd-m/cmos.layout
+++ b/src/mainboard/kontron/986lcd-m/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/kontron/kt690/cmos.layout b/src/mainboard/kontron/kt690/cmos.layout
index 86aadf5..6fcaa36 100644
--- a/src/mainboard/kontron/kt690/cmos.layout
+++ b/src/mainboard/kontron/kt690/cmos.layout
@@ -64,6 +64,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/kontron/ktqm77/cmos.layout b/src/mainboard/kontron/ktqm77/cmos.layout
index dc6a44b..0ec6157 100644
--- a/src/mainboard/kontron/ktqm77/cmos.layout
+++ b/src/mainboard/kontron/ktqm77/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lanner/em8510/cmos.layout b/src/mainboard/lanner/em8510/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/lanner/em8510/cmos.layout
+++ b/src/mainboard/lanner/em8510/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/lenovo/t60/cmos.layout b/src/mainboard/lenovo/t60/cmos.layout
index fb036e0..24deb4f 100644
--- a/src/mainboard/lenovo/t60/cmos.layout
+++ b/src/mainboard/lenovo/t60/cmos.layout
@@ -66,6 +66,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lenovo/x201/cmos.layout b/src/mainboard/lenovo/x201/cmos.layout
index 6cf3787..23431ce 100644
--- a/src/mainboard/lenovo/x201/cmos.layout
+++ b/src/mainboard/lenovo/x201/cmos.layout
@@ -65,6 +65,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lenovo/x230/cmos.layout b/src/mainboard/lenovo/x230/cmos.layout
index 6f8822f..fb1b61c 100644
--- a/src/mainboard/lenovo/x230/cmos.layout
+++ b/src/mainboard/lenovo/x230/cmos.layout
@@ -65,6 +65,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lenovo/x60/cmos.layout b/src/mainboard/lenovo/x60/cmos.layout
index 469371e..c0cb680 100644
--- a/src/mainboard/lenovo/x60/cmos.layout
+++ b/src/mainboard/lenovo/x60/cmos.layout
@@ -66,6 +66,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/lippert/frontrunner-af/cmos.layout b/src/mainboard/lippert/frontrunner-af/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/lippert/frontrunner-af/cmos.layout
+++ b/src/mainboard/lippert/frontrunner-af/cmos.layout
@@ -63,6 +63,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/lippert/frontrunner/cmos.layout b/src/mainboard/lippert/frontrunner/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/lippert/frontrunner/cmos.layout
+++ b/src/mainboard/lippert/frontrunner/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/lippert/toucan-af/cmos.layout b/src/mainboard/lippert/toucan-af/cmos.layout
index 95ce3b5..70a2b67 100644
--- a/src/mainboard/lippert/toucan-af/cmos.layout
+++ b/src/mainboard/lippert/toucan-af/cmos.layout
@@ -63,6 +63,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms7135/cmos.layout b/src/mainboard/msi/ms7135/cmos.layout
index 694554d..d089e28 100644
--- a/src/mainboard/msi/ms7135/cmos.layout
+++ b/src/mainboard/msi/ms7135/cmos.layout
@@ -45,6 +45,7 @@ entries
445 1 e 1 iommu
448 4 e 10 ram_voltage
452 4 e 11 nf4_voltage
+456 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms7260/cmos.layout b/src/mainboard/msi/ms7260/cmos.layout
index da4de0a..cedbe86 100644
--- a/src/mainboard/msi/ms7260/cmos.layout
+++ b/src/mainboard/msi/ms7260/cmos.layout
@@ -65,6 +65,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms9185/cmos.layout b/src/mainboard/msi/ms9185/cmos.layout
index 1c6a3cd..afded2c 100644
--- a/src/mainboard/msi/ms9185/cmos.layout
+++ b/src/mainboard/msi/ms9185/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms9282/cmos.layout b/src/mainboard/msi/ms9282/cmos.layout
index 238b4ce..87d8c47 100644
--- a/src/mainboard/msi/ms9282/cmos.layout
+++ b/src/mainboard/msi/ms9282/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/msi/ms9652_fam10/cmos.layout b/src/mainboard/msi/ms9652_fam10/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/msi/ms9652_fam10/cmos.layout
+++ b/src/mainboard/msi/ms9652_fam10/cmos.layout
@@ -64,6 +64,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/newisys/khepri/cmos.layout b/src/mainboard/newisys/khepri/cmos.layout
index 924934c..10b1548 100644
--- a/src/mainboard/newisys/khepri/cmos.layout
+++ b/src/mainboard/newisys/khepri/cmos.layout
@@ -43,6 +43,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/nvidia/l1_2pvv/cmos.layout b/src/mainboard/nvidia/l1_2pvv/cmos.layout
index a8cec16..60d3415 100644
--- a/src/mainboard/nvidia/l1_2pvv/cmos.layout
+++ b/src/mainboard/nvidia/l1_2pvv/cmos.layout
@@ -64,6 +64,7 @@ entries
440 4 e 9 slow_cpu
444 1 e 1 nmi
445 1 e 1 iommu
+448 16 v 0 version
728 256 h 0 user_data
984 16 h 0 check_sum
# Reserve the extended AMD configuration registers
diff --git a/src/mainboard/pcengines/alix1c/cmos.layout b/src/mainboard/pcengines/alix1c/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/pcengines/alix1c/cmos.layout
+++ b/src/mainboard/pcengines/alix1c/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/pcengines/alix2d/cmos.layout b/src/mainboard/pcengines/alix2d/cmos.layout
index c1354a2..789347f 100644
--- a/src/mainboard/pcengines/alix2d/cmos.layout
+++ b/src/mainboard/pcengines/alix2d/cmos.layout
@@ -36,6 +36,7 @@ entries
424 4 e 7 boot_third
428 4 h 0 boot_index
432 8 h 0 boot_countdown
+448 16 v 0 version
1008 16 h 0 check_sum
enumerations
diff --git a/src/mainboard/roda/rk886ex/cmos.layout b/src/mainboard/roda/rk886ex/cmos.layout
index c879078..2580ab8 100644
--- a/src/mainboard/roda/rk886ex/cmos.layout
+++ b/src/mainboard/roda/rk886ex/cmos.layout
@@ -66,6 +66,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/roda/rk9/cmos.layout b/src/mainboard/roda/rk9/cmos.layout
index 5c82567..f07c8f8 100644
--- a/src/mainboard/roda/rk9/cmos.layout
+++ b/src/mainboard/roda/rk9/cmos.layout
@@ -67,6 +67,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/samsung/lumpy/cmos.layout b/src/mainboard/samsung/lumpy/cmos.layout
index 208e8ee..f49a848 100644
--- a/src/mainboard/samsung/lumpy/cmos.layout
+++ b/src/mainboard/samsung/lumpy/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/samsung/stumpy/cmos.layout b/src/mainboard/samsung/stumpy/cmos.layout
index ec393a5..2533e90 100644
--- a/src/mainboard/samsung/stumpy/cmos.layout
+++ b/src/mainboard/samsung/stumpy/cmos.layout
@@ -64,6 +64,8 @@ entries
# -----------------------------------------------------------------
0 120 r 0 reserved_memory
#120 264 r 0 unused
+120 16 v 0 version
+#136 248 r 0 unused
# -----------------------------------------------------------------
# RTC_BOOT_BYTE (coreboot hardcoded)
diff --git a/src/mainboard/siemens/sitemp_g1p1/cmos.layout b/src/mainboard/siemens/sitemp_g1p1/cmos.layout
index 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