User Tools

Site Tools


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 aswell, 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.

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 :

Some Board Vendors provides some image with mainline linux :

What about multimedia support ?

Here is current status on Multimedia support :

All of this is being integrated in a specific LibreELEC branch at : and

Target hardware

Current upstreaming efforts are focused around the S905/S905D/S905X/S805X/S905W/S912 SoCs (GXBB/GXL/GXM from the Meson GX family). Secondarily there are also some efforts around the S805 SoC (Meson8b), and the AML8726-MX (Meson6) since they are widespread in many consumer products. Effort to support the new Amlogic AXG A113d and G12A S905X2 is currently ongoing.

Supported/WiP SoC Families

  • Meson6 : Dual 32bit Cortex-A9
    • AML8726MX
  • Meson8 : Quad 32bit Cortex-A9
    • S802
  • Meson8b : Similar as Meson8 but with Quad 32bit Cortex-A5
    • S805
  • Meson8m2 : Similar to Meson8 (same 10/100/1000 MAC as Meson8b, H.265 UHD hardware decoder)
    • S812
  • GXBB : Quad 64bit Cortex-A53
    • S905
  • 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
    • S912 : Pin compatible with S905D
  • AXG : Audio/IOT dedicated SoC derived from GX family with enhanced audio and MIPI DSI display support
    • A113D
  • G12A : Quad 64bit Cortex-A53
    • 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
    • S905Y2: similar to S905D2 but without built-in Ethenet

For further indications :

Some development and final products are (partially) supported : Supported Hardware

AML8726MX S802
S805 S905 S905D S905X
S912 A113d S905D2
UART Console Only Yes Yes Yes Yes Yes Yes Yes Yes
Pinctrl/GPIO No Yes Yes Yes Yes Yes Yes Yes Yes
GPIO Interrupt No Yes Yes Yes Yes Yes Yes Yes WiP
Clock Control No Yes Yes Yes Yes Yes Yes Yes WiP
PWM No Yes Yes Yes Yes Yes Yes Yes No
Reset Control No Yes Yes Yes Yes Yes Yes Yes No
Infrared Decoder Yes Yes Yes Yes Yes Yes Yes Yes No
Ethernet No Yes Yes Yes Yes Yes Yes Yes No
Multi-core No Yes Yes Yes Yes Yes Yes Yes Yes
Fuse access Yes Yes Yes Yes Yes Yes Yes No No
SPI (FC) Yes Yes Yes Yes Yes Yes Yes No No
SPI (CC) N/A No No Yes Yes Yes Yes Yes No
I2C Yes Yes Yes Yes Yes Yes Yes Yes WiP
USB No Yes Yes Yes Yes Yes Yes WiP No
USB OTG No No No No No No No No No
MHU/Mailbox N/A N/A N/A Yes Yes Yes Yes Yes No
DVFS No Yes Yes Yes Yes Yes Yes Yes No
eMMC No Partial Partial Yes Yes Yes Yes Yes No
SDCard No Yes Yes Yes Yes Yes Yes N/A No
SDIO No Partial Partial Yes Yes Yes Yes Yes No
ADC No Yes Yes Yes Yes Yes Yes Yes No
Audio Subsystem No No No WiP WiP WiP WiP Yes No
CVBS Output No No No Yes Yes Yes Yes N/A No
HDMI Output No No No Yes Yes Yes Yes N/A No
HDMI Audio No No No WiP WiP WiP WiP N/A No
CEC No No No Yes Yes Yes Yes N/A No
Thermal Sensor No WiP WiP Yes Yes Yes Yes Yes No
Video Encoders No No No No No No No N/A No
Video Decoders No No WiP WiP WiP WiP WiP N/A No
DVB TS Input No No No No No No No N/A No
LCD/LVDS Output N/A No No No No No No N/A No
HDMI RX N/A N/A N/A No No No No No No
DVP MIPI Input N/A No No No No No No N/A No
3D Acceleration No WiP WiP Yes Yes Yes No N/A No
Real Time Clock (RTC) WiP WiP WiP N/A N/A N/A N/A N/A N/A
SoC (version) information Yes Yes Yes Yes Yes Yes Yes Yes Yes
HW crypto engine No No No No No No No No No

