Converting "board file" to device tree one device at a time?

Mason slash.tmp at free.fr
Fri Jul 31 02:57:26 PDT 2015


Hello,

I'm using an ARM Cortex A9 based platform. I have a minimal
3.14 port working (UART and Ethernet, loads a root file system
over NFS) using a board file.

I'm trying to convert the port to device tree, so that I can
(try to) push it upstream.

As I can't wrap my head around the concept, I'm trying to do
the conversion "one device at a time", starting with just the
UART, then Ethernet, then the clock tree, and that's basically
all I need to boot the board.

I started by enabling

CONFIG_ARM_APPENDED_DTB=y
CONFIG_ARM_ATAG_DTB_COMPAT=y
CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER=y
CONFIG_SERIAL_OF_PLATFORM=y

and wrote this dts:

/dts-v1/;

/ {
	compatible = "sigma,tango4-soc";

	#address-cells = <1>;
	#size-cells = <1>;

	soc {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		uart0: serial at 10700 {
			compatible = "ns16550a";
			reg = <0x10700 0x100>;
			interrupts = <1>;
			clock-frequency = <7372800>;
			reg-shift = <2>;
			no-loopback-test;

			#address-cells = <1>;
			#size-cells = <1>;
		};
	};
};

and added "sigma,tango4-soc" to my struct machine_desc .dt_compat


Then I generated a kernel with appended DT using:

$ make dtbs
$ make -j2 zImage && cat arch/arm/boot/zImage arch/arm/boot/dts/tango.dtb >XXX
$ mv XXX arch/arm/boot/zImage && make uImage


Then I set a breakpoint in of_platform_serial_probe, hoping
to witness the miracle... and nothing. Looks like device is
never registered :-(

Can anyone point me where to look?
What did I do wrong?

Where does the kernel parse the appended DTB?
Is it setup_machine_fdt?

When/Where is the UART description in the device tree supposed
to be used to register the device?

Any help greatly appreciated!

Regards.



More information about the linux-arm-kernel mailing list