Linux for Amlogic Meson
Welcome to the wiki for the growing Linux development community around Amlogic Meson SoCs.
This community is focused around getting Meson SoCs well-supported by mainline Linux and mainline Linux distributions.
Some work has been done to get Meson SoCs well-supported by mainline U-Boot as well, to provide Single-Board-Computers an U-Boot alternative to the heavily patched outdated version maintained by Amlogic.
In January 2018 BayLibre wrote a post that summarizes the work done so far to get Meson SoC support into mainline Linux:
How We Improved AmLogic Support in Mainline Linux
This wiki is not endorsed by or affiliated with Amlogic, Inc.
How to Contribute ?
Our
IRC channel is
#linux-amlogic on
Freenode
-
-
The Amlogic Upstream development looks for contributors, so don't hesitate to contact the other developers
if you wish to fix, develop, enhance or test a feature in Linux, U-boot or any other software (There is OpenBSD support https://www.openbsd.org/arm64.html).
Finally suitable for experimented end users - but beware of bugs !
As we have a lot of work to do before we reach our goals, this wiki is not really suitable for end users yet - you will need a basic knowledge of Linux cross-compiling for ARM and embedded systems setup to use the information in this wiki towards using the latest linux Mainline kernel for supported Amlogic SoCs.
Instead, we use this wiki as an information archive for those developers who are working collaboratively to bring Amlogic support to the existing Linux/open-source codebases and communities.
You can find mainline Linux for Amlogic SoCs in these (non-exclusive) distributions list :
-
-
Debian Testing (
https://wiki.debian.org/DebianTesting) Uses a fairly recent Linux release with most of the needed Linux config options to run on Amlogic SoCs, you will be able to use EFI boot or you will need to setup the boot yourself
openSUSE Tumbleweed (
https://en.opensuse.org/HCL:LibreTech-CC) Uses a fairly recent Linux release with most of the needed Linux config options to run on Amlogic SoCs, you will be able to use EFI boot or you will need to setup the boot yourself as described in the Wiki
-
-
Buildroot (
http://buildroot.org) Can build a set of rootfs, kernel and bootloader using mainline projects, but you will need to setup the boot yourself
Some Board Vendors provide images with mainline linux :
Sadly HardKernel doesn't provide mainline based images themselves, but Armbian does.
Here is current status on Multimedia support :
GPU : Is supported on S905, S905X/W/L, S905D, S805X, S912, S905X2, S905D2, S905X3, S905D3, A311D and S922X with Lima and Panfrost
HDMI Output up to 4k is working on S905, S905X/W/L, S905D, S912, S805X, S905X2, S905Y2, S905D2, S922X, A311D, S905X3, S905D3, S905Y3
Video Decoding is being upstream, but still in Staging until the Statefull V4L2 M2M Interface is finalized, supports MPEG-2, H264 and VP9 decoding
All of this is being integrated in a specific LibreELEC branch at : https://github.com/LibreELEC/LibreELEC.tv/tree/amlogic and https://github.com/chewitt/LibreELEC.tv/tree/amlogic
And Android/AOSP ?
Yes, we (BayLibre) pushed an upstream based AOSP support for the G12A/SM1 based boards :
SEI510
SEI610
Khadas VIM3L
Khadas VIM3
Current status (Oct 2020):
Android 11 Bootflow using Mainline U-Boot
Mali GPU using binary blobs
Audio support (HDMI, analog, dmic)
Where ?
Target hardware
Current upstreaming efforts are focused around the S905/S905D/S905X/S805X/S905W/S912/A113D/S905X2/S905D2/S905X3/S905D3/A311D/S922X SoCs (GXBB/GXL/GXM from the Meson GX family, AGX Family and the new G12A, G12B & SM1 Families). Secondarily there are also some efforts around the S805 SoC (Meson8b), and the AML8726-MX (Meson6) since they are widespread in many consumer products.
Supported/WiP SoC Families
Meson6 : Dual 32bit Cortex-A9
Meson8 : Quad 32bit Cortex-A9
Meson8b : Similar as Meson8 but with Quad 32bit Cortex-A5
Meson8m2 : Similar to Meson8 (same 10/100/1000 MAC as Meson8b, H.265 UHD hardware decoder)
GXBB : Quad 64bit Cortex-A53
GXL : Quad 64bit Cortex-A53
S905D : Similar as S905, but with internal 10/100 Ethernet PHY (Gigabit Ethernet still requires an external PHY)
S905X : Identical to S905D but without Gigabit Ethernet
S905W : Mostly identical to S905X, 1.2GHz CPU frequency, video decoders and HDMI are limited to 4K30P, the DDR interface is limited to 16-bit
S805X : Mostly identical to S905X, 1.2GHz CPU frequency, video decoders and HDMI are limited to 1080p60, the DDR interface is limited to 16-bit
GXM : Identical to GXL but with Octo 64bit Cortex-A53
AXG : Audio/IOT dedicated SoC derived from GX family with enhanced audio and MIPI DSI display support and 2xPCIe 2.0 x1 lanes
G12A : Quad 64bit Cortex-A53, DSI Output
S905D2: enhanced audio (from AXG), 1x USB 3.0 or 1x PCIe 2.0, built-in 1G MAC and 100M PHY, two video decoders (4Kx2K@60fps + 1080P@60fps)
S905X2: similar to S905D2 but without DVB interface and DSI
S905Y2: similar to S905X2 but without built-in Ethernet
G12B : Identical to G12A but with Quad Cortex-A73 + dual Cortex-A53 cores, with CSI input and ISP
S922X: mostly pin compatible with S905X2
A311D: similar to S922X but with slightly higher frequencies, with a Neural Processor Unit
SM1 : Very close to G12A but with Quad Cortex-A55, a Neural Processor Unit and CSI input
S905D3: enhanced audio (from AXG), 1x USB 3.0 or 1x PCIe 2.0, built-in 1G MAC and 100M PHY, two video decoders (4Kx2K@60fps + 1080P@60fps), Neural Processor Unit, MIPI-DSI and CSI input
S905X3: similar to S905D3 but without the DSI output and CSI input
S905Y3: similar to S905X3 but without DVB interface and built-in Ethernet
For further indications : https://en.wikipedia.org/wiki/Amlogic#Comparison_table
Some development and final products are (partially) supported : Supported Hardware
| AML8726MX | S802
S812 | S805 | S905 | S905D | S905X
S905W
S805X | S912 | A113d | S905D2
S905X2
S905Y2
S922X
A311D | S905D3
S905X3
S905Y3 |
UART | Console Only | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Pinctrl/GPIO | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
GPIO Interrupt | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Clock Control | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
PWM | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Reset Control | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Infrared Decoder | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Ethernet | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Multi-core | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Fuse access | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
SPI (FC) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes |
SPI (CC) | N/A | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
I2C | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
USB | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
USB OTG | No | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes |
MHU/Mailbox | N/A | N/A | N/A | Yes | Yes | Yes | Yes | Yes | WiP | WiP |
DVFS | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
eMMC | No | Partial | Partial | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
SDCard | No | Yes | Yes | Yes | Yes | Yes | Yes | N/A | Yes | Yes |
SDIO | No | Partial | Partial | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
NAND | No | No | No | No | Partial | Partial | Partial | Partial | No | No |
ADC | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Audio Subsystem | No | WiP | WiP | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
CVBS Output | No | No | No | Yes | Yes | Yes | Yes | N/A | Yes | Yes |
HDMI Output | No | No | No | Yes | Yes | Yes | Yes | N/A | Yes | Yes |
HDMI Audio | No | No | No | Yes | Yes | Yes | Yes | N/A | Yes | Yes |
CEC | No | No | No | Yes | Yes | Yes | Yes | N/A | Yes | Yes |
Thermal Sensor | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Video Encoders | No | No | No | No | No | No | No | N/A | No | No |
Video Decoders | No | No | WiP | Partial | Partial | Partial | Partial | N/A | Partial | Partial |
DVB TS Input | No | No | No | No | No | No | No | N/A | No | No |
LCD/LVDS Output | N/A | No | No | No | No | No | No | N/A | No | No |
HDMI RX | N/A | N/A | N/A | No | No | No | No | No | No | No |
DVP MIPI Input | N/A | No | No | No | No | No | No | N/A | No | No |
3D Acceleration | No | Yes | Yes | Yes | Yes | Yes | Yes | N/A | Yes | Yes |
Real Time Clock (RTC) | Yes | Yes | Yes | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
SoC (version) information | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
HW crypto engine | No | No | No | No | Yes | Yes | Yes | WiP | WiP | WiP |
Clock measurer | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
PCIe | N/A | N/A | N/A | N/A | N/A | N/A | N/A | Yes | Yes | Yes |
DSI Output support | N/A | N/A | N/A | N/A | N/A | N/A | N/A | WiP | WiP | WiP |
CSI Camera support | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | No | No |
ISP support | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | No | No |
Kernel mainlining progress
v5.10 (Work in progress)
PCI: meson: Build as module by default
usb: dwc-meson-g12a: Add support for USB on AXG SoCs
dt-bindings: usb: amlogic,meson-g12a-usb-ctrl: add the Amlogic AXG Families USB Glue Bindings
usb: dwc3: meson: fix checkpatch errors and warnings
dt-bindings:iio:adc:amlogic,meson-saradc yaml conversion
drm/panfrost: add Amlogic GPU integration quirks
arm64: dts: meson: initial support for aml-s905x-cc v2
arm64: dts: meson: add support for the ODROID-N2+
arm64: dts: meson: convert ODROID-N2 to dtsi
soc: amlogic: meson-ee-pwrc: add support for the Meson AXG SoCs
dt-bindings: power: amlogic, meson-ee-pwrc: add Amlogic AXG power controller bindings
clk: meson: axg-audio: fix g12a tdmout sclk inverter
clk: meson: add sclk-ws driver
arm64: dts: meson: vim3: make sound card common to all variants
v5.9
i2c: meson: fixup rate calculation with filter delay
i2c: meson: fix clock setting overwrite
ASoC: meson: cards: deal dpcm flag change
arm64: dts: meson: odroid-n2: add jack audio output support
arm64: dts: amlogic: meson-gx: add the Mali-450 OPP table and use DVFS
arm64: dts: meson: add support for the WeTek Core 2
arm64: dts: meson: add audio playback to khadas-vim3l
arm64: dts: meson: add audio playback to odroid-c4
crypto: amlogic-gxl - permit async skcipher as fallback
ARM: dts: meson: add the SDHC MMC controller
arm64: dts: meson-gx: Switch to the meson-ee-pwrc bindings
ARM: dts: meson8b: add power domain controller
ARM: dts: meson8m2: add resets for the power domain controller
ARM: dts: meson8: add power domain controller
clk: meson: meson8b: add the vclk2_en gate clock
clk: meson: meson8b: add the vclk_en gate clock
pinctrl: meson: fix drive strength register and bit calculation
drm/meson: crtc: handle commit of Amlogic FBC frames
drm/meson: overlay: setup overlay for Amlogic FBC
net: stmmac: dwmac-meson8b: use clk_parent_data for clock registration
drm: meson: dw-hdmi: Use dw_hdmi context to replace hack
net: stmmac: dwmac-meson8b: add a compatible string for G12A SoCs
dt-bindings: net: dwmac-meson: Add a compatible string for G12A onwards
drm/meson: Set GEM CMA functions with DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE
v5.8
drm/meson: viu: fix setting the OSD burst length in VIU_OSD1_FIFO_CTRL_STAT
arm64: dts: meson-gxl-s805x: reduce initial Mali450 core frequency
mmc: meson-mx-sdhc: Fix building with CONFIG_MMC_MESON_MX_SDHC=m
mmc: host: meson-mx-sdhc: new driver for the Amlogic Meson SDHC host
mmc: meson-mx-sdio: trigger a soft reset after a timeout or CRC error
phy: amlogic: meson-gxl-usb3: remove code for non-existing PHY
arm64: dts: amlogic: use the new USB control driver for GXL and GXM
usb: dwc3: meson-g12a: add support for GXL and GXM SoCs
arm64: dts: meson-g12b-gtking-pro: add initial device-tree
arm64: dts: meson-g12b-gtking: add initial device-tree
arm64: dts: meson: convert ugoos-am6 to common w400 dtsi
arm64: dts: meson: add support for the Smartlabs SML-5442TW
arm64: dts: meson-sm1: add support for Hardkernel ODROID-C4
arm64: dts: meson: libretech-pc: add initial audio playback support
arm64: dts: meson: libretech-ac: add initial audio playback support
arm64: dts: meson: libretech-cc: add initial audio playback support
arm64: dts: meson: p230-q200: add initial audio playback support
soc: amlogic: meson-ee-pwrc: add support for the Meson GX SoCs
soc: amlogic: meson-ee-pwrc: add support for Meson8/Meson8b/Meson8m2
phy: amlogic: meson8b-usb2: Add a compatible string for Meson8m2
phy: amlogic: meson8b-usb2: Don't set REG_ADP_BC_ACA_ENABLE on Meson8
phy: amlogic: meson8b-usb2: Use a MMIO regmap
dt-bindings: phy: meson8b-usb2: Add compatible string for Meson8m2
dt-bindings: phy: meson8b-usb2: Convert to json-schema
net: stmmac: dwmac-meson8b: add support for the RX delay configuration
net: stmmac: dwmac-meson8b: Make the clock enabling code re-usable
drm/meson: add mode selection limits against specific SoC revisions
clk: meson: meson8b: Don't rely on u-boot to init all GP_PLL registers
arm64: dts: meson-gxbb-kii-pro: fix board compatible
arm64: dts: meson: fixup SCP sram nodes
clk: meson: meson8b: Fix the polarity of the RESET_N lines
clk: meson: meson8b: Fix the first parent of vid_pll_in_sel
dt-bindings: sram: Add Amlogic SCP SRAM compatibles
v5.7
Update audio clock gate hierarchy for meson8 and gxbb
Update g12a spicc clock sources
spicc: Add support for G12A
A1: Add secure power domain controller
Add VP9 HW decoder
DT updates:
fix gxm-khadas-vim2 wifi
odroid-c2: add rc-odroid ir keymap
p212: add bluetooth nodes
s95: fix bluetooth node
g12b: fix N2/VIM3 audio card model names
khadas-vim3: move model to g12b-khadas-vim3 dtsi
add thermal zones to meson gx devices
add pdm reset line
s400: fix sound card codec nodes
sei510: fix sound card codec node
a1: add secure power domain controller
add rc-videostrong-kii-pro keymap
g12-common: add parkmode_disable_ss_quirk on DWC3 controller
g12-common: add spicc controller nodes
g12: split emmc pins to select 4 or 8 bus width
g12: add the SPIFC nodes
khadas-vim3: add SPIFC controller node
g12b-odroid-n2: add SPIFC controller node
v5.6
irqchip/meson-gpio: Add support for meson a1 SoCs
add reset controller for Meson-A1 SoC
a1: add pinctrl controller support
add libretech-pc boards support
meson-gxbb: add support for Videostrong KII Pro
vdec: add sm1 platform
vdec: add g12a platform
add a driver for the Meson8/8b/8m2 DDR clock controller
v5.5
drm/meson: add support for suspend/resume
GXL/GXM: add a driver for the HW crypto IP block
G12A/G12B/SM1: Add thermal zone support
G12A/G12B/SM1: add PCIe support
DT updates:
A1: initial SoC support
G12A/G12B/GX/SM1: keep the wifi module enabled in suspend (so it can wake up the board)
G12A/G12B/SM1: enable thermal zone support
G12A/G12B/SM1: enable PCIe support
G12A/G12B: add simplefb support
GXBB: add more regulators for Odroid-C2
GXL/GXM: enable the HW crypto accelerator
SM1: add audio support
SM1: enable audio on SEI610
New board support
Amlogic AD401 (A1)
Ugoos AM6 (G12B, S922X)
v5.4
G12B: add the SoC ID for the A311D SoC
G12B: add support for the second CPU cluster in the meson-clk-measure driver
G12A/G12B: make the CPU clock trees mutable
DT updates:
G12A/G12B: use a common .dtsi for both SoCs
G12A/G12B: add the pwm_a pin (used for the CPU voltage regulator)
G12A/G12B: use the correct Ethernet FIFO sizes
G12A: add the CPU OPP table
G12B: add the CPU OPP table
G12A: enable CPU DVFS (dynamic voltage and frequency switching)
G12B: add the CPU OPP table
G12B: enable CPU DVFS (dynamic voltage and frequency switching)
GX: use the correct Ethernet FIFO sizes
GX: add the video decoder
Meson8b: use the correct Ethernet FIFO sizes
Meson8b: add the VDDEE (GPU and other parts of the SoC) regulator on all supported boards
Meson8b: use the Ethernet MAC address from the eFuse on Odroid-C1
New board support
Khadas VIM3 (G12B, S922X or A311D)
Khadas VIM3L (SM1, S905D3)
SEI Robotics SEI610 (SM1, S905X3)
v5.3
all SoCs: PWM driver improvements
AXG: move spread spectrum to MPLL2
G12A: add support for thetohdmitx audio controller
G12A: fix the name of the MPLL 50M clock ID
G12A: initialize MPLL registers correctly
G12A: add drive-strength-microamp support in the pinctrl driver
G12B: add support for the second CPU cluster clocks
G12A/G12B: add support for the thermal sensor clock
G12A/G12B: add GPIO IRQ support
G12A/G12B: use interrupt based OTG switching
GX: add support for the XBGR8888 and ABGR8888 color formats
GXBB: remove incorrect spread spectrum on MPLL0
Meson8/Meson8b/Meson8m2: add support for the audio clocks
Meson8/Meson8b/Meson8m2: add support to the canvas video lookup-table
DT updates:
G12A: add the PWM controllers
G12A: add the IR decoder
G12A: enable the IR decoder on the U200 and X96 Max boards
G12A: add the SD and eMMC controllers
G12A: enable SD card and eMMC on the U200 and SEI510 boards
G12A: add clocks to the AO UART controllers
G12A: add the I2C busses
G12A: enable the I2C bus with the RGB LED controller on SEI510
G12A: add the audio controllers
G12A: add the Ethernet controller and MDIO mux
G12A: enable the internal PHY on the U200 and SEI510 boards
G12A: add the SDIO controller
G12A: enable the SDIO WiFi module on the X96 Max and SEI510 boards
G12A: enable Bluetooth on the X96 Max and SEI510 boards
G12A: enable the SDIO MMC controller and enable wifi on supported boards
G12A: enable audio support on the X96 Max
G12A: enable audio support on the SEI510
G12B: add support for the S922X SoC
G12B: minimal support for the Odroid-N2
G12B: enable audio support on the Odroid-N2
G12A/G12B: add the Ethernet controller and enable it on all supported boards
G12A/G12B: add the GPIO interrupt-controller
G12A/G12B: switch to (GPIO) interrupt driven PHY status updates
G12A/G12B: enable the RNG
GX: fix eMMC pin bias and set max-frequency
GXBB: add more supported SD card modes on Odroid-C2 and NanoPi K2
GXBB: enable Bluetooth on the Wetek boards
GXBB: fix reading the chip temperature on some Wetek boards
GXBB: enable HDMI CEC on the Tronsmart Vega S95 boards
GXBB: fix reading the chip temperature on some Tronsmart Vega S95 boards
GXBB: add Bluetooth support on the Tronsmart Vega S95 boards
GXBB: use an interrupt instead of polling the Ethernet PHY status on the Tronsmart Vega S95 boards
GXL: correct eMMC module voltage and mark it as removable on Libretech CC
GXM: update eMMC settings for Khadas VIM2
GXM: enable Bluetooth on the Khadas VIM2
Meson8b: improve support for the Tronfy MXQ S805
Meson8/Meson8b/Meson8m2: add the canvas video lookup-table
Meson8m2: add the mali-supply on the MXIII-Plus board
New board support
v5.2
G12A: add CPU clocks (read-only for now)
G12A: add the PCIe PLL clocks
G12A: new USB2 PHY driver
G12A: new PCIe / USB3 combo PHY driver
G12A: add G12A SoC support in the SAR ADC driver
G12A: support for the internal PHY
G12A: new MDIO mux driver
G12A: support for G12A in the ASoC drivers for AXG
G12A: support for the audio clock controller
G12A: support for the USB control IP
G12A: support for the peripheral-only dwc2
G12A: support in the PWM controller driver
Meson GX/AXG MMC: clean-ups and clock phase tuning updates
Meson8/Meson8b/Meson8m2: support for the VDEC clocks
Meson8/Meson8b/Meson8m2: support for the VPU clocks
DT updates
G12A: add the secure monitor
G12A: add the eFuse
G12A: add the AO clock and reset controller
G12A: add the AO and EE pin controllers
G12A: add the reset controller
G12A: add HDMI and CVBS video outputs
G12A: add the HDMI CEC controllers
G12A: add the SAR ADC
G12A: add the Mali-G31 GPU
G12A: prepare USB support
G12A: add regulators for various boards
G12A: enable the Bluetooth module on X96 Max
GXM: add the Mali-T820 GPU
GXM: enable USB on the Nexbox A1
Meson8b: gpio-line-names for Odroid-C1
Meson8b: enable the RTC on EC-100
Meson8b: prepare support for the RTC on Odroid-C1
Meson8/Meson8b: enable the clock measurer
New board support
v5.1
clkmsr: add support for AXG and G12A in the “clock measurer” driver
clk: claim clock controller input clocks from DT
clk: rework dependencies and make the drivers more modular
NAND: controller driver for GXL/GXM/AXG
RTC: new driver for Meson6/Meson8/Meson8b/Meson8m2
GX: add support for the 32kHz clock sub-tree in the AO clock controller
G12A: add a driver for the peripheral clock controller
G12A: fix pin controller pull registers
Meson8b: add the RXD2 and RXD3 pins to the pin controller driver
Meson8/Meson8b/Meson8m2: add the GPU clock tree
Meson8b/Meson8m2: add support for the temperature sensor in the SAR ADC driver
DT Updates
AXG: add the SPDIF input
AXG: add the eFuse
AXG: enable SPDIF input on the S400 board
AXG: fix eMMC maximum frequency on the S400 board
AXG: enable SDR104 mode for the SDIO WiFi module
AXG: enable the clock measurer
GX: Add canvas provider node to the VPU
G12A: fix bus descriptions
G12A: enable the clock measurer
G12A: add the main clock controller
Meson8/Meson8m2: add the Mali-450 MP6 GPU
Meson8b: add the Mali-450 MP2 GPU
Meson8b: add missing RGMII Ethernet RXD pins
Meson8b: enable the temperature sensor on EC-100 and Odroid-C1
Meson8b: enable the PHY interrupt on EC-100
Meson8b: add the GPIO line names on EC-100
Meson8b: add more regulators for EC-100
Meson8m2: enable the temperature sensor on MXIII-Plus
Meson8/Meson8b/Meson8m2: add temperature sensor calibration data from eFuse
New board support
v5.0
Support for Canvas shared module from DRM
Support for DRM Video Overlay and Primary plane scaler
Support for HDMI 1.4 4K resolutions
Support for HDMI Alternative 29.97Hz/59.94Hz clocks
Meson8/Meson8b/Meson8m2/GXBB: fix USB hot-plugging
Meson8/Meson8b/Meson8m2: CPU clock driver fixes
Meson8/Meson8b/Meson8m2: make the CPU clock tree mutable
Meson8/Meson8b/Meson8m2: add the CPU post-divider clocks
GX: add video clocks in the Common Clock Framework driver (read-only)
Meson8/Meson8b/Meson8m2: add video clocks in the Common Clock Framework driver (read-only)
pinctrl: fix for setting the bias
Implemented a “clock measurer” driver which helps with clock driver development
Implement the ARM delay timer (32-bit SoCs only) in our timer driver
Add initial support for the temperature sensor on Meson8 in the SAR ADC driver
DT Updates
all: disable pinctrl bias
all: fix MMC card detection GPIO polarity
all: fix the Ethernet IRQ (fixes Ethernet performance)
AXG: add secure monitor and SCPI support (enables CPU frequency scaling)
AXG: add Bluetooth support on the S400 board
AXG: remove non-existent alternate XTAL
AXG: enable the watchdog
AXG: add the inputs for the clock controllers
AXG: enable the GPIO interrupt controller
AXG: enable the Ethernet PHY interrupt on the S400 board
AXG: fix the Ethernet IRQ (fixes Ethernet performance)
GX: add the pclk for the efuse
GX: add the HDMI 5V regulator on all boards
GX: enable the “clock measurer”
GXBB: fix GPIO line names on NanoPi K2
GXBB: fix GPIO line names on Odroid-C2
GXBB: add the inputs for the clock controllers
GXL: enable Bluetooth on the Khadas VIM
GXL: add the inputs for the clock controllers
GXL: fix GPIO line names on Libretech CC
GXL: fix GPIO line names on Khadas VIM
GXL: disable EEE (Energy Efficient Ethernet) on P230
Meson6/Meson8/Meson8b/Meson8m2: add all timer interrupts
Meson6/Meson8/Meson8b/Meson8m2: add the timer's clock inputs
Meson8/Meson8b/Meson8m2: add the ARM TWD timer
Meson8/Meson8b/Meson8m2: prepare support for the ARM Global Timer
Meson8/Meson8b/Meson8m2: enable CPU frequency scaling
New board support
v4.20
meson-sm: add serial number sysfs entry
canvas video lookup-table driver
clk-pll: add the enable bit
clk-pll: split the OD (post-divider) into separate clocks
clk-pll: remove hardcoded rate tables
pinctrl: fix pull (up / down) setting for the AO pins
minor code improvements in the SAR ADC driver
AXG: round audio system master clocks down
AXG: don't use mpll3 as PCIe clock parent
Fix for DRM crtc_vblank errors
DT updates
AXG: add the audio FIFOs
AXG: add the PDM audio controller
AXG: enable audio support on the S400 board
GX: increase shared CMA pool memory size for 4K video support
GX: add canvas node
GXL: update model name of the Libre Computer Board AML-S905X-CC board
Meson8/Meson8b: fix the clock controller register size
Meson8b: add Odroid-C1 voltage regulators
Meson8b: enable SAR ADC on Odroid-C1
Meson8b: add /chosen/stdout-path property for earlycon support on Odroid-C1
G12A: basic SoC support
New board support
v4.19
add support for the phase, triple phase and audio sclk divider clock types
remove audio divider clock type
remove support for obsolete register access in the AXG and GXBB clock controller drivers
add support for the gen_clk clock on AXG/GXL/GXM
AXG: new driver for the audio clock controller
AXG: new driver for the audio subsystem
AXG: add support for the PCIe and MIPI clocks
AXG: add support for the gen_clk_ee function of the pin controller
GXBB: add support for the gen_clk_out function of the pin controller
GXL: add support for the S805X and S905W SoCs
DT updates
AXG: add SPDIF output, PDM and SPDIF input pins
AXG: add SAR ADC support
AXG: add 12V supply on S400
AXG: add speaker amplifier and speaker LEDs on S400
AXG: enable ADC buttons on S400
AXG: add the audio clock controller
GXBB: enable HDMI, CEC and CVBS on NanoPi K2
GXL/GXM: enable SAR ADC on P231 and Q201
GXM: fix cooling cells on Khadas VIM2
New board support
Amlogic P241 (GXL, S805X)
Amlogic P281 (GXL, S905W)
Oranth Tanix TX3 Mini (GXL, S905W)
v4.18
AXG: MMC controller driver support
Meson8m2: add pinctrl support
AXG: add Meson AXG support to the dwmac-meson8b Ethernet driver
memory allocation fix for the pwm-meson driver (which can cause memory corruption)
Meson8/Meson8b/Meson8m2: add support for the NAND clocks
AXG: add support for the AO clock controller
the MPLL clock driver can now round to the closest rate (based on the requested rate)
Meson GX/AXG MMC: support for the reset line
DT updates
GX: add hiubus system controller
GX: add alternative ATF reserved memory region (fixes GXBB boards with newer ATF/Amlogic u-boot)
AXG: add hiubus system controller
AXG: SD/eMMC/SDIO support (sd_emmc_b and sd_emmc_c controllers)
AXG: S400: add eMMC storage
AXG: S400: add AP6255 SDIO wifi
AXG: S400: fix Ethernet stability
AXG: GPIO interrupt support
AXG: add the 32K alt aoclk
GX/AXG: add MMC resets
GX/AXG: fix MMC register ranges
GXL: disable SD UHS modes on LibreTech CC (“Le Potato”)
GXL: add PHY supply (USB VBUS) for P212 and Khadas VIM
GXL: fix Mali-450 GPU compatible string
Meson8: add Cortex-A9 PMU
Meson8b: add Cortex-A5 PMU
Meson8b: Odroid-C1: enable the IR receiver
Meson8m2: add support for this SoC (“S812”)
New board support
v4.17
GX VPU power domain driver: small bugfixes
reset driver: add support for level resets on Meson8b
cleanups for the dwmac-meson8b driver (used on Meson8b/GXBB/GXL/GXM)
clock and reset support for the USB2 PHY driver on GXL/GXM
Meson8b GPIO driver fixes which make the GPIOs from the CARD, BOOT and DIF banks usable again
usb: core: support for multiple PHYs per HCD (pre-condition for USB host on GXL/GXM)
dwc3 support for GXL/GXM/AXG (pre-condition for USB host on GXL/GXM)
fix ghost key presses in the IR remote driver
new USB3 PHY driver for GXL/GXM/AXG
PLL fixes for GXBB, GXL and AXG
use regmap in clock controller drivers
general clock updates for Meson8, GXBB, GXL and AXG
add more SoC IDs (including S905W) to the GX SoC information driver
SAR ADC support for the Meson AXG SoCs
Meson8m2 support for the dwmac-meson8b (Ethernet) driver
DT updates
GXL: add internal PHY interrupt
GX: fix UART register range
AXG: add i2c support
AXG: add pinctrl pins for RMII and UART
GX: add ethernet0 alias (to make Linux use the MAC address from u-boot)
Meson8b: update reset controller register range
Meson8: add reset controller and USB reset lines
Meson8b: Odroid-C1 Ethernet support
Meson8b: add the I2C clocks
GXBB: Odroid-C2: reduce eMMC maximum rate (fixes data corruption)
GXBB: add a wetek specific dtsi
GXBB/GXL: bump Mali-450 clock to 744MHz
GX: mark eFuse as read-only
GXL: USB host support
GXM: USB host support
GXL: enable USB host support on the following boards:
GXM: enable USB host support on the following boards:
Khadas VIM2
Amlogic Q200
Amlogic Q201
v4.16
v4.15
USB controller interrupt fix for Meson6/Meson8/Meson8b
SoC information driver for Meson6/Meson8/Meson8b/Meson8m2
SD/MMC/SDIO driver for Meson6/Meson8/Meson8b/Meson8m2
pinctrl: cleanups and minor fixes
GPIO IRQ support on Meson GX as well as Meson8/Meson8b/Meson8m2
eFuse driver for Meson6/Meson8/Meson8b/Meson8m2
SMP (multi-core) and CPU hotplug support on Meson8/Meson8b/Meson8m2
VPU power domain support on Meson GX
internal Ethernet PHY on GXL: auto-negotiation fix
UART SysRq
minor fixes for the SAR ADC on Meson8 and Meson8b
DT updates
Meson8b: add reserved-memory zones to fix system freezes
Meson8b: add USB support on Odroid-C1
Meson8b: enable GPIO IRQ support
Meson8/Meson8b: add the SDIO MMC controller
Meson8/Meson8b: add SMP and CPU hotplug support
Meson6/Meson8/Meson8b: add the eFuse
GX: enable the SAR ADC on Libre Tech CC
GX: enable the internal Ethernet PHY LEDs on Libre Tech CC
GX: enable the USB on Nexbox A95X (GXBB)
GX: pinctrl offset cleanup
GX: enable GPIO IRQ support
New board support
Khadas VIM2 (GXM)
Tronsmart Vega S96 (GXM)
v4.14
clock controller driver updates
DT updates
GX: GPIO line names for Khadas VIM and NanoPi K2
GX: CEC support (for all boards where HDMI is enabled)
GX: use the correct MMC clocks
GX: add MMC regulator settle times for NanoPi K2, Libre Tech CC, P200 and P201
GX: enable SD card UHS modes on NanoPi K2, Libre Tech CC, P200 and P201
GX: enable SD card SDR104 mode on NanoPi K2
GX: update to use stable UART bindings (fixes HCI UART where the bootloader doesn't enable the UART clocks)
Meson8/Meson8b: add the SRAM
Meson8: PWM support
Meson8b: cleanup duplicate code in watchdog node
GX: SoC information driver (SoC version, etc.)
AO CEC Driver
Watchdog support for Meson8m2
v4.13
DT cleanups
add HDMI and CVBS nodes for multiple GX boards
pinctrl updates:
GX: add SPI (SPICC) and HDMI CEC pins
Meson8: (AO) HDMI CEC, AO remote output, I2S, SPDIF and PWM pins
SCPI: fix thermal sensor reporting
Meson8 support for the SAR ADC driver
USB PHY driver for Meson GXL/GXM
SPICC (SPI Communication Controller) driver
Meson8 clock controller support
USB support for Meson8 and Meson8b
Hardware random number generator support for Meson6, Meson8 and Meson8b
reserved memory zones (to prevent random crashes) on Meson8
New board support
NanoPi K2 (GXBB)
R-Box Pro (GXM)
v4.12
DRM/KMS: added support for HDMI output
clocks: added clocks for audio, GFX (Mali)
pinctrl: added pins for audio, missing pins for GXL/GXM
phy: added GPIO resets for ethernet PHYs
Add clocks and DT node for Mali-450 support for GXBB/GXL (using off-tree driver)
usb: dwc2 support for Meson8
i2c: driver code improvements and code cleanup
Meson GX MMC
Enhanced board support
new boards
Khadas Vim (S905X)
HwaCom AmazeTV (S905X)
v4.11
v4.10
Meson GX MMC support, including SDIO WLAN
Meson GXBB USB (host) support
Meson GXL internal (100Mbit/s) PHY support
initial support for the GXL (S905D/S905X) and GXM (S912) SoCs
SCPI support for GXBB
CPU DVFS (using SCPI)
Meson GX DRM basics along with CVBS output
new board support
Amlogic P230 (S905D)
Amlogic P212 (S905X)
Nexbox A95 (S905)
Nexbox A1 (S912)
v4.9
Meson GX Secure Monitor
Enhanced Meson GXBB Ethernet support
Meson GX SPIFC support
Meson GX I2C support
Meson8b and GX PWM support
USB host support
clocks: added AO clocks and reset
MHU / mailbox support
v4.8
Meson GXBB Ethernet support
Meson GXBB Hardware Random Number Generator
Meson GXBB Watchdog driver
Meson 8b and GXBB support for the IR remote driver
v4.7
MesonGXBB pin control support
earlycon support in serial driver
Initial device trees for Amlogic reference boards P200 and P201 (S905)
Initial device tree for Hardkernel ODROID-C2 (S905)
v4.6
v4.5
v4.4
v4.2
v4.1
v4.0
v3.19
v3.18
Core Meson6 support added
Geniatech ATV1200 board support (AML8726-MX)
UART driver added
Watchdog driver added
Timer/clocksource driver added
Ethernet controller enabled with glue added to stmmac
driver
Kernel Development Stats
HowTo
32-bit SoCs (Meson8b / S805 or older)
Download recent cross-toolchain Linaro Latest arm-linux-gnueabihf binaries
To compile the 32-bit mainline kernel:
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x00208000 uImage dtbs
# mkimage -A arm -O linux -C none -T kernel -a 0x00208000 -e 0x00208000 -n linux-next -d arch/arm/boot/zImage ../uImage
To boot the 32-bit kernel using the shipped U-Boot:
# mmcinfo
# fatload mmc 0:1 0x21000000 uImage
# fatload mmc 0:1 0x22000000 rootfs.cpio.uboot
# fatload mmc 0:1 0x21800000 meson8b-mxq.dtb
# setenv bootargs "console=ttyAML0,115200"
# bootm 0x21000000 0x22000000 0x21800000
64-bit SoCs (GXBB / S905 or newer)
Download recent cross-toolchain Linaro Latest aarch64-linux-gnu binaries
To compile the 64-bit mainline kernel:
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image dtbs
# mkimage -A arm64 -O linux -T kernel -C none -a 0x1080000 -e 0x1080000 -n linux-next -d arch/arm64/boot/Image ../uImage
To boot the 64-bit kernel using the shipped U-Boot:
# fatload mmc 0:1 0x01080000 uImage
# fatload mmc 0:1 $dtb_mem_addr meson-gxbb-vega-s95-telos.dtb
# setenv bootargs "console=ttyAML0,115200"
# bootm 0x1080000 - $dtb_mem_addr
Upstreaming status
WiP
Stalled WiP
Meson GX System Suspend / Power Management (Neil Armstrong / narmstrong) (
last patches)
convert existing devices to use the PWM LED driver to allow dimming the LEDs (Martin Blumenstingl / xdarklight) (
last patches)
TODO
U-Boot Development Status
U-Boot mainlining progress
v2021.01 (WiP):
v2020.10:
v2020.07:
USB Gadget support for GXL/GXM boards
USB Host support for Odroid-C2
add support for Libre Computer AML-S905D-PC and AML-S912-PC
v2020.04
v2020.01:
Add support for HDMI/CVBS outpuut for G12A/G12B/SM1
Add support for Khadas VIM3 board
Add support for SEI Robotic SEI610 board
v2019.10:
add support for unique generated MAC adresses from SoC serial
adds support for the Odroid-N2 board
adds support for the SEI Robotic SEI510 board
v2019.07:
Add support for Amlogic p200 & p201 Reference Designs
Add Amlogic SoC information display
Add support for the Libretech-AC AML-S805X-AC board
Amlogic G12A SoC support and U200 reference board
USB2/USB3 + OTG Support for Amlogic G12A SoC
add support for getting pinmux status
Note: booting Libretech-AC AML-S805X-AC board with an USB device plugged in the first USB port (next to the IR received) will fail, thsi will be fixed in v2019.10
v2019.04:
v2019.01:
Add support for AXG SoC family
Add support for the S400 board
Add support for the SPIFC Controller
v2018.11
v2018.09
v2018.07
Support for GXBB, GXL & GXM SAR ADC
Device Tree synchronized with 4.16
Amlogic code cleanup
Add small Amlogic GX Clock driver
Enable of USB support for Libretech-CC Enabled for P212 and Khadas VIM, but Broken
Enable of ADC support for Libretech-CC
v2018.05
v2018.03
BROKEN Avoid this version, the MMC driver crashes on a division by zero, please stick to v2018.01, the bug has been fixed in v2018.05
v2018.01
Support for GXL Internal PHY
Support for I2C Controller
Support for GXL SoC
Add BLx memory hole handling as reserved memory for FDT and EFI
Support for new Boards :
Mainline U-Boot Support Matrix
| S905 | S905X | S912
S905D | A113X | S905X2
S905D2
S905Y2 | S922X
A311D | S905X3 |
Boards | Odroid-C2
Nanopi-K2
P200
P201 | P212
Khadas VIM
LibreTech-CC
LibreTech-AC | Khadas VIM2 | S400 | U200
SEI510 | Odroid-N2
Khadas VIM3 | SEI610
Khadas VIM3L
Odroid-C4 |
UART | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Pinctrl/GPIO | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Clock Control | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
PWM | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Reset Control | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Infrared Decoder | No | No | No | No | No | No | No |
Ethernet | Yes | Yes (with internal PHY) | Yes | Yes | Yes | Yes | Yes |
Multi-core | Yes (PSCI) | Yes (PSCI) | Yes (PSCI) | Yes (PSCI) | Yes (PSCI) | Yes (PSCI) | Yes (PSCI) |
Fuse access | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
SPI (FC) | Yes | Yes | Yes | Yes | Yes | Yes | No |
SPI (CC) | No | No | No | No | No | No | No |
I2C | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
USB | Yes | Yes | Yes | No | Yes | Yes | Yes |
USB OTG | No | Yes | Yes | No | Yes | Yes | Yes |
eMMC | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
SDCard | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
NAND | No | No | No | No | No | No | No |
ADC | Yes | Yes | Yes | No | No | No | No |
CVBS Output | Yes | Yes | Yes | N/A | Yes | Yes | Yes |
HDMI Output | Yes | Yes | Yes | N/A | Yes | Yes | Yes |
CEC | No | No | No | N/A | No | No | No |
Thermal Sensor | No | No | No | No | No | No | No |
LCD/LVDS Output | No | N/A | No | No | No | No | No |
SoC (version) information | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Work in Progress
TODO
Add support for changing rate of serial port (setbgr op)
Port Linux NAND driver to U-Boot
Add support for 32bit Meson 6/8/8b
Add support for PCIe for A113d/G12A/G12B/SM1
Add proper Ethernet glue to drop mach-meson code
Add proper MDIO mux driver to drop mach-meson code
Development resources