Since last year, we have been working on supporting the SoCs from Allwinner, a chinese SoC vendor, in the mainline kernel. These SoCs are cheap, wide-spread, backed by a strong community and, until last year, only supported by an out-of-tree kernel.
Through this talk, we would like to share the status of this effort: where we were a year ago, what solutions were in place, where we are currently, and what to expect from the future. We will also focus on the community around these SoCs, the work that is done there, etc.
This talk will be useful to developers working on ARM hardware interested in platform code and anyone interested by cool and cheap hardware to hack on.
Maxime Ripard, Free Electrons
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Kernel Recipes 2014 - Supporting a new ARM platform: the Allwinner example
1. Embedded Linux Conference 2014
Supporting a new ARM platform: the
Allwinner example
Maxime Ripard
Free Electrons
maxime@free-electrons.com
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 1/36
2. Maxime Ripard
I Embedded Linux engineer and trainer at Free Electrons
I Embedded Linux development: kernel and driver
development, system integration, boot time and power
consumption optimization, consulting, etc.
I Embedded Linux training, Linux driver development training
and Android system development training, with materials
freely available under a Creative Commons license.
I http://free-electrons.com
I Contributions
I Kernel support for the sunXi SoCs from Allwinner
I Contributor to few open-source projects, Buildroot, an
open-source, simple and fast embedded Linux build system,
Barebox, a modern bootloader.
I Living in Toulouse, south west of France
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 2/36
3. Introduction
Introduction
Maxime Ripard
Free Electrons
c Copyright 2004-2014, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
Embedded Linux
Developers
Free Electrons
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 3/36
4. Allwinner
I Chinese fabless SoC vendor
I Founded in 2007, in Zhuhai
I Always did ARM SoC, starting with ARM9 CPUs
I Mostly doing multimedia SoCs
I 550 employees
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 4/36
5. Tablet Market Share in 2013
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 5/36
6. SoC Line-up
I F-Series
I ARM9-based SoCs
I Mostly were running a custom OS called MeliOS, except for
the late SoCs in that family
I A10 / A10s / A12 / A13 (sun4i/sun5i), A20 (sun7i)
I Cortex-A8 based for the sun4i/sun5i
I Dual Cortex-A7 for the A20
I A31 / A31s (sun6i)
I Quad Cortex-A7
I The GPU is Imagination's PowerVR
I Brand new design, a lot of IPs changed
I A23/A33 (sun8iw3/sun8iw5)
I Dual/Quad Cortex-A7
I An hybrid between the A20 and the A31
I A80 (sun9i)
I big.LITTLE with 4 Cortex A15 and 4 Cortex A7
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 6/36
7. Development / Hacker-friendly boards
I Olimex Olinuxino
I Open Source Hardware
I Access to most of the SoC pins through 0.1" headers
I Very supportive towards the community
I Cubieboards
I Tiny, and cheap
I A very strong community has been built around it
I A lot of other boards: pcDuino, Marsboard, Banana Pi, etc.
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 7/36
8. Boards
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 8/36
9. Where we were
Where we were
Maxime Ripard
Free Electrons
c Copyright 2004-2014, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
Embedded Linux
Developers
Free Electrons
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 9/36
10. Allwinner's Kernel
I Allwinner Kernel are mostly based on two kernels:
I Linux 3.0 for Cortex-A8 based SoCs
I Linux 3.3/3.4 for Cortex-A7 based SoCs
I Just like most vendor code, their focus is primarily on making
that particular kernel version working on one SoC
I There's one dierent kernel tree for each SoC, even if they are
really close
I Apart from that, given the version they're based on, they're in
pretty decent shape
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 10/36
11. Allwinner Kernel Issues
I However, it suers some major issues
I By today standards, the code is pretty outdated
I No Common Clock Framework
I No pinctrl / GPIOlib
I No dmaengine
I There's no consolidation at all between the SoCs code
I You're pretty much stuck with that kernel version
I ... And there's FEX
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 11/36
14. le
I Passed along the boot chain to the various components
(bootloaders, kernel)
I Used to get the hardware con
15. guration of the board they're
running on, in a generic way
I In the FEX script, you get
I Which device are enabled
I The memory timings
I The clocks frequency
I The pin muxing
I The regulators voltage
I Plus, various hardware and con
16. guration information sq
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 12/36
17. How it looks like
[twi1_para]
twi_used = 1
twi_scl = port:PH162defaultdefaultdefault
twi_sda = port:PH172defaultdefaultdefault
[mmc0_para]
sdc_used = 1
sdc_detmode = 2
sdc_buswidth = 4
sdc_clk = port:PF02212default
sdc_cmd = port:PF03212default
sdc_d0 = port:PF01212default
sdc_d1 = port:PF00212default
sdc_d2 = port:PF05212default
sdc_d3 = port:PF04212default
sdc_det = port:PA08612default
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 13/36
18. How it is used
I It is then compiled by fexc to a binary
19. le
I Then, Linux will have hardcoded devices, and each matching
device will
I Be probed
I Lookup the FEX to get if it is allowed to probe
I Then retrieve whatever parameter it is interested in
I Even though it is a lot like the device tree, the logic is
completely backward
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 14/36
20. Pros / Cons
I Pros
I Most of the DT Pros
I Allows to have a completely generic kernel image
I Separates the hardware description from the code
I Allows a very short time-to-boot, even if you're not really a
kernel developer
I Cons
I Completely non-standard
I Only works for a single platform
I Not generic enough
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 15/36
21. FEX moment of glory
so.
coming back to what you said earlier: I'm formulating
what to say to allwinner [and need to pre-send something
by monday so that they can consider it before the
meeting]. so far, it consists of:
* device-tree is what the linux kernel community has
come up with, it is equivalent to FEX.
* the linux kernel community would like to apologise
for not consulting with you (allwinner) on the decision to
only accept device tree
(Luke Kenneth Casson Leighton, 6/7/2013)
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 16/36
22. FEX moment of glory
Thanks to their script.fex system when i said they
only need to develop one kernel and one u-boot i really
wasn't kidding around: they really have got to the point
which everyone else dreams of with device-tree
(Luke Kenneth Casson Leighton, 6/7/2013)
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 17/36
23. FEX moment of glory
I have a Cubieboard and I have a pca9532 on my
desk. Now I want to attach this pca9532 to the
Cubieboard so I wire them together on I2C. How is the
Allwinner kernel going to load the driver for the
pca9532? The mainline pca9532 driver does not
understand fex so it can't read the necessary initialization
data. (Jon Smirl, 6/6/2013)
You're immediately outside of the target market for
which allwinner designed and deployed script.fex.
(Luke Kenneth Casson Leighton, 6/6/2013)
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 18/36
24. Boot Process
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 19/36
25. Community
Community
Maxime Ripard
Free Electrons
c Copyright 2004-2014, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
Embedded Linux
Developers
Free Electrons
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 20/36
26. linux-sunxi
I A community started around rhombus-tech and their
EOMA-68 standard in 2010
I It forked o in 2011, and created http://linux-sunxi.org
I It's very active these days, with around 600 subscribers on the
ML, and around 150 persons on IRC (idlers included)
I Around 10 very active developers, working on dierent areas
of the SoC support: bootloader, kernel, VPU and GPU reverse
engineering, distribution support, etc.
I Libre Software Extremists
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 21/36
27. Achievements
I Documentation of the hardware
I Documentation of the BSP
I Implementation of needed tools
I Maintainance of linux and u-boot
I Bring up of Distributions
I Reverse engineering of the SoC (NAND, VPU, etc.)
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 22/36
28. linux-sunxi kernel
I Maintains a fork of Allwinner's kernel
I Does all the maintenance work
I Support most of the SoCs made by Allwinner in one single
kernel tree
I Factorizes and cleans up the code
I Fix bugs
I Based on a 3.4 (stable) kernel
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 23/36
29. Community Kernel: Pros and Cons
I Pros
I Maintain the code that Allwinner doesn't
I Allows to run your own Android/Fedora/Buildroot on your
cheap tablet
I Slightly better than the Allwinner code
I Works well for the hobbyist that just wants to play with his
new toy
I Cons
I Stuck in the past
I Doesn't think about the long-term view
I Only keeps hacking more without thinking about upstreaming
changes to lessen their burden
I Not much better than Allwinner code
I Support for new generation SoCs?
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 24/36
30. Mainlining
Mainlining
Maxime Ripard
Free Electrons
c Copyright 2004-2014, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
Embedded Linux
Developers
Free Electrons
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 25/36
31. How it started
I Started in late 2011
I First code merged in Linux 3.8, for the Allwinner A13
I Was not doing much at the time
I Was only able to boot to an initramfs
I Other SoCs and features quickly followed
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 26/36
32. Contributions
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 27/36
33. Challenges
I Rewrite most of the core drivers to use the new subsystems:
CCF, pinctrl, dmaengine
I Move away from FEX, to DT
I Clean up the code to make it
34. t for submission
I Get the code accepted
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 28/36
36. sh
I Couldn't boot a generic kernel on every board out there
anymore
I Worked on sunxi-babel
37. sh, a runtime FEX-to-DT translator
I Behaves like a regular u-boot kernel image, and embeds DTSI
and the DT-based kernel image
I At runtime, will lookup the data from the FEX
38. le, and
construct the DT from the skeletons it has, and pass it to the
DT kernel
I Enables to run a DT-based kernel on every cheap tablet out
there, without modifying the bootloader.
I Not very used, and support only a few devices
I Only to be seen as a legacy solution
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 29/36
40. sh
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 30/36
41. Current Status
I All the core stu works, only DMA is missing on the older
SoCs
I Most of the latest fancy stu: PSCI, Virtualization, etc.
I Network works
I Storage start to works too: SATA and MMC are merged,
MMC is pending
I Pretty much everything you need for a headless system works
nowadays.
I The only things missing are the user-friendly one: Display,
Audio, touchscreen, etc.
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 31/36
42. What's next
What's next
Maxime Ripard
Free Electrons
c Copyright 2004-2014, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
Embedded Linux
Developers
Free Electrons
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 32/36
43. Allwinner's usage of the code
I Latest kernel still based on Linux 3.4
I They are using some of our code though (clock, pinctrl)
I Are switching to standard APIs (dmaengine, ASoC)
I But are still using FEX
I Joined Linaro
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 33/36
44. TODO-List
I Pretty much all the hard work now
I NAND is working, but is going (slowly) through the
mainlining process
I Audio is working for some SoCs, and is in the cleanup phase
I Video is still an issue
I Work on newer SoCs (A33, A80, A83)
I Plenty of things to do, you're welcome to join!
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 34/36
45. Lessons Learned
I Take your time
I Know when to start from scratch and when to clean up
I You want documentation
I Have as much hardware as you can
I You don't want to be alone in there
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 35/36
46. Questions?
Maxime Ripard
maxime@free-electrons.com
Slides under CC-BY-SA 3.0
http://free-electrons.com/pub/conferences/2014/elc/ripard-mainlining-
of-out-of-tree-socs/
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com 36/36