[PATCH] acpi: Use U-Boot version for OEM_REVISION
Pali Rohár
pali at kernel.org
Sat Jul 10 13:10:01 CEST 2021
OEM_REVISION is 32-bit unsigned number. It should be increased only when
changing software version. Therefore it should not depend on build time.
Change calculation to use U-Boot version numbers and set this revision
to date number.
Prior this change OEM_REVISION was calculated from build date and stored in
the same format.
After this change macro U_BOOT_BUILD_DATE is not used in other files so
remove it from global autogenerated files and also from Makefile.
Signed-off-by: Pali Rohár <pali at kernel.org>
---
This patch depends on similar patch for BIOS Release Date which is here:
http://patchwork.ozlabs.org/project/uboot/patch/20210422160957.26936-1-pali@kernel.org/
---
Makefile | 2 --
doc/develop/version.rst | 1 -
lib/acpi/acpi_table.c | 18 +++++++++++++++++-
test/dm/acpi.c | 20 ++++++++++++++------
4 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index 2047081a0739..6dd7d140cfa4 100644
--- a/Makefile
+++ b/Makefile
@@ -1903,7 +1903,6 @@ define filechk_timestamp.h
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
- LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_EPOCH %s'; \
else \
return 42; \
@@ -1912,7 +1911,6 @@ define filechk_timestamp.h
LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \
- LC_ALL=C date +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
LC_ALL=C date +'#define U_BOOT_EPOCH %s'; \
fi)
endef
diff --git a/doc/develop/version.rst b/doc/develop/version.rst
index 066901bcd2d9..3f2b07cd2261 100644
--- a/doc/develop/version.rst
+++ b/doc/develop/version.rst
@@ -84,7 +84,6 @@ fields. For example::
#define U_BOOT_DATE "Jan 06 2021" (US format only)
#define U_BOOT_TIME "08:50:36" (24-hour clock)
#define U_BOOT_TZ "-0700" (Time zone in hours)
- #define U_BOOT_BUILD_DATE 0x20210106 (hex yyyymmdd format)
#define U_BOOT_EPOCH 1609948236
The Epoch is the number of seconds since midnight on 1/1/70. You can convert
diff --git a/lib/acpi/acpi_table.c b/lib/acpi/acpi_table.c
index 2f0774178412..e2f1dc0fc08f 100644
--- a/lib/acpi/acpi_table.c
+++ b/lib/acpi/acpi_table.c
@@ -16,6 +16,22 @@
#include <asm/global_data.h>
#include <dm/acpi.h>
+/*
+ * OEM_REVISION is 32-bit unsigned number. It should be increased only when
+ * changing software version. Therefore it should not depend on build time.
+ * U-Boot calculates it from U-Boot version and represent it in hexadecimal
+ * notation. As U-Boot version is in form year.month set low 8 bits to 0x01
+ * to have valid date. So for U-Boot version 2021.04 OEM_REVISION is set to
+ * value 0x20210401.
+ */
+#define OEM_REVISION ((((U_BOOT_VERSION_NUM / 1000) % 10) << 28) | \
+ (((U_BOOT_VERSION_NUM / 100) % 10) << 24) | \
+ (((U_BOOT_VERSION_NUM / 10) % 10) << 20) | \
+ ((U_BOOT_VERSION_NUM % 10) << 16) | \
+ (((U_BOOT_VERSION_NUM_PATCH / 10) % 10) << 12) | \
+ ((U_BOOT_VERSION_NUM_PATCH % 10) << 8) | \
+ 0x01)
+
int acpi_create_dmar(struct acpi_dmar *dmar, enum dmar_flags flags)
{
struct acpi_table_header *header = &dmar->header;
@@ -100,7 +116,7 @@ void acpi_fill_header(struct acpi_table_header *header, char *signature)
memcpy(header->signature, signature, 4);
memcpy(header->oem_id, OEM_ID, 6);
memcpy(header->oem_table_id, OEM_TABLE_ID, 8);
- header->oem_revision = U_BOOT_BUILD_DATE;
+ header->oem_revision = OEM_REVISION;
memcpy(header->aslc_id, ASLC_ID, 4);
}
diff --git a/test/dm/acpi.c b/test/dm/acpi.c
index 2edab7be5445..92901f4c7cc4 100644
--- a/test/dm/acpi.c
+++ b/test/dm/acpi.c
@@ -25,6 +25,14 @@
#define BUF_SIZE 4096
+#define OEM_REVISION ((((U_BOOT_VERSION_NUM / 1000) % 10) << 28) | \
+ (((U_BOOT_VERSION_NUM / 100) % 10) << 24) | \
+ (((U_BOOT_VERSION_NUM / 10) % 10) << 20) | \
+ ((U_BOOT_VERSION_NUM % 10) << 16) | \
+ (((U_BOOT_VERSION_NUM_PATCH / 10) % 10) << 12) | \
+ ((U_BOOT_VERSION_NUM_PATCH % 10) << 8) | \
+ 0x01)
+
/**
* struct testacpi_plat - Platform data for the test ACPI device
*
@@ -218,7 +226,7 @@ static int dm_test_acpi_fill_header(struct unit_test_state *uts)
ut_asserteq_mem(OEM_ID, hdr.oem_id, sizeof(hdr.oem_id));
ut_asserteq_mem(OEM_TABLE_ID, hdr.oem_table_id,
sizeof(hdr.oem_table_id));
- ut_asserteq(U_BOOT_BUILD_DATE, hdr.oem_revision);
+ ut_asserteq(OEM_REVISION, hdr.oem_revision);
ut_asserteq_mem(ASLC_ID, hdr.aslc_id, sizeof(hdr.aslc_id));
ut_asserteq(0x44, hdr.aslc_revision);
@@ -365,20 +373,20 @@ static int dm_test_acpi_cmd_list(struct unit_test_state *uts)
addr = ALIGN(addr + sizeof(struct acpi_rsdp), 16);
ut_assert_nextline("RSDT %08lx %06zx (v01 U-BOOT U-BOOTBL %x INTL 0)",
addr, sizeof(struct acpi_table_header) +
- 3 * sizeof(u32), U_BOOT_BUILD_DATE);
+ 3 * sizeof(u32), OEM_REVISION);
addr = ALIGN(addr + sizeof(struct acpi_rsdt), 16);
ut_assert_nextline("XSDT %08lx %06zx (v01 U-BOOT U-BOOTBL %x INTL 0)",
addr, sizeof(struct acpi_table_header) +
- 3 * sizeof(u64), U_BOOT_BUILD_DATE);
+ 3 * sizeof(u64), OEM_REVISION);
addr = ALIGN(addr + sizeof(struct acpi_xsdt), 64);
ut_assert_nextline("DMAR %08lx %06zx (v01 U-BOOT U-BOOTBL %x INTL 0)",
- addr, sizeof(struct acpi_dmar), U_BOOT_BUILD_DATE);
+ addr, sizeof(struct acpi_dmar), OEM_REVISION);
addr = ALIGN(addr + sizeof(struct acpi_dmar), 16);
ut_assert_nextline("DMAR %08lx %06zx (v01 U-BOOT U-BOOTBL %x INTL 0)",
- addr, sizeof(struct acpi_dmar), U_BOOT_BUILD_DATE);
+ addr, sizeof(struct acpi_dmar), OEM_REVISION);
addr = ALIGN(addr + sizeof(struct acpi_dmar), 16);
ut_assert_nextline("DMAR %08lx %06zx (v01 U-BOOT U-BOOTBL %x INTL 0)",
- addr, sizeof(struct acpi_dmar), U_BOOT_BUILD_DATE);
+ addr, sizeof(struct acpi_dmar), OEM_REVISION);
ut_assert_console_end();
return 0;
--
2.20.1
More information about the U-Boot
mailing list