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

Merged into 3.12

 * A31 support
 * Basic SoC + GPIO
 * Clock support


 * A20 support
 * Basic SoC + GPIO
 * Clock support


 * A10s clocks
 * Clock Source and Clock Event rework
 * Mele A1000 device tree
 * Watchdog driver
 * Security ID driver

Related merges:, , , , ,

Added board support: A31_EVB, A20-OLinuXino, Cubieboard2, Mele A1000

Merged into 3.13

 * SID Driver
 * I2C for A20
 * sunxi_defconfig

Planned for 3.14

 * A31
 * Reset Controler Support


 * High Speed Timers

Core Stuff

 * A31 SMP support (WiP: Maxime Ripard (mripard))

Major drivers

 * DMAengine driver
 * 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: Maxime Ripard (mripard))
 * PIO mode only to start then DMA support via the dmaengine API


 * SDIO Driver (WiP: Maxime Ripard (mripard), Hans De Goede, David Lanzendörfer)
 * SATA Driver (WiP: Alexsey Shestacov (wingrime))
 * AXP209 driver (WiP: arokux)

Minor drivers

 * RTC driver (WiP: Carlo Caione (n01))
 * PWM Driver (WiP: Oliver Schinagl (oliv3r))
 * IR driver (WiP: Alexsey Shestacov (wingrime))
 * TP driver (WiP: Vinicius Freire (vinifr))
 * IIO LRADC driver (WiP: wigyori)
 * USB EHCI/OHCI Host Driver (WiP: arokux, see status.)
 * Ethernet - GMAC driver (WiP: torbenh3, wens) port of the sunxi gmac driver to mainline exists. Upstream driver for the gmac IP is stmmac.
 * Working sunxi extension for stmmac (wens): https://github.com/wens/linux/tree/wip/sunxi-next-dw-gmac
 * All existing A20 DTs have been updated to use GMAC
 * Gigabit speeds not tested
 * Pending reply from stmmac maintainer, patches will be cleaned up and sent to mailing list for review

Achievable

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

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 Gadget driver
 * 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)
 * irc user jukivili works on getting this driver to work with sunxi-3.4
 * Status 2013-10-02:
 * OTG requires more work. Mode detection is working, but have not yet figured out how to reset MUSB core and hardware from host-mode to periherial and other way around.
 * Mode detection/USB-PHY stuff probably needs to be moved to new USB-PHY driver as is done with other MUSB hardware drivers.


 * 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