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.

=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 Bootlin.

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.

Core Stuff

 * R329 Clocks & Pinctrl / RTC / MMC - Icenowy Zheng Initial support for Allwinner R329


 * V831 / V833 Clocks & Pinctrl / RTC / MMC / Watchdog / SPI - Icenowy Zheng Support for Allwinner V831 SoC


 * AR100 firmware (WiP: Samuel Holland) ARISC firmware for sunxi SoCs


 * A13 PSCI Suspend / Resume / CPUIdle (WiP: Antoine Tenart) patch-v1

Major drivers

 * A100 DMA/PMU/Watchdog/USB2/USB OTG/MMC(eMMC, SD) Frank Lee Second step support for A100


 * V3s ISP (Image Signal Processor) Paul Kocialkowski initial-allwinner-v3-isp-support-in-mainline-linux


 * H6 Hypervisor for PCIe A try on utilizing H6 PCIe with "Virtualization"


 * A64 / H3 / H5 / H6 HDMI Audio - Clément Péron / Marcus Cooper / Jernej Škrabec Add Allwinner H3/H5/A64 HDMI audio


 * R40 MIPI-DSI WIP Jagan Teki drm/sun4i: Allwinner R40 MIPI-DSI support v3


 * AC100 Audio codec WiP Ondrej Jirman digital part analog part


 * V3s SRAM & Video Decoding Engine (Cedrus) WiP Martin Cerveny Enable video decoder (testing with attached LCD)
 * H6 VP9 decoder (Hantro G2) WiP jernej branch

Minor drivers

 * D1 / T113 Maksim Kiselev ASoC: sunxi: Add support for D1/T113s internal audio codec
 * H6 ethernet on opi3/opi1+ LABBE Corentin arm64: add ethernet to orange pi 3
 * D1 CAN Bus John Watts Add support for Allwinner D1 CAN controllers
 * D1 / R528 / T113s / R329 Maksim Kiselev Allwinner R329/D1/R528/T113s Dual/Quad SPI modes support
 * D1 / R329 Aleksandr Shubin Add support for Allwinner PWM on D1/T113s/R329 SoCs
 * D1 Maksim Kiselev Add D1/T113s thermal sensor controller support
 * D1 / R329 Maksim Kiselev Add support for Allwinner GPADC on D1/T113s/R329/T507 SoCs
 * D1 / R528 / T113s / R329 Maksim Kiselev Allwinner R329/D1/R528/T113s SPI support
 * D1 IOMMU Samuel Holland iommu/sun50i: Allwinner D1 support
 * D1 System LDOs Samuel Holland regulator: Add support for Allwinner D1 system LDOs
 * D1 Video Engine Samuel Holland Allwinner D1 video engine support
 * D1 / D1s / A100 / R329 LEDC Samuel Holland leds: Allwinner A100 LED controller support
 * R40/T3/A40i RTP/LRADC Evgeny Boger
 * R40/T3/A40i EMAC Evgeny Boger support for two Ethernet ports on Allwinner R40
 * R40/T3/A40i USB OTG qianfan Zhao ARM: sun8i-r40: Enable usb otg support
 * V3 I2S Tobias Schramm Add missing peripherals to Allwinner V3s/V3 device trees
 * H3 / H5 CVBS WIP Jernej Skrabec Add H3/H5 TVE support
 * A100 CPUFreq (DVFS) Shuosheng Huang cpufreq: sun50i: add a100 cpufreq support
 * A64 hwspinlock WIP Nikolay Borisov Add support for hwspinlock on A64 SoC
 * A83T / A64 / H3 hwspinlock WIP Corentin Labbe (montjoie) RFC,1/3RFC,2/3RFC,3/3
 * A10 / A20 / A31 HDMI Audio WIP Stefan Mavrodiev Add support for sun4i HDMI audio
 * A80 Thermal sensor WIP Philipp Rossak (embed-3d): https://github.com/embed-3d/linux/branches/all
 * R40 PWM (WIP Hao Zhang patch-v2)
 * A20 Keypad (WiP: Yassin Jaffer (ddc) patch)
 * sun8i-ce/sun8i-ss RSA/ECC WIP Corentin LABBE (no public patch yet)
 * EMCE WIP Corentin LABBE (no public patch yet) / Mripard https://git.kernel.org/pub/scm/linux/kernel/git/mripard/linux.git/log/?h=sunxi/h6-emmc-inline-encryption BUT proably not usable https://lore.kernel.org/linux-mmc/20210317171554.a4vgihqfjq2xa5cb@gilmour/

