--- device-tree-compiler-1.4.0+dfsg.orig/debian/README.Debian +++ device-tree-compiler-1.4.0+dfsg/debian/README.Debian @@ -0,0 +1,8 @@ +device-tree-compiler for Debian +------------------------------- + +The original package is named dtc. However, there was already a +dtc package in the archive. Therefore, we decided to rename dtc to +device-tree-compiler. + + -- Aurélien GÉRÔME Sat, 3 Mar 2007 23:13:14 +0100 --- device-tree-compiler-1.4.0+dfsg.orig/debian/README.source +++ device-tree-compiler-1.4.0+dfsg/debian/README.source @@ -0,0 +1,2 @@ +The patch system used in this package is quilt based. +Refer to /usr/share/doc/quilt/README.source for further information. --- device-tree-compiler-1.4.0+dfsg.orig/debian/changelog +++ device-tree-compiler-1.4.0+dfsg/debian/changelog @@ -0,0 +1,108 @@ +device-tree-compiler (1.4.0+dfsg-1) unstable; urgency=low + + * REALLY update to upstream version 1.4.0, closes: #725745 + + -- Riku Voipio Fri, 03 Jan 2014 16:22:27 +0200 + +device-tree-compiler (1.4.0-2) unstable; urgency=low + + * Convert to multiarch + + -- Riku Voipio Fri, 23 Aug 2013 14:58:19 +0300 + +device-tree-compiler (1.4.0-1) unstable; urgency=low + + * Added myself to maintainers + * New upstream version, closes: #713991 + + -- Riku Voipio Mon, 12 Aug 2013 15:36:00 +0300 + +device-tree-compiler (1.3.0-4) unstable; urgency=low + + * Revert accidental source format change. + + -- Hector Oron Sat, 27 Apr 2013 09:59:06 +0000 + +device-tree-compiler (1.3.0-3) unstable; urgency=low + + * libfdt-dev: Missing header file prevents the library usage + Thanks Domenico Andreoli (Closes: #706137) + + -- Hector Oron Sat, 27 Apr 2013 07:47:09 +0000 + +device-tree-compiler (1.3.0-2) unstable; urgency=low + + * Add libfdt package (Closes: #477565) + - Thanks Dmitry Eremin-Solenikov and Aurelien Jarno for patch. + * Backport upstream fixes as patches until 2012-1-21. + * Reword package description to generalize architecture support. + - Removes OpenFirmware and PowerPC references. + * Update dtc manpage and include fdtget, fdtput, fdtdump, convert-dtsv0, + dtdiff manpages. + * d/rules: Add build-arch and build-indep targets. + * d/README.source: refer to quilt patching system. + * Remove Apps top-level section from doc-base. + + -- Hector Oron Sat, 28 Jan 2012 01:16:09 +0100 + +device-tree-compiler (1.3.0-1) unstable; urgency=low + + * New upstream release. (Closes: #572945) + * New maintainer. (Closes: #649290) + * New VCS repository. + * Update homepage stanza (Closes: #497605) + * Update standards version. + * Compile with -fPIC. Fixes ftbfs on amd64. + * Use dpkg 1.0 format. + * Backport upstream fixes as patches until 2011-10-26. + + -- Hector Oron Tue, 22 Nov 2011 12:23:38 +0000 + +device-tree-compiler (1.1.0.dfsg-1) unstable; urgency=low + + * New upstream release. + * Fix lintian warning "copyright-without-copyright-notice". + + Update debian/copyright. + + -- Aurélien GÉRÔME Sat, 16 Feb 2008 17:08:36 +0100 + +device-tree-compiler (1.0.0.dfsg-1) unstable; urgency=low + + * New upstream release. (Closes: #438479) + + Fix missing /chosen node, as it has been removed from DTS. + (Closes: #436234) + * Remove ftdump from the upstream tarball. + + This file has no license notice. + + Fix conflict with the freetype2-demos package. (Closes: #434890) + + David Gibson told me that he would not bother even installing + ftdump. It was meant to be a debugging tool, dumping a blob + back into text format, but it never got very far and he has + been meaning to get rid of it. + * Update tests/dumptrees.c in the upstream tarball with GIT commit + 08c0be206d5d6b035db11048d19be33216332f2b. + + Fix missing copyright and license notices. + * Update debian/copyright. + + Mention dual GPLv2+/BSD licensing of libfdt. + + Add Jon Loeliger as an upstream author. + * Bump Standards-Version to 3.7.3. + * Add the Homepage field and remove it from the long description. + * Add the Vcs-Git/Vcs-Browser fields. + * Add the XS-DM-Upload-Allowed field. + * Rewrite short and long descriptions in debian/control. + * Rewrite debian/rules to handle the noopt build option. + * Write and add a manpage for dtc. + * Add documentation under /usr/share/doc/device-tree-compiler/. + + Add Build-Depends on texlive and texlive-latex-extra. + + Add debian/doc-base.dtc-manual and debian/doc-base.dtc-paper. + + Create a Makefile to build dtc-paper.tex. + - Add quilt support to build system. + - Add 01_build_doc.diff. + + Update debian/rules to prepare documentation. + + -- Aurélien GÉRÔME Sat, 22 Dec 2007 04:02:24 +0100 + +device-tree-compiler (0.1~git20070226-1) experimental; urgency=low + + * Initial release. (Closes: #413290) + + -- Aurélien GÉRÔME Sat, 3 Mar 2007 23:13:14 +0100 --- device-tree-compiler-1.4.0+dfsg.orig/debian/compat +++ device-tree-compiler-1.4.0+dfsg/debian/compat @@ -0,0 +1 @@ +5 --- device-tree-compiler-1.4.0+dfsg.orig/debian/control +++ device-tree-compiler-1.4.0+dfsg/debian/control @@ -0,0 +1,40 @@ +Source: device-tree-compiler +Section: devel +Priority: extra +Maintainer: Hector Oron +Uploaders: Riku Voipio +Standards-Version: 3.9.5 +Build-Depends: debhelper (>= 5), quilt, flex, bison, texlive, texlive-latex-extra +Homepage: http://git.jdl.com/gitweb/?p=dtc.git +Vcs-Git: git://anonscm.debian.org/crosstoolchain/device-tree-compiler.git +Vcs-Browser: http://anonscm.debian.org/gitweb/?p=crosstoolchain/device-tree-compiler.git + +Package: device-tree-compiler +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Multi-Arch: foreign +Description: Device Tree Compiler for Flat Device Trees + Device Tree Compiler, dtc, takes as input a device-tree in + a given format and outputs a device-tree in another format + for booting kernels on embedded systems. + . + Typically, the input format is "dts", a human readable source + format, and creates a "dtb", or binary format as output. + +Package: libfdt1 +Architecture: any +Section: libs +Multi-Arch: same +Depends: ${shlibs:Depends}, ${misc:Depends} +Pre-Depends: multiarch-support +Description: Flat Device Trees manipulation library + This is a library containing functions for manipulating Flat Device Trees. + +Package: libfdt-dev +Architecture: any +Section: libdevel +Depends: libfdt1 (= ${binary:Version}), ${misc:Depends} +Description: Flat Device Trees manipulation library - development files + This is a library containing functions for manipulating Flat Device Trees. + . + This package contains the files needed for development against libfdt. --- device-tree-compiler-1.4.0+dfsg.orig/debian/copyright +++ device-tree-compiler-1.4.0+dfsg/debian/copyright @@ -0,0 +1,91 @@ +This package was debianized by Aurélien GÉRÔME on +Sat, 3 Mar 2007 23:13:14 +0100. + +It was checked out from . + +Upstream Authors: + + David Gibson + Jon Loeliger + +Copyright notices: + + Copyright 2005-2007 David Gibson, IBM Corporation. + Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. + +Licenses: + + dtc code: + +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + + libfdt code: + +/* + * libfdt - Flat Device Tree manipulation + * + * libfdt is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * + * a) This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + * + * Alternatively, + * + * b) Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * 1. Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +The Debian packaging is (C) 2007, Aurélien GÉRÔME and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. --- device-tree-compiler-1.4.0+dfsg.orig/debian/device-tree-compiler.install +++ device-tree-compiler-1.4.0+dfsg/debian/device-tree-compiler.install @@ -0,0 +1 @@ +usr/bin/* --- device-tree-compiler-1.4.0+dfsg.orig/debian/dirs +++ device-tree-compiler-1.4.0+dfsg/debian/dirs @@ -0,0 +1 @@ +usr/bin --- device-tree-compiler-1.4.0+dfsg.orig/debian/doc-base.dtc-manual +++ device-tree-compiler-1.4.0+dfsg/debian/doc-base.dtc-manual @@ -0,0 +1,10 @@ +Document: dtc-manual +Title: Device Tree Compiler Manual +Author: Jon Loeliger +Abstract: This manual is derived from the kernel documentation + /usr/share/doc/linux-doc-/Documentation/powerpc/booting-without-of.txt.gz + which is now out of date. +Section: Programming + +Format: Text +Files: /usr/share/doc/device-tree-compiler/dtc-manual.txt.gz --- device-tree-compiler-1.4.0+dfsg.orig/debian/doc-base.dtc-paper +++ device-tree-compiler-1.4.0+dfsg/debian/doc-base.dtc-paper @@ -0,0 +1,15 @@ +Document: dtc-paper +Title: Device trees everywhere +Author: David Gibson, Benjamin Herrenschmidt +Abstract: This paper presents a method for booting a PowerPC Linux + kernel on an embedded machine. +Section: Programming + +Format: PDF +Files: /usr/share/doc/device-tree-compiler/dtc-paper.pdf.gz + +Format: PostScript +Files: /usr/share/doc/device-tree-compiler/dtc-paper.ps.gz + +Format: DVI +Files: /usr/share/doc/device-tree-compiler/dtc-paper.dvi.gz --- device-tree-compiler-1.4.0+dfsg.orig/debian/libfdt-dev.install +++ device-tree-compiler-1.4.0+dfsg/debian/libfdt-dev.install @@ -0,0 +1,3 @@ +usr/include/* +usr/lib/*/libfdt.a +usr/lib/*/libfdt.so --- device-tree-compiler-1.4.0+dfsg.orig/debian/libfdt1.install +++ device-tree-compiler-1.4.0+dfsg/debian/libfdt1.install @@ -0,0 +1,2 @@ +usr/lib/*/libfdt-*.so +usr/lib/*/libfdt.so.* --- device-tree-compiler-1.4.0+dfsg.orig/debian/manpages/convert-dtsv0.1 +++ device-tree-compiler-1.4.0+dfsg/debian/manpages/convert-dtsv0.1 @@ -0,0 +1,22 @@ +.TH DTC 1 "30 January 2012" "Linux" +.SH NAME +\fBconvert-dtsv0\fP \- Device Tree Compiler -- Conversion to Version 1 +.SH SYNOPSIS +\fB/usr/bin/convert-dtsv0\fP [] +.SH DESCRIPTION +convert-dtsv0 is a small utility program which converts (DTS) + +Device Tree Source from the obsolete version 0 to version 1. +Version 1 DTS files are marked by line "/dts-v1/;" at the top of the file. + +Each file passed will be converted to the new /dts-v1/ version by creating +a new file with a "v1" appended the filename. + +Comments, empty lines, etc. are preserved. +.SH AUTHOR +\fBconvert-dtsv0\fP was written by David Gibson +. Since April 1, 2006, Jon Loeliger + assumes maintainership. +.PP +This manual page was written by H\['e]ctor Or\['o]n +, for the Debian project (but may be used by others). --- device-tree-compiler-1.4.0+dfsg.orig/debian/manpages/dtc.1 +++ device-tree-compiler-1.4.0+dfsg/debian/manpages/dtc.1 @@ -0,0 +1,103 @@ +.TH DTC 1 "30 January 2012" "Linux" +.SH NAME +\fBdtc\fP \- Device Tree Compiler +.SH SYNOPSIS +\fB/usr/bin/dtc\fP [options] +.SH DESCRIPTION +Device Tree Compiler, dtc, takes as input a device-tree in +a given format and outputs a device-tree in another format +for booting kernels on embedded systems. +Typically, the input format is "dts", a human readable source +format, and creates a "dtb", or binary format as output. +.SH OPTIONS +.TP +\fB\-h\fR +Display help text. +.TP +\fB\-q\fR +Quiet: +.IP +\fB-q\fR \- Suppress warnings. +.br +\fB-qq\fR \- Suppress errors. +.br +\fB-qqq\fR \- Suppress all. +.TP +\fB\-I\fR +.IP +Input formats are: +.IP +\fBdts\fR \- device tree source text +.br +\fBdtb\fR \- device tree blob +.br +\fBfs\fR \- /proc/device\-tree style directory +.TP +\fB\-o\fR +.IP +Dump the result into a file, instead of stdout. +.TP +\fB\-O\fR +.IP +Output formats are: +.IP +\fBdts\fR \- device tree source text +.br +\fBdtb\fR \- device tree blob +.br +\fBasm\fR \- assembler source +.TP +\fB\-V\fR +.IP +Blob version to produce. The default is 17 (only relevant for dtb +and asm output). +.TP +\fB\-d\fR +.TP +\fB\-R\fR +.IP +Make space for reserve map entries (only relevant for dtb +and asm output). +.TP +\fB\-S\fR +.IP +Make the blob at least long (extra space). +.TP +\fB\-p\fR +.IP +Add padding to the blob of long (extra space) +.HP +\fB\-b\fR +.IP +Set the physical boot CPU. +.TP +\fB\-f\fR +.IP +Force \- try to produce output even if the input tree has errors. +.TP +\fB\-s\fR +.IP +Sort nodes and properties before outputting (only useful for comparing trees) +.TP +\fB\-v\fR +Print DTC version and exit. +.TP +\fB\-H\fR +.IP +phandle formats are: +.IP +\fBlegacy\fR \- "linux,phandle" properties only +.br +\fBepapr\fR \- "phandle" properties only +.br +\fBboth\fR \- Both "linux,phandle" and "phandle" properties +.SH AUTHOR +\fBdtc\fP was written by David Gibson +. Since April 1, 2006, Jon Loeliger + assumes maintainership. +.PP +This manual page was originally written by Aur\['e]lien G\['E]R\[^O]ME +, for the Debian project (but may be used by others). +.PP +This manual page is currently maintained and update it by H\['e]ctor Or\['o]n +, for the Debian project. --- device-tree-compiler-1.4.0+dfsg.orig/debian/manpages/dtdiff.1 +++ device-tree-compiler-1.4.0+dfsg/debian/manpages/dtdiff.1 @@ -0,0 +1,14 @@ +.TH DTC 1 "30 January 2012" "Linux" +.SH NAME +\fBdtdiff\fP \- compare two different device-tree +.SH SYNOPSIS +\fB/usr/bin/dtdiff\fP +.SH DESCRIPTION +Compares two different device-tree. +.SH AUTHOR +\fBdtc\fP was written by David Gibson +. Since April 1, 2006, Jon Loeliger + assumes maintainership. +.PP +This manual page was written by H\['e]ctor Or\['o]n +, for the Debian project (but may be used by others). --- device-tree-compiler-1.4.0+dfsg.orig/debian/manpages/fdtdump.1 +++ device-tree-compiler-1.4.0+dfsg/debian/manpages/fdtdump.1 @@ -0,0 +1,13 @@ +.TH DTC 1 "30 January 2012" "Linux" +.SH NAME +\fBfdtdump\fP \- prints a readable version of a flat device-tree file. +.SH SYNOPSIS +\fB/usr/bin/fdtdump\fP +.SH DESCRIPTION +The fdtdump program prints a readable version of a flat device-tree file. +.SH AUTHOR +\fBfdtdump\fP was written by Pantelis Antoniou +. +.PP +This manual page was written by H\['e]ctor Or\['o]n +, for the Debian project (but may be used by others). --- device-tree-compiler-1.4.0+dfsg.orig/debian/manpages/fdtget.1 +++ device-tree-compiler-1.4.0+dfsg/debian/manpages/fdtget.1 @@ -0,0 +1,25 @@ +.TH DTC 1 "30 January 2012" "Linux" +.SH NAME +\fBfdtget\fP \- read values from device-tree +.SH SYNOPSIS +\fB/usr/bin/fdtget\fP
[ ]... +.SH DESCRIPTION +Read values from device-tree. Each value is printed on a new line. +.SH OPTIONS +.TP +\fB\-h\fR +Print this help. +.TP +\fB\-t\fR +Type of data +.IP + s=string, i=int, u=unsigned, x=hex +.br +Optional modifier prefix: +.br +hh or b=byte, h=2 byte, l=4 byte (default) +.SH AUTHOR +\fBfdtget\fP was written by The Chromium OS Authors. +.PP +This manual page was written by H\['e]ctor Or\['o]n +, for the Debian project (but may be used by others). --- device-tree-compiler-1.4.0+dfsg.orig/debian/manpages/fdtput.1 +++ device-tree-compiler-1.4.0+dfsg/debian/manpages/fdtput.1 @@ -0,0 +1,29 @@ +.TH DTC 1 "30 January 2012" "Linux" +.SH NAME +\fBfdtput\fP \- write a property value to a device-tree +.SH SYNOPSIS +\fB/usr/bin/fdtput\fP
< [...] +.SH DESCRIPTION +Write a property value to a device-tree. The command line arguments are +joined together into a single value. +.SH OPTIONS +.TP +\fB\-h\fR +Print this help. +.TP +\fB\-v\fR +Verbose: display each value decoded from command line +.TP +\fB\-t\fR +Type of data +.IP + s=string, i=int, u=unsigned, x=hex +.br +Optional modifier prefix: +.br +hh or b=byte, h=2 byte, l=4 byte (default) +.SH AUTHOR +\fBfdtput\fP was written by The Chromium OS Authors. +.PP +This manual page was written by H\['e]ctor Or\['o]n +, for the Debian project (but may be used by others). --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/01_build_doc.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/01_build_doc.patch @@ -0,0 +1,21 @@ +Index: device-tree-compiler-1.0.0/Documentation/Makefile +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ device-tree-compiler-1.0.0/Documentation/Makefile 2007-08-23 18:26:22.000000000 +0200 +@@ -0,0 +1,16 @@ ++all: dtc-paper.ps dtc-paper.pdf dtc-manual.txt ++ ++dtc-manual.txt: manual.txt ++ cp -f $< $@ ++ ++dtc-paper.dvi: dtc-paper.tex ++ latex $< ++ ++dtc-paper.ps: dtc-paper.dvi ++ dvips $< ++ ++dtc-paper.pdf: dtc-paper.tex ++ pdflatex $< ++ ++clean: ++ rm -f *.aux *.log *.dvi *.ps *.pdf dtc-manual.txt --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/02_remove-unused-check-variable.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/02_remove-unused-check-variable.patch @@ -0,0 +1,55 @@ +From: Josh Boyer +Date: Tue, 28 Jun 2011 12:47:09 +0000 (-0400) +Subject: dtc: Remove unused check variable +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=0a5aca98ba104ec4101322ccaf36da45064ad3ce + +dtc: Remove unused check variable + +Commit 376ab6f2 removed the old style check functionality from DTC, +however the check option and variable were not removed. This leads to +build failures when -Werror=unused-but-set-variable is specified: + + dtc.c: In function 'main': + dtc.c:102:17: error: variable 'check' set but not used [-Werror=unused-but-set-variable] + cc1: all warnings being treated as errors + make: *** [dtc.o] Error 1 + make: *** Waiting for unfinished jobs.... + +Remove the check variable. + +Signed-off-by: Josh Boyer +Acked-by: David Gibson +--- + +diff --git a/dtc.c b/dtc.c +index cbc0193..15d2fc2 100644 +--- a/dtc.c ++++ b/dtc.c +@@ -99,7 +99,7 @@ int main(int argc, char *argv[]) + const char *inform = "dts"; + const char *outform = "dts"; + const char *outname = "-"; +- int force = 0, check = 0, sort = 0; ++ int force = 0, sort = 0; + const char *arg; + int opt; + FILE *outf = NULL; +@@ -111,7 +111,7 @@ int main(int argc, char *argv[]) + minsize = 0; + padsize = 0; + +- while ((opt = getopt(argc, argv, "hI:O:o:V:R:S:p:fcqb:vH:s")) != EOF) { ++ while ((opt = getopt(argc, argv, "hI:O:o:V:R:S:p:fqb:vH:s")) != EOF) { + switch (opt) { + case 'I': + inform = optarg; +@@ -137,9 +137,6 @@ int main(int argc, char *argv[]) + case 'f': + force = 1; + break; +- case 'c': +- check = 1; +- break; + case 'q': + quiet++; + break; --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/03_Remove-unused-variable-in-flat_read_mem_reserve.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/03_Remove-unused-variable-in-flat_read_mem_reserve.patch @@ -0,0 +1,42 @@ +From: Josh Boyer +Date: Tue, 28 Jun 2011 13:47:11 +0000 (-0400) +Subject: dtc: Remove unused variable in flat_read_mem_reserve +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=d5b3165023b1cc3914e9943b91964ec9ad4be8b2 + +dtc: Remove unused variable in flat_read_mem_reserve + +The *p variable is declared and used to save inb->ptr, however p is +later never used. This has been the case since commit 6c0f3676 and can +lead to build failures with -Werror=unused-but-set-variable: + + flattree.c: In function 'flat_read_mem_reserve': + flattree.c:700:14: error: variable 'p' set but not used [-Werror=unused-but-set-variable] + cc1: all warnings being treated as errors + make: *** [flattree.o] Error 1 + +Remove the variable. + +Signed-off-by: Josh Boyer +Acked-by: David Gibson +--- + +diff --git a/flattree.c b/flattree.c +index ead0332..28d0b23 100644 +--- a/flattree.c ++++ b/flattree.c +@@ -697,7 +697,6 @@ static struct reserve_info *flat_read_mem_reserve(struct inbuf *inb) + { + struct reserve_info *reservelist = NULL; + struct reserve_info *new; +- const char *p; + struct fdt_reserve_entry re; + + /* +@@ -706,7 +705,6 @@ static struct reserve_info *flat_read_mem_reserve(struct inbuf *inb) + * + * First pass, count entries. + */ +- p = inb->ptr; + while (1) { + flat_read_chunk(inb, &re, sizeof(re)); + re.address = fdt64_to_cpu(re.address); --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/04_Split-out-is_printable_string-into-util.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/04_Split-out-is_printable_string-into-util.patch @@ -0,0 +1,157 @@ +From: Simon Glass +Date: Tue, 5 Jul 2011 19:02:49 +0000 (-0700) +Subject: Split out is_printable_string() into util.c +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=492f9d5de7db74aeb3a905246c4efd7cb29227a8 + +Split out is_printable_string() into util.c + +This useful function is split out so it will be available to programs +other than ftdump. + +Signed-off-by: Simon Glass +Acked-by: David Gibson +--- + +diff --git a/Makefile.ftdump b/Makefile.ftdump +index b70905a..2744a18 100644 +--- a/Makefile.ftdump ++++ b/Makefile.ftdump +@@ -5,7 +5,8 @@ + # + + FTDUMP_SRCS = \ +- ftdump.c ++ ftdump.c \ ++ util.c + + FTDUMP_GEN_SRCS = + +diff --git a/ftdump.c b/ftdump.c +index bce6535..db932e3 100644 +--- a/ftdump.c ++++ b/ftdump.c +@@ -11,36 +11,14 @@ + #include + #include + ++#include "util.h" ++ + #define FTDUMP_BUF_SIZE 65536 + + #define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1)) + #define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a)))) + #define GET_CELL(p) (p += 4, *((const uint32_t *)(p-4))) + +-static int is_printable_string(const void *data, int len) +-{ +- const char *s = data; +- const char *ss; +- +- /* zero length is not */ +- if (len == 0) +- return 0; +- +- /* must terminate with zero */ +- if (s[len - 1] != '\0') +- return 0; +- +- ss = s; +- while (*s && isprint(*s)) +- s++; +- +- /* not zero, or not done yet */ +- if (*s != '\0' || (s + 1 - ss) < len) +- return 0; +- +- return 1; +-} +- + static void print_data(const char *data, int len) + { + int i; +@@ -50,7 +28,7 @@ static void print_data(const char *data, int len) + if (len == 0) + return; + +- if (is_printable_string(data, len)) { ++ if (util_is_printable_string(data, len)) { + printf(" = \"%s\"", (const char *)data); + } else if ((len % 4) == 0) { + printf(" = <"); +diff --git a/util.c b/util.c +index d7ac27d..994436f 100644 +--- a/util.c ++++ b/util.c +@@ -1,6 +1,9 @@ + /* + * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. + * ++ * util_is_printable_string contributed by ++ * Pantelis Antoniou ++ * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the +@@ -17,6 +20,7 @@ + * USA + */ + ++#include + #include + #include + #include +@@ -57,3 +61,27 @@ char *join_path(const char *path, const char *name) + memcpy(str+lenp, name, lenn+1); + return str; + } ++ ++int util_is_printable_string(const void *data, int len) ++{ ++ const char *s = data; ++ const char *ss; ++ ++ /* zero length is not */ ++ if (len == 0) ++ return 0; ++ ++ /* must terminate with zero */ ++ if (s[len - 1] != '\0') ++ return 0; ++ ++ ss = s; ++ while (*s && isprint(*s)) ++ s++; ++ ++ /* not zero, or not done yet */ ++ if (*s != '\0' || (s + 1 - ss) < len) ++ return 0; ++ ++ return 1; ++} +diff --git a/util.h b/util.h +index 9cead84..cc68933 100644 +--- a/util.h ++++ b/util.h +@@ -1,6 +1,8 @@ + #ifndef _UTIL_H + #define _UTIL_H + ++#include ++ + /* + * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. + * +@@ -53,4 +55,13 @@ static inline void *xrealloc(void *p, size_t len) + extern char *xstrdup(const char *s); + extern char *join_path(const char *path, const char *name); + ++/** ++ * Check a string of a given length to see if it is all printable and ++ * has a valid terminator. ++ * ++ * @param data The string to check ++ * @param len The string length including terminator ++ * @return 1 if a valid printable string, 0 if not */ ++int util_is_printable_string(const void *data, int len); ++ + #endif /* _UTIL_H */ --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/05_Add-missing-tests-to-gitignore.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/05_Add-missing-tests-to-gitignore.patch @@ -0,0 +1,21 @@ +From: Simon Glass +Date: Tue, 5 Jul 2011 19:02:52 +0000 (-0700) +Subject: Add missing tests to .gitignore +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=ed8fee1a649b5430afc9b551e3bb6746ebe32449 + +Add missing tests to .gitignore + +Signed-off-by: Simon Glass +Acked-by: David Gibson +--- + +diff --git a/tests/.gitignore b/tests/.gitignore +index c4e1205..f4e58b2 100644 +--- a/tests/.gitignore ++++ b/tests/.gitignore +@@ -45,3 +45,5 @@ + /sw_tree1 + /truncated_property + /value-labels ++/dtb_reverse ++/dtbs_equal_unordered --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/06_Refactor-character-literal-parsing-code.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/06_Refactor-character-literal-parsing-code.patch @@ -0,0 +1,249 @@ +From: Anton Staaf +Date: Fri, 9 Sep 2011 19:16:29 +0000 (-0700) +Subject: dtc: Refactor character literal parsing code +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=b43335a23854b2620140eda6cca2ffae59e8de23 + +dtc: Refactor character literal parsing code + +Move the parsing of hex, octal and escaped characters from data.c +to util.c where it can be used for character literal parsing within +strings as well as for stand alone C style character literals. + +Signed-off-by: Anton Staaf +Acked-by: David Gibson +--- + +diff --git a/data.c b/data.c +index fe555e8..b5f3066 100644 +--- a/data.c ++++ b/data.c +@@ -68,40 +68,6 @@ struct data data_copy_mem(const char *mem, int len) + return d; + } + +-static char get_oct_char(const char *s, int *i) +-{ +- char x[4]; +- char *endx; +- long val; +- +- x[3] = '\0'; +- strncpy(x, s + *i, 3); +- +- val = strtol(x, &endx, 8); +- +- assert(endx > x); +- +- (*i) += endx - x; +- return val; +-} +- +-static char get_hex_char(const char *s, int *i) +-{ +- char x[3]; +- char *endx; +- long val; +- +- x[2] = '\0'; +- strncpy(x, s + *i, 2); +- +- val = strtol(x, &endx, 16); +- if (!(endx > x)) +- die("\\x used with no following hex digits\n"); +- +- (*i) += endx - x; +- return val; +-} +- + struct data data_copy_escape_string(const char *s, int len) + { + int i = 0; +@@ -114,53 +80,10 @@ struct data data_copy_escape_string(const char *s, int len) + while (i < len) { + char c = s[i++]; + +- if (c != '\\') { +- q[d.len++] = c; +- continue; +- } +- +- c = s[i++]; +- assert(c); +- switch (c) { +- case 'a': +- q[d.len++] = '\a'; +- break; +- case 'b': +- q[d.len++] = '\b'; +- break; +- case 't': +- q[d.len++] = '\t'; +- break; +- case 'n': +- q[d.len++] = '\n'; +- break; +- case 'v': +- q[d.len++] = '\v'; +- break; +- case 'f': +- q[d.len++] = '\f'; +- break; +- case 'r': +- q[d.len++] = '\r'; +- break; +- case '0': +- case '1': +- case '2': +- case '3': +- case '4': +- case '5': +- case '6': +- case '7': +- i--; /* need to re-read the first digit as +- * part of the octal value */ +- q[d.len++] = get_oct_char(s, &i); +- break; +- case 'x': +- q[d.len++] = get_hex_char(s, &i); +- break; +- default: +- q[d.len++] = c; +- } ++ if (c == '\\') ++ c = get_escape_char(s, &i); ++ ++ q[d.len++] = c; + } + + q[d.len++] = '\0'; +diff --git a/util.c b/util.c +index 994436f..6d07292 100644 +--- a/util.c ++++ b/util.c +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + #include "util.h" + +@@ -85,3 +86,101 @@ int util_is_printable_string(const void *data, int len) + + return 1; + } ++ ++/* ++ * Parse a octal encoded character starting at index i in string s. The ++ * resulting character will be returned and the index i will be updated to ++ * point at the character directly after the end of the encoding, this may be ++ * the '\0' terminator of the string. ++ */ ++static char get_oct_char(const char *s, int *i) ++{ ++ char x[4]; ++ char *endx; ++ long val; ++ ++ x[3] = '\0'; ++ strncpy(x, s + *i, 3); ++ ++ val = strtol(x, &endx, 8); ++ ++ assert(endx > x); ++ ++ (*i) += endx - x; ++ return val; ++} ++ ++/* ++ * Parse a hexadecimal encoded character starting at index i in string s. The ++ * resulting character will be returned and the index i will be updated to ++ * point at the character directly after the end of the encoding, this may be ++ * the '\0' terminator of the string. ++ */ ++static char get_hex_char(const char *s, int *i) ++{ ++ char x[3]; ++ char *endx; ++ long val; ++ ++ x[2] = '\0'; ++ strncpy(x, s + *i, 2); ++ ++ val = strtol(x, &endx, 16); ++ if (!(endx > x)) ++ die("\\x used with no following hex digits\n"); ++ ++ (*i) += endx - x; ++ return val; ++} ++ ++char get_escape_char(const char *s, int *i) ++{ ++ char c = s[*i]; ++ int j = *i + 1; ++ char val; ++ ++ assert(c); ++ switch (c) { ++ case 'a': ++ val = '\a'; ++ break; ++ case 'b': ++ val = '\b'; ++ break; ++ case 't': ++ val = '\t'; ++ break; ++ case 'n': ++ val = '\n'; ++ break; ++ case 'v': ++ val = '\v'; ++ break; ++ case 'f': ++ val = '\f'; ++ break; ++ case 'r': ++ val = '\r'; ++ break; ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ j--; /* need to re-read the first digit as ++ * part of the octal value */ ++ val = get_oct_char(s, &j); ++ break; ++ case 'x': ++ val = get_hex_char(s, &j); ++ break; ++ default: ++ val = c; ++ } ++ ++ (*i) = j; ++ return val; ++} +diff --git a/util.h b/util.h +index cc68933..f251480 100644 +--- a/util.h ++++ b/util.h +@@ -64,4 +64,12 @@ extern char *join_path(const char *path, const char *name); + * @return 1 if a valid printable string, 0 if not */ + int util_is_printable_string(const void *data, int len); + ++/* ++ * Parse an escaped character starting at index i in string s. The resulting ++ * character will be returned and the index i will be updated to point at the ++ * character directly after the end of the encoding, this may be the '\0' ++ * terminator of the string. ++ */ ++char get_escape_char(const char *s, int *i); ++ + #endif /* _UTIL_H */ --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/07_Remove-gcc-4.6-set-but-not-used-warnings.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/07_Remove-gcc-4.6-set-but-not-used-warnings.patch @@ -0,0 +1,101 @@ +From: David Gibson +Date: Mon, 12 Sep 2011 01:18:43 +0000 (+1000) +Subject: dtc: Remove gcc 4.6 "set but not used" warnings +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=83df28bd39979b32a75656cac291c36dbd4e5497 + +dtc: Remove gcc 4.6 "set but not used" warnings + +A number of the dtc testcases trigger the new "variable set but not +used" warning from gcc 4.6. That is they have variables which are +assigned, but then never read after that point. + +In a couple of cases this is just because the variables aren't needed, +so this patch removes them. In subnode_offset.c, it's because one +pair of variables we clearly intended to test we don't actually test. +This patch also adds this missing check. + +This patch makes the testsuite compile clean with gcc 4.6. + +Signed-off-by: David Gibson +--- + +diff --git a/tests/notfound.c b/tests/notfound.c +index 38918ad..4d55b88 100644 +--- a/tests/notfound.c ++++ b/tests/notfound.c +@@ -37,27 +37,25 @@ static void check_error(const char *s, int err) + + int main(int argc, char *argv[]) + { +- const struct fdt_property *prop; + void *fdt; + int offset; + int subnode1_offset; +- const void *val; + int lenerr; + + test_init(argc, argv); + fdt = load_blob_arg(argc, argv); + +- prop = fdt_get_property(fdt, 0, "nonexistant-property", &lenerr); ++ fdt_get_property(fdt, 0, "nonexistant-property", &lenerr); + check_error("fdt_get_property(\"nonexistant-property\")", lenerr); + +- val = fdt_getprop(fdt, 0, "nonexistant-property", &lenerr); ++ fdt_getprop(fdt, 0, "nonexistant-property", &lenerr); + check_error("fdt_getprop(\"nonexistant-property\"", lenerr); + + subnode1_offset = fdt_subnode_offset(fdt, 0, "subnode@1"); + if (subnode1_offset < 0) + FAIL("Couldn't find subnode1: %s", fdt_strerror(subnode1_offset)); + +- val = fdt_getprop(fdt, subnode1_offset, "prop-str", &lenerr); ++ fdt_getprop(fdt, subnode1_offset, "prop-str", &lenerr); + check_error("fdt_getprop(\"prop-str\")", lenerr); + + offset = fdt_subnode_offset(fdt, 0, "nonexistant-subnode"); +diff --git a/tests/path_offset.c b/tests/path_offset.c +index bb092f1..d3e1f8e 100644 +--- a/tests/path_offset.c ++++ b/tests/path_offset.c +@@ -104,5 +104,9 @@ int main(int argc, char *argv[]) + FAIL("Mismatch between subnode_offset (%d) and path_offset (%d)", + subsubnode2_offset, subsubnode2_offset_p); + ++ if (subsubnode2_offset2 != subsubnode2_offset2_p) ++ FAIL("Mismatch between subnode_offset (%d) and path_offset (%d)", ++ subsubnode2_offset2, subsubnode2_offset2_p); ++ + PASS(); + } +diff --git a/tests/subnode_offset.c b/tests/subnode_offset.c +index b961070..e58c192 100644 +--- a/tests/subnode_offset.c ++++ b/tests/subnode_offset.c +@@ -60,7 +60,7 @@ int main(int argc, char *argv[]) + void *fdt; + int subnode1_offset, subnode2_offset; + int subsubnode1_offset, subsubnode2_offset, subsubnode2_offset2; +- int ss11_off, ss12_off, ss21_off, ss22_off; ++ int ss12_off, ss21_off; + + test_init(argc, argv); + fdt = load_blob_arg(argc, argv); +@@ -85,7 +85,7 @@ int main(int argc, char *argv[]) + if (subsubnode2_offset != subsubnode2_offset2) + FAIL("Different offsets with and without unit address"); + +- ss11_off = check_subnode(fdt, subnode1_offset, "ss1"); ++ check_subnode(fdt, subnode1_offset, "ss1"); + ss21_off = fdt_subnode_offset(fdt, subnode2_offset, "ss1"); + if (ss21_off != -FDT_ERR_NOTFOUND) + FAIL("Incorrectly found ss1 in subnode2"); +@@ -93,7 +93,7 @@ int main(int argc, char *argv[]) + ss12_off = fdt_subnode_offset(fdt, subnode1_offset, "ss2"); + if (ss12_off != -FDT_ERR_NOTFOUND) + FAIL("Incorrectly found ss2 in subnode1"); +- ss22_off = check_subnode(fdt, subnode2_offset, "ss2"); ++ check_subnode(fdt, subnode2_offset, "ss2"); + + PASS(); + } --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/08_Support-character-literals-in-cell-lists.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/08_Support-character-literals-in-cell-lists.patch @@ -0,0 +1,241 @@ +From: Anton Staaf +Date: Fri, 9 Sep 2011 19:16:30 +0000 (-0700) +Subject: dtc: Support character literals in cell lists +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=a4ea2fa9518ff0f4d7f4a08647599a727faac2e0 + +dtc: Support character literals in cell lists + +With this patch the following property assignment: + + property = <0x12345678 'a' '\r' 100>; + +is equivalent to: + + property = <0x12345678 0x00000061 0x0000000D 0x00000064> + +Signed-off-by: Anton Staaf +Acked-by: David Gibson +--- + +diff --git a/Documentation/dts-format.txt b/Documentation/dts-format.txt +index a655b87..eae8b76 100644 +--- a/Documentation/dts-format.txt ++++ b/Documentation/dts-format.txt +@@ -33,7 +33,7 @@ Property values may be defined as an array of 32-bit integer cells, as + NUL-terminated strings, as bytestrings or a combination of these. + + * Arrays of cells are represented by angle brackets surrounding a +- space separated list of C-style integers ++ space separated list of C-style integers or character literals. + + e.g. interrupts = <17 0xc>; + +diff --git a/dtc-lexer.l b/dtc-lexer.l +index e866ea5..494e342 100644 +--- a/dtc-lexer.l ++++ b/dtc-lexer.l +@@ -29,6 +29,7 @@ PROPNODECHAR [a-zA-Z0-9,._+*#?@-] + PATHCHAR ({PROPNODECHAR}|[/]) + LABEL [a-zA-Z_][a-zA-Z0-9_]* + STRING \"([^\\"]|\\.)*\" ++CHAR_LITERAL '([^']|\\')*' + WS [[:space:]] + COMMENT "/*"([^*]|\*+[^*/])*\*+"/" + LINECOMMENT "//".*\n +@@ -109,6 +110,13 @@ static int pop_input_file(void); + return DT_LITERAL; + } + ++<*>{CHAR_LITERAL} { ++ yytext[yyleng-1] = '\0'; ++ yylval.literal = xstrdup(yytext+1); ++ DPRINT("Character literal: %s\n", yylval.literal); ++ return DT_CHAR_LITERAL; ++ } ++ + <*>\&{LABEL} { /* label reference */ + DPRINT("Ref: %s\n", yytext+1); + yylval.labelref = xstrdup(yytext+1); +diff --git a/dtc-parser.y b/dtc-parser.y +index 5e84a67..554f11a 100644 +--- a/dtc-parser.y ++++ b/dtc-parser.y +@@ -34,6 +34,7 @@ extern struct boot_info *the_boot_info; + extern int treesource_error; + + static unsigned long long eval_literal(const char *s, int base, int bits); ++static unsigned char eval_char_literal(const char *s); + %} + + %union { +@@ -57,6 +58,7 @@ static unsigned long long eval_literal(const char *s, int base, int bits); + %token DT_MEMRESERVE + %token DT_PROPNODENAME + %token DT_LITERAL ++%token DT_CHAR_LITERAL + %token DT_BASE + %token DT_BYTE + %token DT_STRING +@@ -265,6 +267,10 @@ cellval: + { + $$ = eval_literal($1, 0, 32); + } ++ | DT_CHAR_LITERAL ++ { ++ $$ = eval_char_literal($1); ++ } + ; + + bytestring: +@@ -343,3 +349,29 @@ static unsigned long long eval_literal(const char *s, int base, int bits) + print_error("bad literal"); + return val; + } ++ ++static unsigned char eval_char_literal(const char *s) ++{ ++ int i = 1; ++ char c = s[0]; ++ ++ if (c == '\0') ++ { ++ print_error("empty character literal"); ++ return 0; ++ } ++ ++ /* ++ * If the first character in the character literal is a \ then process ++ * the remaining characters as an escape encoding. If the first ++ * character is neither an escape or a terminator it should be the only ++ * character in the literal and will be returned. ++ */ ++ if (c == '\\') ++ c = get_escape_char(s, &i); ++ ++ if (s[i] != '\0') ++ print_error("malformed character literal"); ++ ++ return c; ++} +diff --git a/tests/.gitignore b/tests/.gitignore +index f4e58b2..a3e9bd1 100644 +--- a/tests/.gitignore ++++ b/tests/.gitignore +@@ -4,6 +4,7 @@ + /add_subnode_with_nops + /asm_tree_dump + /boot-cpuid ++/char_literal + /del_node + /del_property + /dtbs_equal_ordered +diff --git a/tests/Makefile.tests b/tests/Makefile.tests +index c564e72..e718b63 100644 +--- a/tests/Makefile.tests ++++ b/tests/Makefile.tests +@@ -5,6 +5,7 @@ LIB_TESTS_L = get_mem_rsv \ + node_offset_by_prop_value node_offset_by_phandle \ + node_check_compatible node_offset_by_compatible \ + get_alias \ ++ char_literal \ + notfound \ + setprop_inplace nop_property nop_node \ + sw_tree1 \ +diff --git a/tests/char_literal.c b/tests/char_literal.c +new file mode 100644 +index 0000000..150f2a0 +--- /dev/null ++++ b/tests/char_literal.c +@@ -0,0 +1,50 @@ ++/* ++ * libfdt - Flat Device Tree manipulation ++ * Testcase for character literals in dtc ++ * Copyright (C) 2006 David Gibson, IBM Corporation. ++ * Copyright (C) 2011 The Chromium Authors. All rights reserved. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public License ++ * as published by the Free Software Foundation; either version 2.1 of ++ * the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "tests.h" ++#include "testdata.h" ++ ++int main(int argc, char *argv[]) ++{ ++ void *fdt; ++ uint32_t expected_cells[5]; ++ ++ expected_cells[0] = cpu_to_fdt32((unsigned char)TEST_CHAR1); ++ expected_cells[1] = cpu_to_fdt32((unsigned char)TEST_CHAR2); ++ expected_cells[2] = cpu_to_fdt32((unsigned char)TEST_CHAR3); ++ expected_cells[3] = cpu_to_fdt32((unsigned char)TEST_CHAR4); ++ expected_cells[4] = cpu_to_fdt32((unsigned char)TEST_CHAR5); ++ ++ test_init(argc, argv); ++ fdt = load_blob_arg(argc, argv); ++ ++ check_getprop(fdt, 0, "char-literal-cells", ++ sizeof(expected_cells), expected_cells); ++ ++ PASS(); ++} +diff --git a/tests/char_literal.dts b/tests/char_literal.dts +new file mode 100644 +index 0000000..22e17ed +--- /dev/null ++++ b/tests/char_literal.dts +@@ -0,0 +1,5 @@ ++/dts-v1/; ++ ++/ { ++ char-literal-cells = <'\r' 'b' '\0' '\'' '\xff'>; ++}; +diff --git a/tests/run_tests.sh b/tests/run_tests.sh +index 72dda32..1246df1 100755 +--- a/tests/run_tests.sh ++++ b/tests/run_tests.sh +@@ -206,6 +206,9 @@ dtc_tests () { + run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb escapes.dts + run_test string_escapes dtc_escapes.test.dtb + ++ run_dtc_test -I dts -O dtb -o dtc_char_literal.test.dtb char_literal.dts ++ run_test char_literal dtc_char_literal.test.dtb ++ + run_dtc_test -I dts -O dtb -o dtc_extra-terminating-null.test.dtb extra-terminating-null.dts + run_test extra-terminating-null dtc_extra-terminating-null.test.dtb + +diff --git a/tests/testdata.h b/tests/testdata.h +index 5b5a9a3..d4c6759 100644 +--- a/tests/testdata.h ++++ b/tests/testdata.h +@@ -19,6 +19,12 @@ + #define TEST_STRING_2 "nastystring: \a\b\t\n\v\f\r\\\"" + #define TEST_STRING_3 "\xde\xad\xbe\xef" + ++#define TEST_CHAR1 '\r' ++#define TEST_CHAR2 'b' ++#define TEST_CHAR3 '\0' ++#define TEST_CHAR4 '\'' ++#define TEST_CHAR5 '\xff' ++ + #ifndef __ASSEMBLY__ + extern struct fdt_header _test_tree1; + extern struct fdt_header _truncated_property; --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/09_Create-Makefile_utils-and-move-ftdump-into-it.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/09_Create-Makefile_utils-and-move-ftdump-into-it.patch @@ -0,0 +1,62 @@ +From: Simon Glass +Date: Wed, 21 Sep 2011 20:32:44 +0000 (-0700) +Subject: Create Makefile.utils and move ftdump into it +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=9ebd9b4a56e54656431111e5ea7cd74e651910bf + +Create Makefile.utils and move ftdump into it + +We want to avoid a separate Makefile include for each utility, so this sets +up a general one for utilities. + +Acked-by: David Gibson +Signed-off-by: Simon Glass +--- + +diff --git a/Makefile b/Makefile +index 2172d9a..380a705 100644 +--- a/Makefile ++++ b/Makefile +@@ -105,7 +105,7 @@ endef + + include Makefile.convert-dtsv0 + include Makefile.dtc +-include Makefile.ftdump ++include Makefile.utils + + BIN += convert-dtsv0 + BIN += dtc +diff --git a/Makefile.ftdump b/Makefile.ftdump +deleted file mode 100644 +index 2744a18..0000000 +--- a/Makefile.ftdump ++++ /dev/null +@@ -1,13 +0,0 @@ +-# +-# This is not a complete Makefile of itself. +-# Instead, it is designed to be easily embeddable +-# into other systems of Makefiles. +-# +- +-FTDUMP_SRCS = \ +- ftdump.c \ +- util.c +- +-FTDUMP_GEN_SRCS = +- +-FTDUMP_OBJS = $(FTDUMP_SRCS:%.c=%.o) $(FTDUMP_GEN_SRCS:%.c=%.o) +diff --git a/Makefile.utils b/Makefile.utils +new file mode 100644 +index 0000000..0ed9297 +--- /dev/null ++++ b/Makefile.utils +@@ -0,0 +1,10 @@ ++# ++# This is not a complete Makefile of itself. Instead, it is designed to ++# be easily embeddable into other systems of Makefiles. ++# ++ ++FTDUMP_SRCS = \ ++ ftdump.c \ ++ util.c ++ ++FTDUMP_OBJS = $(FTDUMP_SRCS:%.c=%.o) --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/10_Add-fdt-read_write-utility-functions.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/10_Add-fdt-read_write-utility-functions.patch @@ -0,0 +1,502 @@ +From: Simon Glass +Date: Thu, 22 Sep 2011 17:11:02 +0000 (-0700) +Subject: Add fdt read/write utility functions +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=36204fdf742cabc074617648a5b2cf62409dc40b + +Add fdt read/write utility functions + +This adds higher-level libfdt operations for reading/writing an fdt +blob from/to a file, as well as a function to decode a data type string +as will be used by fdtget, fdtput. + +This also adds a few tests for the simple type argument supported by +utilfdt_decode_type. + +Signed-off-by: Simon Glass +Acked-by: David Gibson +--- + +diff --git a/Makefile b/Makefile +index 380a705..b32409b 100644 +--- a/Makefile ++++ b/Makefile +@@ -15,7 +15,7 @@ EXTRAVERSION = + LOCAL_VERSION = + CONFIG_LOCALVERSION = + +-CPPFLAGS = -I libfdt ++CPPFLAGS = -I libfdt -I . + WARNINGS = -Werror -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \ + -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls + CFLAGS = -g -Os -fPIC -Werror $(WARNINGS) +diff --git a/tests/Makefile.tests b/tests/Makefile.tests +index e718b63..41695df 100644 +--- a/tests/Makefile.tests ++++ b/tests/Makefile.tests +@@ -16,7 +16,8 @@ LIB_TESTS_L = get_mem_rsv \ + extra-terminating-null \ + dtbs_equal_ordered \ + dtb_reverse dtbs_equal_unordered \ +- add_subnode_with_nops path_offset_aliases ++ add_subnode_with_nops path_offset_aliases \ ++ utilfdt_test + LIB_TESTS = $(LIB_TESTS_L:%=$(TESTS_PREFIX)%) + + LIBTREE_TESTS_L = truncated_property +@@ -42,7 +43,7 @@ TESTS_CLEANFILES = $(TESTS) $(TESTS_CLEANFILES_L:%=$(TESTS_PREFIX)%) + .PHONY: tests + tests: $(TESTS) $(TESTS_TREES) + +-$(LIB_TESTS): %: $(TESTS_PREFIX)testutils.o $(LIBFDT_archive) ++$(LIB_TESTS): %: $(TESTS_PREFIX)testutils.o util.o $(LIBFDT_archive) + + $(DL_LIB_TESTS): %: %.o $(TESTS_PREFIX)testutils.o $(LIBFDT_archive) + @$(VECHO) LD [libdl] $@ +diff --git a/tests/run_tests.sh b/tests/run_tests.sh +index 1246df1..e2c3046 100755 +--- a/tests/run_tests.sh ++++ b/tests/run_tests.sh +@@ -391,6 +391,10 @@ dtbs_equal_tests () { + cmp_tests test_tree1.dtb $WRONG_TREE1 + } + ++utilfdt_tests () { ++ run_test utilfdt_test ++} ++ + while getopts "vt:m" ARG ; do + case $ARG in + "v") +@@ -406,7 +410,7 @@ while getopts "vt:m" ARG ; do + done + + if [ -z "$TESTSETS" ]; then +- TESTSETS="libfdt dtc dtbs_equal" ++ TESTSETS="libfdt utilfdt dtc dtbs_equal" + fi + + # Make sure we don't have stale blobs lying around +@@ -417,6 +421,9 @@ for set in $TESTSETS; do + "libfdt") + libfdt_tests + ;; ++ "utilfdt") ++ utilfdt_tests ++ ;; + "dtc") + dtc_tests + ;; +diff --git a/tests/tests.h b/tests/tests.h +index fcb2b2a..a51556d 100644 +--- a/tests/tests.h ++++ b/tests/tests.h +@@ -93,22 +93,6 @@ void cleanup(void); + exit(RC_BUG); \ + } while (0) + +-static inline void *xmalloc(size_t size) +-{ +- void *p = malloc(size); +- if (! p) +- FAIL("malloc() failure"); +- return p; +-} +- +-static inline void *xrealloc(void *p, size_t size) +-{ +- p = realloc(p, size); +- if (! p) +- FAIL("realloc() failure"); +- return p; +-} +- + void check_mem_rsv(void *fdt, int n, uint64_t addr, uint64_t size); + + void check_property(void *fdt, int nodeoffset, const char *name, +@@ -135,4 +119,6 @@ void *load_blob_arg(int argc, char *argv[]); + void save_blob(const char *filename, void *blob); + void *open_blob_rw(void *blob); + ++#include "util.h" ++ + #endif /* _TESTS_H */ +diff --git a/tests/utilfdt_test.c b/tests/utilfdt_test.c +new file mode 100644 +index 0000000..36b4aa5 +--- /dev/null ++++ b/tests/utilfdt_test.c +@@ -0,0 +1,128 @@ ++/* ++ * Copyright 2011 The Chromium Authors, All Rights Reserved. ++ * ++ * utilfdt_test - Tests for utilfdt library ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public License ++ * as published by the Free Software Foundation; either version 2.1 of ++ * the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "tests.h" ++#include "testdata.h" ++ ++static void check(const char *fmt, int expect_type, int expect_size) ++{ ++ int type; ++ int size; ++ ++ if (utilfdt_decode_type(fmt, &type, &size)) ++ FAIL("format '%s': valid format string returned failure", fmt); ++ if (expect_type != type) ++ FAIL("format '%s': expected type='%c', got type='%c'", fmt, ++ expect_type, type); ++ if (expect_size != size) ++ FAIL("format '%s': expected size=%d, got size=%d", fmt, ++ expect_size, size); ++} ++ ++static void checkfail(const char *fmt) ++{ ++ int type; ++ int size; ++ ++ if (!utilfdt_decode_type(fmt, &type, &size)) ++ FAIL("format '%s': invalid format string returned success", ++ fmt); ++} ++ ++/** ++ * Add the given modifier to each of the valid sizes, and check that we get ++ * correct values. ++ * ++ * \param modifier Modifer string to use as a prefix ++ * \param expected_size The size (in bytes) that we expect (ignored for ++ * strings) ++ */ ++static void check_sizes(char *modifier, int expected_size) ++{ ++ char fmt[10], *ptr; ++ ++ /* set up a string with a hole in it for the format character */ ++ if (strlen(modifier) + 2 >= sizeof(fmt)) ++ FAIL("modifier string '%s' too long", modifier); ++ strcpy(fmt, modifier); ++ ptr = fmt + strlen(fmt); ++ ptr[1] = '\0'; ++ ++ /* now try each format character in turn */ ++ *ptr = 'i'; ++ check(fmt, 'i', expected_size); ++ ++ *ptr = 'u'; ++ check(fmt, 'u', expected_size); ++ ++ *ptr = 'x'; ++ check(fmt, 'x', expected_size); ++ ++ *ptr = 's'; ++ check(fmt, 's', -1); ++} ++ ++static void test_utilfdt_decode_type(void) ++{ ++ char fmt[10]; ++ int ch; ++ ++ /* check all the valid modifiers and sizes */ ++ check_sizes("", -1); ++ check_sizes("b", 1); ++ check_sizes("hh", 1); ++ check_sizes("h", 2); ++ check_sizes("l", 4); ++ ++ /* try every other character */ ++ checkfail(""); ++ for (ch = ' '; ch < 127; ch++) { ++ if (!strchr("iuxs", ch)) { ++ *fmt = ch; ++ fmt[1] = '\0'; ++ checkfail(fmt); ++ } ++ } ++ ++ /* try a few modifiers at the end */ ++ checkfail("sx"); ++ checkfail("ihh"); ++ checkfail("xb"); ++ ++ /* and one for the doomsday archives */ ++ checkfail("He has all the virtues I dislike and none of the vices " ++ "I admire."); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ test_utilfdt_decode_type(); ++ PASS(); ++} +diff --git a/util.c b/util.c +index 6d07292..d82d41f 100644 +--- a/util.c ++++ b/util.c +@@ -1,4 +1,5 @@ + /* ++ * Copyright 2011 The Chromium Authors, All Rights Reserved. + * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. + * + * util_is_printable_string contributed by +@@ -27,6 +28,11 @@ + #include + #include + ++#include ++#include ++#include ++ ++#include "libfdt.h" + #include "util.h" + + char *xstrdup(const char *s) +@@ -184,3 +190,139 @@ char get_escape_char(const char *s, int *i) + (*i) = j; + return val; + } ++ ++int utilfdt_read_err(const char *filename, char **buffp) ++{ ++ int fd = 0; /* assume stdin */ ++ char *buf = NULL; ++ off_t bufsize = 1024, offset = 0; ++ int ret = 0; ++ ++ *buffp = NULL; ++ if (strcmp(filename, "-") != 0) { ++ fd = open(filename, O_RDONLY); ++ if (fd < 0) ++ return errno; ++ } ++ ++ /* Loop until we have read everything */ ++ buf = malloc(bufsize); ++ do { ++ /* Expand the buffer to hold the next chunk */ ++ if (offset == bufsize) { ++ bufsize *= 2; ++ buf = realloc(buf, bufsize); ++ if (!buf) { ++ ret = ENOMEM; ++ break; ++ } ++ } ++ ++ ret = read(fd, &buf[offset], bufsize - offset); ++ if (ret < 0) { ++ ret = errno; ++ break; ++ } ++ offset += ret; ++ } while (ret != 0); ++ ++ /* Clean up, including closing stdin; return errno on error */ ++ close(fd); ++ if (ret) ++ free(buf); ++ else ++ *buffp = buf; ++ return ret; ++} ++ ++char *utilfdt_read(const char *filename) ++{ ++ char *buff; ++ int ret = utilfdt_read_err(filename, &buff); ++ ++ if (ret) { ++ fprintf(stderr, "Couldn't open blob from '%s': %s\n", filename, ++ strerror(ret)); ++ return NULL; ++ } ++ /* Successful read */ ++ return buff; ++} ++ ++int utilfdt_write_err(const char *filename, const void *blob) ++{ ++ int fd = 1; /* assume stdout */ ++ int totalsize; ++ int offset; ++ int ret = 0; ++ const char *ptr = blob; ++ ++ if (strcmp(filename, "-") != 0) { ++ fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666); ++ if (fd < 0) ++ return errno; ++ } ++ ++ totalsize = fdt_totalsize(blob); ++ offset = 0; ++ ++ while (offset < totalsize) { ++ ret = write(fd, ptr + offset, totalsize - offset); ++ if (ret < 0) { ++ ret = -errno; ++ break; ++ } ++ offset += ret; ++ } ++ /* Close the file/stdin; return errno on error */ ++ if (fd != 1) ++ close(fd); ++ return ret < 0 ? -ret : 0; ++} ++ ++ ++int utilfdt_write(const char *filename, const void *blob) ++{ ++ int ret = utilfdt_write_err(filename, blob); ++ ++ if (ret) { ++ fprintf(stderr, "Couldn't write blob to '%s': %s\n", filename, ++ strerror(ret)); ++ } ++ return ret ? -1 : 0; ++} ++ ++int utilfdt_decode_type(const char *fmt, int *type, int *size) ++{ ++ int qualifier = 0; ++ ++ /* get the conversion qualifier */ ++ *size = -1; ++ if (strchr("hlLb", *fmt)) { ++ qualifier = *fmt++; ++ if (qualifier == *fmt) { ++ switch (*fmt++) { ++/* TODO: case 'l': qualifier = 'L'; break;*/ ++ case 'h': ++ qualifier = 'b'; ++ break; ++ } ++ } ++ } ++ ++ /* we should now have a type */ ++ if (!strchr("iuxs", *fmt)) ++ return -1; ++ ++ /* convert qualifier (bhL) to byte size */ ++ if (*fmt != 's') ++ *size = qualifier == 'b' ? 1 : ++ qualifier == 'h' ? 2 : ++ qualifier == 'l' ? 4 : -1; ++ *type = *fmt++; ++ ++ /* that should be it! */ ++ if (*fmt) ++ return -1; ++ return 0; ++} +diff --git a/util.h b/util.h +index f251480..730918e 100644 +--- a/util.h ++++ b/util.h +@@ -4,6 +4,7 @@ + #include + + /* ++ * Copyright 2011 The Chromium Authors, All Rights Reserved. + * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. + * + * This program is free software; you can redistribute it and/or +@@ -72,4 +73,71 @@ int util_is_printable_string(const void *data, int len); + */ + char get_escape_char(const char *s, int *i); + ++/** ++ * Read a device tree file into a buffer. This will report any errors on ++ * stderr. ++ * ++ * @param filename The filename to read, or - for stdin ++ * @return Pointer to allocated buffer containing fdt, or NULL on error ++ */ ++char *utilfdt_read(const char *filename); ++ ++/** ++ * Read a device tree file into a buffer. Does not report errors, but only ++ * returns them. The value returned can be passed to strerror() to obtain ++ * an error message for the user. ++ * ++ * @param filename The filename to read, or - for stdin ++ * @param buffp Returns pointer to buffer containing fdt ++ * @return 0 if ok, else an errno value representing the error ++ */ ++int utilfdt_read_err(const char *filename, char **buffp); ++ ++ ++/** ++ * Write a device tree buffer to a file. This will report any errors on ++ * stderr. ++ * ++ * @param filename The filename to write, or - for stdout ++ * @param blob Poiner to buffer containing fdt ++ * @return 0 if ok, -1 on error ++ */ ++int utilfdt_write(const char *filename, const void *blob); ++ ++/** ++ * Write a device tree buffer to a file. Does not report errors, but only ++ * returns them. The value returned can be passed to strerror() to obtain ++ * an error message for the user. ++ * ++ * @param filename The filename to write, or - for stdout ++ * @param blob Poiner to buffer containing fdt ++ * @return 0 if ok, else an errno value representing the error ++ */ ++int utilfdt_write_err(const char *filename, const void *blob); ++ ++/** ++ * Decode a data type string. The purpose of this string ++ * ++ * The string consists of an optional character followed by the type: ++ * Modifier characters: ++ * hh or b 1 byte ++ * h 2 byte ++ * l 4 byte, default ++ * ++ * Type character: ++ * s string ++ * i signed integer ++ * u unsigned integer ++ * x hex ++ * ++ * TODO: Implement ll modifier (8 bytes) ++ * TODO: Implement o type (octal) ++ * ++ * @param fmt Format string to process ++ * @param type Returns type found(s/d/u/x), or 0 if none ++ * @param size Returns size found(1,2,4,8) or 4 if none ++ * @return 0 if ok, -1 on error (no type given, or other invalid format) ++ */ ++int utilfdt_decode_type(const char *fmt, int *type, int *size); ++ + #endif /* _UTIL_H */ --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/11_Make-testutils-use-utilfdt.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/11_Make-testutils-use-utilfdt.patch @@ -0,0 +1,111 @@ +From: Simon Glass +Date: Thu, 22 Sep 2011 17:11:03 +0000 (-0700) +Subject: Make testutils use utilfdt +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=1c25c0d520dee58bfd86626a07036fe9febfebe6 + +Make testutils use utilfdt + +The load_blob() and save_blob() functions are very similar to the utilfdt +versions. This removes the duplicated code. + +Signed-off-by: Simon Glass +Acked-by: David Gibson +--- + +diff --git a/tests/Makefile.tests b/tests/Makefile.tests +index 41695df..cae8390 100644 +--- a/tests/Makefile.tests ++++ b/tests/Makefile.tests +@@ -45,11 +45,12 @@ tests: $(TESTS) $(TESTS_TREES) + + $(LIB_TESTS): %: $(TESTS_PREFIX)testutils.o util.o $(LIBFDT_archive) + +-$(DL_LIB_TESTS): %: %.o $(TESTS_PREFIX)testutils.o $(LIBFDT_archive) ++$(DL_LIB_TESTS): %: %.o $(TESTS_PREFIX)testutils.o util.o $(LIBFDT_archive) + @$(VECHO) LD [libdl] $@ + $(LINK.c) -o $@ $^ -ldl + +-$(LIBTREE_TESTS): %: $(TESTS_PREFIX)testutils.o $(TESTS_PREFIX)trees.o $(LIBFDT_archive) ++$(LIBTREE_TESTS): %: $(TESTS_PREFIX)testutils.o $(TESTS_PREFIX)trees.o \ ++ util.o $(LIBFDT_archive) + + $(TESTS_PREFIX)dumptrees: $(TESTS_PREFIX)trees.o + +diff --git a/tests/testutils.c b/tests/testutils.c +index b0a2230..f185133 100644 +--- a/tests/testutils.c ++++ b/tests/testutils.c +@@ -159,33 +159,13 @@ int nodename_eq(const char *s1, const char *s2) + + void *load_blob(const char *filename) + { +- int fd; +- int offset = 0; +- int bufsize = 1024; +- char *p = NULL; +- int ret; +- +- fd = open(filename, O_RDONLY); +- if (fd < 0) +- CONFIG("Couldn't open blob from \"%s\": %s", filename, +- strerror(errno)); +- +- p = xmalloc(bufsize); +- do { +- if (offset == bufsize) { +- bufsize *= 2; +- p = xrealloc(p, bufsize); +- } +- +- ret = read(fd, &p[offset], bufsize - offset); +- if (ret < 0) +- CONFIG("Couldn't read from \"%s\": %s", filename, +- strerror(errno)); +- +- offset += ret; +- } while (ret != 0); ++ char *blob; ++ int ret = utilfdt_read_err(filename, &blob); + +- return p; ++ if (ret) ++ CONFIG("Couldn't open blob from \"%s\": %s", filename, ++ strerror(ret)); ++ return blob; + } + + void *load_blob_arg(int argc, char *argv[]) +@@ -197,28 +177,11 @@ void *load_blob_arg(int argc, char *argv[]) + + void save_blob(const char *filename, void *fdt) + { +- int fd; +- int totalsize; +- int offset; +- char *p; +- int ret; +- +- fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666); +- if (fd < 0) +- CONFIG("Couldn't open \"%s\" to write blob: %s", filename, +- strerror(errno)); +- +- totalsize = fdt_totalsize(fdt); +- offset = 0; +- p = fdt; +- +- while (offset < totalsize) { +- ret = write(fd, p + offset, totalsize - offset); +- if (ret < 0) +- CONFIG("Couldn't write to \"%s\": %s", filename, +- strerror(errno)); +- offset += ret; +- } ++ int ret = utilfdt_write_err(filename, fdt); ++ ++ if (ret) ++ CONFIG("Couldn't write blob to \"%s\": %s", filename, ++ strerror(ret)); + } + + void *open_blob_rw(void *blob) --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/12_use-utilfdt-to-read-blob.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/12_use-utilfdt-to-read-blob.patch @@ -0,0 +1,71 @@ +From: Simon Glass +Date: Thu, 22 Sep 2011 17:11:04 +0000 (-0700) +Subject: ftdump: use utilfdt to read blob +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=07a8691fbbeb2a7e0cff85fb24435e2dc71facaf + +ftdump: use utilfdt to read blob + +Now that we have utilfdt_read(), ftdump should use it too. + +Signed-off-by: Simon Glass +Acked-by: David Gibson +--- + +diff --git a/ftdump.c b/ftdump.c +index db932e3..cc55fe2 100644 +--- a/ftdump.c ++++ b/ftdump.c +@@ -13,8 +13,6 @@ + + #include "util.h" + +-#define FTDUMP_BUF_SIZE 65536 +- + #define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1)) + #define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a)))) + #define GET_CELL(p) (p += 4, *((const uint32_t *)(p-4))) +@@ -147,40 +145,18 @@ static void dump_blob(void *blob) + + int main(int argc, char *argv[]) + { +- FILE *fp; + char *buf; +- int size; + + if (argc < 2) { + fprintf(stderr, "supply input filename\n"); + return 5; + } + +- if (strcmp(argv[1], "-") == 0) { +- fp = stdin; +- } else { +- fp = fopen(argv[1], "rb"); +- if (fp == NULL) { +- fprintf(stderr, "unable to open %s\n", argv[1]); +- return 10; +- } +- } +- +- buf = malloc(FTDUMP_BUF_SIZE); +- if (!buf) { +- fprintf(stderr, "Couldn't allocate %d byte buffer\n", FTDUMP_BUF_SIZE); ++ buf = utilfdt_read(argv[1]); ++ if (buf) ++ dump_blob(buf); ++ else + return 10; +- } +- +- size = fread(buf, 1, FTDUMP_BUF_SIZE, fp); +- if (size == FTDUMP_BUF_SIZE) { +- fprintf(stderr, "file too large (maximum is %d bytes)\n", FTDUMP_BUF_SIZE); +- return 10; +- } +- +- dump_blob(buf); +- +- fclose(fp); + + return 0; + } --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/13_Add-fdt16_to_cpu-utility-function.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/13_Add-fdt16_to_cpu-utility-function.patch @@ -0,0 +1,32 @@ +From: Anton Staaf +Date: Tue, 11 Oct 2011 17:22:27 +0000 (-0700) +Subject: libfdt: Add fdt16_to_cpu utility function +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=2cd4c8d27d6b5ea83723754da4eba5d51aa71b95 + +libfdt: Add fdt16_to_cpu utility function + +This utility routine will be used in the variable size cell literal +append code. It is a straightforward adaptation of the fdt32_to_cpu +function. + +Signed-off-by: Anton Staaf +Acked-by: David Gibson +--- + +diff --git a/libfdt/libfdt_env.h b/libfdt/libfdt_env.h +index 449bf60..da952e7 100644 +--- a/libfdt/libfdt_env.h ++++ b/libfdt/libfdt_env.h +@@ -6,6 +6,12 @@ + #include + + #define _B(n) ((unsigned long long)((uint8_t *)&x)[n]) ++static inline uint16_t fdt16_to_cpu(uint16_t x) ++{ ++ return (_B(0) << 8) | _B(1); ++} ++#define cpu_to_fdt16(x) fdt16_to_cpu(x) ++ + static inline uint32_t fdt32_to_cpu(uint32_t x) + { + return (_B(0) << 24) | (_B(1) << 16) | (_B(2) << 8) | _B(3); --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/14_Add-data_append_integer-function.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/14_Add-data_append_integer-function.patch @@ -0,0 +1,91 @@ +From: Anton Staaf +Date: Tue, 11 Oct 2011 17:22:28 +0000 (-0700) +Subject: dtc: Add data_append_integer function +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=a4b515c03804dbc0eff5bbf281bd22438717e773 + +dtc: Add data_append_integer function + +This function deals with appending integers of various sizes (8, 16 +32, and 64 bit currently). It handles endianess conversions. If the +integer will not fit in the requested number of bits of storage it +will have it's high bits ignored. + +This patch also rewrites data_append_cell and data_append_addr to use +data_append_integer. + +Signed-off-by: Anton Staaf +Acked-by: David Gibson +--- + +diff --git a/data.c b/data.c +index b5f3066..4a40c5b 100644 +--- a/data.c ++++ b/data.c +@@ -168,11 +168,33 @@ struct data data_merge(struct data d1, struct data d2) + return d; + } + +-struct data data_append_cell(struct data d, cell_t word) ++struct data data_append_integer(struct data d, uint64_t value, int bits) + { +- cell_t beword = cpu_to_fdt32(word); +- +- return data_append_data(d, &beword, sizeof(beword)); ++ uint8_t value_8; ++ uint16_t value_16; ++ uint32_t value_32; ++ uint64_t value_64; ++ ++ switch (bits) { ++ case 8: ++ value_8 = value; ++ return data_append_data(d, &value_8, 1); ++ ++ case 16: ++ value_16 = cpu_to_fdt16(value); ++ return data_append_data(d, &value_16, 2); ++ ++ case 32: ++ value_32 = cpu_to_fdt32(value); ++ return data_append_data(d, &value_32, 4); ++ ++ case 64: ++ value_64 = cpu_to_fdt64(value); ++ return data_append_data(d, &value_64, 8); ++ ++ default: ++ die("Invalid literal size (%d)\n", bits); ++ } + } + + struct data data_append_re(struct data d, const struct fdt_reserve_entry *re) +@@ -185,11 +207,14 @@ struct data data_append_re(struct data d, const struct fdt_reserve_entry *re) + return data_append_data(d, &bere, sizeof(bere)); + } + +-struct data data_append_addr(struct data d, uint64_t addr) ++struct data data_append_cell(struct data d, cell_t word) + { +- uint64_t beaddr = cpu_to_fdt64(addr); ++ return data_append_integer(d, word, sizeof(word) * 8); ++} + +- return data_append_data(d, &beaddr, sizeof(beaddr)); ++struct data data_append_addr(struct data d, uint64_t addr) ++{ ++ return data_append_integer(d, addr, sizeof(addr) * 8); + } + + struct data data_append_byte(struct data d, uint8_t byte) +diff --git a/dtc.h b/dtc.h +index f37c97e..7b4c65b 100644 +--- a/dtc.h ++++ b/dtc.h +@@ -109,6 +109,7 @@ struct data data_insert_at_marker(struct data d, struct marker *m, + const void *p, int len); + struct data data_merge(struct data d1, struct data d2); + struct data data_append_cell(struct data d, cell_t word); ++struct data data_append_integer(struct data d, uint64_t word, int bits); + struct data data_append_re(struct data d, const struct fdt_reserve_entry *re); + struct data data_append_addr(struct data d, uint64_t addr); + struct data data_append_byte(struct data d, uint8_t byte); --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/15_Add-support-for-variable-sized-elements.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/15_Add-support-for-variable-sized-elements.patch @@ -0,0 +1,400 @@ +From: Anton Staaf +Date: Tue, 11 Oct 2011 17:22:29 +0000 (-0700) +Subject: dtc: Add support for variable sized elements +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=033089f29099bdfd5c2d6986cdb9fd07b16cfde0 + +dtc: Add support for variable sized elements + +Elements of size 8, 16, 32, and 64 bits are supported. The new +/bits/ syntax was selected so as to not pollute the reserved +keyword space with uint8/uint16/... type names. + +With this patch the following property assignment: + + property = /bits/ 16 <0x1234 0x5678 0x0 0xffff>; + +is equivalent to: + + property = <0x12345678 0x0000ffff>; + +It is now also possible to directly specify a 64 bit literal in a +cell list, also known as an array using: + + property = /bits/ 64 <0xdeadbeef00000000>; + +It is an error to attempt to store a literal into an element that is +too small to hold the literal, and the compiler will generate an +error when it detects this. For instance: + + property = /bits/ 8 <256>; + +Will fail to compile. It is also an error to attempt to place a +reference in a non 32-bit element. + +The documentation has been changed to reflect that the cell list +is now an array of elements that can be of sizes other than the +default 32-bit cell size. + +The sized_cells test tests the creation and access of 8, 16, 32, +and 64-bit sized elements. It also tests that the creation of two +properties, one with 16 bit elements and one with 32 bit elements +result in the same property contents. + +Signed-off-by: Anton Staaf +Acked-by: David Gibson +--- + +diff --git a/Documentation/dts-format.txt b/Documentation/dts-format.txt +index eae8b76..41741df 100644 +--- a/Documentation/dts-format.txt ++++ b/Documentation/dts-format.txt +@@ -29,18 +29,28 @@ except for properties with empty (zero length) value which have the + form: + [label:] property-name; + +-Property values may be defined as an array of 32-bit integer cells, as +-NUL-terminated strings, as bytestrings or a combination of these. ++Property values may be defined as an array of 8, 16, 32, or 64-bit integer ++elements, as NUL-terminated strings, as bytestrings or a combination of these. + +-* Arrays of cells are represented by angle brackets surrounding a +- space separated list of C-style integers or character literals. ++* Arrays are represented by angle brackets surrounding a space separated list ++ of C-style integers or character literals. Array elements default to 32-bits ++ in size. An array of 32-bit elements is also known as a cell list or a list ++ of cells. A cell being an unsigned 32-bit integer. + + e.g. interrupts = <17 0xc>; + +-* A 64-bit value is represented with two 32-bit cells. ++* A 64-bit value can be represented with two 32-bit elements. + + e.g. clock-frequency = <0x00000001 0x00000000>; + ++* The storage size of an element can be changed using the /bits/ prefix. The ++ /bits/ prefix allows for the creation of 8, 16, 32, and 64-bit elements. ++ The resulting array will not be padded to a multiple of the default 32-bit ++ element size. ++ ++ e.g. interrupts = /bits/ 8 <17 0xc>; ++ e.g. clock-frequency = /bits/ 64 <0x0000000100000000>; ++ + * A NUL-terminated string value is represented using double quotes + (the property value is considered to include the terminating NUL + character). +@@ -59,19 +69,20 @@ NUL-terminated strings, as bytestrings or a combination of these. + e.g. compatible = "ns16550", "ns8250"; + example = <0xf00f0000 19>, "a strange property format"; + +-* In a cell array a reference to another node will be expanded to that +- node's phandle. References may by '&' followed by a node's label: ++* In an array a reference to another node will be expanded to that node's ++ phandle. References may by '&' followed by a node's label: + e.g. interrupt-parent = < &mpic >; + or they may be '&' followed by a node's full path in braces: + e.g. interrupt-parent = < &{/soc/interrupt-controller@40000} >; ++ References are only permitted in arrays that have an element size of ++ 32-bits. + +-* Outside a cell array, a reference to another node will be expanded +- to that node's full path. ++* Outside an array, a reference to another node will be expanded to that ++ node's full path. + e.g. ethernet0 = &EMAC0; + + * Labels may also appear before or after any component of a property +- value, or between cells of a cell array, or between bytes of a +- bytestring. ++ value, or between elements of an array, or between bytes of a bytestring. + e.g. reg = reglabel: <0 sizelabel: 0x1000000>; + e.g. prop = [ab cd ef byte4: 00 ff fe]; + e.g. str = start: "string value" end: ; +@@ -108,3 +119,4 @@ Version 1 DTS files have the overall layout: + + -- David Gibson + -- Yoder Stuart ++ -- Anton Staaf +diff --git a/dtc-lexer.l b/dtc-lexer.l +index 494e342..73d190c 100644 +--- a/dtc-lexer.l ++++ b/dtc-lexer.l +@@ -97,6 +97,12 @@ static int pop_input_file(void); + return DT_MEMRESERVE; + } + ++<*>"/bits/" { ++ DPRINT("Keyword: /bits/\n"); ++ BEGIN_DEFAULT(); ++ return DT_BITS; ++ } ++ + <*>{LABEL}: { + DPRINT("Label: %s\n", yytext); + yylval.labelref = xstrdup(yytext); +diff --git a/dtc-parser.y b/dtc-parser.y +index 554f11a..348616b 100644 +--- a/dtc-parser.y ++++ b/dtc-parser.y +@@ -45,8 +45,12 @@ static unsigned char eval_char_literal(const char *s); + uint8_t byte; + struct data data; + ++ struct { ++ struct data data; ++ int bits; ++ } array; ++ + uint64_t addr; +- cell_t cell; + struct property *prop; + struct property *proplist; + struct node *node; +@@ -56,6 +60,7 @@ static unsigned char eval_char_literal(const char *s); + + %token DT_V1 + %token DT_MEMRESERVE ++%token DT_BITS + %token DT_PROPNODENAME + %token DT_LITERAL + %token DT_CHAR_LITERAL +@@ -71,8 +76,7 @@ static unsigned char eval_char_literal(const char *s); + %type memreserve + %type memreserves + %type addr +-%type celllist +-%type cellval ++%type arrayprefix + %type bytestring + %type propdef + %type proplist +@@ -182,9 +186,9 @@ propdata: + { + $$ = data_merge($1, $2); + } +- | propdataprefix '<' celllist '>' ++ | propdataprefix arrayprefix '>' + { +- $$ = data_merge($1, $3); ++ $$ = data_merge($1, $2.data); + } + | propdataprefix '[' bytestring ']' + { +@@ -242,34 +246,56 @@ propdataprefix: + } + ; + +-celllist: +- /* empty */ ++arrayprefix: ++ DT_BITS DT_LITERAL '<' + { +- $$ = empty_data; ++ $$.data = empty_data; ++ $$.bits = eval_literal($2, 0, 7); ++ ++ if (($$.bits != 8) && ++ ($$.bits != 16) && ++ ($$.bits != 32) && ++ ($$.bits != 64)) ++ { ++ print_error("Only 8, 16, 32 and 64-bit elements" ++ " are currently supported"); ++ $$.bits = 32; ++ } + } +- | celllist cellval ++ | '<' + { +- $$ = data_append_cell($1, $2); ++ $$.data = empty_data; ++ $$.bits = 32; + } +- | celllist DT_REF ++ | arrayprefix DT_LITERAL + { +- $$ = data_append_cell(data_add_marker($1, REF_PHANDLE, +- $2), -1); ++ uint64_t val = eval_literal($2, 0, $1.bits); ++ ++ $$.data = data_append_integer($1.data, val, $1.bits); + } +- | celllist DT_LABEL ++ | arrayprefix DT_CHAR_LITERAL + { +- $$ = data_add_marker($1, LABEL, $2); +- } +- ; ++ uint64_t val = eval_char_literal($2); + +-cellval: +- DT_LITERAL ++ $$.data = data_append_integer($1.data, val, $1.bits); ++ } ++ | arrayprefix DT_REF + { +- $$ = eval_literal($1, 0, 32); ++ uint64_t val = ~0ULL >> (64 - $1.bits); ++ ++ if ($1.bits == 32) ++ $1.data = data_add_marker($1.data, ++ REF_PHANDLE, ++ $2); ++ else ++ print_error("References are only allowed in " ++ "arrays with 32-bit elements."); ++ ++ $$.data = data_append_integer($1.data, val, $1.bits); + } +- | DT_CHAR_LITERAL ++ | arrayprefix DT_LABEL + { +- $$ = eval_char_literal($1); ++ $$.data = data_add_marker($1.data, LABEL, $2); + } + ; + +diff --git a/tests/.gitignore b/tests/.gitignore +index a3e9bd1..9e062c3 100644 +--- a/tests/.gitignore ++++ b/tests/.gitignore +@@ -40,6 +40,7 @@ + /set_name + /setprop + /setprop_inplace ++/sized_cells + /string_escapes + /subnode_offset + /supernode_atdepth_offset +diff --git a/tests/Makefile.tests b/tests/Makefile.tests +index cae8390..215a8c5 100644 +--- a/tests/Makefile.tests ++++ b/tests/Makefile.tests +@@ -6,6 +6,7 @@ LIB_TESTS_L = get_mem_rsv \ + node_check_compatible node_offset_by_compatible \ + get_alias \ + char_literal \ ++ sized_cells \ + notfound \ + setprop_inplace nop_property nop_node \ + sw_tree1 \ +diff --git a/tests/run_tests.sh b/tests/run_tests.sh +index e2c3046..da6f970 100755 +--- a/tests/run_tests.sh ++++ b/tests/run_tests.sh +@@ -209,6 +209,9 @@ dtc_tests () { + run_dtc_test -I dts -O dtb -o dtc_char_literal.test.dtb char_literal.dts + run_test char_literal dtc_char_literal.test.dtb + ++ run_dtc_test -I dts -O dtb -o dtc_sized_cells.test.dtb sized_cells.dts ++ run_test sized_cells dtc_sized_cells.test.dtb ++ + run_dtc_test -I dts -O dtb -o dtc_extra-terminating-null.test.dtb extra-terminating-null.dts + run_test extra-terminating-null dtc_extra-terminating-null.test.dtb + +diff --git a/tests/sized_cells.c b/tests/sized_cells.c +new file mode 100644 +index 0000000..847ec96 +--- /dev/null ++++ b/tests/sized_cells.c +@@ -0,0 +1,84 @@ ++/* ++ * libfdt - Flat Device Tree manipulation ++ * Testcase for variable sized cells in dtc ++ * Copyright (C) 2006 David Gibson, IBM Corporation. ++ * Copyright (C) 2011 The Chromium Authors. All rights reserved. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public License ++ * as published by the Free Software Foundation; either version 2.1 of ++ * the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "tests.h" ++#include "testdata.h" ++ ++static void check_compare_properties(void *fdt, ++ char const *name_one, ++ char const *name_two) ++{ ++ const void *propval; ++ int proplen; ++ ++ propval = fdt_getprop(fdt, 0, name_one, &proplen); ++ ++ if (!propval) ++ FAIL("fdt_getprop(\"%s\"): %s", ++ name_one, ++ fdt_strerror(proplen)); ++ ++ check_getprop(fdt, 0, name_two, proplen, propval); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ void *fdt; ++ uint8_t expected_8[6] = {TEST_CHAR1, ++ TEST_CHAR2, ++ TEST_CHAR3, ++ TEST_CHAR4, ++ TEST_CHAR5, ++ TEST_VALUE_1 >> 24}; ++ uint16_t expected_16[6]; ++ uint32_t expected_32[6]; ++ uint64_t expected_64[6]; ++ int i; ++ ++ for (i = 0; i < 5; ++i) { ++ expected_16[i] = cpu_to_fdt16(expected_8[i]); ++ expected_32[i] = cpu_to_fdt32(expected_8[i]); ++ expected_64[i] = cpu_to_fdt64(expected_8[i]); ++ } ++ ++ expected_16[5] = cpu_to_fdt16(TEST_VALUE_1 >> 16); ++ expected_32[5] = cpu_to_fdt32(TEST_VALUE_1); ++ expected_64[5] = cpu_to_fdt64(TEST_ADDR_1); ++ ++ test_init(argc, argv); ++ fdt = load_blob_arg(argc, argv); ++ ++ check_getprop(fdt, 0, "cells-8b", sizeof(expected_8), expected_8); ++ check_getprop(fdt, 0, "cells-16b", sizeof(expected_16), expected_16); ++ check_getprop(fdt, 0, "cells-32b", sizeof(expected_32), expected_32); ++ check_getprop(fdt, 0, "cells-64b", sizeof(expected_64), expected_64); ++ ++ check_compare_properties(fdt, "cells-one-16b", "cells-one-32b"); ++ ++ PASS(); ++} +diff --git a/tests/sized_cells.dts b/tests/sized_cells.dts +new file mode 100644 +index 0000000..efea9f5 +--- /dev/null ++++ b/tests/sized_cells.dts +@@ -0,0 +1,11 @@ ++/dts-v1/; ++ ++/ { ++ cells-8b = /bits/ 8 <'\r' 'b' '\0' '\'' '\xff' 0xde>; ++ cells-16b = /bits/ 16 <'\r' 'b' '\0' '\'' '\xff' 0xdead>; ++ cells-32b = /bits/ 32 <'\r' 'b' '\0' '\'' '\xff' 0xdeadbeef>; ++ cells-64b = /bits/ 64 <'\r' 'b' '\0' '\'' '\xff' 0xdeadbeef00000000>; ++ ++ cells-one-16b = /bits/ 16 <0x1234 0x5678 0x0 0xffff>; ++ cells-one-32b = <0x12345678 0x0000ffff>; ++}; --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/16_fdtdump-rename-from-ftdump.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/16_fdtdump-rename-from-ftdump.patch @@ -0,0 +1,438 @@ +From: Mike Frysinger +Date: Tue, 25 Oct 2011 21:29:24 +0000 (-0400) +Subject: fdtdump: rename from ftdump +X-Git-Url: http://git.jdl.com/gitweb/?p=dtc.git;a=commitdiff_plain;h=8f459c5d72673e1a3a119ac58a7eee56236fca73 + +fdtdump: rename from ftdump + +The freetype package already installs a binary named "ftdump", so the dtc +package conflicts with that. So rename the newer dtc tool to "fdtdump". +This even makes a bit more sense: + ftdump: [F]lat device [T]ree [dump] + fdtdump: [F]lat [D]evice [T]ree [dump] + +Signed-off-by: Mike Frysinger +Acked-by: David Gibson +--- + +Index: device-tree-compiler-1.3.0/.gitignore +=================================================================== +--- device-tree-compiler-1.3.0.orig/.gitignore 2012-01-30 15:03:30.095993353 +0100 ++++ device-tree-compiler-1.3.0/.gitignore 2012-01-30 15:03:34.487993309 +0100 +@@ -7,6 +7,6 @@ + lex.yy.c + *.lex.c + /dtc +-/ftdump ++/fdtdump + /convert-dtsv0 + /version_gen.h +Index: device-tree-compiler-1.3.0/Documentation/manual.txt +=================================================================== +--- device-tree-compiler-1.3.0.orig/Documentation/manual.txt 2012-01-30 15:03:30.075993336 +0100 ++++ device-tree-compiler-1.3.0/Documentation/manual.txt 2012-01-30 15:03:34.487993309 +0100 +@@ -21,7 +21,7 @@ + + IV - Utility Tools + 1) convert-dtsv0 -- Conversion to Version 1 +- 1) ftdump ++ 1) fdtdump + + + I - "dtc", the device tree compiler +@@ -643,10 +643,10 @@ + Comments, empty lines, etc. are preserved. + + +-2) ftdump -- Flat Tree dumping utility ++2) fdtdump -- Flat Device Tree dumping utility + +-The ftdump program prints a readable version of a flat device tree file. ++The fdtdump program prints a readable version of a flat device tree file. + +-The syntax of the ftdump command line is: ++The syntax of the fdtdump command line is: + +- ftdump ++ fdtdump +Index: device-tree-compiler-1.3.0/Makefile +=================================================================== +--- device-tree-compiler-1.3.0.orig/Makefile 2012-01-30 15:03:30.023993406 +0100 ++++ device-tree-compiler-1.3.0/Makefile 2012-01-30 15:03:34.487993309 +0100 +@@ -109,7 +109,7 @@ + + BIN += convert-dtsv0 + BIN += dtc +-BIN += ftdump ++BIN += fdtdump + + SCRIPTS = dtdiff + +@@ -119,7 +119,7 @@ + ifneq ($(DEPTARGETS),) + -include $(DTC_OBJS:%.o=%.d) + -include $(CONVERT_OBJS:%.o=%.d) +--include $(FTDUMP_OBJS:%.o=%.d) ++-include $(FDTDUMP_OBJS:%.o=%.d) + endif + + +@@ -178,7 +178,7 @@ + @$(VECHO) LD $@ + $(LINK.c) -o $@ $^ + +-ftdump: $(FTDUMP_OBJS) ++fdtdump: $(FDTDUMP_OBJS) + + + # +Index: device-tree-compiler-1.3.0/Makefile.utils +=================================================================== +--- device-tree-compiler-1.3.0.orig/Makefile.utils 2012-01-30 15:03:30.043993314 +0100 ++++ device-tree-compiler-1.3.0/Makefile.utils 2012-01-30 15:03:34.491993307 +0100 +@@ -3,8 +3,8 @@ + # be easily embeddable into other systems of Makefiles. + # + +-FTDUMP_SRCS = \ +- ftdump.c \ ++FDTDUMP_SRCS = \ ++ fdtdump.c \ + util.c + +-FTDUMP_OBJS = $(FTDUMP_SRCS:%.c=%.o) ++FDTDUMP_OBJS = $(FDTDUMP_SRCS:%.c=%.o) +Index: device-tree-compiler-1.3.0/ftdump.c +=================================================================== +--- device-tree-compiler-1.3.0.orig/ftdump.c 2012-01-30 15:03:30.059993370 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,162 +0,0 @@ +-/* +- * ftdump.c - Contributed by Pantelis Antoniou +- */ +- +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +- +-#include "util.h" +- +-#define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1)) +-#define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a)))) +-#define GET_CELL(p) (p += 4, *((const uint32_t *)(p-4))) +- +-static void print_data(const char *data, int len) +-{ +- int i; +- const char *p = data; +- +- /* no data, don't print */ +- if (len == 0) +- return; +- +- if (util_is_printable_string(data, len)) { +- printf(" = \"%s\"", (const char *)data); +- } else if ((len % 4) == 0) { +- printf(" = <"); +- for (i = 0; i < len; i += 4) +- printf("0x%08x%s", fdt32_to_cpu(GET_CELL(p)), +- i < (len - 4) ? " " : ""); +- printf(">"); +- } else { +- printf(" = ["); +- for (i = 0; i < len; i++) +- printf("%02x%s", *p++, i < len - 1 ? " " : ""); +- printf("]"); +- } +-} +- +-static void dump_blob(void *blob) +-{ +- struct fdt_header *bph = blob; +- uint32_t off_mem_rsvmap = fdt32_to_cpu(bph->off_mem_rsvmap); +- uint32_t off_dt = fdt32_to_cpu(bph->off_dt_struct); +- uint32_t off_str = fdt32_to_cpu(bph->off_dt_strings); +- struct fdt_reserve_entry *p_rsvmap = +- (struct fdt_reserve_entry *)((char *)blob + off_mem_rsvmap); +- const char *p_struct = (const char *)blob + off_dt; +- const char *p_strings = (const char *)blob + off_str; +- uint32_t version = fdt32_to_cpu(bph->version); +- uint32_t totalsize = fdt32_to_cpu(bph->totalsize); +- uint32_t tag; +- const char *p, *s, *t; +- int depth, sz, shift; +- int i; +- uint64_t addr, size; +- +- depth = 0; +- shift = 4; +- +- printf("/dts-v1/;\n"); +- printf("// magic:\t\t0x%x\n", fdt32_to_cpu(bph->magic)); +- printf("// totalsize:\t\t0x%x (%d)\n", totalsize, totalsize); +- printf("// off_dt_struct:\t0x%x\n", off_dt); +- printf("// off_dt_strings:\t0x%x\n", off_str); +- printf("// off_mem_rsvmap:\t0x%x\n", off_mem_rsvmap); +- printf("// version:\t\t%d\n", version); +- printf("// last_comp_version:\t%d\n", +- fdt32_to_cpu(bph->last_comp_version)); +- if (version >= 2) +- printf("// boot_cpuid_phys:\t0x%x\n", +- fdt32_to_cpu(bph->boot_cpuid_phys)); +- +- if (version >= 3) +- printf("// size_dt_strings:\t0x%x\n", +- fdt32_to_cpu(bph->size_dt_strings)); +- if (version >= 17) +- printf("// size_dt_struct:\t0x%x\n", +- fdt32_to_cpu(bph->size_dt_struct)); +- printf("\n"); +- +- for (i = 0; ; i++) { +- addr = fdt64_to_cpu(p_rsvmap[i].address); +- size = fdt64_to_cpu(p_rsvmap[i].size); +- if (addr == 0 && size == 0) +- break; +- +- printf("/memreserve/ %llx %llx;\n", +- (unsigned long long)addr, (unsigned long long)size); +- } +- +- p = p_struct; +- while ((tag = fdt32_to_cpu(GET_CELL(p))) != FDT_END) { +- +- /* printf("tag: 0x%08x (%d)\n", tag, p - p_struct); */ +- +- if (tag == FDT_BEGIN_NODE) { +- s = p; +- p = PALIGN(p + strlen(s) + 1, 4); +- +- if (*s == '\0') +- s = "/"; +- +- printf("%*s%s {\n", depth * shift, "", s); +- +- depth++; +- continue; +- } +- +- if (tag == FDT_END_NODE) { +- depth--; +- +- printf("%*s};\n", depth * shift, ""); +- continue; +- } +- +- if (tag == FDT_NOP) { +- printf("%*s// [NOP]\n", depth * shift, ""); +- continue; +- } +- +- if (tag != FDT_PROP) { +- fprintf(stderr, "%*s ** Unknown tag 0x%08x\n", depth * shift, "", tag); +- break; +- } +- sz = fdt32_to_cpu(GET_CELL(p)); +- s = p_strings + fdt32_to_cpu(GET_CELL(p)); +- if (version < 16 && sz >= 8) +- p = PALIGN(p, 8); +- t = p; +- +- p = PALIGN(p + sz, 4); +- +- printf("%*s%s", depth * shift, "", s); +- print_data(t, sz); +- printf(";\n"); +- } +-} +- +- +-int main(int argc, char *argv[]) +-{ +- char *buf; +- +- if (argc < 2) { +- fprintf(stderr, "supply input filename\n"); +- return 5; +- } +- +- buf = utilfdt_read(argv[1]); +- if (buf) +- dump_blob(buf); +- else +- return 10; +- +- return 0; +-} +Index: device-tree-compiler-1.3.0/fdtdump.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ device-tree-compiler-1.3.0/fdtdump.c 2012-01-30 15:04:46.255989457 +0100 +@@ -0,0 +1,162 @@ ++/* ++ * fdtdump.c - Contributed by Pantelis Antoniou ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "util.h" ++ ++#define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1)) ++#define PALIGN(p, a) ((void *)(ALIGN((unsigned long)(p), (a)))) ++#define GET_CELL(p) (p += 4, *((const uint32_t *)(p-4))) ++ ++static void print_data(const char *data, int len) ++{ ++ int i; ++ const char *p = data; ++ ++ /* no data, don't print */ ++ if (len == 0) ++ return; ++ ++ if (util_is_printable_string(data, len)) { ++ printf(" = \"%s\"", (const char *)data); ++ } else if ((len % 4) == 0) { ++ printf(" = <"); ++ for (i = 0; i < len; i += 4) ++ printf("0x%08x%s", fdt32_to_cpu(GET_CELL(p)), ++ i < (len - 4) ? " " : ""); ++ printf(">"); ++ } else { ++ printf(" = ["); ++ for (i = 0; i < len; i++) ++ printf("%02x%s", *p++, i < len - 1 ? " " : ""); ++ printf("]"); ++ } ++} ++ ++static void dump_blob(void *blob) ++{ ++ struct fdt_header *bph = blob; ++ uint32_t off_mem_rsvmap = fdt32_to_cpu(bph->off_mem_rsvmap); ++ uint32_t off_dt = fdt32_to_cpu(bph->off_dt_struct); ++ uint32_t off_str = fdt32_to_cpu(bph->off_dt_strings); ++ struct fdt_reserve_entry *p_rsvmap = ++ (struct fdt_reserve_entry *)((char *)blob + off_mem_rsvmap); ++ const char *p_struct = (const char *)blob + off_dt; ++ const char *p_strings = (const char *)blob + off_str; ++ uint32_t version = fdt32_to_cpu(bph->version); ++ uint32_t totalsize = fdt32_to_cpu(bph->totalsize); ++ uint32_t tag; ++ const char *p, *s, *t; ++ int depth, sz, shift; ++ int i; ++ uint64_t addr, size; ++ ++ depth = 0; ++ shift = 4; ++ ++ printf("/dts-v1/;\n"); ++ printf("// magic:\t\t0x%x\n", fdt32_to_cpu(bph->magic)); ++ printf("// totalsize:\t\t0x%x (%d)\n", totalsize, totalsize); ++ printf("// off_dt_struct:\t0x%x\n", off_dt); ++ printf("// off_dt_strings:\t0x%x\n", off_str); ++ printf("// off_mem_rsvmap:\t0x%x\n", off_mem_rsvmap); ++ printf("// version:\t\t%d\n", version); ++ printf("// last_comp_version:\t%d\n", ++ fdt32_to_cpu(bph->last_comp_version)); ++ if (version >= 2) ++ printf("// boot_cpuid_phys:\t0x%x\n", ++ fdt32_to_cpu(bph->boot_cpuid_phys)); ++ ++ if (version >= 3) ++ printf("// size_dt_strings:\t0x%x\n", ++ fdt32_to_cpu(bph->size_dt_strings)); ++ if (version >= 17) ++ printf("// size_dt_struct:\t0x%x\n", ++ fdt32_to_cpu(bph->size_dt_struct)); ++ printf("\n"); ++ ++ for (i = 0; ; i++) { ++ addr = fdt64_to_cpu(p_rsvmap[i].address); ++ size = fdt64_to_cpu(p_rsvmap[i].size); ++ if (addr == 0 && size == 0) ++ break; ++ ++ printf("/memreserve/ %llx %llx;\n", ++ (unsigned long long)addr, (unsigned long long)size); ++ } ++ ++ p = p_struct; ++ while ((tag = fdt32_to_cpu(GET_CELL(p))) != FDT_END) { ++ ++ /* printf("tag: 0x%08x (%d)\n", tag, p - p_struct); */ ++ ++ if (tag == FDT_BEGIN_NODE) { ++ s = p; ++ p = PALIGN(p + strlen(s) + 1, 4); ++ ++ if (*s == '\0') ++ s = "/"; ++ ++ printf("%*s%s {\n", depth * shift, "", s); ++ ++ depth++; ++ continue; ++ } ++ ++ if (tag == FDT_END_NODE) { ++ depth--; ++ ++ printf("%*s};\n", depth * shift, ""); ++ continue; ++ } ++ ++ if (tag == FDT_NOP) { ++ printf("%*s// [NOP]\n", depth * shift, ""); ++ continue; ++ } ++ ++ if (tag != FDT_PROP) { ++ fprintf(stderr, "%*s ** Unknown tag 0x%08x\n", depth * shift, "", tag); ++ break; ++ } ++ sz = fdt32_to_cpu(GET_CELL(p)); ++ s = p_strings + fdt32_to_cpu(GET_CELL(p)); ++ if (version < 16 && sz >= 8) ++ p = PALIGN(p, 8); ++ t = p; ++ ++ p = PALIGN(p + sz, 4); ++ ++ printf("%*s%s", depth * shift, "", s); ++ print_data(t, sz); ++ printf(";\n"); ++ } ++} ++ ++ ++int main(int argc, char *argv[]) ++{ ++ char *buf; ++ ++ if (argc < 2) { ++ fprintf(stderr, "supply input filename\n"); ++ return 5; ++ } ++ ++ buf = utilfdt_read(argv[1]); ++ if (buf) ++ dump_blob(buf); ++ else ++ return 10; ++ ++ return 0; ++} --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/17_libfdt-Add-support-for-appending-the-values-to-a-exi.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/17_libfdt-Add-support-for-appending-the-values-to-a-exi.patch @@ -0,0 +1,331 @@ +From a31e3ef83bfce62d07695355e5f06cd4d0e44b86 Mon Sep 17 00:00:00 2001 +From: Minghuan Lian +Date: Mon, 5 Dec 2011 12:22:07 +1100 +Subject: [PATCH 2/7] libfdt: Add support for appending the values to a + existing property + +Some properties may contain multiple values, these values may need +to be added to the property respectively. this patch provides this +functionality. The main purpose of fdt_append_prop() is to append +the values to a existing property, or create a new property if it +dose not exist. + +Signed-off-by: Minghuan Lian +Signed-off-by: David Gibson +--- + libfdt/fdt_rw.c | 27 ++++++++++++++ + libfdt/libfdt.h | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ + tests/appendprop.dts | 7 ++++ + tests/appendprop1.c | 70 ++++++++++++++++++++++++++++++++++++ + tests/appendprop2.c | 64 +++++++++++++++++++++++++++++++++ + 5 files changed, 263 insertions(+), 0 deletions(-) + create mode 100644 tests/appendprop.dts + create mode 100644 tests/appendprop1.c + create mode 100644 tests/appendprop2.c + +diff --git a/libfdt/fdt_rw.c b/libfdt/fdt_rw.c +index 994037b..24437df 100644 +--- a/libfdt/fdt_rw.c ++++ b/libfdt/fdt_rw.c +@@ -289,6 +289,33 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name, + return 0; + } + ++int fdt_appendprop(void *fdt, int nodeoffset, const char *name, ++ const void *val, int len) ++{ ++ struct fdt_property *prop; ++ int err, oldlen, newlen; ++ ++ FDT_RW_CHECK_HEADER(fdt); ++ ++ prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen); ++ if (prop) { ++ newlen = len + oldlen; ++ err = _fdt_splice_struct(fdt, prop->data, ++ FDT_TAGALIGN(oldlen), ++ FDT_TAGALIGN(newlen)); ++ if (err) ++ return err; ++ prop->len = cpu_to_fdt32(newlen); ++ memcpy(prop->data + oldlen, val, len); ++ } else { ++ err = _fdt_add_property(fdt, nodeoffset, name, len, &prop); ++ if (err) ++ return err; ++ memcpy(prop->data, val, len); ++ } ++ return 0; ++} ++ + int fdt_delprop(void *fdt, int nodeoffset, const char *name) + { + struct fdt_property *prop; +diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h +index 55f3eb3..060479e 100644 +--- a/libfdt/libfdt.h ++++ b/libfdt/libfdt.h +@@ -1134,6 +1134,101 @@ static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name, + fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1) + + /** ++ * fdt_appendprop - append to or create a property ++ * @fdt: pointer to the device tree blob ++ * @nodeoffset: offset of the node whose property to change ++ * @name: name of the property to append to ++ * @val: pointer to data to append to the property value ++ * @len: length of the data to append to the property value ++ * ++ * fdt_appendprop() appends the value to the named property in the ++ * given node, creating the property if it does not already exist. ++ * ++ * This function may insert data into the blob, and will therefore ++ * change the offsets of some existing nodes. ++ * ++ * returns: ++ * 0, on success ++ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to ++ * contain the new property value ++ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag ++ * -FDT_ERR_BADLAYOUT, ++ * -FDT_ERR_BADMAGIC, ++ * -FDT_ERR_BADVERSION, ++ * -FDT_ERR_BADSTATE, ++ * -FDT_ERR_BADSTRUCTURE, ++ * -FDT_ERR_BADLAYOUT, ++ * -FDT_ERR_TRUNCATED, standard meanings ++ */ ++int fdt_appendprop(void *fdt, int nodeoffset, const char *name, ++ const void *val, int len); ++ ++/** ++ * fdt_appendprop_cell - append a single cell value to a property ++ * @fdt: pointer to the device tree blob ++ * @nodeoffset: offset of the node whose property to change ++ * @name: name of the property to change ++ * @val: 32-bit integer value to append to the property (native endian) ++ * ++ * fdt_appendprop_cell() appends the given cell value (converting to ++ * big-endian if necessary) to the value of the named property in the ++ * given node, or creates a new property with that value if it does ++ * not already exist. ++ * ++ * This function may insert data into the blob, and will therefore ++ * change the offsets of some existing nodes. ++ * ++ * returns: ++ * 0, on success ++ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to ++ * contain the new property value ++ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag ++ * -FDT_ERR_BADLAYOUT, ++ * -FDT_ERR_BADMAGIC, ++ * -FDT_ERR_BADVERSION, ++ * -FDT_ERR_BADSTATE, ++ * -FDT_ERR_BADSTRUCTURE, ++ * -FDT_ERR_BADLAYOUT, ++ * -FDT_ERR_TRUNCATED, standard meanings ++ */ ++static inline int fdt_appendprop_cell(void *fdt, int nodeoffset, ++ const char *name, uint32_t val) ++{ ++ val = cpu_to_fdt32(val); ++ return fdt_appendprop(fdt, nodeoffset, name, &val, sizeof(val)); ++} ++ ++/** ++ * fdt_appendprop_string - append a string to a property ++ * @fdt: pointer to the device tree blob ++ * @nodeoffset: offset of the node whose property to change ++ * @name: name of the property to change ++ * @str: string value to append to the property ++ * ++ * fdt_appendprop_string() appends the given string to the value of ++ * the named property in the given node, or creates a new property ++ * with that value if it does not already exist. ++ * ++ * This function may insert data into the blob, and will therefore ++ * change the offsets of some existing nodes. ++ * ++ * returns: ++ * 0, on success ++ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to ++ * contain the new property value ++ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag ++ * -FDT_ERR_BADLAYOUT, ++ * -FDT_ERR_BADMAGIC, ++ * -FDT_ERR_BADVERSION, ++ * -FDT_ERR_BADSTATE, ++ * -FDT_ERR_BADSTRUCTURE, ++ * -FDT_ERR_BADLAYOUT, ++ * -FDT_ERR_TRUNCATED, standard meanings ++ */ ++#define fdt_appendprop_string(fdt, nodeoffset, name, str) \ ++ fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1) ++ ++/** + * fdt_delprop - delete a property + * @fdt: pointer to the device tree blob + * @nodeoffset: offset of the node whose property to nop +diff --git a/tests/appendprop.dts b/tests/appendprop.dts +new file mode 100644 +index 0000000..6e3a3eb +--- /dev/null ++++ b/tests/appendprop.dts +@@ -0,0 +1,7 @@ ++/dts-v1/; ++ ++/ { ++ prop-str = "hello world", "nastystring: \a\b\t\n\v\f\r\\\""; ++ prop-int = <0xdeadbeef 123456789>; ++ prop-bytes = [00010203040001020304]; ++}; +diff --git a/tests/appendprop1.c b/tests/appendprop1.c +new file mode 100644 +index 0000000..180d296 +--- /dev/null ++++ b/tests/appendprop1.c +@@ -0,0 +1,70 @@ ++/* ++ * libfdt - Flat Device Tree manipulation ++ * Testcase for fdt_appendprop() ++ * Copyright (C) 2006 David Gibson, IBM Corporation. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public License ++ * as published by the Free Software Foundation; either version 2.1 of ++ * the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "tests.h" ++#include "testdata.h" ++ ++#define SPACE 65536 ++ ++#define CHECK(code) \ ++ { \ ++ err = (code); \ ++ if (err) \ ++ FAIL(#code ": %s", fdt_strerror(err)); \ ++ } ++ ++int main(int argc, char *argv[]) ++{ ++ void *fdt; ++ int err; ++ uint8_t bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04}; ++ ++ test_init(argc, argv); ++ ++ /* Create an empty tree first */ ++ fdt = xmalloc(SPACE); ++ CHECK(fdt_create(fdt, SPACE)); ++ CHECK(fdt_finish_reservemap(fdt)); ++ CHECK(fdt_begin_node(fdt, "")); ++ CHECK(fdt_end_node(fdt)); ++ CHECK(fdt_finish(fdt)); ++ ++ /* Now use appendprop to add properties */ ++ CHECK(fdt_open_into(fdt, fdt, SPACE)); ++ ++ CHECK(fdt_appendprop(fdt, 0, "prop-bytes", bytes, sizeof(bytes))); ++ CHECK(fdt_appendprop_cell(fdt, 0, "prop-int", TEST_VALUE_1)); ++ CHECK(fdt_appendprop_string(fdt, 0, "prop-str", TEST_STRING_1)); ++ ++ CHECK(fdt_pack(fdt)); ++ ++ save_blob("appendprop1.test.dtb", fdt); ++ ++ PASS(); ++} +diff --git a/tests/appendprop2.c b/tests/appendprop2.c +new file mode 100644 +index 0000000..d651a89 +--- /dev/null ++++ b/tests/appendprop2.c +@@ -0,0 +1,64 @@ ++/* ++ * libfdt - Flat Device Tree manipulation ++ * Testcase for fdt_appendprop() ++ * Copyright (C) 2006 David Gibson, IBM Corporation. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public License ++ * as published by the Free Software Foundation; either version 2.1 of ++ * the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "tests.h" ++#include "testdata.h" ++ ++#define SPACE 65536 ++ ++#define CHECK(code) \ ++ { \ ++ err = (code); \ ++ if (err) \ ++ FAIL(#code ": %s", fdt_strerror(err)); \ ++ } ++ ++int main(int argc, char *argv[]) ++{ ++ void *fdt, *buf; ++ int err; ++ uint8_t bytes[] = {0x00, 0x01, 0x02, 0x03, 0x04}; ++ ++ test_init(argc, argv); ++ fdt = load_blob_arg(argc, argv); ++ ++ buf = xmalloc(SPACE); ++ CHECK(fdt_open_into(fdt, buf, SPACE)); ++ fdt = buf; ++ ++ CHECK(fdt_appendprop(fdt, 0, "prop-bytes", bytes, sizeof(bytes))); ++ CHECK(fdt_appendprop_cell(fdt, 0, "prop-int", TEST_VALUE_2)); ++ CHECK(fdt_appendprop_string(fdt, 0, "prop-str", TEST_STRING_2)); ++ ++ CHECK(fdt_pack(fdt)); ++ ++ save_blob("appendprop2.test.dtb", fdt); ++ ++ PASS(); ++} +-- +1.7.8.3 + --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/18_libfdt-Activate-testcase-for-appending-properties.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/18_libfdt-Activate-testcase-for-appending-properties.patch @@ -0,0 +1,48 @@ +From 97b909f852039daaae267a66f5df2c90ed05b586 Mon Sep 17 00:00:00 2001 +From: David Gibson +Date: Wed, 11 Jan 2012 23:41:32 +1100 +Subject: [PATCH 3/7] libfdt: Activate testcase for appending properties + +Commit a31e3ef83bfce62d07695355e5f06cd4d0e44b86 introduced new libfdt +functions to append to existing properties. It also included a test case +for this, but neglected to update the Makefile and run_tests.sh script +to actually build and execute this testcase. + +This patch corrects the oversight. + +Signed-off-by: David Gibson +--- + tests/Makefile.tests | 1 + + tests/run_tests.sh | 4 ++++ + 2 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/tests/Makefile.tests b/tests/Makefile.tests +index 215a8c5..3f92074 100644 +--- a/tests/Makefile.tests ++++ b/tests/Makefile.tests +@@ -12,6 +12,7 @@ LIB_TESTS_L = get_mem_rsv \ + sw_tree1 \ + move_and_save mangle-layout nopulate \ + open_pack rw_tree1 set_name setprop del_property del_node \ ++ appendprop1 appendprop2 \ + string_escapes references path-references phandle_format \ + boot-cpuid incbin \ + extra-terminating-null \ +diff --git a/tests/run_tests.sh b/tests/run_tests.sh +index da6f970..c72b9d2 100755 +--- a/tests/run_tests.sh ++++ b/tests/run_tests.sh +@@ -178,6 +178,10 @@ libfdt_tests () { + run_test rw_tree1 + tree1_tests rw_tree1.test.dtb + tree1_tests_rw rw_tree1.test.dtb ++ run_test appendprop1 ++ run_test appendprop2 appendprop1.test.dtb ++ run_dtc_test -I dts -O dtb -o appendprop.test.dtb appendprop.dts ++ run_test dtbs_equal_ordered appendprop2.test.dtb appendprop.test.dtb + + for basetree in test_tree1.dtb sw_tree1.test.dtb rw_tree1.test.dtb; do + run_test nopulate $basetree +-- +1.7.8.3 + --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/19_dtc-Implement-d-option-to-write-out-a-dependency-fil.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/19_dtc-Implement-d-option-to-write-out-a-dependency-fil.patch @@ -0,0 +1,191 @@ +From 69df9f0de25db1c37970850115cdf48335d41802 Mon Sep 17 00:00:00 2001 +From: Stephen Warren +Date: Thu, 12 Jan 2012 11:31:00 -0700 +Subject: [PATCH 4/7] dtc: Implement -d option to write out a dependency file + +This will allow callers to rebuild .dtb files when any of the /include/d +.dtsi files are modified, not just the top-level .dts file. + +Signed-off-by: Stephen Warren +Acked-by: David Gibson +--- + Documentation/manual.txt | 3 +++ + dtc.c | 20 +++++++++++++++++++- + srcpos.c | 4 ++++ + srcpos.h | 1 + + tests/dependencies.cmp | 1 + + tests/dependencies.dts | 6 ++++++ + tests/deps_inc1.dtsi | 1 + + tests/deps_inc2.dtsi | 1 + + tests/run_tests.sh | 4 ++++ + 9 files changed, 40 insertions(+), 1 deletions(-) + create mode 100644 tests/dependencies.cmp + create mode 100644 tests/dependencies.dts + create mode 100644 tests/deps_inc1.dtsi + create mode 100644 tests/deps_inc2.dtsi + +diff --git a/Documentation/manual.txt b/Documentation/manual.txt +index 14508f3..989c589 100644 +--- a/Documentation/manual.txt ++++ b/Documentation/manual.txt +@@ -106,6 +106,9 @@ Options: + -O + The generated output format, as listed above. + ++ -d ++ Generate a dependency file during compilation. ++ + -q + Quiet: -q suppress warnings, -qq errors, -qqq all + +diff --git a/dtc.c b/dtc.c +index 15d2fc2..7a0c605 100644 +--- a/dtc.c ++++ b/dtc.c +@@ -71,6 +71,7 @@ static void __attribute__ ((noreturn)) usage(void) + fprintf(stderr, "\t\t\tasm - assembler source\n"); + fprintf(stderr, "\t-V \n"); + fprintf(stderr, "\t\tBlob version to produce, defaults to %d (relevant for dtb\n\t\tand asm output only)\n", DEFAULT_FDT_VERSION); ++ fprintf(stderr, "\t-d \n"); + fprintf(stderr, "\t-R \n"); + fprintf(stderr, "\t\tMake space for reserve map entries (relevant for \n\t\tdtb and asm output only)\n"); + fprintf(stderr, "\t-S \n"); +@@ -99,6 +100,7 @@ int main(int argc, char *argv[]) + const char *inform = "dts"; + const char *outform = "dts"; + const char *outname = "-"; ++ const char *depname = NULL; + int force = 0, sort = 0; + const char *arg; + int opt; +@@ -111,7 +113,7 @@ int main(int argc, char *argv[]) + minsize = 0; + padsize = 0; + +- while ((opt = getopt(argc, argv, "hI:O:o:V:R:S:p:fqb:vH:s")) != EOF) { ++ while ((opt = getopt(argc, argv, "hI:O:o:V:d:R:S:p:fqb:vH:s")) != EOF) { + switch (opt) { + case 'I': + inform = optarg; +@@ -125,6 +127,9 @@ int main(int argc, char *argv[]) + case 'V': + outversion = strtol(optarg, NULL, 0); + break; ++ case 'd': ++ depname = optarg; ++ break; + case 'R': + reservenum = strtol(optarg, NULL, 0); + break; +@@ -185,6 +190,14 @@ int main(int argc, char *argv[]) + fprintf(stderr, "DTC: %s->%s on file \"%s\"\n", + inform, outform, arg); + ++ if (depname) { ++ depfile = fopen(depname, "w"); ++ if (!depfile) ++ die("Couldn't open dependency file %s: %s\n", depname, ++ strerror(errno)); ++ fprintf(depfile, "%s:", outname); ++ } ++ + if (streq(inform, "dts")) + bi = dt_from_source(arg); + else if (streq(inform, "fs")) +@@ -194,6 +207,11 @@ int main(int argc, char *argv[]) + else + die("Unknown input format \"%s\"\n", inform); + ++ if (depfile) { ++ fputc('\n', depfile); ++ fclose(depfile); ++ } ++ + if (cmdline_boot_cpuid != -1) + bi->boot_cpuid_phys = cmdline_boot_cpuid; + +diff --git a/srcpos.c b/srcpos.c +index 2dbc874..36a38e9 100644 +--- a/srcpos.c ++++ b/srcpos.c +@@ -40,6 +40,7 @@ static char *dirname(const char *path) + return NULL; + } + ++FILE *depfile; /* = NULL */ + struct srcfile_state *current_srcfile; /* = NULL */ + + /* Detect infinite include recursion. */ +@@ -67,6 +68,9 @@ FILE *srcfile_relative_open(const char *fname, char **fullnamep) + strerror(errno)); + } + ++ if (depfile) ++ fprintf(depfile, " %s", fullname); ++ + if (fullnamep) + *fullnamep = fullname; + else +diff --git a/srcpos.h b/srcpos.h +index bd7966e..ce980ca 100644 +--- a/srcpos.h ++++ b/srcpos.h +@@ -30,6 +30,7 @@ struct srcfile_state { + struct srcfile_state *prev; + }; + ++extern FILE *depfile; /* = NULL */ + extern struct srcfile_state *current_srcfile; /* = NULL */ + + FILE *srcfile_relative_open(const char *fname, char **fullnamep); +diff --git a/tests/dependencies.cmp b/tests/dependencies.cmp +new file mode 100644 +index 0000000..bcd9432 +--- /dev/null ++++ b/tests/dependencies.cmp +@@ -0,0 +1 @@ ++dependencies.test.dtb: dependencies.dts deps_inc1.dtsi deps_inc2.dtsi +diff --git a/tests/dependencies.dts b/tests/dependencies.dts +new file mode 100644 +index 0000000..2cfe31b +--- /dev/null ++++ b/tests/dependencies.dts +@@ -0,0 +1,6 @@ ++/dts-v1/; ++ ++/include/ "deps_inc1.dtsi" ++ ++/ { ++}; +diff --git a/tests/deps_inc1.dtsi b/tests/deps_inc1.dtsi +new file mode 100644 +index 0000000..5c607dc +--- /dev/null ++++ b/tests/deps_inc1.dtsi +@@ -0,0 +1 @@ ++/include/ "deps_inc2.dtsi" +diff --git a/tests/deps_inc2.dtsi b/tests/deps_inc2.dtsi +new file mode 100644 +index 0000000..710cecc +--- /dev/null ++++ b/tests/deps_inc2.dtsi +@@ -0,0 +1 @@ ++/* Empty */ +diff --git a/tests/run_tests.sh b/tests/run_tests.sh +index c72b9d2..e42154b 100755 +--- a/tests/run_tests.sh ++++ b/tests/run_tests.sh +@@ -357,6 +357,10 @@ dtc_tests () { + run_sh_test dtc-fatal.sh -I dts -O dtb nosuchfile.dts + run_sh_test dtc-fatal.sh -I dtb -O dtb nosuchfile.dtb + run_sh_test dtc-fatal.sh -I fs -O dtb nosuchfile ++ ++ # Dependencies ++ run_dtc_test -I dts -O dtb -o dependencies.test.dtb -d dependencies.test.d dependencies.dts ++ run_wrap_test cmp dependencies.test.d dependencies.cmp + } + + cmp_tests () { +-- +1.7.8.3 + --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/20_Add-fdtget-utility-to-read-property-values-from-a-de.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/20_Add-fdtget-utility-to-read-property-values-from-a-de.patch @@ -0,0 +1,486 @@ +From 68d057f20d7c3a93b441d2892c4749392bc83b45 Mon Sep 17 00:00:00 2001 +From: Simon Glass +Date: Sat, 21 Jan 2012 10:14:47 -0800 +Subject: [PATCH 5/7] Add fdtget utility to read property values from a device + tree + +This simply utility makes it easy for scripts to read values from the device +tree. It is written in C and uses the same libfdt as the rest of the dtc +package. + +What is it for: +- Reading fdt values from scripts +- Extracting fdt information within build systems +- Looking at particular values without having to dump the entire tree + +To use it, specify the fdt binary file on command line followed by a list of +node, property pairs. The utility then looks up each node, finds the property +and displays the value. + +Each value is printed on a new line. + +fdtget tries to guess the type of each property based on its contents. This +is not always reliable, so you can use the -t option to force fdtget to decode +the value as a string, or byte, etc. + +To read from stdin, use - as the file. + +Usage: + fdtget
[ ]... +Options: + -t Type of data + -h Print this help + + s=string, i=int, u=unsigned, x=hex + Optional modifier prefix: + hh or b=byte, h=2 byte, l=4 byte (default) + +Signed-off-by: Simon Glass +--- + .gitignore | 1 + + Makefile | 4 + + Makefile.utils | 7 ++ + fdtget.c | 226 +++++++++++++++++++++++++++++++++++++++++++++++ + tests/fdtget-runtest.sh | 35 +++++++ + tests/run_tests.sh | 43 +++++++++- + tests/tests.sh | 1 + + util.h | 10 ++ + 8 files changed, 326 insertions(+), 1 deletions(-) + create mode 100644 fdtget.c + create mode 100755 tests/fdtget-runtest.sh + +diff --git a/.gitignore b/.gitignore +index 74714cd..2d82b71 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -10,3 +10,4 @@ lex.yy.c + /fdtdump + /convert-dtsv0 + /version_gen.h ++/fdtget +diff --git a/Makefile b/Makefile +index 4582f5d..a54a209 100644 +--- a/Makefile ++++ b/Makefile +@@ -110,6 +110,7 @@ include Makefile.utils + BIN += convert-dtsv0 + BIN += dtc + BIN += fdtdump ++BIN += fdtget + + SCRIPTS = dtdiff + +@@ -120,6 +121,7 @@ ifneq ($(DEPTARGETS),) + -include $(DTC_OBJS:%.o=%.d) + -include $(CONVERT_OBJS:%.o=%.d) + -include $(FDTDUMP_OBJS:%.o=%.d) ++-include $(FDTGET_OBJS:%.o=%.d) + endif + + +@@ -180,6 +182,8 @@ convert-dtsv0: $(CONVERT_OBJS) + + fdtdump: $(FDTDUMP_OBJS) + ++fdtget: $(FDTGET_OBJS) $(LIBFDT_archive) ++ + + # + # Testsuite rules +diff --git a/Makefile.utils b/Makefile.utils +index fae5b00..38efa3c 100644 +--- a/Makefile.utils ++++ b/Makefile.utils +@@ -8,3 +8,10 @@ FDTDUMP_SRCS = \ + util.c + + FDTDUMP_OBJS = $(FDTDUMP_SRCS:%.c=%.o) ++ ++ ++FDTGET_SRCS = \ ++ fdtget.c \ ++ util.c ++ ++FDTGET_OBJS = $(FDTGET_SRCS:%.c=%.o) +diff --git a/fdtget.c b/fdtget.c +new file mode 100644 +index 0000000..48ab615 +--- /dev/null ++++ b/fdtget.c +@@ -0,0 +1,226 @@ ++/* ++ * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include "util.h" ++ ++/* Holds information which controls our output and options */ ++struct display_info { ++ int type; /* data type (s/i/u/x or 0 for default) */ ++ int size; /* data size (1/2/4) */ ++}; ++ ++static void report_error(const char *where, int err) ++{ ++ fprintf(stderr, "Error at '%s': %s\n", where, fdt_strerror(err)); ++} ++ ++/** ++ * Displays data of a given length according to selected options ++ * ++ * If a specific data type is provided in disp, then this is used. Otherwise ++ * we try to guess the data type / size from the contents. ++ * ++ * @param disp Display information / options ++ * @param data Data to display ++ * @param len Maximum length of buffer ++ * @return 0 if ok, -1 if data does not match format ++ */ ++static int show_data(struct display_info *disp, const char *data, int len) ++{ ++ int i, size; ++ const uint8_t *p = (const uint8_t *)data; ++ const char *s; ++ int value; ++ int is_string; ++ char fmt[3]; ++ ++ /* no data, don't print */ ++ if (len == 0) ++ return 0; ++ ++ is_string = (disp->type) == 's' || ++ (!disp->type && util_is_printable_string(data, len)); ++ if (is_string) { ++ if (data[len - 1] != '\0') { ++ fprintf(stderr, "Unterminated string\n"); ++ return -1; ++ } ++ for (s = data; s - data < len; s += strlen(s) + 1) { ++ if (s != data) ++ printf(" "); ++ printf("%s", (const char *)s); ++ } ++ return 0; ++ } ++ size = disp->size; ++ if (size == -1) ++ size = (len % 4) == 0 ? 4 : 1; ++ else if (len % size) { ++ fprintf(stderr, "Property length must be a multiple of " ++ "selected data size\n"); ++ return -1; ++ } ++ fmt[0] = '%'; ++ fmt[1] = disp->type ? disp->type : 'd'; ++ fmt[2] = '\0'; ++ for (i = 0; i < len; i += size, p += size) { ++ if (i) ++ printf(" "); ++ value = size == 4 ? fdt32_to_cpu(*(const uint32_t *)p) : ++ size == 2 ? (*p << 8) | p[1] : *p; ++ printf(fmt, value); ++ } ++ return 0; ++} ++ ++/** ++ * Show the data for a given node (and perhaps property) according to the ++ * display option provided. ++ * ++ * @param blob FDT blob ++ * @param disp Display information / options ++ * @param node Node to display ++ * @param property Name of property to display, or NULL if none ++ * @return 0 if ok, -ve on error ++ */ ++static int show_data_for_item(const void *blob, struct display_info *disp, ++ int node, const char *property) ++{ ++ const void *value = NULL; ++ int len, err = 0; ++ ++ value = fdt_getprop(blob, node, property, &len); ++ if (value) { ++ if (show_data(disp, value, len)) ++ err = -1; ++ else ++ printf("\n"); ++ } else { ++ report_error(property, len); ++ err = -1; ++ } ++ return err; ++} ++ ++/** ++ * Run the main fdtget operation, given a filename and valid arguments ++ * ++ * @param disp Display information / options ++ * @param filename Filename of blob file ++ * @param arg List of arguments to process ++ * @param arg_count Number of arguments ++ * @param return 0 if ok, -ve on error ++ */ ++static int do_fdtget(struct display_info *disp, const char *filename, ++ char **arg, int arg_count) ++{ ++ char *blob; ++ int i, node; ++ ++ blob = utilfdt_read(filename); ++ if (!blob) ++ return -1; ++ ++ for (i = 0; i + 2 <= arg_count; i += 2) { ++ node = fdt_path_offset(blob, arg[0]); ++ if (node < 0) { ++ report_error(arg[0], node); ++ return -1; ++ } ++ ++ if (show_data_for_item(blob, disp, node, arg[1])) ++ return -1; ++ } ++ return 0; ++} ++ ++static const char *usage_msg = ++ "fdtget - read values from device tree\n" ++ "\n" ++ "Each value is printed on a new line.\n\n" ++ "Usage:\n" ++ " fdtget
[ ]...\n" ++ "Options:\n" ++ "\t-t \tType of data\n" ++ "\t-h\t\tPrint this help\n\n" ++ USAGE_TYPE_MSG; ++ ++static void usage(const char *msg) ++{ ++ if (msg) ++ fprintf(stderr, "Error: %s\n\n", msg); ++ ++ fprintf(stderr, "%s", usage_msg); ++ exit(2); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ char *filename = NULL; ++ struct display_info disp; ++ ++ /* set defaults */ ++ memset(&disp, '\0', sizeof(disp)); ++ disp.size = -1; ++ for (;;) { ++ int c = getopt(argc, argv, "ht:"); ++ if (c == -1) ++ break; ++ ++ switch (c) { ++ case 'h': ++ case '?': ++ usage(NULL); ++ ++ case 't': ++ if (utilfdt_decode_type(optarg, &disp.type, ++ &disp.size)) ++ usage("Invalid type string"); ++ break; ++ } ++ } ++ ++ if (optind < argc) ++ filename = argv[optind++]; ++ if (!filename) ++ usage("Missing filename"); ++ ++ argv += optind; ++ argc -= optind; ++ ++ /* Allow no arguments, and silently succeed */ ++ if (!argc) ++ return 0; ++ ++ /* Check for node, property arguments */ ++ if (argc % 2) ++ usage("Must have an even number of arguments"); ++ ++ if (do_fdtget(&disp, filename, argv, argc)) ++ return 1; ++ return 0; ++} +diff --git a/tests/fdtget-runtest.sh b/tests/fdtget-runtest.sh +new file mode 100755 +index 0000000..f38184f +--- /dev/null ++++ b/tests/fdtget-runtest.sh +@@ -0,0 +1,35 @@ ++#! /bin/sh ++ ++. ./tests.sh ++ ++LOG="tmp.log.$$" ++EXPECT="tmp.expect.$$" ++ ++rm -f $TMPFILE $LOG ++ ++expect="$1" ++echo "$expect" >$EXPECT ++shift ++ ++verbose_run_log "$LOG" $VALGRIND "$DTGET" "$@" ++ret="$?" ++ ++if [ "$ret" -ne 0 -a "$expect" = "ERR" ]; then ++ PASS ++fi ++ ++if [ "$ret" -gt 127 ]; then ++ signame=$(kill -l $[ret - 128]) ++ FAIL "Killed by SIG$signame" ++fi ++ ++diff $EXPECT $LOG ++ret="$?" ++ ++rm -f $LOG $EXPECT ++ ++if [ "$ret" -eq 0 ]; then ++ PASS ++else ++ FAIL ++fi +diff --git a/tests/run_tests.sh b/tests/run_tests.sh +index e42154b..e6184df 100755 +--- a/tests/run_tests.sh ++++ b/tests/run_tests.sh +@@ -83,6 +83,13 @@ asm_to_so_test () { + run_wrap_test asm_to_so "$@" + } + ++run_fdtget_test () { ++ # run_fdtget_test name expected_output dtb_file args... ++ echo -n "$1: " ++ shift ++ base_run_test sh fdtget-runtest.sh "$@" ++} ++ + tree1_tests () { + TREE=$1 + +@@ -402,6 +409,37 @@ dtbs_equal_tests () { + cmp_tests test_tree1.dtb $WRONG_TREE1 + } + ++fdtget_tests () { ++ file=label01.dtb ++ $DTC -O dtb -o $file ${file%.dtb}.dts 2>/dev/null ++ ++ # run_fdtget_test ... ++ run_fdtget_test "Simple string" "MyBoardName" $file / model ++ run_fdtget_test "Multiple string i" "77 121 66 111 \ ++97 114 100 78 97 109 101 0 77 121 66 111 97 114 100 70 97 109 105 \ ++108 121 78 97 109 101 0" $file / compatible ++ run_fdtget_test "Multiple string s" "MyBoardName MyBoardFamilyName" \ ++ -t s $file / compatible ++ run_fdtget_test "Integer" "32768" $file /cpus/PowerPC,970@1 d-cache-size ++ run_fdtget_test "Integer hex" "8000" -tx $file \ ++ /cpus/PowerPC,970@1 d-cache-size ++ run_fdtget_test "Integer list" "61 62 63 0" -tbx $file \ ++ /randomnode tricky1 ++ run_fdtget_test "Byte list short" "a b c d de ea ad be ef" -tbx \ ++ $file /randomnode blob ++ ++ # Here the property size is not a multiple of 4 bytes, so it should fail ++ run_fdtget_test "Integer list invalid" ERR -tlx \ ++ $file /randomnode mixed ++ run_fdtget_test "Integer list halfword" "6162 6300 1234 0 a 0 b 0 c" -thx \ ++ $file /randomnode mixed ++ run_fdtget_test "Integer list byte" \ ++ "61 62 63 0 12 34 0 0 0 a 0 0 0 b 0 0 0 c" -thhx \ ++ $file /randomnode mixed ++ run_fdtget_test "Missing property" ERR -ts \ ++ $file /randomnode doctor-who ++} ++ + utilfdt_tests () { + run_test utilfdt_test + } +@@ -421,7 +459,7 @@ while getopts "vt:m" ARG ; do + done + + if [ -z "$TESTSETS" ]; then +- TESTSETS="libfdt utilfdt dtc dtbs_equal" ++ TESTSETS="libfdt utilfdt dtc dtbs_equal fdtget" + fi + + # Make sure we don't have stale blobs lying around +@@ -441,6 +479,9 @@ for set in $TESTSETS; do + "dtbs_equal") + dtbs_equal_tests + ;; ++ "fdtget") ++ fdtget_tests ++ ;; + esac + done + +diff --git a/tests/tests.sh b/tests/tests.sh +index 30ffead..d9a0524 100644 +--- a/tests/tests.sh ++++ b/tests/tests.sh +@@ -11,6 +11,7 @@ FAIL () { + } + + DTC=../dtc ++DTGET=../fdtget + + verbose_run () { + if [ -z "$QUIET_TEST" ]; then +diff --git a/util.h b/util.h +index 730918e..c8eb45d 100644 +--- a/util.h ++++ b/util.h +@@ -140,4 +140,14 @@ int utilfdt_write_err(const char *filename, const void *blob); + */ + int utilfdt_decode_type(const char *fmt, int *type, int *size); + ++/* ++ * This is a usage message fragment for the -t option. It is the format ++ * supported by utilfdt_decode_type. ++ */ ++ ++#define USAGE_TYPE_MSG \ ++ "\ts=string, i=int, u=unsigned, x=hex\n" \ ++ "\tOptional modifier prefix:\n" \ ++ "\t\thh or b=byte, h=2 byte, l=4 byte (default)\n"; ++ + #endif /* _UTIL_H */ +-- +1.7.8.3 + --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/21_Add-fdtput-utility-to-write-property-values-to-a-dev.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/21_Add-fdtput-utility-to-write-property-values-to-a-dev.patch @@ -0,0 +1,534 @@ +From 1ede50c3559bbfca79fadcbfd8acb9388f4aac87 Mon Sep 17 00:00:00 2001 +From: Simon Glass +Date: Sat, 21 Jan 2012 10:14:48 -0800 +Subject: [PATCH 6/7] Add fdtput utility to write property values to a device + tree + +This simple utility allows writing of values into a device tree from the +command line. It aimes to be the opposite of fdtget. + +What is it for: +- Updating fdt values when a binary blob already exists + (even though source may be available it might be easier to use this + utility rather than sed, etc.) +- Writing machine-specific fdt values within a build system + +To use it, specify the fdt binary file on command line followed by the node +and property to set. Then, provide a list of values to put into that +property. Often there will be just one, but fdtput also supports arrays and +string lists. + +fdtput does not try to guess the type of the property based on looking at +the arguments. Instead it always assumes that an integer is provided. To +indicate that you want to write a string, use -ts. You can also provide +hex values with -tx. + +The command line arguments are joined together into a single value. For +strings, a nul terminator is placed between each string when it is packed +into the property. To avoid this, pass the string as a single argument. + +Usage: + fdtput
< [...] +Options: + -t Type of data + -v Verbose: display each value decoded from command line + -h Print this help + + s=string, i=int, u=unsigned, x=hex + Optional modifier prefix: + hh or b=byte, h=2 byte, l=4 byte (default) + +To read from stdin and write to stdout, use - as the file. So you can do: + +cat somefile.dtb | fdtput -ts - /node prop "My string value" > newfile.dtb + +This commit also adds basic tests to verify the major features. + +Signed-off-by: Simon Glass +--- + .gitignore | 1 + + Makefile | 4 + + Makefile.utils | 7 ++ + fdtput.c | 235 +++++++++++++++++++++++++++++++++++++++++++++++ + tests/fdtput-runtest.sh | 55 +++++++++++ + tests/run_tests.sh | 73 ++++++++++++++- + tests/tests.sh | 1 + + 7 files changed, 375 insertions(+), 1 deletions(-) + create mode 100644 fdtput.c + create mode 100644 tests/fdtput-runtest.sh + +diff --git a/.gitignore b/.gitignore +index 2d82b71..5074980 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -11,3 +11,4 @@ lex.yy.c + /convert-dtsv0 + /version_gen.h + /fdtget ++/fdtput +diff --git a/Makefile b/Makefile +index a54a209..510caa6 100644 +--- a/Makefile ++++ b/Makefile +@@ -111,6 +111,7 @@ BIN += convert-dtsv0 + BIN += dtc + BIN += fdtdump + BIN += fdtget ++BIN += fdtput + + SCRIPTS = dtdiff + +@@ -122,6 +123,7 @@ ifneq ($(DEPTARGETS),) + -include $(CONVERT_OBJS:%.o=%.d) + -include $(FDTDUMP_OBJS:%.o=%.d) + -include $(FDTGET_OBJS:%.o=%.d) ++-include $(FDTPUT_OBJS:%.o=%.d) + endif + + +@@ -184,6 +186,8 @@ fdtdump: $(FDTDUMP_OBJS) + + fdtget: $(FDTGET_OBJS) $(LIBFDT_archive) + ++fdtput: $(FDTPUT_OBJS) $(LIBFDT_archive) ++ + + # + # Testsuite rules +diff --git a/Makefile.utils b/Makefile.utils +index 38efa3c..48ece49 100644 +--- a/Makefile.utils ++++ b/Makefile.utils +@@ -15,3 +15,10 @@ FDTGET_SRCS = \ + util.c + + FDTGET_OBJS = $(FDTGET_SRCS:%.c=%.o) ++ ++ ++FDTPUT_SRCS = \ ++ fdtput.c \ ++ util.c ++ ++FDTPUT_OBJS = $(FDTPUT_SRCS:%.c=%.o) +diff --git a/fdtput.c b/fdtput.c +new file mode 100644 +index 0000000..f6ebd24 +--- /dev/null ++++ b/fdtput.c +@@ -0,0 +1,235 @@ ++/* ++ * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include "util.h" ++ ++struct display_info { ++ int type; /* data type (s/i/u/x or 0 for default) */ ++ int size; /* data size (1/2/4) */ ++ int verbose; /* verbose output */ ++}; ++ ++static void report_error(const char *where, int err) ++{ ++ fprintf(stderr, "Error at '%s': %s\n", where, fdt_strerror(err)); ++} ++ ++/** ++ * Encode a series of arguments in a property value. ++ * ++ * @param disp Display information / options ++ * @param arg List of arguments from command line ++ * @param arg_count Number of arguments (may be 0) ++ * @param valuep Returns buffer containing value ++ * @param *value_len Returns length of value encoded ++ */ ++static int encode_value(struct display_info *disp, char **arg, int arg_count, ++ char **valuep, int *value_len) ++{ ++ char *value = NULL; /* holding area for value */ ++ int value_size = 0; /* size of holding area */ ++ char *ptr; /* pointer to current value position */ ++ int len; /* length of this cell/string/byte */ ++ int ival; ++ int upto; /* the number of bytes we have written to buf */ ++ char fmt[3]; ++ ++ upto = 0; ++ ++ if (disp->verbose) ++ fprintf(stderr, "Decoding value:\n"); ++ ++ fmt[0] = '%'; ++ fmt[1] = disp->type ? disp->type : 'd'; ++ fmt[2] = '\0'; ++ for (; arg_count > 0; arg++, arg_count--, upto += len) { ++ /* assume integer unless told otherwise */ ++ if (disp->type == 's') ++ len = strlen(*arg) + 1; ++ else ++ len = disp->size == -1 ? 4 : disp->size; ++ ++ /* enlarge our value buffer by a suitable margin if needed */ ++ if (upto + len > value_size) { ++ value_size = (upto + len) + 500; ++ value = realloc(value, value_size); ++ if (!value) { ++ fprintf(stderr, "Out of mmory: cannot alloc " ++ "%d bytes\n", value_size); ++ return -1; ++ } ++ } ++ ++ ptr = value + upto; ++ if (disp->type == 's') { ++ memcpy(ptr, *arg, len); ++ if (disp->verbose) ++ fprintf(stderr, "\tstring: '%s'\n", ptr); ++ } else { ++ int *iptr = (int *)ptr; ++ sscanf(*arg, fmt, &ival); ++ if (len == 4) ++ *iptr = cpu_to_fdt32(ival); ++ else ++ *ptr = (uint8_t)ival; ++ if (disp->verbose) { ++ fprintf(stderr, "\t%s: %d\n", ++ disp->size == 1 ? "byte" : ++ disp->size == 2 ? "short" : "int", ++ ival); ++ } ++ } ++ } ++ *value_len = upto; ++ *valuep = value; ++ if (disp->verbose) ++ fprintf(stderr, "Value size %d\n", upto); ++ return 0; ++} ++ ++static int store_key_value(void *blob, const char *node_name, ++ const char *property, const char *buf, int len) ++{ ++ int node; ++ int err; ++ ++ node = fdt_path_offset(blob, node_name); ++ if (node < 0) { ++ report_error(node_name, node); ++ return -1; ++ } ++ ++ err = fdt_setprop(blob, node, property, buf, len); ++ if (err) { ++ report_error(property, err); ++ return -1; ++ } ++ return 0; ++} ++ ++static int do_fdtput(struct display_info *disp, const char *filename, ++ char **arg, int arg_count) ++{ ++ char *value; ++ char *blob; ++ int len, ret = 0; ++ ++ blob = utilfdt_read(filename); ++ if (!blob) ++ return -1; ++ ++ /* convert the arguments into a single binary value, then store */ ++ assert(arg_count >= 2); ++ if (encode_value(disp, arg + 2, arg_count - 2, &value, &len) || ++ store_key_value(blob, *arg, arg[1], value, len)) ++ ret = -1; ++ ++ if (!ret) ++ ret = utilfdt_write(filename, blob); ++ ++ free(blob); ++ return ret; ++} ++ ++static const char *usage_msg = ++ "fdtput - write a property value to a device tree\n" ++ "\n" ++ "The command line arguments are joined together into a single value.\n" ++ "\n" ++ "Usage:\n" ++ " fdtput
< [...]\n" ++ "Options:\n" ++ "\t-t \tType of data\n" ++ "\t-v\t\tVerbose: display each value decoded from command line\n" ++ "\t-h\t\tPrint this help\n\n" ++ USAGE_TYPE_MSG; ++ ++static void usage(const char *msg) ++{ ++ if (msg) ++ fprintf(stderr, "Error: %s\n\n", msg); ++ ++ fprintf(stderr, "%s", usage_msg); ++ exit(2); ++} ++ ++int main(int argc, char *argv[]) ++{ ++ struct display_info disp; ++ char *filename = NULL; ++ ++ memset(&disp, '\0', sizeof(disp)); ++ disp.size = -1; ++ for (;;) { ++ int c = getopt(argc, argv, "ht:v"); ++ if (c == -1) ++ break; ++ ++ /* ++ * TODO: add options to: ++ * - delete property ++ * - delete node (optionally recursively) ++ * - rename node ++ * - pack fdt before writing ++ * - set amount of free space when writing ++ * - expand fdt if value doesn't fit ++ */ ++ switch (c) { ++ case 'h': ++ case '?': ++ usage(NULL); ++ ++ case 't': ++ if (utilfdt_decode_type(optarg, &disp.type, ++ &disp.size)) ++ usage("Invalid type string"); ++ break; ++ ++ case 'v': ++ disp.verbose = 1; ++ break; ++ } ++ } ++ ++ if (optind < argc) ++ filename = argv[optind++]; ++ if (!filename) ++ usage("Missing filename"); ++ ++ argv += optind; ++ argc -= optind; ++ ++ if (argc < 1) ++ usage("Missing node"); ++ if (argc < 2) ++ usage("Missing property"); ++ ++ if (do_fdtput(&disp, filename, argv, argc)) ++ return 1; ++ return 0; ++} +diff --git a/tests/fdtput-runtest.sh b/tests/fdtput-runtest.sh +new file mode 100644 +index 0000000..ea51569 +--- /dev/null ++++ b/tests/fdtput-runtest.sh +@@ -0,0 +1,55 @@ ++#! /bin/sh ++ ++# Run script for fdtput tests ++# We run fdtput to update the device tree, thn fdtget to check it ++ ++# Usage ++# fdtput-runtest.sh name expected_output dtb_file node property flags value ++ ++. ./tests.sh ++ ++LOG="tmp.log.$$" ++EXPECT="tmp.expect.$$" ++ ++rm -f $TMPFILE $LOG ++ ++expect="$1" ++echo "$expect" >$EXPECT ++dtb="$2" ++node="$3" ++property="$4" ++flags="$5" ++shift 5 ++value="$@" ++ ++# First run fdtput ++verbose_run $VALGRIND "$DTPUT" "$dtb" "$node" "$property" $value $flags ++ret="$?" ++ ++if [ "$ret" -ne 0 -a "$expect" = "ERR" ]; then ++ PASS ++fi ++if [ "$ret" -gt 127 ]; then ++ signame=$(kill -l $[ret - 128]) ++ FAIL "Killed by SIG$signame" ++fi ++ ++# Now fdtget to read the value ++verbose_run_log "$LOG" $VALGRIND "$DTGET" "$dtb" "$node" "$property" $flags ++ret="$?" ++ ++if [ "$ret" -gt 127 ]; then ++ signame=$(kill -l $[ret - 128]) ++ FAIL "Killed by SIG$signame" ++fi ++ ++diff $EXPECT $LOG ++ret="$?" ++ ++rm -f $LOG $EXPECT ++ ++if [ "$ret" -eq 0 ]; then ++ PASS ++else ++ FAIL ++fi +diff --git a/tests/run_tests.sh b/tests/run_tests.sh +index e6184df..2650559 100755 +--- a/tests/run_tests.sh ++++ b/tests/run_tests.sh +@@ -90,6 +90,21 @@ run_fdtget_test () { + base_run_test sh fdtget-runtest.sh "$@" + } + ++run_fdtput_test () { ++ # run_fdtput_test name expected_output dtb_file node property flags value... ++ echo -n "$1: " ++ shift ++ output="$1" ++ dtb="$2" ++ node="$3" ++ property="$4" ++ flags="$5" ++ shift 5 ++ base_run_test sh fdtput-runtest.sh "$output" "$dtb" "$node" "$property" \ ++ "$flags" $@ ++# base_run_test sh fdtput-runtest.sh "$@" ++} ++ + tree1_tests () { + TREE=$1 + +@@ -440,6 +455,59 @@ fdtget_tests () { + $file /randomnode doctor-who + } + ++fdtput_tests () { ++ file=label01.dtb ++ src=label01.dts ++ ++ # Create some test files containing useful strings ++ base=tmp.test0 ++ file1=tmp.test1 ++ file2=tmp.test2 ++ bigfile1=tmp.test3 ++ bigfile2=tmp.test4 ++ ++ # Filter out anything the shell might not like ++ cat $src | tr -d "'\"\n\;/\.\*{}\-" | tr -s "[:blank:]" " " >$base ++ ++ # Make two small files ++ head -5 $base >$file1 ++ cat $file1 | tr a-z A-Z | cut -c10-30 | sort -r >$file2 ++ ++ # and two larger ones ++ cat $base > $bigfile1 ++ tac $base | tr a-z A-Z | sort -r >$bigfile2 ++ ++ # Allow just enough space for both file1 and file2 ++ (( space = $(stat -c %s $file1) + $(stat -c %s $file2) )) ++ $DTC -O dtb -p $space -o $file ${file%.dtb}.dts 2>/dev/null ++ ++ # run_fdtput_test ++ # ... ++ run_fdtput_test "Simple string" "a_model" $file / model -ts "a_model" ++ run_fdtput_test "Multiple string s" "board1 board2" \ ++ $file / compatible -ts board1 board2 ++ run_fdtput_test "Single string with spaces" "board1 board2" \ ++ $file / compatible -ts "board1 board2" ++ run_fdtput_test "Integer" "32768" \ ++ $file /cpus/PowerPC,970@1 d-cache-size "" "32768" ++ run_fdtput_test "Integer hex" "8001" \ ++ $file /cpus/PowerPC,970@1 d-cache-size -tx 0x8001 ++ run_fdtput_test "Integer list" "2 3 12" \ ++ $file /randomnode tricky1 -tbi "02 003 12" ++ run_fdtput_test "Byte list short" "a b c ea ad be ef" \ ++ $file /randomnode blob -tbx "a b c ea ad be ef" ++ run_fdtput_test "Integer list short" "a0b0c0d deeaae ef000000" \ ++ $file /randomnode blob -tx "a0b0c0d deeaae ef000000" ++ run_fdtput_test "Large string list" "`cat $file1 $file2`" \ ++ $file /randomnode blob -ts "`cat $file1`" "`cat $file2`" ++ ++ # This should be larger than available space in the fdt ($space) ++ run_fdtput_test "Enormous string list" ERR \ ++ $file /randomnode blob -ts "`cat $bigfile1`" "`cat $bigfile2`" ++ ++ # TODO: Add tests for verbose mode? ++} ++ + utilfdt_tests () { + run_test utilfdt_test + } +@@ -459,7 +527,7 @@ while getopts "vt:m" ARG ; do + done + + if [ -z "$TESTSETS" ]; then +- TESTSETS="libfdt utilfdt dtc dtbs_equal fdtget" ++ TESTSETS="libfdt utilfdt dtc dtbs_equal fdtget fdtput" + fi + + # Make sure we don't have stale blobs lying around +@@ -482,6 +550,9 @@ for set in $TESTSETS; do + "fdtget") + fdtget_tests + ;; ++ "fdtput") ++ fdtput_tests ++ ;; + esac + done + +diff --git a/tests/tests.sh b/tests/tests.sh +index d9a0524..6e5e76a 100644 +--- a/tests/tests.sh ++++ b/tests/tests.sh +@@ -12,6 +12,7 @@ FAIL () { + + DTC=../dtc + DTGET=../fdtget ++DTPUT=../fdtput + + verbose_run () { + if [ -z "$QUIET_TEST" ]; then +-- +1.7.8.3 + --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/22_Introduce-TESTS_BIN-in-Makefiles-to-identify-tested-.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/22_Introduce-TESTS_BIN-in-Makefiles-to-identify-tested-.patch @@ -0,0 +1,52 @@ +From 1456da7e2d3054882b20c120d817096bea21571e Mon Sep 17 00:00:00 2001 +From: Jon Loeliger +Date: Sat, 21 Jan 2012 15:24:51 -0600 +Subject: [PATCH 7/7] Introduce ${TESTS_BIN} in Makefiles to identify tested + executables. + +--- + Makefile | 6 ++++++ + tests/Makefile.tests | 6 +++--- + 2 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index 510caa6..1169e6c 100644 +--- a/Makefile ++++ b/Makefile +@@ -193,6 +193,12 @@ fdtput: $(FDTPUT_OBJS) $(LIBFDT_archive) + # Testsuite rules + # + TESTS_PREFIX=tests/ ++ ++TESTS_BIN += dtc ++TESTS_BIN += convert-dtsv0 ++TESTS_BIN += fdtput ++TESTS_BIN += fdtget ++ + include tests/Makefile.tests + + # +diff --git a/tests/Makefile.tests b/tests/Makefile.tests +index 3f92074..2eee708 100644 +--- a/tests/Makefile.tests ++++ b/tests/Makefile.tests +@@ -65,13 +65,13 @@ tests_clean: + rm -f $(STD_CLEANFILES:%=$(TESTS_PREFIX)%) + rm -f $(TESTS_CLEANFILES) + +-check: tests dtc convert-dtsv0 ++check: tests ${TESTS_BIN} + cd $(TESTS_PREFIX); ./run_tests.sh + +-checkm: tests dtc convert-dtsv0 ++checkm: tests ${TESTS_BIN} + cd $(TESTS_PREFIX); ./run_tests.sh -m 2>&1 | tee vglog.$$$$ + +-checkv: tests dtc convert-dtsv0 ++checkv: tests ${TESTS_BIN} + cd $(TESTS_PREFIX); ./run_tests.sh -v + + ifneq ($(DEPTARGETS),) +-- +1.7.8.3 + --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/local-add-missing-header-706137.patch +++ device-tree-compiler-1.4.0+dfsg/debian/patches/local-add-missing-header-706137.patch @@ -0,0 +1,19 @@ +Description: libfdt-dev: Missing header file prevents the library usage + device-tree-compiler (1.3.0-3) unstable; urgency=low + . + * libfdt-dev: Missing header file prevents the library usage + Thanks Domenico Andreoli (Closes: #706137) +Author: Hector Oron +Bug-Debian: http://bugs.debian.org/706137 + +--- device-tree-compiler-1.3.0.orig/libfdt/Makefile.libfdt ++++ device-tree-compiler-1.3.0/libfdt/Makefile.libfdt +@@ -4,7 +4,7 @@ + # be easily embeddable into other systems of Makefiles. + # + LIBFDT_soname = libfdt.$(SHAREDLIB_EXT).1 +-LIBFDT_INCLUDES = fdt.h libfdt.h ++LIBFDT_INCLUDES = fdt.h libfdt.h libfdt_env.h + LIBFDT_VERSION = version.lds + LIBFDT_SRCS = fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c + LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o) --- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/series +++ device-tree-compiler-1.4.0+dfsg/debian/patches/series @@ -0,0 +1,23 @@ +01_build_doc.patch +#02_remove-unused-check-variable.patch +#03_Remove-unused-variable-in-flat_read_mem_reserve.patch +#04_Split-out-is_printable_string-into-util.patch +#05_Add-missing-tests-to-gitignore.patch +#06_Refactor-character-literal-parsing-code.patch +#07_Remove-gcc-4.6-set-but-not-used-warnings.patch +#08_Support-character-literals-in-cell-lists.patch +#09_Create-Makefile_utils-and-move-ftdump-into-it.patch +#10_Add-fdt-read_write-utility-functions.patch +#11_Make-testutils-use-utilfdt.patch +#12_use-utilfdt-to-read-blob.patch +#13_Add-fdt16_to_cpu-utility-function.patch +#14_Add-data_append_integer-function.patch +#15_Add-support-for-variable-sized-elements.patch +#16_fdtdump-rename-from-ftdump.patch +#17_libfdt-Add-support-for-appending-the-values-to-a-exi.patch +#18_libfdt-Activate-testcase-for-appending-properties.patch +#19_dtc-Implement-d-option-to-write-out-a-dependency-fil.patch +#20_Add-fdtget-utility-to-read-property-values-from-a-de.patch +#21_Add-fdtput-utility-to-write-property-values-to-a-dev.patch +#22_Introduce-TESTS_BIN-in-Makefiles-to-identify-tested-.patch +#local-add-missing-header-706137.patch --- device-tree-compiler-1.4.0+dfsg.orig/debian/rules +++ device-tree-compiler-1.4.0+dfsg/debian/rules @@ -0,0 +1,73 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +export CFLAGS = -Wall -g -fPIC + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +build: build-arch build-indep +build-arch: build-stamp +build-indep: build-stamp +build-stamp: + dh_testdir + QUILT_PATCHES=debian/patches quilt push -a || test $$? = 2 + $(MAKE) CFLAGS="$(CFLAGS)" + $(MAKE) -C Documentation + touch build-stamp + +clean: clean1 +clean1: + dh_testdir + dh_testroot + rm -f build-stamp install-stamp + $(MAKE) clean + [ ! -f Documentation/Makefile ] || $(MAKE) -C Documentation clean + QUILT_PATCHES=debian/patches quilt pop -a -R || test $$? = 2 + rm -rf .pc + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp PREFIX=/usr LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH) + dh_install --list-missing --sourcedir=debian/tmp + touch install-stamp + +# Build architecture-independent files here. +binary-indep: build install + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs Documentation/dtc-paper.dvi Documentation/dtc-paper.ps \ + Documentation/dtc-paper.pdf Documentation/dtc-manual.txt + dh_installexamples + dh_installman debian/manpages/* + dh_link + dh_strip + dh_compress + dh_fixperms + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install --- device-tree-compiler-1.4.0+dfsg.orig/debian/source/format +++ device-tree-compiler-1.4.0+dfsg/debian/source/format @@ -0,0 +1 @@ +1.0