+ All Categories
Home > Documents > Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does...

Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does...

Date post: 17-Oct-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
36
Embedded Linux Conference 2014 Supporting a new ARM platform: the Allwinner example Maxime Ripard Free Electrons [email protected] Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 1/36
Transcript
Page 1: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Embedded Linux Conference 2014

Supporting a new ARM platform: theAllwinner example

Maxime RipardFree [email protected]

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 1/36

Page 2: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Maxime Ripard

I Embedded Linux engineer and trainer at Free ElectronsI Embedded Linux development: kernel and driver

development, system integration, boot time and powerconsumption optimization, consulting, etc.

I Embedded Linux training, Linux driver development trainingand Android system development training, with materialsfreely available under a Creative Commons license.

I http://free-electrons.com

I ContributionsI Kernel support for the sunXi SoCs from AllwinnerI 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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 2/36

Page 3: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Introduction

IntroductionMaxime RipardFree Electrons

c© Copyright 2004-2014, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 3/36

Page 4: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 4/36

Page 5: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Tablet Market Share in 2013

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 5/36

Page 6: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

SoC Line-up

I F-SeriesI ARM9-based SoCsI 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/sun5iI Dual Cortex-A7 for the A20

I A31 / A31s (sun6i)I Quad Cortex-A7I The GPU is Imagination’s PowerVRI Brand new design, a lot of IPs changed

I A23/A33 (sun8iw3/sun8iw5)I Dual/Quad Cortex-A7I 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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 6/36

Page 7: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Development / Hacker-friendly boards

I Olimex OlinuxinoI Open Source HardwareI Access to most of the SoC pins through 0.1” headersI Very supportive towards the community

I CubieboardsI Tiny, and cheapI A very strong community has been built around it

I A lot of other boards: pcDuino, Marsboard, Banana Pi, etc.

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 7/36

Page 8: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Boards

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 8/36

Page 9: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Where we were

Where we wereMaxime RipardFree Electrons

c© Copyright 2004-2014, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 9/36

Page 10: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Allwinner’s Kernel

I Allwinner Kernel are mostly based on two kernels:I Linux 3.0 for Cortex-A8 based SoCsI Linux 3.3/3.4 for Cortex-A7 based SoCs

I Just like most vendor code, their focus is primarily on makingthat particular kernel version working on one SoC

I There’s one different kernel tree for each SoC, even if they arereally close

I Apart from that, given the version they’re based on, they’re inpretty decent shape

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 10/36

Page 11: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Allwinner Kernel Issues

I However, it suffers some major issuesI By today standards, the code is pretty outdated

I No Common Clock FrameworkI No pinctrl / GPIOlibI No dmaengine

I There’s no consolidation at all between the SoCs codeI You’re pretty much stuck with that kernel version

I ... And there’s FEX

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 11/36

Page 12: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

FEX

I It is a binary file, compiled from a human-readable text file

I Passed along the boot chain to the various components(bootloaders, kernel)

I Used to get the hardware configuration of the board they’rerunning on, in a generic way

I In the FEX script, you getI Which device are enabledI The memory timingsI The clocks frequencyI The pin muxingI The regulators voltageI Plus, various hardware and configuration information

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 12/36

Page 13: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

How it looks like

[twi1_para]

twi_used = 1

twi_scl = port:PH16<2><default><default><default>

twi_sda = port:PH17<2><default><default><default>

[mmc0_para]

sdc_used = 1

sdc_detmode = 2

sdc_buswidth = 4

sdc_clk = port:PF02<2><1><2><default>

sdc_cmd = port:PF03<2><1><2><default>

sdc_d0 = port:PF01<2><1><2><default>

sdc_d1 = port:PF00<2><1><2><default>

sdc_d2 = port:PF05<2><1><2><default>

sdc_d3 = port:PF04<2><1><2><default>

sdc_det = port:PA08<6><1><2><default>

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 13/36

Page 14: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

How it is used

I It is then compiled by fexc to a binary fileI Then, Linux will have hardcoded devices, and each matching

device willI Be probedI Lookup the FEX to get if it is allowed to probeI Then retrieve whatever parameter it is interested in

I Even though it is a lot like the device tree, the logic iscompletely backward

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 14/36

Page 15: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Pros / Cons

I ProsI Most of the DT ProsI Allows to have a completely generic kernel imageI Separates the hardware description from the codeI Allows a very short time-to-boot, even if you’re not really a

kernel developer

I ConsI Completely non-standardI Only works for a single platformI Not generic enough

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 15/36

Page 16: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

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 somethingby monday so that they can consider it before themeeting]. so far, it consists of:

