unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* GuixSD on ARM
@ 2016-07-12 11:19 Daniel Pimentel
  2016-07-13  6:55 ` Ricardo Wurmus
  0 siblings, 1 reply; 27+ messages in thread
From: Daniel Pimentel @ 2016-07-12 11:19 UTC (permalink / raw)
  To: guix-devel

Hi Guixs,

Guix run in ARM, but GuixSD not.

I'd like GuixSD on ARM plataform, for instance Libre Tea Computer Card 
or other ARM libre plataform.

I buy a Libre Tea Computer Card:
- https://www.crowdsupply.com/eoma68/micro-desktop
- http://retro-freedom.nz/blog/2016/06/30/eoma68-my-dream-machine/

Features Libre Tea Computer Card
- Compliant with the EOMA68 Specification
- A20 Dual-Core ARM Cortex A7, 1.2 GHz
- 2 GB RAM
- 8 GB NAND
- Micro-HDMI Interface (for 2nd monitor)
- Micro-USB-OTG (bi-directional power)
- Micro-SD Card Slot
- Pre-installed with Parabola GNU/Linux-libre Operating System (I'd like 
install GuixSD in soon)
- Respects Your Freedom (RYF) Certification from the Free Software 
Foundation (currently in progress with no known blockers)

Note: Help this project, it's cool and libre :)

-- 
Daniel Pimentel (aka d4n1)

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GuixSD on ARM
  2016-07-12 11:19 GuixSD on ARM Daniel Pimentel
@ 2016-07-13  6:55 ` Ricardo Wurmus
  2016-07-13  9:11   ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Danny Milosavljevic
                     ` (2 more replies)
  0 siblings, 3 replies; 27+ messages in thread
From: Ricardo Wurmus @ 2016-07-13  6:55 UTC (permalink / raw)
  To: Daniel Pimentel; +Cc: guix-devel


Hi Daniel,

> I'd like GuixSD on ARM plataform, for instance Libre Tea Computer Card 
> or other ARM libre plataform.
>
> I buy a Libre Tea Computer Card:
> - https://www.crowdsupply.com/eoma68/micro-desktop
> - http://retro-freedom.nz/blog/2016/06/30/eoma68-my-dream-machine/

I’m also very excited about this project and wish it to succeed, because
it is appalling and discouraging to see how little environmental
concerns are usually considered in tech.

It would be very nice to be able to use GuixSD on the EOMA68.  Alas, I
don’t have an overview on what work needs to be done to get there.

~~ Ricardo

^ permalink raw reply	[flat|nested] 27+ messages in thread

* ARM: Installation and Booting; was: Re: GuixSD on ARM;
  2016-07-13  6:55 ` Ricardo Wurmus
@ 2016-07-13  9:11   ` Danny Milosavljevic
  2016-07-13 22:22     ` Danny Milosavljevic
  2016-07-14 16:20     ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Andreas Enge
  2016-07-13 12:57   ` GuixSD on ARM Ludovic Courtès
  2016-07-19  1:47   ` Eric Bavier
  2 siblings, 2 replies; 27+ messages in thread
From: Danny Milosavljevic @ 2016-07-13  9:11 UTC (permalink / raw)
  To: Ricardo Wurmus, Daniel Pimentel, guix-devel

On Wed, 13 Jul 2016 08:55:23 +0200
Ricardo Wurmus <rekado@elephly.net> wrote:

> It would be very nice to be able to use GuixSD on the EOMA68.  Alas, I
> don’t have an overview on what work needs to be done to get there.

First, we'd need to get it to boot.

For example for the Allwinner A20 board:

Allwinner A20 boot process is:

- the boot ROM (which is Free Software - cool!) runs. 
- it checks whether a special "FEL" button is pressed. If so, it uses USB to "debug upload boot". Otherwise:
- it checks SD-card and then NAND availability
- it checks whether user wants to abort autoboot via USB keyboard or serial. If not:
- On the first available device, it loads (mainline) U-Boot SPL (which is Free Software)
- U-Boot sets up the DCDC voltages, RAM (!), display and USB
- U-Boot does what it is told in its config file - which is usually to load the Linux kernel and device tree file from somewhere to some fixed memory address and then jump to it.

So if we want GuixSD to work on it, we need U-Boot support.

U-Boot has a LOT of special cases for strange embedded hardware and I doubt it makes sense to duplicate it in Grub. So I'd just chainload Grub in U-Boot.

Also, one compiles U-Boot for a specific board - it's kinda like the Linux kernel config [actually, most of the drivers were copied from Linux and then cut down], just without module support. So there would need to be different packages maybe - like u-boot-a20-lime2, u-boot-a20-eoma68, u-boot-a20-... . Also, not sure whether the installer could in principle detect what it's running on - or copy the U-Boot config or entire U-Boot over from the boot media you used to run the installer with)

The U-Boot SPL is searched for at a fixed sector on the drive - that can make partitioning ... challenging. The first few times I accidentially overwrote U-Boot by just having gdisk start the partition at its default suggested sector.

The sectors are just after the master boot record and weird GPT-thingie. I'm leaving a gap there now and everything works fine. Maybe would make sense to make a dummy partition take up the space - I did not try it, though.

Also, while Allwinner A20 has SATA support, the EOMA board doesn't supply it because many other SOCs (which they want to use) don't have it. How is that future-proof?

If you do use SATA, you still need to put U-Boot on SD or the Flash. U-Boot has SATA support so it can load Grub etc from the hard drive.

In any case, setting this stuff up manually is not for the faint of heart. So it would be nice if an eventual GuixSD installer would do that, too - if we officially support ARM.

The Allwinner A20 is quite slow by today's standards. Not Raspberry Pi slow - but maybe 4 times as fast as it. Compiling useful things take a long time (read: Linux kernel takes days to compile). However, I think it's more trustworty than the usual x86_64-nobody-knows-what-it's-doing - so I still compile things directly on it, if possible.

Other ARM processors, including newer Allwinner ARM processors, are much faster. However, most ARM vendors dropped SATA support - which frankly makes me wonder how people are using this as a production (as opposed to consumption) machine - SD cards *will* break after some writing (mine broke after < 2 months).

The Flash is connected directly. So if you wrote to it regularily (I don't - I have a SATA drive for that), you'd have to make sure there's a wear-levelling layer. So either you use a special filesystem (ubifs etc). Or you use a wear-levelling driver (ubi) and then on top of that a filesystem with TRIM support.

The Allwinner Linux kernel doesn't support any of that (they have their own weird-ass NAND driver which exposes a block device which doesn't do any wear levelling) - however, the mainline Linux kernel supports everything on the A20 quite well - except G2D acceleration and video (as in movie) acceleration - both of which *have* been reverse engineered; just the mainline support isn't there yet.

Also, I disabled disk encryption because it's too slow to be usable.

That said, the board I have runs as a (home) server 24/7 for 1.5 years now without issues. In the mean time one x86_64 laptop broke and the second one has fan issues. So A20 (1) is slow but (2) is rock solid stable (3) needs no fan. Also I have a 2 TB hard drive on it which does 80 MB/s reading and 20 MB/s writing on that hardware.

It has Ethernet - but it depends on the board vendor whether you can store the MAC address in (custom) hardware or not. LIME2 has an EEPROM accessible via I2C for that. However, the default Linux Ethernet driver doesn't use it. Sigh. You basically are supposed to use i2c-tools to manually store it there or something. At that point I can just store it on the SD card :P

If you don't store the MAC address, it will use a random one every time it boots - that's bad for other network devices like switches, routers etc.

Also, many boards don't have an external RTC and don't supply battery power to the internal RTC. That means the computer's idea of time will be wrong and so SSL won't work. I usually use NTP to fix that (*). Not sure what EOMA68 does.

(*): in order to fix the time you need NTP. But ntpd will not correct times that are so far off. So you need to stop ntpd and run ntpdate and start ntpd. For that, network has to work. So you need to have read the MAC address manually, set up the network, ran ntpdate and then everything else. That means the default Debian systemd configuration is right out. I haven't got this to work automatically. [I use it as a server so it doesn't matter much to me to do that manually once a year or something]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GuixSD on ARM
  2016-07-13  6:55 ` Ricardo Wurmus
  2016-07-13  9:11   ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Danny Milosavljevic
@ 2016-07-13 12:57   ` Ludovic Courtès
  2016-07-19  1:47   ` Eric Bavier
  2 siblings, 0 replies; 27+ messages in thread
From: Ludovic Courtès @ 2016-07-13 12:57 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

Hi,

Ricardo Wurmus <rekado@elephly.net> skribis:

>> I'd like GuixSD on ARM plataform, for instance Libre Tea Computer Card 
>> or other ARM libre plataform.
>>
>> I buy a Libre Tea Computer Card:
>> - https://www.crowdsupply.com/eoma68/micro-desktop
>> - http://retro-freedom.nz/blog/2016/06/30/eoma68-my-dream-machine/
>
> I’m also very excited about this project and wish it to succeed, because
> it is appalling and discouraging to see how little environmental
> concerns are usually considered in tech.
>
> It would be very nice to be able to use GuixSD on the EOMA68.  Alas, I
> don’t have an overview on what work needs to be done to get there.

Essentially, we need to use a supported bootloader (U-Boot or GRUB)
and provide a kernel that works well.

Ludo’.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: ARM: Installation and Booting; was: Re: GuixSD on ARM;
  2016-07-13  9:11   ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Danny Milosavljevic
@ 2016-07-13 22:22     ` Danny Milosavljevic
  2016-07-14  7:12       ` Efraim Flashner
  2016-07-19 20:07       ` [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now Danny Milosavljevic
  2016-07-14 16:20     ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Andreas Enge
  1 sibling, 2 replies; 27+ messages in thread
From: Danny Milosavljevic @ 2016-07-13 22:22 UTC (permalink / raw)
  To: Ricardo Wurmus, Daniel Pimentel, guix-devel

Work-in-progress gnu/packages/u-boot.scm :

;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix 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 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages u-boot)
  #:use-module (guix download)
  #:use-module (guix packages)
  #:use-module ((guix licenses) #:select (gpl2))
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system trivial)
  #:use-module (gnu packages)
  #:use-module (gnu packages python)
  #:use-module (gnu packages bison) ; for DTC
  #:use-module (gnu packages flex) ; for DTC
  #:use-module (srfi srfi-1)
  #:use-module ((srfi srfi-1) #:select (last)))