Drivers that can still be improved/added
Nobody works on these features. If you're interested, you can pick one of these add your name to them and move them to one of the sections above, to indicate you're working on the driver/feature.


 * A31/A31s PWM support (patch-v4 abandoned by Siarhei Volkau)
 * sunxi-musb driver lacks DMA support (with current driver, USB gadgets are limited to PIO, limiting speed to 10MiB/s and causing large CPU)
 * DE2 driver has buggy layer support, see
 * DE1/DE2/DE3 writeback support
 * A64 audiocodec driver components (sun8i-codec and sun50i-codec-analog) lack support for jack detection

Merged into 6.4

 * F1C100s
 * Enable LicheePi Nano USB support

New Devices supported
 * F1C100s
 * Popcorn Computer PopStick
 * Lctech Pi F1C200s


 * T113-s3
 * MangoPi MQ-R-T113

Merged into 6.3

 * D1
 * Base DT and Kconfig
 * Crypto
 * Power Domain


 * T113-s3
 * R528/T113 Clocks support


 * F1C100s
 * USB PHY support
 * USB MUSB support

Merged into 6.2

 * A100
 * MIPI-DSI
 * D1
 * MIPI-DSI

Merged into 6.1 (LTS)

 * A100
 * DMA
 * D1
 * SRAM
 * H6
 * DMIC
 * GPU Devfreq

Merged into 6.0

 * D1
 * RGB LCD
 * I2C
 * Pinctrl
 * RTC
 * H616 Orange Pi Zero 2
 * H616 X96 Mate
 * R40/T3/A40i
 * CPUFreq (DVFS)

Merged into 5.19

 * D1
 * DMA
 * LRADC
 * F1C100s
 * SD/MMC
 * SPI
 * Watchdog
 * V3s
 * MIPI-CSI2

Merged into 5.18

 * D1
 * I2S
 * MMC
 * SID
 * USB

Merged into 5.17

 * A64/H5
 * DRAM frequency scaling (DEVFREQ)
 * D1
 * Clocks
 * PLIC
 * R40/T3/A40i
 * CAN (series)

Merged into 5.16

 * R329/D1
 * Watchdog

Merged into 5.14

 * H616
 * PMIC - AXP305

New Devices Supported
 * H616
 * Tanix TX6s
 * X96 Mate
 * Xunlong Orange Pi Zero2

Merged into 5.13
New Devices Supported
 * A10
 * Topwise A721 Tablet

Merged into 5.12

 * H616
 * Clocks
 * Pinctrl
 * MMC
 * H6
 * RSB
 * A100
 * MMC

Merged into 5.11

 * H6
 * I2S
 * multiple SoCs
 * Cedrus VP8 decoding

New Devices Supported
 * H3
 * FriendlyArm NanoPi R1
 * FriendlyArm ZeroPi
 * S3
 * Elimo Impetus
 * Elimo Initium

Merged into 5.10 (LTS)

 * A100
 * Clocks
 * Pinctrl
 * I2C
 * Thermal (THS)


 * R40
 * DMA
 * GPU Mali
 * IR
 * SRAM
 * Video_Engine | Sunxi-Cedrus


 * V3s
 * Crypto
 * Ethernet
 * SimpleFB
 * SRAM


 * sun8i-ce/sun8i-ss
 * support for PRNG
 * support for hashs
 * support for TRNG (H6 only)

New Devices Supported
 * A100
 * Perf1 board
 * S3l
 * PineCube

Merged into 5.9

 * H5
 * DVFS

New Devices Supported
 * A64
 * PinePhone v1.2

Merged into 5.8

 * H6
 * DVFS
 * IOMMU


 * A64 / A83T / H3 / H5 / H6
 * Message Box

New Devices Supported
 * A20
 * OLinuXino Lime (A20) eMMC

Merged into 5.7

 * A20
 * LVDS


 * A83T and A64
 * Rotate driver


 * H6
 * SPI


 * R40
 * Thermal

New Devices Supported
 * A13
 * PocketBook Touch Lux 3
 * A64
 * PineTab
 * PinePhone v1.0 & v1.1
 * A20
 * Linutronix Testbox v2

Merged into 5.6

 * A10
 * CSI (BT656 and Parallel)


 * A64
 * MIPI DSI
 * DVFS


 * A64 / A83T / H3 / H5 / H6
 * Thermal


 * H6
 * PWM


 * H3 / H5 / H6 / R40
 * PMU


 * R40
 * CSI (BT656 and Parallel)
 * SPI

New Devices Supported
 * H5
 * ALL-H3-IT H5 board
 * ALL-H5-CC H5 board
 * H6
 * PineH64 Model B

Merged into 5.5

 * H3
 * Deinterlace driver


 * H6
 * Crypto
 * GPU(3D) Mali
 * USB3 PHY (for boards not needing vbus switching)


 * A64 / A80 / A83T / H3 / H5 / R40
 * Crypto


 * multiple SoCs
 * Cedrus HEVC/H.265


 * Broadcom-based (AMPAK modules) Bluetooth support on
 * Emlid Neutis