* device-tree is what the linux kernel community hascome up with, it is equivalent to FEX.

* the linux kernel community would like to apologisefor not consulting with you (allwinner) on the decision toonly accept device tree

(Luke Kenneth Casson Leighton, 6/7/2013)

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 16/36

Page 17: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

FEX moment of glory

Thanks to their script.fex system when i said theyonly need to develop one kernel and one u-boot i reallywasn’t kidding around: they really have got to the pointwhich everyone else dreams of with device-tree

(Luke Kenneth Casson Leighton, 6/7/2013)

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 17/36

Page 18: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

FEX moment of glory

I have a Cubieboard and I have a pca9532 on mydesk. Now I want to attach this pca9532 to theCubieboard so I wire them together on I2C. How is theAllwinner kernel going to load the driver for thepca9532? The mainline pca9532 driver does notunderstand fex so it can’t read the necessary initializationdata. (Jon Smirl, 6/6/2013)

You’re immediately outside of the target market forwhich allwinner designed and deployed script.fex.

(Luke Kenneth Casson Leighton, 6/6/2013)

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 18/36

Page 19: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Boot Process

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 19/36

Page 20: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Community

CommunityMaxime RipardFree Electrons

c© Copyright 2004-2014, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 20/36

Page 21: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

linux-sunxi

I A community started around rhombus-tech and theirEOMA-68 standard in 2010

I It forked off in 2011, and created http://linux-sunxi.org

I It’s very active these days, with around 600 subscribers on theML, and around 150 persons on IRC (idlers included)

I Around 10 very active developers, working on different areasof the SoC support: bootloader, kernel, VPU and GPU reverseengineering, distribution support, etc.

I Libre Software Extremists

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 21/36

Page 22: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 22/36

Page 23: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

linux-sunxi kernel

I Maintains a fork of Allwinner’s kernelI Does all the maintenance work

I Support most of the SoCs made by Allwinner in one singlekernel tree

I Factorizes and cleans up the codeI Fix bugs

I Based on a 3.4 (stable) kernel

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 23/36

Page 24: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Community Kernel: Pros and Cons

I ProsI Maintain the code that Allwinner doesn’tI Allows to run your own Android/Fedora/Buildroot on your

cheap tabletI Slightly better than the Allwinner codeI Works well for the hobbyist that just wants to play with his

new toy

I ConsI Stuck in the pastI Doesn’t think about the long-term viewI Only keeps hacking more without thinking about upstreaming

changes to lessen their burdenI Not much better than Allwinner codeI Support for new “generation” SoCs?

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 24/36

Page 25: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Mainlining

MainliningMaxime RipardFree Electrons

c© Copyright 2004-2014, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 25/36

Page 26: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 26/36

Page 27: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Contributions

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 27/36

Page 28: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

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 fit for submission

I Get the code accepted

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 28/36

Page 29: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Babelfish

I Couldn’t boot a generic kernel on every board out thereanymore

I Worked on sunxi-babelfish, a runtime FEX-to-DT translator

I Behaves like a regular u-boot kernel image, and embeds DTSIand the DT-based kernel image

I At runtime, will lookup the data from the FEX file, andconstruct the DT from the skeletons it has, and pass it to theDT kernel

I Enables to run a DT-based kernel on every cheap tablet outthere, 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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 29/36

Page 30: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Babelfish

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 30/36

Page 31: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Current Status

I All the core stuff works, only DMA is missing on the olderSoCs

I Most of the latest fancy stuff: PSCI, Virtualization, etc.

I Network works

I Storage starts to work too: SATA and MMC are merged,MMC is pending

I Pretty much everything you need for a headless system worksnowadays.

I The only things missing are the user-friendly ones: Display,Audio, touchscreen, etc.

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 31/36

Page 32: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

What’s next

What’s nextMaxime RipardFree Electrons

c© Copyright 2004-2014, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 32/36

Page 33: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 33/36

Page 34: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

TODO-List

I Pretty much all the hard work now

I NAND is working, but is going (slowly) through themainlining 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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 34/36

Page 35: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

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, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 35/36

Page 36: Supporting a new ARM platfrom: the Allwinner example · pca9532? The mainline pca9532 driver does not understand fex so it can’t read the necessary initialization data. (Jon Smirl,

Questions?

Maxime Ripard

[email protected]

Slides under CC-BY-SA 3.0http://free-electrons.com/pub/conferences/2014/elc/ripard-mainlining-

of-out-of-tree-socs/

Free Electrons. Kernel, drivers, embedded Linux and Android - Development, consulting, training and support. http://free-electrons.com 36/36


Recommended