;; FIXME move somewhere more fitting
;; FIXME add https://launchpad.net/ubuntu/+archive/primary/+files/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff.gz (massive amount of patches)
(define-public device-tree-compiler
  (package
    (name "device-tree-compiler")
    (version "1.4.0")
    (source (origin
             (method url-fetch)
             ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
             (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
                                 "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
             (sha256
              (base32
               "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
             (modules '((guix build utils)))
             (snippet
               '(substitute* "Makefile"
                  (("/usr/bin/install")
                   "install")))))
    (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
    (synopsis "Compiles Device Tree Source Files (.dts)")
    (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
These are hardware (board) description files (used by Linux and BSD).")
    (license gpl2)
    (build-system gnu-build-system)
    (native-inputs
     `(("bison" ,bison)
       ("flex" ,flex)))
    (arguments
     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
       #:phases (modify-phases %standard-phases
          (delete 'configure))))))

(define u-boot
  (package
    (name "u-boot")
    (version "2016.07")
    (source (origin
             (method url-fetch)
             (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
             (sha256
              (base32
               "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))
    (home-page "http://www.denx.de/wiki/U-Boot/")
    (synopsis "ARM Universal Bootloader")
    (description "FIXME")
    (license gpl2)
    (native-inputs
      `(("python" ,python) ; FIXME required version?
        ("device-tree-compiler" ,device-tree-compiler)))
    (build-system  gnu-build-system)
    (arguments ; FIXME #:tests? #f
     `(#:make-flags '("HOSTCC=gcc") ; ignored?
       #:phases (modify-phases %standard-phases
                  (replace
                   'configure
                   (lambda* (#:key outputs #:allow-other-keys)
                     (let* ((out (assoc-ref outputs "out"))
                            (parts (string-split (basename out) #\-))
                            (nameparts (cdddr parts))
                            (name (string-join nameparts "-"))
                            (configprefix (string-take name (string-index-right name #\-)))
                            (configname (string-append configprefix "_defconfig")) #| example: A20-OLinuXino-Lime2_defconfig |#)
                       (system* "echo" configname)
                       (zero? (system* "make" "HOSTCC=gcc" configname))
                       ))))))))

(define-public u-boot-A20-OLinuXino-Lime2
  (package (inherit u-boot)
    (name "u-boot-A20-OLinuXino-Lime2")))

; something should:
; - create boot.cmd
; - run mkimage -C none -A arm -T script -d boot.cmd boot.scr 
; - put boot.scr on the first partition
; - dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
;    ^^^ better make sure no partition is there (or just a dummy partition)

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: ARM: Installation and Booting; was: Re: GuixSD on ARM;
  2016-07-13 22:22     ` Danny Milosavljevic
@ 2016-07-14  7:12       ` Efraim Flashner
  2016-07-19 19:50         ` Danny Milosavljevic
  2016-07-19 20:07       ` [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now Danny Milosavljevic
  1 sibling, 1 reply; 27+ messages in thread
From: Efraim Flashner @ 2016-07-14  7:12 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 6115 bytes --]

On Thu, Jul 14, 2016 at 12:22:13AM +0200, Danny Milosavljevic wrote:
> Work-in-progress gnu/packages/u-boot.scm :
> 
> ;;; GNU Guix --- Functional package management for GNU
> ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> ;;; GNU Guix 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 3 of the License, or (at
> ;;; your option) any later version.
> ;;;
> ;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
> 
> (define-module (gnu packages u-boot)
>   #:use-module (guix download)
>   #:use-module (guix packages)
>   #:use-module ((guix licenses) #:select (gpl2))
>   #:use-module (guix build-system gnu)
>   #:use-module (guix build-system trivial)
>   #:use-module (gnu packages)
>   #:use-module (gnu packages python)
>   #:use-module (gnu packages bison) ; for DTC
>   #:use-module (gnu packages flex) ; for DTC
>   #:use-module (srfi srfi-1)
>   #:use-module ((srfi srfi-1) #:select (last)))
> 

I forget why I cloned the repo, but I have one with a similar name
hanging around my computer
git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git

Also I think the same file as u-boot is the right place for it.

> ;; FIXME move somewhere more fitting
> ;; FIXME add https://launchpad.net/ubuntu/+archive/primary/+files/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff.gz (massive amount of patches)
> (define-public device-tree-compiler
>   (package
>     (name "device-tree-compiler")
>     (version "1.4.0")
>     (source (origin
>              (method url-fetch)
>              ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
>              (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
>                                  "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
>              (sha256
>               (base32
>                "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
>              (modules '((guix build utils)))

as long as you're deleting 'configure you could replace configure with
the substitute.

>              (snippet
>                '(substitute* "Makefile"
>                   (("/usr/bin/install")
>                    "install")))))
>     (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
>     (synopsis "Compiles Device Tree Source Files (.dts)")
>     (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
> These are hardware (board) description files (used by Linux and BSD).")
>     (license gpl2)
>     (build-system gnu-build-system)
>     (native-inputs
>      `(("bison" ,bison)
>        ("flex" ,flex)))
>     (arguments
>      `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
>        #:phases (modify-phases %standard-phases
>           (delete 'configure))))))
> 

I think this is the right approach, with a general u-boot that each
board can inherit and make work for them.

> (define u-boot
>   (package
>     (name "u-boot")
>     (version "2016.07")
>     (source (origin
>              (method url-fetch)
>              (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
>              (sha256
>               (base32
>                "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))

we could probably add a snippet here and remove most of the
architectures, but at 11MB its probably not worth it.

>     (home-page "http://www.denx.de/wiki/U-Boot/")
>     (synopsis "ARM Universal Bootloader")
>     (description "FIXME")
>     (license gpl2)
>     (native-inputs
>       `(("python" ,python) ; FIXME required version?
>         ("device-tree-compiler" ,device-tree-compiler)))
>     (build-system  gnu-build-system)
>     (arguments ; FIXME #:tests? #f
>      `(#:make-flags '("HOSTCC=gcc") ; ignored?
>        #:phases (modify-phases %standard-phases
>                   (replace
>                    'configure
>                    (lambda* (#:key outputs #:allow-other-keys)
>                      (let* ((out (assoc-ref outputs "out"))
>                             (parts (string-split (basename out) #\-))
>                             (nameparts (cdddr parts))
>                             (name (string-join nameparts "-"))
>                             (configprefix (string-take name (string-index-right name #\-)))
>                             (configname (string-append configprefix "_defconfig")) #| example: A20-OLinuXino-Lime2_defconfig |#)
>                        (system* "echo" configname)
>                        (zero? (system* "make" "HOSTCC=gcc" configname))
>                        ))))))))
> 
> (define-public u-boot-A20-OLinuXino-Lime2
>   (package (inherit u-boot)
>     (name "u-boot-A20-OLinuXino-Lime2")))
> 
> ; something should:
> ; - create boot.cmd
> ; - run mkimage -C none -A arm -T script -d boot.cmd boot.scr 
> ; - put boot.scr on the first partition
> ; - dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
> ;    ^^^ better make sure no partition is there (or just a dummy partition)
> 

with dd being so potentially destructive I think we should have the
users run the dd command themselves, or it could be included as part of
a `guix system init --target=arm-board=/dev/sdX arm-config.scm'


-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: ARM: Installation and Booting; was: Re: GuixSD on ARM;
  2016-07-13  9:11   ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Danny Milosavljevic
  2016-07-13 22:22     ` Danny Milosavljevic
@ 2016-07-14 16:20     ` Andreas Enge
  1 sibling, 0 replies; 27+ messages in thread
From: Andreas Enge @ 2016-07-14 16:20 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Hi Danny,

thanks for your insightful comments and starting work on uboot!

On Wed, Jul 13, 2016 at 11:11:36AM +0200, Danny Milosavljevic wrote:
> If you do use SATA, you still need to put U-Boot on SD or the Flash. U-Boot has SATA support so it can load Grub etc from the hard drive.

Their argument is that you may as well use USB, with USB-3.1 in the future.
I am more surprised by the absence of ethernet in EOMA68.

> The Allwinner A20 is quite slow by today's standards. Not Raspberry Pi slow - but maybe 4 times as fast as it. Compiling useful things take a long time (read: Linux kernel takes days to compile). However, I think it's more trustworty than the usual x86_64-nobody-knows-what-it's-doing - so I still compile things directly on it, if possible.

Did you try installing Guix on it? This should work and allow you to use
binary substitutes for armhf, I think.

Andreas

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GuixSD on ARM
  2016-07-13  6:55 ` Ricardo Wurmus
  2016-07-13  9:11   ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Danny Milosavljevic
  2016-07-13 12:57   ` GuixSD on ARM Ludovic Courtès
@ 2016-07-19  1:47   ` Eric Bavier
  2016-08-15 20:14     ` Christopher Allan Webber
  2 siblings, 1 reply; 27+ messages in thread
From: Eric Bavier @ 2016-07-19  1:47 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: guix-devel

On Wed, 13 Jul 2016 08:55:23 +0200
Ricardo Wurmus <rekado@elephly.net> wrote:

> Hi Daniel,
> 
> > I'd like GuixSD on ARM plataform, for instance Libre Tea Computer Card 
> > or other ARM libre plataform.
> >
> > I buy a Libre Tea Computer Card:
> > - https://www.crowdsupply.com/eoma68/micro-desktop
> > - http://retro-freedom.nz/blog/2016/06/30/eoma68-my-dream-machine/  
> 
> I’m also very excited about this project and wish it to succeed, because
> it is appalling and discouraging to see how little environmental
> concerns are usually considered in tech.
> 
> It would be very nice to be able to use GuixSD on the EOMA68.  Alas, I
> don’t have an overview on what work needs to be done to get there.

I've signed up for the Libre Tea and the desktop enclosure, so I'll be
playing with the GuixSD support in the coming days/weeks/months.  I'm
looking forward to working with other backers here.

It Would Be Nice™ if we could get something up and running before
shipment so we could propose a pre-imaged GuixSD version of the card.  :-)

`~Eric

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: ARM: Installation and Booting; was: Re: GuixSD on ARM;
  2016-07-14  7:12       ` Efraim Flashner
@ 2016-07-19 19:50         ` Danny Milosavljevic
  0 siblings, 0 replies; 27+ messages in thread
From: Danny Milosavljevic @ 2016-07-19 19:50 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: guix-devel

Hi,

> Also I think the same file as u-boot is the right place for it [device-tree-compiler].

device-tree-compiler is actually needed for all kernels on embedded. Embedded devices don't have a BIOS and so you have to have some kind of hardware description in order to be able to even boot. The Linux kernel bundles a device-tree-compiler, that's why it didn't pop up sooner.

I'm fine with putting it into the u-boot module. Just know that u-boot is just the earliest one that needs it (because it patches device-tree files in order to pass information about the boot process to the kernel). Next the Linux kernel needs it and next all expansion board drivers need it, too. (all of those only while compiling)

It's a compiler, so you don't need it at runtime.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now
  2016-07-13 22:22     ` Danny Milosavljevic
  2016-07-14  7:12       ` Efraim Flashner
@ 2016-07-19 20:07       ` Danny Milosavljevic
  2016-07-21 12:37         ` Ludovic Courtès
                           ` (2 more replies)
  1 sibling, 3 replies; 27+ messages in thread
From: Danny Milosavljevic @ 2016-07-19 20:07 UTC (permalink / raw)
  To: Ricardo Wurmus, Daniel Pimentel, guix-devel

(Note: the patch is from <https://launchpad.net/ubuntu/+archive/primary/+files/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff.gz>)

* gnu/packages/u-boot.scm (u-boot, u-boot-*): New variables.
* gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff: New file.

Signed-off-by: Danny Milosavljevic <dannym+a@scratchpost.org>
---
 gnu/local.mk                                       |    2 +
 .../device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff  | 5059 ++++++++++++++++++++
 gnu/packages/u-boot.scm                            | 3593 ++++++++++++++
 3 files changed, 8654 insertions(+)
 create mode 100644 gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff
 create mode 100644 gnu/packages/u-boot.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index 5e32d87..94b55cd 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -337,6 +337,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/tor.scm				\
   %D%/packages/tre.scm				\
   %D%/packages/tv.scm				\
+  %D%/packages/u-boot.scm			\
   %D%/packages/unrtf.scm			\
   %D%/packages/upnp.scm				\
   %D%/packages/uucp.scm				\
@@ -467,6 +468,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/cursynth-wave-rand.patch			\
   %D%/packages/patches/dbus-helper-search-path.patch		\
   %D%/packages/patches/dealii-p4est-interface.patch		\
+  %D%/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff \
   %D%/packages/patches/devil-CVE-2009-3994.patch		\
   %D%/packages/patches/devil-fix-libpng.patch			\
   %D%/packages/patches/dico-libtool-deterministic.patch		\
diff --git a/gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff b/gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff
new file mode 100644
index 0000000..6b160a7
--- /dev/null
+++ b/gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff
@@ -0,0 +1,5059 @@
+--- 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 <ag@roxor.cx>  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,123 @@
++device-tree-compiler (1.4.0+dfsg-2ubuntu1) yakkety; urgency=medium
++
++  * Add missing symbols to version.lds (LP: #1591101)
++    - add in fdt_address_cells, fdt_size_cells, fdt_stringlist_contains
++      fdt_resize, fdt_first_subnode and fdt_next_subnode.
++
++ -- Colin Ian King <colin.king@canonical.com>  Fri, 10 Jun 2016 10:20:31 +0100
++
++device-tree-compiler (1.4.0+dfsg-2) unstable; urgency=medium
++
++  * Fix out of date homepage url
++  * Fix pre-depends-directly-on-multiarch-support error
++
++ -- Riku Voipio <riku.voipio@linaro.org>  Mon, 17 Aug 2015 15:12:51 +0300
++
++device-tree-compiler (1.4.0+dfsg-1) unstable; urgency=low
++
++  * REALLY update to upstream version 1.4.0, closes: #725745
++
++ -- Riku Voipio <riku.voipio@linaro.org>  Fri, 03 Jan 2014 16:22:27 +0200
++
++device-tree-compiler (1.4.0-2) unstable; urgency=low
++
++  * Convert to multiarch
++
++ -- Riku Voipio <riku.voipio@linaro.org>  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 <riku.voipio@linaro.org>  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 <zumbi@pergolesi.debian.org>  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 <zumbi@debian.org>  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 <zumbi@debian.org>  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 <zumbi@debian.org>  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 <ag@roxor.cx>  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 <ag@roxor.cx>  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 <ag@roxor.cx>  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,41 @@
++Source: device-tree-compiler
++Section: devel
++Priority: extra
++XSBC-Original-Maintainer:: Hector Oron <zumbi@debian.org>
++Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
++Uploaders: Riku Voipio <riku.voipio@linaro.org>
++Standards-Version: 3.9.5
++Build-Depends: debhelper (>= 5), quilt, flex, bison, texlive, texlive-latex-extra
++Homepage: https://git.kernel.org/cgit/utils/dtc/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: ${misc:Pre-Depends}
++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 <ag@roxor.cx> on
++Sat,  3 Mar 2007 23:13:14 +0100.
++
++It was checked out from <git://www.jdl.com/software/dtc.git>.
++
++Upstream Authors:
++
++  David Gibson <david@gibson.dropbear.id.au>
++  Jon Loeliger <jdl@freescale.com>
++
++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 <ag@roxor.cx> 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-<version>/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 [<input_filename ... >]
++.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
++<david@gibson.dropbear.id.au>. Since April 1, 2006, Jon Loeliger
++<jdl@jdl.com> assumes maintainership.
++.PP
++This manual page was written by H\['e]ctor Or\['o]n
++<zumbi@debian.org>, 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] <input file>
++.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 <input format>
++.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 <output file>
++.IP
++Dump the result into a file, instead of stdout.
++.TP
++\fB\-O\fR <output format>
++.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 <output version>
++.IP
++Blob version to produce. The default is 17 (only relevant for dtb
++and asm output).
++.TP
++\fB\-d\fR <output dependency file>
++.TP
++\fB\-R\fR <number>
++.IP
++Make space for <number> reserve map entries (only relevant for dtb
++and asm output).
++.TP
++\fB\-S\fR <bytes>
++.IP
++Make the blob at least <bytes> long (extra space).
++.TP
++\fB\-p\fR <bytes>
++.IP
++Add padding to the blob of <bytes> long (extra space)
++.HP
++\fB\-b\fR <number>
++.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 <phandle format>
++.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
++<david@gibson.dropbear.id.au>. Since April 1, 2006, Jon Loeliger
++<jdl@jdl.com> assumes maintainership.
++.PP
++This manual page was originally written by Aur\['e]lien G\['E]R\[^O]ME
++<ag@roxor.cx>, 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
++<zumbi@debian.org>, 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 <device tree> <device tree>
++.SH DESCRIPTION
++Compares two different device-tree.
++.SH AUTHOR
++\fBdtc\fP was written by David Gibson
++<david@gibson.dropbear.id.au>. Since April 1, 2006, Jon Loeliger
++<jdl@jdl.com> assumes maintainership.
++.PP
++This manual page was written by H\['e]ctor Or\['o]n
++<zumbi@debian.org>, 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 <DTB-file-name>
++.SH DESCRIPTION
++The fdtdump program prints a readable version of a flat device-tree file.
++.SH AUTHOR
++\fBfdtdump\fP was written by Pantelis Antoniou
++<pantelis.antoniou AT gmail.com>.
++.PP
++This manual page was written by H\['e]ctor Or\['o]n
++<zumbi@debian.org>, 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 <options> <dt file> [<node> <property>]...
++.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>
++Type of data
++.IP
++<type>  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
++<zumbi@debian.org>, 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 <options> <dt file> <<node> <property> [<value>...]
++.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>
++Type of data
++.IP
++<type>  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
++<zumbi@debian.org>, 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 <jwboyer@linux.vnet.ibm.com>
++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 <jwboyer@linux.vnet.ibm.com>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <jwboyer@linux.vnet.ibm.com>
++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 <jwboyer@linux.vnet.ibm.com>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <sjg@chromium.org>
++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 <sjg@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <fdt.h>
++ #include <libfdt_env.h>
++ 
+++#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 <pantelis.antoniou AT gmail.com>
+++ *
++  * 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 <ctype.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++ #include <stdarg.h>
++@@ -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 <stdarg.h>
+++
++ /*
++  * 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 <sjg@chromium.org>
++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 <sjg@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <robotboy@chromium.org>
++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 <robotboy@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <stdlib.h>
++ #include <stdarg.h>
++ #include <string.h>
+++#include <assert.h>
++ 
++ #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 <david@gibson.dropbear.id.au>
++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 <david@gibson.dropbear.id.au>
++---
++
++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 <robotboy@chromium.org>
++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 <robotboy@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <propnodename> DT_PROPNODENAME
++ %token <literal> DT_LITERAL
+++%token <literal> DT_CHAR_LITERAL
++ %token <cbase> DT_BASE
++ %token <byte> DT_BYTE
++ %token <data> 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 <stdlib.h>
+++#include <stdio.h>
+++#include <string.h>
+++#include <stdint.h>
+++
+++#include <fdt.h>
+++#include <libfdt.h>
+++
+++#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 <sjg@chromium.org>
++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 <david@gibson.dropbear.id.au>
++Signed-off-by: Simon Glass <sjg@chromium.org>
++---
++
++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 <sjg@chromium.org>
++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 <sjg@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <assert.h>
+++#include <stdlib.h>
+++#include <stdio.h>
+++#include <string.h>
+++#include <stdint.h>
+++#include <stdarg.h>
+++
+++#include <fdt.h>
+++#include <libfdt.h>
+++#include <util.h>
+++
+++#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 <string.h>
++ #include <assert.h>
++ 
+++#include <errno.h>
+++#include <fcntl.h>
+++#include <unistd.h>
+++
+++#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 <stdarg.h>
++ 
++ /*
+++ * 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 <sjg@chromium.org>
++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 <sjg@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <sjg@chromium.org>
++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 <sjg@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <robotboy@chromium.org>
++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 <robotboy@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <string.h>
++ 
++ #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 <robotboy@chromium.org>
++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 <robotboy@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <robotboy@chromium.org>
++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 <robotboy@chromium.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <david@gibson.dropbear.id.au>
++ 	-- Yoder Stuart <stuart.yoder@freescale.com>
+++	-- Anton Staaf <robotboy@chromium.org>
++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 <propnodename> DT_PROPNODENAME
++ %token <literal> DT_LITERAL
++ %token <literal> DT_CHAR_LITERAL
++@@ -71,8 +76,7 @@ static unsigned char eval_char_literal(const char *s);
++ %type <re> memreserve
++ %type <re> memreserves
++ %type <addr> addr
++-%type <data> celllist
++-%type <cell> cellval
+++%type <array> arrayprefix
++ %type <data> bytestring
++ %type <prop> propdef
++ %type <proplist> 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 <stdlib.h>
+++#include <stdio.h>
+++#include <string.h>
+++#include <stdint.h>
+++
+++#include <fdt.h>
+++#include <libfdt.h>
+++
+++#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 <vapier@gentoo.org>
++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 <vapier@gentoo.org>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++
++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 <DTB-file-name>
+++    fdtdump <DTB-file-name>
++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 <pantelis.antoniou AT gmail.com>
++- */
++-
++-#include <stdint.h>
++-#include <stdio.h>
++-#include <stdlib.h>
++-#include <string.h>
++-#include <ctype.h>
++-
++-#include <fdt.h>
++-#include <libfdt_env.h>
++-
++-#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 <pantelis.antoniou AT gmail.com>
+++ */
+++
+++#include <stdint.h>
+++#include <stdio.h>
+++#include <stdlib.h>
+++#include <string.h>
+++#include <ctype.h>
+++
+++#include <fdt.h>
+++#include <libfdt_env.h>
+++
+++#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 <Minghuan.Lian@freescale.com>
++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 <Minghuan.Lian@freescale.com>
++Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
++---
++ 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 <stdlib.h>
+++#include <stdio.h>
+++#include <string.h>
+++#include <ctype.h>
+++#include <stdint.h>
+++
+++#include <fdt.h>
+++#include <libfdt.h>
+++
+++#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 <stdlib.h>
+++#include <stdio.h>
+++#include <string.h>
+++#include <ctype.h>
+++#include <stdint.h>
+++
+++#include <fdt.h>
+++#include <libfdt.h>
+++
+++#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 <david@gibson.dropbear.id.au>
++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 <david@gibson.dropbear.id.au>
++---
++ 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 <swarren@nvidia.com>
++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 <swarren@nvidia.com>
++Acked-by: David Gibson <david@gibson.dropbear.id.au>
++---
++ 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 <output_format>
++ 	The generated output format, as listed above.
++ 
+++    -d <dependency_filename>
+++	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 <output version>\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 <output dependency file>\n");
++ 	fprintf(stderr, "\t-R <number>\n");
++ 	fprintf(stderr, "\t\tMake space for <number> reserve map entries (relevant for \n\t\tdtb and asm output only)\n");
++ 	fprintf(stderr, "\t-S <bytes>\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 <sjg@chromium.org>
++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> <dt file> [<node> <property>]...
++Options:
++	-t <type>	Type of data
++	-h		Print this help
++
++<type>	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 <sjg@chromium.org>
++---
++ .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 <ctype.h>
+++#include <getopt.h>
+++#include <stdio.h>
+++#include <stdlib.h>
+++#include <string.h>
+++
+++#include <libfdt.h>
+++
+++#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 <options> <dt file> [<node> <property>]...\n"
+++	"Options:\n"
+++	"\t-t <type>\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 <test-name> <expected-result> <args>...
+++    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 \
+++	"<type>\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 <sjg@chromium.org>
++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> <dt file> <<node> <property> [<value>...]
++Options:
++	-t <type>	Type of data
++	-v		Verbose: display each value decoded from command line
++	-h		Print this help
++
++<type>	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 <sjg@chromium.org>
++---
++ .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 <assert.h>
+++#include <ctype.h>
+++#include <getopt.h>
+++#include <stdio.h>
+++#include <stdlib.h>
+++#include <string.h>
+++
+++#include <libfdt.h>
+++
+++#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 <options> <dt file> <<node> <property> [<value>...]\n"
+++	"Options:\n"
+++	"\t-t <type>\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 <test-name> <expected-result> <file> <key> <flags>
+++    #		<args>...
+++    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 <jdl@jdl.com>
++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/23-libfdt-Add-missing-functions-to-shared-library.patch
++++ device-tree-compiler-1.4.0+dfsg/debian/patches/23-libfdt-Add-missing-functions-to-shared-library.patch
+@@ -0,0 +1,30 @@
++From a4b093f7366fdb429ca1781144d3985fa50d0fbb Mon Sep 17 00:00:00 2001
++From: Julien Grall <julien.grall@linaro.org>
++Date: Tue, 17 Mar 2015 16:00:34 +0000
++Subject: [PATCH] libfdt: Add missing functions to shared library
++
++The commit 4e76ec7 "libfdt: Add fdt_next_subnode() to permit easy
++subnode iteration" adds new functions (fdt_{first,next}_subnode) but
++forgot to mark them as 'global' in the shared library.
++
++Signed-off-by: Julien Grall <julien.grall@linaro.org>
++---
++ libfdt/version.lds | 2 ++
++ 1 file changed, 2 insertions(+)
++
++diff --git a/libfdt/version.lds b/libfdt/version.lds
++index 80b322b..941208e 100644
++--- a/libfdt/version.lds
+++++ b/libfdt/version.lds
++@@ -54,6 +54,8 @@ LIBFDT_1.2 {
++ 		fdt_get_property_by_offset;
++ 		fdt_getprop_by_offset;
++ 		fdt_next_property_offset;
+++		fdt_first_subnode;
+++		fdt_next_subnode;
++ 
++ 	local:
++ 		*;
++-- 
++2.8.1
++
+--- device-tree-compiler-1.4.0+dfsg.orig/debian/patches/24_libfdt-Add-some-missing-symbols-to-version.lds.patch
++++ device-tree-compiler-1.4.0+dfsg/debian/patches/24_libfdt-Add-some-missing-symbols-to-version.lds.patch
+@@ -0,0 +1,33 @@
++From f58799be130e27cc729cb2d45566daa0bb3b8605 Mon Sep 17 00:00:00 2001
++From: David Gibson <david@gibson.dropbear.id.au>
++Date: Tue, 1 Dec 2015 12:55:21 +1100
++Subject: [PATCH] libfdt: Add some missing symbols to version.lds
++
++Several functions in the header file were missing from the version.lds
++script, meaning that they couldn't be used from a libfdt shared library.
++
++Reported by Ken Aaker, via github issue tracker.
++
++Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
++---
++ libfdt/version.lds | 4 ++++
++ 1 file changed, 4 insertions(+)
++
++diff --git a/libfdt/version.lds b/libfdt/version.lds
++index f19f157..1f4e1ea 100644
++--- a/libfdt/version.lds
+++++ b/libfdt/version.lds
++@@ -57,6 +57,10 @@ LIBFDT_1.2 {
++ 		fdt_next_property_offset;
++ 		fdt_first_subnode;
++ 		fdt_next_subnode;
+++		fdt_address_cells;
+++		fdt_size_cells;
+++		fdt_stringlist_contains;
+++		fdt_resize;
++ 
++ 	local:
++ 		*;
++-- 
++2.8.1
++
+--- 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 <zumbi@debian.org>
++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,25 @@
++01_build_doc.patch
++23-libfdt-Add-missing-functions-to-shared-library.patch
++24_libfdt-Add-some-missing-symbols-to-version.lds.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
diff --git a/gnu/packages/u-boot.scm b/gnu/packages/u-boot.scm
new file mode 100644
index 0000000..fd2eecc
--- /dev/null
+++ b/gnu/packages/u-boot.scm
@@ -0,0 +1,3593 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix 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 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages u-boot)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:select (gpl2))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages bison) ; DTC
+  #:use-module (gnu packages flex) ; DTC
+  #:use-module (srfi srfi-1)
+  #:use-module ((srfi srfi-1) #:select (last)))
+
+(define-public device-tree-compiler
+  (package
+    (name "device-tree-compiler")
+    (version "1.4.0")
+    (source (origin
+             (method url-fetch)
+             ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
+             (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
+                                 "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
+             (sha256
+              (base32
+               "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
+             (patches (search-patches "device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff"))
+             (modules '((guix build utils)))
+             (snippet
+               '(substitute* "Makefile"
+                  (("/usr/bin/install")
+                   "install")))))
+    (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
+    (synopsis "Compiles Device Tree Source Files (.dts)")
+    (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
+These are hardware (board) description files (used by Linux and BSD).")
+    (license gpl2)
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (arguments
+     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
+       #:phases (modify-phases %standard-phases
+          (delete 'configure))))))
+
+(define u-boot
+  (package
+    (name "u-boot")
+    (version "2016.07")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
+             (sha256
+              (base32
+               "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))
+    (home-page "http://www.denx.de/wiki/U-Boot/")
+    (synopsis "ARM Universal Bootloader")
+    (description "FIXME")
+    (license gpl2)
+    (native-inputs
+      `(("python" ,python) ; FIXME required version?
+        ("device-tree-compiler" ,device-tree-compiler)))
+    (build-system  gnu-build-system)
+    (arguments ; FIXME #:tests? #f
+     `(#:make-flags '("HOSTCC=gcc") ; ignored?
+       #:phases (modify-phases %standard-phases
+                  (replace
+                   'configure
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let* ((out (assoc-ref outputs "out"))
+                            (parts (string-split (basename out) #\-))
+                            (nameparts (cdddr parts))
+                            (name (string-join nameparts "-"))
+                            (configprefix (string-take name (string-index-right name #\-)))
+                            (configname (string-append configprefix "_defconfig")) #| example: A20-OLinuXino-Lime2_defconfig |#)
+                       (system* "echo" configname)
+                       (zero? (system* "make" "HOSTCC=gcc" configname))
+                       ))))))))
+
+(define-public u-boot-10m50
+  (package (inherit u-boot)
+    (name "u-boot-10m50")))
+(define-public u-boot-3c120
+  (package (inherit u-boot)
+    (name "u-boot-3c120")))
+(define-public u-boot-A10-OLinuXino-Lime
+  (package (inherit u-boot)
+    (name "u-boot-A10-OLinuXino-Lime")))
+(define-public u-boot-A10s-OLinuXino-M
+  (package (inherit u-boot)
+    (name "u-boot-A10s-OLinuXino-M")))
+(define-public u-boot-A13-OLinuXinoM
+  (package (inherit u-boot)
+    (name "u-boot-A13-OLinuXinoM")))
+(define-public u-boot-A13-OLinuXino
+  (package (inherit u-boot)
+    (name "u-boot-A13-OLinuXino")))
+(define-public u-boot-A20-OLinuXino-Lime2
+  (package (inherit u-boot)
+    (name "u-boot-A20-OLinuXino-Lime2")))
+(define-public u-boot-A20-OLinuXino-Lime
+  (package (inherit u-boot)
+    (name "u-boot-A20-OLinuXino-Lime")))
+(define-public u-boot-A20-OLinuXino_MICRO
+  (package (inherit u-boot)
+    (name "u-boot-A20-OLinuXino_MICRO")))
+(define-public u-boot-A20-Olimex-SOM-EVB
+  (package (inherit u-boot)
+    (name "u-boot-A20-Olimex-SOM-EVB")))
+(define-public u-boot-Ainol_AW1
+  (package (inherit u-boot)
+    (name "u-boot-Ainol_AW1")))
+(define-public u-boot-Ampe_A76
+  (package (inherit u-boot)
+    (name "u-boot-Ampe_A76")))
+(define-public u-boot-Auxtek-T003
+  (package (inherit u-boot)
+    (name "u-boot-Auxtek-T003")))
+(define-public u-boot-Auxtek-T004
+  (package (inherit u-boot)
+    (name "u-boot-Auxtek-T004")))
+(define-public u-boot-B4420QDS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-B4420QDS_NAND")))
+(define-public u-boot-B4420QDS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-B4420QDS_SPIFLASH")))
+(define-public u-boot-B4420QDS
+  (package (inherit u-boot)
+    (name "u-boot-B4420QDS")))
+(define-public u-boot-B4860QDS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-B4860QDS_NAND")))
+(define-public u-boot-B4860QDS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-B4860QDS_SECURE_BOOT")))
+(define-public u-boot-B4860QDS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-B4860QDS_SPIFLASH")))
+(define-public u-boot-B4860QDS_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-B4860QDS_SRIO_PCIE_BOOT")))
+(define-public u-boot-B4860QDS
+  (package (inherit u-boot)
+    (name "u-boot-B4860QDS")))
+(define-public u-boot-BSC9131RDB_NAND_SYSCLK100
+  (package (inherit u-boot)
+    (name "u-boot-BSC9131RDB_NAND_SYSCLK100")))
+(define-public u-boot-BSC9131RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-BSC9131RDB_NAND")))
+(define-public u-boot-BSC9131RDB_SPIFLASH_SYSCLK100
+  (package (inherit u-boot)
+    (name "u-boot-BSC9131RDB_SPIFLASH_SYSCLK100")))
+(define-public u-boot-BSC9131RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-BSC9131RDB_SPIFLASH")))
+(define-public u-boot-BSC9132QDS_NAND_DDRCLK100_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NAND_DDRCLK100_SECURE")))
+(define-public u-boot-BSC9132QDS_NAND_DDRCLK100
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NAND_DDRCLK100")))
+(define-public u-boot-BSC9132QDS_NAND_DDRCLK133_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NAND_DDRCLK133_SECURE")))
+(define-public u-boot-BSC9132QDS_NAND_DDRCLK133
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NAND_DDRCLK133")))
+(define-public u-boot-BSC9132QDS_NOR_DDRCLK100_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NOR_DDRCLK100_SECURE")))
+(define-public u-boot-BSC9132QDS_NOR_DDRCLK100
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NOR_DDRCLK100")))
+(define-public u-boot-BSC9132QDS_NOR_DDRCLK133_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NOR_DDRCLK133_SECURE")))
+(define-public u-boot-BSC9132QDS_NOR_DDRCLK133
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_NOR_DDRCLK133")))
+(define-public u-boot-BSC9132QDS_SDCARD_DDRCLK100_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SDCARD_DDRCLK100_SECURE")))
+(define-public u-boot-BSC9132QDS_SDCARD_DDRCLK100
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SDCARD_DDRCLK100")))
+(define-public u-boot-BSC9132QDS_SDCARD_DDRCLK133_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SDCARD_DDRCLK133_SECURE")))
+(define-public u-boot-BSC9132QDS_SDCARD_DDRCLK133
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SDCARD_DDRCLK133")))
+(define-public u-boot-BSC9132QDS_SPIFLASH_DDRCLK100_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SPIFLASH_DDRCLK100_SECURE")))
+(define-public u-boot-BSC9132QDS_SPIFLASH_DDRCLK100
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SPIFLASH_DDRCLK100")))
+(define-public u-boot-BSC9132QDS_SPIFLASH_DDRCLK133_SECURE
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SPIFLASH_DDRCLK133_SECURE")))
+(define-public u-boot-BSC9132QDS_SPIFLASH_DDRCLK133
+  (package (inherit u-boot)
+    (name "u-boot-BSC9132QDS_SPIFLASH_DDRCLK133")))
+(define-public u-boot-Bananapi
+  (package (inherit u-boot)
+    (name "u-boot-Bananapi")))
+(define-public u-boot-Bananapro
+  (package (inherit u-boot)
+    (name "u-boot-Bananapro")))
+(define-public u-boot-C29XPCIE_NAND
+  (package (inherit u-boot)
+    (name "u-boot-C29XPCIE_NAND")))
+(define-public u-boot-C29XPCIE_NOR_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-C29XPCIE_NOR_SECBOOT")))
+(define-public u-boot-C29XPCIE_SPIFLASH_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-C29XPCIE_SPIFLASH_SECBOOT")))
+(define-public u-boot-C29XPCIE_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-C29XPCIE_SPIFLASH")))
+(define-public u-boot-C29XPCIE
+  (package (inherit u-boot)
+    (name "u-boot-C29XPCIE")))
+(define-public u-boot-CHIP
+  (package (inherit u-boot)
+    (name "u-boot-CHIP")))
+(define-public u-boot-CPCI2DP
+  (package (inherit u-boot)
+    (name "u-boot-CPCI2DP")))
+(define-public u-boot-CPCI4052
+  (package (inherit u-boot)
+    (name "u-boot-CPCI4052")))
+(define-public u-boot-CSQ_CS908
+  (package (inherit u-boot)
+    (name "u-boot-CSQ_CS908")))
+(define-public u-boot-Chuwi_V7_CW0825
+  (package (inherit u-boot)
+    (name "u-boot-Chuwi_V7_CW0825")))
+(define-public u-boot-Colombus
+  (package (inherit u-boot)
+    (name "u-boot-Colombus")))
+(define-public u-boot-Cubieboard2
+  (package (inherit u-boot)
+    (name "u-boot-Cubieboard2")))
+(define-public u-boot-Cubieboard
+  (package (inherit u-boot)
+    (name "u-boot-Cubieboard")))
+(define-public u-boot-Cubietruck
+  (package (inherit u-boot)
+    (name "u-boot-Cubietruck")))
+(define-public u-boot-Cubietruck_plus
+  (package (inherit u-boot)
+    (name "u-boot-Cubietruck_plus")))
+(define-public u-boot-Cyrus_P5020
+  (package (inherit u-boot)
+    (name "u-boot-Cyrus_P5020")))
+(define-public u-boot-Cyrus_P5040
+  (package (inherit u-boot)
+    (name "u-boot-Cyrus_P5040")))
+(define-public u-boot-Empire_electronix_d709
+  (package (inherit u-boot)
+    (name "u-boot-Empire_electronix_d709")))
+(define-public u-boot-Hummingbird_A31
+  (package (inherit u-boot)
+    (name "u-boot-Hummingbird_A31")))
+(define-public u-boot-Hyundai_A7HD
+  (package (inherit u-boot)
+    (name "u-boot-Hyundai_A7HD")))
+(define-public u-boot-Itead_Ibox_A20
+  (package (inherit u-boot)
+    (name "u-boot-Itead_Ibox_A20")))
+(define-public u-boot-Lamobo_R1
+  (package (inherit u-boot)
+    (name "u-boot-Lamobo_R1")))
+(define-public u-boot-Linksprite_pcDuino3_Nano
+  (package (inherit u-boot)
+    (name "u-boot-Linksprite_pcDuino3_Nano")))
+(define-public u-boot-Linksprite_pcDuino3
+  (package (inherit u-boot)
+    (name "u-boot-Linksprite_pcDuino3")))
+(define-public u-boot-Linksprite_pcDuino
+  (package (inherit u-boot)
+    (name "u-boot-Linksprite_pcDuino")))
+(define-public u-boot-M5208EVBE
+  (package (inherit u-boot)
+    (name "u-boot-M5208EVBE")))
+(define-public u-boot-M52277EVB
+  (package (inherit u-boot)
+    (name "u-boot-M52277EVB")))
+(define-public u-boot-M52277EVB_stmicro
+  (package (inherit u-boot)
+    (name "u-boot-M52277EVB_stmicro")))
+(define-public u-boot-M5235EVB_Flash32
+  (package (inherit u-boot)
+    (name "u-boot-M5235EVB_Flash32")))
+(define-public u-boot-M5235EVB
+  (package (inherit u-boot)
+    (name "u-boot-M5235EVB")))
+(define-public u-boot-M5249EVB
+  (package (inherit u-boot)
+    (name "u-boot-M5249EVB")))
+(define-public u-boot-M5253DEMO
+  (package (inherit u-boot)
+    (name "u-boot-M5253DEMO")))
+(define-public u-boot-M5253EVBE
+  (package (inherit u-boot)
+    (name "u-boot-M5253EVBE")))
+(define-public u-boot-M5272C3
+  (package (inherit u-boot)
+    (name "u-boot-M5272C3")))
+(define-public u-boot-M5275EVB
+  (package (inherit u-boot)
+    (name "u-boot-M5275EVB")))
+(define-public u-boot-M5282EVB
+  (package (inherit u-boot)
+    (name "u-boot-M5282EVB")))
+(define-public u-boot-M53017EVB
+  (package (inherit u-boot)
+    (name "u-boot-M53017EVB")))
+(define-public u-boot-M5329AFEE
+  (package (inherit u-boot)
+    (name "u-boot-M5329AFEE")))
+(define-public u-boot-M5329BFEE
+  (package (inherit u-boot)
+    (name "u-boot-M5329BFEE")))
+(define-public u-boot-M5373EVB
+  (package (inherit u-boot)
+    (name "u-boot-M5373EVB")))
+(define-public u-boot-M54418TWR
+  (package (inherit u-boot)
+    (name "u-boot-M54418TWR")))
+(define-public u-boot-M54418TWR_nand_mii
+  (package (inherit u-boot)
+    (name "u-boot-M54418TWR_nand_mii")))
+(define-public u-boot-M54418TWR_nand_rmii
+  (package (inherit u-boot)
+    (name "u-boot-M54418TWR_nand_rmii")))
+(define-public u-boot-M54418TWR_nand_rmii_lowfreq
+  (package (inherit u-boot)
+    (name "u-boot-M54418TWR_nand_rmii_lowfreq")))
+(define-public u-boot-M54418TWR_serial_mii
+  (package (inherit u-boot)
+    (name "u-boot-M54418TWR_serial_mii")))
+(define-public u-boot-M54418TWR_serial_rmii
+  (package (inherit u-boot)
+    (name "u-boot-M54418TWR_serial_rmii")))
+(define-public u-boot-M54451EVB
+  (package (inherit u-boot)
+    (name "u-boot-M54451EVB")))
+(define-public u-boot-M54451EVB_stmicro
+  (package (inherit u-boot)
+    (name "u-boot-M54451EVB_stmicro")))
+(define-public u-boot-M54455EVB_a66
+  (package (inherit u-boot)
+    (name "u-boot-M54455EVB_a66")))
+(define-public u-boot-M54455EVB
+  (package (inherit u-boot)
+    (name "u-boot-M54455EVB")))
+(define-public u-boot-M54455EVB_i66
+  (package (inherit u-boot)
+    (name "u-boot-M54455EVB_i66")))
+(define-public u-boot-M54455EVB_intel
+  (package (inherit u-boot)
+    (name "u-boot-M54455EVB_intel")))
+(define-public u-boot-M54455EVB_stm33
+  (package (inherit u-boot)
+    (name "u-boot-M54455EVB_stm33")))
+(define-public u-boot-M5475AFE
+  (package (inherit u-boot)
+    (name "u-boot-M5475AFE")))
+(define-public u-boot-M5475BFE
+  (package (inherit u-boot)
+    (name "u-boot-M5475BFE")))
+(define-public u-boot-M5475CFE
+  (package (inherit u-boot)
+    (name "u-boot-M5475CFE")))
+(define-public u-boot-M5475DFE
+  (package (inherit u-boot)
+    (name "u-boot-M5475DFE")))
+(define-public u-boot-M5475EFE
+  (package (inherit u-boot)
+    (name "u-boot-M5475EFE")))
+(define-public u-boot-M5475FFE
+  (package (inherit u-boot)
+    (name "u-boot-M5475FFE")))
+(define-public u-boot-M5475GFE
+  (package (inherit u-boot)
+    (name "u-boot-M5475GFE")))
+(define-public u-boot-M5485AFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485AFE")))
+(define-public u-boot-M5485BFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485BFE")))
+(define-public u-boot-M5485CFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485CFE")))
+(define-public u-boot-M5485DFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485DFE")))
+(define-public u-boot-M5485EFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485EFE")))
+(define-public u-boot-M5485FFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485FFE")))
+(define-public u-boot-M5485GFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485GFE")))
+(define-public u-boot-M5485HFE
+  (package (inherit u-boot)
+    (name "u-boot-M5485HFE")))
+(define-public u-boot-MIP405T
+  (package (inherit u-boot)
+    (name "u-boot-MIP405T")))
+(define-public u-boot-MIP405
+  (package (inherit u-boot)
+    (name "u-boot-MIP405")))
+(define-public u-boot-MK808C
+  (package (inherit u-boot)
+    (name "u-boot-MK808C")))
+(define-public u-boot-MPC8308RDB
+  (package (inherit u-boot)
+    (name "u-boot-MPC8308RDB")))
+(define-public u-boot-MPC8313ERDB_33
+  (package (inherit u-boot)
+    (name "u-boot-MPC8313ERDB_33")))
+(define-public u-boot-MPC8313ERDB_66
+  (package (inherit u-boot)
+    (name "u-boot-MPC8313ERDB_66")))
+(define-public u-boot-MPC8313ERDB_NAND_33
+  (package (inherit u-boot)
+    (name "u-boot-MPC8313ERDB_NAND_33")))
+(define-public u-boot-MPC8313ERDB_NAND_66
+  (package (inherit u-boot)
+    (name "u-boot-MPC8313ERDB_NAND_66")))
+(define-public u-boot-MPC8315ERDB
+  (package (inherit u-boot)
+    (name "u-boot-MPC8315ERDB")))
+(define-public u-boot-MPC8323ERDB
+  (package (inherit u-boot)
+    (name "u-boot-MPC8323ERDB")))
+(define-public u-boot-MPC832XEMDS_ATM
+  (package (inherit u-boot)
+    (name "u-boot-MPC832XEMDS_ATM")))
+(define-public u-boot-MPC832XEMDS_HOST_33
+  (package (inherit u-boot)
+    (name "u-boot-MPC832XEMDS_HOST_33")))
+(define-public u-boot-MPC832XEMDS_HOST_66
+  (package (inherit u-boot)
+    (name "u-boot-MPC832XEMDS_HOST_66")))
+(define-public u-boot-MPC832XEMDS_SLAVE
+  (package (inherit u-boot)
+    (name "u-boot-MPC832XEMDS_SLAVE")))
+(define-public u-boot-MPC832XEMDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC832XEMDS")))
+(define-public u-boot-MPC8349EMDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8349EMDS")))
+(define-public u-boot-MPC8349ITXGP
+  (package (inherit u-boot)
+    (name "u-boot-MPC8349ITXGP")))
+(define-public u-boot-MPC8349ITX_LOWBOOT
+  (package (inherit u-boot)
+    (name "u-boot-MPC8349ITX_LOWBOOT")))
+(define-public u-boot-MPC8349ITX
+  (package (inherit u-boot)
+    (name "u-boot-MPC8349ITX")))
+(define-public u-boot-MPC837XEMDS_HOST
+  (package (inherit u-boot)
+    (name "u-boot-MPC837XEMDS_HOST")))
+(define-public u-boot-MPC837XEMDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC837XEMDS")))
+(define-public u-boot-MPC837XERDB
+  (package (inherit u-boot)
+    (name "u-boot-MPC837XERDB")))
+(define-public u-boot-MPC8536DS_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-MPC8536DS_36BIT")))
+(define-public u-boot-MPC8536DS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-MPC8536DS_SDCARD")))
+(define-public u-boot-MPC8536DS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-MPC8536DS_SPIFLASH")))
+(define-public u-boot-MPC8536DS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8536DS")))
+(define-public u-boot-MPC8540ADS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8540ADS")))
+(define-public u-boot-MPC8541CDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8541CDS")))
+(define-public u-boot-MPC8541CDS_legacy
+  (package (inherit u-boot)
+    (name "u-boot-MPC8541CDS_legacy")))
+(define-public u-boot-MPC8544DS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8544DS")))
+(define-public u-boot-MPC8548CDS_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-MPC8548CDS_36BIT")))
+(define-public u-boot-MPC8548CDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8548CDS")))
+(define-public u-boot-MPC8548CDS_legacy
+  (package (inherit u-boot)
+    (name "u-boot-MPC8548CDS_legacy")))
+(define-public u-boot-MPC8555CDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8555CDS")))
+(define-public u-boot-MPC8555CDS_legacy
+  (package (inherit u-boot)
+    (name "u-boot-MPC8555CDS_legacy")))
+(define-public u-boot-MPC8560ADS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8560ADS")))
+(define-public u-boot-MPC8568MDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8568MDS")))
+(define-public u-boot-MPC8569MDS_ATM
+  (package (inherit u-boot)
+    (name "u-boot-MPC8569MDS_ATM")))
+(define-public u-boot-MPC8569MDS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8569MDS")))
+(define-public u-boot-MPC8572DS_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-MPC8572DS_36BIT")))
+(define-public u-boot-MPC8572DS
+  (package (inherit u-boot)
+    (name "u-boot-MPC8572DS")))
+(define-public u-boot-MPC8610HPCD
+  (package (inherit u-boot)
+    (name "u-boot-MPC8610HPCD")))
+(define-public u-boot-MPC8641HPCN_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-MPC8641HPCN_36BIT")))
+(define-public u-boot-MPC8641HPCN
+  (package (inherit u-boot)
+    (name "u-boot-MPC8641HPCN")))
+(define-public u-boot-MSI_Primo73
+  (package (inherit u-boot)
+    (name "u-boot-MSI_Primo73")))
+(define-public u-boot-MSI_Primo81
+  (package (inherit u-boot)
+    (name "u-boot-MSI_Primo81")))
+(define-public u-boot-Marsboard_A10
+  (package (inherit u-boot)
+    (name "u-boot-Marsboard_A10")))
+(define-public u-boot-Mele_A1000G_quad
+  (package (inherit u-boot)
+    (name "u-boot-Mele_A1000G_quad")))
+(define-public u-boot-Mele_A1000
+  (package (inherit u-boot)
+    (name "u-boot-Mele_A1000")))
+(define-public u-boot-Mele_I7
+  (package (inherit u-boot)
+    (name "u-boot-Mele_I7")))
+(define-public u-boot-Mele_M3
+  (package (inherit u-boot)
+    (name "u-boot-Mele_M3")))
+(define-public u-boot-Mele_M5
+  (package (inherit u-boot)
+    (name "u-boot-Mele_M5")))
+(define-public u-boot-Mele_M9
+  (package (inherit u-boot)
+    (name "u-boot-Mele_M9")))
+(define-public u-boot-Merrii_A80_Optimus
+  (package (inherit u-boot)
+    (name "u-boot-Merrii_A80_Optimus")))
+(define-public u-boot-MigoR
+  (package (inherit u-boot)
+    (name "u-boot-MigoR")))
+(define-public u-boot-Mini-X
+  (package (inherit u-boot)
+    (name "u-boot-Mini-X")))
+(define-public u-boot-MiniFAP
+  (package (inherit u-boot)
+    (name "u-boot-MiniFAP")))
+(define-public u-boot-O2D300
+  (package (inherit u-boot)
+    (name "u-boot-O2D300")))
+(define-public u-boot-O2DNT2_RAMBOOT
+  (package (inherit u-boot)
+    (name "u-boot-O2DNT2_RAMBOOT")))
+(define-public u-boot-O2DNT2
+  (package (inherit u-boot)
+    (name "u-boot-O2DNT2")))
+(define-public u-boot-O2D
+  (package (inherit u-boot)
+    (name "u-boot-O2D")))
+(define-public u-boot-O2I
+  (package (inherit u-boot)
+    (name "u-boot-O2I")))
+(define-public u-boot-O2MNT_O2M110
+  (package (inherit u-boot)
+    (name "u-boot-O2MNT_O2M110")))
+(define-public u-boot-O2MNT_O2M112
+  (package (inherit u-boot)
+    (name "u-boot-O2MNT_O2M112")))
+(define-public u-boot-O2MNT_O2M113
+  (package (inherit u-boot)
+    (name "u-boot-O2MNT_O2M113")))
+(define-public u-boot-O2MNT
+  (package (inherit u-boot)
+    (name "u-boot-O2MNT")))
+(define-public u-boot-O3DNT
+  (package (inherit u-boot)
+    (name "u-boot-O3DNT")))
+(define-public u-boot-Orangepi
+  (package (inherit u-boot)
+    (name "u-boot-Orangepi")))
+(define-public u-boot-Orangepi_mini
+  (package (inherit u-boot)
+    (name "u-boot-Orangepi_mini")))
+(define-public u-boot-P1010RDB-PA_36BIT_NAND_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_36BIT_NAND_SECBOOT")))
+(define-public u-boot-P1010RDB-PA_36BIT_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_36BIT_NAND")))
+(define-public u-boot-P1010RDB-PA_36BIT_NOR_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_36BIT_NOR_SECBOOT")))
+(define-public u-boot-P1010RDB-PA_36BIT_NOR
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_36BIT_NOR")))
+(define-public u-boot-P1010RDB-PA_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_36BIT_SDCARD")))
+(define-public u-boot-P1010RDB-PA_36BIT_SPIFLASH_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_36BIT_SPIFLASH_SECBOOT")))
+(define-public u-boot-P1010RDB-PA_36BIT_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_36BIT_SPIFLASH")))
+(define-public u-boot-P1010RDB-PA_NAND_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_NAND_SECBOOT")))
+(define-public u-boot-P1010RDB-PA_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_NAND")))
+(define-public u-boot-P1010RDB-PA_NOR_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_NOR_SECBOOT")))
+(define-public u-boot-P1010RDB-PA_NOR
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_NOR")))
+(define-public u-boot-P1010RDB-PA_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_SDCARD")))
+(define-public u-boot-P1010RDB-PA_SPIFLASH_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_SPIFLASH_SECBOOT")))
+(define-public u-boot-P1010RDB-PA_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PA_SPIFLASH")))
+(define-public u-boot-P1010RDB-PB_36BIT_NAND_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_36BIT_NAND_SECBOOT")))
+(define-public u-boot-P1010RDB-PB_36BIT_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_36BIT_NAND")))
+(define-public u-boot-P1010RDB-PB_36BIT_NOR_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_36BIT_NOR_SECBOOT")))
+(define-public u-boot-P1010RDB-PB_36BIT_NOR
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_36BIT_NOR")))
+(define-public u-boot-P1010RDB-PB_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_36BIT_SDCARD")))
+(define-public u-boot-P1010RDB-PB_36BIT_SPIFLASH_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_36BIT_SPIFLASH_SECBOOT")))
+(define-public u-boot-P1010RDB-PB_36BIT_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_36BIT_SPIFLASH")))
+(define-public u-boot-P1010RDB-PB_NAND_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_NAND_SECBOOT")))
+(define-public u-boot-P1010RDB-PB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_NAND")))
+(define-public u-boot-P1010RDB-PB_NOR_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_NOR_SECBOOT")))
+(define-public u-boot-P1010RDB-PB_NOR
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_NOR")))
+(define-public u-boot-P1010RDB-PB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_SDCARD")))
+(define-public u-boot-P1010RDB-PB_SPIFLASH_SECBOOT
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_SPIFLASH_SECBOOT")))
+(define-public u-boot-P1010RDB-PB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1010RDB-PB_SPIFLASH")))
+(define-public u-boot-P1020MBG-PC_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1020MBG-PC_36BIT_SDCARD")))
+(define-public u-boot-P1020MBG-PC_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P1020MBG-PC_36BIT")))
+(define-public u-boot-P1020MBG-PC_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1020MBG-PC_SDCARD")))
+(define-public u-boot-P1020MBG-PC
+  (package (inherit u-boot)
+    (name "u-boot-P1020MBG-PC")))
+(define-public u-boot-P1020RDB-PC_36BIT_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC_36BIT_NAND")))
+(define-public u-boot-P1020RDB-PC_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC_36BIT_SDCARD")))
+(define-public u-boot-P1020RDB-PC_36BIT_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC_36BIT_SPIFLASH")))
+(define-public u-boot-P1020RDB-PC_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC_36BIT")))
+(define-public u-boot-P1020RDB-PC_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC_NAND")))
+(define-public u-boot-P1020RDB-PC_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC_SDCARD")))
+(define-public u-boot-P1020RDB-PC_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC_SPIFLASH")))
+(define-public u-boot-P1020RDB-PC
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PC")))
+(define-public u-boot-P1020RDB-PD_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PD_NAND")))
+(define-public u-boot-P1020RDB-PD_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PD_SDCARD")))
+(define-public u-boot-P1020RDB-PD_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PD_SPIFLASH")))
+(define-public u-boot-P1020RDB-PD
+  (package (inherit u-boot)
+    (name "u-boot-P1020RDB-PD")))
+(define-public u-boot-P1020UTM-PC_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1020UTM-PC_36BIT_SDCARD")))
+(define-public u-boot-P1020UTM-PC_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P1020UTM-PC_36BIT")))
+(define-public u-boot-P1020UTM-PC_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1020UTM-PC_SDCARD")))
+(define-public u-boot-P1020UTM-PC
+  (package (inherit u-boot)
+    (name "u-boot-P1020UTM-PC")))
+(define-public u-boot-P1021RDB-PC_36BIT_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC_36BIT_NAND")))
+(define-public u-boot-P1021RDB-PC_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC_36BIT_SDCARD")))
+(define-public u-boot-P1021RDB-PC_36BIT_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC_36BIT_SPIFLASH")))
+(define-public u-boot-P1021RDB-PC_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC_36BIT")))
+(define-public u-boot-P1021RDB-PC_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC_NAND")))
+(define-public u-boot-P1021RDB-PC_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC_SDCARD")))
+(define-public u-boot-P1021RDB-PC_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC_SPIFLASH")))
+(define-public u-boot-P1021RDB-PC
+  (package (inherit u-boot)
+    (name "u-boot-P1021RDB-PC")))
+(define-public u-boot-P1022DS_36BIT_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS_36BIT_NAND")))
+(define-public u-boot-P1022DS_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS_36BIT_SDCARD")))
+(define-public u-boot-P1022DS_36BIT_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS_36BIT_SPIFLASH")))
+(define-public u-boot-P1022DS_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS_36BIT")))
+(define-public u-boot-P1022DS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS_NAND")))
+(define-public u-boot-P1022DS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS_SDCARD")))
+(define-public u-boot-P1022DS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS_SPIFLASH")))
+(define-public u-boot-P1022DS
+  (package (inherit u-boot)
+    (name "u-boot-P1022DS")))
+(define-public u-boot-P1023RDB
+  (package (inherit u-boot)
+    (name "u-boot-P1023RDB")))
+(define-public u-boot-P1024RDB_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P1024RDB_36BIT")))
+(define-public u-boot-P1024RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1024RDB_NAND")))
+(define-public u-boot-P1024RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1024RDB_SDCARD")))
+(define-public u-boot-P1024RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1024RDB_SPIFLASH")))
+(define-public u-boot-P1024RDB
+  (package (inherit u-boot)
+    (name "u-boot-P1024RDB")))
+(define-public u-boot-P1025RDB_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P1025RDB_36BIT")))
+(define-public u-boot-P1025RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P1025RDB_NAND")))
+(define-public u-boot-P1025RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P1025RDB_SDCARD")))
+(define-public u-boot-P1025RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P1025RDB_SPIFLASH")))
+(define-public u-boot-P1025RDB
+  (package (inherit u-boot)
+    (name "u-boot-P1025RDB")))
+(define-public u-boot-P2020RDB-PC_36BIT_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC_36BIT_NAND")))
+(define-public u-boot-P2020RDB-PC_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC_36BIT_SDCARD")))
+(define-public u-boot-P2020RDB-PC_36BIT_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC_36BIT_SPIFLASH")))
+(define-public u-boot-P2020RDB-PC_36BIT
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC_36BIT")))
+(define-public u-boot-P2020RDB-PC_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC_NAND")))
+(define-public u-boot-P2020RDB-PC_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC_SDCARD")))
+(define-public u-boot-P2020RDB-PC_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC_SPIFLASH")))
+(define-public u-boot-P2020RDB-PC
+  (package (inherit u-boot)
+    (name "u-boot-P2020RDB-PC")))
+(define-public u-boot-P2041RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P2041RDB_NAND")))
+(define-public u-boot-P2041RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P2041RDB_SDCARD")))
+(define-public u-boot-P2041RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P2041RDB_SECURE_BOOT")))
+(define-public u-boot-P2041RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P2041RDB_SPIFLASH")))
+(define-public u-boot-P2041RDB_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P2041RDB_SRIO_PCIE_BOOT")))
+(define-public u-boot-P2041RDB
+  (package (inherit u-boot)
+    (name "u-boot-P2041RDB")))
+(define-public u-boot-P3041DS_NAND_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P3041DS_NAND_SECURE_BOOT")))
+(define-public u-boot-P3041DS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P3041DS_NAND")))
+(define-public u-boot-P3041DS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P3041DS_SDCARD")))
+(define-public u-boot-P3041DS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P3041DS_SECURE_BOOT")))
+(define-public u-boot-P3041DS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P3041DS_SPIFLASH")))
+(define-public u-boot-P3041DS_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P3041DS_SRIO_PCIE_BOOT")))
+(define-public u-boot-P3041DS
+  (package (inherit u-boot)
+    (name "u-boot-P3041DS")))
+(define-public u-boot-P4080DS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P4080DS_SDCARD")))
+(define-public u-boot-P4080DS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P4080DS_SECURE_BOOT")))
+(define-public u-boot-P4080DS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P4080DS_SPIFLASH")))
+(define-public u-boot-P4080DS_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P4080DS_SRIO_PCIE_BOOT")))
+(define-public u-boot-P4080DS
+  (package (inherit u-boot)
+    (name "u-boot-P4080DS")))
+(define-public u-boot-P5020DS_NAND_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P5020DS_NAND_SECURE_BOOT")))
+(define-public u-boot-P5020DS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P5020DS_NAND")))
+(define-public u-boot-P5020DS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P5020DS_SDCARD")))
+(define-public u-boot-P5020DS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P5020DS_SECURE_BOOT")))
+(define-public u-boot-P5020DS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P5020DS_SPIFLASH")))
+(define-public u-boot-P5020DS_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P5020DS_SRIO_PCIE_BOOT")))
+(define-public u-boot-P5020DS
+  (package (inherit u-boot)
+    (name "u-boot-P5020DS")))
+(define-public u-boot-P5040DS_NAND_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P5040DS_NAND_SECURE_BOOT")))
+(define-public u-boot-P5040DS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-P5040DS_NAND")))
+(define-public u-boot-P5040DS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-P5040DS_SDCARD")))
+(define-public u-boot-P5040DS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-P5040DS_SECURE_BOOT")))
+(define-public u-boot-P5040DS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-P5040DS_SPIFLASH")))
+(define-public u-boot-P5040DS
+  (package (inherit u-boot)
+    (name "u-boot-P5040DS")))
+(define-public u-boot-PATI
+  (package (inherit u-boot)
+    (name "u-boot-PATI")))
+(define-public u-boot-PIP405
+  (package (inherit u-boot)
+    (name "u-boot-PIP405")))
+(define-public u-boot-PLU405
+  (package (inherit u-boot)
+    (name "u-boot-PLU405")))
+(define-public u-boot-PMC405DE
+  (package (inherit u-boot)
+    (name "u-boot-PMC405DE")))
+(define-public u-boot-PMC440
+  (package (inherit u-boot)
+    (name "u-boot-PMC440")))
+(define-public u-boot-Sinlinx_SinA31s
+  (package (inherit u-boot)
+    (name "u-boot-Sinlinx_SinA31s")))
+(define-public u-boot-Sinlinx_SinA33
+  (package (inherit u-boot)
+    (name "u-boot-Sinlinx_SinA33")))
+(define-public u-boot-Sinovoip_BPI_M2
+  (package (inherit u-boot)
+    (name "u-boot-Sinovoip_BPI_M2")))
+(define-public u-boot-Sinovoip_BPI_M3
+  (package (inherit u-boot)
+    (name "u-boot-Sinovoip_BPI_M3")))
+(define-public u-boot-T1023RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T1023RDB_NAND")))
+(define-public u-boot-T1023RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T1023RDB_SDCARD")))
+(define-public u-boot-T1023RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1023RDB_SECURE_BOOT")))
+(define-public u-boot-T1023RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T1023RDB_SPIFLASH")))
+(define-public u-boot-T1023RDB
+  (package (inherit u-boot)
+    (name "u-boot-T1023RDB")))
+(define-public u-boot-T1024QDS_DDR4_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1024QDS_DDR4_SECURE_BOOT")))
+(define-public u-boot-T1024QDS_DDR4
+  (package (inherit u-boot)
+    (name "u-boot-T1024QDS_DDR4")))
+(define-public u-boot-T1024QDS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T1024QDS_NAND")))
+(define-public u-boot-T1024QDS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T1024QDS_SDCARD")))
+(define-public u-boot-T1024QDS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1024QDS_SECURE_BOOT")))
+(define-public u-boot-T1024QDS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T1024QDS_SPIFLASH")))
+(define-public u-boot-T1024QDS
+  (package (inherit u-boot)
+    (name "u-boot-T1024QDS")))
+(define-public u-boot-T1024RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T1024RDB_NAND")))
+(define-public u-boot-T1024RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T1024RDB_SDCARD")))
+(define-public u-boot-T1024RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1024RDB_SECURE_BOOT")))
+(define-public u-boot-T1024RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T1024RDB_SPIFLASH")))
+(define-public u-boot-T1024RDB
+  (package (inherit u-boot)
+    (name "u-boot-T1024RDB")))
+(define-public u-boot-T1040D4RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T1040D4RDB_NAND")))
+(define-public u-boot-T1040D4RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T1040D4RDB_SDCARD")))
+(define-public u-boot-T1040D4RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1040D4RDB_SECURE_BOOT")))
+(define-public u-boot-T1040D4RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T1040D4RDB_SPIFLASH")))
+(define-public u-boot-T1040D4RDB
+  (package (inherit u-boot)
+    (name "u-boot-T1040D4RDB")))
+(define-public u-boot-T1040QDS_DDR4
+  (package (inherit u-boot)
+    (name "u-boot-T1040QDS_DDR4")))
+(define-public u-boot-T1040QDS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1040QDS_SECURE_BOOT")))
+(define-public u-boot-T1040QDS
+  (package (inherit u-boot)
+    (name "u-boot-T1040QDS")))
+(define-public u-boot-T1040RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T1040RDB_NAND")))
+(define-public u-boot-T1040RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T1040RDB_SDCARD")))
+(define-public u-boot-T1040RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1040RDB_SECURE_BOOT")))
+(define-public u-boot-T1040RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T1040RDB_SPIFLASH")))
+(define-public u-boot-T1040RDB
+  (package (inherit u-boot)
+    (name "u-boot-T1040RDB")))
+(define-public u-boot-T1042D4RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T1042D4RDB_NAND")))
+(define-public u-boot-T1042D4RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T1042D4RDB_SDCARD")))
+(define-public u-boot-T1042D4RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1042D4RDB_SECURE_BOOT")))
+(define-public u-boot-T1042D4RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T1042D4RDB_SPIFLASH")))
+(define-public u-boot-T1042D4RDB
+  (package (inherit u-boot)
+    (name "u-boot-T1042D4RDB")))
+(define-public u-boot-T1042RDB_PI_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T1042RDB_PI_NAND")))
+(define-public u-boot-T1042RDB_PI_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T1042RDB_PI_SDCARD")))
+(define-public u-boot-T1042RDB_PI_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T1042RDB_PI_SPIFLASH")))
+(define-public u-boot-T1042RDB_PI
+  (package (inherit u-boot)
+    (name "u-boot-T1042RDB_PI")))
+(define-public u-boot-T1042RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T1042RDB_SECURE_BOOT")))
+(define-public u-boot-T1042RDB
+  (package (inherit u-boot)
+    (name "u-boot-T1042RDB")))
+(define-public u-boot-T2080QDS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T2080QDS_NAND")))
+(define-public u-boot-T2080QDS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T2080QDS_SDCARD")))
+(define-public u-boot-T2080QDS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T2080QDS_SECURE_BOOT")))
+(define-public u-boot-T2080QDS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T2080QDS_SPIFLASH")))
+(define-public u-boot-T2080QDS_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T2080QDS_SRIO_PCIE_BOOT")))
+(define-public u-boot-T2080QDS
+  (package (inherit u-boot)
+    (name "u-boot-T2080QDS")))
+(define-public u-boot-T2080RDB_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T2080RDB_NAND")))
+(define-public u-boot-T2080RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T2080RDB_SDCARD")))
+(define-public u-boot-T2080RDB_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T2080RDB_SECURE_BOOT")))
+(define-public u-boot-T2080RDB_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T2080RDB_SPIFLASH")))
+(define-public u-boot-T2080RDB_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T2080RDB_SRIO_PCIE_BOOT")))
+(define-public u-boot-T2080RDB
+  (package (inherit u-boot)
+    (name "u-boot-T2080RDB")))
+(define-public u-boot-T2081QDS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T2081QDS_NAND")))
+(define-public u-boot-T2081QDS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T2081QDS_SDCARD")))
+(define-public u-boot-T2081QDS_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-T2081QDS_SPIFLASH")))
+(define-public u-boot-T2081QDS_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T2081QDS_SRIO_PCIE_BOOT")))
+(define-public u-boot-T2081QDS
+  (package (inherit u-boot)
+    (name "u-boot-T2081QDS")))
+(define-public u-boot-T4160QDS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T4160QDS_NAND")))
+(define-public u-boot-T4160QDS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T4160QDS_SDCARD")))
+(define-public u-boot-T4160QDS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T4160QDS_SECURE_BOOT")))
+(define-public u-boot-T4160QDS
+  (package (inherit u-boot)
+    (name "u-boot-T4160QDS")))
+(define-public u-boot-T4160RDB
+  (package (inherit u-boot)
+    (name "u-boot-T4160RDB")))
+(define-public u-boot-T4240QDS_NAND
+  (package (inherit u-boot)
+    (name "u-boot-T4240QDS_NAND")))
+(define-public u-boot-T4240QDS_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T4240QDS_SDCARD")))
+(define-public u-boot-T4240QDS_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T4240QDS_SECURE_BOOT")))
+(define-public u-boot-T4240QDS_SRIO_PCIE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-T4240QDS_SRIO_PCIE_BOOT")))
+(define-public u-boot-T4240QDS
+  (package (inherit u-boot)
+    (name "u-boot-T4240QDS")))
+(define-public u-boot-T4240RDB_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-T4240RDB_SDCARD")))
+(define-public u-boot-T4240RDB
+  (package (inherit u-boot)
+    (name "u-boot-T4240RDB")))
+(define-public u-boot-TQM5200S_HIGHBOOT
+  (package (inherit u-boot)
+    (name "u-boot-TQM5200S_HIGHBOOT")))
+(define-public u-boot-TQM5200S
+  (package (inherit u-boot)
+    (name "u-boot-TQM5200S")))
+(define-public u-boot-TQM5200_B_HIGHBOOT
+  (package (inherit u-boot)
+    (name "u-boot-TQM5200_B_HIGHBOOT")))
+(define-public u-boot-TQM5200_B
+  (package (inherit u-boot)
+    (name "u-boot-TQM5200_B")))
+(define-public u-boot-TQM5200_STK100
+  (package (inherit u-boot)
+    (name "u-boot-TQM5200_STK100")))
+(define-public u-boot-TQM5200
+  (package (inherit u-boot)
+    (name "u-boot-TQM5200")))
+(define-public u-boot-TQM823L_LCD
+  (package (inherit u-boot)
+    (name "u-boot-TQM823L_LCD")))
+(define-public u-boot-TQM823L
+  (package (inherit u-boot)
+    (name "u-boot-TQM823L")))
+(define-public u-boot-TQM823M
+  (package (inherit u-boot)
+    (name "u-boot-TQM823M")))
+(define-public u-boot-TQM834x
+  (package (inherit u-boot)
+    (name "u-boot-TQM834x")))
+(define-public u-boot-TQM850L
+  (package (inherit u-boot)
+    (name "u-boot-TQM850L")))
+(define-public u-boot-TQM850M
+  (package (inherit u-boot)
+    (name "u-boot-TQM850M")))
+(define-public u-boot-TQM855L
+  (package (inherit u-boot)
+    (name "u-boot-TQM855L")))
+(define-public u-boot-TQM855M
+  (package (inherit u-boot)
+    (name "u-boot-TQM855M")))
+(define-public u-boot-TQM860L
+  (package (inherit u-boot)
+    (name "u-boot-TQM860L")))
+(define-public u-boot-TQM860M
+  (package (inherit u-boot)
+    (name "u-boot-TQM860M")))
+(define-public u-boot-TQM862L
+  (package (inherit u-boot)
+    (name "u-boot-TQM862L")))
+(define-public u-boot-TQM862M
+  (package (inherit u-boot)
+    (name "u-boot-TQM862M")))
+(define-public u-boot-TQM866M
+  (package (inherit u-boot)
+    (name "u-boot-TQM866M")))
+(define-public u-boot-TQM885D
+  (package (inherit u-boot)
+    (name "u-boot-TQM885D")))
+(define-public u-boot-TTTech
+  (package (inherit u-boot)
+    (name "u-boot-TTTech")))
+(define-public u-boot-TWR-P1025
+  (package (inherit u-boot)
+    (name "u-boot-TWR-P1025")))
+(define-public u-boot-UCP1020_SPIFLASH
+  (package (inherit u-boot)
+    (name "u-boot-UCP1020_SPIFLASH")))
+(define-public u-boot-UCP1020
+  (package (inherit u-boot)
+    (name "u-boot-UCP1020")))
+(define-public u-boot-UTOO_P66
+  (package (inherit u-boot)
+    (name "u-boot-UTOO_P66")))
+(define-public u-boot-VCMA9
+  (package (inherit u-boot)
+    (name "u-boot-VCMA9")))
+(define-public u-boot-VOM405
+  (package (inherit u-boot)
+    (name "u-boot-VOM405")))
+(define-public u-boot-Wexler_TAB7200
+  (package (inherit u-boot)
+    (name "u-boot-Wexler_TAB7200")))
+(define-public u-boot-Wits_Pro_A20_DKT
+  (package (inherit u-boot)
+    (name "u-boot-Wits_Pro_A20_DKT")))
+(define-public u-boot-Wobo_i5
+  (package (inherit u-boot)
+    (name "u-boot-Wobo_i5")))
+(define-public u-boot-Yones_Toptech_BD1078
+  (package (inherit u-boot)
+    (name "u-boot-Yones_Toptech_BD1078")))
+(define-public u-boot-Yones_Toptech_BS1078_V2
+  (package (inherit u-boot)
+    (name "u-boot-Yones_Toptech_BS1078_V2")))
+(define-public u-boot-a3m071
+  (package (inherit u-boot)
+    (name "u-boot-a3m071")))
+(define-public u-boot-a4m072
+  (package (inherit u-boot)
+    (name "u-boot-a4m072")))
+(define-public u-boot-a4m2k
+  (package (inherit u-boot)
+    (name "u-boot-a4m2k")))
+(define-public u-boot-ac14xx
+  (package (inherit u-boot)
+    (name "u-boot-ac14xx")))
+(define-public u-boot-acadia
+  (package (inherit u-boot)
+    (name "u-boot-acadia")))
+(define-public u-boot-adp-ag101p
+  (package (inherit u-boot)
+    (name "u-boot-adp-ag101p")))
+(define-public u-boot-alt
+  (package (inherit u-boot)
+    (name "u-boot-alt")))
+(define-public u-boot-am335x_baltos
+  (package (inherit u-boot)
+    (name "u-boot-am335x_baltos")))
+(define-public u-boot-am335x_boneblack
+  (package (inherit u-boot)
+    (name "u-boot-am335x_boneblack")))
+(define-public u-boot-am335x_boneblack_vboot
+  (package (inherit u-boot)
+    (name "u-boot-am335x_boneblack_vboot")))
+(define-public u-boot-am335x_evm
+  (package (inherit u-boot)
+    (name "u-boot-am335x_evm")))
+(define-public u-boot-am335x_evm_nor
+  (package (inherit u-boot)
+    (name "u-boot-am335x_evm_nor")))
+(define-public u-boot-am335x_evm_norboot
+  (package (inherit u-boot)
+    (name "u-boot-am335x_evm_norboot")))
+(define-public u-boot-am335x_evm_spiboot
+  (package (inherit u-boot)
+    (name "u-boot-am335x_evm_spiboot")))
+(define-public u-boot-am335x_evm_usbspl
+  (package (inherit u-boot)
+    (name "u-boot-am335x_evm_usbspl")))
+(define-public u-boot-am335x_igep0033
+  (package (inherit u-boot)
+    (name "u-boot-am335x_igep0033")))
+(define-public u-boot-am335x_shc
+  (package (inherit u-boot)
+    (name "u-boot-am335x_shc")))
+(define-public u-boot-am335x_shc_ict
+  (package (inherit u-boot)
+    (name "u-boot-am335x_shc_ict")))
+(define-public u-boot-am335x_shc_netboot
+  (package (inherit u-boot)
+    (name "u-boot-am335x_shc_netboot")))
+(define-public u-boot-am335x_shc_prompt
+  (package (inherit u-boot)
+    (name "u-boot-am335x_shc_prompt")))
+(define-public u-boot-am335x_shc_sdboot
+  (package (inherit u-boot)
+    (name "u-boot-am335x_shc_sdboot")))
+(define-public u-boot-am335x_shc_sdboot_prompt
+  (package (inherit u-boot)
+    (name "u-boot-am335x_shc_sdboot_prompt")))
+(define-public u-boot-am335x_sl50
+  (package (inherit u-boot)
+    (name "u-boot-am335x_sl50")))
+(define-public u-boot-am3517_crane
+  (package (inherit u-boot)
+    (name "u-boot-am3517_crane")))
+(define-public u-boot-am3517_evm
+  (package (inherit u-boot)
+    (name "u-boot-am3517_evm")))
+(define-public u-boot-am43xx_evm
+  (package (inherit u-boot)
+    (name "u-boot-am43xx_evm")))
+(define-public u-boot-am43xx_evm_ethboot
+  (package (inherit u-boot)
+    (name "u-boot-am43xx_evm_ethboot")))
+(define-public u-boot-am43xx_evm_qspiboot
+  (package (inherit u-boot)
+    (name "u-boot-am43xx_evm_qspiboot")))
+(define-public u-boot-am43xx_evm_usbhost_boot
+  (package (inherit u-boot)
+    (name "u-boot-am43xx_evm_usbhost_boot")))
+(define-public u-boot-am43xx_hs_evm
+  (package (inherit u-boot)
+    (name "u-boot-am43xx_hs_evm")))
+(define-public u-boot-am57xx_evm
+  (package (inherit u-boot)
+    (name "u-boot-am57xx_evm")))
+(define-public u-boot-am57xx_evm_nodt
+  (package (inherit u-boot)
+    (name "u-boot-am57xx_evm_nodt")))
+(define-public u-boot-am57xx_hs_evm
+  (package (inherit u-boot)
+    (name "u-boot-am57xx_hs_evm")))
+(define-public u-boot-amcore
+  (package (inherit u-boot)
+    (name "u-boot-amcore")))
+(define-public u-boot-ap121
+  (package (inherit u-boot)
+    (name "u-boot-ap121")))
+(define-public u-boot-ap143
+  (package (inherit u-boot)
+    (name "u-boot-ap143")))
+(define-public u-boot-ap325rxa
+  (package (inherit u-boot)
+    (name "u-boot-ap325rxa")))
+(define-public u-boot-ap_sh4a_4a
+  (package (inherit u-boot)
+    (name "u-boot-ap_sh4a_4a")))
+(define-public u-boot-apalis_t30
+  (package (inherit u-boot)
+    (name "u-boot-apalis_t30")))
+(define-public u-boot-apf27
+  (package (inherit u-boot)
+    (name "u-boot-apf27")))
+(define-public u-boot-apx4devkit
+  (package (inherit u-boot)
+    (name "u-boot-apx4devkit")))
+(define-public u-boot-arcangel4-be
+  (package (inherit u-boot)
+    (name "u-boot-arcangel4-be")))
+(define-public u-boot-arcangel4
+  (package (inherit u-boot)
+    (name "u-boot-arcangel4")))
+(define-public u-boot-arches
+  (package (inherit u-boot)
+    (name "u-boot-arches")))
+(define-public u-boot-aria
+  (package (inherit u-boot)
+    (name "u-boot-aria")))
+(define-public u-boot-aristainetos2
+  (package (inherit u-boot)
+    (name "u-boot-aristainetos2")))
+(define-public u-boot-aristainetos2b
+  (package (inherit u-boot)
+    (name "u-boot-aristainetos2b")))
+(define-public u-boot-aristainetos
+  (package (inherit u-boot)
+    (name "u-boot-aristainetos")))
+(define-public u-boot-armadillo-800eva
+  (package (inherit u-boot)
+    (name "u-boot-armadillo-800eva")))
+(define-public u-boot-arndale
+  (package (inherit u-boot)
+    (name "u-boot-arndale")))
+(define-public u-boot-aspenite
+  (package (inherit u-boot)
+    (name "u-boot-aspenite")))
+(define-public u-boot-astro_mcf5373l
+  (package (inherit u-boot)
+    (name "u-boot-astro_mcf5373l")))
+(define-public u-boot-at91rm9200ek
+  (package (inherit u-boot)
+    (name "u-boot-at91rm9200ek")))
+(define-public u-boot-at91rm9200ek_ram
+  (package (inherit u-boot)
+    (name "u-boot-at91rm9200ek_ram")))
+(define-public u-boot-at91sam9260ek_dataflash_cs0
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9260ek_dataflash_cs0")))
+(define-public u-boot-at91sam9260ek_dataflash_cs1
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9260ek_dataflash_cs1")))
+(define-public u-boot-at91sam9260ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9260ek_nandflash")))
+(define-public u-boot-at91sam9261ek_dataflash_cs0
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9261ek_dataflash_cs0")))
+(define-public u-boot-at91sam9261ek_dataflash_cs3
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9261ek_dataflash_cs3")))
+(define-public u-boot-at91sam9261ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9261ek_nandflash")))
+(define-public u-boot-at91sam9263ek_dataflash_cs0
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9263ek_dataflash_cs0")))
+(define-public u-boot-at91sam9263ek_dataflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9263ek_dataflash")))
+(define-public u-boot-at91sam9263ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9263ek_nandflash")))
+(define-public u-boot-at91sam9263ek_norflash_boot
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9263ek_norflash_boot")))
+(define-public u-boot-at91sam9263ek_norflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9263ek_norflash")))
+(define-public u-boot-at91sam9g10ek_dataflash_cs0
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g10ek_dataflash_cs0")))
+(define-public u-boot-at91sam9g10ek_dataflash_cs3
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g10ek_dataflash_cs3")))
+(define-public u-boot-at91sam9g10ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g10ek_nandflash")))
+(define-public u-boot-at91sam9g20ek_2mmc
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g20ek_2mmc")))
+(define-public u-boot-at91sam9g20ek_2mmc_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g20ek_2mmc_nandflash")))
+(define-public u-boot-at91sam9g20ek_dataflash_cs0
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g20ek_dataflash_cs0")))
+(define-public u-boot-at91sam9g20ek_dataflash_cs1
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g20ek_dataflash_cs1")))
+(define-public u-boot-at91sam9g20ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9g20ek_nandflash")))
+(define-public u-boot-at91sam9m10g45ek_mmc
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9m10g45ek_mmc")))
+(define-public u-boot-at91sam9m10g45ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9m10g45ek_nandflash")))
+(define-public u-boot-at91sam9n12ek_mmc
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9n12ek_mmc")))
+(define-public u-boot-at91sam9n12ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9n12ek_nandflash")))
+(define-public u-boot-at91sam9n12ek_spiflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9n12ek_spiflash")))
+(define-public u-boot-at91sam9rlek_dataflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9rlek_dataflash")))
+(define-public u-boot-at91sam9rlek_mmc
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9rlek_mmc")))
+(define-public u-boot-at91sam9rlek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9rlek_nandflash")))
+(define-public u-boot-at91sam9x5ek_dataflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9x5ek_dataflash")))
+(define-public u-boot-at91sam9x5ek_mmc
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9x5ek_mmc")))
+(define-public u-boot-at91sam9x5ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9x5ek_nandflash")))
+(define-public u-boot-at91sam9x5ek_spiflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9x5ek_spiflash")))
+(define-public u-boot-at91sam9xeek_dataflash_cs0
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9xeek_dataflash_cs0")))
+(define-public u-boot-at91sam9xeek_dataflash_cs1
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9xeek_dataflash_cs1")))
+(define-public u-boot-at91sam9xeek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-at91sam9xeek_nandflash")))
+(define-public u-boot-atngw100
+  (package (inherit u-boot)
+    (name "u-boot-atngw100")))
+(define-public u-boot-atngw100mkii
+  (package (inherit u-boot)
+    (name "u-boot-atngw100mkii")))
+(define-public u-boot-atstk1002
+  (package (inherit u-boot)
+    (name "u-boot-atstk1002")))
+(define-public u-boot-axm
+  (package (inherit u-boot)
+    (name "u-boot-axm")))
+(define-public u-boot-axs101
+  (package (inherit u-boot)
+    (name "u-boot-axs101")))
+(define-public u-boot-axs103
+  (package (inherit u-boot)
+    (name "u-boot-axs103")))
+(define-public u-boot-ba10_tv_box
+  (package (inherit u-boot)
+    (name "u-boot-ba10_tv_box")))
+(define-public u-boot-bamboo
+  (package (inherit u-boot)
+    (name "u-boot-bamboo")))
+(define-public u-boot-bayleybay
+  (package (inherit u-boot)
+    (name "u-boot-bayleybay")))
+(define-public u-boot-bcm11130
+  (package (inherit u-boot)
+    (name "u-boot-bcm11130")))
+(define-public u-boot-bcm11130_nand
+  (package (inherit u-boot)
+    (name "u-boot-bcm11130_nand")))
+(define-public u-boot-bcm23550_w1d
+  (package (inherit u-boot)
+    (name "u-boot-bcm23550_w1d")))
+(define-public u-boot-bcm28155_ap
+  (package (inherit u-boot)
+    (name "u-boot-bcm28155_ap")))
+(define-public u-boot-bcm28155_w1d
+  (package (inherit u-boot)
+    (name "u-boot-bcm28155_w1d")))
+(define-public u-boot-bcm911360_entphn-ns
+  (package (inherit u-boot)
+    (name "u-boot-bcm911360_entphn-ns")))
+(define-public u-boot-bcm911360_entphn
+  (package (inherit u-boot)
+    (name "u-boot-bcm911360_entphn")))
+(define-public u-boot-bcm911360k
+  (package (inherit u-boot)
+    (name "u-boot-bcm911360k")))
+(define-public u-boot-bcm958300k-ns
+  (package (inherit u-boot)
+    (name "u-boot-bcm958300k-ns")))
+(define-public u-boot-bcm958300k
+  (package (inherit u-boot)
+    (name "u-boot-bcm958300k")))
+(define-public u-boot-bcm958305k
+  (package (inherit u-boot)
+    (name "u-boot-bcm958305k")))
+(define-public u-boot-bcm958622hr
+  (package (inherit u-boot)
+    (name "u-boot-bcm958622hr")))
+(define-public u-boot-bct-brettl2
+  (package (inherit u-boot)
+    (name "u-boot-bct-brettl2")))
+(define-public u-boot-beaver
+  (package (inherit u-boot)
+    (name "u-boot-beaver")))
+(define-public u-boot-bf506f-ezkit
+  (package (inherit u-boot)
+    (name "u-boot-bf506f-ezkit")))
+(define-public u-boot-bf518f-ezbrd
+  (package (inherit u-boot)
+    (name "u-boot-bf518f-ezbrd")))
+(define-public u-boot-bf525-ucr2
+  (package (inherit u-boot)
+    (name "u-boot-bf525-ucr2")))
+(define-public u-boot-bf526-ezbrd
+  (package (inherit u-boot)
+    (name "u-boot-bf526-ezbrd")))
+(define-public u-boot-bf527-ad7160-eval
+  (package (inherit u-boot)
+    (name "u-boot-bf527-ad7160-eval")))
+(define-public u-boot-bf527-ezkit-v2
+  (package (inherit u-boot)
+    (name "u-boot-bf527-ezkit-v2")))
+(define-public u-boot-bf527-ezkit
+  (package (inherit u-boot)
+    (name "u-boot-bf527-ezkit")))
+(define-public u-boot-bf527-sdp
+  (package (inherit u-boot)
+    (name "u-boot-bf527-sdp")))
+(define-public u-boot-bf533-ezkit
+  (package (inherit u-boot)
+    (name "u-boot-bf533-ezkit")))
+(define-public u-boot-bf533-stamp
+  (package (inherit u-boot)
+    (name "u-boot-bf533-stamp")))
+(define-public u-boot-bf537-minotaur
+  (package (inherit u-boot)
+    (name "u-boot-bf537-minotaur")))
+(define-public u-boot-bf537-pnav
+  (package (inherit u-boot)
+    (name "u-boot-bf537-pnav")))
+(define-public u-boot-bf537-srv1
+  (package (inherit u-boot)
+    (name "u-boot-bf537-srv1")))
+(define-public u-boot-bf537-stamp
+  (package (inherit u-boot)
+    (name "u-boot-bf537-stamp")))
+(define-public u-boot-bf538f-ezkit
+  (package (inherit u-boot)
+    (name "u-boot-bf538f-ezkit")))
+(define-public u-boot-bf548-ezkit
+  (package (inherit u-boot)
+    (name "u-boot-bf548-ezkit")))
+(define-public u-boot-bf561-acvilon
+  (package (inherit u-boot)
+    (name "u-boot-bf561-acvilon")))
+(define-public u-boot-bf561-ezkit
+  (package (inherit u-boot)
+    (name "u-boot-bf561-ezkit")))
+(define-public u-boot-bf609-ezkit
+  (package (inherit u-boot)
+    (name "u-boot-bf609-ezkit")))
+(define-public u-boot-bg0900
+  (package (inherit u-boot)
+    (name "u-boot-bg0900")))
+(define-public u-boot-birdland_bav335a
+  (package (inherit u-boot)
+    (name "u-boot-birdland_bav335a")))
+(define-public u-boot-birdland_bav335b
+  (package (inherit u-boot)
+    (name "u-boot-birdland_bav335b")))
+(define-public u-boot-blackstamp
+  (package (inherit u-boot)
+    (name "u-boot-blackstamp")))
+(define-public u-boot-blackvme
+  (package (inherit u-boot)
+    (name "u-boot-blackvme")))
+(define-public u-boot-br4
+  (package (inherit u-boot)
+    (name "u-boot-br4")))
+(define-public u-boot-brppt1_mmc
+  (package (inherit u-boot)
+    (name "u-boot-brppt1_mmc")))
+(define-public u-boot-brppt1_nand
+  (package (inherit u-boot)
+    (name "u-boot-brppt1_nand")))
+(define-public u-boot-brppt1_spi
+  (package (inherit u-boot)
+    (name "u-boot-brppt1_spi")))
+(define-public u-boot-brxre1
+  (package (inherit u-boot)
+    (name "u-boot-brxre1")))
+(define-public u-boot-bubinga
+  (package (inherit u-boot)
+    (name "u-boot-bubinga")))
+(define-public u-boot-caddy2
+  (package (inherit u-boot)
+    (name "u-boot-caddy2")))
+(define-public u-boot-cairo
+  (package (inherit u-boot)
+    (name "u-boot-cairo")))
+(define-public u-boot-calimain
+  (package (inherit u-boot)
+    (name "u-boot-calimain")))
+(define-public u-boot-cam5200
+  (package (inherit u-boot)
+    (name "u-boot-cam5200")))
+(define-public u-boot-cam5200_niosflash
+  (package (inherit u-boot)
+    (name "u-boot-cam5200_niosflash")))
+(define-public u-boot-canmb
+  (package (inherit u-boot)
+    (name "u-boot-canmb")))
+(define-public u-boot-canyonlands
+  (package (inherit u-boot)
+    (name "u-boot-canyonlands")))
+(define-public u-boot-cardhu
+  (package (inherit u-boot)
+    (name "u-boot-cardhu")))
+(define-public u-boot-cgtqmx6eval
+  (package (inherit u-boot)
+    (name "u-boot-cgtqmx6eval")))
+(define-public u-boot-charon
+  (package (inherit u-boot)
+    (name "u-boot-charon")))
+(define-public u-boot-chromebook_jerry
+  (package (inherit u-boot)
+    (name "u-boot-chromebook_jerry")))
+(define-public u-boot-chromebook_link
+  (package (inherit u-boot)
+    (name "u-boot-chromebook_link")))
+(define-public u-boot-chromebook_samus
+  (package (inherit u-boot)
+    (name "u-boot-chromebook_samus")))
+(define-public u-boot-chromebox_panther
+  (package (inherit u-boot)
+    (name "u-boot-chromebox_panther")))
+(define-public u-boot-clearfog
+  (package (inherit u-boot)
+    (name "u-boot-clearfog")))
+(define-public u-boot-cm-bf527
+  (package (inherit u-boot)
+    (name "u-boot-cm-bf527")))
+(define-public u-boot-cm-bf533
+  (package (inherit u-boot)
+    (name "u-boot-cm-bf533")))
+(define-public u-boot-cm-bf537e
+  (package (inherit u-boot)
+    (name "u-boot-cm-bf537e")))
+(define-public u-boot-cm-bf537u
+  (package (inherit u-boot)
+    (name "u-boot-cm-bf537u")))
+(define-public u-boot-cm-bf548
+  (package (inherit u-boot)
+    (name "u-boot-cm-bf548")))
+(define-public u-boot-cm-bf561
+  (package (inherit u-boot)
+    (name "u-boot-cm-bf561")))
+(define-public u-boot-cm5200
+  (package (inherit u-boot)
+    (name "u-boot-cm5200")))
+(define-public u-boot-cm_fx6
+  (package (inherit u-boot)
+    (name "u-boot-cm_fx6")))
+(define-public u-boot-cm_t335
+  (package (inherit u-boot)
+    (name "u-boot-cm_t335")))
+(define-public u-boot-cm_t3517
+  (package (inherit u-boot)
+    (name "u-boot-cm_t3517")))
+(define-public u-boot-cm_t35
+  (package (inherit u-boot)
+    (name "u-boot-cm_t35")))
+(define-public u-boot-cm_t43
+  (package (inherit u-boot)
+    (name "u-boot-cm_t43")))
+(define-public u-boot-cm_t54
+  (package (inherit u-boot)
+    (name "u-boot-cm_t54")))
+(define-public u-boot-cobra5272
+  (package (inherit u-boot)
+    (name "u-boot-cobra5272")))
+(define-public u-boot-colibri_pxa270
+  (package (inherit u-boot)
+    (name "u-boot-colibri_pxa270")))
+(define-public u-boot-colibri_t20
+  (package (inherit u-boot)
+    (name "u-boot-colibri_t20")))
+(define-public u-boot-colibri_t30
+  (package (inherit u-boot)
+    (name "u-boot-colibri_t30")))
+(define-public u-boot-colibri_vf
+  (package (inherit u-boot)
+    (name "u-boot-colibri_vf")))
+(define-public u-boot-colorfly_e708_q1
+  (package (inherit u-boot)
+    (name "u-boot-colorfly_e708_q1")))
+(define-public u-boot-conga-qeval20-qa3-e3845
+  (package (inherit u-boot)
+    (name "u-boot-conga-qeval20-qa3-e3845")))
+(define-public u-boot-controlcenterd_36BIT_SDCARD_DEVELOP
+  (package (inherit u-boot)
+    (name "u-boot-controlcenterd_36BIT_SDCARD_DEVELOP")))
+(define-public u-boot-controlcenterd_36BIT_SDCARD
+  (package (inherit u-boot)
+    (name "u-boot-controlcenterd_36BIT_SDCARD")))
+(define-public u-boot-controlcenterd_TRAILBLAZER_DEVELOP
+  (package (inherit u-boot)
+    (name "u-boot-controlcenterd_TRAILBLAZER_DEVELOP")))
+(define-public u-boot-controlcenterd_TRAILBLAZER
+  (package (inherit u-boot)
+    (name "u-boot-controlcenterd_TRAILBLAZER")))
+(define-public u-boot-coreboot-x86
+  (package (inherit u-boot)
+    (name "u-boot-coreboot-x86")))
+(define-public u-boot-corvus
+  (package (inherit u-boot)
+    (name "u-boot-corvus")))
+(define-public u-boot-cougarcanyon2
+  (package (inherit u-boot)
+    (name "u-boot-cougarcanyon2")))
+(define-public u-boot-crownbay
+  (package (inherit u-boot)
+    (name "u-boot-crownbay")))
+(define-public u-boot-d2net_v2
+  (package (inherit u-boot)
+    (name "u-boot-d2net_v2")))
+(define-public u-boot-da850_am18xxevm
+  (package (inherit u-boot)
+    (name "u-boot-da850_am18xxevm")))
+(define-public u-boot-da850evm
+  (package (inherit u-boot)
+    (name "u-boot-da850evm")))
+(define-public u-boot-da850evm_direct_nor
+  (package (inherit u-boot)
+    (name "u-boot-da850evm_direct_nor")))
+(define-public u-boot-dalmore
+  (package (inherit u-boot)
+    (name "u-boot-dalmore")))
+(define-public u-boot-db-88f6720
+  (package (inherit u-boot)
+    (name "u-boot-db-88f6720")))
+(define-public u-boot-db-88f6820-gp
+  (package (inherit u-boot)
+    (name "u-boot-db-88f6820-gp")))
+(define-public u-boot-db-mv784mp-gp
+  (package (inherit u-boot)
+    (name "u-boot-db-mv784mp-gp")))
+(define-public u-boot-dbau1000
+  (package (inherit u-boot)
+    (name "u-boot-dbau1000")))
+(define-public u-boot-dbau1100
+  (package (inherit u-boot)
+    (name "u-boot-dbau1100")))
+(define-public u-boot-dbau1500
+  (package (inherit u-boot)
+    (name "u-boot-dbau1500")))
+(define-public u-boot-dbau1550
+  (package (inherit u-boot)
+    (name "u-boot-dbau1550")))
+(define-public u-boot-dbau1550_el
+  (package (inherit u-boot)
+    (name "u-boot-dbau1550_el")))
+(define-public u-boot-devconcenter
+  (package (inherit u-boot)
+    (name "u-boot-devconcenter")))
+(define-public u-boot-devkit3250
+  (package (inherit u-boot)
+    (name "u-boot-devkit3250")))
+(define-public u-boot-devkit8000
+  (package (inherit u-boot)
+    (name "u-boot-devkit8000")))
+(define-public u-boot-difrnce_dit4350
+  (package (inherit u-boot)
+    (name "u-boot-difrnce_dit4350")))
+(define-public u-boot-digsy_mtc_RAMBOOT
+  (package (inherit u-boot)
+    (name "u-boot-digsy_mtc_RAMBOOT")))
+(define-public u-boot-digsy_mtc
+  (package (inherit u-boot)
+    (name "u-boot-digsy_mtc")))
+(define-public u-boot-digsy_mtc_rev5_RAMBOOT
+  (package (inherit u-boot)
+    (name "u-boot-digsy_mtc_rev5_RAMBOOT")))
+(define-public u-boot-digsy_mtc_rev5
+  (package (inherit u-boot)
+    (name "u-boot-digsy_mtc_rev5")))
+(define-public u-boot-dlvision-10g
+  (package (inherit u-boot)
+    (name "u-boot-dlvision-10g")))
+(define-public u-boot-dlvision
+  (package (inherit u-boot)
+    (name "u-boot-dlvision")))
+(define-public u-boot-dnp5370
+  (package (inherit u-boot)
+    (name "u-boot-dnp5370")))
+(define-public u-boot-dns325
+  (package (inherit u-boot)
+    (name "u-boot-dns325")))
+(define-public u-boot-dockstar
+  (package (inherit u-boot)
+    (name "u-boot-dockstar")))
+(define-public u-boot-dra7xx_evm
+  (package (inherit u-boot)
+    (name "u-boot-dra7xx_evm")))
+(define-public u-boot-dra7xx_hs_evm
+  (package (inherit u-boot)
+    (name "u-boot-dra7xx_hs_evm")))
+(define-public u-boot-draco
+  (package (inherit u-boot)
+    (name "u-boot-draco")))
+(define-public u-boot-dragonboard410c
+  (package (inherit u-boot)
+    (name "u-boot-dragonboard410c")))
+(define-public u-boot-dreamplug
+  (package (inherit u-boot)
+    (name "u-boot-dreamplug")))
+(define-public u-boot-ds414
+  (package (inherit u-boot)
+    (name "u-boot-ds414")))
+(define-public u-boot-dserve_dsrv9703c
+  (package (inherit u-boot)
+    (name "u-boot-dserve_dsrv9703c")))
+(define-public u-boot-duovero
+  (package (inherit u-boot)
+    (name "u-boot-duovero")))
+(define-public u-boot-e2220-1170
+  (package (inherit u-boot)
+    (name "u-boot-e2220-1170")))
+(define-public u-boot-ea20
+  (package (inherit u-boot)
+    (name "u-boot-ea20")))
+(define-public u-boot-eb_cpu5282
+  (package (inherit u-boot)
+    (name "u-boot-eb_cpu5282")))
+(define-public u-boot-eb_cpu5282_internal
+  (package (inherit u-boot)
+    (name "u-boot-eb_cpu5282_internal")))
+(define-public u-boot-eco5pk
+  (package (inherit u-boot)
+    (name "u-boot-eco5pk")))
+(define-public u-boot-ecovec
+  (package (inherit u-boot)
+    (name "u-boot-ecovec")))
+(define-public u-boot-edb9315a
+  (package (inherit u-boot)
+    (name "u-boot-edb9315a")))
+(define-public u-boot-edminiv2
+  (package (inherit u-boot)
+    (name "u-boot-edminiv2")))
+(define-public u-boot-efi-x86
+  (package (inherit u-boot)
+    (name "u-boot-efi-x86")))
+(define-public u-boot-espresso7420
+  (package (inherit u-boot)
+    (name "u-boot-espresso7420")))
+(define-public u-boot-espt
+  (package (inherit u-boot)
+    (name "u-boot-espt")))
+(define-public u-boot-etamin
+  (package (inherit u-boot)
+    (name "u-boot-etamin")))
+(define-public u-boot-ethernut5
+  (package (inherit u-boot)
+    (name "u-boot-ethernut5")))
+(define-public u-boot-evb-rk3036
+  (package (inherit u-boot)
+    (name "u-boot-evb-rk3036")))
+(define-public u-boot-firefly-rk3288
+  (package (inherit u-boot)
+    (name "u-boot-firefly-rk3288")))
+(define-public u-boot-flea3
+  (package (inherit u-boot)
+    (name "u-boot-flea3")))
+(define-public u-boot-fo300
+  (package (inherit u-boot)
+    (name "u-boot-fo300")))
+(define-public u-boot-ga10h_v1_1
+  (package (inherit u-boot)
+    (name "u-boot-ga10h_v1_1")))
+(define-public u-boot-galileo
+  (package (inherit u-boot)
+    (name "u-boot-galileo")))
+(define-public u-boot-gdppc440etx
+  (package (inherit u-boot)
+    (name "u-boot-gdppc440etx")))
+(define-public u-boot-ge_b450v3
+  (package (inherit u-boot)
+    (name "u-boot-ge_b450v3")))
+(define-public u-boot-ge_b650v3
+  (package (inherit u-boot)
+    (name "u-boot-ge_b650v3")))
+(define-public u-boot-ge_b850v3
+  (package (inherit u-boot)
+    (name "u-boot-ge_b850v3")))
+(define-public u-boot-glacier
+  (package (inherit u-boot)
+    (name "u-boot-glacier")))
+(define-public u-boot-glacier_ramboot
+  (package (inherit u-boot)
+    (name "u-boot-glacier_ramboot")))
+(define-public u-boot-goflexhome
+  (package (inherit u-boot)
+    (name "u-boot-goflexhome")))
+(define-public u-boot-gose
+  (package (inherit u-boot)
+    (name "u-boot-gose")))
+(define-public u-boot-gplugd
+  (package (inherit u-boot)
+    (name "u-boot-gplugd")))
+(define-public u-boot-gr_cpci_ax2000
+  (package (inherit u-boot)
+    (name "u-boot-gr_cpci_ax2000")))
+(define-public u-boot-gr_ep2s60
+  (package (inherit u-boot)
+    (name "u-boot-gr_ep2s60")))
+(define-public u-boot-gr_xc3s_1500
+  (package (inherit u-boot)
+    (name "u-boot-gr_xc3s_1500")))
+(define-public u-boot-grasshopper
+  (package (inherit u-boot)
+    (name "u-boot-grasshopper")))
+(define-public u-boot-grsim
+  (package (inherit u-boot)
+    (name "u-boot-grsim")))
+(define-public u-boot-grsim_leon2
+  (package (inherit u-boot)
+    (name "u-boot-grsim_leon2")))
+(define-public u-boot-gt90h_v4
+  (package (inherit u-boot)
+    (name "u-boot-gt90h_v4")))
+(define-public u-boot-gurnard
+  (package (inherit u-boot)
+    (name "u-boot-gurnard")))
+(define-public u-boot-guruplug
+  (package (inherit u-boot)
+    (name "u-boot-guruplug")))
+(define-public u-boot-gwventana
+  (package (inherit u-boot)
+    (name "u-boot-gwventana")))
+(define-public u-boot-h2200
+  (package (inherit u-boot)
+    (name "u-boot-h2200")))
+(define-public u-boot-h8_homlet_v2
+  (package (inherit u-boot)
+    (name "u-boot-h8_homlet_v2")))
+(define-public u-boot-haleakala
+  (package (inherit u-boot)
+    (name "u-boot-haleakala")))
+(define-public u-boot-harmony
+  (package (inherit u-boot)
+    (name "u-boot-harmony")))
+(define-public u-boot-highbank
+  (package (inherit u-boot)
+    (name "u-boot-highbank")))
+(define-public u-boot-hikey
+  (package (inherit u-boot)
+    (name "u-boot-hikey")))
+(define-public u-boot-hrcon
+  (package (inherit u-boot)
+    (name "u-boot-hrcon")))
+(define-public u-boot-hrcon_dh
+  (package (inherit u-boot)
+    (name "u-boot-hrcon_dh")))
+(define-public u-boot-i12-tvbox
+  (package (inherit u-boot)
+    (name "u-boot-i12-tvbox")))
+(define-public u-boot-iNet_3F
+  (package (inherit u-boot)
+    (name "u-boot-iNet_3F")))
+(define-public u-boot-iNet_3W
+  (package (inherit u-boot)
+    (name "u-boot-iNet_3W")))
+(define-public u-boot-iNet_86VS
+  (package (inherit u-boot)
+    (name "u-boot-iNet_86VS")))
+(define-public u-boot-ib62x0
+  (package (inherit u-boot)
+    (name "u-boot-ib62x0")))
+(define-public u-boot-ibf-dsp561
+  (package (inherit u-boot)
+    (name "u-boot-ibf-dsp561")))
+(define-public u-boot-icnova-a20-swac
+  (package (inherit u-boot)
+    (name "u-boot-icnova-a20-swac")))
+(define-public u-boot-icon
+  (package (inherit u-boot)
+    (name "u-boot-icon")))
+(define-public u-boot-iconnect
+  (package (inherit u-boot)
+    (name "u-boot-iconnect")))
+(define-public u-boot-ids8313
+  (package (inherit u-boot)
+    (name "u-boot-ids8313")))
+(define-public u-boot-igep0020
+  (package (inherit u-boot)
+    (name "u-boot-igep0020")))
+(define-public u-boot-igep0020_nand
+  (package (inherit u-boot)
+    (name "u-boot-igep0020_nand")))
+(define-public u-boot-igep0030
+  (package (inherit u-boot)
+    (name "u-boot-igep0030")))
+(define-public u-boot-igep0030_nand
+  (package (inherit u-boot)
+    (name "u-boot-igep0030_nand")))
+(define-public u-boot-igep0032
+  (package (inherit u-boot)
+    (name "u-boot-igep0032")))
+(define-public u-boot-imx31_phycore
+  (package (inherit u-boot)
+    (name "u-boot-imx31_phycore")))
+(define-public u-boot-imx31_phycore_eet
+  (package (inherit u-boot)
+    (name "u-boot-imx31_phycore_eet")))
+(define-public u-boot-inet1
+  (package (inherit u-boot)
+    (name "u-boot-inet1")))
+(define-public u-boot-inet86dz
+  (package (inherit u-boot)
+    (name "u-boot-inet86dz")))
+(define-public u-boot-inet97fv2
+  (package (inherit u-boot)
+    (name "u-boot-inet97fv2")))
+(define-public u-boot-inet98v_rev2
+  (package (inherit u-boot)
+    (name "u-boot-inet98v_rev2")))
+(define-public u-boot-inet9f_rev03
+  (package (inherit u-boot)
+    (name "u-boot-inet9f_rev03")))
+(define-public u-boot-inetspace_v2
+  (package (inherit u-boot)
+    (name "u-boot-inetspace_v2")))
+(define-public u-boot-inka4x0
+  (package (inherit u-boot)
+    (name "u-boot-inka4x0")))
+(define-public u-boot-integratorap_cm720t
+  (package (inherit u-boot)
+    (name "u-boot-integratorap_cm720t")))
+(define-public u-boot-integratorap_cm920t
+  (package (inherit u-boot)
+    (name "u-boot-integratorap_cm920t")))
+(define-public u-boot-integratorap_cm926ejs
+  (package (inherit u-boot)
+    (name "u-boot-integratorap_cm926ejs")))
+(define-public u-boot-integratorap_cm946es
+  (package (inherit u-boot)
+    (name "u-boot-integratorap_cm946es")))
+(define-public u-boot-integratorcp_cm1136
+  (package (inherit u-boot)
+    (name "u-boot-integratorcp_cm1136")))
+(define-public u-boot-integratorcp_cm920t
+  (package (inherit u-boot)
+    (name "u-boot-integratorcp_cm920t")))
+(define-public u-boot-integratorcp_cm926ejs
+  (package (inherit u-boot)
+    (name "u-boot-integratorcp_cm926ejs")))
+(define-public u-boot-integratorcp_cm946es
+  (package (inherit u-boot)
+    (name "u-boot-integratorcp_cm946es")))
+(define-public u-boot-intip
+  (package (inherit u-boot)
+    (name "u-boot-intip")))
+(define-public u-boot-io64
+  (package (inherit u-boot)
+    (name "u-boot-io64")))
+(define-public u-boot-io
+  (package (inherit u-boot)
+    (name "u-boot-io")))
+(define-public u-boot-iocon
+  (package (inherit u-boot)
+    (name "u-boot-iocon")))
+(define-public u-boot-ip04
+  (package (inherit u-boot)
+    (name "u-boot-ip04")))
+(define-public u-boot-ipam390
+  (package (inherit u-boot)
+    (name "u-boot-ipam390")))
+(define-public u-boot-ipek01
+  (package (inherit u-boot)
+    (name "u-boot-ipek01")))
+(define-public u-boot-jesurun_q5
+  (package (inherit u-boot)
+    (name "u-boot-jesurun_q5")))
+(define-public u-boot-jetson-tk1
+  (package (inherit u-boot)
+    (name "u-boot-jetson-tk1")))
+(define-public u-boot-jupiter
+  (package (inherit u-boot)
+    (name "u-boot-jupiter")))
+(define-public u-boot-k2e_evm
+  (package (inherit u-boot)
+    (name "u-boot-k2e_evm")))
+(define-public u-boot-k2g_evm
+  (package (inherit u-boot)
+    (name "u-boot-k2g_evm")))
+(define-public u-boot-k2hk_evm
+  (package (inherit u-boot)
+    (name "u-boot-k2hk_evm")))
+(define-public u-boot-k2l_evm
+  (package (inherit u-boot)
+    (name "u-boot-k2l_evm")))
+(define-public u-boot-katmai
+  (package (inherit u-boot)
+    (name "u-boot-katmai")))
+(define-public u-boot-kc1
+  (package (inherit u-boot)
+    (name "u-boot-kc1")))
+(define-public u-boot-kilauea
+  (package (inherit u-boot)
+    (name "u-boot-kilauea")))
+(define-public u-boot-km_kirkwood_128m16
+  (package (inherit u-boot)
+    (name "u-boot-km_kirkwood_128m16")))
+(define-public u-boot-km_kirkwood
+  (package (inherit u-boot)
+    (name "u-boot-km_kirkwood")))
+(define-public u-boot-km_kirkwood_pci
+  (package (inherit u-boot)
+    (name "u-boot-km_kirkwood_pci")))
+(define-public u-boot-kmcoge4
+  (package (inherit u-boot)
+    (name "u-boot-kmcoge4")))
+(define-public u-boot-kmcoge5ne
+  (package (inherit u-boot)
+    (name "u-boot-kmcoge5ne")))
+(define-public u-boot-kmcoge5un
+  (package (inherit u-boot)
+    (name "u-boot-kmcoge5un")))
+(define-public u-boot-kmeter1
+  (package (inherit u-boot)
+    (name "u-boot-kmeter1")))
+(define-public u-boot-kmlion1
+  (package (inherit u-boot)
+    (name "u-boot-kmlion1")))
+(define-public u-boot-kmnusa
+  (package (inherit u-boot)
+    (name "u-boot-kmnusa")))
+(define-public u-boot-kmopti2
+  (package (inherit u-boot)
+    (name "u-boot-kmopti2")))
+(define-public u-boot-kmsugp1
+  (package (inherit u-boot)
+    (name "u-boot-kmsugp1")))
+(define-public u-boot-kmsupx5
+  (package (inherit u-boot)
+    (name "u-boot-kmsupx5")))
+(define-public u-boot-kmsuv31
+  (package (inherit u-boot)
+    (name "u-boot-kmsuv31")))
+(define-public u-boot-kmtegr1
+  (package (inherit u-boot)
+    (name "u-boot-kmtegr1")))
+(define-public u-boot-kmtepr2
+  (package (inherit u-boot)
+    (name "u-boot-kmtepr2")))
+(define-public u-boot-kmvect1
+  (package (inherit u-boot)
+    (name "u-boot-kmvect1")))
+(define-public u-boot-koelsch
+  (package (inherit u-boot)
+    (name "u-boot-koelsch")))
+(define-public u-boot-kylin-rk3036
+  (package (inherit u-boot)
+    (name "u-boot-kylin-rk3036")))
+(define-public u-boot-kzm9g
+  (package (inherit u-boot)
+    (name "u-boot-kzm9g")))
+(define-public u-boot-lager
+  (package (inherit u-boot)
+    (name "u-boot-lager")))
+(define-public u-boot-legoev3
+  (package (inherit u-boot)
+    (name "u-boot-legoev3")))
+(define-public u-boot-ls1012afrdm_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1012afrdm_qspi")))
+(define-public u-boot-ls1012aqds_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1012aqds_qspi")))
+(define-public u-boot-ls1012ardb_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1012ardb_qspi")))
+(define-public u-boot-ls1021aqds_ddr4_nor
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_ddr4_nor")))
+(define-public u-boot-ls1021aqds_ddr4_nor_lpuart
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_ddr4_nor_lpuart")))
+(define-public u-boot-ls1021aqds_nand
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_nand")))
+(define-public u-boot-ls1021aqds_nor_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_nor_SECURE_BOOT")))
+(define-public u-boot-ls1021aqds_nor
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_nor")))
+(define-public u-boot-ls1021aqds_nor_lpuart
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_nor_lpuart")))
+(define-public u-boot-ls1021aqds_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_qspi")))
+(define-public u-boot-ls1021aqds_sdcard_ifc
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_sdcard_ifc")))
+(define-public u-boot-ls1021aqds_sdcard_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1021aqds_sdcard_qspi")))
+(define-public u-boot-ls1021atwr_nor_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-ls1021atwr_nor_SECURE_BOOT")))
+(define-public u-boot-ls1021atwr_nor
+  (package (inherit u-boot)
+    (name "u-boot-ls1021atwr_nor")))
+(define-public u-boot-ls1021atwr_nor_lpuart
+  (package (inherit u-boot)
+    (name "u-boot-ls1021atwr_nor_lpuart")))
+(define-public u-boot-ls1021atwr_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1021atwr_qspi")))
+(define-public u-boot-ls1021atwr_sdcard_ifc
+  (package (inherit u-boot)
+    (name "u-boot-ls1021atwr_sdcard_ifc")))
+(define-public u-boot-ls1021atwr_sdcard_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1021atwr_sdcard_qspi")))
+(define-public u-boot-ls1043aqds
+  (package (inherit u-boot)
+    (name "u-boot-ls1043aqds")))
+(define-public u-boot-ls1043aqds_lpuart
+  (package (inherit u-boot)
+    (name "u-boot-ls1043aqds_lpuart")))
+(define-public u-boot-ls1043aqds_nand
+  (package (inherit u-boot)
+    (name "u-boot-ls1043aqds_nand")))
+(define-public u-boot-ls1043aqds_nor_ddr3
+  (package (inherit u-boot)
+    (name "u-boot-ls1043aqds_nor_ddr3")))
+(define-public u-boot-ls1043aqds_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1043aqds_qspi")))
+(define-public u-boot-ls1043aqds_sdcard_ifc
+  (package (inherit u-boot)
+    (name "u-boot-ls1043aqds_sdcard_ifc")))
+(define-public u-boot-ls1043aqds_sdcard_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls1043aqds_sdcard_qspi")))
+(define-public u-boot-ls1043ardb_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-ls1043ardb_SECURE_BOOT")))
+(define-public u-boot-ls1043ardb
+  (package (inherit u-boot)
+    (name "u-boot-ls1043ardb")))
+(define-public u-boot-ls1043ardb_nand
+  (package (inherit u-boot)
+    (name "u-boot-ls1043ardb_nand")))
+(define-public u-boot-ls1043ardb_sdcard
+  (package (inherit u-boot)
+    (name "u-boot-ls1043ardb_sdcard")))
+(define-public u-boot-ls2080a_emu
+  (package (inherit u-boot)
+    (name "u-boot-ls2080a_emu")))
+(define-public u-boot-ls2080a_simu
+  (package (inherit u-boot)
+    (name "u-boot-ls2080a_simu")))
+(define-public u-boot-ls2080aqds_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-ls2080aqds_SECURE_BOOT")))
+(define-public u-boot-ls2080aqds
+  (package (inherit u-boot)
+    (name "u-boot-ls2080aqds")))
+(define-public u-boot-ls2080aqds_nand
+  (package (inherit u-boot)
+    (name "u-boot-ls2080aqds_nand")))
+(define-public u-boot-ls2080aqds_qspi
+  (package (inherit u-boot)
+    (name "u-boot-ls2080aqds_qspi")))
+(define-public u-boot-ls2080ardb_SECURE_BOOT
+  (package (inherit u-boot)
+    (name "u-boot-ls2080ardb_SECURE_BOOT")))
+(define-public u-boot-ls2080ardb
+  (package (inherit u-boot)
+    (name "u-boot-ls2080ardb")))
+(define-public u-boot-ls2080ardb_nand
+  (package (inherit u-boot)
+    (name "u-boot-ls2080ardb_nand")))
+(define-public u-boot-lschlv2
+  (package (inherit u-boot)
+    (name "u-boot-lschlv2")))
+(define-public u-boot-lsxhl
+  (package (inherit u-boot)
+    (name "u-boot-lsxhl")))
+(define-public u-boot-luan
+  (package (inherit u-boot)
+    (name "u-boot-luan")))
+(define-public u-boot-lwmon5
+  (package (inherit u-boot)
+    (name "u-boot-lwmon5")))
+(define-public u-boot-m28evk
+  (package (inherit u-boot)
+    (name "u-boot-m28evk")))
+(define-public u-boot-m53evk
+  (package (inherit u-boot)
+    (name "u-boot-m53evk")))
+(define-public u-boot-ma5d4evk
+  (package (inherit u-boot)
+    (name "u-boot-ma5d4evk")))
+(define-public u-boot-makalu
+  (package (inherit u-boot)
+    (name "u-boot-makalu")))
+(define-public u-boot-malta64
+  (package (inherit u-boot)
+    (name "u-boot-malta64")))
+(define-public u-boot-malta64el
+  (package (inherit u-boot)
+    (name "u-boot-malta64el")))
+(define-public u-boot-malta
+  (package (inherit u-boot)
+    (name "u-boot-malta")))
+(define-public u-boot-maltael
+  (package (inherit u-boot)
+    (name "u-boot-maltael")))
+(define-public u-boot-marsboard
+  (package (inherit u-boot)
+    (name "u-boot-marsboard")))
+(define-public u-boot-maxbcm
+  (package (inherit u-boot)
+    (name "u-boot-maxbcm")))
+(define-public u-boot-mcx
+  (package (inherit u-boot)
+    (name "u-boot-mcx")))
+(define-public u-boot-mecp5123
+  (package (inherit u-boot)
+    (name "u-boot-mecp5123")))
+(define-public u-boot-medcom-wide
+  (package (inherit u-boot)
+    (name "u-boot-medcom-wide")))
+(define-public u-boot-meesc_dataflash
+  (package (inherit u-boot)
+    (name "u-boot-meesc_dataflash")))
+(define-public u-boot-meesc
+  (package (inherit u-boot)
+    (name "u-boot-meesc")))
+(define-public u-boot-mgcoge3ne
+  (package (inherit u-boot)
+    (name "u-boot-mgcoge3ne")))
+(define-public u-boot-mgcoge3un
+  (package (inherit u-boot)
+    (name "u-boot-mgcoge3un")))
+(define-public u-boot-mgcoge
+  (package (inherit u-boot)
+    (name "u-boot-mgcoge")))
+(define-public u-boot-microblaze-generic
+  (package (inherit u-boot)
+    (name "u-boot-microblaze-generic")))
+(define-public u-boot-minnowmax
+  (package (inherit u-boot)
+    (name "u-boot-minnowmax")))
+(define-public u-boot-mixtile_loftq
+  (package (inherit u-boot)
+    (name "u-boot-mixtile_loftq")))
+(define-public u-boot-mk802_a10s
+  (package (inherit u-boot)
+    (name "u-boot-mk802_a10s")))
+(define-public u-boot-mk802
+  (package (inherit u-boot)
+    (name "u-boot-mk802")))
+(define-public u-boot-mk802ii
+  (package (inherit u-boot)
+    (name "u-boot-mk802ii")))
+(define-public u-boot-motionpro
+  (package (inherit u-boot)
+    (name "u-boot-motionpro")))
+(define-public u-boot-mpc5121ads
+  (package (inherit u-boot)
+    (name "u-boot-mpc5121ads")))
+(define-public u-boot-mpc5121ads_rev2
+  (package (inherit u-boot)
+    (name "u-boot-mpc5121ads_rev2")))
+(define-public u-boot-mpc8308_p1m
+  (package (inherit u-boot)
+    (name "u-boot-mpc8308_p1m")))
+(define-public u-boot-mpr2
+  (package (inherit u-boot)
+    (name "u-boot-mpr2")))
+(define-public u-boot-ms7720se
+  (package (inherit u-boot)
+    (name "u-boot-ms7720se")))
+(define-public u-boot-ms7722se
+  (package (inherit u-boot)
+    (name "u-boot-ms7722se")))
+(define-public u-boot-ms7750se
+  (package (inherit u-boot)
+    (name "u-boot-ms7750se")))
+(define-public u-boot-mt_ventoux
+  (package (inherit u-boot)
+    (name "u-boot-mt_ventoux")))
+(define-public u-boot-munices
+  (package (inherit u-boot)
+    (name "u-boot-munices")))
+(define-public u-boot-mx23_olinuxino
+  (package (inherit u-boot)
+    (name "u-boot-mx23_olinuxino")))
+(define-public u-boot-mx23evk
+  (package (inherit u-boot)
+    (name "u-boot-mx23evk")))
+(define-public u-boot-mx25pdk
+  (package (inherit u-boot)
+    (name "u-boot-mx25pdk")))
+(define-public u-boot-mx28evk_auart_console
+  (package (inherit u-boot)
+    (name "u-boot-mx28evk_auart_console")))
+(define-public u-boot-mx28evk
+  (package (inherit u-boot)
+    (name "u-boot-mx28evk")))
+(define-public u-boot-mx28evk_nand
+  (package (inherit u-boot)
+    (name "u-boot-mx28evk_nand")))
+(define-public u-boot-mx28evk_spi
+  (package (inherit u-boot)
+    (name "u-boot-mx28evk_spi")))
+(define-public u-boot-mx31ads
+  (package (inherit u-boot)
+    (name "u-boot-mx31ads")))
+(define-public u-boot-mx31pdk
+  (package (inherit u-boot)
+    (name "u-boot-mx31pdk")))
+(define-public u-boot-mx35pdk
+  (package (inherit u-boot)
+    (name "u-boot-mx35pdk")))
+(define-public u-boot-mx51evk
+  (package (inherit u-boot)
+    (name "u-boot-mx51evk")))
+(define-public u-boot-mx53ard
+  (package (inherit u-boot)
+    (name "u-boot-mx53ard")))
+(define-public u-boot-mx53evk
+  (package (inherit u-boot)
+    (name "u-boot-mx53evk")))
+(define-public u-boot-mx53loco
+  (package (inherit u-boot)
+    (name "u-boot-mx53loco")))
+(define-public u-boot-mx53smd
+  (package (inherit u-boot)
+    (name "u-boot-mx53smd")))
+(define-public u-boot-mx6cuboxi
+  (package (inherit u-boot)
+    (name "u-boot-mx6cuboxi")))
+(define-public u-boot-mx6dlarm2
+  (package (inherit u-boot)
+    (name "u-boot-mx6dlarm2")))
+(define-public u-boot-mx6dlarm2_lpddr2
+  (package (inherit u-boot)
+    (name "u-boot-mx6dlarm2_lpddr2")))
+(define-public u-boot-mx6dlsabreauto
+  (package (inherit u-boot)
+    (name "u-boot-mx6dlsabreauto")))
+(define-public u-boot-mx6dlsabresd
+  (package (inherit u-boot)
+    (name "u-boot-mx6dlsabresd")))
+(define-public u-boot-mx6qarm2
+  (package (inherit u-boot)
+    (name "u-boot-mx6qarm2")))
+(define-public u-boot-mx6qarm2_lpddr2
+  (package (inherit u-boot)
+    (name "u-boot-mx6qarm2_lpddr2")))
+(define-public u-boot-mx6qpsabreauto
+  (package (inherit u-boot)
+    (name "u-boot-mx6qpsabreauto")))
+(define-public u-boot-mx6qsabreauto
+  (package (inherit u-boot)
+    (name "u-boot-mx6qsabreauto")))
+(define-public u-boot-mx6qsabrelite
+  (package (inherit u-boot)
+    (name "u-boot-mx6qsabrelite")))
+(define-public u-boot-mx6qsabresd
+  (package (inherit u-boot)
+    (name "u-boot-mx6qsabresd")))
+(define-public u-boot-mx6sabresd_spl
+  (package (inherit u-boot)
+    (name "u-boot-mx6sabresd_spl")))
+(define-public u-boot-mx6slevk
+  (package (inherit u-boot)
+    (name "u-boot-mx6slevk")))
+(define-public u-boot-mx6slevk_spinor
+  (package (inherit u-boot)
+    (name "u-boot-mx6slevk_spinor")))
+(define-public u-boot-mx6slevk_spl
+  (package (inherit u-boot)
+    (name "u-boot-mx6slevk_spl")))
+(define-public u-boot-mx6sxsabreauto
+  (package (inherit u-boot)
+    (name "u-boot-mx6sxsabreauto")))
+(define-public u-boot-mx6sxsabresd
+  (package (inherit u-boot)
+    (name "u-boot-mx6sxsabresd")))
+(define-public u-boot-mx6sxsabresd_spl
+  (package (inherit u-boot)
+    (name "u-boot-mx6sxsabresd_spl")))
+(define-public u-boot-mx6ul_14x14_evk
+  (package (inherit u-boot)
+    (name "u-boot-mx6ul_14x14_evk")))
+(define-public u-boot-mx6ul_9x9_evk
+  (package (inherit u-boot)
+    (name "u-boot-mx6ul_9x9_evk")))
+(define-public u-boot-mx7dsabresd
+  (package (inherit u-boot)
+    (name "u-boot-mx7dsabresd")))
+(define-public u-boot-nas220
+  (package (inherit u-boot)
+    (name "u-boot-nas220")))
+(define-public u-boot-neo
+  (package (inherit u-boot)
+    (name "u-boot-neo")))
+(define-public u-boot-net2big_v2
+  (package (inherit u-boot)
+    (name "u-boot-net2big_v2")))
+(define-public u-boot-netspace_lite_v2
+  (package (inherit u-boot)
+    (name "u-boot-netspace_lite_v2")))
+(define-public u-boot-netspace_max_v2
+  (package (inherit u-boot)
+    (name "u-boot-netspace_max_v2")))
+(define-public u-boot-netspace_mini_v2
+  (package (inherit u-boot)
+    (name "u-boot-netspace_mini_v2")))
+(define-public u-boot-netspace_v2
+  (package (inherit u-boot)
+    (name "u-boot-netspace_v2")))
+(define-public u-boot-nitrogen6dl2g
+  (package (inherit u-boot)
+    (name "u-boot-nitrogen6dl2g")))
+(define-public u-boot-nitrogen6dl
+  (package (inherit u-boot)
+    (name "u-boot-nitrogen6dl")))
+(define-public u-boot-nitrogen6q2g
+  (package (inherit u-boot)
+    (name "u-boot-nitrogen6q2g")))
+(define-public u-boot-nitrogen6q
+  (package (inherit u-boot)
+    (name "u-boot-nitrogen6q")))
+(define-public u-boot-nitrogen6s1g
+  (package (inherit u-boot)
+    (name "u-boot-nitrogen6s1g")))
+(define-public u-boot-nitrogen6s
+  (package (inherit u-boot)
+    (name "u-boot-nitrogen6s")))
+(define-public u-boot-nokia_rx51
+  (package (inherit u-boot)
+    (name "u-boot-nokia_rx51")))
+(define-public u-boot-novena
+  (package (inherit u-boot)
+    (name "u-boot-novena")))
+(define-public u-boot-nsa310s
+  (package (inherit u-boot)
+    (name "u-boot-nsa310s")))
+(define-public u-boot-nyan-big
+  (package (inherit u-boot)
+    (name "u-boot-nyan-big")))
+(define-public u-boot-odroid-c2
+  (package (inherit u-boot)
+    (name "u-boot-odroid-c2")))
+(define-public u-boot-odroid-xu3
+  (package (inherit u-boot)
+    (name "u-boot-odroid-xu3")))
+(define-public u-boot-odroid
+  (package (inherit u-boot)
+    (name "u-boot-odroid")))
+(define-public u-boot-omap3_beagle
+  (package (inherit u-boot)
+    (name "u-boot-omap3_beagle")))
+(define-public u-boot-omap3_evm
+  (package (inherit u-boot)
+    (name "u-boot-omap3_evm")))
+(define-public u-boot-omap3_evm_quick_mmc
+  (package (inherit u-boot)
+    (name "u-boot-omap3_evm_quick_mmc")))
+(define-public u-boot-omap3_evm_quick_nand
+  (package (inherit u-boot)
+    (name "u-boot-omap3_evm_quick_nand")))
+(define-public u-boot-omap3_ha
+  (package (inherit u-boot)
+    (name "u-boot-omap3_ha")))
+(define-public u-boot-omap3_logic
+  (package (inherit u-boot)
+    (name "u-boot-omap3_logic")))
+(define-public u-boot-omap3_overo
+  (package (inherit u-boot)
+    (name "u-boot-omap3_overo")))
+(define-public u-boot-omap3_pandora
+  (package (inherit u-boot)
+    (name "u-boot-omap3_pandora")))
+(define-public u-boot-omap3_zoom1
+  (package (inherit u-boot)
+    (name "u-boot-omap3_zoom1")))
+(define-public u-boot-omap4_panda
+  (package (inherit u-boot)
+    (name "u-boot-omap4_panda")))
+(define-public u-boot-omap4_sdp4430
+  (package (inherit u-boot)
+    (name "u-boot-omap4_sdp4430")))
+(define-public u-boot-omap5_uevm
+  (package (inherit u-boot)
+    (name "u-boot-omap5_uevm")))
+(define-public u-boot-omapl138_lcdk
+  (package (inherit u-boot)
+    (name "u-boot-omapl138_lcdk")))
+(define-public u-boot-openrd_base
+  (package (inherit u-boot)
+    (name "u-boot-openrd_base")))
+(define-public u-boot-openrd_client
+  (package (inherit u-boot)
+    (name "u-boot-openrd_client")))
+(define-public u-boot-openrd_ultimate
+  (package (inherit u-boot)
+    (name "u-boot-openrd_ultimate")))
+(define-public u-boot-openrisc-generic
+  (package (inherit u-boot)
+    (name "u-boot-openrisc-generic")))
+(define-public u-boot-orangepi_2
+  (package (inherit u-boot)
+    (name "u-boot-orangepi_2")))
+(define-public u-boot-orangepi_one
+  (package (inherit u-boot)
+    (name "u-boot-orangepi_one")))
+(define-public u-boot-orangepi_pc
+  (package (inherit u-boot)
+    (name "u-boot-orangepi_pc")))
+(define-public u-boot-orangepi_plus
+  (package (inherit u-boot)
+    (name "u-boot-orangepi_plus")))
+(define-public u-boot-origen
+  (package (inherit u-boot)
+    (name "u-boot-origen")))
+(define-public u-boot-ot1200
+  (package (inherit u-boot)
+    (name "u-boot-ot1200")))
+(define-public u-boot-ot1200_spl
+  (package (inherit u-boot)
+    (name "u-boot-ot1200_spl")))
+(define-public u-boot-p2371-0000
+  (package (inherit u-boot)
+    (name "u-boot-p2371-0000")))
+(define-public u-boot-p2371-2180
+  (package (inherit u-boot)
+    (name "u-boot-p2371-2180")))
+(define-public u-boot-p2571
+  (package (inherit u-boot)
+    (name "u-boot-p2571")))
+(define-public u-boot-p2771-0000
+  (package (inherit u-boot)
+    (name "u-boot-p2771-0000")))
+(define-public u-boot-parrot_r16
+  (package (inherit u-boot)
+    (name "u-boot-parrot_r16")))
+(define-public u-boot-paz00
+  (package (inherit u-boot)
+    (name "u-boot-paz00")))
+(define-public u-boot-pb1000
+  (package (inherit u-boot)
+    (name "u-boot-pb1000")))
+(define-public u-boot-pcm030_LOWBOOT
+  (package (inherit u-boot)
+    (name "u-boot-pcm030_LOWBOOT")))
+(define-public u-boot-pcm030
+  (package (inherit u-boot)
+    (name "u-boot-pcm030")))
+(define-public u-boot-pcm051_rev1
+  (package (inherit u-boot)
+    (name "u-boot-pcm051_rev1")))
+(define-public u-boot-pcm051_rev3
+  (package (inherit u-boot)
+    (name "u-boot-pcm051_rev3")))
+(define-public u-boot-pcm052
+  (package (inherit u-boot)
+    (name "u-boot-pcm052")))
+(define-public u-boot-pdm360ng
+  (package (inherit u-boot)
+    (name "u-boot-pdm360ng")))
+(define-public u-boot-peach-pi
+  (package (inherit u-boot)
+    (name "u-boot-peach-pi")))
+(define-public u-boot-peach-pit
+  (package (inherit u-boot)
+    (name "u-boot-peach-pit")))
+(define-public u-boot-pengwyn
+  (package (inherit u-boot)
+    (name "u-boot-pengwyn")))
+(define-public u-boot-pepper
+  (package (inherit u-boot)
+    (name "u-boot-pepper")))
+(define-public u-boot-pic32mzdask
+  (package (inherit u-boot)
+    (name "u-boot-pic32mzdask")))
+(define-public u-boot-pico-imx6ul
+  (package (inherit u-boot)
+    (name "u-boot-pico-imx6ul")))
+(define-public u-boot-picosam9g45
+  (package (inherit u-boot)
+    (name "u-boot-picosam9g45")))
+(define-public u-boot-pine64_plus
+  (package (inherit u-boot)
+    (name "u-boot-pine64_plus")))
+(define-public u-boot-platinum_picon
+  (package (inherit u-boot)
+    (name "u-boot-platinum_picon")))
+(define-public u-boot-platinum_titanium
+  (package (inherit u-boot)
+    (name "u-boot-platinum_titanium")))
+(define-public u-boot-plutux
+  (package (inherit u-boot)
+    (name "u-boot-plutux")))
+(define-public u-boot-pm9261
+  (package (inherit u-boot)
+    (name "u-boot-pm9261")))
+(define-public u-boot-pm9263
+  (package (inherit u-boot)
+    (name "u-boot-pm9263")))
+(define-public u-boot-pm9g45
+  (package (inherit u-boot)
+    (name "u-boot-pm9g45")))
+(define-public u-boot-pogo_e02
+  (package (inherit u-boot)
+    (name "u-boot-pogo_e02")))
+(define-public u-boot-polaroid_mid2407pxe03
+  (package (inherit u-boot)
+    (name "u-boot-polaroid_mid2407pxe03")))
+(define-public u-boot-polaroid_mid2809pxe04
+  (package (inherit u-boot)
+    (name "u-boot-polaroid_mid2809pxe04")))
+(define-public u-boot-porter
+  (package (inherit u-boot)
+    (name "u-boot-porter")))
+(define-public u-boot-portl2
+  (package (inherit u-boot)
+    (name "u-boot-portl2")))
+(define-public u-boot-pov_protab2_ips9
+  (package (inherit u-boot)
+    (name "u-boot-pov_protab2_ips9")))
+(define-public u-boot-pr1
+  (package (inherit u-boot)
+    (name "u-boot-pr1")))
+(define-public u-boot-pxm2
+  (package (inherit u-boot)
+    (name "u-boot-pxm2")))
+(define-public u-boot-q8_a13_tablet
+  (package (inherit u-boot)
+    (name "u-boot-q8_a13_tablet")))
+(define-public u-boot-q8_a23_tablet_800x480
+  (package (inherit u-boot)
+    (name "u-boot-q8_a23_tablet_800x480")))
+(define-public u-boot-q8_a33_tablet_1024x600
+  (package (inherit u-boot)
+    (name "u-boot-q8_a33_tablet_1024x600")))
+(define-public u-boot-q8_a33_tablet_800x480
+  (package (inherit u-boot)
+    (name "u-boot-q8_a33_tablet_800x480")))
+(define-public u-boot-qemu-ppce500
+  (package (inherit u-boot)
+    (name "u-boot-qemu-ppce500")))
+(define-public u-boot-qemu-x86
+  (package (inherit u-boot)
+    (name "u-boot-qemu-x86")))
+(define-public u-boot-qemu_mips64
+  (package (inherit u-boot)
+    (name "u-boot-qemu_mips64")))
+(define-public u-boot-qemu_mips64el
+  (package (inherit u-boot)
+    (name "u-boot-qemu_mips64el")))
+(define-public u-boot-qemu_mips
+  (package (inherit u-boot)
+    (name "u-boot-qemu_mips")))
+(define-public u-boot-qemu_mipsel
+  (package (inherit u-boot)
+    (name "u-boot-qemu_mipsel")))
+(define-public u-boot-r0p7734
+  (package (inherit u-boot)
+    (name "u-boot-r0p7734")))
+(define-public u-boot-r2dplus
+  (package (inherit u-boot)
+    (name "u-boot-r2dplus")))
+(define-public u-boot-r7-tv-dongle
+  (package (inherit u-boot)
+    (name "u-boot-r7-tv-dongle")))
+(define-public u-boot-r7780mp
+  (package (inherit u-boot)
+    (name "u-boot-r7780mp")))
+(define-public u-boot-rainier
+  (package (inherit u-boot)
+    (name "u-boot-rainier")))
+(define-public u-boot-rainier_ramboot
+  (package (inherit u-boot)
+    (name "u-boot-rainier_ramboot")))
+(define-public u-boot-rastaban
+  (package (inherit u-boot)
+    (name "u-boot-rastaban")))
+(define-public u-boot-redwood
+  (package (inherit u-boot)
+    (name "u-boot-redwood")))
+(define-public u-boot-riotboard
+  (package (inherit u-boot)
+    (name "u-boot-riotboard")))
+(define-public u-boot-rock2
+  (package (inherit u-boot)
+    (name "u-boot-rock2")))
+(define-public u-boot-rpi_2
+  (package (inherit u-boot)
+    (name "u-boot-rpi_2")))
+(define-public u-boot-rpi_3_32b
+  (package (inherit u-boot)
+    (name "u-boot-rpi_3_32b")))
+(define-public u-boot-rpi_3
+  (package (inherit u-boot)
+    (name "u-boot-rpi_3")))
+(define-public u-boot-rpi
+  (package (inherit u-boot)
+    (name "u-boot-rpi")))
+(define-public u-boot-rsk7203
+  (package (inherit u-boot)
+    (name "u-boot-rsk7203")))
+(define-public u-boot-rsk7264
+  (package (inherit u-boot)
+    (name "u-boot-rsk7264")))
+(define-public u-boot-rsk7269
+  (package (inherit u-boot)
+    (name "u-boot-rsk7269")))
+(define-public u-boot-rut
+  (package (inherit u-boot)
+    (name "u-boot-rut")))
+(define-public u-boot-s32v234evb
+  (package (inherit u-boot)
+    (name "u-boot-s32v234evb")))
+(define-public u-boot-s5p_goni
+  (package (inherit u-boot)
+    (name "u-boot-s5p_goni")))
+(define-public u-boot-s5pc210_universal
+  (package (inherit u-boot)
+    (name "u-boot-s5pc210_universal")))
+(define-public u-boot-sama5d2_ptc_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d2_ptc_nandflash")))
+(define-public u-boot-sama5d2_ptc_spiflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d2_ptc_spiflash")))
+(define-public u-boot-sama5d2_xplained_mmc
+  (package (inherit u-boot)
+    (name "u-boot-sama5d2_xplained_mmc")))
+(define-public u-boot-sama5d2_xplained_spiflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d2_xplained_spiflash")))
+(define-public u-boot-sama5d3_xplained_mmc
+  (package (inherit u-boot)
+    (name "u-boot-sama5d3_xplained_mmc")))
+(define-public u-boot-sama5d3_xplained_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d3_xplained_nandflash")))
+(define-public u-boot-sama5d3xek_mmc
+  (package (inherit u-boot)
+    (name "u-boot-sama5d3xek_mmc")))
+(define-public u-boot-sama5d3xek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d3xek_nandflash")))
+(define-public u-boot-sama5d3xek_spiflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d3xek_spiflash")))
+(define-public u-boot-sama5d4_xplained_mmc
+  (package (inherit u-boot)
+    (name "u-boot-sama5d4_xplained_mmc")))
+(define-public u-boot-sama5d4_xplained_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d4_xplained_nandflash")))
+(define-public u-boot-sama5d4_xplained_spiflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d4_xplained_spiflash")))
+(define-public u-boot-sama5d4ek_mmc
+  (package (inherit u-boot)
+    (name "u-boot-sama5d4ek_mmc")))
+(define-public u-boot-sama5d4ek_nandflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d4ek_nandflash")))
+(define-public u-boot-sama5d4ek_spiflash
+  (package (inherit u-boot)
+    (name "u-boot-sama5d4ek_spiflash")))
+(define-public u-boot-sandbox
+  (package (inherit u-boot)
+    (name "u-boot-sandbox")))
+(define-public u-boot-sandbox_noblk
+  (package (inherit u-boot)
+    (name "u-boot-sandbox_noblk")))
+(define-public u-boot-sansa_fuze_plus
+  (package (inherit u-boot)
+    (name "u-boot-sansa_fuze_plus")))
+(define-public u-boot-sbc8349_PCI_33
+  (package (inherit u-boot)
+    (name "u-boot-sbc8349_PCI_33")))
+(define-public u-boot-sbc8349_PCI_66
+  (package (inherit u-boot)
+    (name "u-boot-sbc8349_PCI_66")))
+(define-public u-boot-sbc8349
+  (package (inherit u-boot)
+    (name "u-boot-sbc8349")))
+(define-public u-boot-sbc8548_PCI_33_PCIE
+  (package (inherit u-boot)
+    (name "u-boot-sbc8548_PCI_33_PCIE")))
+(define-public u-boot-sbc8548_PCI_33
+  (package (inherit u-boot)
+    (name "u-boot-sbc8548_PCI_33")))
+(define-public u-boot-sbc8548_PCI_66_PCIE
+  (package (inherit u-boot)
+    (name "u-boot-sbc8548_PCI_66_PCIE")))
+(define-public u-boot-sbc8548_PCI_66
+  (package (inherit u-boot)
+    (name "u-boot-sbc8548_PCI_66")))
+(define-public u-boot-sbc8548
+  (package (inherit u-boot)
+    (name "u-boot-sbc8548")))
+(define-public u-boot-sbc8641d
+  (package (inherit u-boot)
+    (name "u-boot-sbc8641d")))
+(define-public u-boot-sc_sps_1
+  (package (inherit u-boot)
+    (name "u-boot-sc_sps_1")))
+(define-public u-boot-seaboard
+  (package (inherit u-boot)
+    (name "u-boot-seaboard")))
+(define-public u-boot-secomx6quq7
+  (package (inherit u-boot)
+    (name "u-boot-secomx6quq7")))
+(define-public u-boot-sequoia
+  (package (inherit u-boot)
+    (name "u-boot-sequoia")))
+(define-public u-boot-sequoia_ramboot
+  (package (inherit u-boot)
+    (name "u-boot-sequoia_ramboot")))
+(define-public u-boot-sh7752evb
+  (package (inherit u-boot)
+    (name "u-boot-sh7752evb")))
+(define-public u-boot-sh7753evb
+  (package (inherit u-boot)
+    (name "u-boot-sh7753evb")))
+(define-public u-boot-sh7757lcr
+  (package (inherit u-boot)
+    (name "u-boot-sh7757lcr")))
+(define-public u-boot-sh7763rdp
+  (package (inherit u-boot)
+    (name "u-boot-sh7763rdp")))
+(define-public u-boot-sh7785lcr_32bit
+  (package (inherit u-boot)
+    (name "u-boot-sh7785lcr_32bit")))
+(define-public u-boot-sh7785lcr
+  (package (inherit u-boot)
+    (name "u-boot-sh7785lcr")))
+(define-public u-boot-sheevaplug
+  (package (inherit u-boot)
+    (name "u-boot-sheevaplug")))
+(define-public u-boot-shmin
+  (package (inherit u-boot)
+    (name "u-boot-shmin")))
+(define-public u-boot-silk
+  (package (inherit u-boot)
+    (name "u-boot-silk")))
+(define-public u-boot-smartweb
+  (package (inherit u-boot)
+    (name "u-boot-smartweb")))
+(define-public u-boot-smdk2410
+  (package (inherit u-boot)
+    (name "u-boot-smdk2410")))
+(define-public u-boot-smdk5250
+  (package (inherit u-boot)
+    (name "u-boot-smdk5250")))
+(define-public u-boot-smdk5420
+  (package (inherit u-boot)
+    (name "u-boot-smdk5420")))
+(define-public u-boot-smdkc100
+  (package (inherit u-boot)
+    (name "u-boot-smdkc100")))
+(define-public u-boot-smdkv310
+  (package (inherit u-boot)
+    (name "u-boot-smdkv310")))
+(define-public u-boot-snapper9260
+  (package (inherit u-boot)
+    (name "u-boot-snapper9260")))
+(define-public u-boot-snapper9g20
+  (package (inherit u-boot)
+    (name "u-boot-snapper9g20")))
+(define-public u-boot-sniper
+  (package (inherit u-boot)
+    (name "u-boot-sniper")))
+(define-public u-boot-snow
+  (package (inherit u-boot)
+    (name "u-boot-snow")))
+(define-public u-boot-socfpga_arria5
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_arria5")))
+(define-public u-boot-socfpga_cyclone5
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_cyclone5")))
+(define-public u-boot-socfpga_de0_nano_soc
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_de0_nano_soc")))
+(define-public u-boot-socfpga_is1
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_is1")))
+(define-public u-boot-socfpga_mcvevk
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_mcvevk")))
+(define-public u-boot-socfpga_sockit
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_sockit")))
+(define-public u-boot-socfpga_socrates
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_socrates")))
+(define-public u-boot-socfpga_sr1500
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_sr1500")))
+(define-public u-boot-socfpga_vining_fpga
+  (package (inherit u-boot)
+    (name "u-boot-socfpga_vining_fpga")))
+(define-public u-boot-socrates
+  (package (inherit u-boot)
+    (name "u-boot-socrates")))
+(define-public u-boot-spear300
+  (package (inherit u-boot)
+    (name "u-boot-spear300")))
+(define-public u-boot-spear300_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear300_nand")))
+(define-public u-boot-spear300_usbtty
+  (package (inherit u-boot)
+    (name "u-boot-spear300_usbtty")))
+(define-public u-boot-spear300_usbtty_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear300_usbtty_nand")))
+(define-public u-boot-spear310
+  (package (inherit u-boot)
+    (name "u-boot-spear310")))
+(define-public u-boot-spear310_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear310_nand")))
+(define-public u-boot-spear310_pnor
+  (package (inherit u-boot)
+    (name "u-boot-spear310_pnor")))
+(define-public u-boot-spear310_usbtty
+  (package (inherit u-boot)
+    (name "u-boot-spear310_usbtty")))
+(define-public u-boot-spear310_usbtty_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear310_usbtty_nand")))
+(define-public u-boot-spear310_usbtty_pnor
+  (package (inherit u-boot)
+    (name "u-boot-spear310_usbtty_pnor")))
+(define-public u-boot-spear320
+  (package (inherit u-boot)
+    (name "u-boot-spear320")))
+(define-public u-boot-spear320_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear320_nand")))
+(define-public u-boot-spear320_pnor
+  (package (inherit u-boot)
+    (name "u-boot-spear320_pnor")))
+(define-public u-boot-spear320_usbtty
+  (package (inherit u-boot)
+    (name "u-boot-spear320_usbtty")))
+(define-public u-boot-spear320_usbtty_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear320_usbtty_nand")))
+(define-public u-boot-spear320_usbtty_pnor
+  (package (inherit u-boot)
+    (name "u-boot-spear320_usbtty_pnor")))
+(define-public u-boot-spear600
+  (package (inherit u-boot)
+    (name "u-boot-spear600")))
+(define-public u-boot-spear600_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear600_nand")))
+(define-public u-boot-spear600_usbtty
+  (package (inherit u-boot)
+    (name "u-boot-spear600_usbtty")))
+(define-public u-boot-spear600_usbtty_nand
+  (package (inherit u-boot)
+    (name "u-boot-spear600_usbtty_nand")))
+(define-public u-boot-spring
+  (package (inherit u-boot)
+    (name "u-boot-spring")))
+(define-public u-boot-stm32f429-discovery
+  (package (inherit u-boot)
+    (name "u-boot-stm32f429-discovery")))
+(define-public u-boot-stm32f746-disco
+  (package (inherit u-boot)
+    (name "u-boot-stm32f746-disco")))
+(define-public u-boot-stout
+  (package (inherit u-boot)
+    (name "u-boot-stout")))
+(define-public u-boot-strider_con
+  (package (inherit u-boot)
+    (name "u-boot-strider_con")))
+(define-public u-boot-strider_con_dp
+  (package (inherit u-boot)
+    (name "u-boot-strider_con_dp")))
+(define-public u-boot-strider_cpu
+  (package (inherit u-boot)
+    (name "u-boot-strider_cpu")))
+(define-public u-boot-strider_cpu_dp
+  (package (inherit u-boot)
+    (name "u-boot-strider_cpu_dp")))
+(define-public u-boot-stv0991
+  (package (inherit u-boot)
+    (name "u-boot-stv0991")))
+(define-public u-boot-sunxi_Gemei_G9
+  (package (inherit u-boot)
+    (name "u-boot-sunxi_Gemei_G9")))
+(define-public u-boot-suvd3
+  (package (inherit u-boot)
+    (name "u-boot-suvd3")))
+(define-public u-boot-sycamore
+  (package (inherit u-boot)
+    (name "u-boot-sycamore")))
+(define-public u-boot-t3corp
+  (package (inherit u-boot)
+    (name "u-boot-t3corp")))
+(define-public u-boot-tao3530
+  (package (inherit u-boot)
+    (name "u-boot-tao3530")))
+(define-public u-boot-taurus
+  (package (inherit u-boot)
+    (name "u-boot-taurus")))
+(define-public u-boot-tb100
+  (package (inherit u-boot)
+    (name "u-boot-tb100")))
+(define-public u-boot-tbs2910
+  (package (inherit u-boot)
+    (name "u-boot-tbs2910")))
+(define-public u-boot-tcm-bf518
+  (package (inherit u-boot)
+    (name "u-boot-tcm-bf518")))
+(define-public u-boot-tcm-bf537
+  (package (inherit u-boot)
+    (name "u-boot-tcm-bf537")))
+(define-public u-boot-tec-ng
+  (package (inherit u-boot)
+    (name "u-boot-tec-ng")))
+(define-public u-boot-tec
+  (package (inherit u-boot)
+    (name "u-boot-tec")))
+(define-public u-boot-theadorable_debug
+  (package (inherit u-boot)
+    (name "u-boot-theadorable_debug")))
+(define-public u-boot-theadorable
+  (package (inherit u-boot)
+    (name "u-boot-theadorable")))
+(define-public u-boot-thuban
+  (package (inherit u-boot)
+    (name "u-boot-thuban")))
+(define-public u-boot-thunderx_88xx
+  (package (inherit u-boot)
+    (name "u-boot-thunderx_88xx")))
+(define-public u-boot-ti814x_evm
+  (package (inherit u-boot)
+    (name "u-boot-ti814x_evm")))
+(define-public u-boot-ti816x_evm
+  (package (inherit u-boot)
+    (name "u-boot-ti816x_evm")))
+(define-public u-boot-titanium
+  (package (inherit u-boot)
+    (name "u-boot-titanium")))
+(define-public u-boot-tplink_wdr4300
+  (package (inherit u-boot)
+    (name "u-boot-tplink_wdr4300")))
+(define-public u-boot-tqma6q_mba6_mmc
+  (package (inherit u-boot)
+    (name "u-boot-tqma6q_mba6_mmc")))
+(define-public u-boot-tqma6q_mba6_spi
+  (package (inherit u-boot)
+    (name "u-boot-tqma6q_mba6_spi")))
+(define-public u-boot-tqma6s_mba6_mmc
+  (package (inherit u-boot)
+    (name "u-boot-tqma6s_mba6_mmc")))
+(define-public u-boot-tqma6s_mba6_spi
+  (package (inherit u-boot)
+    (name "u-boot-tqma6s_mba6_spi")))
+(define-public u-boot-tqma6s_wru4_mmc
+  (package (inherit u-boot)
+    (name "u-boot-tqma6s_wru4_mmc")))
+(define-public u-boot-trats2
+  (package (inherit u-boot)
+    (name "u-boot-trats2")))
+(define-public u-boot-trats
+  (package (inherit u-boot)
+    (name "u-boot-trats")))
+(define-public u-boot-tricorder
+  (package (inherit u-boot)
+    (name "u-boot-tricorder")))
+(define-public u-boot-tricorder_flash
+  (package (inherit u-boot)
+    (name "u-boot-tricorder_flash")))
+(define-public u-boot-trimslice
+  (package (inherit u-boot)
+    (name "u-boot-trimslice")))
+(define-public u-boot-ts4800
+  (package (inherit u-boot)
+    (name "u-boot-ts4800")))
+(define-public u-boot-tuge1
+  (package (inherit u-boot)
+    (name "u-boot-tuge1")))
+(define-public u-boot-tuxx1
+  (package (inherit u-boot)
+    (name "u-boot-tuxx1")))
+(define-public u-boot-twister
+  (package (inherit u-boot)
+    (name "u-boot-twister")))
+(define-public u-boot-udoo
+  (package (inherit u-boot)
+    (name "u-boot-udoo")))
+(define-public u-boot-uniphier_ld11
+  (package (inherit u-boot)
+    (name "u-boot-uniphier_ld11")))
+(define-public u-boot-uniphier_ld20
+  (package (inherit u-boot)
+    (name "u-boot-uniphier_ld20")))
+(define-public u-boot-uniphier_ld4_sld8
+  (package (inherit u-boot)
+    (name "u-boot-uniphier_ld4_sld8")))
+(define-public u-boot-uniphier_pro4
+  (package (inherit u-boot)
+    (name "u-boot-uniphier_pro4")))
+(define-public u-boot-uniphier_pxs2_ld6b
+  (package (inherit u-boot)
+    (name "u-boot-uniphier_pxs2_ld6b")))
+(define-public u-boot-uniphier_sld3
+  (package (inherit u-boot)
+    (name "u-boot-uniphier_sld3")))
+(define-public u-boot-usb_a9263_dataflash
+  (package (inherit u-boot)
+    (name "u-boot-usb_a9263_dataflash")))
+(define-public u-boot-usbarmory
+  (package (inherit u-boot)
+    (name "u-boot-usbarmory")))
+(define-public u-boot-v38b
+  (package (inherit u-boot)
+    (name "u-boot-v38b")))
+(define-public u-boot-vct_platinum
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinum")))
+(define-public u-boot-vct_platinum_onenand
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinum_onenand")))
+(define-public u-boot-vct_platinum_onenand_small
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinum_onenand_small")))
+(define-public u-boot-vct_platinum_small
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinum_small")))
+(define-public u-boot-vct_platinumavc
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinumavc")))
+(define-public u-boot-vct_platinumavc_onenand
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinumavc_onenand")))
+(define-public u-boot-vct_platinumavc_onenand_small
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinumavc_onenand_small")))
+(define-public u-boot-vct_platinumavc_small
+  (package (inherit u-boot)
+    (name "u-boot-vct_platinumavc_small")))
+(define-public u-boot-vct_premium
+  (package (inherit u-boot)
+    (name "u-boot-vct_premium")))
+(define-public u-boot-vct_premium_onenand
+  (package (inherit u-boot)
+    (name "u-boot-vct_premium_onenand")))
+(define-public u-boot-vct_premium_onenand_small
+  (package (inherit u-boot)
+    (name "u-boot-vct_premium_onenand_small")))
+(define-public u-boot-vct_premium_small
+  (package (inherit u-boot)
+    (name "u-boot-vct_premium_small")))
+(define-public u-boot-ve8313
+  (package (inherit u-boot)
+    (name "u-boot-ve8313")))
+(define-public u-boot-venice2
+  (package (inherit u-boot)
+    (name "u-boot-venice2")))
+(define-public u-boot-ventana
+  (package (inherit u-boot)
+    (name "u-boot-ventana")))
+(define-public u-boot-vexpress_aemv8a_dram
+  (package (inherit u-boot)
+    (name "u-boot-vexpress_aemv8a_dram")))
+(define-public u-boot-vexpress_aemv8a_juno
+  (package (inherit u-boot)
+    (name "u-boot-vexpress_aemv8a_juno")))
+(define-public u-boot-vexpress_aemv8a_semi
+  (package (inherit u-boot)
+    (name "u-boot-vexpress_aemv8a_semi")))
+(define-public u-boot-vexpress_ca15_tc2
+  (package (inherit u-boot)
+    (name "u-boot-vexpress_ca15_tc2")))
+(define-public u-boot-vexpress_ca5x2
+  (package (inherit u-boot)
+    (name "u-boot-vexpress_ca5x2")))
+(define-public u-boot-vexpress_ca9x4
+  (package (inherit u-boot)
+    (name "u-boot-vexpress_ca9x4")))
+(define-public u-boot-vf610twr
+  (package (inherit u-boot)
+    (name "u-boot-vf610twr")))
+(define-public u-boot-vf610twr_nand
+  (package (inherit u-boot)
+    (name "u-boot-vf610twr_nand")))
+(define-public u-boot-vinco
+  (package (inherit u-boot)
+    (name "u-boot-vinco")))
+(define-public u-boot-vme8349
+  (package (inherit u-boot)
+    (name "u-boot-vme8349")))
+(define-public u-boot-walnut
+  (package (inherit u-boot)
+    (name "u-boot-walnut")))
+(define-public u-boot-wandboard
+  (package (inherit u-boot)
+    (name "u-boot-wandboard")))
+(define-public u-boot-warp7
+  (package (inherit u-boot)
+    (name "u-boot-warp7")))
+(define-public u-boot-warp
+  (package (inherit u-boot)
+    (name "u-boot-warp")))
+(define-public u-boot-whistler
+  (package (inherit u-boot)
+    (name "u-boot-whistler")))
+(define-public u-boot-woodburn
+  (package (inherit u-boot)
+    (name "u-boot-woodburn")))
+(define-public u-boot-woodburn_sd
+  (package (inherit u-boot)
+    (name "u-boot-woodburn_sd")))
+(define-public u-boot-work_92105
+  (package (inherit u-boot)
+    (name "u-boot-work_92105")))
+(define-public u-boot-wtk
+  (package (inherit u-boot)
+    (name "u-boot-wtk")))
+(define-public u-boot-x600
+  (package (inherit u-boot)
+    (name "u-boot-x600")))
+(define-public u-boot-xfi3
+  (package (inherit u-boot)
+    (name "u-boot-xfi3")))
+(define-public u-boot-xilinx-ppc405-generic
+  (package (inherit u-boot)
+    (name "u-boot-xilinx-ppc405-generic")))
+(define-public u-boot-xilinx-ppc440-generic
+  (package (inherit u-boot)
+    (name "u-boot-xilinx-ppc440-generic")))
+(define-public u-boot-xilinx_zynqmp_ep
+  (package (inherit u-boot)
+    (name "u-boot-xilinx_zynqmp_ep")))
+(define-public u-boot-xilinx_zynqmp_zc1751_xm015_dc1
+  (package (inherit u-boot)
+    (name "u-boot-xilinx_zynqmp_zc1751_xm015_dc1")))
+(define-public u-boot-xilinx_zynqmp_zc1751_xm016_dc2
+  (package (inherit u-boot)
+    (name "u-boot-xilinx_zynqmp_zc1751_xm016_dc2")))
+(define-public u-boot-xilinx_zynqmp_zc1751_xm018_dc4
+  (package (inherit u-boot)
+    (name "u-boot-xilinx_zynqmp_zc1751_xm018_dc4")))
+(define-public u-boot-xilinx_zynqmp_zc1751_xm019_dc5
+  (package (inherit u-boot)
+    (name "u-boot-xilinx_zynqmp_zc1751_xm019_dc5")))
+(define-public u-boot-xilinx_zynqmp_zcu102
+  (package (inherit u-boot)
+    (name "u-boot-xilinx_zynqmp_zcu102")))
+(define-public u-boot-xilinx_zynqmp_zcu102_revB
+  (package (inherit u-boot)
+    (name "u-boot-xilinx_zynqmp_zcu102_revB")))
+(define-public u-boot-xpedite1000
+  (package (inherit u-boot)
+    (name "u-boot-xpedite1000")))
+(define-public u-boot-xpedite517x
+  (package (inherit u-boot)
+    (name "u-boot-xpedite517x")))
+(define-public u-boot-xpedite520x
+  (package (inherit u-boot)
+    (name "u-boot-xpedite520x")))
+(define-public u-boot-xpedite537x
+  (package (inherit u-boot)
+    (name "u-boot-xpedite537x")))
+(define-public u-boot-xpedite550x
+  (package (inherit u-boot)
+    (name "u-boot-xpedite550x")))
+(define-public u-boot-xpress
+  (package (inherit u-boot)
+    (name "u-boot-xpress")))
+(define-public u-boot-xpress_spl
+  (package (inherit u-boot)
+    (name "u-boot-xpress_spl")))
+(define-public u-boot-yellowstone
+  (package (inherit u-boot)
+    (name "u-boot-yellowstone")))
+(define-public u-boot-yosemite
+  (package (inherit u-boot)
+    (name "u-boot-yosemite")))
+(define-public u-boot-yucca
+  (package (inherit u-boot)
+    (name "u-boot-yucca")))
+(define-public u-boot-zipitz2
+  (package (inherit u-boot)
+    (name "u-boot-zipitz2")))
+(define-public u-boot-zmx25
+  (package (inherit u-boot)
+    (name "u-boot-zmx25")))
+(define-public u-boot-zynq_microzed
+  (package (inherit u-boot)
+    (name "u-boot-zynq_microzed")))
+(define-public u-boot-zynq_picozed
+  (package (inherit u-boot)
+    (name "u-boot-zynq_picozed")))
+(define-public u-boot-zynq_zc702
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zc702")))
+(define-public u-boot-zynq_zc706
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zc706")))
+(define-public u-boot-zynq_zc770_xm010
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zc770_xm010")))
+(define-public u-boot-zynq_zc770_xm011
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zc770_xm011")))
+(define-public u-boot-zynq_zc770_xm012
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zc770_xm012")))
+(define-public u-boot-zynq_zc770_xm013
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zc770_xm013")))
+(define-public u-boot-zynq_zed
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zed")))
+(define-public u-boot-zynq_zybo
+  (package (inherit u-boot)
+    (name "u-boot-zynq_zybo")))
+
+; something should:
+; - create boot.cmd
+; - run mkimage -C none -A arm -T script -d boot.cmd boot.scr
+; - put boot.scr on the first partition
+; - dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
+;    ^^^ better make sure no partition is there (or just a dummy partition)

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now
  2016-07-19 20:07       ` [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now Danny Milosavljevic
@ 2016-07-21 12:37         ` Ludovic Courtès
  2016-07-21 17:56           ` Danny Milosavljevic
  2016-07-23 14:11         ` Andreas Enge
  2016-08-01 19:13         ` [PATCH v2] gnu: Add u-boot, device-tree-compiler Danny Milosavljevic
  2 siblings, 1 reply; 27+ messages in thread
From: Ludovic Courtès @ 2016-07-21 12:37 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Danny Milosavljevic <dannym+a@scratchpost.org> skribis:

> (Note: the patch is from <https://launchpad.net/ubuntu/+archive/primary/+files/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff.gz>)

This note should go to the top of the .patch file, along with one or two
sentences explaining what it does and why we need it.

> * gnu/packages/u-boot.scm (u-boot, u-boot-*): New variables.
> * gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff: New file.

[...]

> diff --git a/gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff b/gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff
> new file mode 100644
> index 0000000..6b160a7
> --- /dev/null
> +++ b/gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff
> @@ -0,0 +1,5059 @@
> +--- 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.

It seems to me that a lot of stuff is Debian-specific and not needed
(the debian/ directory is definitely not needed.)

> +(define-public u-boot-T4160RDB
> +  (package (inherit u-boot)
> +    (name "u-boot-T4160RDB")))
> +(define-public u-boot-T4240QDS_NAND
> +  (package (inherit u-boot)
> +    (name "u-boot-T4240QDS_NAND")))
> +(define-public u-boot-T4240QDS_SDCARD
> +  (package (inherit u-boot)
> +    (name "u-boot-T4240QDS_SDCARD")))

This leads to packages with different names but that are otherwise
completely identical.  I suppose the configure flags must also be
changed as a function of the board?

In that case, I’d suggest writing a procedure like:

  (define (make-u-boot-package board)
    (package
      (inherit u-boot)
      (name (string-append "u-boot-" (string-downcase board)))
      (arguments
        ;; … pass the right configure flags etc.
        )))

Then it’s probably enough to export ‘u-boot’ and ‘make-u-boot’—having a
zillion variables doesn’t seem very helpful.  People can explicitly call
‘make-u-boot’ with the right board name

WDYT?

Could 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now
  2016-07-21 12:37         ` Ludovic Courtès
@ 2016-07-21 17:56           ` Danny Milosavljevic
  2016-07-22 13:15             ` Ludovic Courtès
  0 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-07-21 17:56 UTC (permalink / raw)
  To: Ludovic Courtès, guix-devel

> This note should go to the top of the .patch file, along with one or two
> sentences explaining what it does and why we need it.

OK, will do that.

> It seems to me that a lot of stuff is Debian-specific and not needed
> (the debian/ directory is definitely not needed.)

I agree. However, I figured it would be better for ... maintenance... if we didn't fiddle around with other people's distributed patches.

Mainstream dtc work is kinda... stalled and so lots of people made custom patches to make basic functionality work. For example there is no fdtget support in the normal device-tree-compiler. Also, the documentation actually doesn't build otherwise.

One can search for "patches/" in the patch which yields:
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/01_build_doc.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/02_remove-unused-check-variable.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/03_Remove-unused-variable-in-flat_read_mem_reserve.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/04_Split-out-is_printable_string-into-util.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/05_Add-missing-tests-to-gitignore.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/06_Refactor-character-literal-parsing-code.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/07_Remove-gcc-4.6-set-but-not-used-warnings.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/08_Support-character-literals-in-cell-lists.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/09_Create-Makefile_utils-and-move-ftdump-into-it.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/10_Add-fdt-read_write-utility-functions.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/11_Make-testutils-use-utilfdt.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/12_use-utilfdt-to-read-blob.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/13_Add-fdt16_to_cpu-utility-function.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/14_Add-data_append_integer-function.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/15_Add-support-for-variable-sized-elements.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/16_fdtdump-rename-from-ftdump.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/17_libfdt-Add-support-for-appending-the-values-to-a-exi.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/18_libfdt-Activate-testcase-for-appending-properties.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/19_dtc-Implement-d-option-to-write-out-a-dependency-fil.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/20_Add-fdtget-utility-to-read-property-values-from-a-de.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/21_Add-fdtput-utility-to-write-property-values-to-a-dev.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/22_Introduce-TESTS_BIN-in-Makefiles-to-identify-tested-.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/23-libfdt-Add-missing-functions-to-shared-library.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/24_libfdt-Add-some-missing-symbols-to-version.lds.patch
+++ device-tree-compiler-1.4.0+dfsg/debian/patches/local-add-missing-header-706137.patch

Should we carry those? If so, should we split them into extra files and put them into our "patches" directory?

> This leads to packages with different names but that are otherwise
> completely identical.  I suppose the configure flags must also be
> changed as a function of the board?

Yeah, something like that. That's what the part below is supposed to do:

+(define u-boot
...
+       #:phases (modify-phases %standard-phases
+                  (replace
+                   'configure
...
+                       (zero? (system* "make" "HOSTCC=gcc" configname))
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

It's like in the Linux kernel. One does 

  $ make foobar_defconfig

in order to load the default config.

Then

  $ make

in order to compile. The result is incompatible with other boards.

> In that case, I’d suggest writing a procedure like:
> 
>   (define (make-u-boot-package board)
>     (package
>       (inherit u-boot)
>       (name (string-append "u-boot-" (string-downcase board)))
>       (arguments
>         ;; … pass the right configure flags etc.
>         )))
> 
> Then it’s probably enough to export ‘u-boot’ and ‘make-u-boot’—having a
> zillion variables doesn’t seem very helpful.  People can explicitly call
> ‘make-u-boot’ with the right board name

Yeah, sounds much nicer. 

How do I test this? How can I call it?

Is it also possible to have a function which finds out which defconfig files are in the source tarball and tells about them? Maybe have some nice error message if someone guesses the wrong board name?

> Could 

Yeah, I will send an updated patch :D

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now
  2016-07-21 17:56           ` Danny Milosavljevic
@ 2016-07-22 13:15             ` Ludovic Courtès
  0 siblings, 0 replies; 27+ messages in thread
From: Ludovic Courtès @ 2016-07-22 13:15 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Danny Milosavljevic <dannym@scratchpost.org> skribis:

>> This note should go to the top of the .patch file, along with one or two
>> sentences explaining what it does and why we need it.
>
> OK, will do that.

Great.

>> In that case, I’d suggest writing a procedure like:
>> 
>>   (define (make-u-boot-package board)
>>     (package
>>       (inherit u-boot)
>>       (name (string-append "u-boot-" (string-downcase board)))
>>       (arguments
>>         ;; … pass the right configure flags etc.
>>         )))
>> 
>> Then it’s probably enough to export ‘u-boot’ and ‘make-u-boot’—having a
>> zillion variables doesn’t seem very helpful.  People can explicitly call
>> ‘make-u-boot’ with the right board name
>
> Yeah, sounds much nicer. 
>
> How do I test this? How can I call it?

For test purposes, you could define a package variant and try to build
it:

  (define-public u-boot-FOOBAR
    (make-u-boot "FOOBAR"))

and:

  guix build u-boot-foobar

HTH!

Ludo’.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now
  2016-07-19 20:07       ` [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now Danny Milosavljevic
  2016-07-21 12:37         ` Ludovic Courtès
@ 2016-07-23 14:11         ` Andreas Enge
  2016-08-01 19:13         ` [PATCH v2] gnu: Add u-boot, device-tree-compiler Danny Milosavljevic
  2 siblings, 0 replies; 27+ messages in thread
From: Andreas Enge @ 2016-07-23 14:11 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Hello,

just two tiny comments:

On Tue, Jul 19, 2016 at 10:07:02PM +0200, Danny Milosavljevic wrote:
> * gnu/packages/patches/device-tree-compiler_1.4.0+dfsg-2ubuntu1.diff: New file.

The file should be renamed according to the scheme of the patches already present:
   uboot-say-roughly-what-it-does.patch

> Signed-off-by: Danny Milosavljevic <dannym+a@scratchpost.org>

There is no need to sign off your own commits. ("Signed-off-by" is used by
committers endorsing other people's patches and should not be confused with
the gnupg signature of the commit.)

Exciting work!

Andreas

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v2] gnu: Add u-boot, device-tree-compiler.
  2016-07-19 20:07       ` [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now Danny Milosavljevic
  2016-07-21 12:37         ` Ludovic Courtès
  2016-07-23 14:11         ` Andreas Enge
@ 2016-08-01 19:13         ` Danny Milosavljevic
  2016-08-01 19:18           ` [PATCH v3] " Danny Milosavljevic
  2 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-01 19:13 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 844 bytes --]


* gnu/packages/u-boot.scm (device-tree-compiler, u-boot): New variables.
---
 gnu/local.mk                                       |   4 +
 .../u-boot-device-tree-compiler-01_build_doc.patch |  21 ++++
 ...t-Add-missing-functions-to-shared-library.patch |  30 ++++++
 ...t-Add-some-missing-symbols-to-version.lds.patch |  33 ++++++
 gnu/packages/u-boot.scm                            | 116 +++++++++++++++++++++
 5 files changed, 204 insertions(+)
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
 create mode 100644 gnu/packages/u-boot.scm


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-u-boot-device-tree-compiler.patch --]
[-- Type: text/x-patch; name="0001-gnu-Add-u-boot-device-tree-compiler.patch", Size: 9890 bytes --]

diff --git a/gnu/local.mk b/gnu/local.mk
index dcdea86..f7e3c0f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -343,6 +343,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/unrtf.scm			\
   %D%/packages/upnp.scm				\
   %D%/packages/uucp.scm				\
+  %D%/packages/u-boot.scm			\
   %D%/packages/valgrind.scm			\
   %D%/packages/version-control.scm		\
   %D%/packages/video.scm			\
@@ -813,6 +814,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/unzip-initialize-symlink-flag.patch	\
   %D%/packages/patches/unzip-overflow-long-fsize.patch		\
   %D%/packages/patches/unzip-remove-build-date.patch		\
+  %D%/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch \
   %D%/packages/patches/util-linux-tests.patch			\
   %D%/packages/patches/upower-builddir.patch			\
   %D%/packages/patches/valgrind-enable-arm.patch		\
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch b/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
new file mode 100644
index 0000000..06c3e40
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-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
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
new file mode 100644
index 0000000..3bfde67
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
@@ -0,0 +1,30 @@
+From a4b093f7366fdb429ca1781144d3985fa50d0fbb Mon Sep 17 00:00:00 2001
+From: Julien Grall <julien.grall@linaro.org>
+Date: Tue, 17 Mar 2015 16:00:34 +0000
+Subject: [PATCH] libfdt: Add missing functions to shared library
+
+The commit 4e76ec7 "libfdt: Add fdt_next_subnode() to permit easy
+subnode iteration" adds new functions (fdt_{first,next}_subnode) but
+forgot to mark them as 'global' in the shared library.
+
+Signed-off-by: Julien Grall <julien.grall@linaro.org>
+---
+ libfdt/version.lds | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index 80b322b..941208e 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -54,6 +54,8 @@ LIBFDT_1.2 {
+ 		fdt_get_property_by_offset;
+ 		fdt_getprop_by_offset;
+ 		fdt_next_property_offset;
++		fdt_first_subnode;
++		fdt_next_subnode;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
new file mode 100644
index 0000000..4f825c4
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
@@ -0,0 +1,33 @@
+From f58799be130e27cc729cb2d45566daa0bb3b8605 Mon Sep 17 00:00:00 2001
+From: David Gibson <david@gibson.dropbear.id.au>
+Date: Tue, 1 Dec 2015 12:55:21 +1100
+Subject: [PATCH] libfdt: Add some missing symbols to version.lds
+
+Several functions in the header file were missing from the version.lds
+script, meaning that they couldn't be used from a libfdt shared library.
+
+Reported by Ken Aaker, via github issue tracker.
+
+Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+---
+ libfdt/version.lds | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index f19f157..1f4e1ea 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -57,6 +57,10 @@ LIBFDT_1.2 {
+ 		fdt_next_property_offset;
+ 		fdt_first_subnode;
+ 		fdt_next_subnode;
++		fdt_address_cells;
++		fdt_size_cells;
++		fdt_stringlist_contains;
++		fdt_resize;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/u-boot.scm b/gnu/packages/u-boot.scm
new file mode 100644
index 0000000..add367c
--- /dev/null
+++ b/gnu/packages/u-boot.scm
@@ -0,0 +1,116 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix 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 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages u-boot)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:select (gpl2))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages bison) ; dtc
+  #:use-module (gnu packages flex) ; dtc
+  #:use-module (srfi srfi-1)
+  #:use-module ((srfi srfi-1) #:select (last)))
+
+(define-public device-tree-compiler
+  (package
+    (name "device-tree-compiler")
+    (version "1.4.0")
+    (source (origin
+             (method url-fetch)
+             ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
+             (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
+                                 "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
+             (sha256
+              (base32
+               "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
+             (patches (search-patches "u-boot-device-tree-compiler-01_build_doc.patch"
+                                      "u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch"
+                                      "u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch"))
+             (modules '((guix build utils)))
+             (snippet
+               '(substitute* "Makefile"
+                  (("/usr/bin/install")
+                   "install")))))
+    (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
+    (synopsis "Compiles Device Tree Source Files (.dts)")
+    (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
+These are hardware (board) description files (used by Linux and BSD).")
+    (license gpl2)
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (arguments
+     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
+       #:phases (modify-phases %standard-phases
+          (delete 'configure))))))
+
+(define u-boot
+  (package
+    (name "u-boot")
+    (version "2016.07")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
+             (sha256
+              (base32
+               "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))
+    (home-page "http://www.denx.de/wiki/U-Boot/")
+    (synopsis "ARM Universal Bootloader")
+    (description "U-Boot is an universal bootloader mostly used for ARM boards. 
+It also initializes the boards (RAM etc).")
+    (license gpl2)
+    (native-inputs
+      `(("python-2" ,python-2)
+        ("device-tree-compiler" ,device-tree-compiler)))
+    (build-system  gnu-build-system)
+    (arguments
+     `(#:make-flags '("HOSTCC=gcc") #| ignored? |#))))
+
+(define (make-u-boot-package board)
+  (package
+    (inherit u-boot)
+    (name (string-append "u-boot-" (string-downcase board)))
+    (arguments
+     `(#:make-flags '("HOSTCC=gcc")
+       #:phases
+        (modify-phases %standard-phases
+         (replace
+          'configure
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((configname (string-append ,board "_defconfig")))
+               (if (zero? (system* "ls" (string-append "configs/" configname)))
+                  (zero? (apply system* "make" `(,@make-flags ,configname)))
+                  (begin
+                    (display "Invalid board. Valid boards would have been:")
+                    (newline)
+                    (system* "ls" "-1" "configs")
+                    #f))))))))))
+
+;(define-public u-boot-a20-olinuxino-lime2
+;  (make-u-boot-package "A20-OLinuXino-Lime2"))
+
+;(define-public u-boot-efi-x86
+;  (make-u-boot-package "efi-x86"))
+
+; Something should:
+; - create extlinux.conf and put it on the first bootable partition (the one with the Active flag)
+; - install the u-boot bootloader

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v3] gnu: Add u-boot, device-tree-compiler.
  2016-08-01 19:13         ` [PATCH v2] gnu: Add u-boot, device-tree-compiler Danny Milosavljevic
@ 2016-08-01 19:18           ` Danny Milosavljevic
  2016-08-01 19:58             ` [PATCH v4] " Danny Milosavljevic
  0 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-01 19:18 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 884 bytes --]

gnu: Add u-boot, device-tree-compiler.

* gnu/packages/u-boot.scm (device-tree-compiler, u-boot): New variables.
---
 gnu/local.mk                                       |   4 +
 .../u-boot-device-tree-compiler-01_build_doc.patch |  21 ++++
 ...t-Add-missing-functions-to-shared-library.patch |  30 ++++++
 ...t-Add-some-missing-symbols-to-version.lds.patch |  33 ++++++
 gnu/packages/u-boot.scm                            | 114 +++++++++++++++++++++
 5 files changed, 202 insertions(+)
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
 create mode 100644 gnu/packages/u-boot.scm


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-u-boot-device-tree-compiler.patch --]
[-- Type: text/x-patch; name="0001-gnu-Add-u-boot-device-tree-compiler.patch", Size: 9818 bytes --]

diff --git a/gnu/local.mk b/gnu/local.mk
index dcdea86..f7e3c0f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -343,6 +343,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/unrtf.scm			\
   %D%/packages/upnp.scm				\
   %D%/packages/uucp.scm				\
+  %D%/packages/u-boot.scm			\
   %D%/packages/valgrind.scm			\
   %D%/packages/version-control.scm		\
   %D%/packages/video.scm			\
@@ -813,6 +814,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/unzip-initialize-symlink-flag.patch	\
   %D%/packages/patches/unzip-overflow-long-fsize.patch		\
   %D%/packages/patches/unzip-remove-build-date.patch		\
+  %D%/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch \
   %D%/packages/patches/util-linux-tests.patch			\
   %D%/packages/patches/upower-builddir.patch			\
   %D%/packages/patches/valgrind-enable-arm.patch		\
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch b/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
new file mode 100644
index 0000000..06c3e40
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-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
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
new file mode 100644
index 0000000..3bfde67
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
@@ -0,0 +1,30 @@
+From a4b093f7366fdb429ca1781144d3985fa50d0fbb Mon Sep 17 00:00:00 2001
+From: Julien Grall <julien.grall@linaro.org>
+Date: Tue, 17 Mar 2015 16:00:34 +0000
+Subject: [PATCH] libfdt: Add missing functions to shared library
+
+The commit 4e76ec7 "libfdt: Add fdt_next_subnode() to permit easy
+subnode iteration" adds new functions (fdt_{first,next}_subnode) but
+forgot to mark them as 'global' in the shared library.
+
+Signed-off-by: Julien Grall <julien.grall@linaro.org>
+---
+ libfdt/version.lds | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index 80b322b..941208e 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -54,6 +54,8 @@ LIBFDT_1.2 {
+ 		fdt_get_property_by_offset;
+ 		fdt_getprop_by_offset;
+ 		fdt_next_property_offset;
++		fdt_first_subnode;
++		fdt_next_subnode;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
new file mode 100644
index 0000000..4f825c4
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
@@ -0,0 +1,33 @@
+From f58799be130e27cc729cb2d45566daa0bb3b8605 Mon Sep 17 00:00:00 2001
+From: David Gibson <david@gibson.dropbear.id.au>
+Date: Tue, 1 Dec 2015 12:55:21 +1100
+Subject: [PATCH] libfdt: Add some missing symbols to version.lds
+
+Several functions in the header file were missing from the version.lds
+script, meaning that they couldn't be used from a libfdt shared library.
+
+Reported by Ken Aaker, via github issue tracker.
+
+Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+---
+ libfdt/version.lds | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index f19f157..1f4e1ea 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -57,6 +57,10 @@ LIBFDT_1.2 {
+ 		fdt_next_property_offset;
+ 		fdt_first_subnode;
+ 		fdt_next_subnode;
++		fdt_address_cells;
++		fdt_size_cells;
++		fdt_stringlist_contains;
++		fdt_resize;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/u-boot.scm b/gnu/packages/u-boot.scm
new file mode 100644
index 0000000..415fbad
--- /dev/null
+++ b/gnu/packages/u-boot.scm
@@ -0,0 +1,114 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix 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 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages u-boot)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:select (gpl2))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages bison) ; dtc
+  #:use-module (gnu packages flex) ; dtc
+  #:use-module (srfi srfi-1)
+  #:use-module ((srfi srfi-1) #:select (last)))
+
+(define-public device-tree-compiler
+  (package
+    (name "device-tree-compiler")
+    (version "1.4.0")
+    (source (origin
+             (method url-fetch)
+             ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
+             (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
+                                 "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
+             (sha256
+              (base32
+               "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
+             (patches (search-patches "u-boot-device-tree-compiler-01_build_doc.patch"
+                                      "u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch"
+                                      "u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch"))
+             (modules '((guix build utils)))
+             (snippet
+               '(substitute* "Makefile"
+                  (("/usr/bin/install")
+                   "install")))))
+    (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
+    (synopsis "Compiles Device Tree Source Files (.dts)")
+    (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
+These are hardware (board) description files (used by Linux and BSD).")
+    (license gpl2)
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (arguments
+     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
+       #:phases (modify-phases %standard-phases
+          (delete 'configure))))))
+
+(define u-boot
+  (package
+    (name "u-boot")
+    (version "2016.07")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
+             (sha256
+              (base32
+               "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))
+    (home-page "http://www.denx.de/wiki/U-Boot/")
+    (synopsis "ARM Universal Bootloader")
+    (description "U-Boot is an universal bootloader mostly used for ARM boards. 
+It also initializes the boards (RAM etc).")
+    (license gpl2)
+    (native-inputs
+      `(("python-2" ,python-2)
+        ("device-tree-compiler" ,device-tree-compiler)))
+    (build-system  gnu-build-system)))
+
+(define (make-u-boot-package board)
+  (package
+    (inherit u-boot)
+    (name (string-append "u-boot-" (string-downcase board)))
+    (arguments
+     `(#:make-flags '("HOSTCC=gcc")
+       #:phases
+        (modify-phases %standard-phases
+         (replace
+          'configure
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((configname (string-append ,board "_defconfig")))
+               (if (zero? (system* "ls" (string-append "configs/" configname)))
+                  (zero? (apply system* "make" `(,@make-flags ,configname)))
+                  (begin
+                    (display "Invalid board. Valid boards would have been:")
+                    (newline)
+                    (system* "ls" "-1" "configs")
+                    #f))))))))))
+
+;(define-public u-boot-a20-olinuxino-lime2
+;  (make-u-boot-package "A20-OLinuXino-Lime2"))
+
+;(define-public u-boot-efi-x86
+;  (make-u-boot-package "efi-x86"))
+
+; Something should:
+; - create extlinux.conf and put it on the first bootable partition (the one with the Active flag)
+; - install the u-boot bootloader

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v4] gnu: Add u-boot, device-tree-compiler.
  2016-08-01 19:18           ` [PATCH v3] " Danny Milosavljevic
@ 2016-08-01 19:58             ` Danny Milosavljevic
  2016-08-01 20:05               ` [PATCH v5] " Danny Milosavljevic
  0 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-01 19:58 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 883 bytes --]

gnu: Add u-boot, device-tree-compiler.

* gnu/packages/u-boot.scm (device-tree-compiler, u-boot): New variables.
---
 gnu/local.mk                                       |   4 +
 .../u-boot-device-tree-compiler-01_build_doc.patch |  21 ++++
 ...t-Add-missing-functions-to-shared-library.patch |  30 +++++
 ...t-Add-some-missing-symbols-to-version.lds.patch |  33 ++++++
 gnu/packages/u-boot.scm                            | 130 +++++++++++++++++++++
 5 files changed, 218 insertions(+)
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
 create mode 100644 gnu/packages/u-boot.scm


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-u-boot-device-tree-compiler.patch --]
[-- Type: text/x-patch; name="0001-gnu-Add-u-boot-device-tree-compiler.patch", Size: 10609 bytes --]

diff --git a/gnu/local.mk b/gnu/local.mk
index dcdea86..f7e3c0f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -343,6 +343,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/unrtf.scm			\
   %D%/packages/upnp.scm				\
   %D%/packages/uucp.scm				\
+  %D%/packages/u-boot.scm			\
   %D%/packages/valgrind.scm			\
   %D%/packages/version-control.scm		\
   %D%/packages/video.scm			\
@@ -813,6 +814,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/unzip-initialize-symlink-flag.patch	\
   %D%/packages/patches/unzip-overflow-long-fsize.patch		\
   %D%/packages/patches/unzip-remove-build-date.patch		\
+  %D%/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch \
   %D%/packages/patches/util-linux-tests.patch			\
   %D%/packages/patches/upower-builddir.patch			\
   %D%/packages/patches/valgrind-enable-arm.patch		\
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch b/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
new file mode 100644
index 0000000..06c3e40
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-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
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
new file mode 100644
index 0000000..3bfde67
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
@@ -0,0 +1,30 @@
+From a4b093f7366fdb429ca1781144d3985fa50d0fbb Mon Sep 17 00:00:00 2001
+From: Julien Grall <julien.grall@linaro.org>
+Date: Tue, 17 Mar 2015 16:00:34 +0000
+Subject: [PATCH] libfdt: Add missing functions to shared library
+
+The commit 4e76ec7 "libfdt: Add fdt_next_subnode() to permit easy
+subnode iteration" adds new functions (fdt_{first,next}_subnode) but
+forgot to mark them as 'global' in the shared library.
+
+Signed-off-by: Julien Grall <julien.grall@linaro.org>
+---
+ libfdt/version.lds | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index 80b322b..941208e 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -54,6 +54,8 @@ LIBFDT_1.2 {
+ 		fdt_get_property_by_offset;
+ 		fdt_getprop_by_offset;
+ 		fdt_next_property_offset;
++		fdt_first_subnode;
++		fdt_next_subnode;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
new file mode 100644
index 0000000..4f825c4
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
@@ -0,0 +1,33 @@
+From f58799be130e27cc729cb2d45566daa0bb3b8605 Mon Sep 17 00:00:00 2001
+From: David Gibson <david@gibson.dropbear.id.au>
+Date: Tue, 1 Dec 2015 12:55:21 +1100
+Subject: [PATCH] libfdt: Add some missing symbols to version.lds
+
+Several functions in the header file were missing from the version.lds
+script, meaning that they couldn't be used from a libfdt shared library.
+
+Reported by Ken Aaker, via github issue tracker.
+
+Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+---
+ libfdt/version.lds | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index f19f157..1f4e1ea 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -57,6 +57,10 @@ LIBFDT_1.2 {
+ 		fdt_next_property_offset;
+ 		fdt_first_subnode;
+ 		fdt_next_subnode;
++		fdt_address_cells;
++		fdt_size_cells;
++		fdt_stringlist_contains;
++		fdt_resize;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/u-boot.scm b/gnu/packages/u-boot.scm
new file mode 100644
index 0000000..573eece
--- /dev/null
+++ b/gnu/packages/u-boot.scm
@@ -0,0 +1,130 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix 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 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages u-boot)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:select (gpl2))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages algebra) ; bc
+  #:use-module (srfi srfi-1)
+  #:use-module ((srfi srfi-1) #:select (last)))
+
+(define-public device-tree-compiler
+  (package
+    (name "device-tree-compiler")
+    (version "1.4.0")
+    (source (origin
+             (method url-fetch)
+             ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
+             (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
+                                 "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
+             (sha256
+              (base32
+               "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
+             (patches (search-patches "u-boot-device-tree-compiler-01_build_doc.patch"
+                                      "u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch"
+                                      "u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch"))
+             (modules '((guix build utils)))
+             (snippet
+               '(substitute* "Makefile"
+                  (("/usr/bin/install")
+                   "install")))))
+    (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
+    (synopsis "Compiles Device Tree Source Files (.dts)")
+    (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
+These are hardware (board) description files (used by Linux and BSD).")
+    (license gpl2)
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (arguments
+     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
+       #:phases (modify-phases %standard-phases
+          (delete 'configure))))))
+
+(define u-boot
+  (package
+    (name "u-boot")
+    (version "2016.07")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
+             (sha256
+              (base32
+               "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))
+    (home-page "http://www.denx.de/wiki/U-Boot/")
+    (synopsis "ARM Universal Bootloader")
+    (description "U-Boot is an universal bootloader mostly used for ARM boards. 
+It also initializes the boards (RAM etc).")
+    (license gpl2)
+    (native-inputs
+      `(("python-2" ,python-2)
+        ("device-tree-compiler" ,device-tree-compiler)
+        ("bc" ,bc)))
+    (build-system  gnu-build-system)))
+
+(define (make-u-boot-package board)
+  (package
+    (inherit u-boot)
+    (name (string-append "u-boot-" (string-downcase board)))
+    (arguments
+     `(#:test-target "test"
+       ;,@(if (,%current-target-system "x86-64") <-- TODO; but %current-target-system is undefined
+       ;    '(#:system "i686-linux")
+       ;    '())
+       #:system "i686-linux"
+       #:make-flags '("HOSTCC=gcc")
+       #:phases
+        (modify-phases %standard-phases
+         (replace
+          'configure
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((configname (string-append ,board "_defconfig")))
+               (if (zero? (system* "ls" (string-append "configs/" configname)))
+                  (zero? (apply system* "make" `(,@make-flags ,configname)))
+                  (begin
+                    (display "Invalid boardname. Valid boardnames would have been:")
+                    (newline)
+                    (system* "ls" "-1" "configs")
+                    #f)))))
+         (replace 'install
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((out (string-append (assoc-ref outputs "out") "/libexec")))
+               (mkdir-p out)
+               (for-each (lambda (name)
+                           (let ((outname (string-append out "/" name)))
+                             (mkdir-p (dirname outname))
+                             (copy-file name outname)))
+                         (find-files "." ".*\\.(bin|efi)$"))))))))))
+
+;(define-public u-boot-a20-olinuxino-lime2
+;  (make-u-boot-package "A20-OLinuXino-Lime2"))
+
+;(define-public u-boot-efi-x86
+;  (make-u-boot-package "efi-x86"))
+
+; Something should:
+; - create extlinux.conf and put it on the first bootable partition (the one with the Active flag)
+; - install the u-boot bootloader

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v5] gnu: Add u-boot, device-tree-compiler.
  2016-08-01 19:58             ` [PATCH v4] " Danny Milosavljevic
@ 2016-08-01 20:05               ` Danny Milosavljevic
  2016-08-02  7:11                 ` [PATCH v6] " Danny Milosavljevic
  0 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-01 20:05 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 883 bytes --]

gnu: Add u-boot, device-tree-compiler.

* gnu/packages/u-boot.scm (device-tree-compiler, u-boot): New variables.
---
 gnu/local.mk                                       |   4 +
 .../u-boot-device-tree-compiler-01_build_doc.patch |  21 ++++
 ...t-Add-missing-functions-to-shared-library.patch |  30 +++++
 ...t-Add-some-missing-symbols-to-version.lds.patch |  33 ++++++
 gnu/packages/u-boot.scm                            | 131 +++++++++++++++++++++
 5 files changed, 219 insertions(+)
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
 create mode 100644 gnu/packages/u-boot.scm


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-u-boot-device-tree-compiler.patch --]
[-- Type: text/x-patch; name="0001-gnu-Add-u-boot-device-tree-compiler.patch", Size: 10622 bytes --]

diff --git a/gnu/local.mk b/gnu/local.mk
index dcdea86..f7e3c0f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -343,6 +343,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/unrtf.scm			\
   %D%/packages/upnp.scm				\
   %D%/packages/uucp.scm				\
+  %D%/packages/u-boot.scm			\
   %D%/packages/valgrind.scm			\
   %D%/packages/version-control.scm		\
   %D%/packages/video.scm			\
@@ -813,6 +814,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/unzip-initialize-symlink-flag.patch	\
   %D%/packages/patches/unzip-overflow-long-fsize.patch		\
   %D%/packages/patches/unzip-remove-build-date.patch		\
+  %D%/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch \
   %D%/packages/patches/util-linux-tests.patch			\
   %D%/packages/patches/upower-builddir.patch			\
   %D%/packages/patches/valgrind-enable-arm.patch		\
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch b/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
new file mode 100644
index 0000000..06c3e40
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-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
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
new file mode 100644
index 0000000..3bfde67
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
@@ -0,0 +1,30 @@
+From a4b093f7366fdb429ca1781144d3985fa50d0fbb Mon Sep 17 00:00:00 2001
+From: Julien Grall <julien.grall@linaro.org>
+Date: Tue, 17 Mar 2015 16:00:34 +0000
+Subject: [PATCH] libfdt: Add missing functions to shared library
+
+The commit 4e76ec7 "libfdt: Add fdt_next_subnode() to permit easy
+subnode iteration" adds new functions (fdt_{first,next}_subnode) but
+forgot to mark them as 'global' in the shared library.
+
+Signed-off-by: Julien Grall <julien.grall@linaro.org>
+---
+ libfdt/version.lds | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index 80b322b..941208e 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -54,6 +54,8 @@ LIBFDT_1.2 {
+ 		fdt_get_property_by_offset;
+ 		fdt_getprop_by_offset;
+ 		fdt_next_property_offset;
++		fdt_first_subnode;
++		fdt_next_subnode;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
new file mode 100644
index 0000000..4f825c4
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
@@ -0,0 +1,33 @@
+From f58799be130e27cc729cb2d45566daa0bb3b8605 Mon Sep 17 00:00:00 2001
+From: David Gibson <david@gibson.dropbear.id.au>
+Date: Tue, 1 Dec 2015 12:55:21 +1100
+Subject: [PATCH] libfdt: Add some missing symbols to version.lds
+
+Several functions in the header file were missing from the version.lds
+script, meaning that they couldn't be used from a libfdt shared library.
+
+Reported by Ken Aaker, via github issue tracker.
+
+Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+---
+ libfdt/version.lds | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index f19f157..1f4e1ea 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -57,6 +57,10 @@ LIBFDT_1.2 {
+ 		fdt_next_property_offset;
+ 		fdt_first_subnode;
+ 		fdt_next_subnode;
++		fdt_address_cells;
++		fdt_size_cells;
++		fdt_stringlist_contains;
++		fdt_resize;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/u-boot.scm b/gnu/packages/u-boot.scm
new file mode 100644
index 0000000..308af6b
--- /dev/null
+++ b/gnu/packages/u-boot.scm
@@ -0,0 +1,131 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix 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 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages u-boot)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:select (gpl2))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages algebra) ; bc
+  #:use-module (srfi srfi-1)
+  #:use-module ((srfi srfi-1) #:select (last)))
+
+(define-public device-tree-compiler
+  (package
+    (name "device-tree-compiler")
+    (version "1.4.0")
+    (source (origin
+             (method url-fetch)
+             ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
+             (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
+                                 "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
+             (sha256
+              (base32
+               "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
+             (patches (search-patches "u-boot-device-tree-compiler-01_build_doc.patch"
+                                      "u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch"
+                                      "u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch"))
+             (modules '((guix build utils)))
+             (snippet
+               '(substitute* "Makefile"
+                  (("/usr/bin/install")
+                   "install")))))
+    (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
+    (synopsis "Compiles Device Tree Source Files (.dts)")
+    (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
+These are hardware (board) description files (used by Linux and BSD).")
+    (license gpl2)
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (arguments
+     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
+       #:phases (modify-phases %standard-phases
+          (delete 'configure))))))
+
+(define u-boot
+  (package
+    (name "u-boot")
+    (version "2016.07")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
+             (sha256
+              (base32
+               "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))
+    (home-page "http://www.denx.de/wiki/U-Boot/")
+    (synopsis "ARM Universal Bootloader")
+    (description "U-Boot is an universal bootloader mostly used for ARM boards. 
+It also initializes the boards (RAM etc).")
+    (license gpl2)
+    (native-inputs
+      `(("python-2" ,python-2)
+        ("device-tree-compiler" ,device-tree-compiler)
+        ("bc" ,bc)))
+    (build-system  gnu-build-system)))
+
+(define (make-u-boot-package board)
+  (package
+    (inherit u-boot)
+    (name (string-append "u-boot-" (string-downcase board)))
+    (arguments
+     `(#:test-target "test"
+       ,@(if (string-prefix? "x86_64"
+                             (or (%current-target-system)
+                             (%current-system)))
+           '(#:system "i686-linux")
+           '())
+       #:make-flags '("HOSTCC=gcc")
+       #:phases
+        (modify-phases %standard-phases
+         (replace
+          'configure
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((configname (string-append ,board "_defconfig")))
+               (if (zero? (system* "ls" (string-append "configs/" configname)))
+                  (zero? (apply system* "make" `(,@make-flags ,configname)))
+                  (begin
+                    (display "Invalid boardname. Valid boardnames would have been:")
+                    (newline)
+                    (system* "ls" "-1" "configs")
+                    #f)))))
+         (replace 'install
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((out (string-append (assoc-ref outputs "out") "/libexec")))
+               (mkdir-p out)
+               (for-each (lambda (name)
+                           (let ((outname (string-append out "/" name)))
+                             (mkdir-p (dirname outname))
+                             (copy-file name outname)))
+                         (find-files "." ".*\\.(bin|efi)$"))))))))))
+
+(define-public u-boot-a20-olinuxino-lime2
+  (make-u-boot-package "A20-OLinuXino-Lime2"))
+
+(define-public u-boot-efi-x86
+  (make-u-boot-package "efi-x86"))
+
+; Something should:
+; - create extlinux.conf and put it on the first bootable partition (the one with the Active flag)
+; - install the u-boot bootloader

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v6] gnu: Add u-boot, device-tree-compiler.
  2016-08-01 20:05               ` [PATCH v5] " Danny Milosavljevic
@ 2016-08-02  7:11                 ` Danny Milosavljevic
  2016-08-21  8:23                   ` Danny Milosavljevic
  0 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-02  7:11 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 883 bytes --]

gnu: Add u-boot, device-tree-compiler.

* gnu/packages/u-boot.scm (device-tree-compiler, u-boot): New variables.
---
 gnu/local.mk                                       |   4 +
 .../u-boot-device-tree-compiler-01_build_doc.patch |  21 ++++
 ...t-Add-missing-functions-to-shared-library.patch |  30 +++++
 ...t-Add-some-missing-symbols-to-version.lds.patch |  33 ++++++
 gnu/packages/u-boot.scm                            | 131 +++++++++++++++++++++
 5 files changed, 219 insertions(+)
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
 create mode 100644 gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
 create mode 100644 gnu/packages/u-boot.scm


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-u-boot-device-tree-compiler.patch --]
[-- Type: text/x-patch; name="0001-gnu-Add-u-boot-device-tree-compiler.patch", Size: 10630 bytes --]

diff --git a/gnu/local.mk b/gnu/local.mk
index dcdea86..f7e3c0f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -343,6 +343,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/unrtf.scm			\
   %D%/packages/upnp.scm				\
   %D%/packages/uucp.scm				\
+  %D%/packages/u-boot.scm			\
   %D%/packages/valgrind.scm			\
   %D%/packages/version-control.scm		\
   %D%/packages/video.scm			\
@@ -813,6 +814,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/unzip-initialize-symlink-flag.patch	\
   %D%/packages/patches/unzip-overflow-long-fsize.patch		\
   %D%/packages/patches/unzip-remove-build-date.patch		\
+  %D%/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch \
+  %D%/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch \
   %D%/packages/patches/util-linux-tests.patch			\
   %D%/packages/patches/upower-builddir.patch			\
   %D%/packages/patches/valgrind-enable-arm.patch		\
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch b/gnu/packages/patches/u-boot-device-tree-compiler-01_build_doc.patch
new file mode 100644
index 0000000..06c3e40
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-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
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
new file mode 100644
index 0000000..3bfde67
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch
@@ -0,0 +1,30 @@
+From a4b093f7366fdb429ca1781144d3985fa50d0fbb Mon Sep 17 00:00:00 2001
+From: Julien Grall <julien.grall@linaro.org>
+Date: Tue, 17 Mar 2015 16:00:34 +0000
+Subject: [PATCH] libfdt: Add missing functions to shared library
+
+The commit 4e76ec7 "libfdt: Add fdt_next_subnode() to permit easy
+subnode iteration" adds new functions (fdt_{first,next}_subnode) but
+forgot to mark them as 'global' in the shared library.
+
+Signed-off-by: Julien Grall <julien.grall@linaro.org>
+---
+ libfdt/version.lds | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index 80b322b..941208e 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -54,6 +54,8 @@ LIBFDT_1.2 {
+ 		fdt_get_property_by_offset;
+ 		fdt_getprop_by_offset;
+ 		fdt_next_property_offset;
++		fdt_first_subnode;
++		fdt_next_subnode;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
new file mode 100644
index 0000000..4f825c4
--- /dev/null
+++ b/gnu/packages/patches/u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch
@@ -0,0 +1,33 @@
+From f58799be130e27cc729cb2d45566daa0bb3b8605 Mon Sep 17 00:00:00 2001
+From: David Gibson <david@gibson.dropbear.id.au>
+Date: Tue, 1 Dec 2015 12:55:21 +1100
+Subject: [PATCH] libfdt: Add some missing symbols to version.lds
+
+Several functions in the header file were missing from the version.lds
+script, meaning that they couldn't be used from a libfdt shared library.
+
+Reported by Ken Aaker, via github issue tracker.
+
+Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+---
+ libfdt/version.lds | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libfdt/version.lds b/libfdt/version.lds
+index f19f157..1f4e1ea 100644
+--- a/libfdt/version.lds
++++ b/libfdt/version.lds
+@@ -57,6 +57,10 @@ LIBFDT_1.2 {
+ 		fdt_next_property_offset;
+ 		fdt_first_subnode;
+ 		fdt_next_subnode;
++		fdt_address_cells;
++		fdt_size_cells;
++		fdt_stringlist_contains;
++		fdt_resize;
+ 
+ 	local:
+ 		*;
+-- 
+2.8.1
+
diff --git a/gnu/packages/u-boot.scm b/gnu/packages/u-boot.scm
new file mode 100644
index 0000000..173d621
--- /dev/null
+++ b/gnu/packages/u-boot.scm
@@ -0,0 +1,131 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix 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 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages u-boot)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:select (gpl2))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages algebra) ; bc
+  #:use-module (srfi srfi-1)
+  #:use-module ((srfi srfi-1) #:select (last)))
+
+(define-public device-tree-compiler
+  (package
+    (name "device-tree-compiler")
+    (version "1.4.0")
+    (source (origin
+             (method url-fetch)
+             ;; or <https://git.kernel.org/cgit/utils/dtc/dtc.git>
+             (uri (string-append "https://launchpad.net/ubuntu/+archive/primary/+files/"
+                                 "device-tree-compiler_" version "+dfsg.orig.tar.gz"))
+             (sha256
+              (base32
+               "0hzsqkpbgl73fblpnaiczirgwn0hapa7z478xjy6vvkqljpa3ygm"))
+             (patches (search-patches "u-boot-device-tree-compiler-01_build_doc.patch"
+                                      "u-boot-device-tree-compiler-23-libfdt-Add-missing-functions-to-shared-library.patch"
+                                      "u-boot-device-tree-compiler-24_libfdt-Add-some-missing-symbols-to-version.lds.patch"))
+             (modules '((guix build utils)))
+             (snippet
+               '(substitute* "Makefile"
+                  (("/usr/bin/install")
+                   "install")))))
+    (home-page "https://git.kernel.org/cgit/utils/dtc/dtc.git")
+    (synopsis "Compiles Device Tree Source Files (.dts)")
+    (description "dtc compiles Device Tree Source Files to Device Tree Binary Files. 
+These are hardware (board) description files (used by Linux and BSD).")
+    (license gpl2)
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (arguments
+     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref %outputs "out"))) ; Note: or patch out PREFIX
+       #:phases (modify-phases %standard-phases
+          (delete 'configure))))))
+
+(define u-boot
+  (package
+    (name "u-boot")
+    (version "2016.07")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "ftp://ftp.denx.de/pub/u-boot/u-boot-" version ".tar.bz2"))
+             (sha256
+              (base32
+               "0lqj4ckmfqiap8mc6z2d5albs3g2h5mzccbn60hsgxhabhibfkwp"))))
+    (home-page "http://www.denx.de/wiki/U-Boot/")
+    (synopsis "ARM Universal Bootloader")
+    (description "U-Boot is an universal bootloader mostly used for ARM boards. 
+It also initializes the boards (RAM etc).")
+    (license gpl2)
+    (native-inputs
+      `(("python-2" ,python-2)
+        ("device-tree-compiler" ,device-tree-compiler)
+        ("bc" ,bc)))
+    (build-system  gnu-build-system)))
+
+(define (make-u-boot-package board)
+  (package
+    (inherit u-boot)
+    (name (string-append "u-boot-" (string-downcase board)))
+    (arguments
+     `(#:test-target "test"
+       ,@(if (string-prefix? "x86_64"
+                             (or (%current-target-system)
+                                 (%current-system)))
+           '(#:system "i686-linux")
+           '())
+       #:make-flags '("HOSTCC=gcc")
+       #:phases
+        (modify-phases %standard-phases
+         (replace
+          'configure
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((configname (string-append ,board "_defconfig")))
+               (if (zero? (system* "ls" (string-append "configs/" configname)))
+                  (zero? (apply system* "make" `(,@make-flags ,configname)))
+                  (begin
+                    (display "Invalid boardname. Valid boardnames would have been:")
+                    (newline)
+                    (system* "ls" "-1" "configs")
+                    #f)))))
+         (replace 'install
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             (let ((out (string-append (assoc-ref outputs "out") "/libexec")))
+               (mkdir-p out)
+               (for-each (lambda (name)
+                           (let ((outname (string-append out "/" name)))
+                             (mkdir-p (dirname outname))
+                             (copy-file name outname)))
+                         (find-files "." ".*\\.(bin|efi)$"))))))))))
+
+;(define-public u-boot-a20-olinuxino-lime2
+;  (make-u-boot-package "A20-OLinuXino-Lime2"))
+
+;(define-public u-boot-efi-x86
+;  (make-u-boot-package "efi-x86"))
+
+; Something should:
+; - create extlinux.conf and put it on the first bootable partition (the one with the Active flag)
+; - install the u-boot bootloader

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: GuixSD on ARM
  2016-07-19  1:47   ` Eric Bavier
@ 2016-08-15 20:14     ` Christopher Allan Webber
  2016-09-11 13:05       ` Andreas Enge
  0 siblings, 1 reply; 27+ messages in thread
From: Christopher Allan Webber @ 2016-08-15 20:14 UTC (permalink / raw)
  To: Eric Bavier; +Cc: guix-devel

Eric Bavier writes:

> On Wed, 13 Jul 2016 08:55:23 +0200
> Ricardo Wurmus <rekado@elephly.net> wrote:
>
>> Hi Daniel,
>> 
>> > I'd like GuixSD on ARM plataform, for instance Libre Tea Computer Card 
>> > or other ARM libre plataform.
>> >
>> > I buy a Libre Tea Computer Card:
>> > - https://www.crowdsupply.com/eoma68/micro-desktop
>> > - http://retro-freedom.nz/blog/2016/06/30/eoma68-my-dream-machine/  
>> 
>> I’m also very excited about this project and wish it to succeed, because
>> it is appalling and discouraging to see how little environmental
>> concerns are usually considered in tech.
>> 
>> It would be very nice to be able to use GuixSD on the EOMA68.  Alas, I
>> don’t have an overview on what work needs to be done to get there.
>
> I've signed up for the Libre Tea and the desktop enclosure, so I'll be
> playing with the GuixSD support in the coming days/weeks/months.  I'm
> looking forward to working with other backers here.
>
> It Would Be Nice™ if we could get something up and running before
> shipment so we could propose a pre-imaged GuixSD version of the card.  :-)
>
> `~Eric

I've also signed up for a Libre Tea card.  I hope it works out, and also
hope we can get Guix support in.  That would rock!

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v6] gnu: Add u-boot, device-tree-compiler.
  2016-08-02  7:11                 ` [PATCH v6] " Danny Milosavljevic
@ 2016-08-21  8:23                   ` Danny Milosavljevic
  2016-08-21  9:47                     ` David Craven
  0 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-21  8:23 UTC (permalink / raw)
  To: guix-devel

Any news on this? This is the version Debian uses and that I'm using myself and it's probably not going to change substantially. It would be great if someone could get this into the Guix git repo if there are no objections.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v6] gnu: Add u-boot, device-tree-compiler.
  2016-08-21  8:23                   ` Danny Milosavljevic
@ 2016-08-21  9:47                     ` David Craven
  2016-08-22 19:40                       ` Danny Milosavljevic
  0 siblings, 1 reply; 27+ messages in thread
From: David Craven @ 2016-08-21  9:47 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

Is this necessary?

+       #:make-flags '("HOSTCC=gcc")

this line also seems weird to me, why does the device-tree-compiler
respect HOME instead of PREFIX?

+     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref
%outputs "out"))) ; Note: or patch out PREFIX

I thought we were phasing #:select for licenses out?

+  #:use-module ((guix licenses) #:select (gpl2))

I think that we should add shortcuts for uboot loaders that would work
with our supported platforms in qemu. For arm-system-qemu that would
be the versatile-express board that works out of the box, I don't know
what the equivalent is for x86_64 and mips. (The rationale being that
the goal is to get guix system vm --system=armhf-linux working)

+;(define-public u-boot-a20-olinuxino-lime2
+;  (make-u-boot-package "A20-OLinuXino-Lime2"))
+
+;(define-public u-boot-efi-x86
+;  (make-u-boot-package "efi-x86"))

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v6] gnu: Add u-boot, device-tree-compiler.
  2016-08-21  9:47                     ` David Craven
@ 2016-08-22 19:40                       ` Danny Milosavljevic
  2016-08-22 21:18                         ` David Craven
  0 siblings, 1 reply; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-22 19:40 UTC (permalink / raw)
  To: David Craven; +Cc: guix-devel

On Sun, 21 Aug 2016 11:47:10 +0200
David Craven <david@craven.ch> wrote:

> Is this necessary?
> 
> +       #:make-flags '("HOSTCC=gcc")

Yes. When you remove it you get:

starting phase `configure'
configs/efi-x86_defconfig
  HOSTCC  scripts/basic/fixdep
/gnu/store/03zjklzb1jr6v9p4zpy5c0p9k6h1c54y-bash-4.3.42/bin/bash: cc: command not found
scripts/Makefile.host:94: recipe for target 'scripts/basic/fixdep' failed

That's because it needs to compile some native helpers even when (potentially) cross compiling. If there are better ways to find out what the appropriate compiler is, I'm all for it.

> this line also seems weird to me, why does the device-tree-compiler
> respect HOME instead of PREFIX?
> 
> +     `(#:make-flags `("CC=gcc" ,(string-append "HOME=" (assoc-ref
> %outputs "out"))) ; Note: or patch out PREFIX

I don't know. You have to ask them...

The culprit is:

Makefile:

PREFIX = $(HOME) <---- here
BINDIR = $(PREFIX)/bin
LIBDIR = $(PREFIX)/lib
INCLUDEDIR = $(PREFIX)/include

I know I could patch this out but I don't feel like having fragile patches (what if the context changes) or substitutions (what if it is changed to use some other way to cause PREFIX to be set to HOME) when I can just set HOME up and that's it.

> I thought we were phasing #:select for licenses out?
> 
> +  #:use-module ((guix licenses) #:select (gpl2))

Yes, indeed. When someone applies this patch please take this into account.

> I think that we should add shortcuts for uboot loaders that would work
> with our supported platforms in qemu. For arm-system-qemu that would
> be the versatile-express board that works out of the box,

Which u-boot defconfig should we use?

List of defconfigs with "vexpress" in the name:

vexpress_aemv8a_dram_defconfig
vexpress_aemv8a_juno_defconfig
vexpress_aemv8a_semi_defconfig
vexpress_ca15_tc2_defconfig
vexpress_ca5x2_defconfig
vexpress_ca9x4_defconfig

> I don't know
> what the equivalent is for x86_64 and mips. (The rationale being that
> the goal is to get guix system vm --system=armhf-linux working)

I don't know either...

For simple compilation tests (i.e. whether I broke the package specification) I use u-boot-efi-x86 on x86_64 without cross compiling.

Not sure what the status of qemu is in that regard. Can it do UEFI?

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v6] gnu: Add u-boot, device-tree-compiler.
  2016-08-22 19:40                       ` Danny Milosavljevic
@ 2016-08-22 21:18                         ` David Craven
  2016-08-23  1:03                           ` David Craven
  0 siblings, 1 reply; 27+ messages in thread
From: David Craven @ 2016-08-22 21:18 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

> Which u-boot defconfig should we use?
>
> List of defconfigs with "vexpress" in the name:
>
> vexpress_aemv8a_dram_defconfig
> vexpress_aemv8a_juno_defconfig
> vexpress_aemv8a_semi_defconfig
> vexpress_ca15_tc2_defconfig
> vexpress_ca5x2_defconfig
> vexpress_ca9x4_defconfig

Ups I just realized that there is no default machine for arm. But
I think that vexpress-a9 is often used as the default machine for
qemu. That would be vexpress_ca9x4_defconfig. It's also what
nixos uses. [0]

>> I don't know
>> what the equivalent is for x86_64 and mips. (The rationale being that
>> the goal is to get guix system vm --system=armhf-linux working)
>
> I don't know either...
>
> For simple compilation tests (i.e. whether I broke the package specification) I use u-boot-efi-x86 on x86_64 without cross compiling.

The default machine for qemu-system-mips is:
malta      MIPS Malta Core LV (default)

I don't know if uboot can boot this? Maybe someone interested
in guix system vm --system=mipsel-linux can comment?

> Not sure what the status of qemu is in that regard. Can it do UEFI?

With tianocore it can, but don't think I remember ever getting it to
work (on fedora a long time ago), so we can ignore my comment
in regard to x86_64/i686 architectures, since grub already works
well anyway.

[0] https://nixos.org/wiki/NixOS_on_ARM

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v6] gnu: Add u-boot, device-tree-compiler.
  2016-08-22 21:18                         ` David Craven
@ 2016-08-23  1:03                           ` David Craven
  2016-08-24  0:15                             ` Danny Milosavljevic
  0 siblings, 1 reply; 27+ messages in thread
From: David Craven @ 2016-08-23  1:03 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: guix-devel

> The default machine for qemu-system-mips is:
> malta      MIPS Malta Core LV (default)
>
> I don't know if uboot can boot this? Maybe someone interested
> in guix system vm --system=mipsel-linux can comment?

malta_defconfig should work according to [0]

[0] http://u-boot.denx.narkive.com/9y8MnoQp/using-u-boot-with-qemu-system-mips-qemu-2-1-2-caused-infinite-loop

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v6] gnu: Add u-boot, device-tree-compiler.
  2016-08-23  1:03                           ` David Craven
@ 2016-08-24  0:15                             ` Danny Milosavljevic
  0 siblings, 0 replies; 27+ messages in thread
From: Danny Milosavljevic @ 2016-08-24  0:15 UTC (permalink / raw)
  To: David Craven; +Cc: guix-devel

I see.

The additions would be then:

(define-public u-boot-vexpress_ca9x4
  (make-u-boot-package "vexpress_ca9x4"))

(define-public u-boot-malta
  (make-u-boot-package "malta"))

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GuixSD on ARM
  2016-08-15 20:14     ` Christopher Allan Webber
@ 2016-09-11 13:05       ` Andreas Enge
  0 siblings, 0 replies; 27+ messages in thread
From: Andreas Enge @ 2016-09-11 13:05 UTC (permalink / raw)
  To: Christopher Allan Webber; +Cc: guix-devel

On Mon, Aug 15, 2016 at 03:14:14PM -0500, Christopher Allan Webber wrote:
> Eric Bavier writes:
> > I've signed up for the Libre Tea and the desktop enclosure, so I'll be
> > playing with the GuixSD support in the coming days/weeks/months.  I'm
> > looking forward to working with other backers here.
> I've also signed up for a Libre Tea card.  I hope it works out, and also
> hope we can get Guix support in.  That would rock!

So did I, and it did work out!

Do you think it would make sense if the Guix project asked for a prototype?
I suppose this is what other distributions have done that are confirmed
to run on the card? Once Danny's work has advanced and GuixSD works on
some other ARM board, it would be a good moment to ask.

Andreas

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2016-09-11 13:05 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-12 11:19 GuixSD on ARM Daniel Pimentel
2016-07-13  6:55 ` Ricardo Wurmus
2016-07-13  9:11   ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Danny Milosavljevic
2016-07-13 22:22     ` Danny Milosavljevic
2016-07-14  7:12       ` Efraim Flashner
2016-07-19 19:50         ` Danny Milosavljevic
2016-07-19 20:07       ` [PATCH] Add gnu/packages/u-boot.scm with all the boards that u-boot supports right now Danny Milosavljevic
2016-07-21 12:37         ` Ludovic Courtès
2016-07-21 17:56           ` Danny Milosavljevic
2016-07-22 13:15             ` Ludovic Courtès
2016-07-23 14:11         ` Andreas Enge
2016-08-01 19:13         ` [PATCH v2] gnu: Add u-boot, device-tree-compiler Danny Milosavljevic
2016-08-01 19:18           ` [PATCH v3] " Danny Milosavljevic
2016-08-01 19:58             ` [PATCH v4] " Danny Milosavljevic
2016-08-01 20:05               ` [PATCH v5] " Danny Milosavljevic
2016-08-02  7:11                 ` [PATCH v6] " Danny Milosavljevic
2016-08-21  8:23                   ` Danny Milosavljevic
2016-08-21  9:47                     ` David Craven
2016-08-22 19:40                       ` Danny Milosavljevic
2016-08-22 21:18                         ` David Craven
2016-08-23  1:03                           ` David Craven
2016-08-24  0:15                             ` Danny Milosavljevic
2016-07-14 16:20     ` ARM: Installation and Booting; was: Re: GuixSD on ARM; Andreas Enge
2016-07-13 12:57   ` GuixSD on ARM Ludovic Courtès
2016-07-19  1:47   ` Eric Bavier
2016-08-15 20:14     ` Christopher Allan Webber
2016-09-11 13:05       ` Andreas Enge

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).