diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5023c8e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.*
+!.gitignore
+*.dtb
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fb51ace
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,180 @@
+
+DTC ?= dtc
+CPP ?= cpp
+
+# Disable noisy checks by default
+ifeq ($(findstring 1,$(DTC_VERBOSE)),)
+DTC_FLAGS += -Wno-unit_address_vs_reg \
+        -Wno-unit_address_format \
+        -Wno-avoid_unnecessary_addr_size \
+        -Wno-alias_paths \
+        -Wno-graph_child_address \
+        -Wno-simple_bus_reg \
+        -Wno-unique_unit_address \
+        -Wno-pci_device_reg
+endif
+
+ifneq ($(findstring 2,$(DTC_VERBOSE)),)
+DTC_FLAGS += -Wnode_name_chars_strict \
+        -Wproperty_name_chars_strict
+endif
+
+MAKEFLAGS += -rR --no-print-directory
+
+ALL_ARCHES := $(patsubst src/%,%,$(wildcard src/*))
+
+PHONY += all
+all: $(foreach i,$(ALL_ARCHES),all_$(i))
+
+PHONY += clean
+clean: $(foreach i,$(ALL_ARCHES),clean_$(i))
+
+# Do not:
+# o  use make's built-in rules and variables
+#    (this increases performance and avoids hard-to-debug behaviour);
+# o  print "Entering directory ...";
+MAKEFLAGS += -rR --no-print-directory
+
+# To put more focus on warnings, be less verbose as default
+# Use 'make V=1' to see the full commands
+
+ifeq ("$(origin V)", "command line")
+  KBUILD_VERBOSE = $(V)
+endif
+ifndef KBUILD_VERBOSE
+  KBUILD_VERBOSE = 0
+endif
+
+# Beautify output
+# ---------------------------------------------------------------------------
+#
+# Normally, we echo the whole command before executing it. By making
+# that echo $($(quiet)$(cmd)), we now have the possibility to set
+# $(quiet) to choose other forms of output instead, e.g.
+#
+#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
+#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
+#
+# If $(quiet) is empty, the whole command will be printed.
+# If it is set to "quiet_", only the short version will be printed. 
+# If it is set to "silent_", nothing will be printed at all, since
+# the variable $(silent_cmd_cc_o_c) doesn't exist.
+#
+# A simple variant is to prefix commands with $(Q) - that's useful
+# for commands that shall be hidden in non-verbose mode.
+#
+#       $(Q)ln $@ :<
+#
+# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
+# If KBUILD_VERBOSE equals 1 then the above command is displayed.
+
+ifeq ($(KBUILD_VERBOSE),1)
+  quiet =
+  Q =
+else
+  quiet=quiet_
+  Q = @
+endif
+
+# If the user is running make -s (silent mode), suppress echoing of
+# commands
+
+ifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4
+ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
+  quiet=silent_
+endif
+else					# make-3.8x
+ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
+  quiet=silent_
+endif
+endif
+
+export quiet Q KBUILD_VERBOSE
+
+all_%:
+	$(Q)$(MAKE) ARCH=$* all_arch
+
+clean_%:
+	$(Q)$(MAKE) ARCH=$* clean_arch
+
+ifeq ($(ARCH),)
+
+ALL_DTS		:= $(shell find src/* -name \*.dts)
+
+ALL_DTB		:= $(patsubst %.dts,%.dtb,$(ALL_DTS))
+
+$(ALL_DTB): ARCH=$(word 2,$(subst /, ,$@))
+$(ALL_DTB): FORCE
+	$(Q)$(MAKE) ARCH=$(ARCH) $@
+
+else
+
+ARCH_DTS	:= $(shell find src/$(ARCH) -name \*.dts)
+
+ARCH_DTB	:= $(patsubst %.dts,%.dtb,$(ARCH_DTS))
+
+src	:= src/$(ARCH)
+obj	:= src/$(ARCH)
+
+include scripts/Kbuild.include
+
+cmd_files := $(wildcard $(foreach f,$(ARCH_DTB),$(dir $(f)).$(notdir $(f)).cmd))
+
+ifneq ($(cmd_files),)
+  include $(cmd_files)
+endif
+
+quiet_cmd_clean    = CLEAN   $(obj)
+      cmd_clean    = rm -f $(__clean-files)
+
+dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
+
+dtc_cpp_flags  = -Wp,-MD,$(depfile).pre.tmp -nostdinc		\
+                 -Iinclude -I$(src) -Isrc -Itestcase-data	\
+                 -undef -D__DTS__
+
+quiet_cmd_dtc = DTC     $@
+cmd_dtc = $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
+        $(DTC) -O dtb -o $@ -b 0 \
+                -i $(src) $(DTC_FLAGS) \
+                -d $(depfile).dtc.tmp $(dtc-tmp) ; \
+        cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
+
+$(obj)/%.dtb: $(src)/%.dts FORCE
+	$(call if_changed_dep,dtc)
+
+PHONY += all_arch
+all_arch: $(ARCH_DTB)
+	@:
+
+RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
+                   -o -name .pc -o -name .hg -o -name .git \) -prune -o
+
+PHONY += clean_arch
+clean_arch: __clean-files = $(ARCH_DTB)
+clean_arch: FORCE
+	$(call cmd,clean)
+	@find . $(RCS_FIND_IGNORE) \
+		\( -name '.*.cmd' \
+		-o -name '.*.d' \
+		-o -name '.*.tmp' \
+		\) -type f -print | xargs rm -f
+
+endif
+
+help:
+	@echo "Targets:"
+	@echo "  all:                   Build all device tree binaries for all architectures"
+	@echo "  clean:                 Clean all generated files"
+	@echo ""
+	@echo "  all_<ARCH>:            Build all device tree binaries for <ARCH>"
+	@echo "  clean_<ARCH>:          Clean all generated files for <ARCH>"
+	@echo ""
+	@echo "  src/<ARCH>/<DTS>.dtb   Build a single device tree binary"
+	@echo ""
+	@echo "Architectures: $(ALL_ARCHES)"
+
+PHONY += FORCE
+FORCE:
+
+.PHONY: $(PHONY)
diff --git a/README b/README
new file mode 100644
index 0000000..72724f5
--- /dev/null
+++ b/README
@@ -0,0 +1,4 @@
+This tree contains device tree definitions extracted from the Linux
+kernel source tree. It is synced regularly with mainline Linux.
+
+Type "make help" for a list of build targets.
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
new file mode 100644
index 0000000..978416d
--- /dev/null
+++ b/scripts/Kbuild.include
@@ -0,0 +1,278 @@
+####
+# kbuild: Generic definitions
+
+# Convenient variables
+comma   := ,
+squote  := '
+empty   :=
+space   := $(empty) $(empty)
+
+###
+# Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
+dot-target = $(dir $@).$(notdir $@)
+
+###
+# The temporary file to save gcc -MD generated dependencies must not
+# contain a comma
+depfile = $(subst $(comma),_,$(dot-target).d)
+
+###
+# filename of target with directory and extension stripped
+basetarget = $(basename $(notdir $@))
+
+###
+# filename of first prerequisite with directory and extension stripped
+baseprereq = $(basename $(notdir $<))
+
+###
+# Escape single quote for use in echo statements
+escsq = $(subst $(squote),'\$(squote)',$1)
+
+###
+# Easy method for doing a status message
+       kecho := :
+ quiet_kecho := echo
+silent_kecho := :
+kecho := $($(quiet)kecho)
+
+###
+# filechk is used to check if the content of a generated file is updated.
+# Sample usage:
+# define filechk_sample
+#	echo $KERNELRELEASE
+# endef
+# version.h : Makefile
+#	$(call filechk,sample)
+# The rule defined shall write to stdout the content of the new file.
+# The existing file will be compared with the new one.
+# - If no file exist it is created
+# - If the content differ the new file is used
+# - If they are equal no change, and no timestamp update
+# - stdin is piped in from the first prerequisite ($<) so one has
+#   to specify a valid file as first prerequisite (often the kbuild file)
+define filechk
+	$(Q)set -e;				\
+	$(kecho) '  CHK     $@';		\
+	mkdir -p $(dir $@);			\
+	$(filechk_$(1)) < $< > $@.tmp;		\
+	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
+		rm -f $@.tmp;			\
+	else					\
+		$(kecho) '  UPD     $@';	\
+		mv -f $@.tmp $@;		\
+	fi
+endef
+
+######
+# gcc support functions
+# See documentation in Documentation/kbuild/makefiles.txt
+
+# cc-cross-prefix
+# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-)
+# Return first prefix where a prefix$(CC) is found in PATH.
+# If no $(CC) found in PATH with listed prefixes return nothing
+cc-cross-prefix =  \
+	$(word 1, $(foreach c,$(1),                                   \
+		$(shell set -e;                                       \
+		if (which $(strip $(c))$(CC)) > /dev/null 2>&1 ; then \
+			echo $(c);                                    \
+		fi)))
+
+# output directory for tests below
+TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
+
+# try-run
+# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
+# Exit code chooses option. "$$TMP" is can be used as temporary file and
+# is automatically cleaned up.
+try-run = $(shell set -e;		\
+	TMP="$(TMPOUT).$$$$.tmp";	\
+	TMPO="$(TMPOUT).$$$$.o";	\
+	if ($(1)) >/dev/null 2>&1;	\
+	then echo "$(2)";		\
+	else echo "$(3)";		\
+	fi;				\
+	rm -f "$$TMP" "$$TMPO")
+
+# as-option
+# Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
+
+as-option = $(call try-run,\
+	$(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2))
+
+# as-instr
+# Usage: cflags-y += $(call as-instr,instr,option1,option2)
+
+as-instr = $(call try-run,\
+	printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
+
+# cc-option
+# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
+
+cc-option = $(call try-run,\
+	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
+
+# cc-option-yn
+# Usage: flag := $(call cc-option-yn,-march=winchip-c6)
+cc-option-yn = $(call try-run,\
+	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
+
+# cc-option-align
+# Prefix align with either -falign or -malign
+cc-option-align = $(subst -functions=0,,\
+	$(call cc-option,-falign-functions=0,-malign-functions=0))
+
+# cc-disable-warning
+# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
+cc-disable-warning = $(call try-run,\
+	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
+
+# cc-version
+# Usage gcc-ver := $(call cc-version)
+cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
+
+# cc-fullversion
+# Usage gcc-ver := $(call cc-fullversion)
+cc-fullversion = $(shell $(CONFIG_SHELL) \
+	$(srctree)/scripts/gcc-version.sh -p $(CC))
+
+# cc-ifversion
+# Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
+cc-ifversion = $(shell [ $(call cc-version, $(CC)) $(1) $(2) ] && echo $(3))
+
+# cc-ldoption
+# Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
+cc-ldoption = $(call try-run,\
+	$(CC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
+
+# ld-option
+# Usage: LDFLAGS += $(call ld-option, -X)
+ld-option = $(call try-run,\
+	$(CC) /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
+
+# ar-option
+# Usage: KBUILD_ARFLAGS := $(call ar-option,D)
+# Important: no spaces around options
+ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2))
+
+######
+
+###
+# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
+# Usage:
+# $(Q)$(MAKE) $(build)=dir
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
+
+###
+# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.modbuiltin obj=
+# Usage:
+# $(Q)$(MAKE) $(modbuiltin)=dir
+modbuiltin := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.modbuiltin obj
+
+# Prefix -I with $(srctree) if it is not an absolute path.
+# skip if -I has no parameter
+addtree = $(if $(patsubst -I%,%,$(1)), \
+$(if $(filter-out -I/%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1))) $(1))
+
+# Find all -I options and call addtree
+flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o)))
+
+# echo command.
+# Short version is used, if $(quiet) equals `quiet_', otherwise full one.
+echo-cmd = $(if $($(quiet)cmd_$(1)),\
+	echo '  $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';)
+
+# printing commands
+cmd = @$(echo-cmd) $(cmd_$(1))
+
+# Add $(obj)/ for paths that are not absolute
+objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o)))
+
+###
+# if_changed      - execute command if any prerequisite is newer than
+#                   target, or command line has changed
+# if_changed_dep  - as if_changed, but uses fixdep to reveal dependencies
+#                   including used config symbols
+# if_changed_rule - as if_changed but execute rule instead
+# See Documentation/kbuild/makefiles.txt for more info
+
+ifneq ($(KBUILD_NOCMDDEP),1)
+# Check if both arguments has same arguments. Result is empty string if equal.
+# User may override this check using make KBUILD_NOCMDDEP=1
+arg-check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \
+                    $(filter-out $(cmd_$@),   $(cmd_$(1))) )
+else
+arg-check = $(if $(strip $(cmd_$@)),,1)
+endif
+
+# >'< substitution is for echo to work,
+# >$< substitution to preserve $ when reloading .cmd file
+# note: when using inline perl scripts [perl -e '...$$t=1;...']
+# in $(cmd_xxx) double $$ your perl vars
+make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))))
+
+# Find any prerequisites that is newer than target or that does not exist.
+# PHONY targets skipped in both cases.
+any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
+
+# Execute command if command has changed or prerequisite(s) are updated.
+#
+if_changed = $(if $(strip $(any-prereq) $(arg-check)),                       \
+	@set -e;                                                             \
+	$(echo-cmd) $(cmd_$(1));                                             \
+	echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
+
+# Execute the command and also postprocess generated .d dependencies file.
+if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ),                  \
+	@set -e;                                                             \
+	$(echo-cmd) $(cmd_$(1));                                             \
+	scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
+	rm -f $(depfile);                                                    \
+	mv -f $(dot-target).tmp $(dot-target).cmd)
+
+# Usage: $(call if_changed_rule,foo)
+# Will check if $(cmd_foo) or any of the prerequisites changed,
+# and if so will execute $(rule_foo).
+if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ),                 \
+	@set -e;                                                             \
+	$(rule_$(1)))
+
+###
+# why - tell why a a target got build
+#       enabled by make V=2
+#       Output (listed in the order they are checked):
+#          (1) - due to target is PHONY
+#          (2) - due to target missing
+#          (3) - due to: file1.h file2.h
+#          (4) - due to command line change
+#          (5) - due to missing .cmd file
+#          (6) - due to target not in $(targets)
+# (1) PHONY targets are always build
+# (2) No target, so we better build it
+# (3) Prerequisite is newer than target
+# (4) The command line stored in the file named dir/.target.cmd
+#     differed from actual command line. This happens when compiler
+#     options changes
+# (5) No dir/.target.cmd file (used to store command line)
+# (6) No dir/.target.cmd file and target not listed in $(targets)
+#     This is a good hint that there is a bug in the kbuild file
+ifeq ($(KBUILD_VERBOSE),2)
+why =                                                                        \
+    $(if $(filter $@, $(PHONY)),- due to target is PHONY,                    \
+        $(if $(wildcard $@),                                                 \
+            $(if $(strip $(any-prereq)),- due to: $(any-prereq),             \
+                $(if $(arg-check),                                           \
+                    $(if $(cmd_$@),- due to command line change,             \
+                        $(if $(filter $@, $(targets)),                       \
+                            - due to missing .cmd file,                      \
+                            - due to $(notdir $@) not in $$(targets)         \
+                         )                                                   \
+                     )                                                       \
+                 )                                                           \
+             ),                                                              \
+             - due to target missing                                         \
+         )                                                                   \
+     )
+
+echo-why = $(call escsq, $(strip $(why)))
+endif
diff --git a/scripts/basic/fixdep b/scripts/basic/fixdep
new file mode 100755
index 0000000..cc412be
--- /dev/null
+++ b/scripts/basic/fixdep
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# Simplfied version of Linux scripts/basic/fixdep. We don't need
+# CONFIG tracking etc for this usecase.
+
+
+# Fixdep's interface is described:
+
+# It is invoked as
+#
+#   fixdep <depfile> <target> <cmdline>
+#
+# and will read the dependency file <depfile>
+#
+# The transformed dependency snipped is written to stdout.
+#
+# It first generates a line
+#
+#   cmd_<target> = <cmdline>
+#
+# and then basically copies the .<target>.d file to stdout, in the
+# process filtering out the dependency on autoconf.h and adding
+# dependencies on include/config/my/option.h for every
+# CONFIG_MY_OPTION encountered in any of the prequisites.
+
+echo cmd_$2 = $3
+cat $1
diff --git a/scripts/cronjob b/scripts/cronjob
new file mode 100755
index 0000000..f01166b
--- /dev/null
+++ b/scripts/cronjob
@@ -0,0 +1,124 @@
+#!/bin/bash
+
+set -e
+
+cd $(dirname $0)/..
+
+UPSTREAM_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git"
+
+BRANCHES="master filter-state upstream/master upstream/dts"
+
+if [ ! -f scripts/filter.sh ] ; then
+    echo "`pwd`: does not appear to be a device-tree.git" 1>&2
+    exit 1
+fi
+
+if [ -z "$LATEST_VERSION" ] ; then
+    FINGER_BANNER="https://www.kernel.org/finger_banner"
+    LATEST_VERSION=$(wget --quiet -O - "$FINGER_BANNER" |\
+        sed -n -e '0,/^The latest mainline version of the Linux kernel is:\s*\(.*\)$/s//\1/p')
+fi
+
+if [ -z "$LATEST_VERSION" ] ; then
+    echo "Unable to determine latest version" 1>&2
+    exit 1
+fi
+
+echo "Latest Version: v$LATEST_VERSION"
+if ! git show-ref --quiet --verify refs/tags/v${LATEST_VERSION} ; then
+    echo "Latest version is new"
+fi
+if ! git show-ref --quiet --verify refs/tags/v${LATEST_VERSION}-dts ; then
+    echo "Latest version is unmerged"
+fi
+echo
+
+echo "Current State:"
+for branch in $BRANCHES ; do
+    REF=$(git show-ref --verify refs/heads/${branch})
+    if [ $? -ne 0 ] ; then
+	echo "Tree is missing required branch ${branch}, aborting" 1>&2
+	exit 1
+    fi
+    echo "  ${REF}"
+done
+echo
+
+trap '
+if [ -n "$FILTER_OUTPUT" ] ; then
+    echo "---------------------------------------------------------------------"
+    echo "Filter Output:"
+    echo "---------------------------------------------------------------------"
+    echo "$FILTER_OUTPUT"
+    echo
+fi
+if [ -n "$MERGE_OUTPUT" ] ; then
+    echo "---------------------------------------------------------------------"
+    echo "Merge Output:"
+    echo "---------------------------------------------------------------------"
+    echo "$MERGE_OUTPUT"
+    echo
+fi
+' EXIT
+
+FILTER_OUTPUT=`(
+set -e
+echo "Switching to master branch"
+git checkout master
+
+echo "Fetching $UPSTREAM_GIT master"
+git fetch --tags "$UPSTREAM_GIT" master
+echo
+
+echo "Filtering"
+./scripts/filter.sh
+echo
+) 2>&1 `
+
+#git push --dry-run origin filter-state upstream/dts upstream/master
+#git push --dry-run origin --tags
+#echo
+
+DATE=$(date +%Y%m%d)
+TESTBRANCH=test-${DATE}
+MERGE_OUTPUT=`(
+set -e
+git checkout -b ${TESTBRANCH} origin/master
+git -c merge.renameLimit=1000000 merge --no-edit upstream/dts
+) 2>&1 `
+REF=$(git show-ref --verify refs/heads/${TESTBRANCH})
+echo "Testing: ${REF}"
+if git log ${TESTBRANCH} -- MAINTAINERS | grep --quiet . ; then
+    echo "Filter branch has upstream-only content (MAINTAINERS file)"
+    exit 1
+fi
+
+make clean -s
+TEST_OUTPUT=`make -k -s 2>&1 || true`
+if [ -z "${TEST_OUTPUT}" ]; then
+    echo "Success!"
+else
+    echo "---------------------------------------------------------------------"
+    echo "Test Output:"
+    echo "---------------------------------------------------------------------"
+    echo "$TEST_OUTPUT"
+fi
+echo
+
+echo "Switching back to master branch"
+git checkout master
+
+echo "Recording refs/tests/${DATE}"
+git update-ref refs/tests/${DATE} ${TESTBRANCH}
+
+echo "Removing ${TESTBRANCH}"
+git branch -D "${TESTBRANCH}"
+
+echo "Final State:"
+for branch in ${BRANCHES} ; do
+    REF=$(git show-ref --verify refs/heads/${branch})
+    echo "  ${REF}"
+done
+echo
+
+exit 0
diff --git a/scripts/filter.sh b/scripts/filter.sh
new file mode 100755
index 0000000..5e10ff4
--- /dev/null
+++ b/scripts/filter.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# git branch -D upstream/rewritten-prev upstream/master upstream/rewritten filter-state      
+
+set -e
+
+export SCRIPTS=$(dirname $(readlink -f $0))
+
+export FILTER_BRANCH_SQUELCH_WARNING=1
+
+UPSTREAM_MASTER=upstream/master
+UPSTREAM_REWRITTEN=upstream/dts
+
+LAST=$(git show-ref -s refs/heads/$UPSTREAM_MASTER||true)
+if [ -n "$LAST" ] ; then
+    RANGE="$LAST..$UPSTREAM_REWRITTEN"
+else
+    # This must be a new conversion...
+    RANGE="$UPSTREAM_REWRITTEN"
+fi
+
+FETCH_HEAD=$(git rev-parse FETCH_HEAD)
+if [ "$LAST" = "$FETCH_HEAD" ] ; then
+	echo "Nothing new in FETCH_HEAD: $FETCH_HEAD"
+	exit 0
+fi
+
+rm -f .git/refs/original/refs/heads/${UPSTREAM_REWRITTEN}
+
+git branch -f $UPSTREAM_REWRITTEN FETCH_HEAD
+
+git filter-branch --force \
+	--index-filter ${SCRIPTS}/index-filter.sh \
+	--msg-filter 'cat && /bin/echo -e "\n[ upstream commit: $GIT_COMMIT ]"' \
+	--tag-name-filter 'while read t ; do /bin/echo -n $t-dts-raw ; done' \
+	--parent-filter 'sed "s/-p //g" | xargs -r git show-branch --independent | sed "s/\</-p /g"' \
+	--prune-empty --state-branch refs/heads/filter-state \
+	-- $RANGE
+
+git branch -f $UPSTREAM_MASTER FETCH_HEAD
diff --git a/scripts/index-filter.sh b/scripts/index-filter.sh
new file mode 100755
index 0000000..9610855
--- /dev/null
+++ b/scripts/index-filter.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+set -e
+set -o pipefail
+
+${SCRIPTS}/rewrite-index.pl | GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info
+
+if [ -f "$GIT_INDEX_FILE.new" ] ; then
+    mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
+else
+    rm "$GIT_INDEX_FILE"
+fi
+
+exit 0
diff --git a/scripts/merge-new-release.sh b/scripts/merge-new-release.sh
new file mode 100755
index 0000000..a2763c6
--- /dev/null
+++ b/scripts/merge-new-release.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+case $1 in
+    v*-dts) ;;
+    '')
+	echo >&2 "No version given"
+	exit 1
+	;;
+    *)
+	echo >&2 "Unexpected version: $1"
+	exit 1
+	;;
+esac
+
+v=$1
+
+set -e
+
+# Use the date of Linus' originally tagged commit for the merge. This might
+# differ from what the commit that the rewritten tag points to, since the
+# orignal commit may have been discarded.
+export GIT_AUTHOR_DATE=$(git log -1 --format=%ad "${v%-dts}")
+if [ ! "${GIT_AUTHOR_DATE}" ] ; then
+    echo >&2 "Unable to determine commit date for merge"
+    exit 1
+fi
+if [ "${v}" = "v2.6.12-rc2-dts" ] ; then
+    auh="--allow-unrelated-histories"
+fi
+git merge $auh --no-edit "${v}-raw"
+git clean -fdqx
+# Use the date of Linus' original tag for the tag.
+case "${v%-dts}" in
+    v2.6.12*|v2.6.13-rc[123])
+        # Commits from v2.6.12-rc2..v2.6.13-rc3 lacked the date. So use the commit's
+        # date.
+        export GIT_COMMITTER_DATE="${GIT_AUTHOR_DATE}"
+        ;;
+    *)
+        export GIT_COMMITTER_DATE="$(git for-each-ref --format='%(taggerdate)' "refs/tags/${v%-dts}")"
+        ;;
+esac
+if [ ! "${GIT_COMMITTER_DATE}" ] ; then
+    echo >&2 "Unable to determine date for tag"
+    exit 1
+fi
+git tag -s -m "Tagging ${v}" -u 695A46C6 "${v}"
+make -k -j12 -s
diff --git a/scripts/rewrite-index.pl b/scripts/rewrite-index.pl
new file mode 100755
index 0000000..ef89839
--- /dev/null
+++ b/scripts/rewrite-index.pl
@@ -0,0 +1,72 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use IPC::Open2;
+my $pid;
+
+open(my $lsfiles, "-|", "git ls-files -s") or die "fork lsfiles: $!";
+
+while (<$lsfiles>) {
+    if ($_ =~ m/^120000 ([0-9a-f]{40}) (.*)\t(.*)/) {
+	my ($obj, $stage, $path) = ($1,$2,$3);
+	if (!defined $pid) {
+	    $pid = open2(*Rderef, *Wderef, "git cat-file --batch-check='deref-ok %(objectname)' --follow-symlinks")
+		or die "open git cat-file: $!";
+	}
+	print Wderef "$ENV{GIT_COMMIT}:$path\n" or die "write Wderef: $!";
+	my $deref = <Rderef>;
+	if ($deref =~ m/^deref-ok ([0-9a-f]{40})$/) {
+	    $_ = "100644 $1 $stage\t$path\n"
+	} elsif ($deref =~ /^dangling /) {
+	    # Skip next line
+	    my $dummy = <Rderef>;
+	} else {
+	    die "Failed to parse symlink $ENV{GIT_COMMIT}:$path $deref";
+	}
+    }
+
+    my $m = 0;
+
+    # Keep the copyright. Also ensures we never have a completely empty commit.
+    $m++ if m/\tCOPYING$/;
+
+    # A few architectures have dts files at non standard paths. Massage those into
+    # a standard arch/ARCH/boot/dts first.
+
+    # symlink: arch/microblaze/boot/dts/system.dts -> ../../platform/generic/system.dts
+    next if m,\tarch/microblaze/boot/dts/system.dts$,;
+    $m++ if s,\tarch/microblaze/platform/generic/(system.dts)$,\tarch/microblaze/boot/dts/$1,;
+
+    # arch/mips/lantiq/dts/easy50712.dts
+    # arch/mips/lantiq/dts/danube.dtsi
+    # arch/mips/netlogic/dts/xlp_evp.dts
+    # arch/mips/ralink/dts/rt3050.dtsi
+    # arch/mips/ralink/dts/rt3052_eval.dts
+    $m++ if s,\tarch/mips/([^/]*)/dts/(.*\.dts.?)$,\tarch/mips/boot/dts/$2,;
+
+    # arch/mips/cavium-octeon/octeon_68xx.dts
+    # arch/mips/cavium-octeon/octeon_3xxx.dts
+    # arch/mips/mti-sead3/sead3.dts
+    $m++ if s,\tarch/mips/([^/]*)/([^/]*\.dts.?)$,\tarch/mips/boot/dts/$2,;
+
+    # arch/x86/platform/ce4100/falconfalls.dts
+    $m++ if s,\tarch/x86/platform/ce4100/falconfalls.dts,\tarch/x86/boot/dts/falconfalls.dts,;
+
+    # test cases
+    $m++ if s,\tdrivers/of/testcase-data/,\ttestcase-data/,;
+
+    # Now rewrite generic DTS paths
+    $m++ if s,\tarch/([^/]*)/boot/dts/(.*\.dts.?)$,\tsrc/$1/$2,;
+    $m++ if s,\tarch/([^/]*)/boot/dts/(.*\.h)$,\tsrc/$1/$2,;
+
+    # Also rewrite the DTS include paths for dtc+cpp support
+    $m++ if s,\tarch/([^/]*)/include/dts/,\tsrc/$1/include/,;
+    $m++ if s,\tinclude/dt-bindings/,\tinclude/dt-bindings/,;
+
+    # Rewrite the bindings subdirectory
+    $m++ if s,\tDocumentation/devicetree/bindings/,\tBindings/,;
+
+    print if $m > 0;
+}
+kill $pid if $pid;
+exit 0;
