Linux mainlining effort

The purpose of this page is to try and define sub-goals and milestones for mainlining effort, containing goals and sub-goals with milestones for adding Allwinner support in the upstream mainline Linux Kernel.

It is very important to note that this is intended as a rough set of minimal goals - it is not meant to collide with the huge effort of rewriting major drivers!

=Overview= The idea is to submit break the code needed to run the Linux kernel on Allwinner SoCs upstream to the official Linux kernel, also checkout Linux-tree-diff.

This can be achieved by following the concept outlined in the Your new ARM SoC Linux support check-list! published by Thomas Petazzoni from Free Electrons.

Where relevant, I have attempted to include who is currently working on an item, mostly separate from any particular mainlining goal.

=Status=

Merged into 3.8

 * Timer
 * UART
 * Device Tree
 * Interrupt controller

Related merges: ,

Added board support: Cubieboard, A13-OLinuXino

Merged into 3.9

 * PINCTRL driver
 * GPIO-lib based driver

Related merges:

Added Board Support: Hackberry

Merged into 3.10

 * LED support
 * Clock driver
 * Complete UART support

Related merges:, ,

Added Board Support: Mini X-Plus

Merged into 3.11

 * IRQ support for the PIO
 * I2C Driver
 * EMAC Driver
 * A10s support

Related merges:, , , , ,

Added board support: A10S-OLinuXino

Planned for 3.12

 * A31 support
 * Basic SoC + GPIO
 * Clock support


 * A20 support
 * Basic SoC support
 * GPIO Support
 * Clocks Support


 * A10s Clocks
 * Clock Source and Clock Event rework

Added board support: A31_EVB, A20-OLinuXino, Cubieboard2

Major drivers

 * DMAengine driver (WiP: Matt Porter (mdp))
 * DMAengine driver handles slave dma clients including SPI, EMAC, USB, I2S, HDMI audio, and NAND
 * Implementing slave SG transfers is the priority (for SPI to start), with cyclic transfers (for audio clients) following that


 * SPI driver (WiP: Matt Porter (mdp))
 * PIO mode only to start then DMA support via the dmaengine API


 * SDIO Driver (WiP: Maxime Ripard (mripard))

Minor drivers

 * Security ID driver (WiP: Oliver Schinagl (oliv3r))
 * Watchdog driver (WiP: Carlo Caione (n01))
 * RTC driver (WiP: Carlo Caione (n01))
 * PWM Driver (WiP: Oliver Schinagl (oliv3r))

Achievable

 * PMU driver
 * MMC driver
 * MMC appears to have its own DMA access to the memory, reported by wingrime


 * IIO LRADC driver
 * IR driver

DMA dependent drivers

 * NAND MTD driver
 * We can take as a good base the MTD Driver from Quiang Yu. Contact User:Rz2k about how well it works and mainlining.


 * Sound driver

Needing major rework
These drivers need major rework AND lack documentation other than existing source pile.


 * USB Driver
 * USB Gadget driver
 * These both drivers could probably go through staging. That would allow to reduce the time needed to have USB support in mainline
 * It seems to actually be a Mentor Graphics Inventra USB Controller (musb), that already support for it in mainline kernel, so it only needs a thin layer to adapt it to sunxi. Moreover, it's already supporting the PIO mode, so we could avoid relying on DMA to merge it. (Thanks to Arnd Bergmann for noticing)


 * Display driver (libv, techn also might be interested)

Unlikely
These are too far off the track third party drivers making it unlikely they will ever get accepted mainline.


 * Mali driver (will not happen unless libv gets a proper lima driver out)

Related but separate

 * Device-specific drivers

=References=

= See also = Linux-tree-diff - list of kernel files modified or added ('+' sign) for allwinner SOCs.

Mainline Kernel Howto

=External Links=
 * Your new ARM SoC Linux support check-list! by Thomas Petazzoni of Free Electrons
 * kernel.org - Official website for the Linux Kernel
 * http://github.com/torvalds/linux - Linus Torvalds' GitHub account with the upstream Linux kernel
 * Linux Kernel documentation index
 * Linux Kernel man pages
 * Kernel Newbies Site - Excellent source of information for people new to kernel
 * Linus' kernel tree for 2.6
 * Kernel bugzilla - Regressions for each of recent versions
 * Linux-libre project - Maintains and distributes fully free kernel
 * LinGrok, Linux kernel source code cross-reference
 * Free Electrons LXR (Linux Cross Reference)
 * linux-arm-kernel - Mailing list archive