Thread (1 message) 1 message, 1 author, 2014-02-21

Re: devicetree repository separation/migration

From: Frank Rowand <hidden>
Date: 2014-02-21 21:04:24

On 2/21/2014 10:22 AM, Warner Losh wrote:
On Feb 19, 2014, at 9:58 PM, Frank Rowand wrote:
quoted
On 2/19/2014 1:15 PM, Grant Likely wrote:
quoted
On Wed, Feb 19, 2014 at 8:16 PM, Frank Rowand [off-list ref] wrote:
quoted
On 2/19/2014 1:08 AM, Sascha Hauer wrote:
quoted
On Tue, Feb 18, 2014 at 02:44:15PM -0800, Tim Bird wrote:
quoted
I'm not in favor of separating the device tree information from the kernel.

If we switch, then whatever synchronization issues other projects
are having now with synching with the device tree info from the kernel will
just then become the problem of the kernel developers, who will then
have to sync with the device tree info from another repository.  If the
sync issues can't be solved now for them, why or how would it be solved
post-separation for us?  (It sounds like a zero-sum game of pain transfer
to me.)

I'm relatively unfamiliar with the arguments.  Can someone provide
a brief list of reasons this is needed, and how the inconvenience to Linux
kernel developers will be minimized, should it proceed?
quoted
One of the reasons for doing devicetrees is to separate the hardware
description from the code so that:
- Other OSes (and bootloaders) can use the same description to start on
 a given hardware
- A generic Kernel can be started on any hardware
- A hardware describes itself, makes itself more introspecitve so we can
 go away from very specialized kernels
Tim knows this ^^^^.  He was asking for the arguments for moving dts files
out of the linux kernel source tree.
We've made the decision that devicetree bindings need to be treated as
ABI, but as long as the .dts files live in the kernel there will
always be the temptation to just tweak things in lock-step and nobody
will notice. Splitting the files out gives that extra push to think
about whether changes to a binding will backwards compatible with a
tree that doesn't have those changes because the chances are a lot
higher that someone will hit that combination.

The other argument is shared source between
BSD/U-Boot/Barebox/Linux/etc. Until we have a separate .dts repo there
is no good way to share the database of hardware descriptions.
We could provide an easy export (see below).  What do you think?
So what would the process be to get changes to those files upstream if you did this? It would make it marginally easier to USE, but once disconnected from the git world, a lot harder to track and fix.
Changes would be through the normal upstream project (the Linux kernel).  Just like when
the Linux kernel uses a driver from BSD, any changes to the upstream are done through
the BSD process.
Also, you should export the device tree docs too, since they are, in theory, a set.
Yes, absolutely.  And the kbuild docs need to be updated.  And ....  The patch was
just a proof of concept to show the scope of the changes that would be required and
that it was possible.
And honestly, the device tree doc files need more work than the .dts and .dtsi files.

Warner
quoted
-Frank



Proof of concept: export devicetree source and header files

Not-signed-off-by: Frank Rowand [off-list ref]


---
Makefile                   |   27 	26 +	1 -	0 !
scripts/Makefile.dtsexport |   19 	19 +	0 -	0 !
scripts/dts.sh             |   11 	11 +	0 -	0 !
3 files changed, 56 insertions(+), 1 deletion(-)

Index: b/Makefile
===================================================================
--- a/Makefile
+++ b/Makefile
@@ -234,6 +234,9 @@ endif
# Where to locate arch specific headers
hdr-arch  := $(SRCARCH)

+# Where to locate arch specific dts
+dts-arch  := $(SRCARCH)
+
KCONFIG_CONFIG	?= .config
export KCONFIG_CONFIG
@@ -463,7 +466,7 @@ version_h := include/generated/uapi/linu
no-dot-config-targets := clean mrproper distclean \
			 cscope gtags TAGS tags help %docs check% coccicheck \
			 $(version_h) headers_% archheaders archscripts \
-			 kernelversion %src-pkg
+			 kernelversion %src-pkg dts_export%

config-targets := 0
mixed-targets  := 0
@@ -933,6 +936,26 @@ firmware_install: FORCE
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_install

# ---------------------------------------------------------------------------
+# devicetree source and headers export
+
+#Default location for installed headers
+export EXPORT_DTS_PATH = $(KBUILD_OUTPUT)/usr/dts
+
+PHONY += dts_export_headers
+dts_export_headers: scripts_basic
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.dtsexport obj=include/dt-bindings
+	@echo $(KERNELRELEASE) >$(EXPORT_DTS_PATH)/linux_version
+
+PHONY += dts_export_all
+dts_export_all: dts_export_headers
+	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/dts.sh
+
+PHONY += dts_export
+dts_export:
+	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.dtsexport obj=arch/$(dts-arch)/boot/dts
+
+
+# ---------------------------------------------------------------------------
# Kernel headers

#Default location for installed headers
@@ -1160,6 +1183,8 @@ help:
	@echo  '  modules_prepare - Set up for building external modules'
	@echo  '  tags/TAGS	  - Generate tags file for editors'
	@echo  '  cscope	  - Generate cscope index'
+	@echo  '  dts_export_all  - Export devicetree source and headers to EXPORT_DTS_PATH'
+	@echo  '                    (default: $(EXPORT_DTS_PATH))'
	@echo  '  gtags           - Generate GNU GLOBAL index'
	@echo  '  kernelrelease	  - Output the release version string'
	@echo  '  kernelversion	  - Output the version stored in Makefile'
Index: b/scripts/Makefile.dtsexport
===================================================================
--- /dev/null
+++ b/scripts/Makefile.dtsexport
@@ -0,0 +1,19 @@
+# ==========================================================================
+# Exporting dts source and header files
+#
+# ==========================================================================
+
+srcpath := $(srctree)/$(obj)/*
+dstpath := $(EXPORT_DTS_PATH)/$(obj)
+
+include scripts/Kbuild.include
+
+
+quiet_cmd_install = EXPORT $(subst $(srctree)/,,$(srcpath))
+      cmd_install = mkdir -p $(dstpath); cp -a $(srcpath) $(dstpath)
+
+
+.PHONY: export
+export:
+	$(call cmd,install)
+
Index: b/scripts/dts.sh
===================================================================
--- /dev/null
+++ b/scripts/dts.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+# Run dts_export command for all architectures
+
+# Stop on error
+set -e
+
+for arch in $(ls ${srctree}/arch); do
+	if [ -d ${srctree}/arch/${arch}/boot/dts ]; then
+		make ARCH=${arch} dts_export
+	fi
+done
--
To unsubscribe from this list: send the line "unsubscribe devicetree-compiler" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe devicetree-spec" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help