Kernel mainlining progress

v4.21 (work in progress)

  • 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: 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
    • disable pinctrl bias
    • 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”
    • GX: fix the Ethernet IRQ (fixes Ethernet performance)
    • 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: support for the libretech aml-s805x-ac, aka 'La Frite'
    • 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
    • PHICOMM N1 (GXL, S905D)

v4.20 (work in progress)

  • 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
    • Endless Mini (EC-100) (Meson8b, S805)


  • 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)


  • 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
    • Tronsmart MXIII Plus (Meson8m2)


  • 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:
      • Khadas VIM
      • LibreTech CC (“Le Potato”)
      • Amlogic P212
      • Amlogic P230
      • Amlogic P231
      • Nexbox A95X
    • GXM: enable USB host support on the following boards:
      • Khadas VIM2
      • Amlogic Q200
      • Amlogic Q201


  • internal Ethernet PHY on GXL: code-improvements
  • Ethernet (RGMII TX) clock (dwmac-meson8b) fixes for Meson8b
  • DT updates
    • all SoCs: dropped SANA (“stream analyzer”) clock from SAR ADC
    • Meson8: updated L2 cache settings
    • Meson8b: updated L2 cache settings
    • Meson8/Meson8b: switch to the stable UART bindings
    • Meson8: enable GPIO IRQ support
    • GX: VPU power domain support
    • GX: add 5V HDMI regulator
    • GX: HDMI and CEC support on Odroid-C2
    • GX: use generic bus node names
    • GX: fixed Ethernet PHY GPIO interrupt line on GXM Q200
    • GX: add Ethernet PHY GPIO interrupt line on Khadas VIM2


  • 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)


  • clock controller driver updates
    • GX: add SD/eMMC clocks
    • GX: fix divider flags
    • GX: add the AO CEC clock
    • Meson8/Meson8b: register reset controller built into the clock-controller
  • 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


  • DT cleanups
    • GX: reorganize alphabetically to better avoid conflicts
    • Meson6/8/8b: use interrupt pre-processor macros instead of magic numbers
  • 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)


  • 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
    • performance improvements
    • eMMC calibration support
    • CMD23 support
    • misc. cleanup and refactoring
    • descriptor chaining (DMA) support
  • Enhanced board support
    • Amlogic P212 (S905X)
  • new boards
    • Khadas Vim (S905X)
    • HwaCom AmazeTV (S905X)


  • SAR ADC support
  • ADC laddered keys (P200 board)
  • New board support
    • Wetek Play (S905)
    • Wetek Hub (S905)


  • 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)


  • 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


  • Meson GXBB Ethernet support
  • Meson GXBB Hardware Random Number Generator
  • Meson GXBB Watchdog driver
  • Meson 8b and GXBB support for the IR remote driver


  • 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)


  • Initial GXBB family support (clocks, serial)
  • Initial device trees for Tronsmart Vega S95 (S905)


  • Meson8b watchdog support / Reboot
  • ODROID-C1 status LED support
  • Serial driver bugfixes


  • Initial Meson8b device trees for Hardkernel ODROID-C1 (S805) and Tronfy MXQ (S805)


  • Clock controller driver added


  • MINIX NEO X8 board support (M8-S802)
  • Meson8b GPIO & pin control driver added


  • Meson6/Meson8 GPIO & pin control driver added


  • Core Meson8 support added
  • I2C driver added
  • SPI flash driver added
  • IR remote control driver added
  • L2 cache enabled


  • 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


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


  • ASoC Audio for GXBB/GXL/GXM (Jerome Brunet / jbrunet)
  • NAND controller driver (Jianxin Pan / Liang Yang)
  • Video Encoder/​Decoder subsystem support as V4L2 driver (Maxime Jourdan / Elyotna)
  • Meson6/Meson8/Meson8b/Meson8m2 RTC (Ben Dooks / bjdooks, Martin Blumenstingl)

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)


  • Support more boards (Amlogic based retail products should have PCB holes to enable Serial console with a simple USB to Serial TTL adapter, i.e. Sparkfun USB to Serial TTL cable)
  • USB OTG for Meson8/Meson8b/GXBB (dwc2 does not get the OTG interrupts, instead Amlogic's kernel code polls some USB PHY registers to detect the mode. maybe this could be solved by implementing extcon support in the USB2 PHY and dwc2 (based on this RFC))
  • USB OTG for GXL/GXM (dwc3 is used for host-mode, dwc2 for device-mode and the second USB2 PHY switches the mode depending on what the USB3 PHY OTG detection logic tells it to) experimental code
  • Find a way to cap the SCPI cpufreq max frequency to re-enable DVFS on Odroid-C2
  • Meson DRM Features
    • Cursor Plane
    • More formats support for Primary Plane
    • ColorKey as DRM Attribute
    • CRTC Color correction attributes
    • CVBS Color optimizations as attributes
    • LVDS and LCD output support on supported boards
    • Add Display support for pre-GX SoCs
    • Add HDMI support for pre-GX SoCs, Unknown HDMI Controller IP

U-Boot Development Status

Amlogic SoCs support is done via full Driver Model support with default boot scheme including EFI boot support.

Mainline U-Boot is limited to be used with Linux 4.16+, where the Power Domain handling has been added.

U-Boot mainlining progress


  • Add preliminary support for VPU Power Domain
  • Support for Khadas VIM2


  • Support for FriendlyElec Nanopi-k2
  • Fix P212 Ethernet setup


  • 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


  • Support for GXL & GXM USB Phys and Host Controller
  • Support for GXBB, GXL & GXM Reset Controller


  • 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


  • 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 :
    • Support for P212
    • Support for Khadas VIM
    • Support for LibreTech-CC (Potato)

Mainline U-Boot Support Matrix

S905 S905X S912 S905D
Boards Odroid-C2, Nanopi-K2 P212, Khadas VIM, LibreTech-CC Khadas VIM2
UART Yes Yes Yes
Pinctrl/GPIO Yes Yes Yes
Clock Control Yes Yes Yes
PWM No No No
Reset Control Yes Yes Yes
Infrared Decoder No No No
Ethernet Yes Yes (with internal PHY) Yes
Multi-core Yes (PSCI) Yes (PSCI) Yes (PSCI)
Fuse access Yes Yes Yes
SPI (FC) No No WiP
SPI (CC) No No No
I2C Yes Yes Yes
USB No Yes Yes
eMMC Yes Yes Yes
SDCard Yes Yes Yes
ADC Yes Yes Yes
CVBS Output WiP WiP WiP
HDMI Output WiP WiP WiP
CEC No No No
Thermal Sensor No No No
LCD/LVDS Output No N/A No
SoC (version) information No No No

Work in Progress:

  • AXG Family support with S400 board support
  • SPIFC Controller support
  • AML-S805X-AC Board support
  • CVBS and HDMI Display support

Development resources

Our main source of information is the open source kernel code and Linux SDK published by Amlogic.

A partial S805 SoC manual and a partial S905 SoC manual has been published by Hardkernel.
A partial S905X SoC manual and a partial S912 SoC manual manual have been published by Khadas (on their docs page)

Based on the Amlogic kernel code, these git trees also contain some interesting developments:

All new developments will ultimately go into the official Linux tree. In the meantime, you can find in-development or ready-to-merge changes in these trees :

Experimental Test distributions using mainline (maybe outdated) :


  • Our IRC channel is #linux-amlogic on Freenode
start.txt · Last modified: 2018/12/09 13:53 by xdarklight