Linux mainlining effort
The purpose of this page is to try and define sub-goals and milestones for the 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 the code needed to run the Linux kernel on Allwinner SoCs upstream, ie. to the official Linux kernel.
This can be achieved by following the concept outlined in the Your new ARM SoC Linux support check-list! article published by Thomas Petazzoni from Free Electrons.[1][2]
Where relevant, I have attempted to include who is currently working on an item, mostly separate from any particular mainlining goal.
Status
The Mainline Kernel howto contains the currently used repositories for the mainlining process. The U-Boot repository and toolchain is described in the Mainline U-Boot howto.
The Mainline Kernel category gives an overview of currently supported devices.
Status Matrix
The goal of this matrix is to give an easy view of work on each SoC worked on by linux-sunxi.
SoC Name | AC97 | Audio Codec | Clocks | Crypto | CSI | Display (SimpleFB) | Display (DRM) | DMA | EMAC | HW Spinlocks | I2C | I2S | IR | Keypad | LRADC | MsgBox | NAND | Pinctrl | PWM | RSB | RTC | SATA | SD / MMC | SMP | SPI | Touch / Thermal / GPADC | USB | USB OTG | Watchdog |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A10 | NO | 4.4 | 3.10 | 4.3 | WIP | OK | ? | 4.3 | 3.11 | N/A | 3.11 | 4.8 | 3.17 | WIP | 4.0 | N/A | ? | 3.9 | 4.0 | N/A | 3.14 | 3.15 | 3.16 | N/A | 3.16 | 3.16 | 3.15 | 4.3 | 3.12 |
A10s | N/A | 4.4 | OK | ? | WIP | OK | ? | 4.3 | OK | N/A | OK | ? | 4.0 | N/A | OK | N/A | ? | 3.9 | OK | N/A | N/A | N/A | OK | N/A | OK | OK | OK | OK | OK |
A13 | N/A | 4.4 | OK | ? | WIP | OK | 4.7 | 4.3 | N/A | N/A | OK | N/A | 4.0 | N/A | OK | N/A | WIP | 3.9 | OK | N/A | N/A | N/A | OK | N/A | OK | OK | OK | OK | OK |
A20 | NO | 4.4 | 3.12 | 4.3 | WIP | OK | ? | 4.3 | 3.11 / 3.15 (GMAC) | N/A | 3.13 | 4.8 | 3.17 | WIP | 4.0 | N/A | ? | 3.12 | 4.0 | N/A | 3.14 | 3.15 | 3.16 | OK | 3.15 | 3.16 | 3.15 | 4.3 | 3.12 |
A31 | N/A | WIP | 3.12 | 4.3 | NO | OK | ? | 3.17 | 3.17 | N/A | 3.15 | ? | 4.0 | N/A | 4.0 | N/A | ? | 3.12 | NO | N/A | 3.18 | N/A | 3.16 | OK | 3.15 | WIP | 3.16 | 4.3 | 3.18 |
A23 | N/A | NO | 3.17 | ? | NO | OK | ? | 3.18 | N/A | N/A | 3.18 | ? | N/A | N/A | 4.0 | N/A | ? | 3.18 | 4.4 | 4.4 | 3.18 | N/A | 3.18 | OK | ? | WIP | 4.3 | 4.8 | 3.18 |
A33 | N/A | NO | 4.2 | 4.3 | NO | OK | WIP | 4.2 | N/A | N/A | 4.2 | ? | N/A | N/A | 4.2 | N/A | ? | 4.2 | 4.4 | 4.4 | 4.2 | N/A | 4.2 | OK | ? | WIP | 4.3 | 4.8 | 4.2 |
A80 | N/A | NO | 3.19 | WIP | NO | ? | NO | ? | WIP | NO | 3.19 | NO | 4.5 | N/A | ? | NO | NO | 3.19 | NO | 4.3 | WIP (AC100) | N/A | 4.0 | NO | ? | NO | 4.2 | NO | 3.19 |
H3 | N/A | NO | OK | WIP | WIP | ? | WIP | 4.2 | WIP | WIP | ? | NO | OK | N/A | ? | NO | WIP | OK | NO | ? | OK | N/A | OK | OK | ? | THS | 4.8 | NO | OK |
A64 | N/A | NO | WIP | WIP | WIP | ? | WIP | ? | WIP | WIP | WIP | NO | ? | N/A | ? | NO | WIP | 4.6 | NO | ? | OK | N/A | slow [1] | OK | WIP | THS | WIP | NO | ? |
Legend |
---|
In Linux mainline since version x |
Nobody works on it, but it should be compatible with already done drivers |
Somebody works on it and the result is mostly stable enough |
Somebody works on it |
No support, nobody works on it |
support impossible |
Status is unknown/to be completed |
Work In Progress
Core Stuff
- Modern Clock (clock-ng) support for sunxi (H3) (WiP: Maxime Ripard (mripard)) patch-v3
- Allwinner A64 support
- basic support (WiP: Andre Przywara) patch-v3
- Allwinner A80 support
- SMP support (WiP: Chen-Yu Tsai (wens)) patch-rfc
- Allwinner A83T support
- Suspend / Resume / CPUIdle (WiP: Antoine Tenart)
Major drivers
- A31 Audio Codec driver (WiP: Chen-Yu Tsai (wens))
- A31 PLL2 and module 1 clocks
- ASoC driver
- Display Engine driver
- sun8i (H3) (WiP: Jean-Francois Moine) patch-v4
- CSI (camera sensor interface) (WiP: Yassin Jaffer (ddc)) (WiP: Maxime Ripard (mripard))
- CSI clock driver (WiP: Yassin Jaffer (ddc)) patch-RFC
- A64/H3 Emac (WiP: LABBE Corentin patch-v1)
- Ac200 (At least EPHY) (WiP: LABBE Corentin)
- sun8i-ss/sun9i-ss/sun5i-ss (Security System/Crypto Engine)(WIP: LABBE Corentin more info at http://sunxi.montjoie.ovh/)
- A80 related (WiP: Chen-Yu Tsai (wens))
- AXP806 PMIC
- AC100 Codec mfd/rtc driver patch-v4
- GMAC
- External SDIO WiFi
Minor drivers
- A31 GPADC (WiP: Quentin Schulz) patch
- Enable and fix USB OTG port support on Orange Pi PC/One (wip: Ondřej Jirman) wip-patch
- SY8106A regulator support for Orange Pi PC (and DVFS) (wip: Ondřej Jirman - megi) [1] patch-v1
- Sunxi THS (H3) (Josef Gajdusek) patch-v2
- Keypad (WiP: Yassin Jaffer (ddc)) patch
- AXP152/AXP202/AXP209/AXP223
- hardware spinlock (H3/A83) (WIP: LABBE Corentin)
- Activate pwm on A83T (necessary for PHY)
Left to be done
Easy Tasks
Following drivers should be doable by someone with no or a small kernel development experience:
- One Wire / 1-Wire (dedicated HW only present on A31/A80)
- Smart Card Reader
- A23/A33 Thermal Sensor Controller
Medium Tasks
Following drivers require some good knowledge of the kernel internals.
- Audio Related drivers
- A23 Audio codec and AC97 audio interface support (A23 SDK contains drivers for both)
- A33/A64 Audio codec driver (A33 SDK contains driver)
- According to the register map and the A33 SDK driver, there seems to be a internal I2S bus between the codec and the processor
Difficult Tasks
These drivers require some good knowledge of the kernel internals, plus a good experience with such piece of hardware.
- Video Engine (See VE_Planning)
- Audio Engine (Only exists in A10)
- V4L driver for G2D/Mixer is based on samsung g2d and fimc driver. Only initial work started. [2]
Troublesome
- Memory Stick (missing hardware?)
- TV Decoder (Analog in, no existing driver, no datasheet)
- Transport Stream(DVB) in
- IRC user woprr has started to work on this
- PATA (old tech, while still interesting for Compact Flash, possibly removed from A20, though A20 memory map still mentions it)
- GPS backend IP (only present on A10, not much interesting, as all modern GPS receivers have MCU with UART output, no documentation)
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
Planned for 4.8
- H3
- USB multi-reset lines support
- AXP2xx driver:
- External drivebus support
- AXP223 USB power supply support
- AXP809 PMIC support
- BCM53125 support
- This switch is used in Lamobo / Banana Pi R1
Planned for 4.7
- H3
- USB support (multi-reset line support delayed til 4.8)
Added board support: Dserve DSRV9703C, Polaroid MID2809PXE4, colorfly e708 q1, Difrence DIT4350
Merged into 4.6
-
Note: For devices that use eMMC, old device trees may no longer work with this version (i.e. you have to rebuild your .dtb files). Expect eMMC I/O errors otherwise.
- Allwinner A83T support
- Initial bringup
- timer, watchdog and reboot
- H3
- R_PIO support
- A64
- pinctrl driver
- generic arm64 Allwinner platform (ARCH_SUNXI) support
- NAND
- ECC layout definition rework (partially) and randomizer support
- A10/A20 SPDIF driver
- AXP223 PMIC support
- eMMC HS-DDR support for all currently supported SoCs except A80
Added board support: Allwinner A83TDevBoard, Cubietech Cubietruck Plus
Merged into 4.5
- Allwinner A80 support
- IR receiver driver
- NMI controller
- PRCM driver
- R_PIO support
- RSB driver
- Allwinner H3 SoC support
- H3 USB PHY clocks
- A10/A20 Video Engine clocks
- MIC1 capture for sun4i codec
- Audio codec enabled on various boards
Added board support: Xunlong Orange Pi Plus
- Release tag v4.5 contains a change that broke stmmac networking on quite a few sunxi devices. The symptoms are
[ 13.196778] libphy: PHY stmmac-0:ffffffff not found [ 13.204800] eth0: Could not attach to PHY [ 13.204809] stmmac_open: Cannot attach to PHY (error: -19)
A quick fix is to revert commit 88f8b1b which introduced the regression. See http://lists.infradead.org/pipermail/linux-arm-kernel/2016-March/415939.html, https:[email protected]/msg104119.html, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=823493.
Version v4.5-rc7 is known to be still okay, v4.6-rc2 fixes stmmac again.
Merged into 4.4
- R8 SoC support
- A10 / A10s / A13 / A20
- Audio Codec driver
- Audio clocks (PLL2)
- Audio codec related DTS bits
- Enabled on Cubieboard, Cubieboard2, Cubietruck, C.H.I.P., Mele A1000
- A83T
- PIO driver
- AXP202/AXP209
- USB power supply driver
- Support for OTG vbus detection via AXP pmic
- DTS nodes for OTG vbus support
Added board support: Olimex A20 EVB (commit), Unified Q8 format tablet, Wits Pro A20 DKT (commit), Yones Toptech bs1078v2 (commit), Wobo i5 (commit), C.H.I.P (commit), Sinlinx SinA31s, MSI Primo81 (commit)
Merged into 4.3
- most of Allwinner SoC
- Support for Security System (commit)
- AXP152
- AXP152 mfd support
Added board support: Iteaduino Plus A10, Ippo-q8h-a33 v1.2
Merged into 4.2
- A80
- Architected timer support
- USB support
- AXP221 PMIC driver
Added board support: LinkSprite pcDuino3 Nano, Cubietech Cubieboard4, Gemei G9, Auxtek T004, Utoo P66, Wexler TAB 7200, MK808C, Jesurun Q5, Xunlong Orange Pi, Xunlong Orange Pi Mini, Sinlinx SinA33
Merged into 4.1
- A80
- USB PHY driver
Merged into 4.0
- A80
- MMC
- All SoCs
- LRADC Input driver
- CPUFreq
- PWM Driver
- AXP209 power button input driver
Added board support: CSQ CS908, LeMaker Banana Pro, Chuwi V7 CW0825, Rikomagic mk802, Rikomagic mk802ii, Rikomagic mk802_a10s, MarsBoard A10, Hyundai A7HD
Merged into 3.19
- A10 / A10s / A13 / A20 / A31 / A23
- Simple Framebuffer
- In order to use that, you'll need a recent mainline u-boot (2015.01+)
- USB phy driver support for usb0
- Simple Framebuffer
Related merges: sunxi-simplefb-for-3.19
Added board support: Mele M3, LeMaker Banana Pi, Merrii A80 Optimus Board, Olimex A20-OLinuXino-Lime2
Merged into 3.18
- A23
- MMC
- pinctrl
- DMA
- I2C
Added board support: Olimex A20-OLinuXino-Lime, Merrii Hummingbird A20, HSG H702
Merged into 3.17
- A10/A20
- IR driver
- A31
- PIO/R_PIO external interrupts
- DMAengine
- GMAC
- A23
- Timers, UARTs, initial bringup
- Basic clocks
- PIO/R_PIO drivers
Related merges: clk-for-linus-3.17, mfd-for-linus-3.17, pinctrl-v3.17-1, soc-for-3.17, dt-for-3.17, slave-dma for-linus, v4l_for_linus,
Added Board Support: Merrii Hummingbird A31, BA10, LinkSprite pcDuino V3, Ippo q8h
Merged into 3.16
- AXP20x regulator support
- All
- MMC support
- A31
- USB support
- PRCM
- SMBus Regmap
- Special Pins Muxer
- P2WI Controller
Related Merges: defconfig-for-3.16, drivers-for-3.16, dt-for-3.16, soc-for-3.16, usb-3.16-rc1, pinctrl-v3.16-1, clk-for-linus-3.16, clk-for-linus-3.16-part2, mmc-updates-for-3.16-rc1, mfd-for-linus-3.16, regulator-v3.16, input-for-linus
Added board support: Mele M9, R7
Merged into 3.15
- All SoCs
- SPI
- A10/A10s/A13/A20
- OHCI
- EHCI
- A10/A20
- AHCI
- A20/A31
- NMI controller
- A20
- GMAC
- A31
- I2C
Related merges: [13], [14], [15], [16], [17], [18], [19]
Added board support: LinkSprite_pcDuino, Inet 97f, A10-OLinuXino-LIME
Merged into 3.14
- A31
- Reset Controller Support
- SMP
- A20
- SMP (via PSCI)
- External clock outputs
- High Speed Timers
- RTC driver (A10/A20) (commit)
- RTP (DT only)
- GMAC support in stmmac driver
- AP6210 WiFi (BCM43362) support in brcmfmac driver
Related merges: [20], [21], [22], [23], [24]
Added board support: Olimex A13-OLinuXino-Micro (commit)
Merged into 3.13
- SID Driver
- I2C for A20
- sunxi_defconfig
- Bug fixes [25]
Added board support: Cubietruck
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
- Watchdog driver
Related merges: [26], [27], [28], [29], [30], [31]
Added board support: A31 EVB, A20-OLinuXino-Micro, Cubieboard2, Mele A1000
Merged into 3.11
- IRQ support for the PIO
- I2C Driver
- EMAC Driver
- A10s support
Related merges: [32], [33], [34], [35], [36], [37]
Added board support: Olimex A10s-OLinuXino-Micro
Merged into 3.10
- LED support
- Clock driver
- Complete UART support
Related merges: [38], [39], [40]
Added Board Support: Pineriver_H24
Merged into 3.9
- PINCTRL driver
- GPIO-lib based driver
Related merges: [41]
Added Board Support: Miniand_Hackberry
Merged into 3.8
- Initial support for Allwinner SoCs (commit)
- Timer (commit)
- UART
- Device Tree
- Interrupt controller (commit)
Added board support: Cubieboard, A13-OLinuXino
References
- ↑ http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf
- ↑ Your New ARM SoC Linux Support Check-List – ELCE 2012
See also
External Links
- 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