summaryrefslogtreecommitdiff
path: root/tests/dtbs_equal_ordered.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/dtbs_equal_ordered.c')
-rw-r--r--tests/dtbs_equal_ordered.c87
1 files changed, 56 insertions, 31 deletions
diff --git a/tests/dtbs_equal_ordered.c b/tests/dtbs_equal_ordered.c
index ed9278c4f30a..1db25f45265a 100644
--- a/tests/dtbs_equal_ordered.c
+++ b/tests/dtbs_equal_ordered.c
@@ -29,6 +29,31 @@
#include "tests.h"
#include "testdata.h"
+int notequal; /* = 0 */
+
+#define MISMATCH(fmt, ...) \
+ do { \
+ if (notequal) \
+ PASS(); \
+ else \
+ FAIL(fmt, ##__VA_ARGS__); \
+ } while (0)
+
+#define MATCH() \
+ do { \
+ if (!notequal) \
+ PASS(); \
+ else \
+ FAIL("Trees match which shouldn't"); \
+ } while (0)
+
+#define CHECK(code) \
+ { \
+ err = (code); \
+ if (err) \
+ FAIL(#code ": %s", fdt_strerror(err)); \
+ }
+
static void compare_mem_rsv(const void *fdt1, const void *fdt2)
{
int i;
@@ -36,23 +61,18 @@ static void compare_mem_rsv(const void *fdt1, const void *fdt2)
int err;
if (fdt_num_mem_rsv(fdt1) != fdt_num_mem_rsv(fdt2))
- FAIL("Trees have different number of reserve entries");
+ MISMATCH("Trees have different number of reserve entries");
for (i = 0; i < fdt_num_mem_rsv(fdt1); i++) {
- err = fdt_get_mem_rsv(fdt1, i, &addr1, &size1);
- if (err)
- FAIL("fdt_get_mem_rsv(fdt1, %d, ...): %s", i,
- fdt_strerror(err));
- err = fdt_get_mem_rsv(fdt2, i, &addr2, &size2);
- if (err)
- FAIL("fdt_get_mem_rsv(fdt2, %d, ...): %s", i,
- fdt_strerror(err));
+ CHECK(fdt_get_mem_rsv(fdt1, i, &addr1, &size1));
+ CHECK(fdt_get_mem_rsv(fdt2, i, &addr2, &size2));
+
if ((addr1 != addr2) || (size1 != size2))
- FAIL("Mismatch in reserve entry %d: "
- "(0x%llx, 0x%llx) != (0x%llx, 0x%llx)", i,
- (unsigned long long)addr1,
- (unsigned long long)size1,
- (unsigned long long)addr2,
- (unsigned long long)size2);
+ MISMATCH("Mismatch in reserve entry %d: "
+ "(0x%llx, 0x%llx) != (0x%llx, 0x%llx)", i,
+ (unsigned long long)addr1,
+ (unsigned long long)size1,
+ (unsigned long long)addr2,
+ (unsigned long long)size2);
}
}
@@ -77,7 +97,7 @@ static void compare_structure(const void *fdt1, const void *fdt2)
} while (tag2 == FDT_NOP);
if (tag1 != tag2)
- FAIL("Tag mismatch (%d != %d) at (%d, %d)",
+ MISMATCH("Tag mismatch (%d != %d) at (%d, %d)",
tag1, tag2, offset1, offset2);
switch (tag1) {
@@ -90,9 +110,10 @@ static void compare_structure(const void *fdt1, const void *fdt2)
if (!name2)
FAIL("fdt_get_name(fdt2, %d, ..): %s",
offset2, fdt_strerror(err));
+
if (!streq(name1, name2))
- FAIL("Name mismatch (\"%s\" != \"%s\") at (%d, %d)",
- name1, name2, offset1, offset2);
+ MISMATCH("Name mismatch (\"%s\" != \"%s\") at (%d, %d)",
+ name1, name2, offset1, offset2);
break;
case FDT_PROP:
@@ -106,17 +127,17 @@ static void compare_structure(const void *fdt1, const void *fdt2)
name1 = fdt_string(fdt1, fdt32_to_cpu(prop1->nameoff));
name2 = fdt_string(fdt2, fdt32_to_cpu(prop2->nameoff));
if (!streq(name1, name2))
- FAIL("Property name mismatch \"%s\" != \"%s\" "
- "at (%d, %d)", name1, name2, offset1, offset2);
+ MISMATCH("Property name mismatch \"%s\" != \"%s\" "
+ "at (%d, %d)", name1, name2, offset1, offset2);
len1 = fdt32_to_cpu(prop1->len);
len2 = fdt32_to_cpu(prop2->len);
if (len1 != len2)
- FAIL("Property length mismatch %u != %u "
- "at (%d, %d)", len1, len2, offset1, offset2);
+ MISMATCH("Property length mismatch %u != %u "
+ "at (%d, %d)", len1, len2, offset1, offset2);
if (memcmp(prop1->data, prop2->data, len1) != 0)
- FAIL("Property value mismatch at (%d, %d)",
- offset1, offset2);
+ MISMATCH("Property value mismatch at (%d, %d)",
+ offset1, offset2);
break;
case FDT_END:
@@ -131,10 +152,14 @@ int main(int argc, char *argv[])
uint32_t cpuid1, cpuid2;
test_init(argc, argv);
- if (argc != 3)
- CONFIG("Usage: %s <dtb file> <dtb file>", argv[0]);
- fdt1 = load_blob(argv[1]);
- fdt2 = load_blob(argv[2]);
+ if ((argc != 3)
+ && ((argc != 4) || !streq(argv[1], "-n")))
+ CONFIG("Usage: %s [-n] <dtb file> <dtb file>", argv[0]);
+ if (argc == 4)
+ notequal = 1;
+
+ fdt1 = load_blob(argv[argc-2]);
+ fdt2 = load_blob(argv[argc-1]);
compare_mem_rsv(fdt1, fdt2);
compare_structure(fdt1, fdt2);
@@ -142,8 +167,8 @@ int main(int argc, char *argv[])
cpuid1 = fdt_boot_cpuid_phys(fdt1);
cpuid2 = fdt_boot_cpuid_phys(fdt2);
if (cpuid1 != cpuid2)
- FAIL("boot_cpuid_phys mismatch 0x%x != 0x%x",
- cpuid1, cpuid2);
+ MISMATCH("boot_cpuid_phys mismatch 0x%x != 0x%x",
+ cpuid1, cpuid2);
- PASS();
+ MATCH();
}