
Hi,
On Fri, Jun 29, 2012 at 1:22 PM, Stephan Linz linz@li-pro.net wrote:
Am Freitag, den 29.06.2012, 10:18 +0200 schrieb Michal Simek:
On 06/29/2012 04:32 AM, Simon Glass wrote:
Hi,
--snip--
I have sent support for Microblaze. Currently without dts because I want
to clear this part a little bit.
Hi Michal,
looks good, I've been waiting a long time on the FDT support in U-Boot for Microblaze -- great -- PS: see my comment on patch 5 ...
Tegra is using ./arch/arm/dts/tegra20.dtsi and
board/nvidia/dts/tegra2-seaboard.dts
and they are composed together in dts/Makefile by calling preprocessor. Microblaze will be totally different case because every Microblaze hw
design is different.
Yes, that's right. We will never be in the position to define a skeleton or a basic platform configuration.
We can use two main buses (little and big endian) and cpu is also
configurable.
Based on this for Microblaze is the best solution directly to use dts. (DTS for Microblaze is also generated directly from design tool).
... directly in the context of a board, not arch/cpu, right?
Anyway - here is the bug message I am getting if I use full dts in
board/<name>/dts/microblaze.dts
and empty arch/microblaze/dts/microblaze.dtsi
<stdin>:34:3: error: invalid preprocessing directive #address <stdin>:35:3: error: invalid preprocessing directive #size <stdin>:52:4: error: invalid preprocessing directive #address <stdin>:53:4: error: invalid preprocessing directive #cpus <stdin>:54:4: error: invalid preprocessing directive #size <stdin>:155:4: error: invalid preprocessing directive #address <stdin>:156:4: error: invalid preprocessing directive #size <stdin>:160:5: error: invalid preprocessing directive #gpio <stdin>:192:5: error: invalid preprocessing directive #gpio <stdin>:209:5: error: invalid preprocessing directive #gpio <stdin>:241:5: error: invalid preprocessing directive #gpio <stdin>:267:5: error: invalid preprocessing directive #address <stdin>:268:5: error: invalid preprocessing directive #size <stdin>:394:5: error: invalid preprocessing directive #interrupt
This is error for opposite case - empty microblaze.dts and full
microblaze.dtsi.
That are CPP errors, because the auto generated xilinx.dts is full of CPP pragma like syntax (#something) that are wrong (invalid).
Yes - we want to move away from this and use a newer dtc which supports -i for include files, but can't yet. Stephen Warren suggested including the new dtc inside the U-Boot tree.
make[1]: Entering directory `/mnt/projects/u-boot/dts' rc=$( cat /mnt/projects/u-boot/board/petalogix/dts/microblaze.dts |
microblaze-unknown-linux-gnu-gcc -E
-P
-DARCH_CPU_DTS="/mnt/projects/u-boot/arch/microblaze/dts/microblaze.dtsi"
- | { { dtc -R 4 -p 0x1000
-O dtb -o dt.dtb - 2>&1 ; echo $? >&3 ; } | grep -v '^DTC: dts->dtb on
file' ; } 3>&1 ) ; \
exit $rc
/bin/sh: line 1: exit: too many arguments make[1]: *** [dt.dtb] Error 1 make[1]: Leaving directory `/mnt/projects/u-boot/dts'
I have just tried to fix it by introducing new CONFIG option for
skipping that preprocessor
part.
Instead of disable / skipp the CPP step you can hide the auto generated xilinx.dts with a second include stage, for example:
board/microblaze/dts/microblaze.dts looks like:
/include/ ARCH_CPU_DTS /include/ BOARD_DTS
Right, only two lines. The arch/microblaze/dts/microblaze.dtsi remains empty as you have said above. Just new is BOARD_DTS -- with the attached patch for dts/Makefile you can copy the auto generated xilinx.dts into the specific board directory and the CPP step substitute the right place to board/microblaze/microblaze-generic/dts/microblaze.dts
I think there are no side effects with other ports like the tegra2.
If you want you can omit the ARCH_CPU_DTS inclusion. The architectural microblaze.dtsi file is empty and (!!) have to be empty, because the DTC will break with an error on multiple "/dts-v1/;" lines!
Here is the patch:
diff --git a/dts/Makefile b/dts/Makefile index 914e479..b1f47a1 100644 --- a/dts/Makefile +++ b/dts/Makefile @@ -36,7 +36,8 @@ $(error Your architecture does not have device tree support enabled. \ Please define CONFIG_ARCH_DEVICE_TREE))
# We preprocess the device tree file provide a useful define -DTS_CPPFLAGS := -DARCH_CPU_DTS= "$(SRCTREE)/arch/$(ARCH)/dts/$(CONFIG_ARCH_DEVICE_TREE).dtsi" +DTS_CPPFLAGS := -DARCH_CPU_DTS= "$(SRCTREE)/arch/$(ARCH)/dts/$(CONFIG_ARCH_DEVICE_TREE).dtsi" \
-DBOARD_DTS=
"$(SRCTREE)/board/$(VENDOR)/$(BOARD)/dts/$(DEVICE_TREE).dts"
all: $(obj).depend $(LIB)
I suppose this is ok. Really the better plan would be to use -i and specify the various directories where we can get include files. But for now, ok.
Regards, Simon
br, Stephan
It will be good for Microblaze (probably there is any smarter solution
for SKIP case not to have two cats there).
The same situation will happen for Xilinx ppc support and partially for
upcoming ARM zynq where
full DTS is generated for unique hw design.
Here is the patch to show you what phase I would like to skip.
diff --git a/dts/Makefile b/dts/Makefile index 914e479..d670cb8 100644 --- a/dts/Makefile +++ b/dts/Makefile @@ -45,9 +45,15 @@ all: $(obj).depend $(LIB) # the filename. DT_BIN := $(obj)dt.dtb
+ifndef CONFIG_DTS_SKIP_PREPROCESSOR +SKIP := $(CPP) -P $(DTS_CPPFLAGS) - +else +SKIP := cat +endif
- $(DT_BIN): $(TOPDIR)/board/$(VENDOR)/dts/$(DEVICE_TREE).dts rc=$$( \
cat $< | $(CPP) -P $(DTS_CPPFLAGS) - | \
cat $< | $(SKIP) |\ { { $(DTC) -R 4 -p 0x1000 -O dtb -o ${DT_BIN} - 2>&1 ; \ echo $$? >&3 ; } | \ grep -v '^DTC: dts->dtb on file' ; \
Thanks for your comments. Michal