]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: Fix OF_BAD_ADDR definition
authorPatrice Chotard <patrice.chotard@foss.st.com>
Tue, 4 Jan 2022 07:42:48 +0000 (08:42 +0100)
committerSimon Glass <sjg@chromium.org>
Tue, 25 Jan 2022 19:36:10 +0000 (12:36 -0700)
When OF_LIVE flag is enabled on a 64 bits platform, there is an
issue when dev_read_addr() is called and need to perform an address
translation using __of_translate_address().

In case of error, __of_translate_address() return's value is OF_BAD_ADDR
(wich is defined in include/dm/of.h to ((u64)-1) = 0xffffffffffffffff).
The return value of dev_read_addr() is often compared to FDT_ADDR_T_NONE
which is defined as (-1U) = 0xffffffff.
In this case the comparison is always false.

To fix this issue, define FDT_ADDR_T_NONE to (ulong)(-1) in case of
AARCH64. Update accordingly related tests.

Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
include/fdtdec.h
test/dm/ofnode.c
test/dm/pci.c
test/dm/test-fdt.c

index 9a7b6a7ee192aa813bce0dc97489da033aa4789b..4b0b505773ddf557001538a2755ba5c2546226f0 100644 (file)
 typedef phys_addr_t fdt_addr_t;
 typedef phys_size_t fdt_size_t;
 
-#define FDT_ADDR_T_NONE (-1U)
 #define FDT_SIZE_T_NONE (-1U)
 
 #ifdef CONFIG_PHYS_64BIT
+#define FDT_ADDR_T_NONE ((ulong)(-1))
+
 #define fdt_addr_to_cpu(reg) be64_to_cpu(reg)
 #define fdt_size_to_cpu(reg) be64_to_cpu(reg)
 #define cpu_to_fdt_addr(reg) cpu_to_be64(reg)
 #define cpu_to_fdt_size(reg) cpu_to_be64(reg)
 typedef fdt64_t fdt_val_t;
 #else
+#define FDT_ADDR_T_NONE (-1U)
+
 #define fdt_addr_to_cpu(reg) be32_to_cpu(reg)
 #define fdt_size_to_cpu(reg) be32_to_cpu(reg)
 #define cpu_to_fdt_addr(reg) cpu_to_be32(reg)
index 5e7c9681c793acd58632ca7b128f3d21e7985c7a..dab0480a42fcbabe86b671af3905a8c5f6311fb7 100644 (file)
@@ -286,7 +286,7 @@ static int dm_test_ofnode_get_reg(struct unit_test_state *uts)
        ut_assert(ofnode_valid(node));
        addr = ofnode_get_addr(node);
        size = ofnode_get_size(node);
-       ut_asserteq(FDT_ADDR_T_NONE, addr);
+       ut_asserteq_64(FDT_ADDR_T_NONE, addr);
        ut_asserteq(FDT_SIZE_T_NONE, size);
 
        node = ofnode_path("/translation-test@8000/noxlatebus@3,300/dev@42");
index fa2e4a85596c61c55011b7fd65f6d83e9e315f46..00e4440a9dbae1521cdbb7bb5752aff6358bffc9 100644 (file)
@@ -331,10 +331,10 @@ static int dm_test_pci_addr_live(struct unit_test_state *uts)
        struct udevice *swap1f, *swap1;
 
        ut_assertok(dm_pci_bus_find_bdf(PCI_BDF(0, 0x1f, 0), &swap1f));
-       ut_asserteq(FDT_ADDR_T_NONE, dev_read_addr_pci(swap1f));
+       ut_asserteq_64(FDT_ADDR_T_NONE, dev_read_addr_pci(swap1f));
 
        ut_assertok(dm_pci_bus_find_bdf(PCI_BDF(0, 0x1, 0), &swap1));
-       ut_asserteq(FDT_ADDR_T_NONE, dev_read_addr_pci(swap1));
+       ut_asserteq_64(FDT_ADDR_T_NONE, dev_read_addr_pci(swap1));
 
        return 0;
 }
index 8866d4d959dd85c22e1cedb8eedcfb338850fc49..e1de066226cb39bcd3931cdd47e5d76212cb1160 100644 (file)
@@ -768,7 +768,7 @@ static int dm_test_fdt_livetree_writing(struct unit_test_state *uts)
        /* Test setting generic properties */
 
        /* Non-existent in DTB */
-       ut_asserteq(FDT_ADDR_T_NONE, dev_read_addr(dev));
+       ut_asserteq_64(FDT_ADDR_T_NONE, dev_read_addr(dev));
        /* reg = 0x42, size = 0x100 */
        ut_assertok(ofnode_write_prop(node, "reg", 8,
                                      "\x00\x00\x00\x42\x00\x00\x01\x00"));