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