When using 32-bit addresses dtoc works correctly. For 64-bit addresses it does not since it ignores the #address-cells and #size-cells properties. Update the tool to use fdt64_t as the element type for reg properties when either the address or size is larger than one cell. Use the correct value so that C code can obtain the information from the device tree easily. Alos create a new type, fdt_val_t, which is defined to either fdt32_t or fdt64_t depending on the word size of the machine. This type corresponds to fdt_addr_t and fdt_size_t. Unfortunately we cannot just use those types since they are defined to phys_addr_t and phys_size_t which use 'unsigned long' in the 32-bit case, rather than 'unsigned int'. Add tests for the four combinations of address and size values (32/32, 64/64, 32/64, 64/32). Also update existing uses for rk3399 and rk3368 which now need to use the new fdt_val_t type. Signed-off-by: Simon Glass <sjg@chromium.org> Suggested-by: Heiko Stuebner <heiko@sntech.de> Reported-by: Kever Yang <kever.yang@rock-chips.com> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by: Kever Yang <kever.yang@rock-chips.com>master
parent
21d54ac353
commit
c20ee0ed07
@ -0,0 +1,27 @@ |
||||
/* |
||||
* Test device tree file for dtoc |
||||
* |
||||
* Copyright 2017 Google, Inc |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
/ { |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
|
||||
test1 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test1"; |
||||
reg = <0x1234 0x5678>; |
||||
}; |
||||
|
||||
test2 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test2"; |
||||
reg = <0x12345678 0x98765432 2 3>; |
||||
}; |
||||
|
||||
}; |
@ -0,0 +1,33 @@ |
||||
/* |
||||
* Test device tree file for dtoc |
||||
* |
||||
* Copyright 2017 Google, Inc |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
/ { |
||||
#address-cells = <1>; |
||||
#size-cells = <2>; |
||||
|
||||
test1 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test1"; |
||||
reg = <0x1234 0x5678 0x0>; |
||||
}; |
||||
|
||||
test2 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test2"; |
||||
reg = <0x12345678 0x98765432 0x10987654>; |
||||
}; |
||||
|
||||
test3 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test3"; |
||||
reg = <0x12345678 0x98765432 0x10987654 2 0 3>; |
||||
}; |
||||
|
||||
}; |
@ -0,0 +1,33 @@ |
||||
/* |
||||
* Test device tree file for dtoc |
||||
* |
||||
* Copyright 2017 Google, Inc |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
/ { |
||||
#address-cells = <2>; |
||||
#size-cells = <2>; |
||||
|
||||
test1 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test1"; |
||||
reg = /bits/ 64 <0x1234 0x5678>; |
||||
}; |
||||
|
||||
test2 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test2"; |
||||
reg = /bits/ 64 <0x1234567890123456 0x9876543210987654>; |
||||
}; |
||||
|
||||
test3 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test3"; |
||||
reg = /bits/ 64 <0x1234567890123456 0x9876543210987654 2 3>; |
||||
}; |
||||
|
||||
}; |
@ -0,0 +1,33 @@ |
||||
/* |
||||
* Test device tree file for dtoc |
||||
* |
||||
* Copyright 2017 Google, Inc |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
/ { |
||||
#address-cells = <2>; |
||||
#size-cells = <1>; |
||||
|
||||
test1 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test1"; |
||||
reg = <0x1234 0x0 0x5678>; |
||||
}; |
||||
|
||||
test2 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test2"; |
||||
reg = <0x12345678 0x90123456 0x98765432>; |
||||
}; |
||||
|
||||
test3 { |
||||
u-boot,dm-pre-reloc; |
||||
compatible = "test3"; |
||||
reg = <0x12345678 0x90123456 0x98765432 0 2 3>; |
||||
}; |
||||
|
||||
}; |
Loading…
Reference in new issue