New Devices Supported
 * H3
 * FriendlyARM_NanoPi_Duo2

Merged into 5.4 (LTS)
New Devices Supported
 * A20
 * CSI (BT656 and Parallel)
 * A64
 * IR
 * H6
 * IR
 * RTC
 * SPDIF
 * A64
 * Olimex A64-OLinuXino eMMC
 * H6
 * Tanix TX6
 * S3
 * Lichee Zero Plus

Merged into 5.3

 * A64
 * LRADC
 * RGB LCD
 * A83T
 * CSI (BT656 and Parallel)
 * H6
 * DMA
 * Watchdog
 * multiple SoCs
 * Cedrus h264

Merged into 5.2

 * A83T
 * LRADC
 * USB OTG


 * H6
 * Cedrus


 * multiple SoCs
 * Lima
 * Panfrost


 * Broadcom-based (AMPAK modules) Bluetooth support on
 * Banana-Pi-M2-Zero

New Devices Supported
 * H6
 * Beelink GS1
 * Xunlong Orange Pi 3

Merged into 5.1

 * A10
 * Cedrus
 * PMU


 * A20
 * Audio Codec improvements


 * A23
 * Display pipeline
 * LCD enabled on Q8 A23 tablets


 * A64
 * ARM Architectural Timer errata workaround
 * PMU
 * CSI (BT656 and Parallel)


 * A80
 * GMAC support


 * CSI in general
 * RGR565 support
 * JPEG pass-through support


 * Broadcom-based (AMPAK modules) Bluetooth support on
 * Banana Pi M2+
 * Banana Pi M2 Ultra


 * LCD enabled on A13 Q8 tablets

Merged into 5.0

 * A64
 * Cedrus
 * DTS changes for audio codec


 * F1C100s
 * initial F1C100s support


 * H6
 * Ethernet
 * DE3/HDMI support
 * USB 2.0


 * H3 / H5
 * CSI (BT656 and Parallel) Support


 * H5
 * Cedrus


 * R40
 * RTC


 * T3
 * initial T3 support


 * V3s
 * CSI (BT656 and Parallel) Support


 * Broadcom-based (AMPAK modules) Bluetooth support on
 * Banana Pi M2 Magic
 * Banana Pi M3
 * Banana Pi M64
 * Cubietruck
 * Cubietruck Plus

New Devices Supported
 * Xunlong Orange Pi Lite 2
 * Mapleboard MP130
 * LicheePi Nano
 * Emlid Neutis N5

Merged into 4.20

 * A13 / A20 / A33 / H3
 * Cedrus driver


 * A83T
 * IR receiver


 * A64
 * Cleanup for device tree files
 * HDMI support
 * Audio codec support (DTS changes will be merged in 5.0)


 * H3 / H5
 * SID


 * R40
 * SATA

New Devices Supported
 * Pine64 LTS
 * Xunlong Orange Pi One Plus
 * Xunlong Orange Pi Zero Plus 2 (H3 variant)
 * Sinovoip Banana Pi M2+ (H5 variant)

Merged into 4.19 (LTS)

 * A10 / A13 / A20 / A23 / A33
 * SRAM controller / system control


 * A64
 * SRAM controller / system control
 * Display clocks and bus
 * RTC clock output
 * PWM
 * R_I2C


 * H3
 * SRAM controller / system control


 * H6
 * MMC
 * PMIC


 * R40
 * HDMI support

Board Changes
 * SPI flash node for Orange Pi PC 2 and Pine64 SoPINE
 * Use lid switch as wake-up source for A64 based laptops
 * LEDs added for PineH64

New Devices
 * Pine Pinebook
 * Amarula A64-Relic

Changes merged up to 4.18
Changes up to 4.18 can be found on Linux mainlining history page.

=References=

= See also =
 * Mainline Kernel Howto
 * Possible setups for hacking on mainline
 * Linux Kernel
 * Toolchain

=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
 * Bootlin 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 Bootlin
 * Linux Kernel Upstreaming How-To (CNXSoft - Embedded Software Development)
 * Matt Porter's YouTube video talk on “Upstreaming 101" (LCA14-111)
 * Matt Porter's presentation slides for “Upstreaming 101" (LCA14-111)
 * Matt Porter's YouTube video talk on “Upstreaming 201" (LCA14-112)
 * Matt Porter's presentation slides for “Upstreaming 201" (LCA14-112)
 * How to Write and Submit a Linux Kernel Patch (CNXSoft - Embedded Software Development)
 * YouTube Video- Write and Submit your first Linux kernel Patch
 * Greg Kroah-­Hartman Kernel Tutorial Write and Submit your first Linux Kernel Patch
 * Linaro resources page from LCA (Linaro Connect Asia) 2014

=Notes=