[PATCH 1/2][V2] lib: fwts_acpi_tables: add option for dump acpi table from sysfs
Ivan Hu
ivan.hu at canonical.com
Tue Jun 16 11:20:16 UTC 2020
Currently, fwts acpi table acpidumping first read from /dev/mem/,
it is the same as acpidump -c off, it will missing some customized tables.
Add --dump-acpi-from-sysfs option for user to first dump acpi tables
from sysfs, which sync up with acpidump tool and keep the flexibilty.
Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
src/lib/include/fwts_framework.h | 4 +++-
src/lib/src/fwts_acpi_tables.c | 20 +++++++++++++++-----
src/lib/src/fwts_framework.c | 4 ++++
3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/src/lib/include/fwts_framework.h b/src/lib/include/fwts_framework.h
index dddc2fda..eb8278b8 100644
--- a/src/lib/include/fwts_framework.h
+++ b/src/lib/include/fwts_framework.h
@@ -63,7 +63,9 @@ typedef enum {
FWTS_FLAG_TEST_COMPLIANCE_ACPI = 0x00800000,
FWTS_FLAG_TEST_SBBR = 0x01000000,
FWTS_FLAG_TEST_EBBR = 0x02000000,
- FWTS_FLAG_TEST_XBBR = FWTS_FLAG_TEST_SBBR | FWTS_FLAG_TEST_EBBR
+ FWTS_FLAG_TEST_XBBR = FWTS_FLAG_TEST_SBBR | FWTS_FLAG_TEST_EBBR,
+ FWTS_FLAG_DUMP_ACPI_FROM_SYSFS = 0x08000000,
+
} fwts_framework_flags;
#define FWTS_FLAG_TEST_MASK \
diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
index 3b1d7887..90d4a50d 100644
--- a/src/lib/src/fwts_acpi_tables.c
+++ b/src/lib/src/fwts_acpi_tables.c
@@ -1214,12 +1214,22 @@ int fwts_acpi_load_tables(fwts_framework *fw)
ret = fwts_acpi_load_tables_from_acpidump(fw);
require_fixup = true;
} else if (fwts_check_root_euid(fw, true) == FWTS_OK) {
- ret = fwts_acpi_load_tables_from_firmware(fw);
-
- /* Load from memory failed (e.g. no /dev/mem), so try sysfs */
- if (ret != FWTS_OK) {
+ if (!(fw->flags & FWTS_FLAG_DUMP_ACPI_FROM_SYSFS)) {
+ ret = fwts_acpi_load_tables_from_firmware(fw);
+
+ /* Load from memory failed (e.g. no /dev/mem), so try sysfs */
+ if (ret != FWTS_OK) {
+ ret = fwts_acpi_load_tables_from_sysfs(fw);
+ require_fixup = true;
+ }
+ } else {
+ /* Load from sysfs */
ret = fwts_acpi_load_tables_from_sysfs(fw);
- require_fixup = true;
+ if (ret != FWTS_OK) {
+ /* Load from sysfs failed, try from mem(e.g. /dev/mem) */
+ ret = fwts_acpi_load_tables_from_firmware(fw);
+ } else
+ require_fixup = true;
}
} else {
ret = FWTS_ERROR_NO_PRIV;
diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
index e1e896bb..424092f1 100644
--- a/src/lib/src/fwts_framework.c
+++ b/src/lib/src/fwts_framework.c
@@ -139,6 +139,7 @@ static fwts_option fwts_framework_options[] = {
{ "ifv", "", 0, "Run tests in firmware-vendor modes." },
{ "clog", "", 1, "Specify a coreboot logfile dump" },
{ "ebbr", "", 0, "Run ARM EBBR tests." },
+ { "dump-acpi-from-sysfs","", 0, "Specify dumping acpi table log default from sysfs." },
{ NULL, NULL, 0, NULL }
};
@@ -1347,6 +1348,9 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
case 49: /* --ebbr */
fw->flags |= FWTS_FLAG_TEST_EBBR;
break;
+ case 50: /* --dump-acpi-from-sysfs */
+ fw->flags |= FWTS_FLAG_DUMP_ACPI_FROM_SYSFS;
+ break;
}
break;
case 'a': /* --all */
--
2.17.1
More information about the fwts-devel
mailing list