dm: Fix OF_BAD_ADDR definition
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>
This commit is contained in:
		
							parent
							
								
									a77f468099
								
							
						
					
					
						commit
						9876ae7db6
					
				| 
						 | 
				
			
			@ -24,16 +24,19 @@
 | 
			
		|||
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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue