Lot was written about why upstreaming matters. And why it should be done earlier than later too. And I found out that I have perfect example.
Few days ago Linus Walleij contacted me with a question:
Hi Marcin, do you still have the Nomadik NHK8815 board? I’m contemplating fixing it to work some time, but haven’t got hold of one. I think it only needs a device tree actually, so we could hack it up at some conference if you’re at the same some time.
And then I realized that indeed — I still have it somewhere in my basement gathering dust. We quickly agreed on shipping it so Linus will be able to finish work on adding support for already obsolete board in mainline kernel.
For me NHK-15 is a perfect example of device which was supported in wrong way. When I got it 5 years ago it was already several kernel releases behind with 188.8.131.52 kernel (no stable updates even). I managed to get Poky Linux running on it but told clearly that it will gather dust after finishing task because for me board with no upstream support is worthless.
So board spent few weeks on my desk and then went back to the box and on shelf in basement. Then became forgotten. For 5 years. Today I opened box, checked contents, added some filling so it is ready for courier. Then I will forget about it again.
UPDATE: My Sim.One board joined NHK-15 as it is hard to find working device with EP93xx processor in it.
All of that during last 8 years. Most of my ARM live so far was around ARM926 based devices (some of them still can not be listed here) and I do not want to go there again. Kirkwood core was fastest one with 1.2GHz clock and 512MB of RAM it was really fast machine. I only missed Serial ATA in my Sheevaplug (rev 1.0) but even with hard drive on USB it was nice improvement.
Then I played a bit with ARM11 processors. Ok, they were faster than most of ARM9 cpus but I already had experience with Sheevaplug. And after few months first Cortex-a8 board landed on my desk — I got Beagleboard B7 from Bug labs as test platform for their new device. This was improvement!
I still remember my reaction when connected it to normal LCD monitor and saw it used at 720p resolution (1680×1050 was a bit hard for omap3). Moved to Nokia N900 few months later and found that fast cpu means nothing when paired with slow storage and not enough memory for system.
So today I prefer to not look below Cortex-A9 (or comparable cores like ones from Qualcomm or Marvell). Hope to play one day with Cortex-A5 (which should replace ARM926 one day) just to see how low-end armv7a cpu behave.
During FOSDEM 2010 I had discussion with Ulf Samuelsson from Atmel and few other guys about developer boards. What is required on them and what should be avoided. Some time later I had a talk with one person about new OMAP3 based board and what I would like to see on it. So I decided to write something in public.
So far I used mostly ARM developer boards from ST Microelectronics/ST Ericsson, Atmel, Cirrus Logic, Intel, Simple machines, Bug Labs, Texas Instruments. Some were better then others etc. But what ideal developer board should have? Let me try to create a list:
2 serial ports (one can be null modem, second should have RTS/CTS/DTR lines)
working Ethernet not placed on USB bus (so it works when USB does not)
powered USB host port (more then one would be great)
USB device port
one power input — +5V or +12V — other should be forbidden as those ones can be taken from PC PSU which can power multiple devices at same time
SD/MMC slot — even if it is over slow SPI (like on Sim.One — 250KB/s max)
keypad with Up/Down/Left/Right + Enter at least
easily reachable reset button (pins to short are acceptable as micro switch can be put on them)
few LEDs controlled by system
all connectors put on one or two edges of board — top one + one of side ones are ok (Atmel at91sam9m10-ekes for example)
mounting holes (so board can be mounted on A5 sheet holder for presentation at stand)
backup battery for RTC
quite fresh kernel (not NHK-15 due to 2.6.20 kernel which is 3 years old now)
What to avoid:
female serial port connectors (Atmel NGW100) — most devs will find 3 null modem cables before straight one
flat cables which connect “debug boards” with main board (Openmoko phones, NHK-15 from ST Ericsson)
RJ45 connectors for serial console (Sim.One) — DB9 or properly done USB->RS232 adapter on-board are best
placing connectors on all edges (BeagleBoard — but it had to be cheap)
non standard bootloaders (U-Boot is what I prefer)
Ethernet on USB (Bug 2.0) — it is hard to use when you have problems with USB Host
jumpers (Atmel boards)
non standard connectors (Bug r1.2 and it’s Handylink crap — next versions use iPod connector which is easier to use)
I am trying to not cover should developer board contain display with touchscreen or not as it depends on type of board. But if screen is present then more then QVGA (320×240) would be nice (WVGA anyone?). Some kind of video out connector can also be used but would be nice to have one of VGA/DVI/HDMI so normal PC monitor can be used — Composite video and S-Video require searching for some kind of TV…
Which boards are my favorites? There are few:
FriendlyARM with WVGA screen — cheap product which gives access to everything needed to start with embedded Linux
Atmel AT91SAM9263-EK — my first own developer board
BeagleBoard Cx — has own problems but I like the power of it
Today I got nice package in post office — Simplemachines One developer board (Sim.One in short). It is based on Cirrus Logic EP9307 processor with Maverick Crunch floating point unit. I got board with #0006 serial number.
Board is much better then EDB9301 which I used so far for EP93xx toolchain tests. What is on board:
8MB NOR flash
MMC slot (connected over SPI so ~250KB/s max)
2 USB host ports
VGA out port — XGA 8bit or SVGA 8/16/24bit
serial port in RJ-45 instead of standard DB9 (but cable is in package)
audio in/out jacks
many connectors with different signals — will have to check schematics for that.
By default board boots into Debian ‘lenny’ system stored on 4GB SDHC card. But there are problems with it as this is MMC over SPI so speed is very limited (about 250KB/s only) and it time outs quite often so I plan to move to USB stick during next days.
Next step will be adding it into OpenEmbedded and running Ångström as base distribution.