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.
| AC97 | NO | N/A | N/A | NO | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | ? | NO | N/A | |
| Audio Codec | 4.4 | 4.4 | 4.4 | 4.4 | 4.10 | 4.10 | 4.11 | WIP | N/A | N/A | 4.9 | 4.10 | 4.12 | ? | NO | 4.13 | |
| ADC | GPADC | 3.16 | 3.14 | OK | 3.16 | N/A | WIP | N/A | N/A | NO | N/A | 4.9 | N/A | N/A | ? | NO | N/A |
| Thermal | 3.16 | 3.14 | OK | 3.16 | WIP | WIP | WIP | WIP | NO | NO | 4.9 | WIP | WIP | ? | NO | N/A | |
| Touch | 3.16 | 3.14 | OK | 3.16 | N/A | WIP | N/A | N/A | NO | N/A | 4.9 | N/A | N/A | ? | NO | N/A | |
| Clocks | 3.10 | 3.11 | OK | 3.12 | 3.17 | 3.12 | 4.2 | 4.10 | 3.19 | 4.13 | 4.9 | 4.8 | 4.12 | ? | 4.14 | 4.11 | |
| CPUFreq | 4.0 | 4.0 | 4.0 | 4.0 | NO | 4.2 | 4.11 | NO | NO | NO | NO | NO | NO | ? | WIP | NO | |
| Crypto | 4.3 | 4.13 | 4.13 | 4.3 | ? | 4.3 | 4.3 | WIP | WIP | WIP | 4.13 | WIP | WIP | ? | ? | ? | |
| CSI | WIP | WIP | WIP | WIP | NO | NO | NO | WIP | NO | WIP | WIP | WIP | WIP | ? | NO | WIP | |
| Display (SimpleFB) | 3.19 | 3.19 | OK | OK | OK | OK | OK | ? | ? | ? | OK | WIP | ? | ? | NO | WIP | |
| Display (DRM) | RGB | 4.15 | ? | 4.7 | 4.15 | ? | 4.10 | 4.9 | NO | NO | WIP | 4.9 | N/A | N/A | ? | NO | 4.13 |
| LVDS | WIP | N/A | N/A | WIP | WIP | WIP | WIP | NO | NO | WIP | N/A | N/A | N/A | ? | NO | N/A | |
| MIPI DSI | N/A | N/A | N/A | N/A | WIP | NO | WIP | NO | NO | NO | N/A | N/A | N/A | ? | NO | N/A | |
| CVBS | NO | 4.9 ? | 4.7 | NO | N/A | N/A | N/A | N/A | N/A | N/A | 4.9 | NO | NO | ? | NO | N/A | |
| VGA | NO | N/A | N/A | NO | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | ? | ? | N/A | |
| HDMI | 4.15 | 4.13 | N/A | 4.15 | N/A | 4.15 | N/A | WIP | NO | WIP | N/A | WIP | WIP | ? | NO | N/A | |
| CEC | 4.14 | 4.14 | N/A | 4.14 | N/A | 4.14 | N/A | WIP | NO | NO | N/A | WIP | WIP | ? | NO | N/A | |
| DMA | 4.3 | 4.3 | 4.3 | 4.3 | 3.18 | 3.17 | 4.2 | 4.15 | ? | 4.9 | 4.9 | 4.2 | 4.12 | ? | NO | 4.13 | |
| Ethernet | EMAC | 3.11 | 3.11 | N/A | 3.11 | N/A | N/A | N/A | 4.15 | WIP | 4.16 | N/A | 4.15 | 4.15 | ? | WIP | 4.13 |
| GMAC | N/A | N/A | 3.15 | 3.17 | |||||||||||||
| HW Spinlocks | N/A | N/A | N/A | N/A | N/A | N/A | N/A | WIP | NO | WIP | N/A | WIP | WIP | ? | N/A | N/A | |
| I2C | 3.11 | 3.12 | OK | 3.13 | 3.18 | 3.15 | 4.2 | 4.10 | 3.19 | WIP | 4.9 | 4.9 | 4.12 | ? | OK | 4.11 | |
| I2S | 4.8 | ? | N/A | 4.8 | ? | WIP | ? | WIP | NO | WIP | 4.9 | 4.14 | WIP | ? | NO | N/A | |
| IR | 3.17 | 4.0 | 4.0 | 3.17 | N/A | 4.0 | N/A | ? | 4.5 | WIP | 4.9 | 4.6 | 4.12 | ? | ? | N/A | |
| Keypad | WIP | N/A | N/A | WIP | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | ? | NO | N/A | |
| LRADC | 4.0 | 4.0 | OK | 4.0 | 4.0 | 4.0 | 4.2 | ? | ? | ? | 4.9 | ? | ? | ? | ? | 4.13 | |
| MsgBox | N/A | N/A | N/A | N/A | N/A | N/A | N/A | NO | NO | NO | N/A | NO | NO | ? | N/A | N/A | |
| NAND | ? | ? | WIP | ? | ? | ? | ? | WIP | NO | ? | WIP | WIP | WIP | ? | ? | N/A | |
| Pinctrl | 3.9 | 3.9 | 3.9 | 3.12 | 3.18 | 3.12 | 4.2 | 4.6 | 3.19 | 4.4 | 4.9 | 4.5 | 4.12 | ? | 4.14 | 4.11 | |
| PWM | 4.0 | 4.4 | OK | 4.0 | 4.4 | WIP | 4.4 | WIP | NO | NO | 4.9 | 4.9 | 4.12 | ? | NO | ? | |
| RSB | N/A | N/A | N/A | N/A | 4.4 | N/A | 4.4 | ? | 4.3 | 4.14 | N/A | ? | ? | ? | N/A | N/A | |
| RTC | 3.14 | N/A | N/A | 3.14 | 3.18 | 3.18 | 4.2 | OK | N/A | N/A | N/A | 4.5 | 4.12 | ? | ? | 4.11 | |
| SATA | 3.15 | N/A | N/A | 3.15 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | ? | WIP | N/A | |
| SD/ MMC | 3.16 | 3.16 | OK | 3.16 | 3.18 | 3.16 | 4.2 | 4.11 | 4.0 | 4.14 | 4.9 | 4.5 | 4.12 | ? | OK | 4.11 | |
| SMP | N/A | N/A | N/A | PSCI | PSCI | PSCI | PSCI | PSCI | WIP | WIP | N/A | PSCI | PSCI | ? | PSCI | N/A | |
| SPDIF | 4.7 | N/A | N/A | 4.7 | N/A | 4.9 | N/A | WIP | ? | 4.13 | 4.9 | 4.11 | 4.12 | ? | ? | N/A | |
| SPI | 3.16 | 3.15 | OK | 3.15 | ? | 3.15 | ? | WIP | ? | ? | 4.9 | 4.10 | 4.12 | ? | ? | 4.13 | |
| SRAM | 4.2 | 4.2 | 4.2 | 4.2 | 4.2 | 4.2 | 4.14 | ? | |||||||||
| USB | 3.15 | 3.15 | OK | 3.15 | 4.3 | 3.16 | 4.3 | 4.11 | 4.2 | 4.14 | 4.9 | 4.8 | 4.12 | ? | 4.15 | 4.11 | |
| USB OTG | 4.3 | 4.3 | OK | 4.3 | 4.8 | 4.3 | 4.8 | 4.11 | NO | 4.15 | 4.9 | 4.12 | 4.12 | ? | NO | 4.11 | |
| VE | NO | NO | WIP | WIP | NO | NO | WIP | NO | NO | NO | NO | WIP | WIP | ? | NO | NO | |
| Watchdog | 3.12 | 3.11 | OK | 3.12 | 3.18 | 3.18 | 4.2 | ? | 3.19 | 4.6 | 4.9 | 4.5 | 4.12 | ? | ? | 4.11 | |
| 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
Major drivers
- A13 Cedrus Video Decoder driver (WiP: Florent (kido) Revest) patch-v1 dedicated wiki page
- Audio codec support:
- A20 Audio Codec improvements (WiP: Danny Milosavljevic) patch-v9
- AC100 Audio codec support (WiP: Ondrej Jirma (megi)) WIP branch
- Display Engine driver
- CSI (camera sensor interface) (WiP: Yassin Jaffer (ddc)) (WiP: Maxime Ripard (mripard))
- V3s CSI driver (WiP: Yong Deng) patch-rfc
- A83T CSI driver (WiP: Ondrej Jirman) [1] (based on V3s driver and unified fwnode endpoint parser)
- Ethernet support
- A80 (WiP: Chen-Yu Tsai (wens))
- A83T (WiP: Chen-Yu Tsai (wens)) wip-branch (WiP: Corentin Labbe (montjoie)) patch-v2
- Security System/Crypto Engine
- sun8i-ss/sun9i-ss/sun5i-ss (WIP: LABBE Corentin more info at http://sunxi.montjoie.ovh/)
- ARM Mali400
- Lima DRM driver (WiP: Qiang Yu (yuq)), mesa-lima (open source) (WiP: Qiang Yu (yuq))
- Mali kernel driver (WiP: Maxime Ripard (mripard)), Mali userspace driver (closed source)
Minor drivers
- sun6i (A31/A31s) PWM support (WiP: Siarhei Volkau) patch-v1
- H3 and A64 SID controller (WiP: Icenowy Zheng) patch-v3
- H3/sun8i
- THS (WiP: Icenowy Zheng) patch-v4
- DVFS support (WiP: Ondřej Jirman - megi) patch-v1 - this is also available in these orange-pi-4.x branches
- Simplefb dtb entry (wip: Icenowy Zheng) sample-patch requires uboot-h3-hdmi
- Keypad (WiP: Yassin Jaffer (ddc)) patch
- hardware spinlock (H3/A83T) (WIP: LABBE Corentin)
- A83T IR driver (WIP: Philipp Rossak (embed-3d) patch-v3)
- A83T Thermal driver (WIP: Philipp Rossak (embed-3d))
- CPUfreq for H3,H5, A83T (WIP: Philipp Rossak (embed-3d))
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
Medium and Difficult Tasks
These drivers require some good knowledge of the kernel internals, plus a good experience with such piece of hardware.
- Audio Decoding 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)
- 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)
- Ac200: No datasheet, at least the ephy part seems to work in "generic PHY" mode
Planned for 4.16
Drivers:
- DE2 (multi-plane support, HW scaling)
New boards supported:
Planned for 4.15
Drivers:
- A10/A20/A31
- display
- HDMI controller
- sunxi-ng clocks
- audio PLL sigma-delta modulation support for accurate audio playback
- A33
- Audio codec fixes
- A64
- DMA controller
Device tree changes:
- SoC specific
- Board specific
- IR receiver for FriendlyARM NanoPi M1
- WiFi, BT and IR receiver for FriendlyARM Nanopi M1 Plus
- HDMI enabled on Merrii Hummingbird A31, Sinlinx SinA31s, MSI Primo81, Cubietech Cubieboard, Cubietech Cubieboard2, Cubietech Cubietruck, Banana Pi M1+, Olimex A10-OLinuXino-Lime, Olimex A20-OLinuXino-Lime, Olimex A20-OLinuXino-Lime2, Olimex A20-OLinuXino-Micro
- ACIN and Battery power supplies enabled on Lamobo R1 and A13 reference design tablets
- AXP803 PMIC regulators and WiFi enabled for Allwinner A83TDevBoard, Banana Pi M3, Cubietech Cubietruck Plus
- AXP803 PMIC regulators and USB OTG enabled for TBS A711
- EMAC re-enabled for various A64/H3/H5 boards
New boards supported:
- TBS A711
- FriendlyARM NanoPi NEO Plus2
- Olimex A20-OLinuXino-Micro eMMC variant
- Banana Pi M2 Ultra
- Banana Pi M2 Berry
Merged into 4.14
Drivers:
- A10s
- HDMI DDC I2C Adapter
- HDMI CEC support
- most of Allwinner SoC
- sun4i-ss SecuritySystem PRNG driver
- A10/A20
- CCU Clock-ng support
- A10/A20/A31/A33/H3
- A64
- SRAM controller driver
- A83T
- SD/MMC support
- AXP813 PMIC
- USB support
- H3
- I2S support
- R40
- CCU sunxi-ng style clock driver support
- pinctrl support
- AXP PMICs
- PEK time fix for AXP22x
Device tree changes:
- SoC specific
- Board specific
- AXP803 basic support and regulators for Pine64 and SoPine
- USB and WiFi enabled for Sinovoip Banana Pi M64
- Ethernet for Beelink X2
- USB OTG for Beelink X2
- SD/MMC for Cubietech Cubietruck Plus and Allwinner A83TDevBoard
- AXP813 PMIC for Cubietech Cubietruck Plus and Allwinner A83TDevBoard
- AC100 chip for Cubietech Cubietruck Plus and Allwinner A83TDevBoard
- USB hosts for Cubietech Cubietruck Plus and Allwinner A83TDevBoard
New boards supported:
Merged into 4.13
Drivers:
- A10s
- HDMI support
- V3s
- Clock driver for Display Engine 2.0
- DRM/KMS display driver support for Display Engine 2.0
- codec support
- A83T
- Clock driver
Device tree changes:
- SoC Specific
- LRADC, MMC1, SPI, Display Engine 2.0 for V3s
- Board Specific
- Enable AXP PMIC battery support on NextThingCo CHIP, Sinlinx SinA33
- Enable USB OTG on Banana Pi M2+, Orange Pi PC, Orange Pi PC Plus, Orange Pi Plus 2E
- Enable dedicated USB hosts for USB OTG on Pine64
- Enable dwmac-sun8i for Ethernet on various boards Removed due to unstable DT binding
Added board support: FriendlyARM NanoPi NEO2, Xunlong Orange Pi Prime, LicheePi Zero dock board
Merged into 4.12
- H3
- USB OTG support
- H5
- New SoC variant, similar to H3, but ARM64 with Cortex-A53 cores.
- pinctrl driver
- CCU (sunxi-ng) driver
- USB OTG support
- AXP PMICs
- AXP803 basic support
- ACIN Power Supply driver
- ADC IIO driver
- Battery Power Supply driver
Added board support: FriendlyARM NanoPi NEO Air, Xunlong Orange Pi PC 2
Merged into 4.11
- A23
- Audio codec device tree changes
- A31
- SPDIF output support
- A33
- cpufreq support
- Audio codec support
- A64
- MMC Support
- USB support
- A80
- sunxi-ng style clock support
- H3
- Audio codec device tree changes
- SPDIF output support
- V3s
- New SoC support
- USB PHY driver
- pinctrl driver
- CCU driver
Added board support: LicheePi One, Xunlong Orange Pi Zero, LicheePi Zero, Sinovoip Banana Pi M64
Merged into 4.10
- A23
- Audio Codec driver
- A64
- Clock driver
- A80
- External SDIO WiFi
- H3
- Audio Codec driver
- SPI
Added board support: NextThingCo CHIP Pro, Pine64, FriendlyARM NanoPi M1
Merged into 4.9
- GR8
- SoC Support
- AXP209
- GPIO support
- A31
- SPDIF support
- A33
- Display Driver
- A64
- USB PHY support
- H3
- PWM support
- I2C support
- AXP806 PMIC
- regulator support
- AC100 RTC / codec IC
- mfd driver
- RTC driver
Added board support: Orange Pi PC Plus, Olimex A33-OLinuXino, Xunlong Orange Pi Lite, Inet q972, Empire Electronix M712, Xunlong Orange Pi Plus 2, Xunlong Orange Pi Plus 2E, FriendlyARM NanoPi NEO,
Merged into 4.8
- H3
- Clocks (through sunxi-ng)
- 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
Merged into 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
- Sticky-note-pin.png 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
Exclamation.png Known problems:
- 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://www.mail-archive.com/[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.
Changes merged up to 4.4
Changes up to 4.4 can be found on Linux mainlining history page.
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
How to upstream
- Your new ARM SoC Linux support check-list! by Thomas Petazzoni of Free Electrons
- Linux Kernel Upstreaming How-To (CNXSoft - Embedded Software Development)
- How to Write and Submit a Linux Kernel Patch (CNXSoft - Embedded Software Development)
- Linaro resources page from LCA (Linaro Connect Asia) 2014