[U-Boot] fdtgrep results in Segmentation fault for 64bit DT
Masahiro Yamada
yamada.masahiro at socionext.com
Thu Feb 18 04:36:44 CET 2016
Hi Simon,
I am working on U-Boot support on my new ARMv8 SoC.
I was hit by a problem with fdtgrep.
(Note: CONFIG_SPL_OF_CONTROL is on UniPhier SoC family)
CC spl/lib/time.o
CC spl/lib/rand.o
CC spl/lib/vsprintf.o
CC spl/lib/panic.o
CC spl/lib/strto.o
LD spl/lib/built-in.o
LDS spl/u-boot-spl.lds
LD spl/u-boot-spl
OBJCOPY spl/u-boot-spl-nodtb.bin
FDTGREP spl/u-boot-spl.dtb
Error: FDT_ERR_BADMAGIC
make[2]: *** [spl/u-boot-spl.dtb] Error 1
make[1]: *** [spl/u-boot-spl] Error 2
make[1]: Leaving directory `/home/yamada/workspace/u-boot-unph'
make: *** [u-boot] Error 2
On my command line,
$ tools/fdtgrep -b u-boot,dm-pre-reloc -RT dts/dt.dtb -n /chosen -O dtb
Segmentation fault (core dumped)
Could you take a look?
My DT looks like follows:
(It was taken from
linux/arch/arm/boot/dts/socionext/uniphier-ph1-ld10-ref.dts, and it is
working on Linux.
I just added "u-boot,dm-pre-reloc" to some nodes. So it should be correct.)
yamada at beagle:~/workspace/u-boot-unph$ fdtdump dts/dt.dtb
/dts-v1/;
// magic: 0xd00dfeed
// totalsize: 0x18f8 (6392)
// off_dt_struct: 0x38
// off_dt_strings: 0x178c
// off_mem_rsvmap: 0x28
// version: 17
// last_comp_version: 16
// boot_cpuid_phys: 0x0
// size_dt_strings: 0x16c
// size_dt_struct: 0x1754
/ {
compatible = "socionext,ph1-ld10-ref", "socionext,ph1-ld10";
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
interrupt-parent = <0x00000001>;
model = "UniPhier PH1-LD10 Reference Board";
cpus {
#address-cells = <0x00000002>;
#size-cells = <0x00000000>;
cpu-map {
cluster0 {
core0 {
cpu = <0x00000002>;
};
core1 {
cpu = <0x00000003>;
};
};
cluster1 {
core0 {
cpu = <0x00000004>;
};
core1 {
cpu = <0x00000005>;
};
};
};
cpu at 0 {
device_type = "cpu";
compatible = "arm,cortex-a72", "arm,armv8";
reg = <0x00000000 0x00000000>;
enable-method = "spin-table";
cpu-release-addr = <0x00000000 0x80000100>;
linux,phandle = <0x00000002>;
phandle = <0x00000002>;
};
cpu at 1 {
device_type = "cpu";
compatible = "arm,cortex-a72", "arm,armv8";
reg = <0x00000000 0x00000001>;
enable-method = "spin-table";
cpu-release-addr = <0x00000000 0x80000100>;
linux,phandle = <0x00000003>;
phandle = <0x00000003>;
};
cpu at 100 {
device_type = "cpu";
compatible = "arm,cortex-a53", "arm,armv8";
reg = <0x00000000 0x00000100>;
enable-method = "spin-table";
cpu-release-addr = <0x00000000 0x80000100>;
linux,phandle = <0x00000004>;
phandle = <0x00000004>;
};
cpu at 101 {
device_type = "cpu";
compatible = "arm,cortex-a53", "arm,armv8";
reg = <0x00000000 0x00000101>;
enable-method = "spin-table";
cpu-release-addr = <0x00000000 0x80000100>;
linux,phandle = <0x00000005>;
phandle = <0x00000005>;
};
};
clocks {
uart_clk {
#clock-cells = <0x00000000>;
compatible = "fixed-clock";
clock-frequency = <0x038185a0>;
linux,phandle = <0x00000007>;
phandle = <0x00000007>;
};
i2c_clk {
#clock-cells = <0x00000000>;
compatible = "fixed-clock";
clock-frequency = <0x02faf080>;
linux,phandle = <0x0000000c>;
phandle = <0x0000000c>;
};
};
timer {
compatible = "arm,armv8-timer";
interrupts = <0x00000001 0x0000000d 0x00000f01 0x00000001
0x0000000e 0x00000f01 0x00000001 0x0000000b 0x00000f01 0x00000001
0x0000000a 0x00000f01>;
};
soc {
compatible = "simple-bus";
#address-cells = <0x00000001>;
#size-cells = <0x00000001>;
ranges = <0x00000000 0x00000000 0x00000000 0xffffffff>;
u-boot,dm-pre-reloc;
serial at 54006800 {
compatible = "socionext,uniphier-uart";
status = "okay";
reg = <0x54006800 0x00000040>;
interrupts = <0x00000000 0x00000021 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x00000006>;
clocks = <0x00000007>;
u-boot,dm-pre-reloc;
};
serial at 54006900 {
compatible = "socionext,uniphier-uart";
status = "disabled";
reg = <0x54006900 0x00000040>;
interrupts = <0x00000000 0x00000023 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x00000008>;
clocks = <0x00000007>;
};
serial at 54006a00 {
compatible = "socionext,uniphier-uart";
status = "disabled";
reg = <0x54006a00 0x00000040>;
interrupts = <0x00000000 0x00000025 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x00000009>;
clocks = <0x00000007>;
};
serial at 54006b00 {
compatible = "socionext,uniphier-uart";
status = "disabled";
reg = <0x54006b00 0x00000040>;
interrupts = <0x00000000 0x000000b1 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x0000000a>;
clocks = <0x00000007>;
};
i2c at 58780000 {
compatible = "socionext,uniphier-fi2c";
status = "okay";
reg = <0x58780000 0x00000080>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
interrupts = <0x00000000 0x00000029 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x0000000b>;
clocks = <0x0000000c>;
clock-frequency = <0x000186a0>;
};
i2c at 58781000 {
compatible = "socionext,uniphier-fi2c";
status = "disabled";
reg = <0x58781000 0x00000080>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
interrupts = <0x00000000 0x0000002a 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x0000000d>;
clocks = <0x0000000c>;
clock-frequency = <0x000186a0>;
};
i2c at 58782000 {
compatible = "socionext,uniphier-fi2c";
status = "disabled";
reg = <0x58782000 0x00000080>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
interrupts = <0x00000000 0x0000002b 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x0000000e>;
clocks = <0x0000000c>;
clock-frequency = <0x000186a0>;
};
i2c at 58783000 {
compatible = "socionext,uniphier-fi2c";
status = "disabled";
reg = <0x58783000 0x00000080>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
interrupts = <0x00000000 0x0000002c 0x00000004>;
pinctrl-names = "default";
pinctrl-0 = <0x0000000f>;
clocks = <0x0000000c>;
clock-frequency = <0x000186a0>;
};
i2c at 58784000 {
compatible = "socionext,uniphier-fi2c";
reg = <0x58784000 0x00000080>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
interrupts = <0x00000000 0x0000002d 0x00000004>;
clocks = <0x0000000c>;
clock-frequency = <0x00061a80>;
};
i2c at 58785000 {
compatible = "socionext,uniphier-fi2c";
reg = <0x58785000 0x00000080>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
interrupts = <0x00000000 0x00000019 0x00000004>;
clocks = <0x0000000c>;
clock-frequency = <0x00061a80>;
};
i2c at 58786000 {
compatible = "socionext,uniphier-fi2c";
reg = <0x58786000 0x00000080>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
interrupts = <0x00000000 0x0000001a 0x00000004>;
clocks = <0x0000000c>;
clock-frequency = <0x00061a80>;
};
system-bus at 58c00000 {
compatible = "socionext,uniphier-system-bus";
reg = <0x58c00000 0x00000400>;
#address-cells = <0x00000002>;
#size-cells = <0x00000001>;
};
smpctrl at 59800000 {
compatible = "socionext,uniphier-smpctrl";
reg = <0x59801000 0x00000400>;
};
pinctrl at 5f801000 {
compatible = "socionext,ph1-ld10-pinctrl", "syscon";
reg = <0x5f801000 0x00000e00>;
u-boot,dm-pre-reloc;
emmc_grp {
groups = "emmc", "emmc_dat8";
function = "emmc";
};
emmc_grp_1v8 {
groups = "emmc", "emmc_dat8";
function = "emmc";
};
i2c0_grp {
groups = "i2c0";
function = "i2c0";
linux,phandle = <0x0000000b>;
phandle = <0x0000000b>;
};
i2c1_grp {
groups = "i2c1";
function = "i2c1";
linux,phandle = <0x0000000d>;
phandle = <0x0000000d>;
};
i2c2_grp {
groups = "i2c2";
function = "i2c2";
linux,phandle = <0x0000000e>;
phandle = <0x0000000e>;
};
i2c3_grp {
groups = "i2c3";
function = "i2c3";
linux,phandle = <0x0000000f>;
phandle = <0x0000000f>;
};
sd_grp {
groups = "sd";
function = "sd";
};
sd_grp_1v8 {
groups = "sd";
function = "sd";
};
sd1_grp {
groups = "sd1";
function = "sd1";
};
sd1_grp_1v8 {
groups = "sd1";
function = "sd1";
};
uart0_grp {
groups = "uart0";
function = "uart0";
u-boot,dm-pre-reloc;
linux,phandle = <0x00000006>;
phandle = <0x00000006>;
};
uart1_grp {
groups = "uart1";
function = "uart1";
linux,phandle = <0x00000008>;
phandle = <0x00000008>;
};
uart2_grp {
groups = "uart2";
function = "uart2";
linux,phandle = <0x00000009>;
phandle = <0x00000009>;
};
uart3_grp {
groups = "uart3";
function = "uart3";
linux,phandle = <0x0000000a>;
phandle = <0x0000000a>;
};
usb0_grp {
groups = "usb0";
function = "usb0";
};
usb1_grp {
groups = "usb1";
function = "usb1";
};
usb2_grp {
groups = "usb2";
function = "usb2";
};
usb3_grp {
groups = "usb3";
function = "usb3";
};
};
interrupt-controller at 5fe00000 {
compatible = "arm,gic-v3";
reg = <0x5fe00000 0x00010000 0x5fe80000 0x00080000>;
interrupt-controller;
#interrupt-cells = <0x00000003>;
interrupts = <0x00000001 0x00000009 0x00000004>;
linux,phandle = <0x00000001>;
phandle = <0x00000001>;
};
};
memory {
device_type = "memory";
reg = <0x00000000 0x80000000 0x00000000 0xc0000000>;
};
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
serial0 = "/soc/serial at 54006800";
serial1 = "/soc/serial at 54006900";
serial2 = "/soc/serial at 54006a00";
serial3 = "/soc/serial at 54006b00";
i2c0 = "/soc/i2c at 58780000";
i2c1 = "/soc/i2c at 58781000";
i2c2 = "/soc/i2c at 58782000";
i2c3 = "/soc/i2c at 58783000";
i2c4 = "/soc/i2c at 58784000";
i2c5 = "/soc/i2c at 58785000";
i2c6 = "/soc/i2c at 58786000";
};
};
--
Best Regards
Masahiro Yamada
More information about the U-Boot
mailing list