https://linux-sunxi.org/api.php?action=feedcontributions&user=Kenren&feedformat=atom
linux-sunxi.org - User contributions [en]
2024-03-28T19:41:01Z
User contributions
MediaWiki 1.35.8
https://linux-sunxi.org/index.php?title=T95&diff=25803
T95
2024-03-21T08:58:30Z
<p>Kenren: Since RAM and ROM are fake, it is not known the real value of them</p>
<hr />
<div>{{Infobox Board<br />
| image = [[File:T95_CaseFront.jpg|250px]]<br />
| manufacturer = [http://manfacturer/ Manufacturer]<br />
| dimensions = 100''mm'' x 100''mm'' x 18''mm''<br />
| release_date = {{Edit|Month year}}<br />
| website = [http://manufacturer/device Device Product Page]<br />
| soc = [[H616]] @ 1.5Ghz<br />
| dram = ?GB DDR3 @ 600MHz<br />
| emmc = ??GB eMMC<br />
| power = DC 5V @ 2A<br />
| video = HDMI (Type A - full)<br />
| audio = 3.5mm headphone plug<br />
| network = WiFi 802.11 b/g/n ([[Wifi#Broadcom|BCM4334]] or [[Wifi#XR819|XR819]]), 10/100Mbps Ethernet (integrated H616 PHY)<br />
| storage = µSD, eMMC<br />
| usb = 2 USB2.0 Host<br />
| headers = UART, ... ?<br />
}}<br />
<br />
{{Remove_only_when_finished|This page needs to be properly filled according to the [[New_Device_howto |New Device Howto]] and the [[New_Device_page|New Device Page guide]].}}<br />
<br />
'''Note!''' This page was (initially at least) assembled by a rank amateur who was just doing his best. Read with skepticism!<br />
<br />
= Identification =<br />
<br />
The top of the device has a logo with a large "T95" in a circle.<br />
<br />
On the bottom the device is printed:<br />
<pre>T95 (5G)<br />
RAM: 4GB ROM: 32GB</pre><br />
<br />
The PCB has the following silkscreened on it:<br />
<pre>H616-T95MAX-AXP313A-v3.0</pre><br />
<br />
In android, under Settings->About Tablet, you will find:<br />
* Model Number: ''MBOX''<br />
* Build Number: ''10.1.A29-0712'' or ''10.1.X18'' or ''10.1.X19'' or ''10.1.A27''<br />
<br />
<br />
= Sunxi support =<br />
<br />
== Current status ==<br />
<br />
Support is work in progress.<br />
<br />
== Manual build ==<br />
<br />
You can build things for yourself by following our [[Manual_build_howto | Manual build howto]] and by choosing from the configurations available below.<br />
<br />
=== Mainline U-Boot ===<br />
<br />
While I was able to boot Mainline U-Boot (tagged v2023.01-rc2) from an SD card, I did not succeed in getting a working prompt. I used the U-Boot configuration <code>x96_mate_defconfig</code> as a starting point, and went through many variations of this configuration.<br />
<br />
''The one configuration change/addition that I was able to determine was absolutely necessary was:'' <code>CONFIG_SPL_IMAGE_TYPE_SUNXI_TOC0=y</code><br />
<br />
I'm told the T95 has secure boot enabled, and it won't load Mainline U-Boot without TOC0. With TOC0 enabled, the T95 output was:<br />
<br />
<pre><br />
U-Boot SPL 2023.01-rc2 (Dec 01 2022 - 13:43:28 -0700)<br />
DRAM: 4096 MiB<br />
Failed to set core voltage! Can't set CPU frequency<br />
SP <br />
</pre><br />
<br />
''What's wrong?''<br />
<br />
I was just a conduit through which ''apritzel'' was troubleshooting, but my impression was the issue related to RAM timing. With <code>CONFIG_SPL_IMAGE_TYPE_SUNXI_TOC0=y</code> present in every configuration attempt, we tried:<br />
<br />
* Removing every line with I2C in the configuration and add <code>CONFIG_SUNXI_NO_PMIC=y</code><br />
* Setting/Lowering DRAM frequency with <code>CONFIG_DRAM_CLK=624</code><br />
* Copying DRAM parameters from the <code>orangepi_zero2_defconfig</code> U-Boot configuration<br />
* <code>CONFIG_DRAM_SUN50I_H616_READ_CALIBRATION=y</code> and <code>"CONFIG_DRAM_SUN50I_H616_UNKNOWN_FEATURE=y</code><br />
<br />
All these attempts resulted in U-Boot quickly freezing on boot.<br />
<br />
'''A basic U-Boot compile workflow:'''<br />
<pre><br />
$ git clone git://git.denx.de/u-boot.git<br />
$ cd u-boot<br />
$ git checkout v2023.01-rc2<br />
$ cd ..<br />
$ git clone https://github.com/ARM-software/arm-trusted-firmware.git<br />
$ cd arm-trusted-firmware<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h616 DEBUG=1 bl31<br />
$ cd ../u-boot<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- BL31=../arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin x96_mate_defconfig<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- BL31=../arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin menuconfig<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- BL31=../arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin<br />
$ dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8<br />
</pre><br />
<br />
<br />
Use the ''{{Edit|MANUFACTURER_DEVICE}}'' build target.<br />
<br />
=== Mainline Linux kernel ===<br />
<br />
Use the ''{{Edit|FAMILY-CHIP-DEVICE.dtb}}'' device-tree binary.<br />
<br />
= Tips, Tricks, Caveats =<br />
<br />
{{Remove|Add MANUFACTURER DEVICE specific tips, tricks, Caveats and nice to have changes here.}}<br />
<br />
== FEL mode ==<br />
<br />
The button behind the 3.5mm audio jack (labeled UBOOT on the board) triggers [[FEL | FEL mode]]. This button can be pressed even while the board is in its case by sticking something like a paperclip straight through the 3.5mm jack. Feel around for something that "clicks".<br />
<br />
== Device specific topic ==<br />
<br />
Board V4.0 comes with an XR819 Wi-Fi module. It sits behind the SD card slot.<br />
On the top side of the board sits an AXP305 PMIC.<br />
I have a 16 GB NAND flash + 2 GB RAM (8x Hynix H5TC2G43BFR) variant.<br />
<br />
Exist much different variant of MBOX T95 many of which have malware pre-installed[https://github.com/DesktopECHO/T95-H616-Malware].<br />
<br />
on the label in the retro of the base will be printed:<br />
<pre>T95 or T95 5G<br />
RAM: 2 or 4 or 8 GB ROM: 16 or 32 or 64 or 128 GB</pre><br />
In all or probably much cases this info are totally fake (as is now customary in many TV boxes), a modification (hack) has been installed to cheat on the amount of total space in both RAM and ROM.<br />
<br />
Furthermore, the chips were printed with false information, so it is useless to open the case and read them.<br />
Also please note that [[H616]] cannot recognize over 4GB of RAM.<br />
<br />
The board can have different Wi-Fi module:<br />
[[Wifi#XR819|XR819]] Wi-Fi 2.4GHz only<br />
or<br />
[[Wifi#Broadcom|BCM4334]] Wi-Fi dual-band 2.4/5GHz and bluetooth 4.0 and FM support (probably antenna to jack not soldered on the board, not supported by official ROM).<br />
<br />
<br />
== {{Edit|...}} ==<br />
<br />
= Adding a serial port ('''voids warranty''') =<br />
''This thing had a warranty?''<br />
<br />
To attach a serial console you'll need to open the T95 case and solder on wires or headers to the UART pads. Afterwards, you'll need to a UART-USB dongle or similar. See the [[UART|UART howto]] for more details.<br />
<br />
[[File:T95_UART_Pads.jpg|thumb|240px|UART pads - with headers already soldered on.]]<br />
[[File:T95_SerialRXShort.jpg|thumb|240px|Pads to short to enable console RX]]<br />
<br />
== Device disassembly ==<br />
You can pop off the bottom of the T95 case using the average [[Plastic_tool|Plastic tool]]. The bottom is held in using small clips only. If your case is like mine I'd suggest starting at the side with the Ethernet and HDMI connector.<br />
<br />
== Locating the UART ==<br />
The UART pads are located between the USB0 port and the µSD slot. Refer to the picture at the side.<br />
<br />
Connecting your serial console to these pads alone will be sufficient to read T95 console output, but the T95 will not receive any input. To allow console input two pads will need to be shorted on the underside of the board. Look for three tightly-grouped pads on the underside of the board, about 10mm off the back of USB0. Also, see the picture at the side.<br />
<br />
'''From ''apritzel'' on IRC:'''<br />
<blockquote><br />
''[12:48] <apritzel>'' upnix: as for the serial console: some of those TV boxes tend to drop a FET and resistor for the some UART pins, so you may be able to see output, but not be able to talk to the box<br />
<br />
''[12:49] <apritzel>'' see here for an example: https://linux-sunxi.org/Eachlink_H6_Mini#Adding_a_serial_port_.28might_void_warranty.3F.29<br />
</blockquote><br />
<br />
<div class="toccolours mw-collapsible mw-collapsed"><br />
Boot log with factory firmware (And unbootable OS, in this instance)<br />
<div class="mw-collapsible-content"><br />
<pre><br />
[194]HELLO! SBOOT is starting!<br />
[197]sboot commit : d1e4f83e<br />
[200]set pll start<br />
[202]periph0 has been enabled<br />
[205]set pll end<br />
[207]unknow PMU<br />
[209]unknow PMU<br />
[211]PMU: AXP1530<br />
[213]dram return write ok<br />
[215]board init ok<br />
[217]try to probe rtc region<br />
[220]DRAM BOOT DRIVE INFO: V0.649<br />
[223]the chip id is 0x5000<br />
[226]chip id check OK<br />
[230]DRAM_VCC set to 1500 mv<br />
[233]DRAM CLK =600 MHZ<br />
[235]DRAM Type =3 (3:DDR3,4:DDR4,7:LPDDR3,8:LPDDR4)<br />
[243]Actual DRAM SIZE =4096 M<br />
[246]DRAM SIZE =4096 MBytes, para1 = 310b, para2 = 10000000, dram_tpr13 = 6041<br />
[255]DRAM simple test OK.<br />
[257]rtc standby flag is 0x0, super standby flag is 0x0<br />
[263][mmc]: mmc driver ver 2021-10-12 13:56<br />
[267][mmc]: b mmc 2 bias 0<br />
[275][mmc]: Wrong media type 0x0, but host sdc2, try mmc first<br />
[281][mmc]: ***Try MMC card 2***<br />
[313]mmc_read_info 1138:region magic is not right, retry more time 0<br />
[331]mmc_read_info 1138:region magic is not right, retry more time 0<br />
[348]mmc_read_info 1138:region magic is not right, retry more time 0<br />
[365]mmc_read_info 1138:region magic is not right, go err 0<br />
[371]dump info registers:[373]<br />
0x36ba4 : [375]0 [376]0 [376]0 [377]0 [378]<br />
[378][mmc]: RMCA FAIL!<br />
[380][mmc]: mmc read timing info fail<br />
[384][mmc]: wrong freq 2 at spd md 2<br />
[388][mmc]: force 25m<br />
[391][mmc]: MMC 4.5<br />
[393][mmc]: HSSDR52/SDR25 8 bit<br />
[396][mmc]: 25000000 Hz<br />
[398][mmc]: 29820 MB<br />
[400][mmc]: ***SD/MMC 2 init OK!!!***<br />
[518]read toc1 from emmc 32800 sector<br />
[521]OLD version: 0.0<br />
[523]NEW version: 0.0<br />
[599]load rotpk hash<br />
[663]load monitor-key hash<br />
[665]load monitor hash<br />
[870]load boot-key hash<br />
[872]load boot hash<br />
[938]load vbmeta-key hash<br />
[940]load vbmeta hash<br />
[1008]load recovery-key hash<br />
[1011]load recovery hash<br />
[1014]monitor entry=0x48000000<br />
[1017]uboot entry=0x4a000000<br />
[1020]optee entry=0x48600000<br />
[1023]mmc not para<br />
[1027]run out of boot0<br />
NOTICE: BL3-1: v1.0(debug):be96482<br />
NOTICE: BL3-1: Built : 18:32:32, 2021-04-21<br />
NOTICE: BL3-1 commit: 8<br />
NOTICE: cpuidle init version V1.0<br />
NOTICE: secure os exist<br />
MESSAGE: [0x0] TEE-CORE: OP-TEE version: 5c40397e #1 Tue Feb 2 07:45:37 UTC 2021 arm<br />
NOTICE: BL3-1: Preparing for EL3 exit to normal world<br />
NOTICE: BL3-1: Next image address = 0x4a000000<br />
NOTICE: BL3-1: Next image spsr = 0x1d3<br />
<br />
<br />
U-Boot 2018.05 (Jun 22 2022 - 11:19:57 +0800) Allwinner Technology<br />
<br />
[01.119]CPU: Allwinner Family<br />
[01.122]Model: sun50iw9<br />
I2C: ready<br />
[01.126]DRAM: 2 GiB<br />
[01.129]Relocation Offset is: 75ec5000<br />
[01.168]secure enable bit: 1<br />
[01.171]pmu_axp152_probe pmic_bus_read fail<br />
[01.175]PMU: AXP1530<br />
[01.181]CPU=1008 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz MBus=400Mhz<br />
[01.189]drv_disp_init<br />
[01.218]__clk_enable: clk is null.<br />
[01.224]drv_disp_init finish<br />
[01.227]gic: sec monitor mode<br />
[01.254]flash init start<br />
[01.256]workmode = 0,storage type = 2<br />
[01.260]MMC: 2<br />
[01.261]get mem for descripter OK !<br />
[01.270]get sdc2 sdc_boot0_sup_1v8 fail.<br />
[01.275]io is 1.8V<br />
<br />
[01.310]rto or no error or software timeout,no need retry<br />
[01.317]already at HSSDR52_SDR25 mode<br />
[02.234]speed mode: HSSDR52/SDR25<br />
[02.237]---400000Hz:<br />
[02.239]--best 255<br />
[02.241]---25000000Hz:<br />
[02.243]--best 255<br />
[02.245]---50000000Hz:<br />
[02.247]--best 22<br />
[02.249]already at HSSDR52_SDR25 mode<br />
[02.252]already at HSSDR52_SDR25 mode<br />
[02.256]sunxi flash init ok<br />
[02.259]Loading Environment from SUNXI_FLASH... OK<br />
secure storage read hdcpkey fail<br />
[02.273]secure storage read hdcpkey fail with:-1<br />
secure storage read widevine fail<br />
[02.280]secure storage read widevine fail with:-1<br />
[02.286]usb burn from boot<br />
delay time 0<br />
weak:otg_phy_config<br />
[02.299]usb prepare ok<br />
[03.102]overtime<br />
[03.106]do_burn_from_boot usb : no usb exist<br />
[03.110]boot_gui_init:start<br />
FAT: Misaligned buffer address (bbe7e678)<br />
32 bytes read in 4 ms (7.8 KiB/s)<br />
[03.393]boot_gui_init:finish<br />
[03.396]bmp_name=bootlogo.bmp<br />
2764922 bytes read in 60 ms (43.9 MiB/s)<br />
[03.477]get max-frequency ok 100000000 Hz<br />
[03.481]1 1 1: 1 1 1<br />
[03.483]delete mmc-hs400-1_8v from dtb<br />
[03.486]delete mmc-hs200-1_8v from dtb<br />
[03.490]delete mmc-ddr-1_8v from dtb<br />
[03.493]get max-frequency ok 50000000 Hz<br />
[03.506]update dts<br />
** Unrecognized filesystem type **<br />
[03.517]load file(ULI/factory/rootwait init.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.531]load file(ULI/factory/snum.txt) error.<br />
[03.535]name in map mac<br />
** Unrecognized filesystem type **<br />
[03.547]load file(ULI/factory/wifi_mac.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.561]load file(ULI/factory/bt_mac.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.575]load file(ULI/factory/selinux.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.588]load file(ULI/factory/specialstr.txt) error.<br />
[03.600]update part info<br />
[03.624]update bootcmd<br />
[03.626]No ethernet found.<br />
Hit any key to stop autoboot: 0<br />
[04.133]not supported key<br />
[04.135]actual n size:1000, e:10001<br />
[04.138]exptect n size:800, e:10001<br />
show hash of file<br />
9c 4f 9a 0a a2 d1 89 50 66 7d 92 6a 19 a1 ac 18<br />
ff 0d 01 83 43 4f 99 3f e3 3c eb 1e 68 c1 3d 03<br />
<br />
image vbmeta hash valid<br />
[04.154]image_len not match, actual:19466240, expected:19234816<br />
[04.159]bmp_name=red_warning.bmp<br />
** Unable to read file red_warning.bmp **<br />
[04.167]sunxi bmp info error : unable to open logo file red_warning.bmp<br />
[34.176]mmc exit start<br />
[34.211]mmc 2 exit ok<br />
</pre><br />
</div><br />
</div><br />
<br />
= Pictures =<br />
<gallery><br />
File:T95_CaseFront.jpg <br />
File:T95_Back.jpg<br />
File:T95_Bottom.jpg<br />
File:T95_Left.jpg<br />
File:T95_Board_Front.jpg<br />
File:T95_Board_Back.jpg<br />
File:T95_UART_Pads.jpg<br />
File:T95_SerialRXShort.jpg<br />
</gallery><br />
<br />
= Schematic =<br />
<br />
{{Remove|List schematics, board layout, cad files, etc here.}}<br />
<br />
= Also known as =<br />
<br />
"T95" seems to be a popular name, used in many different TV boxes, with different SoCs. This is the version without any suffix (just "T95"), but make sure you get the "H616" version of it.<br />
<br />
= See also =<br />
* [[X96_Mate|X96 Mate]] - The device with a U-Boot configuration used to boot the T95 from an SD card (discussed above)<br />
<br />
== Manufacturer images ==<br />
* [https://iptvintvbox.com/firmware/ Potential T95 firmware] (Scroll down, look for "T95 Firmware (H616) 2.4G/5G")<br />
** Use with [https://iptvintvbox.com/download/phoenixsuit/ PhoenixSuit] and USB type-A male-male cable<br />
<br />
[[Category:Devices]]<br />
[[Category:H616 Boards]]<br />
[[Category:Devices with HDMI port]]<br />
[[Category:Devices with SPDIF port]]<br />
[[Category:Devices with Ethernet port]]<br />
[[Category:Devices with Wifi]]</div>
Kenren
https://linux-sunxi.org/index.php?title=T95&diff=25802
T95
2024-03-21T08:38:55Z
<p>Kenren: more differentiation about various T95 models</p>
<hr />
<div>{{Infobox Board<br />
| image = [[File:T95_CaseFront.jpg|250px]]<br />
| manufacturer = [http://manfacturer/ Manufacturer]<br />
| dimensions = 100''mm'' x 100''mm'' x 18''mm''<br />
| release_date = {{Edit|Month year}}<br />
| website = [http://manufacturer/device Device Product Page]<br />
| soc = [[H616]] @ 1.5Ghz<br />
| dram = 4GB DDR3 @ 600MHz<br />
| emmc = 32GB eMMC<br />
| power = DC 5V @ 2A<br />
| video = HDMI (Type A - full)<br />
| audio = 3.5mm headphone plug<br />
| network = WiFi 802.11 b/g/n ([[Wifi#Broadcom|BCM4334]] or [[Wifi#XR819|XR819]]), 10/100Mbps Ethernet (integrated H616 PHY)<br />
| storage = µSD, eMMC<br />
| usb = 2 USB2.0 Host<br />
| headers = UART, ... ?<br />
}}<br />
<br />
{{Remove_only_when_finished|This page needs to be properly filled according to the [[New_Device_howto |New Device Howto]] and the [[New_Device_page|New Device Page guide]].}}<br />
<br />
'''Note!''' This page was (initially at least) assembled by a rank amateur who was just doing his best. Read with skepticism!<br />
<br />
= Identification =<br />
<br />
The top of the device has a logo with a large "T95" in a circle.<br />
<br />
On the bottom the device is printed:<br />
<pre>T95 (5G)<br />
RAM: 4GB ROM: 32GB</pre><br />
<br />
The PCB has the following silkscreened on it:<br />
<pre>H616-T95MAX-AXP313A-v3.0</pre><br />
<br />
In android, under Settings->About Tablet, you will find:<br />
* Model Number: ''MBOX''<br />
* Build Number: ''10.1.A29-0712'' or ''10.1.X18'' or ''10.1.X19'' or ''10.1.A27''<br />
<br />
<br />
= Sunxi support =<br />
<br />
== Current status ==<br />
<br />
Support is work in progress.<br />
<br />
== Manual build ==<br />
<br />
You can build things for yourself by following our [[Manual_build_howto | Manual build howto]] and by choosing from the configurations available below.<br />
<br />
=== Mainline U-Boot ===<br />
<br />
While I was able to boot Mainline U-Boot (tagged v2023.01-rc2) from an SD card, I did not succeed in getting a working prompt. I used the U-Boot configuration <code>x96_mate_defconfig</code> as a starting point, and went through many variations of this configuration.<br />
<br />
''The one configuration change/addition that I was able to determine was absolutely necessary was:'' <code>CONFIG_SPL_IMAGE_TYPE_SUNXI_TOC0=y</code><br />
<br />
I'm told the T95 has secure boot enabled, and it won't load Mainline U-Boot without TOC0. With TOC0 enabled, the T95 output was:<br />
<br />
<pre><br />
U-Boot SPL 2023.01-rc2 (Dec 01 2022 - 13:43:28 -0700)<br />
DRAM: 4096 MiB<br />
Failed to set core voltage! Can't set CPU frequency<br />
SP <br />
</pre><br />
<br />
''What's wrong?''<br />
<br />
I was just a conduit through which ''apritzel'' was troubleshooting, but my impression was the issue related to RAM timing. With <code>CONFIG_SPL_IMAGE_TYPE_SUNXI_TOC0=y</code> present in every configuration attempt, we tried:<br />
<br />
* Removing every line with I2C in the configuration and add <code>CONFIG_SUNXI_NO_PMIC=y</code><br />
* Setting/Lowering DRAM frequency with <code>CONFIG_DRAM_CLK=624</code><br />
* Copying DRAM parameters from the <code>orangepi_zero2_defconfig</code> U-Boot configuration<br />
* <code>CONFIG_DRAM_SUN50I_H616_READ_CALIBRATION=y</code> and <code>"CONFIG_DRAM_SUN50I_H616_UNKNOWN_FEATURE=y</code><br />
<br />
All these attempts resulted in U-Boot quickly freezing on boot.<br />
<br />
'''A basic U-Boot compile workflow:'''<br />
<pre><br />
$ git clone git://git.denx.de/u-boot.git<br />
$ cd u-boot<br />
$ git checkout v2023.01-rc2<br />
$ cd ..<br />
$ git clone https://github.com/ARM-software/arm-trusted-firmware.git<br />
$ cd arm-trusted-firmware<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_h616 DEBUG=1 bl31<br />
$ cd ../u-boot<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- BL31=../arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin x96_mate_defconfig<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- BL31=../arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin menuconfig<br />
$ make CROSS_COMPILE=aarch64-linux-gnu- BL31=../arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin<br />
$ dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8<br />
</pre><br />
<br />
<br />
Use the ''{{Edit|MANUFACTURER_DEVICE}}'' build target.<br />
<br />
=== Mainline Linux kernel ===<br />
<br />
Use the ''{{Edit|FAMILY-CHIP-DEVICE.dtb}}'' device-tree binary.<br />
<br />
= Tips, Tricks, Caveats =<br />
<br />
{{Remove|Add MANUFACTURER DEVICE specific tips, tricks, Caveats and nice to have changes here.}}<br />
<br />
== FEL mode ==<br />
<br />
The button behind the 3.5mm audio jack (labeled UBOOT on the board) triggers [[FEL | FEL mode]]. This button can be pressed even while the board is in its case by sticking something like a paperclip straight through the 3.5mm jack. Feel around for something that "clicks".<br />
<br />
== Device specific topic ==<br />
<br />
Board V4.0 comes with an XR819 Wi-Fi module. It sits behind the SD card slot.<br />
On the top side of the board sits an AXP305 PMIC.<br />
I have a 16 GB NAND flash + 2 GB RAM (8x Hynix H5TC2G43BFR) variant.<br />
<br />
Exist much different variant of MBOX T95 many of which have (malware pre-installed)[https://github.com/DesktopECHO/T95-H616-Malware].<br />
<br />
on the label in the retro of the base will be printed:<br />
<pre>T95 or T95 5G<br />
RAM: 2 or 4 or 8 GB ROM: 16 or 32 or 64 or 128 GB</pre><br />
In all or probably much cases this info are totally fake (as is now customary in many TV boxes), a modification (hack) has been installed to cheat on the amount of total space in both RAM and ROM.<br />
<br />
Furthermore, the chips were printed with false information, so it is useless to open the case and read them.<br />
Also please note that [[H616]] cannot recognize over 4GB of RAM.<br />
<br />
The board can have different Wi-Fi module:<br />
[[Wifi#XR819|XR819]] Wi-Fi 2.4GHz only<br />
or<br />
[[Wifi#Broadcom|BCM4334]] Wi-Fi dual-band 2.4/5GHz and bluetooth 4.0 and FM support (probably antenna to jack not soldered on the board, not supported by official ROM).<br />
<br />
<br />
== {{Edit|...}} ==<br />
<br />
= Adding a serial port ('''voids warranty''') =<br />
''This thing had a warranty?''<br />
<br />
To attach a serial console you'll need to open the T95 case and solder on wires or headers to the UART pads. Afterwards, you'll need to a UART-USB dongle or similar. See the [[UART|UART howto]] for more details.<br />
<br />
[[File:T95_UART_Pads.jpg|thumb|240px|UART pads - with headers already soldered on.]]<br />
[[File:T95_SerialRXShort.jpg|thumb|240px|Pads to short to enable console RX]]<br />
<br />
== Device disassembly ==<br />
You can pop off the bottom of the T95 case using the average [[Plastic_tool|Plastic tool]]. The bottom is held in using small clips only. If your case is like mine I'd suggest starting at the side with the Ethernet and HDMI connector.<br />
<br />
== Locating the UART ==<br />
The UART pads are located between the USB0 port and the µSD slot. Refer to the picture at the side.<br />
<br />
Connecting your serial console to these pads alone will be sufficient to read T95 console output, but the T95 will not receive any input. To allow console input two pads will need to be shorted on the underside of the board. Look for three tightly-grouped pads on the underside of the board, about 10mm off the back of USB0. Also, see the picture at the side.<br />
<br />
'''From ''apritzel'' on IRC:'''<br />
<blockquote><br />
''[12:48] <apritzel>'' upnix: as for the serial console: some of those TV boxes tend to drop a FET and resistor for the some UART pins, so you may be able to see output, but not be able to talk to the box<br />
<br />
''[12:49] <apritzel>'' see here for an example: https://linux-sunxi.org/Eachlink_H6_Mini#Adding_a_serial_port_.28might_void_warranty.3F.29<br />
</blockquote><br />
<br />
<div class="toccolours mw-collapsible mw-collapsed"><br />
Boot log with factory firmware (And unbootable OS, in this instance)<br />
<div class="mw-collapsible-content"><br />
<pre><br />
[194]HELLO! SBOOT is starting!<br />
[197]sboot commit : d1e4f83e<br />
[200]set pll start<br />
[202]periph0 has been enabled<br />
[205]set pll end<br />
[207]unknow PMU<br />
[209]unknow PMU<br />
[211]PMU: AXP1530<br />
[213]dram return write ok<br />
[215]board init ok<br />
[217]try to probe rtc region<br />
[220]DRAM BOOT DRIVE INFO: V0.649<br />
[223]the chip id is 0x5000<br />
[226]chip id check OK<br />
[230]DRAM_VCC set to 1500 mv<br />
[233]DRAM CLK =600 MHZ<br />
[235]DRAM Type =3 (3:DDR3,4:DDR4,7:LPDDR3,8:LPDDR4)<br />
[243]Actual DRAM SIZE =4096 M<br />
[246]DRAM SIZE =4096 MBytes, para1 = 310b, para2 = 10000000, dram_tpr13 = 6041<br />
[255]DRAM simple test OK.<br />
[257]rtc standby flag is 0x0, super standby flag is 0x0<br />
[263][mmc]: mmc driver ver 2021-10-12 13:56<br />
[267][mmc]: b mmc 2 bias 0<br />
[275][mmc]: Wrong media type 0x0, but host sdc2, try mmc first<br />
[281][mmc]: ***Try MMC card 2***<br />
[313]mmc_read_info 1138:region magic is not right, retry more time 0<br />
[331]mmc_read_info 1138:region magic is not right, retry more time 0<br />
[348]mmc_read_info 1138:region magic is not right, retry more time 0<br />
[365]mmc_read_info 1138:region magic is not right, go err 0<br />
[371]dump info registers:[373]<br />
0x36ba4 : [375]0 [376]0 [376]0 [377]0 [378]<br />
[378][mmc]: RMCA FAIL!<br />
[380][mmc]: mmc read timing info fail<br />
[384][mmc]: wrong freq 2 at spd md 2<br />
[388][mmc]: force 25m<br />
[391][mmc]: MMC 4.5<br />
[393][mmc]: HSSDR52/SDR25 8 bit<br />
[396][mmc]: 25000000 Hz<br />
[398][mmc]: 29820 MB<br />
[400][mmc]: ***SD/MMC 2 init OK!!!***<br />
[518]read toc1 from emmc 32800 sector<br />
[521]OLD version: 0.0<br />
[523]NEW version: 0.0<br />
[599]load rotpk hash<br />
[663]load monitor-key hash<br />
[665]load monitor hash<br />
[870]load boot-key hash<br />
[872]load boot hash<br />
[938]load vbmeta-key hash<br />
[940]load vbmeta hash<br />
[1008]load recovery-key hash<br />
[1011]load recovery hash<br />
[1014]monitor entry=0x48000000<br />
[1017]uboot entry=0x4a000000<br />
[1020]optee entry=0x48600000<br />
[1023]mmc not para<br />
[1027]run out of boot0<br />
NOTICE: BL3-1: v1.0(debug):be96482<br />
NOTICE: BL3-1: Built : 18:32:32, 2021-04-21<br />
NOTICE: BL3-1 commit: 8<br />
NOTICE: cpuidle init version V1.0<br />
NOTICE: secure os exist<br />
MESSAGE: [0x0] TEE-CORE: OP-TEE version: 5c40397e #1 Tue Feb 2 07:45:37 UTC 2021 arm<br />
NOTICE: BL3-1: Preparing for EL3 exit to normal world<br />
NOTICE: BL3-1: Next image address = 0x4a000000<br />
NOTICE: BL3-1: Next image spsr = 0x1d3<br />
<br />
<br />
U-Boot 2018.05 (Jun 22 2022 - 11:19:57 +0800) Allwinner Technology<br />
<br />
[01.119]CPU: Allwinner Family<br />
[01.122]Model: sun50iw9<br />
I2C: ready<br />
[01.126]DRAM: 2 GiB<br />
[01.129]Relocation Offset is: 75ec5000<br />
[01.168]secure enable bit: 1<br />
[01.171]pmu_axp152_probe pmic_bus_read fail<br />
[01.175]PMU: AXP1530<br />
[01.181]CPU=1008 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz MBus=400Mhz<br />
[01.189]drv_disp_init<br />
[01.218]__clk_enable: clk is null.<br />
[01.224]drv_disp_init finish<br />
[01.227]gic: sec monitor mode<br />
[01.254]flash init start<br />
[01.256]workmode = 0,storage type = 2<br />
[01.260]MMC: 2<br />
[01.261]get mem for descripter OK !<br />
[01.270]get sdc2 sdc_boot0_sup_1v8 fail.<br />
[01.275]io is 1.8V<br />
<br />
[01.310]rto or no error or software timeout,no need retry<br />
[01.317]already at HSSDR52_SDR25 mode<br />
[02.234]speed mode: HSSDR52/SDR25<br />
[02.237]---400000Hz:<br />
[02.239]--best 255<br />
[02.241]---25000000Hz:<br />
[02.243]--best 255<br />
[02.245]---50000000Hz:<br />
[02.247]--best 22<br />
[02.249]already at HSSDR52_SDR25 mode<br />
[02.252]already at HSSDR52_SDR25 mode<br />
[02.256]sunxi flash init ok<br />
[02.259]Loading Environment from SUNXI_FLASH... OK<br />
secure storage read hdcpkey fail<br />
[02.273]secure storage read hdcpkey fail with:-1<br />
secure storage read widevine fail<br />
[02.280]secure storage read widevine fail with:-1<br />
[02.286]usb burn from boot<br />
delay time 0<br />
weak:otg_phy_config<br />
[02.299]usb prepare ok<br />
[03.102]overtime<br />
[03.106]do_burn_from_boot usb : no usb exist<br />
[03.110]boot_gui_init:start<br />
FAT: Misaligned buffer address (bbe7e678)<br />
32 bytes read in 4 ms (7.8 KiB/s)<br />
[03.393]boot_gui_init:finish<br />
[03.396]bmp_name=bootlogo.bmp<br />
2764922 bytes read in 60 ms (43.9 MiB/s)<br />
[03.477]get max-frequency ok 100000000 Hz<br />
[03.481]1 1 1: 1 1 1<br />
[03.483]delete mmc-hs400-1_8v from dtb<br />
[03.486]delete mmc-hs200-1_8v from dtb<br />
[03.490]delete mmc-ddr-1_8v from dtb<br />
[03.493]get max-frequency ok 50000000 Hz<br />
[03.506]update dts<br />
** Unrecognized filesystem type **<br />
[03.517]load file(ULI/factory/rootwait init.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.531]load file(ULI/factory/snum.txt) error.<br />
[03.535]name in map mac<br />
** Unrecognized filesystem type **<br />
[03.547]load file(ULI/factory/wifi_mac.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.561]load file(ULI/factory/bt_mac.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.575]load file(ULI/factory/selinux.txt) error.<br />
** Unrecognized filesystem type **<br />
[03.588]load file(ULI/factory/specialstr.txt) error.<br />
[03.600]update part info<br />
[03.624]update bootcmd<br />
[03.626]No ethernet found.<br />
Hit any key to stop autoboot: 0<br />
[04.133]not supported key<br />
[04.135]actual n size:1000, e:10001<br />
[04.138]exptect n size:800, e:10001<br />
show hash of file<br />
9c 4f 9a 0a a2 d1 89 50 66 7d 92 6a 19 a1 ac 18<br />
ff 0d 01 83 43 4f 99 3f e3 3c eb 1e 68 c1 3d 03<br />
<br />
image vbmeta hash valid<br />
[04.154]image_len not match, actual:19466240, expected:19234816<br />
[04.159]bmp_name=red_warning.bmp<br />
** Unable to read file red_warning.bmp **<br />
[04.167]sunxi bmp info error : unable to open logo file red_warning.bmp<br />
[34.176]mmc exit start<br />
[34.211]mmc 2 exit ok<br />
</pre><br />
</div><br />
</div><br />
<br />
= Pictures =<br />
<gallery><br />
File:T95_CaseFront.jpg <br />
File:T95_Back.jpg<br />
File:T95_Bottom.jpg<br />
File:T95_Left.jpg<br />
File:T95_Board_Front.jpg<br />
File:T95_Board_Back.jpg<br />
File:T95_UART_Pads.jpg<br />
File:T95_SerialRXShort.jpg<br />
</gallery><br />
<br />
= Schematic =<br />
<br />
{{Remove|List schematics, board layout, cad files, etc here.}}<br />
<br />
= Also known as =<br />
<br />
"T95" seems to be a popular name, used in many different TV boxes, with different SoCs. This is the version without any suffix (just "T95"), but make sure you get the "H616" version of it.<br />
<br />
= See also =<br />
* [[X96_Mate|X96 Mate]] - The device with a U-Boot configuration used to boot the T95 from an SD card (discussed above)<br />
<br />
== Manufacturer images ==<br />
* [https://iptvintvbox.com/firmware/ Potential T95 firmware] (Scroll down, look for "T95 Firmware (H616) 2.4G/5G")<br />
** Use with [https://iptvintvbox.com/download/phoenixsuit/ PhoenixSuit] and USB type-A male-male cable<br />
<br />
[[Category:Devices]]<br />
[[Category:H616 Boards]]<br />
[[Category:Devices with HDMI port]]<br />
[[Category:Devices with SPDIF port]]<br />
[[Category:Devices with Ethernet port]]<br />
[[Category:Devices with Wifi]]</div>
Kenren
https://linux-sunxi.org/index.php?title=PowerVR&diff=25013
PowerVR
2022-08-23T12:50:36Z
<p>Kenren: PowerVR Vulkan and DRM open source driver</p>
<hr />
<div>This page is still mostly a stub, please add to it!<br />
<br />
= Overview =<br />
<br />
PowerVR is a line of GPU by Imagination Technologies. It has zero Free Software/Open Source support right now, and the associated development effort seems to be regarded as very high. Imagination has hinted they were considering addressssing the problem<ref>http://www.cnx-software.com/2015/06/18/open-source-linux-drivers-for-powervr-gpus-might-be-in-the-works/ CNX blog entry</ref> but today the position seem to be still open<ref>https://careers.imgtec.com/#/vacancy/details/2619 Open position at Imagination Technologies</ref><br />
<br />
It is regarded as more powerful than the [[Mali400]] GPU found in other SoCs (needs ref).<br />
<br />
A Free Software driver for PowerVR is considered as a high priority project by the FSF<ref>http://www.fsf.org/campaigns/priority.html High Priority Free Software Projects</ref> and a project has indeed been setup<ref>http://powervr.gnu.org.ve/doku.php Collecting information about the PowerVR architecture</ref>.<br />
<br />
Imagination Technologies published a linux driver for their binary microkernel under a dual license: MIT & GPL v2. <ref>https://github.com/LeMaker/linux-actions/tree/linux-3.10.y/drivers/gpu/pvr LeMaker Integrated it into their 3.10.y kernel</ref><br />
<br />
on 2022 Imagination Tech is publishing a new open-source driver, both on DRM side <ref>https://lore.kernel.org/all/20220815165156.118212-2-sarah.walker@imgtec.com/</ref> and Mesa Vulkan driver <ref>https://lists.freedesktop.org/archives/mesa-dev/2022-March/225699.html</ref>.<br />
Imagination's driver focus on their newer PowerVR "Rogue" GPUs starting from series6XT (for example the GX6250, dated Jan 2014), but maybe with minor modification this driver can be used on older series6 (like G6230, dated Jun 2012).<br />
<br />
<br />
Allwinner SoC with a PowerVR GPU:<br />
{| class="wikitable"<br />
|-<br />
! SOC<br />
! PowerVR GPU<br />
! Revision<br />
|-<br />
| [[A31]]<br />
| SGX544 or [[SGX544MP|SGX544MP2]]<br />
| 1.1.5<br />
|-<br />
| [[A83T]]<br />
| [[SGX544MP|SGX544MP1]]<br />
| 1.1.5<br />
|-<br />
| [[A80]]<br />
| G6230<br />
| ?<br />
|}<br />
=References=<br />
<references /><br />
<br />
= External links =<br />
<br />
* https://libreplanet.org/wiki/Group:PowerVR_drivers</div>
Kenren
https://linux-sunxi.org/index.php?title=Linux_mainlining_effort&diff=24133
Linux mainlining effort
2021-04-26T10:21:33Z
<p>Kenren: Add H616 to chips table</p>
<hr />
<div>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.<br />
<br />
=Overview=<br />
The idea is to submit the code needed to run the Linux kernel on Allwinner SoCs upstream, ie. to the official Linux kernel.<br />
<br />
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.<ref>http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf</ref><ref>[http://www.cnx-software.com/2013/01/16/your-new-arm-soc-linux-support-check-list-elce-2012/ Your New ARM SoC Linux Support Check-List – ELCE 2012]</ref><br />
<br />
Where relevant, I have attempted to include who is currently working on an item, mostly separate from any particular mainlining goal.<br />
<br />
=Status=<br />
<br />
The [[Mainline_Kernel_Howto|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|Mainline U-Boot howto]].<br />
<br />
The [[:Category:Mainline_Kernel | Mainline Kernel category ]] gives an overview of currently supported devices.<br />
<br />
== Status Matrix ==<br />
<br />
The goal of this matrix is to give an easy view of work on each SoC worked on by linux-sunxi.<br />
<br />
{| class="wikitable" style="text-align: center; width: 100%;"<br />
|-<br />
! style="width: 13%; text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br>[[R8]]<br />
! [[A20]]<br>[[T2]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br>[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
! [[A100]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[H616]]<br />
! [[R40]]<br>[[T3]]<br />
! [[V3]]|[[V3s]]<br>[[S3]]|[[S3L]]<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | AC97<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Audio Codec]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 5.0<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="3" | ADC<br />
| style="text-align: left;" | GPADC<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Thermal<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: darkgreen;" | ?<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.7<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Touch<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| N/A<br />
| style="background: lightgreen;" | 4.0<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| rowspan="4" style="text-align: left;" | [[CSI|Camera]]<br />
<br />
| style="text-align: left;" | BT656<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: grey; color: white;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" | ISP<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" | MIPI CSI-2<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
<br />
|-<br />
| style="text-align: left;" | Parallel<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: grey; color: white;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Clocks<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 5.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.12<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | CPUFreq (DVFS)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: lightgreen;" | 5.9<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Cryptographic_Hardware_Accelerators|Crypto]]<br />
| N/A<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.10<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Display (SimpleFB)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen" | 4.16<br />
| style="background: lightgreen" | 4.16<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.10<br />
<br />
|-<br />
| rowspan="8" style="text-align: left;" | Display<br />
([https://dri.freedesktop.org/wiki/DRM/ DRM])<br />
<br />
| style="text-align: left;" | CVBS<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Audio<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI CEC<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.14<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Video<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.13<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | LVDS<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 5.7<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | MIPI DSI<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | RGB<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | VGA<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | DMA<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.10<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | [[Ethernet]]<br />
| style="text-align: left;" | [[Ethernet#EMAC|EMAC]]<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.11<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11 <br />
| rowspan="2"| N/A<br />
| N/A<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.1<br />
| style="background: lightgreen;" rowspan="2" | 4.16<br />
| style="background: grey; color: white;" | ?<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.0<br />
| style="background: grey; color: white;" rowspan="2" | ?<br />
| style="background: lightgreen;" rowspan="2" | 4.18<br />
| style="background: lightgreen;" rowspan="2" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | [[Ethernet#GMAC|GMAC]]<br />
<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: grey; color: white;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | EMCE<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | GPU(3D)<br />
| style="text-align: left;" | [[Mali]]<br />
| N/A<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.10<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | [[PowerVR]]<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | HW Spinlocks<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[I2C]]<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.13<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 5.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | I2S<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.11<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | IOMMU<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[IR]]<br />
| style="background: red" | NO<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.0<br />
| N/A<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.10<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Keypad<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | LRADC<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | MsgBox<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[NAND]]<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.12 <ref name="mlc">While the NAND controller itself is supported, the NAND technology found on the vast majority of boards isn't. See [[MTD_Driver#Challenges|this page]] </ref><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc"/><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | PCIe<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<ref name="h6-pcie">Allwinner H6 has a quirky PCIe controller that doesn't map the PCIe address space properly to CPU,<br />
and accessing the PCIe config space, IO space or memory space needs to be wrapped. As Linux doesn't wrap PCIe memory space access, it's not possible to do a proper PCIe controller without using an hypervisor. The BSP kernel modifies the driver to wrap the access, so it's also not generic, and only devices with modified driver will work. https://forum.armbian.com/topic/13529-a-try-on-utilizing-h6-pcie-with-virtualization/</ref><br />
| N/A<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Pinctrl<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 5.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.12<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[PMU]]<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: grey; color: white;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[PWM_Controller|PWM]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: grey; color: white;" | ?<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RSB]]<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RTC]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SATA]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SD/ [[eMMC|MMC]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SMP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen" | PSCI<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | PSCI<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPDIF]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: grey; color: white;" | ?<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPIdev|SPI]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.7<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SRAM Controller|SRAM]]<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 5.0 <br />
| style="background: lightgreen;" | 5.1<br />
| style="background: grey; color: white;" | ? <br />
| style="background: lightgreen;" | 5.10<br />
| style="background: lightgreen;" | 5.10<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB_OTG_Controller_Register_guide#USB_OTG|USB OTG]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: grey; color: white;" | ?<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | USB3<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red" | NO<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 5.5<br />
| N/A<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Video_Engine|VE]] | [[Sunxi-Cedrus]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: grey; color: white;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ? <br />
| style="background: lightgreen;" | 5.10<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Watchdog<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
! style="text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br />
[[R8]]<br />
! [[A20]]<br>[[T2]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br />
[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
| [[A100]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[H616]]<br />
! [[R40]]<br />
[[T3]]<br />
! [[V3]]|[[V3s]]<br>[[S3]]|[[S3L]]<br />
<br />
|}<br />
<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|-<br />
! Legend<br />
|-<br />
| style="background: lightgreen;" | In Linux mainline since version x<br />
|-<br />
| style="background: darkgreen;" | Nobody works on it, but it should be compatible with already done drivers<br />
|-<br />
| style="background: orange;" | Somebody works on it<br />
|-<br />
| style="background: red;" | No support, nobody works on it<br />
|-<br />
| style="background: black; color: white;" | support impossible<br />
|-<br />
| style="background: grey; color: white;" | Status is unknown/to be completed<br />
|}<br />
<br />
== Work In Progress ==<br />
<br />
=== Core Stuff ===<br />
*[[V831]] / [[V833]] Clocks & Pinctrl / RTC / MMC / Watchdog / SPI - Icenowy Zheng [https://patchwork.kernel.org/project/linux-arm-kernel/cover/20201212040157.3639864-1-icenowy@aosc.io/ Support for Allwinner V831 SoC]<br />
<br />
*[[H616]] Clocks & Pinctrl Andre Przywara [https://patchwork.kernel.org/project/linux-arm-kernel/cover/20201202135409.13683-1-andre.przywara@arm.com/ arm64: sunxi: Initial Allwinner H616 SoC support]<br />
<br />
*[[AR100]] firmware (WiP: Samuel Holland) [https://github.com/crust-firmware/crust ARISC firmware for sunxi SoCs ]<br />
<br />
* [[A13]] PSCI Suspend / Resume / CPUIdle (WiP: Antoine Tenart) [http://lists.denx.de/pipermail/u-boot/2016-September/265453.html patch-v1]<br />
<br />
=== Major drivers ===<br />
* [[A100]] DMA/PMU/Watchdog/USB2/USB OTG/MMC(eMMC, SD) Frank Lee [https://patchwork.kernel.org/project/linux-arm-kernel/cover/cover.1604988979.git.frank@allwinnertech.com/ Second step support for A100]<br />
<br />
* [[A83T]]/[[V3s]] MIPI CSI-2 Paul Kocialkowski [https://patchwork.kernel.org/project/linux-arm-kernel/list/?series=369649 Allwinner MIPI CSI-2 support for A31/V3s/A83T ]<br />
<br />
* [[H6]] Hypervisor for PCIe [https://forum.armbian.com/topic/13529-a-try-on-utilizing-h6-pcie-with-virtualization/ A try on utilizing H6 PCIe with "Virtualization"]<br />
<br />
* [[A64]] / [[H3]] / [[H5]] / [[H6]] HDMI Audio - Clément Péron / Marcus Cooper / Jernej Škrabec [https://patchwork.kernel.org/cover/11510511/ Add Allwinner H3/H5/A64 HDMI audio]<br />
<br />
* [[R40]] MIPI-DSI WIP Jagan Teki [https://patchwork.kernel.org/cover/11314031/ drm/sun4i: Allwinner R40 MIPI-DSI support v3] <br />
<br />
* [[AC100]] Audio codec WiP Ondrej Jirman [https://megous.com/git/linux/commit/?h=orange-pi-5.5&id=170d38d650f67657600d4e0e868e0e7110b89ee1 digital part] [https://megous.com/git/linux/commit/?h=orange-pi-5.5&id=ee424255a6fb9280ac27c1953019b768ca973ca7 analog part]<br />
<br />
* [[F1C100s]] USB WIP George Hilliard [https://lore.kernel.org/patchwork/cover/1206936/ Support the Allwinner F1C100s USB stack]<br />
<br />
* [[V3s]] SRAM & Video Decoding Engine (Cedrus) WiP Martin Cerveny [https://patchwork.kernel.org/project/linux-arm-kernel/list/?series=347787 Enable video decoder] ([https://github.com/mcerveny/linux/commits/v3s_videocodec_v4 testing with attached LCD])<br />
<br />
=== Minor drivers ===<br />
<!-- Please move the newest entry to the top --><br />
* [[H6]] RSB Samuel Holland [https://patchwork.kernel.org/project/linux-arm-kernel/cover/20201213235506.25201-1-samuel@sholland.org/ Allwinner H6 RSB support]<br />
* [[A100]] CPUFreq (DVFS) Shuosheng Huang [https://patchwork.kernel.org/project/linux-arm-kernel/list/?series=396055&archive=both&state=* cpufreq: sun50i: add a100 cpufreq support]<br />
* [[A64]] hwspinlock WIP Nikolay Borisov [https://patchwork.kernel.org/cover/11373645/ Add support for hwspinlock on A64 SoC] <br />
* [[A83T]] / [[A64]] / [[H3]] hwspinlock WIP Corentin Labbe (montjoie) [https://lore.kernel.org/patchwork/patch/706512/ RFC,1/3][https://lore.kernel.org/patchwork/patch/706511/ RFC,2/3][https://lore.kernel.org/patchwork/patch/706513/ RFC,3/3]<br />
* [[A10]] / [[A20]] / [[A31]] HDMI Audio WIP Stefan Mavrodiev [https://lore.kernel.org/patchwork/cover/1177803/ Add support for sun4i HDMI audio]<br />
* [[A80]] Thermal sensor WIP Philipp Rossak (embed-3d): https://github.com/embed-3d/linux/branches/all<br />
* [[R40]] PWM (WIP Hao Zhang [https://www.spinics.net/lists/kernel/msg2731498.html patch-v2])<br />
* [[A20]] Keypad (WiP: Yassin Jaffer (ddc) [http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/370079.html patch])<br />
* sun8i-ce/sun8i-ss RSA/ECC WIP Corentin LABBE (no public patch yet)<br />
* 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/<br />
=== Drivers that can still be improved/added ===<br />
<br />
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.<br />
<br />
* [[A31]]/[[A31s]] PWM support ([https://patchwork.ozlabs.org/project/linux-pwm/list/?submitter=70938&state=*&archive=both patch-v4] abandoned by Siarhei Volkau)<br />
* sunxi-musb driver lacks DMA support (with current driver, USB gadgets are limited to PIO, limiting speed to 10MiB/s and causing large CPU)<br />
* DE2 driver has buggy layer support, see [https://patchwork.kernel.org/patch/11145803/]<br />
* DE1/DE2/DE3 writeback support<br />
* A64 audiocodec driver components (sun8i-codec and sun50i-codec-analog) lack support for jack detection<br />
<br />
== Planned for 5.13 ==<br />
<br />
== Merged into 5.12 ==<br />
*[[H616]]<br />
** Clocks<br />
** Pinctrl<br />
<br />
== Merged into 5.11 ==<br />
*[[H6]]<br />
** [[I2S]]<br />
* multiple SoCs<br />
** [[Cedrus]] VP8 decoding<br />
<br />
New Devices Supported<br />
*[[H3]]<br />
** [[FriendlyArm NanoPi R1]]<br />
** [[FriendlyArm ZeroPi]]<br />
*[[S3]]<br />
** [[Elimo Impetus]]<br />
** [[Elimo Initium]]<br />
<br />
== Merged into 5.10 ==<br />
*[[A100]]<br />
** Clocks<br />
** Pinctrl<br />
** [[I2C]]<br />
** Thermal (THS)<br />
<br />
*[[R40]]<br />
** DMA<br />
** GPU [[Mali]]<br />
** [[IR]]<br />
** [[SRAM Controller|SRAM]]<br />
** [[Video_Engine]] | [[Sunxi-Cedrus]]<br />
<br />
*[[V3s]]<br />
** Crypto<br />
** Ethernet<br />
** SimpleFB<br />
** [[SRAM Controller|SRAM]]<br />
<br />
* sun8i-ce/sun8i-ss<br />
** support for PRNG<br />
** support for hashs<br />
** support for TRNG ([[H6]] only)<br />
<br />
New Devices Supported<br />
*[[A100]]<br />
** [[Perf1 board]]<br />
*[[S3l]]<br />
** [[PineCube]]<br />
<br />
== Merged into 5.9 ==<br />
* [[H5]]<br />
** DVFS<br />
<br />
New Devices Supported<br />
* A64<br />
** PinePhone v1.2<br />
<br />
== Merged into 5.8 ==<br />
* [[H6]]<br />
** DVFS<br />
** IOMMU<br />
<br />
* [[A64]] / [[A83T]] / [[H3]] / [[H5]] / [[H6]]<br />
** Message Box<br />
<br />
New Devices Supported<br />
* A20<br />
** [[Olimex_A20-OLinuXino-Lime|OLinuXino Lime (A20)]] eMMC<br />
<br />
== Merged into 5.7 ==<br />
*[[A20]]<br />
** LVDS<br />
<br />
*[[A83T]] and [[A64]]<br />
** Rotate driver<br />
<br />
*[[H6]]<br />
** [[SPIdev|SPI]]<br />
<br />
*[[R40]]<br />
** Thermal<br />
<br />
New Devices Supported<br />
*[[A13]]<br />
** [[PocketBook Touch Lux 3]]<br />
*[[A64]]<br />
** [[PineTab]]<br />
** [[PinePhone]] v1.0 & v1.1<br />
*[[A20]]<br />
** Linutronix Testbox v2<br />
<br />
== Merged into 5.6 ==<br />
* [[A10]]<br />
** CSI (BT656 and Parallel)<br />
<br />
*[[A64]]<br />
** MIPI DSI<br />
** DVFS<br />
<br />
*[[A64]] / [[A83T]] / [[H3]] / [[H5]] / [[H6]]<br />
** Thermal<br />
<br />
*[[H6]]<br />
** PWM<br />
<br />
*[[H3]] / [[H5]] / [[H6]] / [[R40]]<br />
**PMU<br />
<br />
*[[R40]]<br />
** CSI (BT656 and Parallel)<br />
** [[SPIdev|SPI]]<br />
<br />
New Devices Supported<br />
* [[H5]]<br />
** ALL-H3-IT H5 board<br />
** ALL-H5-CC H5 board<br />
* [[H6]]<br />
** [[PineH64]] Model B<br />
<br />
== Merged into 5.5 ==<br />
*[[H3]]<br />
** Deinterlace driver<br />
<br />
*[[H6]]<br />
**Crypto<br />
**GPU(3D) Mali<br />
**USB3 PHY (for boards not needing vbus switching)<br />
<br />
*[[A64]] / [[A80]] / [[A83T]] / [[H3]] / [[H5]] / [[R40]] <br />
**Crypto<br />
<br />
* multiple SoCs<br />
** [[Cedrus]] HEVC/H.265<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** Emlid Neutis<br />
<br />
New Devices Supported<br />
* [[H3]]<br />
** [[FriendlyARM_NanoPi_Duo2]]<br />
<br />
== Merged into 5.4 (LTS)==<br />
* [[A20]]<br />
** CSI (BT656 and Parallel)<br />
* [[A64]]<br />
** IR<br />
* [[H6]]<br />
** IR<br />
** RTC<br />
** SPDIF<br />
New Devices Supported<br />
* [[A64]]<br />
** [[Olimex A64-OLinuXino]] eMMC<br />
* [[H6]]<br />
** [[Tanix TX6]]<br />
* [[S3]]<br />
** [[Lichee Zero Plus]]<br />
<br />
== Merged into 5.3 ==<br />
* [[A64]]<br />
** LRADC<br />
** RGB LCD<br />
* [[A83T]]<br />
** CSI (BT656 and Parallel)<br />
* [[H6]]<br />
** DMA<br />
** Watchdog<br />
* multiple SoCs<br />
** [[Cedrus]] h264<br />
<br />
== Merged into 5.2 ==<br />
* [[A83T]]<br />
** LRADC<br />
** USB OTG<br />
<br />
* [[H6]]<br />
** [[Cedrus]]<br />
<br />
* multiple SoCs<br />
** [[Mali Open Source Driver|Lima]]<br />
** [[Mali Open Source Driver|Panfrost]]<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** Banana-Pi-M2-Zero<br />
<br />
New Devices Supported<br />
* [[H6]]<br />
** [[Beelink GS1]]<br />
** [[Xunlong Orange Pi 3]]<br />
<br />
== Merged into 5.1 ==<br />
* A10<br />
** Cedrus<br />
** PMU<br />
<br />
* A20<br />
** Audio Codec improvements<br />
<br />
* A23<br />
** Display pipeline<br />
** LCD enabled on Q8 A23 tablets<br />
<br />
* A64<br />
** [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c950ca8c35eeb32224a63adc47e12f9e226da241 ARM Architectural Timer errata workaround]<br />
** PMU<br />
** CSI (BT656 and Parallel)<br />
<br />
* A80<br />
** GMAC support<br />
<br />
* CSI in general<br />
** RGR565 support<br />
** JPEG pass-through support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Banana Pi M2+]]<br />
** [[Banana Pi M2 Ultra]]<br />
<br />
* [[LCD]] enabled on [[A13]] [[Q8]] tablets<br />
<br />
== Merged into 5.0 ==<br />
* A64<br />
** Cedrus<br />
** DTS changes for audio codec<br />
<br />
* F1C100s<br />
** initial F1C100s support<br />
<br />
* H6<br />
** Ethernet<br />
** DE3/HDMI support<br />
** USB 2.0<br />
<br />
* H3 / H5<br />
** CSI (BT656 and Parallel) Support<br />
<br />
* H5<br />
** Cedrus<br />
<br />
* R40<br />
** RTC<br />
<br />
* T3<br />
** initial T3 support<ref>https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7badd1d7aa61087010803affa19bb83fb5a0af1</ref><br />
<br />
* V3s<br />
** CSI (BT656 and Parallel) Support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Sinovoip Banana Pi M2 Magic | Banana Pi M2 Magic]]<br />
** [[Banana Pi M3]]<br />
** [[Banana Pi M64]]<br />
** [[Cubietruck]]<br />
** [[Cubietech_Cubietruck_Plus|Cubietruck Plus]]<br />
<br />
New Devices Supported<br />
* [[Xunlong Orange Pi Lite 2]]<br />
* Mapleboard MP130<br />
* LicheePi Nano<br />
* Emlid Neutis N5<br />
<br />
== Merged into 4.20 ==<br />
<br />
* A13 / A20 / A33 / H3<br />
** Cedrus driver<br />
<br />
* A83T<br />
** IR receiver<br />
<br />
* A64<br />
** Cleanup for device tree files<br />
** HDMI support<br />
** Audio codec support (DTS changes will be merged in 5.0)<br />
<br />
* H3 / H5<br />
** SID<br />
<br />
* R40<br />
** SATA<br />
<br />
New Devices Supported<br />
* [[Pine64]] LTS<br />
* [[Xunlong Orange Pi One Plus]]<br />
* [[Xunlong Orange Pi Zero Plus 2]] (H3 variant)<br />
* [[Sinovoip Banana Pi M2+]] (H5 variant)<br />
<br />
== Merged into 4.19 (LTS)==<br />
<br />
* A10 / A13 / A20 / A23 / A33<br />
** SRAM controller / system control<br />
<br />
* A64<br />
** SRAM controller / system control<br />
** Display clocks and bus<br />
** RTC clock output<br />
** PWM<br />
** R_I2C<br />
<br />
* H3<br />
** SRAM controller / system control<br />
<br />
* H6<br />
** MMC<br />
** PMIC<br />
<br />
* R40<br />
** HDMI support<br />
<br />
Board Changes<br />
* SPI flash node for [[Orange Pi PC 2]] and [[Pine64#Variants | Pine64 SoPINE]]<br />
* Use lid switch as wake-up source for A64 based laptops<br />
* LEDs added for [[PineH64]]<br />
<br />
New Devices<br />
* [[Pine Pinebook]]<br />
* Amarula A64-Relic<br />
<br />
== Changes merged up to 4.18 ==<br />
Changes up to 4.18 can be found on [[Linux mainlining history]] page.<br />
<br />
=References=<br />
<references /><br />
<br />
= See also =<br />
* [[Mainline Kernel Howto]]<br />
* [[Possible setups for hacking on mainline]]<br />
* [[Linux Kernel]]<br />
**[[Toolchain]]<br />
<br />
=External Links=<br />
* [http://www.kernel.org kernel.org] - Official website for the Linux Kernel<br />
** [http://github.com/torvalds/linux http://github.com/torvalds/linux] - Linus Torvalds' GitHub account with the upstream Linux kernel<br />
* [http://www.kernel.org/doc/ Linux Kernel documentation index]<br />
* [http://www.kernel.org/doc/man-pages/ Linux Kernel man pages]<br />
* [http://kernelnewbies.org/ Kernel Newbies Site - Excellent source of information for people new to kernel]<br />
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary Linus' kernel tree for 2.6]<br />
* [https://bugzilla.kernel.org/ Kernel bugzilla] - [https://bugzilla.kernel.org/show_bug.cgi?id=15790 Regressions for each of recent versions]<br />
* [http://www.fsfla.org/svnwiki/selibre/linux-libre/ Linux-libre project - Maintains and distributes fully free kernel]<br />
* [http://lingrok.org/ LinGrok, Linux kernel source code cross-reference]<br />
* [https://elixir.bootlin.com/linux/latest/source?a=arm Bootlin LXR (Linux Cross Reference)]<br />
* [http://lists.infradead.org/pipermail/linux-arm-kernel/ linux-arm-kernel - Mailing list archive]<br />
===How to upstream===<br />
* [http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf Your new ARM SoC Linux support check-list! by Thomas Petazzoni of Bootlin]<br />
*[http://www.cnx-software.com/2014/03/04/linux-kernel-upstreaming-how-to-linaro-connect-asia-2014/ Linux Kernel Upstreaming How-To (CNXSoft - Embedded Software Development)]<br />
**[http://www.youtube.com/watch?v=dY7fikYZ42c Matt Porter's YouTube video talk on “Upstreaming 101" (LCA14-111)]<br />
***[http://www.linaro.org/documents/download/65f888c674508efcf9bd5d90398a186a530d01c4c78db Matt Porter's presentation slides for “Upstreaming 101" (LCA14-111)]<br />
**[https://www.youtube.com/watch?v=FiQ5uV_Mm5c Matt Porter's YouTube video talk on “Upstreaming 201" (LCA14-112)]<br />
***[http://www.linaro.org/documents/download/7b9920fcc89589bad9063d87d9137f08530d020b71924 Matt Porter's presentation slides for “Upstreaming 201" (LCA14-112)]<br />
*[http://www.cnx-software.com/2011/08/19/how-to-write-and-submit-a-linux-kernel-patch/ How to Write and Submit a Linux Kernel Patch (CNXSoft - Embedded Software Development)]<br />
** [http://www.youtube.com/watch?v=LLBrBBImJt4 YouTube Video- Write and Submit your first Linux kernel Patch]<br />
** [http://www.cnx-software.com/pdf/kernel-tutorial/kernel_patch_tutorial.pdf Greg Kroah-Hartman Kernel Tutorial Write and Submit your first Linux Kernel Patch]<br />
*[http://www.linaro.org/connect-lca14/resources Linaro resources page from LCA (Linaro Connect Asia) 2014]<br />
<br />
=Notes=<br />
<references group=note /><br />
<br />
[[Category:Development]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Sunxi-Cedrus&diff=23840
Sunxi-Cedrus
2020-12-17T11:55:56Z
<p>Kenren: Update VP8 status http://lkml.iu.edu/hypermail/linux/kernel/2012.1/06531.html</p>
<hr />
<div>Sunxi-Cedrus is an effort to bring hardware-accelerated video decoding and encoding support for Allwinner SoCs to the '''mainline''' Linux kernel. Additional userspace components that interface with the kernel driver are also provided, for typical GNU/Linux-based systems.<br />
<br />
== Components ==<br />
<br />
Support for Sunxi-Cedrus is implemented through various components, either in kernel space or userspace:<br />
* the '''Cedrus V4L2 M2M kernel driver'''<br />
* the '''v4l2-request VAAPI backend'''<br />
<br />
Additional userspace components are also available, for development purposes:<br />
* the '''v4l2-request-test''' standalone tool, that allows testing the -Cedrus VPU driver <br />
* the '''sun4i-specific libdrm''', with support for allocating buffers in the MB32-tiled NV12 format used by the VPU<br />
* the '''dump libVA backend''', that allows dumping metadata and slices from videos <br />
<br />
Video players that support libVA should be compatible with the v4l2-request libVA backend. However, details in implementations might result in incompatibility with certain players. See [[#Player_Support|Player Support]] for the status of tested players.<br />
<br />
== Status ==<br />
<br />
=== Codec Support ===<br />
<br />
Support status for specific codecs in the v4l2-request '''libVA backend''' is presented in the following table:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Codec<br />
! Decoding<br />
! Encoding<br />
|-<br />
| '''MJPEG'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''MPEG2'''<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''MPEG4'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''VP6'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''H264'''<br />
| style="background: mediumseagreen; color: white;" | Supported (early high profile)<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''VP8'''<br />
| style="background: mediumseagreen; color: white;" | Supported (since Linux 5.11)<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''H265'''<br />
| style="background: mediumseagreen; color: white;" | Supported (early)<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''VP9'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|}<br />
<br />
=== SoC Support ===<br />
<br />
Support for specific SoCs in the '''V4L2 M2M kernel driver''' is presented in the following table:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Platform<br />
! Cedrus Driver Status<br />
! DRM Planes Status<br />
|-<br />
| '''A10'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
|-<br />
| '''A13/A10s'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
|-<br />
| '''A20'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
|-<br />
| '''A23'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''A33'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''A64'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H3'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H5'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H6'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
|-<br />
| '''H616'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''R40'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.10)<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''V3/V3s'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|}<br />
<br />
=== Player Support ===<br />
<br />
The following players were tested with the v4l2-request '''libVA backend''':<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Player<br />
! X11 Status<br />
! EGL/GLES Status<br />
! DRM Hardware Plane Status<br />
! X11/Xv Hardware Plane Status<br />
|-<br />
| '''VLC'''<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: tomato; color: white;" | N/A<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''GStreamer'''<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''MPV'''<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''Kodi (downstream)'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: tomato; color: white;" | N/A<br />
|}<br />
<br />
== Installation ==<br />
<br />
=== Linux ===<br />
<br />
The first step to installing Cedrus support is to build a Linux kernel with the latest patch series for the driver. A tree with all the required patches is available at:<br />
* Repository: [https://github.com/bootlin/linux-cedrus https://github.com/bootlin/linux-cedrus]<br />
* Tag: '''release-2019.03 '''<br />
<br />
The following kernel configuration options must be selected:<br />
<pre><br />
CONFIG_MEDIA_SUPPORT<br />
CONFIG_MEDIA_CONTROLLER<br />
CONFIG_MEDIA_CONTROLLER_REQUEST_API<br />
CONFIG_V4L_MEM2MEM_DRIVERS<br />
CONFIG_VIDEO_SUNXI_CEDRUS<br />
</pre><br />
<br />
In addition, the target device must contain the proper description for '''display engine support in its device-tree source'''.<br />
<br />
Details about building a mainline Linux kernel are available on the [[Mainline Kernel Howto]] page.<br />
<br />
Note that the '''associated kernel headers must be installed to the target device''' for the userspace components to build.<br />
<br />
Decoding H.264/H.265 videos can require a large amount of CMA memory, so it is recommended to set a large CMA pool, e.g. using the <code>cma</code> kernel command line parameter. For instance, 256 MiB should be enough to decode 1080p H.264 videos: <code>cma=256M</code>.<br />
<br />
The first mainline kernel release containing Cedrus support is 4.20 (scheduled for release December 2018 or Jan 2019). Newer Cedrus code is available in the bootlin git repository linked above.<br />
<br />
=== libva-v4l2-request ===<br />
<br />
The main userspace component that supports the Cedrus VPU driver is the libva-v4l2-request VAAPI backend. It is available at:<br />
* Repository: [https://github.com/bootlin/libva-v4l2-request https://github.com/bootlin/libva-v4l2-request]<br />
* Tag: '''release-2019.03'''<br />
<br />
The backend can be '''built and installed on the target device''' by following these steps:<br />
<pre><br />
git clone https://github.com/bootlin/libva-v4l2-request -b release-2019.03<br />
cd libva-v4l2-request<br />
./autogen.sh && make && sudo make install<br />
</pre><br />
<br />
=== libdrm-sun4i ===<br />
<br />
'''This is deprecated and no longer needed for other components to build.'''<br />
<br />
libdrm-sun4i imports the updated sun4i-drm Linux kernel driver definitions for installation in userspace and is available at:<br />
* Repository: [https://github.com/bootlin/libdrm-sun4i.git https://github.com/bootlin/libdrm-sun4i.git]<br />
* Branch: '''master'''<br />
<br />
It can be '''built and installed on the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/libdrm-sun4i<br />
cd libdrm-sun4i<br />
./autogen.sh --prefix=/usr && make && sudo make install<br />
</pre><br />
<br />
Alternatively to building libdrm-sun4i, the <code>sun4i_drm.h</code> file can be placed into <code>/usr/include/drm</code> directly.<br />
<br />
=== v4l2-request-test ===<br />
<br />
The v4l2-request-test tool is available at:<br />
* Repository: [https://github.com/bootlin/v4l2-request-test.git https://github.com/bootlin/v4l2-request-test.git]<br />
* Tag: '''release-2019.03'''<br />
<br />
It can be '''built on the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/v4l2-request-test.git -b release-2019.03<br />
cd v4l2-request-test<br />
make<br />
</pre><br />
<br />
=== libva-dump ===<br />
<br />
The libva-dump VAAPI backend is available at:<br />
* Repository: [https://github.com/bootlin/libva-dump.git https://github.com/bootlin/libva-dump.git]<br />
* Branch: '''master'''<br />
<br />
It can be '''built on the host or the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/libva-dump.git<br />
cd libva-dump<br />
./autogen.sh && make && sudo make install<br />
</pre><br />
<br />
== Usage and Configuration ==<br />
<br />
=== System ===<br />
<br />
In order to access the device nodes created by the Cedrus kernel driver, the user that will be decoding videos needs to be added to the <code>video</code> group.<br />
<br />
Alternatively, the permissions of the <code>/dev/video0</code> and <code>/dev/media0</code> nodes can be changed to allow access by this user.<br />
<br />
=== VLC ===<br />
<br />
In order to use VLC with Cedrus, the libva-v4l2-request VAAPI backend must be installed on the system. VLC must also be configured to use VAAPI for video decoding, through the following menus:<br />
* <code>Tools > Preferences > Input / Codecs > Codecs > Hardware-accelerated decoding > VA-API video decoder</code><br />
* <code>Tools > Preferences > Video > Display > Output > X11 video output (XCB)</code><br />
<br />
While OpenGL video output might be supported (with GPU support installed), it was not tested at this point.<br />
<br />
Although VLC has been configured to use VAAPI for video decoding, libVA must be instructed to use libva-v4l2-request through the <code>LIBVA_DRIVER_NAME</code> environment variable :<br />
<pre><br />
export LIBVA_DRIVER_NAME=v4l2_request<br />
vlc path/to/video.mpeg<br />
</pre><br />
<br />
==== Examples ====<br />
<br />
Here are some examples of VLC usage for specific use cases:<br />
* Remote testing without audio, scaling and OSD:<br />
<pre><br />
export LIBVA_DRIVER_NAME=v4l2_request<br />
export DISPLAY=:0<br />
vlc --no-audio --no-autoscale --no-osd --play-and-exit path/to/video.mpeg<br />
</pre><br />
<br />
=== v4l2-request-test ===<br />
<br />
v4l2-request-test is preferably used from its repository directory: the default path to the video slices is relative from the root of the repository. Since the tool uses the DRM KMS device directly, no graphical session (not even a login manager) must be running concurrently.<br />
<br />
The tool currently contains a single preset with slices that allow decoding the first 25 frames of the sample MPEG2 Big Buck Bunny video. More presets can be added from the data dumped with libva-dump.<br />
v4l2-request-test usage is displayed when the tool is called with the <code>-h</code> argument.<br />
<br />
==== Examples ====<br />
<br />
Examples of v4l2-request-test use include:<br />
* Decoding frames at 25 fps in a loop, with information:<br />
<pre><br />
./v4l2-request-test -f 25 -l<br />
</pre><br />
* Decoding frames as fast as possible in a loop:<br />
<pre><br />
./v4l2-request-test -ql<br />
</pre><br />
* Specifying the right nodes when another V4L2 driver is loaded:<br />
<pre><br />
./v4l2-request-test -v /dev/video1 -m /dev/media1<br />
</pre><br />
<br />
== Current Development ==<br />
<br />
From March to August 2018, the development of both the Cedrus V4L2 kernel driver and the Cedrus libVA backend was undertaken by:<br />
* '''Paul Kocialkowski''', intern at Bootlin<br />
* '''Maxime Ripard''', engineer at Bootlin<br />
<br />
This effort was funded by the [https://bootlin.com/blog/allwinner-vpu-crowdfunding/ related crowdfunding] started by Bootlin in February 2018.<br />
<br />
=== 2019.03 Release ===<br />
<br />
A second release of Cedrus was packed in March 2019, following up on numerous interface changes and new platforms support.<br />
<br />
The source code for the required components of the release are available on Bootlin's GitHub space, with the <code>release-2019.03</code> tag:<br />
* [https://github.com/bootlin/linux-cedrus/releases/tag/release-2019.03 linux-cedrus]<br />
* [https://github.com/bootlin/v4l2-request-test/releases/tag/release-2019.03 v4l2-request-test]<br />
* [https://github.com/bootlin/libva-v4l2-request/releases/tag/release-2019.03 libva-v4l2-request]<br />
<br />
=== 2018.07 Release ===<br />
<br />
A first release of Cedrus was presented in July 2018, with an [https://bootlin.com/blog/main-goals-delivery-of-the-allwinner-vpu-crowdfunding associated blog post on the Bootlin blog].<br />
<br />
The source code for the required components of the release are available on Bootlin's GitHub space, with the <code>release-2018.07</code> tag:<br />
* [https://github.com/bootlin/linux-cedrus/releases/tag/release-2018.07 linux-cedrus]<br />
* [https://github.com/bootlin/v4l2-request-test/releases/tag/release-2018.07 v4l2-request-test]<br />
* [https://github.com/bootlin/libva-v4l2-request/releases/tag/release-2018.07 libva-v4l2-request]<br />
* [https://github.com/bootlin/xbmc/releases/tag/release-2018.07 Kodi]<br />
* [https://github.com/bootlin/LibreELEC.tv/releases/tag/release-2018.07 LibreELEC]<br />
<br />
A root filesystem tarball built from the LibreELEC release, which includes Kodi and libva-v4l2-request, is also available (with a checksum and a detached GPG signature):<br />
* [https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz LibreELEC-cedrus-release-2018.07.tar.gz], ([https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz.sha512sum LibreELEC-cedrus-release-2018.07.tar.gz.sha512sum], [https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz.asc LibreELEC-cedrus-release-2018.07.tar.gz.asc])<br />
<br />
The root filesystem includes neither boot software nor kernel support: both have to be installed in addition to extracting the filesystem on the target medium. Instructions to build the kernel are available at: [[#Linux]]<br />
<br />
==== Known Limitations ====<br />
<br />
Some limitations in the software present in the release are known and listed as follows:<br />
* Decoding H264 videos (especially in high resolutions) may consume more memory than there is available in the dedicated pool. This is because Kodi does not yet interact properly with VAAPI when freeing buffers. The result is that Kodi will hang or display a fully black video.<br />
<br />
=== Weekly Reports ===<br />
<br />
Reports on the advancement of the development of Sunxi-Cedrus are posted regularly on the [https://bootlin.com/ Bootlin Blog], starting week 10 of 2018:<br />
* [https://bootlin.com/blog/final-weekly-status-update-allwinner-vpu-support/ Week 35 Final Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-34/ Week 34 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-33/ Week 33 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-32/ Week 32 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-31/ Week 31 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-30/ Week 30 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-main-goals-delivery/ Delivery of Allwinner VPU driver main goals]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-28/ Week 28 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-27/ Week 27 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-26/ Week 26 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-25/ Week 25 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-24/ Week 24 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-23/ Week 23 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-22/ Week 22 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-21/ Week 21 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-20/ Week 20 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-19/ Week 19 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-18/ Week 18 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-17/ Week 17 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-16/ Week 16 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-15/ Week 15 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-14/ Week 14 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-13/ Week 13 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-12/ Week 12 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-11/ Week 11 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-10/ Week 10 Status Update]<br />
<br />
== Community ==<br />
<br />
The community revolving around Sunxi-Cedrus can be contacted through different means:<br />
* The [[Mailing_list|linux-sunxi mailing list]], with the developers involved in carbon copy<br />
* The '''#cedrus''' channel on the [http://freenode.net/ freenode] IRC network<br />
<br />
== Past Development ==<br />
<br />
Initial work on the Sunxi-Cedrus V4l2 kernel driver and libVA backend was carried out by '''Florent Revest''' (kido) during an internship at Bootlin (formerly Free Electrons), resulting in a proof-of-concept driver and associated backend with MPEG2 and partial MPEG4 support for the A13 SoC.<br />
<br />
If you want to try it, you need a board with an A13 SoC, this page will try to guide you from your first steps with the driver to the details of its implementation. Make sure you've checked the known bugs and limitations before using it.<br />
<br />
=== Installation ===<br />
<br />
This procedure has been tested on the NextThingCo's CHIP board but should be adaptable to other A13 boards supported by the 4.8 mainline kernel. The first thing you need to do is to recompile a kernel with the sunxi-cedrus v4l driver and the corresponding device tree entry. You can follow the [[Mainline Kernel Howto]] but using the following repository:<br />
<br />
<pre>https://github.com/FlorentRevest/linux-sunxi-cedrus</pre><br />
<br />
Use menuconfig to enable the VPU driver in Device Drivers -> Multimedia support -> Memory-to-memory multimedia devices -> Sunxi CEDRUS VPU driver. The driver should be compiled into the kernel and not as a module.<br />
<br />
Your kernel will be located in arch/arm/boot/zImage and device tree in arch/arm/boot/dts/sun5i-r8-chip.dtb Don't forget to install kernel headers to your distribution if you want to be able to compile sunxi-cedrus-drv-video.<br />
<br />
On a standard debian jessie system you will need to install the following build dependencies:<br />
<br />
<pre>apt install git autoconf automake libtool pkg-config gcc libdrm-dev libva-dev libx11-dev make g++ vlc xorg</pre><br />
<br />
You will be able to compile and install a newer version of libVA supporting the LIBVA_DRIVER_NAME environment variable and then the sunxi-cedrus libVA backend:<br />
<br />
<pre>git clone https://github.com/01org/libva<br />
cd libva<br />
git checkout 695f99ef0405cf4255e7767b44effb0da2fe706e<br />
./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/<br />
make<br />
sudo make install</pre><br />
<br />
<pre>git clone https://github.com/FlorentRevest/sunxi-cedrus-drv-video<br />
cd sunxi-cedrus-drv-video<br />
./autogen.sh<br />
make # DRM_CFLAGS=-I/path/to/your/linux/headers<br />
sudo make install</pre><br />
<br />
Once installed, make sure you've exported the environment variable telling VA to use the sunxi_cedrus backend, activate the VA X11 decoding in VLC settings (Tools -> Preferences -> Input / Codecs -> set 'Hardware-accelerated decoding' to 'VA-API video decoder via X11') and then run one of the sample media file you can find [http://samplemedia.linaro.org/MPEG2 here] and [http://samplemedia.linaro.org/MPEG4/SVT/ here]<br />
<br />
<pre>xinit&<br />
export DISPLAY=:0.0<br />
export LIBVA_DRIVER_NAME=sunxi_cedrus<br />
vlc big_buck_bunny_480p_MPEG2_MP2_25fps_1800K.MPG<br />
vlc ducks_take_off_420_720p25.mp4</pre><br />
<br />
=== Supported features ===<br />
<br />
* MPEG2 Decoding<br />
* Partial MPEG4 Decoding<br />
<br />
=== Known bugs and limitations ===<br />
<br />
* H264 and H265 are not supported (some of the underlying problems include: allocating 19 surfaces at once and queueing several slices by frames)<br />
* MPEG4 decoding has some glitches. When something moves in a video it usualy draws some kind of trace behind it, this behavior is believed to come from an inconsistency in movement prediction. (VLC also tries to SyncSurface more often than needed which results in error when dequeuing the capture buffers)<br />
* No encoding: this can be added later on but hasn't been tried yet<br />
* Direct rendering: currently, buffers coming out of the v4l driver in a tiled pixel format are converted to a standard YUV pixel format and then rendered on screen by ffmpeg/vlc. As soon as the support for YUV DRM planes will be added to the kernel, this behavior can be replaced and the performances will be much better.<br />
* Currently the video can only be played at a zoom of 1:1, otherwise the scaling is done by ffmpeg in full CPU and it is too slow. Having that in the DRM driver would also allow for hardware accelerated frames scaling.<br />
* We currently can't play a MPEG2 file and then a MPEG4 file (or vice versa) or the output will be full of garbage pixels. This is probably due to some registers of the MPEG engine being kept between the two decoding and "polluting" the MPEG4 decoding with older values from MPEG2 decoding. We should find a way to clear those registers when receiving a S_FMT ioctl in the kernel driver or when closing the video device.<br />
<br />
=== Technical details and implementation ===<br />
<br />
The Cedrus project has provided reverse engineering of the Allwinner's proprietary [[CedarX]] blob for a couple of years. This work has been done on the Allwinner's 3.4 kernel and led to the creation of a libVDPAU backend interfacing with the "cedar_dev" and "disp" kernel drivers available in the vendor's kernel. The "cedar_dev" kernel driver directly mapped registers and memory from the [[Video_Engine | VE]] to the userspace and could potentially be a security risk. Those two drivers couldn't be upstreamed because they don't use any standard API or framework.<br />
<br />
In order to use the [[Video_Engine | VE]] on a mainline kernel, a new proper kernel driver had to be written from scratch with mainlinable methods in mind. The correct way to implement a codec device is to use the "video4linux" framework, referenced as v4l2. v4l2 handles many kind of video devices, some of them are cameras and sends data to a CAPTURE queue, others are screens and use data from an OUTPUT queue. Codec devices require a flow of data from OUTPUT to CAPTURE, they are "memory-to-memory" devices.<br />
<br />
Until now, most of the codec devices were able to handle raw bitstream via a firmware, which means that the OUTPUT queue (containing the compressed input data) could directly contain a MPEG file and the CAPTURE queue was filled with video frames. But the inner working of Allwinner's VPU is different, indeed it requires prior bitstream parsing into smaller frames/slices alongside headers' data. This parsing can not be done in the kernel side since it would be a complex codebase to maintain so it requires a new user-space usecase, hence a new API.<br />
<br />
The "Frame API" described [https://blogs.s-osg.org/planning-future-media-linux-linux-kernel-summit-media-workshop-seoul-south-korea/ here] has been designed for the Rockchip's VP8 decoding support and is implemented [https://lwn.net/Articles/678113/ here] and [https://code.google.com/p/chromium/codesearch#chromium/src/content/common/gpu/media/v4l2_slice_video_decode_accelerator.cc here] The "Frame API" aims to standardize the way VPU drivers should communicate frame by frame with the userspace. The advocated method is to bind "buffers" containing slice data from the OUTPUT queue to "extended controls" containing frame's header. The extended controls mechanism allows to send complex data structures to the kernel and program device's registers accordingly. However, the userspace might want to queue several frames in a row and set the corresponding extended controls at the same time. If the registers are programmed at the time an extended control is received, this means that at the time of processing a buffer, the registers might be programmed for another frame. This scenario is to be fixed by the "Request API".<br />
<br />
The idea behind this API is to allow atomic operations like a QBUF and a S_EXT_CTRLS. As of August 2016, the "Request API" is still at the state of RFC, it has had quite a few proposals for the past few years but none of them got accepted into the kernel. [https://openiotelc2016.sched.org/event/6DAG/v4l2-on-steroids-the-request-api-laurent-pinchart The latest RFCs], related to the Media API are not able to handle controls so sunxi-cedrus had to use an [https://lwn.net/Articles/641204/ older RFC.]<br />
<br />
The "sunxi-cedrus" kernel driver is hence made of a m2m v4l2 driver handling requests of MPEG2 or MPEG4 frames data with a standard header extended control. At the time of processing the m2m queue, it programs the VPU's registers depending on the used codec. Currently [https://lkml.org/lkml/2016/8/25/251 MPEG2] and [https://lkml.org/lkml/2016/8/25/248 MPEG4] are the only supported formats but H264 and H265 would be the next step.<br />
<br />
A second limitation of the Allwinner's VPU is the need for buffers in the lower 256M of RAM. In order to allocate large sets of data in this area, "sunxi-cedrus" [https://lkml.org/lkml/2016/8/25/249 reserves a DMA pool] that is then used by videobuf's dma-contig backend() to allocate input and output buffers easily and integrate that with the v4l QBUF/DQBUF APIs.<br />
<br />
From the userspace side of things, all the prior bitstream parsing is done by VA users(such as ffmpeg). Standard VA-API headers are given to the VA backend "sunxi-cedrus-drv-video" which is just in charge of ensuring a correspondence between v4l2 buffers and controls and VA structures. We can compare a VAPicture to a buffer plus an extended control in the OUTPUT queue and a VASurface to a multiplanar buffer in the CAPTURE queue. An Image is then "derived" from a Surface to produce a standard set of NV12 buffers that can be shown on screen by VLC for example. VA-API was an extremely appropriate choice compared to VDPAU since the data it provides are often very similar to the ones the VPU expects.<br />
<br />
=== More info ===<br />
<br />
You can HL Florent Revest (kido) on #cedrus on irc.freenode.net for in depth questions<br />
<br />
[[Category:Cedrus]]<br />
<br />
[[Category:Software]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Comparison_of_chip_maker_openness&diff=23772
Comparison of chip maker openness
2020-11-29T17:08:04Z
<p>Kenren: Add Lima/Panfrost status</p>
<hr />
<div>= Header =<br />
Note: work-in-progress. Please add more makers, references, update missing fields, etc. NO marketing talk. Table should be concise (ie. for TL;DR people), with notes and examples explained later in the page. Shall this table focus on particular SoCs? Group similar tier socs?<br />
<br />
If you can, please add _popular_ SoCs (those from RPi 1/2/3, amlogic, rockchip, samsung, marvel, qualcomm, intel etc.).<br />
<br />
= Table =<br />
<br />
{| class="wikitable" style="width: 100%;" <br />
|-<br />
! Maker <br />
! Model <br />
! Year.Month<br />
! BSP <br />
! Bootloader <br />
! DRAM controller <br />
! Storage <br />
! Networking <br />
! Graphics (2D)<br />
! Graphics (3D)<br />
! A/V codecs<br />
! Audio <br />
! Security accel<br />
! Notes<br />
<br />
|-<br />
| Allwinner <br />
| A20 <br />
| 2012.12<br />
| style="background: orange" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: yellow" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| community support done by linux-sunxi<br />
<br />
|-<br />
| Allwinner<br />
| A64<br />
| 2015.02?<br />
| style="background: orange" |<br />
| style="background: gray" |<br />
| style="background: gray" |<br />
| style="background: gray" |<br />
| style="background: gray" |<br />
| style="background: gray" |<br />
| style="background: darkgreen" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
|<br />
<br />
|-<br />
| Allwinner<br />
| H3<br />
| 2014.10<br />
| style="background: orange" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: grey" |<br />
| style="background: darkgreen" |<br />
| style="background: yellow" |<br />
| style="background: darkgreen" |<br />
| style="background: grey" |<br />
|<br />
<br />
|-<br />
| Amlogic<br />
| S905/X<br />
| 2015.Q2/2016.Q2<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
|<br />
<br />
|-<br />
| Broadcom<br />
| BCM2835<br />
| 2013.02<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| RPi1<br />
<br />
|-<br />
| Broadcom<br />
| BCM2836<br />
| 2015.02<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| RPi2<br />
<br />
|-<br />
| Broadcom<br />
| BCM2837<br />
| 2016.02<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| RPi3<br />
<br />
|-<br />
| Rockchip<br />
| rk3288<br />
| 2014.08<br />
| style="background: yellow" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| style="background: darkgreen" |<br />
| adopted by google partners in chromebooks, resulting in good license compliance<br />
|-<br />
| Rockchip<br />
| rk3399<br />
| 2016.Q2<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
| style="background: grey" |<br />
|<br />
<br />
|}<br />
<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|-<br />
! Legend<br />
|-<br />
| style="background: lightgreen;" | Good support by maker (well working drivers in mainline kernel)<br />
|-<br />
| style="background: darkgreen;" | Good support by community (well working drivers in mainline kernel)<br />
|-<br />
| style="background: yellow;" | Open source code, no licensing issues or good docs are available<br />
|-<br />
| style="background: orange;" | Source available, bad licensing<br />
|-<br />
| style="background: red;" | Closed source or blobbed only<br />
|-<br />
| style="background: black; color: white;" | Actively fighting/colliding with open source<br />
|-<br />
| style="background: grey; color: white;" | Status is unknown<br />
|-<br />
| style="" | Feature N/A<br />
|}<br />
<br />
= Notes and references =<br />
<br />
== RK3288 ==<br />
<br />
The RK3288 has had considerable adoption by google partners for use in Chromebooks. It has been around long enough that the rockchip linux community has had time to get both its boot process reverse-engineered (without needing proprietary tools), as well as get both u-boot and linux kernel mainline upstream support for all features. Towards the end of 2016 a chinese software libre developer working for Rockchip was permitted to release a gstreamer plugin and associated v4l2 kernel modifications sufficient to have an entirely libre video decode engine up and running.<br />
<br />
The only down-side of the popularity of the RK3288 from the google "chrome" bandwagonning effect is the sheer overwhelming amount of crap that people come up with and post online, making it much harder to find useful information than it really should be. Actual useful resources such as how to boot the processor from scratch over its USB-OTG interface with an entirely libre toolchain, not requiring any proprietary crud at all or requiring any google-sponsored tools, processes or procedures (mandatory use of UEFI boot partitions for example), are completely drowned out by wordpress postings of yet another person's "recipe for installing {insert OS of their choice}". The best resource on the RK3288 is therefore the #linux-rockchip freenode channel, which is populated by technically well-informed individuals. The developer board of choice at the moment for the RK3288 is the Firefly.<br />
<br />
Lastly it does have to be pointed out that Rockchip are not *actively* involved (with the exception of one employee), in supporting or endorsing cooperation, collaboration or any other form of active participation with the Software Libre Community. The only reason then why the RK3288 has such good support is down to its use in chromebooks (where google would clearly have required full legal copyright compliance as part of its use in products) combined with the active efforts of the Software Libre Community (including one Chinese citizen working for Rockchip) to mainline it.<br />
<br />
== A20 ==<br />
<br />
The A20 is the pin-compatible upgrade of the A10. It is one of the Allwinner processors that has had significant (unfunded, independent) reverse-engineering effort put into it. Several other processors from Allwinner have been based around it (A13, A13s, etc). As it is a "kitchen-sink" style processor it includes GbE, SATA-II, can handle dual screen 1920x1080, and can address up to 2GB of RAM. For $4.50 including the PMIC it is extremely powerful for its price, and has the huge benefit of being around for long enough that the software toolchain is entirely libre. This *includes* the [[FEL/USBBoot|USB FEL mode]] which is incredibly easy to use as a means to boot (or recover) a system. The FEL mode loader has been part of sunxi-tools since at least 2012.<br />
<br />
Booting from NAND works, but the boot ROM may be a bit picky about which NAND ICs are supported and which are not. More information can be found at the [[NAND#More_information_on_BROM_NAND|NAND]] page. A20 also supports booting from other media, such as SD cards, eMMC and SPI NOR flash.</div>
Kenren
https://linux-sunxi.org/index.php?title=Cedrus/Supported_Codec_Feature_Matrix&diff=23769
Cedrus/Supported Codec Feature Matrix
2020-11-26T13:14:28Z
<p>Kenren: added incomplete H6 status</p>
<hr />
<div>In this colorful table is represented what is understood and supported by hardware in the '''left side''', the designation VE+Number are the video engine hardware version and above are the SoCs were found. Here are only SoCs and hardware versions which was confirmed or reported, the ones that aren't here should and are expected to be very equal in mode.<br />
<br />
The '''right side''' represents the state of software. Take notice about the PoC (Proof of Concept) in which only exists for demonstration the correct understanding about the working of the hardware, sometimes the creation of this PoC is skipped.<br />
<br />
{| border="1px" cellpadding="4px" style="border-collapse:collapse; border: 0px solid #A44444; text-align: center;"<br />
|colspan=" 3" style="border: 0px;"| <br />
|A10/A20 || A13 || A31s || A80 || A33 || H3 || A64 || H5 || H6 <br />
|rowspan="99" style="border: 0px; min-width: 10px"| ||colspan="2" style="border: 0px"| Software Support<br />
|-<br />
!style="border: 0px"| !! subengine !! codec <br />
! VE1623 !! VE1625 !! VE1633 !! VE1639 !! VE1667 !! VE1680 !! VE1689 !! VE1718 !! VE????<br />
! PoC !! libvdpau-sunxi !! sunxi-cedrus (v4l)<br />
|-style="background-color: #77FF77"<br />
|rowspan="18"| decoder ||rowspan="11"| [[VE_Register_guide#MPEG_Engine_Registers|0x100]] || JPEG/MJPEG <br />
|colspan="9"| baseline profile only<br />
| ||style="background-color: #FFFFFF"|n.a.||style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #77FF77"<br />
| MPEG1 <br />
|colspan="9"|<br />
| ||||style="background-color:#FFFF77"|<br />
|-style="background-color: #77FF77"<br />
| MPEG2 <br />
|colspan="9"|<br />
| ||||<br />
|-style="background-color: #FFFF77"<br />
| MPEG4 <br />
|colspan="9"|<br />
|style="background-color:#FFFFFF"| ||||<br />
|-style="background-color: #FFFF77"<br />
| MS-MPEG4 <br />
|colspan="9"|<br />
|style="background-color: #FFFFFF"| ||rowspan="3" style="background-color: #FFFFFF"|n.a.||rowspan="9" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #FF7777"<br />
| WMV1 <br />
|colspan="9"|<br />
|<br />
|-style="background-color: #FF7777"<br />
| WMV2 <br />
|colspan="9"|<br />
|<br />
|-style="background-color: #FFFF77"<br />
| DIVX <br />
|colspan="9"|<br />
|style="background-color: #FFFFFF"| ||<br />
|-style="background-color: #FFFF77"<br />
| XDIV <br />
|colspan="9"|<br />
|style="background-color: #FFFFFF"| ||rowspan="5" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #FF7777"<br />
| H263 <br />
|colspan="9"|<br />
|<br />
|-style="background-color: #FF7777"<br />
| VP6 <br />
|colspan="9"|<br />
|<br />
|-style="background-color: #CCCCCC"<br />
| rowspan=" 2"| ? || Sorenson <br />
|colspan="9"| Unconfirmed<br />
|<br />
|-style="background-color: #CCCCCC"<br />
| AVS <br />
|colspan="9"| Unconfirmed<br />
|<br />
|-style="background-color: #77FF77"<br />
| rowspan=" 2"| [[VE_Register_guide#H264_Engine_Registers|0x200]] || H264 <br />
|colspan="9"|<br />
|style="background-color:#FFFFFF"| ||||(early high profile)<br />
|-style="background-color: #FFFF77"<br />
| VP8 <br />
|colspan="9"|<br />
| ||style="background-color: #FFFFFF"| n.a. ||rowspan="3" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #FF7777"<br />
| rowspan=" 1"| [[VE_Register_guide#VC1_Engine_Registers|0x300]] || VC1/WMV9 <br />
|colspan="9"|<br />
|style="background-color: #FFFFFF"| ||<br />
|-style="background-color: #CCCCCC"<br />
| rowspan=" 1"| [[VE_Register_guide#RMVB_Engine_Registers|0x400]] || RMVB<br />
|colspan="9"| Unconfirmed<br />
| ||style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #77FF77"<br />
| rowspan=" 1"| [[VE_Register_guide#HEVC_Engine_Registers|0x500]] || H265 <br />
|colspan="5" style="background-color: #FFFFFF"| ||colspan="3"|8bits ||colspan="1"|10bits<br />
|style="background-color: #FFFFFF"| || ||(early)<br />
|-style="background-color: #77FF77"<br />
|rowspan=" 2"|encoder <br />
|rowspan=" 2"| [[VE_Register_guide#ISP_Engine_Registers|0xa00]]</br>[[VE_Register_guide#AVC_Encoder_Engine_Registers|0xb00]]<br />
| JPEG/MJPEG<br />
|colspan="2"|baseline profile only||colspan="7" style="background-color: #FFAA77"| not tried because of no time to try<br />
| ||style="background-color: #FFFFFF"|n.a.||rowspan="3" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #77FF77"||rowspan="10" style="background-color: #FFFFFF"|n.a.<br />
| H264 <br />
|colspan="2"|baseline profile only||colspan="7" style="background-color: #FFAA77"| not tried because of no time to try<br />
|No B frames ||style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #CCCCCC"<br />
|rowspan=" 1"|decoder ||rowspan=" 1"| 0xe00 || JPEG<br />
|colspan="5" style="background-color: #FFFFFF"| ||colspan="4"| Unconfirmed<br />
| ||style="background-color: #FFFFFF"|n.a.<br />
|-<br />
|}<br />
<br />
<br />
As can be seen in this table with the color of green, the most used video codecs are already fully reversed engineered. The codecs that are still missing are too old or/and obsolete and aren't used anymore for the creation of new video content. The content (video files) that exists encoded in this codecs is in the great majority not beyond standard definition, meaning that the task of decoding is easy done with just software decode by cpu.<br />
For this reason this codecs aren't a priority to work on.<br />
<br />
If anyone has a need for a yet to be support codec, please contact the people involved in the cedrus project to find what can be arranged.<br />
<br />
[[Category:Cedrus]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Allwinner_SoC_Family&diff=23691
Allwinner SoC Family
2020-11-18T18:16:21Z
<p>Kenren: A100 is a Cortex-A53, so 64bit CPU</p>
<hr />
<div>= SoC series =<br />
'''A''' series processors are used for mobile applications, mainly referring to tablet application here;<br />
<br />
'''B''' for "Book", used for E-book tablet reader. <br />
<br />
'''H''' for “Homlet”, mainly used in home entertainment applications, including smart OTT boxes, HDMI mini PCs, gaming boxes, etc;<br />
<br />
'''V''' for video-related applications, including video surveillance, automotive DVR, etc;<br />
<br />
'''T''' series processors target the Automotive products like ADAS. <br />
<br />
'''F''' series are processors based on Allwinner’s melis OS, mainly used in smart video radios, video MP5, etc;<br />
<br />
== "A"-Series ==<br />
Based on ARMv7 Cortex-A cores (Cortex-A7, A8 and A15) targeted for high-end devices like digital media players, tablets, and netbooks:<br />
{| class="wikitable"<br />
| [[A10|Allwinner A10]] || <small>(sun4i)</small> || 1 x Cortex-A8 CPU-core<br />
|-<br />
| [[A13|Allwinner A13]] || <small>(sun5i)</small> || 1 x Cortex-A8 CPU-core<br />
|-<br />
| [[A10s|Allwinner A10s]] || <small>(sun5i)</small> || 1 x Cortex-A8 CPU-core<br />
|-<br />
| [[A20|Allwinner A20]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=45</ref> || <small>(sun7i)</small> || 2 x Cortex-A7 CPU-cores<br />
|-<br />
| [[A23|Allwinner A23]] || <small>(sun8i)</small> || 2 x Cortex-A7 CPU-cores<br />
|-<br />
| [[A31|Allwinner A31]] || <small>(sun6i)</small> || 4 x Cortex-A7 CPU-cores<br />
|-<br />
| [[A31s|Allwinner A31s]] || <small>(sun6i)</small> || 4 x Cortex-A7 CPU-cores<br />
|-<br />
| [[A33|Allwinner A33]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=23</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-cores<br />
|-<br />
| [[A40i|Allwinner A40i]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=69</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-cores<br />
|-<br />
| [[A50|Allwinner A50]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=72</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-cores<br />
|-<br />
| [[A80|Allwinner A80]] || <small>(sun9i)</small> || 4 x Cortex-A7 CPU-cores + 4 x Cortex-A15 CPU-cores&nbsp;<br /><small>(using ARM big.LITTLE heterogeneous CPU architecture)</small><br />
|-<br />
| [[A83T|Allwinner A83T]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=24</ref> || <small>(sun8i)</small>&nbsp; || 8 x Cortex-A7 CPU-cores<br />
|}<br />
<br />
'''64-bit'''<br />
{| class="wikitable"<br />
| [[A63|Allwinner A63]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=67</ref> || <small>(sun50i)</small>&nbsp; || 4 x Cortex-A53 CPU-core<br />
|-<br />
| [[A64|Allwinner A64]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=9</ref> || <small>(sun50i)</small>&nbsp; || 4 x Cortex-A53 CPU-core<br />
|-<br />
| [[A100|Allwinner A100]] || <small>(sun50i)</small>&nbsp; || 4 x Cortex-A53 CPU-cores<br />
|-<br />
| [[A133|Allwinner A133]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=93</ref> || <small>(sun50i)</small> || 4 x Cortex-A53 CPU-core<br />
|}<br />
<br />
== "B"-series ==<br />
<br />
{| class="wikitable"<br />
| [[B288|Allwinner B288]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=59</ref> || <small>(sun8i)</small> || 2 x Cortex-A7 CPU-core<br />
|-<br />
| [[B300|Allwinner B300]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=86</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|}<br />
<br />
== "H"-Series ==<br />
Based on ARMv7/ARMv8 Cortex-A cores (A7/A53) targeted for video OTT (over-the-top) boxes and high-end gaming consoles:<br />
{| class="wikitable"<br />
| [[H2+|Allwinner H2+]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=62</ref> || <small>(sun8i)</small>&nbsp; || 4 x Cortex-A7 CPU-core&nbsp;<br />
|-<br />
| [[H3|Allwinner H3]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=47</ref> || <small>(sun8i)</small>&nbsp; || 4 x Cortex-A7 CPU-core&nbsp;<br />
|-<br />
| [[H8|Allwinner H8]] || <small>(sun8i)</small> || 8 x Cortex-A7 CPU-core<br />
|-<br />
| [[H80|Allwinner H80]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=46</ref> || <small>(sun8i)</small> || 8 x Cortex-A7 CPU-core<br />
|}<br />
<br />
'''64-bit'''<br />
{| class="wikitable"<br />
| [[H5|Allwinner H5]]<ref>https://web.archive.org/web/20180131124325/http://www.allwinnertech.com/index.php?c=product&a=index&id=57</ref>&nbsp; || <small>(sun50i)</small>&nbsp; || 4 x Cortex-A53 CPU-core<br />
|-<br />
| [[H6|Allwinner H6]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=66</ref>&nbsp; || <small>(sun50i)</small>&nbsp; || 4 x Cortex-A53 CPU-core<br />
|-<br />
| [[H64|Allwinner H64]]<ref>http://web.archive.org/web/20160425223052/http://www.allwinnertech.com/en/clq/H_series/6100.html</ref> || <small>(sun50i)</small> || 4 x Cortex-A53 CPU-core<br />
|-<br />
| [[H313|Allwinner H313]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=90</ref> || <small>(sun50i)</small> || 4 x Cortex-A53 CPU-core<br />
|-<br />
| [[H616|Allwinner H616]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=89</ref> || <small>(sun50i)</small> || 4 x Cortex-A53 CPU-core<br />
|}<br />
<br />
== "R"-Series ==<br />
<br />
{| class="wikitable"<br />
| [[R6|Allwinner R6]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=79</ref> || <small>(sun3i)</small> || 1 x ARM926EJ-S CPU-core<br />
|-<br />
| [[R7|Allwinner R7]]<ref>https://web.archive.org/web/20191218202340/http://www.allwinnertech.com/index.php?c=product&a=index&id=82</ref> || <small>(sun8i)</small> || 1 x Cortex-A7 CPU-core<br />
|-<br />
| [[R8|Allwinner R8]]<ref>http://web.archive.org/web/20160510053338/http://www.allwinnertech.com/en/clq/R_series/2015/0514/R8.html</ref> || <small>(sun5i)</small>&nbsp; || 1 x Cortex-A8 CPU-core<br />
|-<br />
| [[R11|Allwinner R11]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=83</ref> || <small>(sun8i)</small> || 1 x Cortex-A7 CPU-core<br />
|-<br />
| [[R16|Allwinner R16]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=51</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|-<br />
| [[R40|Allwinner R40]]<ref>https://web.archive.org/web/20191229233801/http://www.allwinnertech.com/index.php?c=product&a=index&id=56</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|-<br />
| [[R58|Allwinner R58]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=49</ref>&nbsp; || <small>(sun8i)</small> || 8 x Cortex-A7 CPU-core<br />
|-<br />
| [[R311|Allwinner R311]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=84</ref>&nbsp; || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|-<br />
| [[R328|Allwinner R328]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=85</ref>&nbsp; || <small>(sun8i)</small> || 2 x Cortex-A7 CPU-core<br />
|-<br />
| [[R818|Allwinner R818]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=92</ref> || <small>(sun8i)</small> || 4 x Cortex-A53 CPU-core<br />
|}<br />
<br />
The Allwinner R8 is repackaged version of the A13. This SoC gets used in the minicomputer presented in Next Thing Co.'s [[NextThingCo CHIP|''C.H.I.P.'']] kickstarter project ("The $9 computer")<ref>http://nextthing.co/</ref>.<br />
<br />
By comparing the product pages the R16 seems to be a relabeled version of A33. This is somewhat confirmed by the (identical) SoC ID the BROM reports.<ref>https://groups.google.com/d/msg/linux-sunxi/vx6oQMy-nis/vgVc8d1KBAAJ</ref><br />
<br />
'''64-bit'''<br />
{| class="wikitable"<br />
| [[R18|Allwinner R18]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=68</ref> || <small>sun50i</small> || 4 x Cortex-A53 CPU-core<br />
|-<br />
| [[R329|Allwinner R329]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=91</ref>&nbsp; || <small>(sun50i)</small> || 2 x Cortex-A53 CPU-core<br />
|}<br />
<br />
== "T"-series ==<br />
<br />
{| class="wikitable"<br />
| [[T2|Allwinner T2]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=39</ref> || <small>(sun8i)</small> || 2 x Cortex-A7 CPU-core<br />
|-<br />
| [[T3|Allwinner T3]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=41</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|-<br />
| [[T7|Allwinner T7]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=71</ref> || <small>(sun8i)</small> || 6 x Cortex-A7 CPU-core<br />
|-<br />
| [[T8|Allwinner T8]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=43</ref> || <small>(sun8i)</small> || 8 x Cortex-A7 CPU-core<br />
|}<br />
<br />
<br />
'''64-bit'''<br />
{| class="wikitable"<br />
| [[T5|Allwinner T5]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=94</ref> || <small>(sun8i)</small> || 4 x Cortex-A53 CPU-core<br />
|}<br />
<br />
== "V"-series ==<br />
<br />
{| class="wikitable"<br />
| [[V3|Allwinner V3]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=37</ref> || <small>(sun8i)</small> || 1 x Cortex-A7 CPU-core<br />
|-<br />
| [[V3s|Allwinner V3s]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=38</ref> || <small>(sun8i)</small> || 1 x Cortex-A7 CPU-core<br />
|-<br />
| [[V5|Allwinner V5]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=70</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|-<br />
| [[V40|Allwinner V40]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=36</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|-<br />
| [[V66|Allwinner V66]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=35</ref> || <small>(sun8i)</small> || 8 x Cortex-A7 CPU-core<br />
|-<br />
| [[V316|Allwinner V316]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=87</ref> || <small>(sun8i)</small> || 2 x Cortex-A7 CPU-core<br />
|-<br />
| [[V536|Allwinner V536]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=88</ref> || <small>(sun8i)</small> || 2 x Cortex-A7 CPU-core<br />
|}<br />
<br />
== "F"-Series ==<br />
:'''{{note|The F series is not supported by the linux-sunxi community due to lack of developers and hardware. ''sun3i'' have only official linux support, ''sunii'' have no linux support, only Allwinner's "Melis" RTOS.}}'''<br />
<br />
Based on ARMv5 ARM926-EJS core and currently targeted for low market devices such as cheap ebook readers, etc.<br />
<br />
F1C700 seems to be a remarked A13, and it's ARMv7.<br />
<br />
{| class="wikitable"<br />
| [[C100|Boxchip C100]] || <small>(sun3i)</small><br />
|-<br />
| [[E200|Boxchip E200]] || <small>(sun3i)</small><br />
|-<br />
| [[F10|Boxchip F10]] <small>aka SoChip SC9800 aka Teclast T8100</small>&nbsp; || <small>(sunii)</small><br />
|-<br />
| [[F13|Boxchip F13]] || <small>(sunii)</small><br />
|-<br />
| [[F13|Boxchip F15]] <small>aka SoChip SC8600 aka Teclast T7200</small> || <small>(sunii)</small><br />
|-<br />
| [[F18|Boxchip F18]] || <small>(sunii)</small><br />
|-<br />
| [[F20|Boxchip F20]] || <small>(sun3i)</small><br />
|-<br />
| [[F23|Allwinner F23]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=30</ref> || <small>(suniv)</small><br />
|-<br />
| [[F25|Allwinner F25]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=31</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1C100A|Allwinner F1C100A]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=29</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1C100s|Allwinner F1C100s]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=73</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1C200s|Allwinner F1C200s]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=74</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1C500|Allwinner F1C500]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=27</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1C500s|Allwinner F1C500s]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=75</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1C600|Allwinner F1C600]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=28</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1C700|Allwinner F1C700]] || <small>(sun5i)</small><br />
|-<br />
| [[F1C800|Allwinner F1C800]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=76</ref> || <small>(suniv)</small><br />
|-<br />
| [[F1D100|Allwinner F1D100]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=64</ref> || <small>(suniv)</small><br />
|}<br />
<br />
== "MR"-series ==<br />
<br />
{| class="wikitable"<br />
| [[MR100|Allwinner MR100]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=77</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|-<br />
| [[MR133|Allwinner MR133]]<ref>http://www.allwinnertech.com/index.php?c=product&a=index&id=81</ref> || <small>(sun8i)</small> || 4 x Cortex-A7 CPU-core<br />
|}<br />
<br />
= 2013 naming scheme change =<br />
<br />
Initially, Allwinner named their SoCs chronologically:<br />
* sun4i = A10<br />
* sun5i = A13/A10s<br />
* sun6i = A31<br />
* sun7i = A20<br />
<br />
but, somewhere in 2013, Allwinner decided to update their naming scheme to be based on the ARM core used instead: (taken from the A80 SDK kernel code).<br />
<br />
Note: SoCs with "?" have never appeared on Allwinner's website. <ref>https://github.com/tinalinux/brandy/blob/r40-v1.y/SUNXI_README</ref><br />
<br />
{| class="wikitable"<br />
! sunxi (arm cores) !! sunxiwx (soc id) !! p (rev id) !! soc name !! cores !! notes<br />
|-<br />
| sun3i (arm926ejs) || sun3iw1 (0x1663) || sun3iw1p1 || [[F1C100s]], [[F1C100A]], [[F1C200s]], [[F1C500]], [[F1C500s]], [[F1C600]], [[F1D100]], [[R6]] || 1xARM926EJ-S<br />
|-<br />
| style="text-align: left;" rowspan="4" | sun4i (cortex-a8) <br />
| sun4iw1 (0x1623) || sun4iw1p1 || [[A10]] || 1xCortex-A8<br />
|-<br />
| style="text-align: left;" rowspan="3" | sun4iw2 (0x1625)<br />
| sun4iw2p1 || [[A13]] || 1xCortex-A8<br />
|-<br />
| sun4iw2p2 || [[A12]] || ?<br />
|-<br />
| sun4iw2p3 || [[A10s]] || 1xCortex-A8<br />
|-<br />
| style="text-align: left;" rowspan="20" | sun8i <br />
(cortex-a7 smp)<br />
<br />
| style="text-align: left;" rowspan="2" | sun8iw1 (0x1633)<br />
<br />
| sun8iw1p1 || [[A31]] || 4xCortex-A7<br />
|-<br />
| sun8iw1p2 || [[A31s]] || 4xCortex-A7<br />
|-<br />
| style="text-align: left;" rowspan="2" | sun8iw2 (0x1651)<br />
<br />
| sun8iw2p1 || [[A20]] || 2xCortex-A7<br />
|-<br />
| sun8iw2p2 || ? || ?<br />
|-<br />
| style="text-align: left;" rowspan="2" | sun8iw3 (0x1650)<br />
<br />
| sun8iw3p1 || [[A23]] || 2xCortex-A7<br />
|-<br />
| sun8iw3p2 || ? || ?<br />
|-<br />
| sun8iw5 (0x1667) || sun8iw5p1 || [[A33]] || 4xCortex-A7<br />
|-<br />
| sun8iw6 (0x1673) || sun8iw6p1 || [[A83T]] || 8xCortex-A7<br />
|-<br />
| sun8iw7 (0x1680) || sun8iw7p1 || [[H3]], [[H2+]] || 4xCortex-A7<br />
|-<br />
| style="text-align: left;" rowspan="2" | sun8iw8 (0x1681)<br />
<br />
| sun8iw8p1 || [[V3]], [[V3s]] || 1xCortex-A7 || called V30 in allwinner's kernel source<br />
|-<br />
| sun8iw8p2 || ? || ? || called V33 in allwinner's kernel source<br />
|-<br />
| sun8iw10 (0x1699) || sun8iw10p1 || [[B288]], [[B100]] || 2xCortex-A7<br />
|-<br />
| style="text-align: left;" rowspan="4" | sun8iw11 (0x1701)<br />
<br />
| sun8iw11p1 || [[R40]], [[V40]], [[T3]], [[A20e]]? || 4xCortex-A7<br />
|-<br />
| sun8iw11p2 || ?? || 4xCortex-A7<br />
|-<br />
| sun8iw11p3 || ?? || 4xCortex-A7<br />
|-<br />
| sun8iw11p4 || ?? || 4xCortex-A7<br />
|-<br />
| sun8iw12 (0x1721) || sun8iw12p1 || [[V5]] || 4xCortex-A7<br />
|-<br />
| sun8iw15 (0x1755) || sun8iw15p1 || [[R311]] || 4xCortex-A7<br />
|-<br />
| sun8iw16 (0x1816) || sun8iw16p1 || [[V356]] || 2xCortex-A7<br />
|-<br />
| sun8iw17 (0x1708) || sun8iw17p1 || [[T7]] || 6xCortex-A7<br />
|-<br />
| style="text-align: left;" rowspan="2" | sun9i <br />
(cortex-a15/cortex-a7 big.LITTLE) <br />
<br />
| style="text-align: left;" rowspan="2" | sun9iw1 (0x1639)<br />
| sun9iw1p1 || [[A80]] || 4xCortex-A7 + 4xCortex-A15<br />
|-<br />
| sun9iw1p2 || [[A80T]] || ?<br />
|-<br />
| style="text-align: left;" rowspan="7" | sun50i <br />
(cortex-a53 smp) <br />
| sun50iw1 (0x1689) || sun50iw1p1 || [[A64]] || 4xCortex-A53<br />
|-<br />
| sun50iw2 (0x1718) || sun50iw2p1 || [[H5]] || 4xCortex-A53<br />
|-<br />
| sun50iw3 (0x1719) || sun50iw3p1 || [[A63]] || 4xCortex-A53<br />
|-<br />
| sun50iw6 (0x1728) || sun50iw6p1 || [[H6]] || 4xCortex-A53<br />
|-<br />
| sun50iw9 (0x1823) || sun50iw9p1 || [[H616]], [[H313]] || 4xCortex-A53<br />
|-<br />
| sun50iw10 (0x1855) || sun50iw10p1 || [[A100]] || 4xCortex-A53<br />
|-<br />
| sun50iw11 (0x????) || sun50iw11p1 || [[R329]] || 2xCortex-A53<br />
|}<br />
<br />
This new naming scheme is of absolutely no value with respect to the rest of the SoC. The actual ARM core(s) used are usually the least important piece of information for SoC support. This table completely ignores the fact that A20 is an updated A10 and is pin compatible. It also ignores the fact that A31 introduced a lot of changes which were carried on to the A23/A33 and possibly A80 parts. It therefore is quite likely that this naming scheme was purely a marketing decision, and that Allwinner marketing will change its mind again.<br />
<br />
= Features =<br />
* CPU: ARMv7-A [http://en.wikipedia.org/wiki/ARM_Cortex-A7 Cortex-A7], [http://en.wikipedia.org/wiki/ARM_Cortex-A15 Cortex-A15] or [http://en.wikipedia.org/wiki/ARM_Cortex-A8 Cortex-A8] Central Processor Unit with (co-)processor extensions:<br />
** Advanced SIMD: [http://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29 NEON] (ARM's extended general-purpose advanced SIMD vector processing extension engine)<br />
** [[Vector Floating Point Unit]] ([http://en.wikipedia.org/wiki/ARM_architecture#Floating-point_.28VFP.29 VFPU]): ARM VFPv3 lite (Cortex-A8) / VFPv4 (Cortex-A7)<br />
** Security Extensions: <br />
*** [http://en.wikipedia.org/wiki/ARM_architecture#Security_extensions_.28TrustZone.29 TrustZone] secure world<br />
*** [[Security_System|Security accelerator]] supporting AES, DES, 3DES, SHA-1, MD5 and pseudo-random number generation<br />
** [http://en.wikipedia.org/wiki/ARM_architecture#Thumb-2 Thumb-2] instruction set extension for optimized code to reduce memory footprint and improve performance<br />
* GPU: [[Mali400]], Mali400-MP2, SGX544 or PowerVR G6230 Graphics Procesor Unit, supporting OpenGL ES2.<br />
* VPU: [[Cedar Engine]] (Video Processor Unit for audio and video hardware decoding or encoding)<br />
* HDMI-transmitter with [http://en.wikipedia.org/wiki/HDMI#CEC HDMI CEC] (Consumer Electronics Control), with exception of A13 which lacks HDMI-transmitter and SATA-controller<ref>[http://olimex.wordpress.com/2012/04/24/cortex-a8-in-tqfp-sure-allwinner-a13/ "Cortex A8 in TQFP? sure Allwinner A13"] ''Retrieved 23 September 2012''</ref><br />
* Hardware virtualization capabilities (Cortex-A7 only).<br />
* Up to 4GB memory (Cortex-A8), Up to 1TB memory with LPAE (Cortex-A7 only).<br />
<br />
== Comparison table ==<br />
{| class="wikitable"<br />
! scope="row" | !! [[A10]] !! [[A10s]] !! [[A13]] !! [[A20]] !! [[A23]] !! [[A31]] !! [[A31s]] !! [[A33]] !! [[A80]]<br />
|-<br />
! scope="row" | Generation <br />
| sun4i || sun5i || sun5i || sun7i || sun8i || sun6i || sun6i || sun8i || sun9i <br />
|-<br />
! scope="row" | CPU<br />
| Cortex-A8 || Cortex-A8 || Cortex-A8 || Cortex-A7 || Cortex-A7 ||Cortex-A7 || Cortex-A7 || Cortex-A7 || Cortex-A7 / A15 <br />
|-<br />
! scope="row" | CPU Maximum frequency<br />
| 1 GHz|| 1 GHz || 1 GHz|| 960 MHz|| 1.5 GHz || ? GHz || ? GHz || 1.5 GHz || 2 (??) GHz<br />
|-<br />
! scope="row" | Cores<br />
| 1 || 1 || 1 || 2 || 2 || 4 || 4 || 4 || 2 x 4<br />
|-<br />
! scope="row" | Extensions<br />
| NEON, VFPv3, Thumb-2 || NEON, VFPv3, Thumb-2 || NEON, VFPv3, Thumb-2 || NEON, VFPv3 / VFPv4, Thumb-2 ||NEON, VFPv3 / VFPv4, Thumb-2 || NEON, VFPv3 / VFPv4, Thumb-2 || NEON, VFPv3 / VFPv4, Thumb-2 || NEON, VFPv3 / VFPv4, Thumb-2 || ? (A80)<br />
|-<br />
! scope="row" | Memory<br />
| DDR2, DDR3</br> (max 2GB @ DDR800) || DDR2, DDR3</br> (max 2GB @ DDR800) || DDR2, DDR3</br> (max 512MB @ DDR800) || LPDDR3, DDR3,</br>LPDDR2 || DDR3</br>(max 1GB) || 2-channel DDR3, LPDDR2, </br>2-channel DDR3L, DDR3U || DDR3, DDR3L, LPDDR2 || single-channel DDR3, DDR3L</br>(max 1GB) || 2-channel DDR3, DDR3L, LPDDR3, LPDDR2</br> up to 8GB<br />
|-<br />
! scope="row" | GPU<br />
| [[Mali400]]</br>320&nbsp;MHz || [[Mali400]]</br>320&nbsp;MHz || [[Mali400]]</br>320&nbsp;MHz || [[Mali400]]-MP2</br>350&nbsp;MHz || [[Mali400]]-MP2 || SGX544</br>200&nbsp;MHz || SGX544</br>200&nbsp;MHz || [[Mali400]]-MP2 || 64-core PowerVR G6230<br />
|-<br />
! scope="row" | GPU API<br />
| OpenGL ES 2.0, OpenVG 1.1 || OpenGL ES 2.0, OpenVG 1.1 || OpenGL ES 2.0, OpenVG 1.1 || OpenGL ES 2.0, OpenVG 1.1 || OpenGL ES 2.0, OpenVG 1.1 || OpenGL ES 2.0, OpenVG 1.1, OpenCL 1.1, and DirectX 9.3 || OpenGL ES 2.0, OpenVG 1.1, OpenCL 1.1, and DirectX 9.3 || OpenGL ES 2.0, OpenVG 1.1 || OpenGL 3.x, OpenGL ES Next,3.0,2.0, Open CL 1.x, DirectX 11 level 9_3/10_0<ref>http://www.imgtec.com/news/detail.asp?ID=845</ref><br />
|-<br />
! scope="row" | [[Cedar Engine|Video decoder]]<br />
| 2160p || 1080p || 1080p || 2160p, 4K×2K, 1080p 3D || 1080p@60fps || 2160p, 4K×2K, 1080p 3D || 2160p, 1080p 3D || 1080p@60fps || ? (A80)<br />
|-<br />
! scope="row" | [[Cedar Engine|Video encoder]]<br />
| H.264 1080p@30fps, JPEG || H.264 1080p@30fps, JPEG || H.264 1080p@30fps, JPEG || H.264 1080p@30fps, JPEG || 1080p@60fps || H.264 1080p@60fps, JPEG || H264 1080p@30fps, 720p@60fps || H.264 1080p@60fps, JPEG || H.264 HP/VP8 4Kx2K@30fp<br />
|-<br />
! scope="row" | Audio decoder<br />
| AC3, DTS || ? || ? || AC3, DTS || - || ? (A31) || ? (A31S) || ? (A33) || ? (A80)<br />
|-<br />
! scope="row" | Video interfaces<br />
| HDMI 1.3, YPbPr, VGA, CPU/RGB/LVDS LCD || HDMI 1.3, RGB/LVDS LCD || RGB LCD, VGA|| HDMI 1.4, CVBS, YPbPr, VGA, CPU/RGB/LVDS LCD || CPU/RGB/LVDS LCD, MIPI DSI || HDMI 1.4, MIPI DSI, 2-channel LVDS, 2-channel RGB LCD || HDMI 1.4, LVDS, RGB LCD || CPU/RGB/LVDS LCD, MIPI DSI || HDMI 4K, RGB LCD 2048x1536@60fps, dual-channel LVDS 1920x1080@60fps, 4-lane MIPI DSI 1920x1200@60fps, 4-lane eDP 2560x1600@60fps<br />
|-<br />
! scope="row" | Audio interfaces<br />
| I2S, SPDIF, AC97 || I2S, AC97 || I2S, AC97 || I2S, PCM, AC97 || I2S, PCM || 2 I2S, 2 PCM || I2S, 2 PCM || ? (A33) || ? (A80)<br />
|-<br />
! scope="row" | USB OTG<br />
| 1 || 1 || 1 || 1 || 1 || 1 || 1 || ? (A33) || 1<br />
|-<br />
! scope="row" | USB Host<br />
| 2 || 1 || 1 || 2 || 1 || 2 || 2 || ? (A33) || 2x USB Host, USB 3.0/2.0 Dual-Role (host/device)<br />
|-<br />
! scope="row" | Ethernet<br />
| EMAC || EMAC || - || EMAC/GMAC || - || GMAC || GMAC || - || GMAC<br />
|-<br />
! scope="row" | Storage<br />
| NAND (max 64GB), SATA II, SD Card 3.0 || NAND (max 64GB), SD Card 3.0 || NAND (max 64GB), SD Card 3.0 || NAND, MMC, [http://olimex.wordpress.com/2013/04/05/allwinners-a10-and-a20-are-they-really-pin-to-pin-compatible-and-drop-in-replacement/#comment-5452 SATA] || raw NAND, eMMC, SD card || 4 x SD Card, eMMC NAND, 2-channel raw NAND || 4 x SD Card, eMMC NAND, raw NAND || 3 x SD Card, eMMC NAND, raw NAND || 4 x SD/MMC<br />
|-<br />
! scope="row" | Package<br />
| BGA441</br>19&nbsp;mm&nbsp;×&nbsp;19&nbsp;mm</br>0.80&nbsp;mm Pitch || BGA336</br>14&nbsp;mm&nbsp;×&nbsp;14&nbsp;mm</br>0.65&nbsp;mm Pitch || eLQFP176</br>20&nbsp;mm&nbsp;×&nbsp;20&nbsp;mm ||BGA441</br>19&nbsp;mm&nbsp;×&nbsp;19&nbsp;mm</br>0.80&nbsp;mm Pitch || FBGA280</br>14&nbsp;mm&nbsp;x&nbsp;14&nbsp;mm&nbsp;x&nbsp;1.4&nbsp;mm</br>0.80&nbsp;mm Pitch || BGA609</br>18&nbsp;mm&nbsp;×&nbsp;8&nbsp;mm</br>0.65&nbsp;mm Pitch || ? (A31S) || ? (Allwinner: pin compatible with A23) || ? (A80)<br />
|-<br />
! scope="row" | Lithography<br />
| 55 nm || 55 nm|| 55 nm || 40 nm || 40 nm || 40 nm || 40 nm || 40 nm || 28 nm<br />
|}<br />
<ref>https://web.archive.org/web/20130301050520/http://blog.thinkteletronics.com/all-mobile-socsolutions/ All Mobile Soc/Solutions.</ref><br />
<br />
= References =<br />
<references /><br />
<br />
[[Category:System on Chip]]</div>
Kenren
https://linux-sunxi.org/index.php?title=H616&diff=23624
H616
2020-11-03T11:25:38Z
<p>Kenren: correct link for mali page</p>
<hr />
<div>{{Infobox SoC<br />
| image = [[File:AllwinnerH616.jpg|250px]]<br />
| manufacturer = Allwinner<br />
| process = 28nm<br />
| cpu = Quad-Core ARM Cortex-A53<br />
| memory = up to 4 GB DDR4 / DDR3 / DDR3L / LPDDR3 / LPDDR4<br />
| gpu = [[Mali]]-G31 MP2<br />
| video = HDMI 2.0a up to 4K @ 60Hz<br />CVBS with PAL or NTSC<br />
| audio = I2S, S/PDIF, HDMI audio<br />
| network = 1x 10/100M MAC with PHY<br />1x GBit MAC with RGMII<br />
| storage = MMC, NAND<br />
| usb = USB2.0: 1x OTG + 3x Host<br />
| other = IOMMU, 3x SDIO, 2x SPI,<br />6x UART, 6x I<sup>2</sup>C, 4x PWM,<br />TFBGA284, 0.65mm pitch, 0.35mm ball size, 14x12mm<br />
| website = [http://www.allwinnertech.com/index.php?c=product&a=index&id=89 Product Page]<br />
}}<br />
<br />
Allwinner [[H616]] (sun50iw9p1) is a SoC that features a Quad-Core Cortex-A53 ARM CPU, and a [[Mali]]-G31 MP2 GPU from ARM.<br />
<br />
=Overview=<br />
<br />
H616 is targeted towards TV boxes and SBCs with the [[Mali]]-G31, better video encoding/decoding hardware and more efficient power consumption.<ref name="cnx blog">https://www.cnx-software.com/2020/02/27/allwinner-h616-tv-box-processor-comes-with-mali-g31-gpu-supports-android-10/ Allwinner H616 TV Box Processor Comes with Mali G31 GPU, Supports Android 10</ref><br />
<br />
= Documentation =<br />
<br />
* [[File:H616_Datasheet_V1.0_cleaned.pdf]]<br />
* [[File:H616_User_Manual_V1.0_cleaned.pdf]]<br />
* [[File:H616_USB_module_manual.pdf]]<br />
* [[File:H616_Android_Q_OTA_Development_and_Use_Guide.pdf]]<br />
<br />
=References=<br />
<references /><br />
<br />
[[Category:System on Chip]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Mali&diff=23623
Mali
2020-11-03T11:12:18Z
<p>Kenren: /* Utgard */ Correct L2 cache</p>
<hr />
<div>The '''Mali''' series is a GPU (Graphics Processor Unit) from ARM Ltd. (ARM Holdings plc), designed for embedded systems.<ref>http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP</ref><ref>http://blog.thinkteletronics.com/all-mobile-socsolutions/ All Mobile Soc/Solutions.</ref><br />
<br />
=Overview= <br />
[[File:Mali-400-screenshot.png|thumbnail|300px|es2gears running on Mali-400]]<br />
[[File:XBMC_running_on_Mali-400.jpeg|thumbnail|300px|XBMC running on Mali-400]]<br />
<br />
The '''Mali''' series of Graphics Processing Units (GPUs) are semiconductor intellectual property cores produced by ARM Holdings for licensing in various ASIC (Application-specific integrated circuit) designs by ARM partners. The core is mainly developed by ARM Norway, at the former ''Falanx'' company site.<br />
<br />
Like other embedded IP cores for 3D support, the Mali GPU does not feature display controllers driving monitors (such as the combination often found in common video cards). Instead it is a pure 3D engine that renders graphics into memory and hands the rendered image over to another core that handles the display.<br />
<br />
ARM supplies tools to help in authoring OpenGL ES shaders named ''Mali GPU Shader Development Studio'' and ''Mali GPU User Interface Engine''.<br />
<br />
All Mali4XX GPU Variants conform to OpenGL ES 1.1 & 2.0 as well as OpenVG 1.1.<br><br />
All Mali-TXXX GPU Variants conform to OpenGL ES up to 3.1 as well as OpenVG 1.1.<br><br />
All Mali-GXX GPU Variants conform to OpenGL ES up to 3.2 as well as OpenVG 1.1 and Vilkan 1.2 (no free Vulkan driver yet).<br />
<br />
==Variants:==<br />
There are several generations of which two are currently used by Allwinner.<br />
<br />
===Utgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! GP (Geometry Processor) <br> / vertex shader !! PP (Pixel Processor) <br> / fragment shader !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-400 MP<br />
| 1<br />
| 1<br />
| 256 KiB<br />
| [[A10]] (sun4i), [[A10s]] (sun5i), and [[A13]] (sun5i)<br />
|-<br />
| Mali-400 MP2<br />
| 1<br />
| 2<br />
| 256/512 KiB<br />
| [[A20]] (sun7i), [[A23]] (sun8i), [[A33]], [[H3]], [[R40]] (sun8i), [[A64]] (sun50i)<br />
|-<br />
| Mali-450 MP4<br />
| 1<br />
| 4<br />
| 512 KiB<br />
| [[H5]] (sun50i)<br />
|-<br />
|}<br />
<br />
===Midgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-T720 MP2<br />
| 2<br />
| 512 KiB<br />
| [[H6]] (sun50i)<br />
|-<br />
| Mali-T760 MP2<br />
| 2<br />
| 512 KiB<br />
| [[A63]] (sun50i)<br />
|}<br />
<br />
===Bifrost===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-G31 MP2<br />
| 2<br />
| ??? KiB<br />
| [[H616]], [[H313]] (sun50i)<br />
|-<br />
|}<br />
<br />
More information can be found on the [https://developer.arm.com/products/graphics-and-multimedia/mali-gpus ARM website].<br />
<br />
= Driver =<br />
==Utgard (Mali-400 and Mali-450)==<br />
<br />
=== Lima driver (Open Source) ===<br />
Lima is a project to develop a completely open source graphics driver which supports ARM's Mali-400 and Mali-450 GPUs.<br />
<br />
It consists of two main parts:<br />
* [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/lima Kernel parts] have been included in mainline kernel since v5.2<br />
* [https://gitlab.freedesktop.org/mesa/mesa Mesa] (userspace) parts have been part of upstream project since April 2019.<br />
<br />
Historical links:<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/linux Lima kernel driver]<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/mesa mesa-lima userspace driver]<br />
* based on re-engineering efforts from [http://web.archive.org/web/20180106112822/http://limadriver.org/ Archive of http://limadriver.org/]<br />
<br />
=== Binary driver ===<br />
* '''Mainline Linux:''' Maxime Ripard (Bootlin) worked on Mali OpenGL support with mainline Linux, please refer [https://bootlin.com/blog/mali-opengl-support-on-allwinner-platforms-with-mainline-linux/ these instructions]<br />
* '''Legacy Kernel (Outdated):''' For information on the binary driver, please refer to the [[Mali_binary_driver| binary driver installation guide]].<br />
<br />
==Midgard (Mali T6xx, T7xx, T8xx) and Bifrost (G3x, G5x, G6x, G7x)==<br />
===Panfrost driver (Open Source)===<br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] is a project to develop a completely open source graphics driver which supports ARM's Mali-T6xx, Mali-T7xx, Mali-T800 and Mali-G7x GPUs. This is a '''work in progress and not yet ready''' for general use.<br /><br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] results from a merge of 2 driver reverse engineering projects: chai - for Midgard GPUs (by Alyssa Rosenzweig) and BiOpenly - for Bifrost GPUs (by Lyude Paul). The merge was done due to identical command streams of the ARM Midgard and Bifrost GPUs (but different shader cores).<br />
<br />
* WIP: [https://gitlab.freedesktop.org/panfrost/ Panfrost git repository]<br />
* Alyssa Rosenzweig's Blog: [https://rosenzweig.io/blog/midgard-shaders-with-the-free-nir-compiler.html NIR shader compiler announce] <br />
<br />
<br />
<br />
The aim of this drivers and others such as freedreno is to finally bring all the advantages of open source software to ARM SoC graphics drivers. Currently, the sole availability of binary drivers is increasing development and maintenance overhead, while also reducing portability, compatibility and limiting choice. Anyone who has dealt with GPU support on ARM, be it for a linux with a GNU stack, or for an android, knows the pain of dealing with these binaries.<br />
<br />
* [http://en.wikipedia.org/wiki/Graphics_hardware_and_FOSS#ARM Graphics hardware and FOSS]<br />
<br />
=See also=<br />
* [[Display|Display driver setup.]]<br />
* [[Mali_binary_driver| Mali binary driver installation]].<br />
<br />
=References=<br />
<references /><br />
<br />
=External Links=<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/mali-400-mp.php Mali-400 MP website]<br />
* [http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP]<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/ MALI graphics hardware series webpage at ARM Holdings]<br />
* [http://www.malideveloper.com/ Mali developer] a developer site run by ARM<br />
* [http://malideveloper.arm.com/develop-for-mali/drivers/open-source-mali-gpus-linux-exadri2-and-x11-display-drivers/ Open Source Mali GPUs Linux EXA/DRI2 and X11 Display Drivers]<br />
* [http://web.archive.org/web/20180106112822/http://limadriver.org/ Lima driver (Web Archive)]<br />
<br />
<br />
[[Category:Hardware]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Mali&diff=23622
Mali
2020-11-03T11:10:13Z
<p>Kenren: /* Utgard */ correct family chipset of A64</p>
<hr />
<div>The '''Mali''' series is a GPU (Graphics Processor Unit) from ARM Ltd. (ARM Holdings plc), designed for embedded systems.<ref>http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP</ref><ref>http://blog.thinkteletronics.com/all-mobile-socsolutions/ All Mobile Soc/Solutions.</ref><br />
<br />
=Overview= <br />
[[File:Mali-400-screenshot.png|thumbnail|300px|es2gears running on Mali-400]]<br />
[[File:XBMC_running_on_Mali-400.jpeg|thumbnail|300px|XBMC running on Mali-400]]<br />
<br />
The '''Mali''' series of Graphics Processing Units (GPUs) are semiconductor intellectual property cores produced by ARM Holdings for licensing in various ASIC (Application-specific integrated circuit) designs by ARM partners. The core is mainly developed by ARM Norway, at the former ''Falanx'' company site.<br />
<br />
Like other embedded IP cores for 3D support, the Mali GPU does not feature display controllers driving monitors (such as the combination often found in common video cards). Instead it is a pure 3D engine that renders graphics into memory and hands the rendered image over to another core that handles the display.<br />
<br />
ARM supplies tools to help in authoring OpenGL ES shaders named ''Mali GPU Shader Development Studio'' and ''Mali GPU User Interface Engine''.<br />
<br />
All Mali4XX GPU Variants conform to OpenGL ES 1.1 & 2.0 as well as OpenVG 1.1.<br><br />
All Mali-TXXX GPU Variants conform to OpenGL ES up to 3.1 as well as OpenVG 1.1.<br><br />
All Mali-GXX GPU Variants conform to OpenGL ES up to 3.2 as well as OpenVG 1.1 and Vilkan 1.2 (no free Vulkan driver yet).<br />
<br />
==Variants:==<br />
There are several generations of which two are currently used by Allwinner.<br />
<br />
===Utgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! GP (Geometry Processor) <br> / vertex shader !! PP (Pixel Processor) <br> / fragment shader !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-400 MP<br />
| 1<br />
| 1<br />
| 256 KiB<br />
| [[A10]] (sun4i), [[A10s]] (sun5i), and [[A13]] (sun5i)<br />
|-<br />
| Mali-400 MP2<br />
| 1<br />
| 2<br />
| 256 KiB<br />
| [[A20]] (sun7i), [[A23]] (sun8i), [[A33]], [[H3]], [[R40]] (sun8i), [[A64]] (sun50i)<br />
|-<br />
| Mali-450 MP4<br />
| 1<br />
| 4<br />
| 512 KiB<br />
| [[H5]] (sun50i)<br />
|-<br />
|}<br />
<br />
===Midgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-T720 MP2<br />
| 2<br />
| 512 KiB<br />
| [[H6]] (sun50i)<br />
|-<br />
| Mali-T760 MP2<br />
| 2<br />
| 512 KiB<br />
| [[A63]] (sun50i)<br />
|}<br />
<br />
===Bifrost===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-G31 MP2<br />
| 2<br />
| ??? KiB<br />
| [[H616]], [[H313]] (sun50i)<br />
|-<br />
|}<br />
<br />
More information can be found on the [https://developer.arm.com/products/graphics-and-multimedia/mali-gpus ARM website].<br />
<br />
= Driver =<br />
==Utgard (Mali-400 and Mali-450)==<br />
<br />
=== Lima driver (Open Source) ===<br />
Lima is a project to develop a completely open source graphics driver which supports ARM's Mali-400 and Mali-450 GPUs.<br />
<br />
It consists of two main parts:<br />
* [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/lima Kernel parts] have been included in mainline kernel since v5.2<br />
* [https://gitlab.freedesktop.org/mesa/mesa Mesa] (userspace) parts have been part of upstream project since April 2019.<br />
<br />
Historical links:<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/linux Lima kernel driver]<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/mesa mesa-lima userspace driver]<br />
* based on re-engineering efforts from [http://web.archive.org/web/20180106112822/http://limadriver.org/ Archive of http://limadriver.org/]<br />
<br />
=== Binary driver ===<br />
* '''Mainline Linux:''' Maxime Ripard (Bootlin) worked on Mali OpenGL support with mainline Linux, please refer [https://bootlin.com/blog/mali-opengl-support-on-allwinner-platforms-with-mainline-linux/ these instructions]<br />
* '''Legacy Kernel (Outdated):''' For information on the binary driver, please refer to the [[Mali_binary_driver| binary driver installation guide]].<br />
<br />
==Midgard (Mali T6xx, T7xx, T8xx) and Bifrost (G3x, G5x, G6x, G7x)==<br />
===Panfrost driver (Open Source)===<br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] is a project to develop a completely open source graphics driver which supports ARM's Mali-T6xx, Mali-T7xx, Mali-T800 and Mali-G7x GPUs. This is a '''work in progress and not yet ready''' for general use.<br /><br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] results from a merge of 2 driver reverse engineering projects: chai - for Midgard GPUs (by Alyssa Rosenzweig) and BiOpenly - for Bifrost GPUs (by Lyude Paul). The merge was done due to identical command streams of the ARM Midgard and Bifrost GPUs (but different shader cores).<br />
<br />
* WIP: [https://gitlab.freedesktop.org/panfrost/ Panfrost git repository]<br />
* Alyssa Rosenzweig's Blog: [https://rosenzweig.io/blog/midgard-shaders-with-the-free-nir-compiler.html NIR shader compiler announce] <br />
<br />
<br />
<br />
The aim of this drivers and others such as freedreno is to finally bring all the advantages of open source software to ARM SoC graphics drivers. Currently, the sole availability of binary drivers is increasing development and maintenance overhead, while also reducing portability, compatibility and limiting choice. Anyone who has dealt with GPU support on ARM, be it for a linux with a GNU stack, or for an android, knows the pain of dealing with these binaries.<br />
<br />
* [http://en.wikipedia.org/wiki/Graphics_hardware_and_FOSS#ARM Graphics hardware and FOSS]<br />
<br />
=See also=<br />
* [[Display|Display driver setup.]]<br />
* [[Mali_binary_driver| Mali binary driver installation]].<br />
<br />
=References=<br />
<references /><br />
<br />
=External Links=<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/mali-400-mp.php Mali-400 MP website]<br />
* [http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP]<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/ MALI graphics hardware series webpage at ARM Holdings]<br />
* [http://www.malideveloper.com/ Mali developer] a developer site run by ARM<br />
* [http://malideveloper.arm.com/develop-for-mali/drivers/open-source-mali-gpus-linux-exadri2-and-x11-display-drivers/ Open Source Mali GPUs Linux EXA/DRI2 and X11 Display Drivers]<br />
* [http://web.archive.org/web/20180106112822/http://limadriver.org/ Lima driver (Web Archive)]<br />
<br />
<br />
[[Category:Hardware]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Mali&diff=23621
Mali
2020-11-03T11:09:02Z
<p>Kenren: /* Utgard */ add R40 chip</p>
<hr />
<div>The '''Mali''' series is a GPU (Graphics Processor Unit) from ARM Ltd. (ARM Holdings plc), designed for embedded systems.<ref>http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP</ref><ref>http://blog.thinkteletronics.com/all-mobile-socsolutions/ All Mobile Soc/Solutions.</ref><br />
<br />
=Overview= <br />
[[File:Mali-400-screenshot.png|thumbnail|300px|es2gears running on Mali-400]]<br />
[[File:XBMC_running_on_Mali-400.jpeg|thumbnail|300px|XBMC running on Mali-400]]<br />
<br />
The '''Mali''' series of Graphics Processing Units (GPUs) are semiconductor intellectual property cores produced by ARM Holdings for licensing in various ASIC (Application-specific integrated circuit) designs by ARM partners. The core is mainly developed by ARM Norway, at the former ''Falanx'' company site.<br />
<br />
Like other embedded IP cores for 3D support, the Mali GPU does not feature display controllers driving monitors (such as the combination often found in common video cards). Instead it is a pure 3D engine that renders graphics into memory and hands the rendered image over to another core that handles the display.<br />
<br />
ARM supplies tools to help in authoring OpenGL ES shaders named ''Mali GPU Shader Development Studio'' and ''Mali GPU User Interface Engine''.<br />
<br />
All Mali4XX GPU Variants conform to OpenGL ES 1.1 & 2.0 as well as OpenVG 1.1.<br><br />
All Mali-TXXX GPU Variants conform to OpenGL ES up to 3.1 as well as OpenVG 1.1.<br><br />
All Mali-GXX GPU Variants conform to OpenGL ES up to 3.2 as well as OpenVG 1.1 and Vilkan 1.2 (no free Vulkan driver yet).<br />
<br />
==Variants:==<br />
There are several generations of which two are currently used by Allwinner.<br />
<br />
===Utgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! GP (Geometry Processor) <br> / vertex shader !! PP (Pixel Processor) <br> / fragment shader !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-400 MP<br />
| 1<br />
| 1<br />
| 256 KiB<br />
| [[A10]] (sun4i), [[A10s]] (sun5i), and [[A13]] (sun5i)<br />
|-<br />
| Mali-400 MP2<br />
| 1<br />
| 2<br />
| 256 KiB<br />
| [[A20]] (sun7i), [[A23]] (sun8i), [[A33]], [[H3]], [[R40]] (sun8i), [[A64]] A64<br />
|-<br />
| Mali-450 MP4<br />
| 1<br />
| 4<br />
| 512 KiB<br />
| [[H5]] (sun50i)<br />
|-<br />
|}<br />
<br />
===Midgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-T720 MP2<br />
| 2<br />
| 512 KiB<br />
| [[H6]] (sun50i)<br />
|-<br />
| Mali-T760 MP2<br />
| 2<br />
| 512 KiB<br />
| [[A63]] (sun50i)<br />
|}<br />
<br />
===Bifrost===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-G31 MP2<br />
| 2<br />
| ??? KiB<br />
| [[H616]], [[H313]] (sun50i)<br />
|-<br />
|}<br />
<br />
More information can be found on the [https://developer.arm.com/products/graphics-and-multimedia/mali-gpus ARM website].<br />
<br />
= Driver =<br />
==Utgard (Mali-400 and Mali-450)==<br />
<br />
=== Lima driver (Open Source) ===<br />
Lima is a project to develop a completely open source graphics driver which supports ARM's Mali-400 and Mali-450 GPUs.<br />
<br />
It consists of two main parts:<br />
* [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/lima Kernel parts] have been included in mainline kernel since v5.2<br />
* [https://gitlab.freedesktop.org/mesa/mesa Mesa] (userspace) parts have been part of upstream project since April 2019.<br />
<br />
Historical links:<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/linux Lima kernel driver]<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/mesa mesa-lima userspace driver]<br />
* based on re-engineering efforts from [http://web.archive.org/web/20180106112822/http://limadriver.org/ Archive of http://limadriver.org/]<br />
<br />
=== Binary driver ===<br />
* '''Mainline Linux:''' Maxime Ripard (Bootlin) worked on Mali OpenGL support with mainline Linux, please refer [https://bootlin.com/blog/mali-opengl-support-on-allwinner-platforms-with-mainline-linux/ these instructions]<br />
* '''Legacy Kernel (Outdated):''' For information on the binary driver, please refer to the [[Mali_binary_driver| binary driver installation guide]].<br />
<br />
==Midgard (Mali T6xx, T7xx, T8xx) and Bifrost (G3x, G5x, G6x, G7x)==<br />
===Panfrost driver (Open Source)===<br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] is a project to develop a completely open source graphics driver which supports ARM's Mali-T6xx, Mali-T7xx, Mali-T800 and Mali-G7x GPUs. This is a '''work in progress and not yet ready''' for general use.<br /><br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] results from a merge of 2 driver reverse engineering projects: chai - for Midgard GPUs (by Alyssa Rosenzweig) and BiOpenly - for Bifrost GPUs (by Lyude Paul). The merge was done due to identical command streams of the ARM Midgard and Bifrost GPUs (but different shader cores).<br />
<br />
* WIP: [https://gitlab.freedesktop.org/panfrost/ Panfrost git repository]<br />
* Alyssa Rosenzweig's Blog: [https://rosenzweig.io/blog/midgard-shaders-with-the-free-nir-compiler.html NIR shader compiler announce] <br />
<br />
<br />
<br />
The aim of this drivers and others such as freedreno is to finally bring all the advantages of open source software to ARM SoC graphics drivers. Currently, the sole availability of binary drivers is increasing development and maintenance overhead, while also reducing portability, compatibility and limiting choice. Anyone who has dealt with GPU support on ARM, be it for a linux with a GNU stack, or for an android, knows the pain of dealing with these binaries.<br />
<br />
* [http://en.wikipedia.org/wiki/Graphics_hardware_and_FOSS#ARM Graphics hardware and FOSS]<br />
<br />
=See also=<br />
* [[Display|Display driver setup.]]<br />
* [[Mali_binary_driver| Mali binary driver installation]].<br />
<br />
=References=<br />
<references /><br />
<br />
=External Links=<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/mali-400-mp.php Mali-400 MP website]<br />
* [http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP]<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/ MALI graphics hardware series webpage at ARM Holdings]<br />
* [http://www.malideveloper.com/ Mali developer] a developer site run by ARM<br />
* [http://malideveloper.arm.com/develop-for-mali/drivers/open-source-mali-gpus-linux-exadri2-and-x11-display-drivers/ Open Source Mali GPUs Linux EXA/DRI2 and X11 Display Drivers]<br />
* [http://web.archive.org/web/20180106112822/http://limadriver.org/ Lima driver (Web Archive)]<br />
<br />
<br />
[[Category:Hardware]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Sunxi-Cedrus&diff=23620
Sunxi-Cedrus
2020-11-03T10:57:38Z
<p>Kenren: add R40</p>
<hr />
<div>Sunxi-Cedrus is an effort to bring hardware-accelerated video decoding and encoding support for Allwinner SoCs to the '''mainline''' Linux kernel. Additional userspace components that interface with the kernel driver are also provided, for typical GNU/Linux-based systems.<br />
<br />
== Components ==<br />
<br />
Support for Sunxi-Cedrus is implemented through various components, either in kernel space or userspace:<br />
* the '''Cedrus V4L2 M2M kernel driver'''<br />
* the '''v4l2-request VAAPI backend'''<br />
<br />
Additional userspace components are also available, for development purposes:<br />
* the '''v4l2-request-test''' standalone tool, that allows testing the -Cedrus VPU driver <br />
* the '''sun4i-specific libdrm''', with support for allocating buffers in the MB32-tiled NV12 format used by the VPU<br />
* the '''dump libVA backend''', that allows dumping metadata and slices from videos <br />
<br />
Video players that support libVA should be compatible with the v4l2-request libVA backend. However, details in implementations might result in incompatibility with certain players. See [[#Player_Support|Player Support]] for the status of tested players.<br />
<br />
== Status ==<br />
<br />
=== Codec Support ===<br />
<br />
Support status for specific codecs in the v4l2-request '''libVA backend''' is presented in the following table:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Codec<br />
! Decoding<br />
! Encoding<br />
|-<br />
| '''MJPEG'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''MPEG2'''<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''MPEG4'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''VP6'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''H264'''<br />
| style="background: mediumseagreen; color: white;" | Supported (early high profile)<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''VP8'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''H265'''<br />
| style="background: mediumseagreen; color: white;" | Supported (early)<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''VP9'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|}<br />
<br />
=== SoC Support ===<br />
<br />
Support for specific SoCs in the '''V4L2 M2M kernel driver''' is presented in the following table:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Platform<br />
! Cedrus Driver Status<br />
! DRM Planes Status<br />
|-<br />
| '''A10'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
|-<br />
| '''A13/A10s'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
|-<br />
| '''A20'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
|-<br />
| '''A23'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''A33'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''A64'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H3'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H5'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H6'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
|-<br />
| '''H616'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''R40'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.10)<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''V3/V3s'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|}<br />
<br />
=== Player Support ===<br />
<br />
The following players were tested with the v4l2-request '''libVA backend''':<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Player<br />
! X11 Status<br />
! EGL/GLES Status<br />
! DRM Hardware Plane Status<br />
! X11/Xv Hardware Plane Status<br />
|-<br />
| '''VLC'''<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: tomato; color: white;" | N/A<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''GStreamer'''<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''MPV'''<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''Kodi (downstream)'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: tomato; color: white;" | N/A<br />
|}<br />
<br />
== Installation ==<br />
<br />
=== Linux ===<br />
<br />
The first step to installing Cedrus support is to build a Linux kernel with the latest patch series for the driver. A tree with all the required patches is available at:<br />
* Repository: [https://github.com/bootlin/linux-cedrus https://github.com/bootlin/linux-cedrus]<br />
* Tag: '''release-2019.03 '''<br />
<br />
The following kernel configuration options must be selected:<br />
<pre><br />
CONFIG_MEDIA_SUPPORT<br />
CONFIG_MEDIA_CONTROLLER<br />
CONFIG_MEDIA_CONTROLLER_REQUEST_API<br />
CONFIG_V4L_MEM2MEM_DRIVERS<br />
CONFIG_VIDEO_SUNXI_CEDRUS<br />
</pre><br />
<br />
In addition, the target device must contain the proper description for '''display engine support in its device-tree source'''.<br />
<br />
Details about building a mainline Linux kernel are available on the [[Mainline Kernel Howto]] page.<br />
<br />
Note that the '''associated kernel headers must be installed to the target device''' for the userspace components to build.<br />
<br />
Decoding H.264/H.265 videos can require a large amount of CMA memory, so it is recommended to set a large CMA pool, e.g. using the <code>cma</code> kernel command line parameter. For instance, 256 MiB should be enough to decode 1080p H.264 videos: <code>cma=256M</code>.<br />
<br />
The first mainline kernel release containing Cedrus support is 4.20 (scheduled for release December 2018 or Jan 2019). Newer Cedrus code is available in the bootlin git repository linked above.<br />
<br />
=== libva-v4l2-request ===<br />
<br />
The main userspace component that supports the Cedrus VPU driver is the libva-v4l2-request VAAPI backend. It is available at:<br />
* Repository: [https://github.com/bootlin/libva-v4l2-request https://github.com/bootlin/libva-v4l2-request]<br />
* Tag: '''release-2019.03'''<br />
<br />
The backend can be '''built and installed on the target device''' by following these steps:<br />
<pre><br />
git clone https://github.com/bootlin/libva-v4l2-request -b release-2019.03<br />
cd libva-v4l2-request<br />
./autogen.sh && make && sudo make install<br />
</pre><br />
<br />
=== libdrm-sun4i ===<br />
<br />
'''This is deprecated and no longer needed for other components to build.'''<br />
<br />
libdrm-sun4i imports the updated sun4i-drm Linux kernel driver definitions for installation in userspace and is available at:<br />
* Repository: [https://github.com/bootlin/libdrm-sun4i.git https://github.com/bootlin/libdrm-sun4i.git]<br />
* Branch: '''master'''<br />
<br />
It can be '''built and installed on the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/libdrm-sun4i<br />
cd libdrm-sun4i<br />
./autogen.sh --prefix=/usr && make && sudo make install<br />
</pre><br />
<br />
Alternatively to building libdrm-sun4i, the <code>sun4i_drm.h</code> file can be placed into <code>/usr/include/drm</code> directly.<br />
<br />
=== v4l2-request-test ===<br />
<br />
The v4l2-request-test tool is available at:<br />
* Repository: [https://github.com/bootlin/v4l2-request-test.git https://github.com/bootlin/v4l2-request-test.git]<br />
* Tag: '''release-2019.03'''<br />
<br />
It can be '''built on the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/v4l2-request-test.git -b release-2019.03<br />
cd v4l2-request-test<br />
make<br />
</pre><br />
<br />
=== libva-dump ===<br />
<br />
The libva-dump VAAPI backend is available at:<br />
* Repository: [https://github.com/bootlin/libva-dump.git https://github.com/bootlin/libva-dump.git]<br />
* Branch: '''master'''<br />
<br />
It can be '''built on the host or the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/libva-dump.git<br />
cd libva-dump<br />
./autogen.sh && make && sudo make install<br />
</pre><br />
<br />
== Usage and Configuration ==<br />
<br />
=== System ===<br />
<br />
In order to access the device nodes created by the Cedrus kernel driver, the user that will be decoding videos needs to be added to the <code>video</code> group.<br />
<br />
Alternatively, the permissions of the <code>/dev/video0</code> and <code>/dev/media0</code> nodes can be changed to allow access by this user.<br />
<br />
=== VLC ===<br />
<br />
In order to use VLC with Cedrus, the libva-v4l2-request VAAPI backend must be installed on the system. VLC must also be configured to use VAAPI for video decoding, through the following menus:<br />
* <code>Tools > Preferences > Input / Codecs > Codecs > Hardware-accelerated decoding > VA-API video decoder</code><br />
* <code>Tools > Preferences > Video > Display > Output > X11 video output (XCB)</code><br />
<br />
While OpenGL video output might be supported (with GPU support installed), it was not tested at this point.<br />
<br />
Although VLC has been configured to use VAAPI for video decoding, libVA must be instructed to use libva-v4l2-request through the <code>LIBVA_DRIVER_NAME</code> environment variable :<br />
<pre><br />
export LIBVA_DRIVER_NAME=v4l2_request<br />
vlc path/to/video.mpeg<br />
</pre><br />
<br />
==== Examples ====<br />
<br />
Here are some examples of VLC usage for specific use cases:<br />
* Remote testing without audio, scaling and OSD:<br />
<pre><br />
export LIBVA_DRIVER_NAME=v4l2_request<br />
export DISPLAY=:0<br />
vlc --no-audio --no-autoscale --no-osd --play-and-exit path/to/video.mpeg<br />
</pre><br />
<br />
=== v4l2-request-test ===<br />
<br />
v4l2-request-test is preferably used from its repository directory: the default path to the video slices is relative from the root of the repository. Since the tool uses the DRM KMS device directly, no graphical session (not even a login manager) must be running concurrently.<br />
<br />
The tool currently contains a single preset with slices that allow decoding the first 25 frames of the sample MPEG2 Big Buck Bunny video. More presets can be added from the data dumped with libva-dump.<br />
v4l2-request-test usage is displayed when the tool is called with the <code>-h</code> argument.<br />
<br />
==== Examples ====<br />
<br />
Examples of v4l2-request-test use include:<br />
* Decoding frames at 25 fps in a loop, with information:<br />
<pre><br />
./v4l2-request-test -f 25 -l<br />
</pre><br />
* Decoding frames as fast as possible in a loop:<br />
<pre><br />
./v4l2-request-test -ql<br />
</pre><br />
* Specifying the right nodes when another V4L2 driver is loaded:<br />
<pre><br />
./v4l2-request-test -v /dev/video1 -m /dev/media1<br />
</pre><br />
<br />
== Current Development ==<br />
<br />
From March to August 2018, the development of both the Cedrus V4L2 kernel driver and the Cedrus libVA backend was undertaken by:<br />
* '''Paul Kocialkowski''', intern at Bootlin<br />
* '''Maxime Ripard''', engineer at Bootlin<br />
<br />
This effort was funded by the [https://bootlin.com/blog/allwinner-vpu-crowdfunding/ related crowdfunding] started by Bootlin in February 2018.<br />
<br />
=== 2019.03 Release ===<br />
<br />
A second release of Cedrus was packed in March 2019, following up on numerous interface changes and new platforms support.<br />
<br />
The source code for the required components of the release are available on Bootlin's GitHub space, with the <code>release-2019.03</code> tag:<br />
* [https://github.com/bootlin/linux-cedrus/releases/tag/release-2019.03 linux-cedrus]<br />
* [https://github.com/bootlin/v4l2-request-test/releases/tag/release-2019.03 v4l2-request-test]<br />
* [https://github.com/bootlin/libva-v4l2-request/releases/tag/release-2019.03 libva-v4l2-request]<br />
<br />
=== 2018.07 Release ===<br />
<br />
A first release of Cedrus was presented in July 2018, with an [https://bootlin.com/blog/main-goals-delivery-of-the-allwinner-vpu-crowdfunding associated blog post on the Bootlin blog].<br />
<br />
The source code for the required components of the release are available on Bootlin's GitHub space, with the <code>release-2018.07</code> tag:<br />
* [https://github.com/bootlin/linux-cedrus/releases/tag/release-2018.07 linux-cedrus]<br />
* [https://github.com/bootlin/v4l2-request-test/releases/tag/release-2018.07 v4l2-request-test]<br />
* [https://github.com/bootlin/libva-v4l2-request/releases/tag/release-2018.07 libva-v4l2-request]<br />
* [https://github.com/bootlin/xbmc/releases/tag/release-2018.07 Kodi]<br />
* [https://github.com/bootlin/LibreELEC.tv/releases/tag/release-2018.07 LibreELEC]<br />
<br />
A root filesystem tarball built from the LibreELEC release, which includes Kodi and libva-v4l2-request, is also available (with a checksum and a detached GPG signature):<br />
* [https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz LibreELEC-cedrus-release-2018.07.tar.gz], ([https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz.sha512sum LibreELEC-cedrus-release-2018.07.tar.gz.sha512sum], [https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz.asc LibreELEC-cedrus-release-2018.07.tar.gz.asc])<br />
<br />
The root filesystem includes neither boot software nor kernel support: both have to be installed in addition to extracting the filesystem on the target medium. Instructions to build the kernel are available at: [[#Linux]]<br />
<br />
==== Known Limitations ====<br />
<br />
Some limitations in the software present in the release are known and listed as follows:<br />
* Decoding H264 videos (especially in high resolutions) may consume more memory than there is available in the dedicated pool. This is because Kodi does not yet interact properly with VAAPI when freeing buffers. The result is that Kodi will hang or display a fully black video.<br />
<br />
=== Weekly Reports ===<br />
<br />
Reports on the advancement of the development of Sunxi-Cedrus are posted regularly on the [https://bootlin.com/ Bootlin Blog], starting week 10 of 2018:<br />
* [https://bootlin.com/blog/final-weekly-status-update-allwinner-vpu-support/ Week 35 Final Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-34/ Week 34 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-33/ Week 33 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-32/ Week 32 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-31/ Week 31 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-30/ Week 30 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-main-goals-delivery/ Delivery of Allwinner VPU driver main goals]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-28/ Week 28 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-27/ Week 27 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-26/ Week 26 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-25/ Week 25 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-24/ Week 24 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-23/ Week 23 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-22/ Week 22 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-21/ Week 21 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-20/ Week 20 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-19/ Week 19 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-18/ Week 18 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-17/ Week 17 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-16/ Week 16 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-15/ Week 15 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-14/ Week 14 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-13/ Week 13 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-12/ Week 12 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-11/ Week 11 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-10/ Week 10 Status Update]<br />
<br />
== Community ==<br />
<br />
The community revolving around Sunxi-Cedrus can be contacted through different means:<br />
* The [[Mailing_list|linux-sunxi mailing list]], with the developers involved in carbon copy<br />
* The '''#cedrus''' channel on the [http://freenode.net/ freenode] IRC network<br />
<br />
== Past Development ==<br />
<br />
Initial work on the Sunxi-Cedrus V4l2 kernel driver and libVA backend was carried out by '''Florent Revest''' (kido) during an internship at Bootlin (formerly Free Electrons), resulting in a proof-of-concept driver and associated backend with MPEG2 and partial MPEG4 support for the A13 SoC.<br />
<br />
If you want to try it, you need a board with an A13 SoC, this page will try to guide you from your first steps with the driver to the details of its implementation. Make sure you've checked the known bugs and limitations before using it.<br />
<br />
=== Installation ===<br />
<br />
This procedure has been tested on the NextThingCo's CHIP board but should be adaptable to other A13 boards supported by the 4.8 mainline kernel. The first thing you need to do is to recompile a kernel with the sunxi-cedrus v4l driver and the corresponding device tree entry. You can follow the [[Mainline Kernel Howto]] but using the following repository:<br />
<br />
<pre>https://github.com/FlorentRevest/linux-sunxi-cedrus</pre><br />
<br />
Use menuconfig to enable the VPU driver in Device Drivers -> Multimedia support -> Memory-to-memory multimedia devices -> Sunxi CEDRUS VPU driver. The driver should be compiled into the kernel and not as a module.<br />
<br />
Your kernel will be located in arch/arm/boot/zImage and device tree in arch/arm/boot/dts/sun5i-r8-chip.dtb Don't forget to install kernel headers to your distribution if you want to be able to compile sunxi-cedrus-drv-video.<br />
<br />
On a standard debian jessie system you will need to install the following build dependencies:<br />
<br />
<pre>apt install git autoconf automake libtool pkg-config gcc libdrm-dev libva-dev libx11-dev make g++ vlc xorg</pre><br />
<br />
You will be able to compile and install a newer version of libVA supporting the LIBVA_DRIVER_NAME environment variable and then the sunxi-cedrus libVA backend:<br />
<br />
<pre>git clone https://github.com/01org/libva<br />
cd libva<br />
git checkout 695f99ef0405cf4255e7767b44effb0da2fe706e<br />
./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/<br />
make<br />
sudo make install</pre><br />
<br />
<pre>git clone https://github.com/FlorentRevest/sunxi-cedrus-drv-video<br />
cd sunxi-cedrus-drv-video<br />
./autogen.sh<br />
make # DRM_CFLAGS=-I/path/to/your/linux/headers<br />
sudo make install</pre><br />
<br />
Once installed, make sure you've exported the environment variable telling VA to use the sunxi_cedrus backend, activate the VA X11 decoding in VLC settings (Tools -> Preferences -> Input / Codecs -> set 'Hardware-accelerated decoding' to 'VA-API video decoder via X11') and then run one of the sample media file you can find [http://samplemedia.linaro.org/MPEG2 here] and [http://samplemedia.linaro.org/MPEG4/SVT/ here]<br />
<br />
<pre>xinit&<br />
export DISPLAY=:0.0<br />
export LIBVA_DRIVER_NAME=sunxi_cedrus<br />
vlc big_buck_bunny_480p_MPEG2_MP2_25fps_1800K.MPG<br />
vlc ducks_take_off_420_720p25.mp4</pre><br />
<br />
=== Supported features ===<br />
<br />
* MPEG2 Decoding<br />
* Partial MPEG4 Decoding<br />
<br />
=== Known bugs and limitations ===<br />
<br />
* H264 and H265 are not supported (some of the underlying problems include: allocating 19 surfaces at once and queueing several slices by frames)<br />
* MPEG4 decoding has some glitches. When something moves in a video it usualy draws some kind of trace behind it, this behavior is believed to come from an inconsistency in movement prediction. (VLC also tries to SyncSurface more often than needed which results in error when dequeuing the capture buffers)<br />
* No encoding: this can be added later on but hasn't been tried yet<br />
* Direct rendering: currently, buffers coming out of the v4l driver in a tiled pixel format are converted to a standard YUV pixel format and then rendered on screen by ffmpeg/vlc. As soon as the support for YUV DRM planes will be added to the kernel, this behavior can be replaced and the performances will be much better.<br />
* Currently the video can only be played at a zoom of 1:1, otherwise the scaling is done by ffmpeg in full CPU and it is too slow. Having that in the DRM driver would also allow for hardware accelerated frames scaling.<br />
* We currently can't play a MPEG2 file and then a MPEG4 file (or vice versa) or the output will be full of garbage pixels. This is probably due to some registers of the MPEG engine being kept between the two decoding and "polluting" the MPEG4 decoding with older values from MPEG2 decoding. We should find a way to clear those registers when receiving a S_FMT ioctl in the kernel driver or when closing the video device.<br />
<br />
=== Technical details and implementation ===<br />
<br />
The Cedrus project has provided reverse engineering of the Allwinner's proprietary [[CedarX]] blob for a couple of years. This work has been done on the Allwinner's 3.4 kernel and led to the creation of a libVDPAU backend interfacing with the "cedar_dev" and "disp" kernel drivers available in the vendor's kernel. The "cedar_dev" kernel driver directly mapped registers and memory from the [[Video_Engine | VE]] to the userspace and could potentially be a security risk. Those two drivers couldn't be upstreamed because they don't use any standard API or framework.<br />
<br />
In order to use the [[Video_Engine | VE]] on a mainline kernel, a new proper kernel driver had to be written from scratch with mainlinable methods in mind. The correct way to implement a codec device is to use the "video4linux" framework, referenced as v4l2. v4l2 handles many kind of video devices, some of them are cameras and sends data to a CAPTURE queue, others are screens and use data from an OUTPUT queue. Codec devices require a flow of data from OUTPUT to CAPTURE, they are "memory-to-memory" devices.<br />
<br />
Until now, most of the codec devices were able to handle raw bitstream via a firmware, which means that the OUTPUT queue (containing the compressed input data) could directly contain a MPEG file and the CAPTURE queue was filled with video frames. But the inner working of Allwinner's VPU is different, indeed it requires prior bitstream parsing into smaller frames/slices alongside headers' data. This parsing can not be done in the kernel side since it would be a complex codebase to maintain so it requires a new user-space usecase, hence a new API.<br />
<br />
The "Frame API" described [https://blogs.s-osg.org/planning-future-media-linux-linux-kernel-summit-media-workshop-seoul-south-korea/ here] has been designed for the Rockchip's VP8 decoding support and is implemented [https://lwn.net/Articles/678113/ here] and [https://code.google.com/p/chromium/codesearch#chromium/src/content/common/gpu/media/v4l2_slice_video_decode_accelerator.cc here] The "Frame API" aims to standardize the way VPU drivers should communicate frame by frame with the userspace. The advocated method is to bind "buffers" containing slice data from the OUTPUT queue to "extended controls" containing frame's header. The extended controls mechanism allows to send complex data structures to the kernel and program device's registers accordingly. However, the userspace might want to queue several frames in a row and set the corresponding extended controls at the same time. If the registers are programmed at the time an extended control is received, this means that at the time of processing a buffer, the registers might be programmed for another frame. This scenario is to be fixed by the "Request API".<br />
<br />
The idea behind this API is to allow atomic operations like a QBUF and a S_EXT_CTRLS. As of August 2016, the "Request API" is still at the state of RFC, it has had quite a few proposals for the past few years but none of them got accepted into the kernel. [https://openiotelc2016.sched.org/event/6DAG/v4l2-on-steroids-the-request-api-laurent-pinchart The latest RFCs], related to the Media API are not able to handle controls so sunxi-cedrus had to use an [https://lwn.net/Articles/641204/ older RFC.]<br />
<br />
The "sunxi-cedrus" kernel driver is hence made of a m2m v4l2 driver handling requests of MPEG2 or MPEG4 frames data with a standard header extended control. At the time of processing the m2m queue, it programs the VPU's registers depending on the used codec. Currently [https://lkml.org/lkml/2016/8/25/251 MPEG2] and [https://lkml.org/lkml/2016/8/25/248 MPEG4] are the only supported formats but H264 and H265 would be the next step.<br />
<br />
A second limitation of the Allwinner's VPU is the need for buffers in the lower 256M of RAM. In order to allocate large sets of data in this area, "sunxi-cedrus" [https://lkml.org/lkml/2016/8/25/249 reserves a DMA pool] that is then used by videobuf's dma-contig backend() to allocate input and output buffers easily and integrate that with the v4l QBUF/DQBUF APIs.<br />
<br />
From the userspace side of things, all the prior bitstream parsing is done by VA users(such as ffmpeg). Standard VA-API headers are given to the VA backend "sunxi-cedrus-drv-video" which is just in charge of ensuring a correspondence between v4l2 buffers and controls and VA structures. We can compare a VAPicture to a buffer plus an extended control in the OUTPUT queue and a VASurface to a multiplanar buffer in the CAPTURE queue. An Image is then "derived" from a Surface to produce a standard set of NV12 buffers that can be shown on screen by VLC for example. VA-API was an extremely appropriate choice compared to VDPAU since the data it provides are often very similar to the ones the VPU expects.<br />
<br />
=== More info ===<br />
<br />
You can HL Florent Revest (kido) on #cedrus on irc.freenode.net for in depth questions<br />
<br />
[[Category:Cedrus]]<br />
<br />
[[Category:Software]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Mali&diff=23619
Mali
2020-11-02T06:46:29Z
<p>Kenren: add H313 and A63 CPU</p>
<hr />
<div>The '''Mali''' series is a GPU (Graphics Processor Unit) from ARM Ltd. (ARM Holdings plc), designed for embedded systems.<ref>http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP</ref><ref>http://blog.thinkteletronics.com/all-mobile-socsolutions/ All Mobile Soc/Solutions.</ref><br />
<br />
=Overview= <br />
[[File:Mali-400-screenshot.png|thumbnail|300px|es2gears running on Mali-400]]<br />
[[File:XBMC_running_on_Mali-400.jpeg|thumbnail|300px|XBMC running on Mali-400]]<br />
<br />
The '''Mali''' series of Graphics Processing Units (GPUs) are semiconductor intellectual property cores produced by ARM Holdings for licensing in various ASIC (Application-specific integrated circuit) designs by ARM partners. The core is mainly developed by ARM Norway, at the former ''Falanx'' company site.<br />
<br />
Like other embedded IP cores for 3D support, the Mali GPU does not feature display controllers driving monitors (such as the combination often found in common video cards). Instead it is a pure 3D engine that renders graphics into memory and hands the rendered image over to another core that handles the display.<br />
<br />
ARM supplies tools to help in authoring OpenGL ES shaders named ''Mali GPU Shader Development Studio'' and ''Mali GPU User Interface Engine''.<br />
<br />
All Mali4XX GPU Variants conform to OpenGL ES 1.1 & 2.0 as well as OpenVG 1.1.<br><br />
All Mali-TXXX GPU Variants conform to OpenGL ES up to 3.1 as well as OpenVG 1.1.<br><br />
All Mali-GXX GPU Variants conform to OpenGL ES up to 3.2 as well as OpenVG 1.1 and Vilkan 1.2 (no free Vulkan driver yet).<br />
<br />
==Variants:==<br />
There are several generations of which two are currently used by Allwinner.<br />
<br />
===Utgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! GP (Geometry Processor) <br> / vertex shader !! PP (Pixel Processor) <br> / fragment shader !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-400 MP<br />
| 1<br />
| 1<br />
| 256 KiB<br />
| [[A10]] (sun4i), [[A10s]] (sun5i), and [[A13]] (sun5i)<br />
|-<br />
| Mali-400 MP2<br />
| 1<br />
| 2<br />
| 256 KiB<br />
| [[A20]] (sun7i), [[A23]] (sun8i), [[A33]], [[H3]] (sun8i), [[A64]] A64<br />
|-<br />
| Mali-450 MP4<br />
| 1<br />
| 4<br />
| 512 KiB<br />
| [[H5]] (sun50i)<br />
|-<br />
|}<br />
<br />
===Midgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-T720 MP2<br />
| 2<br />
| 512 KiB<br />
| [[H6]] (sun50i)<br />
|-<br />
| Mali-T760 MP2<br />
| 2<br />
| 512 KiB<br />
| [[A63]] (sun50i)<br />
|}<br />
<br />
===Bifrost===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-G31 MP2<br />
| 2<br />
| ??? KiB<br />
| [[H616]], [[H313]] (sun50i)<br />
|-<br />
|}<br />
<br />
More information can be found on the [https://developer.arm.com/products/graphics-and-multimedia/mali-gpus ARM website].<br />
<br />
= Driver =<br />
==Utgard (Mali-400 and Mali-450)==<br />
<br />
=== Lima driver (Open Source) ===<br />
Lima is a project to develop a completely open source graphics driver which supports ARM's Mali-400 and Mali-450 GPUs.<br />
<br />
It consists of two main parts:<br />
* [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/lima Kernel parts] have been included in mainline kernel since v5.2<br />
* [https://gitlab.freedesktop.org/mesa/mesa Mesa] (userspace) parts have been part of upstream project since April 2019.<br />
<br />
Historical links:<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/linux Lima kernel driver]<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/mesa mesa-lima userspace driver]<br />
* based on re-engineering efforts from [http://web.archive.org/web/20180106112822/http://limadriver.org/ Archive of http://limadriver.org/]<br />
<br />
=== Binary driver ===<br />
* '''Mainline Linux:''' Maxime Ripard (Bootlin) worked on Mali OpenGL support with mainline Linux, please refer [https://bootlin.com/blog/mali-opengl-support-on-allwinner-platforms-with-mainline-linux/ these instructions]<br />
* '''Legacy Kernel (Outdated):''' For information on the binary driver, please refer to the [[Mali_binary_driver| binary driver installation guide]].<br />
<br />
==Midgard (Mali T6xx, T7xx, T8xx) and Bifrost (G3x, G5x, G6x, G7x)==<br />
===Panfrost driver (Open Source)===<br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] is a project to develop a completely open source graphics driver which supports ARM's Mali-T6xx, Mali-T7xx, Mali-T800 and Mali-G7x GPUs. This is a '''work in progress and not yet ready''' for general use.<br /><br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] results from a merge of 2 driver reverse engineering projects: chai - for Midgard GPUs (by Alyssa Rosenzweig) and BiOpenly - for Bifrost GPUs (by Lyude Paul). The merge was done due to identical command streams of the ARM Midgard and Bifrost GPUs (but different shader cores).<br />
<br />
* WIP: [https://gitlab.freedesktop.org/panfrost/ Panfrost git repository]<br />
* Alyssa Rosenzweig's Blog: [https://rosenzweig.io/blog/midgard-shaders-with-the-free-nir-compiler.html NIR shader compiler announce] <br />
<br />
<br />
<br />
The aim of this drivers and others such as freedreno is to finally bring all the advantages of open source software to ARM SoC graphics drivers. Currently, the sole availability of binary drivers is increasing development and maintenance overhead, while also reducing portability, compatibility and limiting choice. Anyone who has dealt with GPU support on ARM, be it for a linux with a GNU stack, or for an android, knows the pain of dealing with these binaries.<br />
<br />
* [http://en.wikipedia.org/wiki/Graphics_hardware_and_FOSS#ARM Graphics hardware and FOSS]<br />
<br />
=See also=<br />
* [[Display|Display driver setup.]]<br />
* [[Mali_binary_driver| Mali binary driver installation]].<br />
<br />
=References=<br />
<references /><br />
<br />
=External Links=<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/mali-400-mp.php Mali-400 MP website]<br />
* [http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP]<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/ MALI graphics hardware series webpage at ARM Holdings]<br />
* [http://www.malideveloper.com/ Mali developer] a developer site run by ARM<br />
* [http://malideveloper.arm.com/develop-for-mali/drivers/open-source-mali-gpus-linux-exadri2-and-x11-display-drivers/ Open Source Mali GPUs Linux EXA/DRI2 and X11 Display Drivers]<br />
* [http://web.archive.org/web/20180106112822/http://limadriver.org/ Lima driver (Web Archive)]<br />
<br />
<br />
[[Category:Hardware]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Mali&diff=23617
Mali
2020-11-01T20:05:47Z
<p>Kenren: Add G31 for H616 allwinner CPU</p>
<hr />
<div>The '''Mali''' series is a GPU (Graphics Processor Unit) from ARM Ltd. (ARM Holdings plc), designed for embedded systems.<ref>http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP</ref><ref>http://blog.thinkteletronics.com/all-mobile-socsolutions/ All Mobile Soc/Solutions.</ref><br />
<br />
=Overview= <br />
[[File:Mali-400-screenshot.png|thumbnail|300px|es2gears running on Mali-400]]<br />
[[File:XBMC_running_on_Mali-400.jpeg|thumbnail|300px|XBMC running on Mali-400]]<br />
<br />
The '''Mali''' series of Graphics Processing Units (GPUs) are semiconductor intellectual property cores produced by ARM Holdings for licensing in various ASIC (Application-specific integrated circuit) designs by ARM partners. The core is mainly developed by ARM Norway, at the former ''Falanx'' company site.<br />
<br />
Like other embedded IP cores for 3D support, the Mali GPU does not feature display controllers driving monitors (such as the combination often found in common video cards). Instead it is a pure 3D engine that renders graphics into memory and hands the rendered image over to another core that handles the display.<br />
<br />
ARM supplies tools to help in authoring OpenGL ES shaders named ''Mali GPU Shader Development Studio'' and ''Mali GPU User Interface Engine''.<br />
<br />
All Mali4XX GPU Variants conform to OpenGL ES 1.1 & 2.0 as well as OpenVG 1.1.<br><br />
All Mali-TXXX GPU Variants conform to OpenGL ES up to 3.1 as well as OpenVG 1.1.<br />
<br />
==Variants:==<br />
There are several generations of which two are currently used by Allwinner.<br />
<br />
===Utgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! GP (Geometry Processor) <br> / vertex shader !! PP (Pixel Processor) <br> / fragment shader !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-400 MP<br />
| 1<br />
| 1<br />
| 256 KiB<br />
| [[A10]] (sun4i), [[A10s]] (sun5i), and [[A13]] (sun5i)<br />
|-<br />
| Mali-400 MP2<br />
| 1<br />
| 2<br />
| 256 KiB<br />
| [[A20]] (sun7i), [[A23]] (sun8i), [[A33]], [[H3]] (sun8i), [[A64]] A64<br />
|-<br />
| Mali-450 MP4<br />
| 1<br />
| 4<br />
| 512 KiB<br />
| [[H5]] (sun50i)<br />
|-<br />
|}<br />
<br />
===Midgard===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-T720 MP2<br />
| 2<br />
| 512 KiB<br />
| [[H6]] (sun50i)<br />
|-<br />
|}<br />
<br />
===Bifrost===<br />
{| class="wikitable"<br />
|-<br />
! Name !! unified shader cores !! CPU Level 2 cache size !! Allwinner implementations<br />
|-<br />
| Mali-G31 MP2<br />
| ?<br />
| ??? KiB<br />
| [[H616]] (sun50i)<br />
|-<br />
|}<br />
<br />
More information can be found on the [https://developer.arm.com/products/graphics-and-multimedia/mali-gpus ARM website].<br />
<br />
= Driver =<br />
==Utgard (Mali-400 and Mali-450)==<br />
<br />
=== Lima driver (Open Source) ===<br />
Lima is a project to develop a completely open source graphics driver which supports ARM's Mali-400 and Mali-450 GPUs.<br />
<br />
It consists of two main parts:<br />
* [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/lima Kernel parts] have been included in mainline kernel since v5.2<br />
* [https://gitlab.freedesktop.org/mesa/mesa Mesa] (userspace) parts have been part of upstream project since April 2019.<br />
<br />
Historical links:<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/linux Lima kernel driver]<br />
* Pre-merge development of [https://gitlab.freedesktop.org/lima/mesa mesa-lima userspace driver]<br />
* based on re-engineering efforts from [http://web.archive.org/web/20180106112822/http://limadriver.org/ Archive of http://limadriver.org/]<br />
<br />
=== Binary driver ===<br />
* '''Mainline Linux:''' Maxime Ripard (Bootlin) worked on Mali OpenGL support with mainline Linux, please refer [https://bootlin.com/blog/mali-opengl-support-on-allwinner-platforms-with-mainline-linux/ these instructions]<br />
* '''Legacy Kernel (Outdated):''' For information on the binary driver, please refer to the [[Mali_binary_driver| binary driver installation guide]].<br />
<br />
==Midgard (Mali T6xx, T7xx, T8xx) and Bifrost (G3x, G5x, G6x, G7x)==<br />
===Panfrost driver (Open Source)===<br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] is a project to develop a completely open source graphics driver which supports ARM's Mali-T6xx, Mali-T7xx, Mali-T800 and Mali-G7x GPUs. This is a '''work in progress and not yet ready''' for general use.<br /><br />
[https://gitlab.freedesktop.org/panfrost/ Panfrost] results from a merge of 2 driver reverse engineering projects: chai - for Midgard GPUs (by Alyssa Rosenzweig) and BiOpenly - for Bifrost GPUs (by Lyude Paul). The merge was done due to identical command streams of the ARM Midgard and Bifrost GPUs (but different shader cores).<br />
<br />
* WIP: [https://gitlab.freedesktop.org/panfrost/ Panfrost git repository]<br />
* Alyssa Rosenzweig's Blog: [https://rosenzweig.io/blog/midgard-shaders-with-the-free-nir-compiler.html NIR shader compiler announce] <br />
<br />
<br />
<br />
The aim of this drivers and others such as freedreno is to finally bring all the advantages of open source software to ARM SoC graphics drivers. Currently, the sole availability of binary drivers is increasing development and maintenance overhead, while also reducing portability, compatibility and limiting choice. Anyone who has dealt with GPU support on ARM, be it for a linux with a GNU stack, or for an android, knows the pain of dealing with these binaries.<br />
<br />
* [http://en.wikipedia.org/wiki/Graphics_hardware_and_FOSS#ARM Graphics hardware and FOSS]<br />
<br />
=See also=<br />
* [[Display|Display driver setup.]]<br />
* [[Mali_binary_driver| Mali binary driver installation]].<br />
<br />
=References=<br />
<references /><br />
<br />
=External Links=<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/mali-400-mp.php Mali-400 MP website]<br />
* [http://www.cnx-software.com/2013/01/19/gpus-comparison-arm-mali-vs-vivante-gcxxx-vs-powervr-sgx-vs-nvidia-geforce-ulp/ GPUs Comparison: ARM Mali vs Vivante GCxxx vs PowerVR SGX vs Nvidia Geforce ULP]<br />
* [http://www.arm.com/products/multimedia/mali-graphics-hardware/ MALI graphics hardware series webpage at ARM Holdings]<br />
* [http://www.malideveloper.com/ Mali developer] a developer site run by ARM<br />
* [http://malideveloper.arm.com/develop-for-mali/drivers/open-source-mali-gpus-linux-exadri2-and-x11-display-drivers/ Open Source Mali GPUs Linux EXA/DRI2 and X11 Display Drivers]<br />
* [http://web.archive.org/web/20180106112822/http://limadriver.org/ Lima driver (Web Archive)]<br />
<br />
<br />
[[Category:Hardware]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Sunxi-Cedrus&diff=23616
Sunxi-Cedrus
2020-11-01T19:54:02Z
<p>Kenren: </p>
<hr />
<div>Sunxi-Cedrus is an effort to bring hardware-accelerated video decoding and encoding support for Allwinner SoCs to the '''mainline''' Linux kernel. Additional userspace components that interface with the kernel driver are also provided, for typical GNU/Linux-based systems.<br />
<br />
== Components ==<br />
<br />
Support for Sunxi-Cedrus is implemented through various components, either in kernel space or userspace:<br />
* the '''Cedrus V4L2 M2M kernel driver'''<br />
* the '''v4l2-request VAAPI backend'''<br />
<br />
Additional userspace components are also available, for development purposes:<br />
* the '''v4l2-request-test''' standalone tool, that allows testing the -Cedrus VPU driver <br />
* the '''sun4i-specific libdrm''', with support for allocating buffers in the MB32-tiled NV12 format used by the VPU<br />
* the '''dump libVA backend''', that allows dumping metadata and slices from videos <br />
<br />
Video players that support libVA should be compatible with the v4l2-request libVA backend. However, details in implementations might result in incompatibility with certain players. See [[#Player_Support|Player Support]] for the status of tested players.<br />
<br />
== Status ==<br />
<br />
=== Codec Support ===<br />
<br />
Support status for specific codecs in the v4l2-request '''libVA backend''' is presented in the following table:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Codec<br />
! Decoding<br />
! Encoding<br />
|-<br />
| '''MJPEG'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''MPEG2'''<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''MPEG4'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''VP6'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''H264'''<br />
| style="background: mediumseagreen; color: white;" | Supported (early high profile)<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''VP8'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''H265'''<br />
| style="background: mediumseagreen; color: white;" | Supported (early)<br />
| style="background: lightgray; color: black;" | N/A<br />
|-<br />
| '''VP9'''<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: lightgray; color: black;" | N/A<br />
|}<br />
<br />
=== SoC Support ===<br />
<br />
Support for specific SoCs in the '''V4L2 M2M kernel driver''' is presented in the following table:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Platform<br />
! Cedrus Driver Status<br />
! DRM Planes Status<br />
|-<br />
| '''A10'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
|-<br />
| '''A13/A10s'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
|-<br />
| '''A20'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
|-<br />
| '''A23'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''A33'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''A64'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H3'''<br />
| style="background: mediumseagreen; color: white;" | Supported (4.20)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H5'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
|-<br />
| '''H6'''<br />
| style="background: mediumseagreen; color: white;" | Supported (5.1)<br />
| style="background: mediumseagreen; color: white;" | Supported (5.0)<br />
|-<br />
| '''H616'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''V3/V3s'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|}<br />
<br />
=== Player Support ===<br />
<br />
The following players were tested with the v4l2-request '''libVA backend''':<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Player<br />
! X11 Status<br />
! EGL/GLES Status<br />
! DRM Hardware Plane Status<br />
! X11/Xv Hardware Plane Status<br />
|-<br />
| '''VLC'''<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: tomato; color: white;" | N/A<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''GStreamer'''<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: dodgerblue; color: white;" | Untested<br />
|-<br />
| '''MPV'''<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
| style="background: tomato; color: white;" | Missing<br />
|-<br />
| '''Kodi (downstream)'''<br />
| style="background: dodgerblue; color: white;" | Untested<br />
| style="background: tomato; color: white;" | Missing (broken)<br />
| style="background: mediumseagreen; color: white;" | Supported<br />
| style="background: tomato; color: white;" | N/A<br />
|}<br />
<br />
== Installation ==<br />
<br />
=== Linux ===<br />
<br />
The first step to installing Cedrus support is to build a Linux kernel with the latest patch series for the driver. A tree with all the required patches is available at:<br />
* Repository: [https://github.com/bootlin/linux-cedrus https://github.com/bootlin/linux-cedrus]<br />
* Tag: '''release-2019.03 '''<br />
<br />
The following kernel configuration options must be selected:<br />
<pre><br />
CONFIG_MEDIA_SUPPORT<br />
CONFIG_MEDIA_CONTROLLER<br />
CONFIG_MEDIA_CONTROLLER_REQUEST_API<br />
CONFIG_V4L_MEM2MEM_DRIVERS<br />
CONFIG_VIDEO_SUNXI_CEDRUS<br />
</pre><br />
<br />
In addition, the target device must contain the proper description for '''display engine support in its device-tree source'''.<br />
<br />
Details about building a mainline Linux kernel are available on the [[Mainline Kernel Howto]] page.<br />
<br />
Note that the '''associated kernel headers must be installed to the target device''' for the userspace components to build.<br />
<br />
Decoding H.264/H.265 videos can require a large amount of CMA memory, so it is recommended to set a large CMA pool, e.g. using the <code>cma</code> kernel command line parameter. For instance, 256 MiB should be enough to decode 1080p H.264 videos: <code>cma=256M</code>.<br />
<br />
The first mainline kernel release containing Cedrus support is 4.20 (scheduled for release December 2018 or Jan 2019). Newer Cedrus code is available in the bootlin git repository linked above.<br />
<br />
=== libva-v4l2-request ===<br />
<br />
The main userspace component that supports the Cedrus VPU driver is the libva-v4l2-request VAAPI backend. It is available at:<br />
* Repository: [https://github.com/bootlin/libva-v4l2-request https://github.com/bootlin/libva-v4l2-request]<br />
* Tag: '''release-2019.03'''<br />
<br />
The backend can be '''built and installed on the target device''' by following these steps:<br />
<pre><br />
git clone https://github.com/bootlin/libva-v4l2-request -b release-2019.03<br />
cd libva-v4l2-request<br />
./autogen.sh && make && sudo make install<br />
</pre><br />
<br />
=== libdrm-sun4i ===<br />
<br />
'''This is deprecated and no longer needed for other components to build.'''<br />
<br />
libdrm-sun4i imports the updated sun4i-drm Linux kernel driver definitions for installation in userspace and is available at:<br />
* Repository: [https://github.com/bootlin/libdrm-sun4i.git https://github.com/bootlin/libdrm-sun4i.git]<br />
* Branch: '''master'''<br />
<br />
It can be '''built and installed on the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/libdrm-sun4i<br />
cd libdrm-sun4i<br />
./autogen.sh --prefix=/usr && make && sudo make install<br />
</pre><br />
<br />
Alternatively to building libdrm-sun4i, the <code>sun4i_drm.h</code> file can be placed into <code>/usr/include/drm</code> directly.<br />
<br />
=== v4l2-request-test ===<br />
<br />
The v4l2-request-test tool is available at:<br />
* Repository: [https://github.com/bootlin/v4l2-request-test.git https://github.com/bootlin/v4l2-request-test.git]<br />
* Tag: '''release-2019.03'''<br />
<br />
It can be '''built on the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/v4l2-request-test.git -b release-2019.03<br />
cd v4l2-request-test<br />
make<br />
</pre><br />
<br />
=== libva-dump ===<br />
<br />
The libva-dump VAAPI backend is available at:<br />
* Repository: [https://github.com/bootlin/libva-dump.git https://github.com/bootlin/libva-dump.git]<br />
* Branch: '''master'''<br />
<br />
It can be '''built on the host or the target device''' through the following steps:<br />
<pre><br />
git clone https://github.com/bootlin/libva-dump.git<br />
cd libva-dump<br />
./autogen.sh && make && sudo make install<br />
</pre><br />
<br />
== Usage and Configuration ==<br />
<br />
=== System ===<br />
<br />
In order to access the device nodes created by the Cedrus kernel driver, the user that will be decoding videos needs to be added to the <code>video</code> group.<br />
<br />
Alternatively, the permissions of the <code>/dev/video0</code> and <code>/dev/media0</code> nodes can be changed to allow access by this user.<br />
<br />
=== VLC ===<br />
<br />
In order to use VLC with Cedrus, the libva-v4l2-request VAAPI backend must be installed on the system. VLC must also be configured to use VAAPI for video decoding, through the following menus:<br />
* <code>Tools > Preferences > Input / Codecs > Codecs > Hardware-accelerated decoding > VA-API video decoder</code><br />
* <code>Tools > Preferences > Video > Display > Output > X11 video output (XCB)</code><br />
<br />
While OpenGL video output might be supported (with GPU support installed), it was not tested at this point.<br />
<br />
Although VLC has been configured to use VAAPI for video decoding, libVA must be instructed to use libva-v4l2-request through the <code>LIBVA_DRIVER_NAME</code> environment variable :<br />
<pre><br />
export LIBVA_DRIVER_NAME=v4l2_request<br />
vlc path/to/video.mpeg<br />
</pre><br />
<br />
==== Examples ====<br />
<br />
Here are some examples of VLC usage for specific use cases:<br />
* Remote testing without audio, scaling and OSD:<br />
<pre><br />
export LIBVA_DRIVER_NAME=v4l2_request<br />
export DISPLAY=:0<br />
vlc --no-audio --no-autoscale --no-osd --play-and-exit path/to/video.mpeg<br />
</pre><br />
<br />
=== v4l2-request-test ===<br />
<br />
v4l2-request-test is preferably used from its repository directory: the default path to the video slices is relative from the root of the repository. Since the tool uses the DRM KMS device directly, no graphical session (not even a login manager) must be running concurrently.<br />
<br />
The tool currently contains a single preset with slices that allow decoding the first 25 frames of the sample MPEG2 Big Buck Bunny video. More presets can be added from the data dumped with libva-dump.<br />
v4l2-request-test usage is displayed when the tool is called with the <code>-h</code> argument.<br />
<br />
==== Examples ====<br />
<br />
Examples of v4l2-request-test use include:<br />
* Decoding frames at 25 fps in a loop, with information:<br />
<pre><br />
./v4l2-request-test -f 25 -l<br />
</pre><br />
* Decoding frames as fast as possible in a loop:<br />
<pre><br />
./v4l2-request-test -ql<br />
</pre><br />
* Specifying the right nodes when another V4L2 driver is loaded:<br />
<pre><br />
./v4l2-request-test -v /dev/video1 -m /dev/media1<br />
</pre><br />
<br />
== Current Development ==<br />
<br />
From March to August 2018, the development of both the Cedrus V4L2 kernel driver and the Cedrus libVA backend was undertaken by:<br />
* '''Paul Kocialkowski''', intern at Bootlin<br />
* '''Maxime Ripard''', engineer at Bootlin<br />
<br />
This effort was funded by the [https://bootlin.com/blog/allwinner-vpu-crowdfunding/ related crowdfunding] started by Bootlin in February 2018.<br />
<br />
=== 2019.03 Release ===<br />
<br />
A second release of Cedrus was packed in March 2019, following up on numerous interface changes and new platforms support.<br />
<br />
The source code for the required components of the release are available on Bootlin's GitHub space, with the <code>release-2019.03</code> tag:<br />
* [https://github.com/bootlin/linux-cedrus/releases/tag/release-2019.03 linux-cedrus]<br />
* [https://github.com/bootlin/v4l2-request-test/releases/tag/release-2019.03 v4l2-request-test]<br />
* [https://github.com/bootlin/libva-v4l2-request/releases/tag/release-2019.03 libva-v4l2-request]<br />
<br />
=== 2018.07 Release ===<br />
<br />
A first release of Cedrus was presented in July 2018, with an [https://bootlin.com/blog/main-goals-delivery-of-the-allwinner-vpu-crowdfunding associated blog post on the Bootlin blog].<br />
<br />
The source code for the required components of the release are available on Bootlin's GitHub space, with the <code>release-2018.07</code> tag:<br />
* [https://github.com/bootlin/linux-cedrus/releases/tag/release-2018.07 linux-cedrus]<br />
* [https://github.com/bootlin/v4l2-request-test/releases/tag/release-2018.07 v4l2-request-test]<br />
* [https://github.com/bootlin/libva-v4l2-request/releases/tag/release-2018.07 libva-v4l2-request]<br />
* [https://github.com/bootlin/xbmc/releases/tag/release-2018.07 Kodi]<br />
* [https://github.com/bootlin/LibreELEC.tv/releases/tag/release-2018.07 LibreELEC]<br />
<br />
A root filesystem tarball built from the LibreELEC release, which includes Kodi and libva-v4l2-request, is also available (with a checksum and a detached GPG signature):<br />
* [https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz LibreELEC-cedrus-release-2018.07.tar.gz], ([https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz.sha512sum LibreELEC-cedrus-release-2018.07.tar.gz.sha512sum], [https://bootlin.com/~paul/pub/LibreELEC-cedrus-release-2018.07.tar.gz.asc LibreELEC-cedrus-release-2018.07.tar.gz.asc])<br />
<br />
The root filesystem includes neither boot software nor kernel support: both have to be installed in addition to extracting the filesystem on the target medium. Instructions to build the kernel are available at: [[#Linux]]<br />
<br />
==== Known Limitations ====<br />
<br />
Some limitations in the software present in the release are known and listed as follows:<br />
* Decoding H264 videos (especially in high resolutions) may consume more memory than there is available in the dedicated pool. This is because Kodi does not yet interact properly with VAAPI when freeing buffers. The result is that Kodi will hang or display a fully black video.<br />
<br />
=== Weekly Reports ===<br />
<br />
Reports on the advancement of the development of Sunxi-Cedrus are posted regularly on the [https://bootlin.com/ Bootlin Blog], starting week 10 of 2018:<br />
* [https://bootlin.com/blog/final-weekly-status-update-allwinner-vpu-support/ Week 35 Final Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-34/ Week 34 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-33/ Week 33 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-32/ Week 32 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-31/ Week 31 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-30/ Week 30 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-main-goals-delivery/ Delivery of Allwinner VPU driver main goals]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-28/ Week 28 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-27/ Week 27 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-26/ Week 26 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-25/ Week 25 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-24/ Week 24 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-23/ Week 23 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-22/ Week 22 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-21/ Week 21 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-20/ Week 20 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-19/ Week 19 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-18/ Week 18 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-17/ Week 17 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-16/ Week 16 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-15/ Week 15 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-14/ Week 14 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-13/ Week 13 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-12/ Week 12 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-11/ Week 11 Status Update]<br />
* [https://bootlin.com/blog/allwinner-vpu-support-in-mainline-linux-status-update-week-10/ Week 10 Status Update]<br />
<br />
== Community ==<br />
<br />
The community revolving around Sunxi-Cedrus can be contacted through different means:<br />
* The [[Mailing_list|linux-sunxi mailing list]], with the developers involved in carbon copy<br />
* The '''#cedrus''' channel on the [http://freenode.net/ freenode] IRC network<br />
<br />
== Past Development ==<br />
<br />
Initial work on the Sunxi-Cedrus V4l2 kernel driver and libVA backend was carried out by '''Florent Revest''' (kido) during an internship at Bootlin (formerly Free Electrons), resulting in a proof-of-concept driver and associated backend with MPEG2 and partial MPEG4 support for the A13 SoC.<br />
<br />
If you want to try it, you need a board with an A13 SoC, this page will try to guide you from your first steps with the driver to the details of its implementation. Make sure you've checked the known bugs and limitations before using it.<br />
<br />
=== Installation ===<br />
<br />
This procedure has been tested on the NextThingCo's CHIP board but should be adaptable to other A13 boards supported by the 4.8 mainline kernel. The first thing you need to do is to recompile a kernel with the sunxi-cedrus v4l driver and the corresponding device tree entry. You can follow the [[Mainline Kernel Howto]] but using the following repository:<br />
<br />
<pre>https://github.com/FlorentRevest/linux-sunxi-cedrus</pre><br />
<br />
Use menuconfig to enable the VPU driver in Device Drivers -> Multimedia support -> Memory-to-memory multimedia devices -> Sunxi CEDRUS VPU driver. The driver should be compiled into the kernel and not as a module.<br />
<br />
Your kernel will be located in arch/arm/boot/zImage and device tree in arch/arm/boot/dts/sun5i-r8-chip.dtb Don't forget to install kernel headers to your distribution if you want to be able to compile sunxi-cedrus-drv-video.<br />
<br />
On a standard debian jessie system you will need to install the following build dependencies:<br />
<br />
<pre>apt install git autoconf automake libtool pkg-config gcc libdrm-dev libva-dev libx11-dev make g++ vlc xorg</pre><br />
<br />
You will be able to compile and install a newer version of libVA supporting the LIBVA_DRIVER_NAME environment variable and then the sunxi-cedrus libVA backend:<br />
<br />
<pre>git clone https://github.com/01org/libva<br />
cd libva<br />
git checkout 695f99ef0405cf4255e7767b44effb0da2fe706e<br />
./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/<br />
make<br />
sudo make install</pre><br />
<br />
<pre>git clone https://github.com/FlorentRevest/sunxi-cedrus-drv-video<br />
cd sunxi-cedrus-drv-video<br />
./autogen.sh<br />
make # DRM_CFLAGS=-I/path/to/your/linux/headers<br />
sudo make install</pre><br />
<br />
Once installed, make sure you've exported the environment variable telling VA to use the sunxi_cedrus backend, activate the VA X11 decoding in VLC settings (Tools -> Preferences -> Input / Codecs -> set 'Hardware-accelerated decoding' to 'VA-API video decoder via X11') and then run one of the sample media file you can find [http://samplemedia.linaro.org/MPEG2 here] and [http://samplemedia.linaro.org/MPEG4/SVT/ here]<br />
<br />
<pre>xinit&<br />
export DISPLAY=:0.0<br />
export LIBVA_DRIVER_NAME=sunxi_cedrus<br />
vlc big_buck_bunny_480p_MPEG2_MP2_25fps_1800K.MPG<br />
vlc ducks_take_off_420_720p25.mp4</pre><br />
<br />
=== Supported features ===<br />
<br />
* MPEG2 Decoding<br />
* Partial MPEG4 Decoding<br />
<br />
=== Known bugs and limitations ===<br />
<br />
* H264 and H265 are not supported (some of the underlying problems include: allocating 19 surfaces at once and queueing several slices by frames)<br />
* MPEG4 decoding has some glitches. When something moves in a video it usualy draws some kind of trace behind it, this behavior is believed to come from an inconsistency in movement prediction. (VLC also tries to SyncSurface more often than needed which results in error when dequeuing the capture buffers)<br />
* No encoding: this can be added later on but hasn't been tried yet<br />
* Direct rendering: currently, buffers coming out of the v4l driver in a tiled pixel format are converted to a standard YUV pixel format and then rendered on screen by ffmpeg/vlc. As soon as the support for YUV DRM planes will be added to the kernel, this behavior can be replaced and the performances will be much better.<br />
* Currently the video can only be played at a zoom of 1:1, otherwise the scaling is done by ffmpeg in full CPU and it is too slow. Having that in the DRM driver would also allow for hardware accelerated frames scaling.<br />
* We currently can't play a MPEG2 file and then a MPEG4 file (or vice versa) or the output will be full of garbage pixels. This is probably due to some registers of the MPEG engine being kept between the two decoding and "polluting" the MPEG4 decoding with older values from MPEG2 decoding. We should find a way to clear those registers when receiving a S_FMT ioctl in the kernel driver or when closing the video device.<br />
<br />
=== Technical details and implementation ===<br />
<br />
The Cedrus project has provided reverse engineering of the Allwinner's proprietary [[CedarX]] blob for a couple of years. This work has been done on the Allwinner's 3.4 kernel and led to the creation of a libVDPAU backend interfacing with the "cedar_dev" and "disp" kernel drivers available in the vendor's kernel. The "cedar_dev" kernel driver directly mapped registers and memory from the [[Video_Engine | VE]] to the userspace and could potentially be a security risk. Those two drivers couldn't be upstreamed because they don't use any standard API or framework.<br />
<br />
In order to use the [[Video_Engine | VE]] on a mainline kernel, a new proper kernel driver had to be written from scratch with mainlinable methods in mind. The correct way to implement a codec device is to use the "video4linux" framework, referenced as v4l2. v4l2 handles many kind of video devices, some of them are cameras and sends data to a CAPTURE queue, others are screens and use data from an OUTPUT queue. Codec devices require a flow of data from OUTPUT to CAPTURE, they are "memory-to-memory" devices.<br />
<br />
Until now, most of the codec devices were able to handle raw bitstream via a firmware, which means that the OUTPUT queue (containing the compressed input data) could directly contain a MPEG file and the CAPTURE queue was filled with video frames. But the inner working of Allwinner's VPU is different, indeed it requires prior bitstream parsing into smaller frames/slices alongside headers' data. This parsing can not be done in the kernel side since it would be a complex codebase to maintain so it requires a new user-space usecase, hence a new API.<br />
<br />
The "Frame API" described [https://blogs.s-osg.org/planning-future-media-linux-linux-kernel-summit-media-workshop-seoul-south-korea/ here] has been designed for the Rockchip's VP8 decoding support and is implemented [https://lwn.net/Articles/678113/ here] and [https://code.google.com/p/chromium/codesearch#chromium/src/content/common/gpu/media/v4l2_slice_video_decode_accelerator.cc here] The "Frame API" aims to standardize the way VPU drivers should communicate frame by frame with the userspace. The advocated method is to bind "buffers" containing slice data from the OUTPUT queue to "extended controls" containing frame's header. The extended controls mechanism allows to send complex data structures to the kernel and program device's registers accordingly. However, the userspace might want to queue several frames in a row and set the corresponding extended controls at the same time. If the registers are programmed at the time an extended control is received, this means that at the time of processing a buffer, the registers might be programmed for another frame. This scenario is to be fixed by the "Request API".<br />
<br />
The idea behind this API is to allow atomic operations like a QBUF and a S_EXT_CTRLS. As of August 2016, the "Request API" is still at the state of RFC, it has had quite a few proposals for the past few years but none of them got accepted into the kernel. [https://openiotelc2016.sched.org/event/6DAG/v4l2-on-steroids-the-request-api-laurent-pinchart The latest RFCs], related to the Media API are not able to handle controls so sunxi-cedrus had to use an [https://lwn.net/Articles/641204/ older RFC.]<br />
<br />
The "sunxi-cedrus" kernel driver is hence made of a m2m v4l2 driver handling requests of MPEG2 or MPEG4 frames data with a standard header extended control. At the time of processing the m2m queue, it programs the VPU's registers depending on the used codec. Currently [https://lkml.org/lkml/2016/8/25/251 MPEG2] and [https://lkml.org/lkml/2016/8/25/248 MPEG4] are the only supported formats but H264 and H265 would be the next step.<br />
<br />
A second limitation of the Allwinner's VPU is the need for buffers in the lower 256M of RAM. In order to allocate large sets of data in this area, "sunxi-cedrus" [https://lkml.org/lkml/2016/8/25/249 reserves a DMA pool] that is then used by videobuf's dma-contig backend() to allocate input and output buffers easily and integrate that with the v4l QBUF/DQBUF APIs.<br />
<br />
From the userspace side of things, all the prior bitstream parsing is done by VA users(such as ffmpeg). Standard VA-API headers are given to the VA backend "sunxi-cedrus-drv-video" which is just in charge of ensuring a correspondence between v4l2 buffers and controls and VA structures. We can compare a VAPicture to a buffer plus an extended control in the OUTPUT queue and a VASurface to a multiplanar buffer in the CAPTURE queue. An Image is then "derived" from a Surface to produce a standard set of NV12 buffers that can be shown on screen by VLC for example. VA-API was an extremely appropriate choice compared to VDPAU since the data it provides are often very similar to the ones the VPU expects.<br />
<br />
=== More info ===<br />
<br />
You can HL Florent Revest (kido) on #cedrus on irc.freenode.net for in depth questions<br />
<br />
[[Category:Cedrus]]<br />
<br />
[[Category:Software]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Linux_mainlining_effort&diff=23297
Linux mainlining effort
2020-05-06T10:04:36Z
<p>Kenren: on drivers/gpu/drm/sun4i/sun4i_tv.c seems that A10 is supported. On BananaPi (A20) I've used CVBS but not sure if with SimpleFB or Sun4i ,I currently no longer have the monitor, so I can't verify</p>
<hr />
<div>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.<br />
<br />
=Overview=<br />
The idea is to submit the code needed to run the Linux kernel on Allwinner SoCs upstream, ie. to the official Linux kernel.<br />
<br />
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.<ref>http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf</ref><ref>[http://www.cnx-software.com/2013/01/16/your-new-arm-soc-linux-support-check-list-elce-2012/ Your New ARM SoC Linux Support Check-List – ELCE 2012]</ref><br />
<br />
Where relevant, I have attempted to include who is currently working on an item, mostly separate from any particular mainlining goal.<br />
<br />
=Status=<br />
<br />
The [[Mainline_Kernel_Howto|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|Mainline U-Boot howto]].<br />
<br />
The [[:Category:Mainline_Kernel | Mainline Kernel category ]] gives an overview of currently supported devices.<br />
<br />
== Status Matrix ==<br />
<br />
The goal of this matrix is to give an easy view of work on each SoC worked on by linux-sunxi.<br />
<br />
{| class="wikitable" style="text-align: center; width: 100%;"<br />
|-<br />
! style="width: 13%; text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br>[[R8]]<br />
! [[A20]]<br>[[T2]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br>[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[R40]]<br>[[T3]]<br />
! [[V3]]|[[V3s]]<br>[[S3]]|[[S3L]]<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | AC97<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Audio Codec]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 5.0<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: red;" | NO<br />
<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="3" | ADC<br />
| style="text-align: left;" | GPADC<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Thermal<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: darkgreen;" | ?<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.7<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Touch<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| N/A<br />
| style="background: lightgreen;" | 4.0<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| rowspan="4" style="text-align: left;" | [[CSI|Camera]]<br />
<br />
| style="text-align: left;" | BT656<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" | ISP<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" | MIPI CSI<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" | Parallel<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Clocks<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | CPUFreq (DVFS)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Cryptographic_Hardware_Accelerators|Crypto]]<br />
| N/A<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: darkgreen;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Display (SimpleFB)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen" | 4.16<br />
| style="background: lightgreen" | 4.16<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| rowspan="8" style="text-align: left;" | Display<br />
([https://dri.freedesktop.org/wiki/DRM/ DRM])<br />
<br />
| style="text-align: left;" | CVBS<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Audio<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI CEC<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.14<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: orange;" | WIP<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Video<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.13<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | LVDS<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 5.7<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.16<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | MIPI DSI<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | RGB<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | VGA<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | DMA<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | [[Ethernet]]<br />
| style="text-align: left;" | [[Ethernet#EMAC|EMAC]]<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.11<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11 <br />
| rowspan="2"| N/A<br />
| N/A<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.1<br />
| style="background: lightgreen;" rowspan="2" | 4.16<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.0<br />
| style="background: lightgreen;" rowspan="2" | 4.18<br />
| style="background: lightgreen;" rowspan="2" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | [[Ethernet#GMAC|GMAC]]<br />
<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.17<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | GPU(3D)<br />
| style="text-align: left;" | [[Mali]]<br />
| N/A<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | [[PowerVR]]<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | HW Spinlocks<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[I2C]]<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.13<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | I2S<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: red;" | NO<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | IOMMU<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[IR]]<br />
| style="background: red" | NO<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.0<br />
| N/A<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Keypad<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | LRADC<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | MsgBox<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.8<br />
| N/A<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: lightgreen;" | 5.8<br />
| style="background: lightgreen;" | 5.8<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[NAND]]<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.12 <ref name="mlc">While the NAND controller itself is supported, the NAND technology found on the vast majority of boards isn't. See [[MTD_Driver#Challenges|this page]] </ref><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc"/><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | PCIe<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<ref name="h6-pcie">Allwinner H6 has a quirky PCIe controller that doesn't map the PCIe address space properly to CPU,<br />
and accessing the PCIe config space, IO space or memory space needs to be wrapped. As Linux doesn't wrap PCIe memory space access, it's not possible to do a proper PCIe controller without using an hypervisor. The BSP kernel modifies the driver to wrap the access, so it's also not generic, and only devices with modified driver will work. https://forum.armbian.com/topic/13529-a-try-on-utilizing-h6-pcie-with-virtualization/</ref><br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Pinctrl<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[PMU]]<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: grey; color: white;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[PWM_Controller|PWM]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RSB]]<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.14<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RTC]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SATA]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SD/ [[eMMC|MMC]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SMP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.18<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPDIF]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPIdev|SPI]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.7<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SRAM Controller|SRAM]]<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 5.0 <br />
| style="background: lightgreen;" | 5.1 <br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB_OTG_Controller_Register_guide#USB_OTG|USB OTG]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | USB3<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 5.5<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Video_Engine|VE]] | [[Sunxi-Cedrus]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.2 <br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Watchdog<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
! style="text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br />
[[R8]]<br />
! [[A20]]<br>[[T2]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br />
[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[R40]]<br />
[[T3]]<br />
! [[V3]]|[[V3s]]<br>[[S3]]|[[S3L]]<br />
<br />
|}<br />
<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|-<br />
! Legend<br />
|-<br />
| style="background: lightgreen;" | In Linux mainline since version x<br />
|-<br />
| style="background: darkgreen;" | Nobody works on it, but it should be compatible with already done drivers<br />
|-<br />
| style="background: orange;" | Somebody works on it<br />
|-<br />
| style="background: red;" | No support, nobody works on it<br />
|-<br />
| style="background: black; color: white;" | support impossible<br />
|-<br />
| style="background: grey; color: white;" | Status is unknown/to be completed<br />
|}<br />
<br />
== Work In Progress ==<br />
<br />
=== Core Stuff ===<br />
*[[AR100]] firmware (WiP: Samuel Holland) [https://github.com/crust-firmware/crust ARISC firmware for sunxi SoCs ]<br />
<br />
* [[A13]] PSCI Suspend / Resume / CPUIdle (WiP: Antoine Tenart) [http://lists.denx.de/pipermail/u-boot/2016-September/265453.html patch-v1]<br />
<br />
=== Major drivers ===<br />
* [[H6]] I2S Clément Péron [https://patchwork.kernel.org/cover/11497007/ Add H6 I2S support]<br />
<br />
* [[H6]] IOMMU WIP Maxime Ripard [https://patchwork.kernel.org/cover/11394841/ iommu: Add Allwinner H6 IOMMU driver v2] <br />
<br />
* [[H6]] Hypervisor for PCIe [https://forum.armbian.com/topic/13529-a-try-on-utilizing-h6-pcie-with-virtualization/ A try on utilizing H6 PCIe with "Virtualization"]<br />
<br />
* [[A64]] / [[H3]] / [[H5]] / [[H6]] HDMI Audio - Clément Péron / Marcus Cooper / Jernej Škrabec [https://patchwork.kernel.org/cover/11510511/ Add Allwinner H3/H5/A64 HDMI audio]<br />
<br />
* [[R40]] MIPI-DSI WIP Jagan Teki [https://patchwork.kernel.org/cover/11314031/ drm/sun4i: Allwinner R40 MIPI-DSI support v3] <br />
<br />
* [[AC100]] Audio codec WiP Ondrej Jirman [https://megous.com/git/linux/commit/?h=orange-pi-5.5&id=170d38d650f67657600d4e0e868e0e7110b89ee1 digital part] [https://megous.com/git/linux/commit/?h=orange-pi-5.5&id=ee424255a6fb9280ac27c1953019b768ca973ca7 analog part]<br />
<br />
* [[F1C100s]] USB WIP George Hilliard [https://lore.kernel.org/patchwork/cover/1206936/ Support the Allwinner F1C100s USB stack]<br />
<br />
=== Minor drivers ===<br />
<!-- Please move the newest entry to the top --><br />
* [[A64]] hwspinlock WIP Nikolay Borisov [https://patchwork.kernel.org/cover/11373645/ Add support for hwspinlock on A64 SoC] <br />
* [[A83T]] / [[A64]] / [[H3]] hwspinlock WIP Corentin Labbe (montjoie) [https://lore.kernel.org/patchwork/patch/706512/ RFC,1/3][https://lore.kernel.org/patchwork/patch/706511/ RFC,2/3][https://lore.kernel.org/patchwork/patch/706513/ RFC,3/3]<br />
* [[A10]] / [[A20]] / [[A31]] HDMI Audio WIP Stefan Mavrodiev [https://lore.kernel.org/patchwork/cover/1177803/ Add support for sun4i HDMI audio]<br />
* [[A80]] Thermal sensor WIP Philipp Rossak (embed-3d): https://github.com/embed-3d/linux/branches/all<br />
* [[H5]] Cpufreq (DVFS) WIP Chen-Yu Tsai [https://patchwork.kernel.org/cover/10787869/ arm64: dts: allwinner: h5: Enable CPU DVFS (cpufreq)]<br />
* [[R40]] PWM (WIP Hao Zhang [https://www.spinics.net/lists/kernel/msg2731498.html patch-v2])<br />
* [[A31]]/[[A31s]] PWM support (WiP: Siarhei Volkau [http://lists.infradead.org/pipermail/linux-arm-kernel/2017-February/486405.html patch-v1])<br />
* [[A20]] Keypad (WiP: Yassin Jaffer (ddc) [http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/370079.html patch])<br />
<br />
=== Drivers that can still be improved/added ===<br />
<br />
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.<br />
<br />
* sunxi-musb driver lacks DMA support (with current driver, USB gadgets are limited to PIO, limiting speed to 10MiB/s and causing large CPU)<br />
* DE2 driver has buggy layer support, see [https://patchwork.kernel.org/patch/11145803/]<br />
* DE1/DE2/DE3 writeback support<br />
* A64 audiocodec driver components (sun8i-codec and sun50i-codec-analog) lack support for jack detection<br />
<br />
== Planned for 5.9 ==<br />
<br />
== Planned for 5.8 ==<br />
* [[H6]]<br />
** DVFS<br />
<br />
* [[A63]] / [[A83T]] / [[H3]] / [[H5]] / [[H6]]<br />
** Message Box<br />
<br />
== Merged into 5.7 ==<br />
*[[A20]]<br />
** LVDS<br />
<br />
*[[A83T]] and [[A64]]<br />
** Rotate driver<br />
<br />
*[[H6]]<br />
** SPI<br />
<br />
*[[R40]]<br />
** Thermal<br />
<br />
New Devices Supported<br />
*[[A13]]<br />
** [[PocketBook Touch Lux 3]]<br />
*[[A64]]<br />
** [[PineTab]]<br />
** [[PinePhone]]<br />
*[[A20]]<br />
** Linutronix Testbox v2<br />
<br />
== Merged into 5.6 ==<br />
* [[A10]]<br />
** CSI (BT656 and Parallel)<br />
<br />
*[[A64]]<br />
** MIPI DSI<br />
** DVFS<br />
<br />
*[[A64]] / [[A83T]] / [[H3]] / [[H5]] / [[H6]]<br />
** Thermal<br />
<br />
*[[H6]]<br />
** PWM<br />
<br />
*[[H3]] / [[H5]] / [[H6]] / [[R40]]<br />
**PMU<br />
<br />
*[[R40]]<br />
** CSI (BT656 and Parallel)<br />
** SPI<br />
<br />
New Devices Supported<br />
* [[H5]]<br />
** ALL-H3-IT H5 board<br />
** ALL-H5-CC H5 board<br />
* [[H6]]<br />
** [[PineH64]] Model A<br />
<br />
== Merged into 5.5 ==<br />
*[[H3]]<br />
** Deinterlace driver<br />
<br />
*[[H6]]<br />
**Crypto<br />
**GPU(3D) Mali<br />
**USB3 PHY (for boards not needing vbus switching)<br />
<br />
*[[A64]] / [[A80]] / [[A83T]] / [[H3]] / [[H5]] / [[R40]] <br />
**Crypto<br />
<br />
* multiple SoCs<br />
** [[Cedrus]] HEVC/H.265<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** Emlid Neutis<br />
<br />
New Devices Supported<br />
* [[H3]]<br />
** [[FriendlyARM_NanoPi_Duo2]]<br />
<br />
== Merged into 5.4 ==<br />
* [[A20]]<br />
** CSI (BT656 and Parallel)<br />
* [[A64]]<br />
** IR<br />
* [[H6]]<br />
** IR<br />
** RTC<br />
** SPDIF<br />
New Devices Supported<br />
* [[A64]]<br />
** [[Olimex A64-OLinuXino]] eMMC<br />
* [[H6]]<br />
** [[Tanix TX6]]<br />
* [[S3]]<br />
** [[Lichee Zero Plus]]<br />
<br />
== Merged into 5.3 ==<br />
* [[A64]]<br />
** LRADC<br />
** RGB LCD<br />
* [[A83T]]<br />
** CSI (BT656 and Parallel)<br />
* [[H6]]<br />
** DMA<br />
** Watchdog<br />
* multiple SoCs<br />
** [[Cedrus]] h264<br />
<br />
== Merged into 5.2 ==<br />
* [[A83T]]<br />
** LRADC<br />
** USB OTG<br />
<br />
* [[H6]]<br />
** [[Cedrus]]<br />
<br />
* multiple SoCs<br />
** [[Mali Open Source Driver|Lima]]<br />
** [[Mali Open Source Driver|Panfrost]]<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** Banana-Pi-M2-Zero<br />
<br />
New Devices Supported<br />
* [[H6]]<br />
** [[Beelink GS1]]<br />
** [[Xunlong Orange Pi 3]]<br />
<br />
== Merged into 5.1 ==<br />
* A10<br />
** Cedrus<br />
** PMU<br />
<br />
* A20<br />
** Audio Codec improvements<br />
<br />
* A23<br />
** Display pipeline<br />
** LCD enabled on Q8 A23 tablets<br />
<br />
* A64<br />
** ARM Architectural Timer errata workaround<br />
** PMU<br />
** CSI (BT656 and Parallel)<br />
<br />
* A80<br />
** GMAC support<br />
<br />
* CSI in general<br />
** RGR565 support<br />
** JPEG pass-through support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Banana Pi M2+]]<br />
** [[Banana Pi M2 Ultra]]<br />
<br />
* [[LCD]] enabled on [[A13]] [[Q8]] tablets<br />
<br />
== Merged into 5.0 ==<br />
* A64<br />
** Cedrus<br />
** DTS changes for audio codec<br />
<br />
* F1C100s<br />
** initial F1C100s support<br />
<br />
* H6<br />
** Ethernet<br />
** DE3/HDMI support<br />
** USB 2.0<br />
<br />
* H3 / H5<br />
** CSI (BT656 and Parallel) Support<br />
<br />
* H5<br />
** Cedrus<br />
<br />
* R40<br />
** RTC<br />
<br />
* T3<br />
** initial T3 support<ref>https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7badd1d7aa61087010803affa19bb83fb5a0af1</ref><br />
<br />
* V3s<br />
** CSI (BT656 and Parallel) Support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Sinovoip Banana Pi M2 Magic | Banana Pi M2 Magic]]<br />
** [[Banana Pi M3]]<br />
** [[Banana Pi M64]]<br />
** [[Cubietruck]]<br />
** [[Cubietech_Cubietruck_Plus|Cubietruck Plus]]<br />
<br />
New Devices Supported<br />
* [[Xunlong Orange Pi Lite 2]]<br />
<br />
== Merged into 4.20 ==<br />
<br />
* A13 / A20 / A33 / H3<br />
** Cedrus driver<br />
<br />
* A83T<br />
** IR receiver<br />
<br />
* A64<br />
** Cleanup for device tree files<br />
** HDMI support<br />
** Audio codec support (DTS changes will be merged in 5.0)<br />
<br />
* H3 / H5<br />
** SID<br />
<br />
* R40<br />
** SATA<br />
<br />
New Devices Supported<br />
* [[Pine64]] LTS<br />
* [[Xunlong Orange Pi One Plus]]<br />
* [[Xunlong Orange Pi Zero Plus 2]] (H3 variant)<br />
* [[Sinovoip Banana Pi M2+]] (H5 variant)<br />
<br />
== Merged into 4.19 ==<br />
<br />
* A10 / A13 / A20 / A23 / A33<br />
** SRAM controller / system control<br />
<br />
* A64<br />
** SRAM controller / system control<br />
** Display clocks and bus<br />
** RTC clock output<br />
** PWM<br />
** R_I2C<br />
<br />
* H3<br />
** SRAM controller / system control<br />
<br />
* H6<br />
** MMC<br />
** PMIC<br />
<br />
* R40<br />
** HDMI support<br />
<br />
Board Changes<br />
* SPI flash node for [[Orange Pi PC 2]] and [[Pine64#Variants | Pine64 SoPINE]]<br />
* Use lid switch as wake-up source for A64 based laptops<br />
* LEDs added for [[PineH64]]<br />
<br />
New Devices<br />
* [[Pine Pinebook]]<br />
* Amarula A64-Relic<br />
<br />
== Changes merged up to 4.18 ==<br />
Changes up to 4.18 can be found on [[Linux mainlining history]] page.<br />
<br />
=References=<br />
<references /><br />
<br />
= See also =<br />
* [[Mainline Kernel Howto]]<br />
* [[Possible setups for hacking on mainline]]<br />
* [[Linux Kernel]]<br />
**[[Toolchain]]<br />
<br />
=External Links=<br />
* [http://www.kernel.org kernel.org] - Official website for the Linux Kernel<br />
** [http://github.com/torvalds/linux http://github.com/torvalds/linux] - Linus Torvalds' GitHub account with the upstream Linux kernel<br />
* [http://www.kernel.org/doc/ Linux Kernel documentation index]<br />
* [http://www.kernel.org/doc/man-pages/ Linux Kernel man pages]<br />
* [http://kernelnewbies.org/ Kernel Newbies Site - Excellent source of information for people new to kernel]<br />
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary Linus' kernel tree for 2.6]<br />
* [https://bugzilla.kernel.org/ Kernel bugzilla] - [https://bugzilla.kernel.org/show_bug.cgi?id=15790 Regressions for each of recent versions]<br />
* [http://www.fsfla.org/svnwiki/selibre/linux-libre/ Linux-libre project - Maintains and distributes fully free kernel]<br />
* [http://lingrok.org/ LinGrok, Linux kernel source code cross-reference]<br />
* [https://elixir.bootlin.com/linux/latest/source?a=arm Bootlin LXR (Linux Cross Reference)]<br />
* [http://lists.infradead.org/pipermail/linux-arm-kernel/ linux-arm-kernel - Mailing list archive]<br />
===How to upstream===<br />
* [http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf Your new ARM SoC Linux support check-list! by Thomas Petazzoni of Bootlin]<br />
*[http://www.cnx-software.com/2014/03/04/linux-kernel-upstreaming-how-to-linaro-connect-asia-2014/ Linux Kernel Upstreaming How-To (CNXSoft - Embedded Software Development)]<br />
**[http://www.youtube.com/watch?v=dY7fikYZ42c Matt Porter's YouTube video talk on “Upstreaming 101" (LCA14-111)]<br />
***[http://www.linaro.org/documents/download/65f888c674508efcf9bd5d90398a186a530d01c4c78db Matt Porter's presentation slides for “Upstreaming 101" (LCA14-111)]<br />
**[https://www.youtube.com/watch?v=FiQ5uV_Mm5c Matt Porter's YouTube video talk on “Upstreaming 201" (LCA14-112)]<br />
***[http://www.linaro.org/documents/download/7b9920fcc89589bad9063d87d9137f08530d020b71924 Matt Porter's presentation slides for “Upstreaming 201" (LCA14-112)]<br />
*[http://www.cnx-software.com/2011/08/19/how-to-write-and-submit-a-linux-kernel-patch/ How to Write and Submit a Linux Kernel Patch (CNXSoft - Embedded Software Development)]<br />
** [http://www.youtube.com/watch?v=LLBrBBImJt4 YouTube Video- Write and Submit your first Linux kernel Patch]<br />
** [http://www.cnx-software.com/pdf/kernel-tutorial/kernel_patch_tutorial.pdf Greg Kroah-Hartman Kernel Tutorial Write and Submit your first Linux Kernel Patch]<br />
*[http://www.linaro.org/connect-lca14/resources Linaro resources page from LCA (Linaro Connect Asia) 2014]<br />
<br />
=Notes=<br />
<references group=note /><br />
<br />
[[Category:Development]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Xunlong_Orange_Pi_3&diff=23121
Xunlong Orange Pi 3
2020-02-04T08:00:54Z
<p>Kenren: </p>
<hr />
<div>{{Infobox Board<br />
| image = [[File:orangepi3_top.jpeg|250px]]<br />
| manufacturer = [http://www.orangepi.org OrangePi]<br />
| dimensions = 90''mm'' x 64''mm''<br />
| release_date = January 2019<br />
| website = [http://www.orangepi.org/Orange%20Pi%203/ Orange Pi 3 Product Page]<br />
| soc = [[H6]] @ 1.8 Ghz<br />
| dram = 1GiB/2GiB LPDDR3 @ 744MHz<br />
| nand = 8GB eMMC (optional)<br />
| power = DC 5V @ 2A (4.0mm/1.7mm barrel plug - centre positive)<br />
| video = HDMI type A full, composite on AV port<br />
| audio = 3.5mm headphone plug, HDMI, onboard microphone<br />
| network = WiFi 802.11 b/g/n/ac (AP6256), 10/100/1000Mbps Ethernet ([[Ethernet#Realtek_RTL8211E|Realtek RTL8211E]])<br />
| storage = µSD, optional soldered eMMC<br />
| usb = 1 USB2.0 Host, 1 USB2.0 OTG, 4 x USB3.0 host (via hub chip)<br />
| other = infrared receiver, PCIe ([[H6#Errata|broken in SoC]])<br />
| headers = 26 pin GPIO, 3 pin UART }}<br />
<br />
= Identification =<br />
<br />
The currently sold board has the following text on top: ''Orange Pi 3 v1.5''.<br />
<br />
= Sunxi support =<br />
<br />
== Current status ==<br />
<br />
Mainline kernel as of 5.4-rc1 only lacks support for: GPU, USB 3, Ethernet, Bluetooth, thermal sensor, DVFS and thermal regulation.<br />
<br />
All of the above is supported with out of tree patches.<br />
<br />
== Manual build ==<br />
<br />
You can build things for yourself by following our [[Manual_build_howto | Manual build howto]] and by choosing from the configurations available below.<br />
<br />
=== U-Boot ===<br />
<br />
==== Sunxi/Legacy U-Boot ====<br />
<br />
* https://github.com/orangepi-xunlong/OrangePiH6_uboot - BSP U-Boot<br />
<br />
==== Mainline U-Boot ====<br />
<br />
Direct support for this board is not yet in the mainline U-Boot, but it is possible to use U-Boot built for Orange Pi One Plus combined with ATF built with PLAT=sun50i_h6.<br />
<br />
Alternatively, there are some patches that add support, being prepared here: https://megous.com/git/u-boot/log/?h=opi-v2019.10 (those with orange pi 3 in the subject)<br />
<br />
=== Linux Kernel ===<br />
<br />
==== Sunxi/Legacy Kernel ====<br />
<br />
* https://github.com/orangepi-xunlong/OrangePiH6_external - FEX/WiFi firmware files<br />
* https://github.com/orangepi-xunlong/OrangePiH6_Linux4_9 - BSP kernel<br />
<br />
Config name is ''OrangePiH6_3_defconfig''<br />
<br />
==== Mainline kernel ====<br />
<br />
Use the '''sun50i-h6-orangepi-3.dts''' device-tree binary (available since kernel 5.2).<br />
<br />
Mainline Linux kernel device tree file for this board is being prepared in this Linux tree:<br />
<br />
* https://megous.com/git/linux/log/?h=opi3-5.4<br />
<br />
The tree contains support for USB ports, Ethernet, and Bluetooth.<br />
<br />
* This branch contains support for thermal sensor, DVFS and thermal regulation:<br />
<br />
https://megous.com/git/linux/log/?h=ths-5.4<br />
<br />
==== Firmware files ====<br />
<br />
For WiFi, you'll need a fw_bcm43456c5_ag.bin firmware file and nvram.txt configuration that can be found in the Xulongs's repository for H6:<br />
<br />
* https://github.com/orangepi-xunlong/OrangePiH6_external/tree/master/ap6256<br />
<br />
Mainline brcmfmac driver expects the firmware and nvram at the following paths relative to the firmware directory:<br />
<br />
* brcm/brcmfmac43456-sdio.bin<br />
* brcm/brcmfmac43456-sdio.txt<br />
<br />
For Bluetooth 5.0, you'll need a BCM4345C5.hcd firmware file that can be found in the Xulongs's repository for H6:<br />
<br />
* https://github.com/orangepi-xunlong/OrangePiH6_external/tree/master/ap6256<br />
<br />
The driver expects the firmware at the following path relative to the<br />
firmware directory:<br />
<br />
* brcm/BCM4345C5.hcd<br />
<br />
= Tips, Tricks, Caveats =<br />
<br />
* USB power rails are directly connected to the 5V input power, including on the micro USB connector (you'll have trouble powering the board from the DC jack, and using the microUSB port to connect the board to a PC at the same time). The board can be powered via DC input or via microUSB with a PSU like an [https://www.amazon.de/gp/product/B01M58O9M9 Aukru 5V 3A]; powering from an USB 3 port should work but is untested.<br />
* The schematic specifies a total current limit of 1.5A per the double USB 3.0 connector.<br />
* The schematic shows optional polyfuse circuit to limit the USB current, but there's no polyfuse on the v1.5 of the board.<br />
* UBoot does not support PMIC that's used on the board, and doesn't turn off ethernet PHY regulators after reboot, whic may lead to PHY initialization failures during reboot in some configurations.<br />
<br />
== FEL mode ==<br />
<br />
* If you try this, beware of the direct connection between microUSB VBUS and DCIN.<br />
<br />
= Using serial port =<br />
<br />
Like with other Orange Pi boards, UART uses 3.3V signalling and is 5V tolerant so you can use any of the usual USB-UART dongles. UART pin header is easily accessible.<br />
<br />
== Locating the UART ==<br />
<br />
UART is located between the mic and the power on key. Pin order: GND-RX-TX. GND is marked by a white arrow.<br />
<br />
= Pictures =<br />
<br />
<gallery><br />
File:orangepi3_top.jpeg<br />
File:orangepi3_bottom.jpeg<br />
File:orangepi3_eth.png<br />
File:orangepi3_hdmi.png<br />
</gallery><br />
<br />
= See also =<br />
<br />
*AXP805 Datasheet: [[File:AXP805_Datasheet_V1.0_en.pdf]]<br />
*H6 Datasheet: [[File:Allwinner_H6_V200_Datasheet_V1.1.pdf]]<br />
*H6 User Manual: [[File:Allwinner_H6_V200_User_Manual_V1.1.pdf]]<br />
*Schematics 1.5: [[File:OrangePi_3_Schematics_v1.5.pdf]]<br />
<br />
== Manufacturer images ==<br />
<br />
{{Remove|Optional. Add non-sunxi images in this section.}}<br />
<br />
[[Category:Devices]]<br />
[[Category:H6 Boards]]<br />
[[Category:Xunlong]]<br />
[[Category:Devices with Ethernet port]]<br />
[[Category:Devices with HDMI port]]</div>
Kenren
https://linux-sunxi.org/index.php?title=H6&diff=23115
H6
2020-01-27T07:37:52Z
<p>Kenren: OpenGL ES 3.1 not 3.0, OpenCL 1.1 not 1.2</p>
<hr />
<div>{{Infobox SoC<br />
| image = [[File:AllwinnerH6.jpg|250px]]<br />
| manufacturer = Allwinner<br />
| process = 28nm<br />
| cpu = Quad-Core ARM Cortex-A53 @ 1.8GHz<br />
| ltwo = <br />
| extensions = <br />
| memory = LPDDR2/LPDDR3/DDR3/DDR4<br />
| gpu = Mali-T720 MP2 @ 600Mhz<br />
| vpu = <br />
| apu = <br />
| video = HDMI 2.0 with HDCP 2.2, TV CVBS, RGB LCD<br />
| audio = I2S, PCM, TDM<br />
| network = GBit MAC, integrated 10/100M PHY<br />
| storage = MMC, NAND<br />
| usb = 1x OTG, 1x Host 2.0, 1x Host 3.0<br />
| other = PCIE 2.0 1x<br />
| release_date = June 2017<br />
| website = [http://www.allwinnertech.com/index.php?c=product&a=index&id=66 Product Page]<br />
}}<br />
<br />
Allwinner [[H6]] (sun50iw6p1) SoC features a Quad-Core Cortex-A53 ARM CPU, and a Mali-T720 MP2 GPU from ARM. The Allwinner H6 is an OTT SoC.<br />
<br />
=Overview=<br />
See [[Mainlining Effort]] and [[Mainline U-Boot]] for support status. The initial support for the SoC will be added in kernel 4.17<br />
<br />
== Differences / New features (compared to H5) ==<br />
<br />
=== High level differences ===<br />
* addition of PCIe support (broken, see below)<br />
** single lane PCIe 2.0<br />
** totally undocumented software interface<br />
* addition of USB 3.0 host<br />
* Mali T720 instead of Mali 450<br />
* DDR4 DRAM support<br />
* addition of IOMMU<br />
** though only connected to display controller and video codecs<br />
* (New?) Audio Hub component<br />
<br />
=== Programming model/driver level differences ===<br />
* heavily changed memory map (UART0 at 0x05000000, for instance)<br />
** SRAM locations moved around as well (SRAM A1 at 0x2000 now)<br />
* bus clock gates and device reset control now grouped by devices and merged into one register (high 16 bits reset, low 16 bits clock gates) <br />
* DMA controller changed (more than 32 ports, but still limited to 32 bit addresses)<br />
* no GPIO port A and B<br />
<br />
=== Errata ===<br />
* '''The PCIe implementation is broken.'''<br />
Allwinner H6 has a quirky PCIe controller that doesn't map the PCIe address space properly (only 64k accessible at one time) to CPU, and accessing the PCIe config space, I/O space or memory space will need to be wrapped. As Linux doesn't wrap PCIe memory space access, it's not possible to do a proper PCIe controller driver for H6. The BSP kernel modifies the driver to wrap the access, so it's also not generic, and only devices with modified driver will work.<br />
* '''The Watchdog implementation is broken.'''<br />
Some Allwinner H6 not all has a quirky Watchdog that doesn't make the SoC reboot.<br />
<br />
=H6 SoC Features=<br />
* CPU<br />
** ARM Cortex-A53 Quad-Core<br />
** 512KB L2-Cache (shared between four cores)<br />
** 32 KB (Instruction) / 32KiB (Data) L1-Cache per core<br />
** SIMD NEON, VFP4<br />
** Virtualization<br />
* GPU<br />
** ARM Mali-T720 MP2<br />
** Featuring 2 unified shader cores<br />
** Complies with OpenGL ES 3.1, OpenCL 1.1<br />
* Memory<br />
** DDR3/DDR4/LPDDR2/LPDDR3 controller<br />
** NAND Flash controller and 64-bit ECC, supports full disk encryption<br />
** 3 MMC controllers, in which MMC2 (eMMC controller) supports full disk encryption<br />
* Video<br />
** Ultra HD 4k and Full HD 1080p video decoding of MPEG-2, MPEG-4 SP/ASP GMC, H.263, H.264, H.265, WMV9/VC-1, and VP8<br />
** BD Directory, BD ISO and BD m2ts video decoding<br />
** H.264 High Profile 1080P@60fps encoding<br />
** 3840×1080,1920x2160 3D decoding<br />
** Complies with RTSP, HTTP,HLS,RTMP,MMS streaming media protocol<br />
* Display<br />
** Integrated HDMI V2.0 with HDCP2.2 4K@60fps<br />
** TV CVBS output<br />
** RGB LCD output<br />
* Camera<br />
** Integrated parallel 8-bit I/F YUV422 sensor<br />
** Support CCIR656 protocol fot NTSC and PAL<br />
** 5M CMOS sensor support<br />
** Support video capture resolution up to 1080p@30fps<br />
* Audio<br />
** Two audio digital-to-analog(DAC) channels 92dB SNR<br />
** Two differential microphone inputs (one low-noise)<br />
** Stereo Linein input<br />
** TDM Digital Microphone input<br />
* Embedded Controller:<br />
** [[AR100]] controller.<br />
* Thermal Sensor Controller (TSC) providing over-temperature protection interrupt and over-temperature alarm interrupt<br />
* AXP805 PMIC<br />
* package: FBGA451, 15 mm x 15 mm, 0.65 mm Pitch<br />
<br />
=Documentation=<br />
* [[File:Allwinner_H6_V200_Datasheet_V1.1.pdf]] <small>(PDF, 80 pages, 2017-11-14)</small><br />
* [[File:Allwinner_H6_V200_User_Manual_V1.1.pdf]] <small>(PDF, 965 pages, 2017-11-14)</small><br />
<br />
<br />
= Register guide =<br />
= Software =<br />
<br />
== Original SDK ==<br />
A beta version of the H6 BSP was released on 2018/01/30...<br />
<br />
* https://github.com/Allwinner-Homlet/H6-BSP4.9-brandy<br />
* https://github.com/Allwinner-Homlet/H6-BSP4.9-tools<br />
* https://github.com/Allwinner-Homlet/H6-BSP4.9-linux<br />
<br />
SDK tarballs are also available from pine64, mirrored on our own dl server as well.<br />
* [http://files.pine64.org/os/sdk/H64-ver1.1/H6-lichee-v1.1.tar.gz H6 Lichee v1.1] [http://dl.linux-sunxi.org/H6/H6-lichee-v1.1.tar.gz (mirror)]<br />
* [http://files.pine64.org/os/sdk/H64-ver1.0/H6-BSP-1.0.tgz H6 BSP 1.0] [http://dl.linux-sunxi.org/H6/H6-BSP-1.0.tgz (mirror)]<br />
* [http://files.pine64.org/os/sdk/H64-ver1.0/H6-Android-7.1-SDK.tgz H6 Android 7.1 SDK] [http://dl.linux-sunxi.org/H6/H6-Android-7.1-SDK.tgz (mirror)]<br />
<br />
== Boot0 ==<br />
== U-boot ==<br />
<br />
=== Allwinner ===<br />
<br />
=== Sunxi Community ===<br />
=== Mainline U-Boot ===<br />
<br />
<br />
== Kernel code ==<br />
=== Allwinner ===<br />
=== Sunxi Community ===<br />
=== Mainline ===<br />
<br />
== GPL Violations ==<br />
<br />
As is customary, even the H6 SDKs/BSPs come with a range of binaries included in GPL licensed code.<br />
<br />
=== H6-lichee-v1.1 ===<br />
<br />
The tarball for this can be found [http://files.pine64.org/os/sdk/H64-ver1.1/H6-lichee-v1.1.tar.gz on the pine64 website].<br />
<br />
==== kernel ====<br />
<br />
In the subdirectory linux-3.10, a patched linux-3.10.65, the following binaries can be found:<br />
<pre><br />
<br />
# --------------------------- Nand Drivers ---------------------------<br />
libnand-xxx are Legacy Codes and will be removed in next release SDK. <br />
For source codes of these blobs, please visit : https://github.com/allwinner-zh/linux-3.4-sunxi/tree/master/modules/nand<br />
<br />
./modules/nand/sun50iw2p1/libnand_sun50iw2p1<br />
./modules/nand/common0/libnand<br />
./modules/nand/sun50iw1p1/libnand_sun50iw1p1<br />
./modules/nand/sun8iw10p1/libnand_sun8iw10p1<br />
./modules/nand/sun8iw5p1/libnand<br />
./modules/nand/sun8iw11p1/libnand_sun8iw11p1<br />
# --------------------------------------------------------------------<br />
# ------------------------- HDMI 1.0 Drivers -------------------------<br />
./drivers/video/sunxi/disp2/hdmi/libhdmi_sun8iw11 # This blob is no longer used and its source code is included in the Hdmi 2.0 code<br />
./drivers/video/sunxi/disp2/hdmi/libhdmi_sun50iw1 # Same as libhdmi_sun50iw1.<br />
# --------------------------------------------------------------------<br />
<br />
# -------------------------- ARISC Drivers --------------------------<br />
Legacy Codes for old platform, not for H6, should be removed in next release SDK. <br />
<br />
./drivers/arisc/binary/arisc_sun8iw5p1.bin <br />
./drivers/arisc/binary/arisc_sun50iw1p1.code<br />
# --------------------------------------------------------------------<br />
<br />
# --------------------------- Power Manager Subsystem ---------------------------<br />
<br />
./drivers/soc/allwinner/pm/standby/standby.xn # It's a linker script, not a blob.<br />
<br />
Legacy Codes for old platform, not for H6, should be removed in next release SDK. <br />
<br />
./drivers/soc/allwinner/pm/resume1/sun8i_resume1_scatter.scat # It's a linker script, not a blob.<br />
./drivers/soc/allwinner/pm/resume1/gen_check_code # It's a host tool, it l is used to shape the binary file which build from the pm project. It's deprecated.<br />
./drivers/soc/allwinner/pm_legacy/standby/sun9i_resume1_scatter.scat # It's a linker script, not a blob.<br />
./drivers/soc/allwinner/pm_legacy/standby/sun8i_resume1_scatter.scat # It's a linker script, not a blob.<br />
./drivers/soc/allwinner/pm_legacy/standby/standby.xn # It's a linker script, not a blob.<br />
./drivers/soc/allwinner/pm_legacy/standby/gen_check_code # Same as pm/resume1/gen_check_code<br />
# ----------------------------------------------------------------------------------<br />
<br />
# ------------------------- Camera Relative -------------------------<br />
Legacy Codes for old platform, not for H6, should be removed in next release SDK. <br />
./drivers/media/platform/sunxi-vfe/lib/libisp_32<br />
./drivers/media/platform/sunxi-vfe/lib/lib_mipicsi2_v1<br />
./drivers/media/platform/sunxi-vfe/lib/lib_mipicsi2_v2<br />
./drivers/media/platform/sunxi-vfe/lib/libisp_64<br />
# -------------------------------------------------------------------<br />
</pre><br />
<br />
==== U-Boot ====<br />
<br />
<big>'''u-boot-2011.09 are legacy source codes, H6 didn’t use it. It should be removed in next release SDK. '''</big><br />
<br />
In the subdirectories bootloader/uboot_2011_sunxi_spl, and uboot_2014_sunxi_spl a bunch of dram binaries can be seen which likely must be included in the u-boot builds listed in under lichee/brandy/.<br />
<br />
In the subdirectory lichee/brandy/u-boot-2011.09/, a patched u-boot 2011-09-rc1, the following binaries can be found:<pre><br />
<br />
./nand_sunxi/sun8iw3/libnand-sun8iw3<br />
./nand_sunxi/sun8iw1/libnand-sun8iw1<br />
./nand_sunxi/sun8iw5/libnand-sun8iw5<br />
./nand_sunxi/sun8iw8/libnand-sun8iw8<br />
./nand_sunxi/sun9iw1/libnand-sun9iw1<br />
./nand_sunxi/sun7i/libnand-sun7i<br />
./nand_sunxi/sun8iw9/libnand-sun8iw9<br />
./nand_sunxi/sun8iw7/libnand-sun8iw7<br />
./nand_sunxi/sun5i/libnand-sun5i<br />
./nand_sunxi/sun8iw6/libnand-sun8iw6<br />
./board/sunxi/sun9iw1/box_standby/cpus_pm/cpus_pm_binary.code<br />
./board/sunxi/sun8iw7/box_standby/cpus_pm/cpus_pm_binary.code<br />
./board/sunxi/sun8iw6/box_standby/cpus_pm/cpus_pm_binary.code<br />
./arch/arm/cpu/armv7/sun8iw5/dram/libdram<br />
./arch/arm/cpu/armv7/sun8iw8/dram/libdram<br />
./arch/arm/cpu/armv7/sun9iw1/dram/libdram<br />
./arch/arm/cpu/armv7/sun8iw7/dram/libchipid<br />
./arch/arm/cpu/armv7/sun8iw7/dram/libdram<br />
./arch/arm/cpu/armv7/sun8iw6/dram/libdram-homlet<br />
./arch/arm/cpu/armv7/sun8iw6/dram/libdram-pad<br />
./drivers/video_sunxi/sunxi_v1/obj_video<br />
./drivers/video_sunxi/sunxi_v2/de_bsp/hdmi/aw/libhdcp<br />
./drivers/video_sunxi/sunxi_v2/de_bsp/de/lowlevel_sun9iw1/libdsi<br />
./drivers/video_sunxi/sunxi_v2/de_bsp/de/lowlevel_sun9iw1/libedp<br />
./drivers/video_sunxi/sunxi_v2/obj_video<br />
./drivers/video_sunxi/sunxi_v3/obj_video</pre><br />
<br />
In the subdirectory lichee/brandy/u-boot-2014.07/, a patched u-boot 2014-07, the following binaries can be found:<br />
<pre><br />
libnand-xxx are Legacy Codes and will be removed in next release SDK. <br />
For source code of these blobs, please visit : https://github.com/allwinner-zh/bootloader/tree/master/u-boot-2011.09/nand_spl ,<br />
and https://github.com/allwinner-zh/bootloader/tree/master/u-boot-2011.09/nand_sunxi<br />
<br />
./nand_sunxi/sun50iw2p1/libnand-sun50iw2p1<br />
./nand_sunxi/sun50iw3p1/libnand-sun50iw3p1<br />
./nand_sunxi/sun50iw1p1/libnand-sun50iw1p1<br />
./nand_sunxi/sun8iw10p1/libnand-sun8iw10p1<br />
./nand_sunxi/sun8iw11p1/libnand-sun8iw11p1<br />
./nand_sunxi/sun8iw12p1/libnand-sun8iw12p1<br />
./nand_sunxi/sun50iw6p1/libnand-sun50iw6p1<br />
<br />
./drivers/video/sunxi/disp2/hdmi/libhdmi_sun8iw11 # This blob is no longer used and its source code is included in the Hdmi 2.0 code<br />
./drivers/video/sunxi/disp2/hdmi/libhdmi_sun50iw1 # Same as libhdmi_sun8iw11<br />
</pre><br />
<br />
= Devices =<br />
<br />
<categorytree mode=pages hideroot=on depth=1>H6 Devices</categorytree><br />
<br />
[[Category:System on Chip]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Linux_mainlining_effort&diff=23094
Linux mainlining effort
2020-01-11T15:27:09Z
<p>Kenren: A10, A20 and A31 have the same sun4i-hdmi encoder</p>
<hr />
<div>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.<br />
<br />
=Overview=<br />
The idea is to submit the code needed to run the Linux kernel on Allwinner SoCs upstream, ie. to the official Linux kernel.<br />
<br />
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.<ref>http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf</ref><ref>[http://www.cnx-software.com/2013/01/16/your-new-arm-soc-linux-support-check-list-elce-2012/ Your New ARM SoC Linux Support Check-List – ELCE 2012]</ref><br />
<br />
Where relevant, I have attempted to include who is currently working on an item, mostly separate from any particular mainlining goal.<br />
<br />
=Status=<br />
<br />
The [[Mainline_Kernel_Howto|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|Mainline U-Boot howto]].<br />
<br />
The [[:Category:Mainline_Kernel | Mainline Kernel category ]] gives an overview of currently supported devices.<br />
<br />
== Status Matrix ==<br />
<br />
The goal of this matrix is to give an easy view of work on each SoC worked on by linux-sunxi.<br />
<br />
{| class="wikitable" style="text-align: center; width: 100%;"<br />
|-<br />
! style="width: 13%; text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br>[[R8]]<br />
! [[A20]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br>[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[R40]]<br>[[T3]]<br />
! [[V3]]|[[V3s]]<br>[[S3]]|[[S3L]]<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | AC97<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Audio Codec]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 5.0<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: red;" | NO<br />
<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="3" | ADC<br />
| style="text-align: left;" | GPADC<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Thermal<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: darkgreen;" | ?<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Touch<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| rowspan="4" style="text-align: left;" | [[CSI|Camera]]<br />
<br />
| style="text-align: left;" | BT656<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" | ISP<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" | MIPI CSI<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" | Parallel<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Clocks<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | CPUFreq (DVFS)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Cryptographic_Hardware_Accelerators|Crypto]]<br />
| N/A<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: darkgreen;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Display (SimpleFB)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen" | 4.16<br />
| style="background: lightgreen" | 4.16<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| rowspan="8" style="text-align: left;" | Display<br />
([https://dri.freedesktop.org/wiki/DRM/ DRM])<br />
<br />
| style="text-align: left;" | CVBS<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.9 ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Audio<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI CEC<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.14<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: orange;" | WIP<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Video<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.13<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | LVDS<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.16<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | MIPI DSI<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | RGB<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | VGA<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | DMA<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | [[Ethernet]]<br />
| style="text-align: left;" | [[Ethernet#EMAC|EMAC]]<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.11<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11 <br />
| rowspan="2"| N/A<br />
| N/A<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.1<br />
| style="background: lightgreen;" rowspan="2" | 4.16<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.0<br />
| style="background: lightgreen;" rowspan="2" | 4.18<br />
| style="background: lightgreen;" rowspan="2" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | [[Ethernet#GMAC|GMAC]]<br />
<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.17<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | GPU(3D)<br />
| style="text-align: left;" | [[Mali]]<br />
| N/A<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | [[PowerVR]]<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | HW Spinlocks<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[I2C]]<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.13<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | I2S<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | IOMMU<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red" | NO<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[IR]]<br />
| style="background: red" | NO<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.0<br />
| N/A<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Keypad<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | LRADC<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | MsgBox<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[NAND]]<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.12 <ref name="mlc">While the NAND controller itself is supported, the NAND technology found on the vast majority of boards isn't. See [[MTD_Driver#Challenges|this page]] </ref><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc"/><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | PCIe<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: black; color: white;" | NO <ref name="h6-pcie">Allwinner H6 has a quirky PCIe controller that doesn't map the PCIe address space properly to CPU,<br />
and accessing the PCIe config space, IO space or memory space will need to be wrapped. As Linux doesn't wrap PCIe memory space access, it's not possible to do a proper PCIe controller driver for H6. The BSP kernel modifies the driver to wrap the access, so it's also not generic, and only devices with modified driver will work.</ref><br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Pinctrl<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[PMU]]<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.5<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: grey; color: white;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[PWM_Controller|PWM]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RSB]]<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.14<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RTC]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SATA]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SD/ [[eMMC|MMC]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SMP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.18<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPDIF]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPIdev|SPI]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 5.6<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SRAM Controller|SRAM]]<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 5.0 <br />
| style="background: lightgreen;" | 5.1 <br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB_OTG_Controller_Register_guide#USB_OTG|USB OTG]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | USB3<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 5.5<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Video_Engine|VE]] | [[Sunxi-Cedrus]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.2 <br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Watchdog<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
! style="text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br />
[[R8]]<br />
! [[A20]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br />
[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[R40]]<br />
[[T3]]<br />
! [[V3]]|[[V3s]]<br>[[S3]]|[[S3L]]<br />
<br />
|}<br />
<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|-<br />
! Legend<br />
|-<br />
| style="background: lightgreen;" | In Linux mainline since version x<br />
|-<br />
| style="background: darkgreen;" | Nobody works on it, but it should be compatible with already done drivers<br />
|-<br />
| style="background: orange;" | Somebody works on it<br />
|-<br />
| style="background: red;" | No support, nobody works on it<br />
|-<br />
| style="background: black; color: white;" | support impossible<br />
|-<br />
| style="background: grey; color: white;" | Status is unknown/to be completed<br />
|}<br />
<br />
== Work In Progress ==<br />
<br />
=== Core Stuff ===<br />
*[[AR100]] firmware (WiP: Samuel Holland) [https://github.com/crust-firmware/crust ARISC firmware for sunxi SoCs ]<br />
<br />
* Message box (WiP: Samuel Holland) [https://lore.kernel.org/patchwork/cover/1167245/ Allwinner sunxi message box support patch-v5]<br />
<br />
* [[A13]] PSCI Suspend / Resume / CPUIdle (WiP: Antoine Tenart) [http://lists.denx.de/pipermail/u-boot/2016-September/265453.html patch-v1]<br />
<br />
=== Major drivers ===<br />
<br />
* HDMI Audio [[A64]] / [[H3]] / [[H5]] / [[H6]] WIP Jernej Škrabec (jernej) / LibreELEC<br />
<br />
* [[R40]] MIPI-DSI WIP Jagan Teki [https://patchwork.kernel.org/cover/11314031/ drm/sun4i: Allwinner R40 MIPI-DSI support v3] <br />
<br />
* [[AC100]] Audio codec WiP Ondrej Jirman [https://github.com/megous/linux/commits/linux-tbs WIP branch]<br />
<br />
=== Minor drivers ===<br />
<!-- Please move the newest entry to the top --><br />
* [[A10]] / [[A20]] / [[A31]] HDMI Audio WIP Stefan Mavrodiev [https://lore.kernel.org/patchwork/cover/1177803/ Add support for sun4i HDMI audio]<br />
* [[H6]] <br />
** SPI WIP Andre Przywara [https://patchwork.kernel.org/cover/11323153/ arm64: dts: sun50i: H6: Enable SPI flash]<br />
** Cpufreq (DVFS) WIP Yangtao Li [https://lore.kernel.org/patchwork/cover/1042857/ arm64: dts: allwinner: h6: Enable CPU DVFS(cpufreq)]<br />
* [[A64]] CPUFreq (DVFS) WIP Vasily Khoruzhick [https://patchwork.kernel.org/cover/11322721/ arm64: allwinner: a64: Enable DVFS on A64]<br />
* [[A10]] & [[R40]] CSI Camera WIP Chen-Yu Tsai [https://lore.kernel.org/patchwork/cover/1167304/ media: sun4i-csi: A10/A20 CSI1 and R40 CSI0 support ]<br />
* [[A64]] / [[A83T]] / [[H3]] / [[H5]] / [[H6]] / [[R40]] Thermal sensor WIP Vasily Khoruzhick/Ondrej Jirman/Yangtao Li [https://lore.kernel.org/patchwork/project/lkml/list/?series=423286 add thermal sensor driver for A64, A83T, H3, H5, H6, R40]<br />
** [[A80]] included in Thermal sensor effort by Philipp Rossak (embed-3d): https://github.com/embed-3d/linux/branches/all<br />
* [[H5]] Cpufreq (DVFS) WIP Chen-Yu Tsai [https://patchwork.kernel.org/cover/10787869/ arm64: dts: allwinner: h5: Enable CPU DVFS (cpufreq)]<br />
* [[R40]] PWM (WIP Hao Zhang [https://www.spinics.net/lists/kernel/msg2731498.html patch-v2])<br />
* [[A31]]/[[A31s]] PWM support (WiP: Siarhei Volkau [http://lists.infradead.org/pipermail/linux-arm-kernel/2017-February/486405.html patch-v1])<br />
* [[A20]] Keypad (WiP: Yassin Jaffer (ddc) [http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/370079.html patch])<br />
<br />
=== Drivers that can still be improved/added ===<br />
<br />
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.<br />
<br />
* sunxi-musb driver lacks DMA support (with current driver, USB gadgets are limited to PIO, limiting speed to 10MiB/s and causing large CPU)<br />
* DE2 on some SoCs (A64, A83T) includes rotation egnine that is not yet supported<br />
* DE2 driver has buggy layer support, see [https://patchwork.kernel.org/patch/11145803/]<br />
== Planned for 5.6 ==<br />
* [[A10]]<br />
** CSI (BT656 and Parallel)<br />
<br />
*[[A64]]<br />
** MIPI DSI<br />
** DVFS<br />
<br />
*[[A64]] / [[A83T]] / [[H3]] / [[H5]] / [[H6]]<br />
** Thermal<br />
<br />
*[[H6]]<br />
** PWM<br />
<br />
*[[H3]] / [[H5]] / [[H6]] / [[R40]]<br />
**PMU<br />
<br />
*[[R40]]<br />
** CSI (BT656 and Parallel)<br />
** SPI<br />
<br />
New Devices Supported<br />
* [[H5]]<br />
** ALL-H3-IT H5 board<br />
** ALL-H5-CC H5 board<br />
* [[H6]]<br />
** [[PineH64]] Model A<br />
<br />
== Merged into 5.5 ==<br />
*[[H3]]<br />
** Deinterlace driver<br />
<br />
*[[H6]]<br />
**Crypto<br />
**GPU(3D) Mali<br />
**USB3 PHY (for boards not needing vbus switching)<br />
<br />
*[[A64]] / [[A80]] / [[A83T]] / [[H3]] / [[H5]] / [[R40]] <br />
**Crypto<br />
<br />
* multiple SoCs<br />
** [[Cedrus]] HEVC/H.265<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** Emlid Neutis<br />
<br />
New Devices Supported<br />
* [[H3]]<br />
** [[FriendlyARM_NanoPi_Duo2]]<br />
<br />
== Merged into 5.4 ==<br />
* [[A20]]<br />
** CSI (BT656 and Parallel)<br />
* [[A64]]<br />
** IR<br />
* [[H6]]<br />
** IR<br />
** RTC<br />
** SPDIF<br />
New Devices Supported<br />
* [[A64]]<br />
** [[Olimex A64-OLinuXino]] eMMC<br />
* [[H6]]<br />
** [[Tanix TX6]]<br />
* [[S3]]<br />
** [[Lichee Zero Plus]]<br />
<br />
== Merged into 5.3 ==<br />
* [[A64]]<br />
** LRADC<br />
** RGB LCD<br />
* [[A83T]]<br />
** CSI (BT656 and Parallel)<br />
* [[H6]]<br />
** DMA<br />
** Watchdog<br />
* multiple SoCs<br />
** [[Cedrus]] h264<br />
<br />
== Merged into 5.2 ==<br />
* [[A83T]]<br />
** LRADC<br />
** USB OTG<br />
<br />
* [[H6]]<br />
** [[Cedrus]]<br />
<br />
* multiple SoCs<br />
** [[Mali Open Source Driver|Lima]]<br />
** [[Mali Open Source Driver|Panfrost]]<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** Banana-Pi-M2-Zero<br />
<br />
New Devices Supported<br />
* [[H6]]<br />
** [[Beelink GS1]]<br />
** [[Xunlong Orange Pi 3]]<br />
<br />
== Merged into 5.1 ==<br />
* A10<br />
** Cedrus<br />
** PMU<br />
<br />
* A20<br />
** Audio Codec improvements<br />
<br />
* A23<br />
** Display pipeline<br />
** LCD enabled on Q8 A23 tablets<br />
<br />
* A64<br />
** ARM Architectural Timer errata workaround<br />
** PMU<br />
** CSI (BT656 and Parallel)<br />
<br />
* A80<br />
** GMAC support<br />
<br />
* CSI in general<br />
** RGR565 support<br />
** JPEG pass-through support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Banana Pi M2+]]<br />
** [[Banana Pi M2 Ultra]]<br />
<br />
* [[LCD]] enabled on [[A13]] [[Q8]] tablets<br />
<br />
== Merged into 5.0 ==<br />
* A64<br />
** Cedrus<br />
** DTS changes for audio codec<br />
<br />
* F1C100s<br />
** initial F1C100s support<br />
<br />
* H6<br />
** Ethernet<br />
** DE3/HDMI support<br />
** USB 2.0<br />
<br />
* H3 / H5<br />
** CSI (BT656 and Parallel) Support<br />
<br />
* H5<br />
** Cedrus<br />
<br />
* R40<br />
** RTC<br />
<br />
* T3<br />
** initial T3 support<ref>https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7badd1d7aa61087010803affa19bb83fb5a0af1</ref><br />
<br />
* V3s<br />
** CSI (BT656 and Parallel) Support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Sinovoip Banana Pi M2 Magic | Banana Pi M2 Magic]]<br />
** [[Banana Pi M3]]<br />
** [[Banana Pi M64]]<br />
** [[Cubietruck]]<br />
** [[Cubietech_Cubietruck_Plus|Cubietruck Plus]]<br />
<br />
New Devices Supported<br />
* [[Xunlong Orange Pi Lite 2]]<br />
<br />
== Merged into 4.20 ==<br />
<br />
* A13 / A20 / A33 / H3<br />
** Cedrus driver<br />
<br />
* A83T<br />
** IR receiver<br />
<br />
* A64<br />
** Cleanup for device tree files<br />
** HDMI support<br />
** Audio codec support (DTS changes will be merged in 5.0)<br />
<br />
* H3 / H5<br />
** SID<br />
<br />
* R40<br />
** SATA<br />
<br />
New Devices Supported<br />
* [[Pine64]] LTS<br />
* [[Xunlong Orange Pi One Plus]]<br />
* [[Xunlong Orange Pi Zero Plus 2]] (H3 variant)<br />
* [[Sinovoip Banana Pi M2+]] (H5 variant)<br />
<br />
== Merged into 4.19 ==<br />
<br />
* A10 / A13 / A20 / A23 / A33<br />
** SRAM controller / system control<br />
<br />
* A64<br />
** SRAM controller / system control<br />
** Display clocks and bus<br />
** RTC clock output<br />
** PWM<br />
** R_I2C<br />
<br />
* H3<br />
** SRAM controller / system control<br />
<br />
* H6<br />
** MMC<br />
** PMIC<br />
<br />
* R40<br />
** HDMI support<br />
<br />
Board Changes<br />
* SPI flash node for [[Orange Pi PC 2]] and [[Pine64#Variants | Pine64 SoPINE]]<br />
* Use lid switch as wake-up source for A64 based laptops<br />
* LEDs added for [[PineH64]]<br />
<br />
New Devices<br />
* [[Pine Pinebook]]<br />
* Amarula A64-Relic<br />
<br />
== Changes merged up to 4.18 ==<br />
Changes up to 4.18 can be found on [[Linux mainlining history]] page.<br />
<br />
=References=<br />
<references /><br />
<br />
= See also =<br />
* [[Mainline Kernel Howto]]<br />
* [[Possible setups for hacking on mainline]]<br />
* [[Linux Kernel]]<br />
**[[Toolchain]]<br />
<br />
=External Links=<br />
* [http://www.kernel.org kernel.org] - Official website for the Linux Kernel<br />
** [http://github.com/torvalds/linux http://github.com/torvalds/linux] - Linus Torvalds' GitHub account with the upstream Linux kernel<br />
* [http://www.kernel.org/doc/ Linux Kernel documentation index]<br />
* [http://www.kernel.org/doc/man-pages/ Linux Kernel man pages]<br />
* [http://kernelnewbies.org/ Kernel Newbies Site - Excellent source of information for people new to kernel]<br />
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary Linus' kernel tree for 2.6]<br />
* [https://bugzilla.kernel.org/ Kernel bugzilla] - [https://bugzilla.kernel.org/show_bug.cgi?id=15790 Regressions for each of recent versions]<br />
* [http://www.fsfla.org/svnwiki/selibre/linux-libre/ Linux-libre project - Maintains and distributes fully free kernel]<br />
* [http://lingrok.org/ LinGrok, Linux kernel source code cross-reference]<br />
* [https://elixir.bootlin.com/linux/latest/source?a=arm Bootlin LXR (Linux Cross Reference)]<br />
* [http://lists.infradead.org/pipermail/linux-arm-kernel/ linux-arm-kernel - Mailing list archive]<br />
===How to upstream===<br />
* [http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf Your new ARM SoC Linux support check-list! by Thomas Petazzoni of Bootlin]<br />
*[http://www.cnx-software.com/2014/03/04/linux-kernel-upstreaming-how-to-linaro-connect-asia-2014/ Linux Kernel Upstreaming How-To (CNXSoft - Embedded Software Development)]<br />
**[http://www.youtube.com/watch?v=dY7fikYZ42c Matt Porter's YouTube video talk on “Upstreaming 101" (LCA14-111)]<br />
***[http://www.linaro.org/documents/download/65f888c674508efcf9bd5d90398a186a530d01c4c78db Matt Porter's presentation slides for “Upstreaming 101" (LCA14-111)]<br />
**[https://www.youtube.com/watch?v=FiQ5uV_Mm5c Matt Porter's YouTube video talk on “Upstreaming 201" (LCA14-112)]<br />
***[http://www.linaro.org/documents/download/7b9920fcc89589bad9063d87d9137f08530d020b71924 Matt Porter's presentation slides for “Upstreaming 201" (LCA14-112)]<br />
*[http://www.cnx-software.com/2011/08/19/how-to-write-and-submit-a-linux-kernel-patch/ How to Write and Submit a Linux Kernel Patch (CNXSoft - Embedded Software Development)]<br />
** [http://www.youtube.com/watch?v=LLBrBBImJt4 YouTube Video- Write and Submit your first Linux kernel Patch]<br />
** [http://www.cnx-software.com/pdf/kernel-tutorial/kernel_patch_tutorial.pdf Greg Kroah-Hartman Kernel Tutorial Write and Submit your first Linux Kernel Patch]<br />
*[http://www.linaro.org/connect-lca14/resources Linaro resources page from LCA (Linaro Connect Asia) 2014]<br />
<br />
=Notes=<br />
<references group=note /><br />
<br />
[[Category:Development]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Cedrus/Supported_Codec_Feature_Matrix&diff=22797
Cedrus/Supported Codec Feature Matrix
2019-10-14T20:56:11Z
<p>Kenren: update actual status of sunxi-cedrus v4l</p>
<hr />
<div>In this colorful table is represented what is understood and supported by hardware in the '''left side''', the designation VE+Number are the video engine hardware version and above are the SoCs were found. Here are only SoCs and hardware versions which was confirmed or reported, the ones that aren't here should and are expected to be very equal in mode.<br />
<br />
The '''right side''' represents the state of software. Take notice about the PoC (Proof of Concept) in which only exists for demonstration the correct understanding about the working of the hardware, sometimes the creation of this PoC is skipped.<br />
<br />
{| border="1px" cellpadding="4px" style="border-collapse:collapse; border: 0px solid #A44444; text-align: center;"<br />
|colspan=" 3" style="border: 0px;"| <br />
|A10/A20 || A13 || A31s || A80 || A33 || H3 || A64 || H5 <br />
|rowspan="99" style="border: 0px; min-width: 10px"| ||colspan="2" style="border: 0px"| Software Support<br />
|-<br />
!style="border: 0px"| !! subengine !! codec <br />
! VE1623 !! VE1625 !! VE1633 !! VE1639 !! VE1667 !! VE1680 !! VE1689 !! VE1718<br />
! PoC !! libvdpau-sunxi !! sunxi-cedrus (v4l)<br />
|-style="background-color: #77FF77"<br />
|rowspan="18"| decoder ||rowspan="11"| [[VE_Register_guide#MPEG_Engine_Registers|0x100]] || JPEG/MJPEG <br />
|colspan="8"| baseline profile only<br />
| ||style="background-color: #FFFFFF"|n.a.||style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #77FF77"<br />
| MPEG1 <br />
|colspan="8"|<br />
| ||||style="background-color:#FFFF77"|<br />
|-style="background-color: #77FF77"<br />
| MPEG2 <br />
|colspan="8"|<br />
| ||||<br />
|-style="background-color: #FFFF77"<br />
| MPEG4 <br />
|colspan="8"|<br />
|style="background-color:#FFFFFF"| ||||<br />
|-style="background-color: #FFFF77"<br />
| MS-MPEG4 <br />
|colspan="8"|<br />
|style="background-color: #FFFFFF"| ||rowspan="3" style="background-color: #FFFFFF"|n.a.||rowspan="9" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #FF7777"<br />
| WMV1 <br />
|colspan="8"|<br />
|<br />
|-style="background-color: #FF7777"<br />
| WMV2 <br />
|colspan="8"|<br />
|<br />
|-style="background-color: #FFFF77"<br />
| DIVX <br />
|colspan="8"|<br />
|style="background-color: #FFFFFF"| ||<br />
|-style="background-color: #FFFF77"<br />
| XDIV <br />
|colspan="8"|<br />
|style="background-color: #FFFFFF"| ||rowspan="5" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #FF7777"<br />
| H263 <br />
|colspan="8"|<br />
|<br />
|-style="background-color: #FF7777"<br />
| VP6 <br />
|colspan="8"|<br />
|<br />
|-style="background-color: #CCCCCC"<br />
| rowspan=" 2"| ? || Sorenson <br />
|colspan="8"| Unconfirmed<br />
|<br />
|-style="background-color: #CCCCCC"<br />
| AVS <br />
|colspan="8"| Unconfirmed<br />
|<br />
|-style="background-color: #77FF77"<br />
| rowspan=" 2"| [[VE_Register_guide#H264_Engine_Registers|0x200]] || H264 <br />
|colspan="8"|<br />
|style="background-color:#FFFFFF"| ||||(early high profile)<br />
|-style="background-color: #FFFF77"<br />
| VP8 <br />
|colspan="8"|<br />
| ||style="background-color: #FFFFFF"| n.a. ||rowspan="3" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #FF7777"<br />
| rowspan=" 1"| [[VE_Register_guide#VC1_Engine_Registers|0x300]] || VC1/WMV9 <br />
|colspan="8"|<br />
|style="background-color: #FFFFFF"| ||<br />
|-style="background-color: #CCCCCC"<br />
| rowspan=" 1"| [[VE_Register_guide#RMVB_Engine_Registers|0x400]] || RMVB<br />
|colspan="8"| Unconfirmed<br />
| ||style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #77FF77"<br />
| rowspan=" 1"| [[VE_Register_guide#HEVC_Engine_Registers|0x500]] || H265 <br />
|colspan="5" style="background-color: #FFFFFF"| ||colspan="3"|8bits<br />
|style="background-color: #FFFFFF"| || ||(early)<br />
|-style="background-color: #77FF77"<br />
|rowspan=" 2"|encoder <br />
|rowspan=" 2"| [[VE_Register_guide#ISP_Engine_Registers|0xa00]]</br>[[VE_Register_guide#AVC_Encoder_Engine_Registers|0xb00]]<br />
| JPEG/MJPEG<br />
|colspan="2"|baseline profile only||colspan="6" style="background-color: #FFAA77"| not tried because of no time to try<br />
| ||style="background-color: #FFFFFF"|n.a.||rowspan="3" style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #77FF77"||rowspan="10" style="background-color: #FFFFFF"|n.a.<br />
| H264 <br />
|colspan="2"|baseline profile only||colspan="6" style="background-color: #FFAA77"| not tried because of no time to try<br />
|No B frames ||style="background-color: #FFFFFF"|n.a.<br />
|-style="background-color: #CCCCCC"<br />
|rowspan=" 1"|decoder ||rowspan=" 1"| 0xe00 || JPEG<br />
|colspan="5" style="background-color: #FFFFFF"| ||colspan="3"| Unconfirmed<br />
| ||style="background-color: #FFFFFF"|n.a.<br />
|-<br />
|}<br />
<br />
<br />
As can be seen in this table with the color of green, the most used video codecs are already fully reversed engineered. The codecs that are still missing are too old or/and obsolete and aren't used anymore for the creation of new video content. The content (video files) that exists encoded in this codecs is in the great majority not beyond standard definition, meaning that the task of decoding is easy done with just software decode by cpu.<br />
For this reason this codecs aren't a priority to work on.<br />
<br />
If anyone has a need for a yet to be support codec, please contact the people involved in the cedrus project to find what can be arranged.<br />
<br />
[[Category:Cedrus]]</div>
Kenren
https://linux-sunxi.org/index.php?title=Linux_mainlining_effort&diff=22796
Linux mainlining effort
2019-10-14T20:20:44Z
<p>Kenren: /* Status Matrix */</p>
<hr />
<div>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.<br />
<br />
=Overview=<br />
The idea is to submit the code needed to run the Linux kernel on Allwinner SoCs upstream, ie. to the official Linux kernel.<br />
<br />
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.<ref>http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf</ref><ref>[http://www.cnx-software.com/2013/01/16/your-new-arm-soc-linux-support-check-list-elce-2012/ Your New ARM SoC Linux Support Check-List – ELCE 2012]</ref><br />
<br />
Where relevant, I have attempted to include who is currently working on an item, mostly separate from any particular mainlining goal.<br />
<br />
=Status=<br />
<br />
The [[Mainline_Kernel_Howto|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|Mainline U-Boot howto]].<br />
<br />
The [[:Category:Mainline_Kernel | Mainline Kernel category ]] gives an overview of currently supported devices.<br />
<br />
== Status Matrix ==<br />
<br />
The goal of this matrix is to give an easy view of work on each SoC worked on by linux-sunxi.<br />
<br />
{| class="wikitable" style="text-align: center; width: 100%;"<br />
|-<br />
! style="width: 10%; text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br>[[R8]]<br />
! [[A20]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br>[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[R40]]<br>[[T3]]<br />
! [[V3]]<br>[[V3s]]<br>[[S3L]]<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | AC97<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Audio Codec]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 5.0<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: red;" | NO<br />
<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="3" | ADC<br />
| style="text-align: left;" | GPADC<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: lightgreen;" | 4.12<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Thermal<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: darkgreen;" | ?<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | Touch<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.16<br />
| N/A<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| rowspan="4" style="text-align: left;" | [[CSI|Camera]]<br />
<br />
| style="text-align: left;" | BT656<br />
| style="background: red;" | NO<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" | ISP<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" | MIPI-CSI<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" | Parallel<br />
| style="background: red;" | NO<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.0<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Clocks<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.10<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | CPUFreq (DVFS)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Cryptographic_Hardware_Accelerators|Crypto]]<br />
| N/A<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: darkgreen;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Display (SimpleFB)<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen" | 4.16<br />
| style="background: lightgreen" | 4.16<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| rowspan="8" style="text-align: left;" | Display<br />
([https://dri.freedesktop.org/wiki/DRM/ DRM])<br />
<br />
| style="text-align: left;" | CVBS<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.9 ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Audio<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| style="background: orange;" | WIP<br />
| style="background: orange;" | WIP<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI CEC<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.14<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: orange;" | WIP<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | HDMI Video<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.13<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.15<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | LVDS<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.16<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | MIPI DSI<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.18<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Major_drivers|WIP]]<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | RGB<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.7<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | VGA<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | DMA<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | [[Ethernet]]<br />
| style="text-align: left;" | [[Ethernet#EMAC|EMAC]]<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.11<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" | 3.11 <br />
| rowspan="2"| N/A<br />
| N/A<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.1<br />
| style="background: lightgreen;" rowspan="2" | 4.16<br />
| rowspan="2"| N/A<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 4.15<br />
| style="background: lightgreen;" rowspan="2" | 5.0<br />
| style="background: lightgreen;" rowspan="2" | 4.18<br />
| style="background: lightgreen;" rowspan="2" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" | [[Ethernet#GMAC|GMAC]]<br />
<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.17<br />
<br />
|-<br />
| style="text-align: left;" rowspan="2" | GPU(3D)<br />
| style="text-align: left;" | [[Mali]]<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| N/A<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: orange;" | [[Linux mainlining effort#Minor_drivers|WIP]]<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" | [[PowerVR]]<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | HW Spinlocks<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[I2C]]<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.11<br />
| style="background: lightgreen;" | 3.13<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | I2S<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | IOMMU<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red" | NO<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[IR]]<br />
| style="background: red" | NO<br />
| style="background: lightgreen;" | 3.17<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 3.17<br />
| N/A<br />
| style="background: lightgreen;" | 4.0<br />
| N/A<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Keypad<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | WIP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red;" | NO<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | LRADC<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | MsgBox<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Core_Stuff|WIP]]<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[NAND]]<br />
| N/A<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.12 <ref name="mlc">While the NAND controller itself is supported, the NAND technology found on the vast majority of boards isn't. See [[MTD_Driver#Challenges|this page]] </ref><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc"/><br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9 <ref name="mlc" /><br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | PCIe<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: black; color: white;" | NO <ref name="h6-pcie">Allwinner H6 has a quirky PCIe controller that doesn't map the PCIe address space properly to CPU,<br />
and accessing the PCIe config space, IO space or memory space will need to be wrapped. As Linux doesn't wrap PCIe memory space access, it's not possible to do a proper PCIe controller driver for H6. The BSP kernel modifies the driver to wrap the access, so it's also not generic, and only devices with modified driver will work.</ref><br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Pinctrl<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.9<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[PWM_Controller|PWM]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.16<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| style="background: lightgreen;" | 4.12<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RSB]]<br />
| style="background: red;" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| N/A<br />
| style="background: lightgreen;" | 4.4<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.14<br />
| N/A<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| style="background: grey; color: white;" | ?<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[RTC]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.14<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.10<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SATA]]<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 3.15<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.20<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SD/ [[eMMC|MMC]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.0<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | SMP<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 4.18<br />
| N/A<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| style="background: lightgreen" | PSCI<br />
| style="background: lightgreen;" | PSCI<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPDIF]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.7<br />
| N/A<br />
| style="background: lightgreen;" | 4.9<br />
| N/A<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.4<br />
| style="background: darkgreen;" | ?<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SPIdev|SPI]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.10<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.13<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[SRAM Controller|SRAM]]<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 4.19<br />
| N/A<br />
| N/A<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.19<br />
| style="background: lightgreen;" | 5.0 <br />
| style="background: lightgreen;" | 5.1 <br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 3.15<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 3.16<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.14<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[USB_OTG_Controller_Register_guide#USB_OTG|USB OTG]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.3<br />
| style="background: lightgreen;" | 4.8<br />
| style="background: lightgreen;" | 4.11<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.2<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | USB3<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: red" | NO<br />
| N/A<br />
| N/A<br />
| N/A<br />
| N/A<br />
| style="background: orange;" | [[Linux_mainlining_effort#Minor_drivers|WIP]]<br />
| N/A<br />
| N/A<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | [[Video_Engine|VE]] | [[Sunxi-Cedrus]]<br />
| style="background: red;" | NO<br />
| style="background: lightgreen;" | 5.1<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: darkgreen;" | ?<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: red;" | NO<br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
| style="background: lightgreen;" | 4.20<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 5.2 <br />
| style="background: red;" | NO<br />
| style="background: darkgreen;" | ?<br />
<br />
|-<br />
| style="text-align: left;" colspan="2" | Watchdog<br />
| style="background: lightgreen;" | 5.0<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.12<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 3.18<br />
| style="background: lightgreen;" | 4.2<br />
| style="background: lightgreen;" | 4.17<br />
| style="background: lightgreen;" | 3.19<br />
| style="background: lightgreen;" | 4.6<br />
| style="background: lightgreen;" | 4.9<br />
| style="background: lightgreen;" | 4.5<br />
| style="background: lightgreen;" | 4.12<br />
| style="background: lightgreen;" | 5.3<br />
| style="background: lightgreen;" | 4.15<br />
| style="background: lightgreen;" | 4.11<br />
<br />
|-<br />
! style="width: 10%; text-align: left;" colspan="2" | Model<br />
! [[F1C100s|F1C-<br>100s]]<br />
! [[A10]]<br />
! [[A10s]]<br />
! [[A13]]<br />
[[R8]]<br />
! [[A20]]<br />
! [[A23]]<br />
! [[A31]]<br />
! [[A33]]<br />
[[R16]]<br />
! [[A64]]<br />
! [[A80]]<br />
! [[A83T]]<br />
! [[GR8]]<br />
! [[H3]]<br />
! [[H5]]<br />
! [[H6]]<br />
! [[R40]]<br />
[[T3]]<br />
! [[V3s]]<br />
<br />
|}<br />
<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|-<br />
! Legend<br />
|-<br />
| style="background: lightgreen;" | In Linux mainline since version x<br />
|-<br />
| style="background: darkgreen;" | Nobody works on it, but it should be compatible with already done drivers<br />
|-<br />
| style="background: orange;" | Somebody works on it<br />
|-<br />
| style="background: red;" | No support, nobody works on it<br />
|-<br />
| style="background: black; color: white;" | support impossible<br />
|-<br />
| style="background: grey; color: white;" | Status is unknown/to be completed<br />
|}<br />
<br />
== Work In Progress ==<br />
<br />
=== Core Stuff ===<br />
*[[AR100]] firmware (WiP: Samuel Holland) [https://github.com/crust-firmware/crust ARISC firmware for sunxi SoCs ]<br />
<br />
* Message box (WiP: Samuel Holland) [https://lore.kernel.org/patchwork/cover/1117050/ Allwinner sunxi message box support patch-v4]<br />
<br />
* [[A13]] PSCI Suspend / Resume / CPUIdle (WiP: Antoine Tenart) [http://lists.denx.de/pipermail/u-boot/2016-September/265453.html patch-v1]<br />
<br />
=== Major drivers ===<br />
* Crypto [[A64]] / [[H3]] / [[H5]] / [[H6]] / [[R40]] WIP Corentin Labbe [https://lore.kernel.org/patchwork/cover/1125273/ crypto: add sun8i-ce driver for Allwinner crypto engine]<br />
<br />
* HDMI Audio [[A64]] / [[H3]] / [[H5]] / [[H6]] WIP Jernej Škrabec (jernej) / LibreELEC<br />
<br />
* [[R40]] MIPI-DSI WIP Jagan Teki [https://patchwork.freedesktop.org/series/62062/ drm/sun4i: Allwinner R40 MIPI-DSI support] <br />
<br />
* [[A64]] MIPI-DSI WiP Jagan Teki [https://lore.kernel.org/patchwork/cover/1049604/ drm/sun4i: Allwinner A64 MIPI-DSI support patch-v8]<br />
<br />
* [[H6]] USB 3 WiP Icenowy Zheng [https://lore.kernel.org/patchwork/cover/1058917/ Allwinner H6 USB3 support patch-v5]<br />
<br />
* [[AC100]] Audio codec WiP Ondrej Jirman [https://github.com/megous/linux/commits/linux-tbs WIP branch]<br />
<br />
* [[A10]] CSI WiP Maxime Ripard [https://lore.kernel.org/patchwork/cover/1058765/ media: Allwinner A10 CSI support v5] <br />
<br />
* [[Cedrus|Video Engine]] HEVC decoding WiP Paul Kocialkowski [https://www.spinics.net/lists/arm-kernel/msg729304.html patch-v5]<br />
<br />
=== Minor drivers ===<br />
<!-- Please move the newest entry to the top --><br />
* [[A64]] / [[H3]] / [[H5]] / [[H6]] / [[R40]] Thermal WIP Yangtao Li [https://patchwork.kernel.org/cover/11088251/ add thermal driver for h6 v5]<br />
* [[H6]] <br />
** PWM WIP Jernej Škrabec [https://patchwork.kernel.org/cover/11061737/ pwm: sun4i: Add support for Allwinner H6] <br />
** GPU WIP Clément Péron [https://lore.kernel.org/patchwork/cover/1077018/ Allwinner H6 Mali GPU support]<br />
** Cpufreq (DVFS) WIP Yangtao Li [https://lore.kernel.org/patchwork/cover/1042857/ arm64: dts: allwinner: h6: Enable CPU DVFS(cpufreq)]<br />
<br />
* [[H5]] Cpufreq (DVFS) WIP Chen-Yu Tsai [https://patchwork.kernel.org/cover/10787869/ arm64: dts: allwinner: h5: Enable CPU DVFS (cpufreq)]<br />
* [[R40]] PWM (WIP Hao Zhang [https://www.spinics.net/lists/kernel/msg2731498.html patch-v2])<br />
* [[A31]]/[[A31s]] PWM support (WiP: Siarhei Volkau [http://lists.infradead.org/pipermail/linux-arm-kernel/2017-February/486405.html patch-v1])<br />
* [[A20]] Keypad (WiP: Yassin Jaffer (ddc) [http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/370079.html patch])<br />
* [[A64]] / [[A80]] / [[A83T]] / [[H5]] Thermal driver WIP: Philipp Rossak (embed-3d) v3-branch: <br />
** [https://github.com/embed-3d/linux/tree/embed-3d/sunxi-ths-v3 sunxi-ths-v3] <br />
** [https://patchwork.kernel.org/cover/10582083/ IIO-based thermal sensor driver for Allwinner H3 and A83T SoC]<br />
<br />
=== Boards ===<br />
<br />
== Merged for 5.4 ==<br />
* [[A64]]<br />
** IR<br />
* [[H6]]<br />
** IR<br />
** RTC<br />
** SPDIF<br />
New Devices Supported<br />
* [[A64]]<br />
** [[Olimex A64-OLinuXino]] eMMC<br />
* [[H6]]<br />
** [[Tanix TX6]]<br />
* [[S3]]<br />
** [[Litchee Zero Plus]]<br />
<br />
== Merged for 5.3 ==<br />
* [[A64]]<br />
** LRADC<br />
** RGB LCD<br />
* [[A83T]]<br />
** CSI<br />
* [[H6]]<br />
** DMA<br />
** Watchdog<br />
* multiple SoCs<br />
** [[Cedrus]] h264<br />
<br />
== Merged into 5.2 ==<br />
* [[A83T]]<br />
** LRADC<br />
** USB OTG<br />
<br />
* [[H6]]<br />
** [[Cedrus]]<br />
<br />
* multiple SoCs<br />
** [[Mali Open Source Driver|Lima]]<br />
** [[Mali Open Source Driver|Panfrost]]<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** Banana-Pi-M2-Zero<br />
<br />
New Devices Supported<br />
* [[H6]]<br />
** [[Beelink GS1]]<br />
** [[Xunlong Orange Pi 3]]<br />
<br />
== Merged into 5.1 ==<br />
* A10<br />
** Cedrus<br />
** PMU<br />
<br />
* A20<br />
** Audio Codec improvements<br />
<br />
* A23<br />
** Display pipeline<br />
** LCD enabled on Q8 A23 tablets<br />
<br />
* A64<br />
** ARM Architectural Timer errata workaround<br />
** PMU<br />
** CSI<br />
<br />
* A80<br />
** GMAC support<br />
<br />
* CSI in general<br />
** RGR565 support<br />
** JPEG pass-through support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Banana Pi M2+]]<br />
** [[Banana Pi M2 Ultra]]<br />
<br />
* [[LCD]] enabled on [[A13]] [[Q8]] tablets<br />
<br />
== Merged into 5.0 ==<br />
* A64<br />
** Cedrus<br />
** DTS changes for audio codec<br />
<br />
* F1C100s<br />
** initial F1C100s support<br />
<br />
* H6<br />
** Ethernet<br />
** DE3/HDMI support<br />
** USB 2.0<br />
<br />
* H3 / H5<br />
** CSI Support<br />
<br />
* H5<br />
** Cedrus<br />
<br />
* R40<br />
** RTC<br />
<br />
* T3<br />
** initial T3 support<ref>https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7badd1d7aa61087010803affa19bb83fb5a0af1</ref><br />
<br />
* V3s<br />
** CSI Support<br />
<br />
* [[Bluetooth#AMPAK|Broadcom-based (AMPAK modules) Bluetooth]] support on<br />
** [[Sinovoip Banana Pi M2 Magic | Banana Pi M2 Magic]]<br />
** [[Banana Pi M3]]<br />
** [[Banana Pi M64]]<br />
** [[Cubietruck]]<br />
** [[Cubietech_Cubietruck_Plus|Cubietruck Plus]]<br />
<br />
New Devices Supported<br />
* [[Xunlong Orange Pi Lite 2]]<br />
<br />
== Merged into 4.20 ==<br />
<br />
* A13 / A20 / A33 / H3<br />
** Cedrus driver<br />
<br />
* A83T<br />
** IR receiver<br />
<br />
* A64<br />
** Cleanup for device tree files<br />
** HDMI support<br />
** Audio codec support (DTS changes will be merged in 5.0)<br />
<br />
* H3 / H5<br />
** SID<br />
<br />
* R40<br />
** SATA<br />
<br />
New Devices Supported<br />
* [[Pine64]] LTS<br />
* [[Xunlong Orange Pi One Plus]]<br />
* [[Xunlong Orange Pi Zero Plus 2]] (H3 variant)<br />
* [[Sinovoip Banana Pi M2+]] (H5 variant)<br />
<br />
== Merged into 4.19 ==<br />
<br />
* A10 / A13 / A20 / A23 / A33<br />
** SRAM controller / system control<br />
<br />
* A64<br />
** SRAM controller / system control<br />
** Display clocks and bus<br />
** RTC clock output<br />
** PWM<br />
** R_I2C<br />
<br />
* H3<br />
** SRAM controller / system control<br />
<br />
* H6<br />
** MMC<br />
** PMIC<br />
<br />
* R40<br />
** HDMI support<br />
<br />
Board Changes<br />
* SPI flash node for [[Orange Pi PC 2]] and [[Pine64#Variants | Pine64 SoPINE]]<br />
* Use lid switch as wake-up source for A64 based laptops<br />
* LEDs added for [[PineH64]]<br />
<br />
New Devices<br />
* [[Pine Pinebook]]<br />
* Amarula A64-Relic<br />
<br />
== Changes merged up to 4.18 ==<br />
Changes up to 4.18 can be found on [[Linux mainlining history]] page.<br />
<br />
=References=<br />
<references /><br />
<br />
= See also =<br />
* [[Mainline Kernel Howto]]<br />
* [[Possible setups for hacking on mainline]]<br />
* [[Linux Kernel]]<br />
**[[Toolchain]]<br />
<br />
=External Links=<br />
* [http://www.kernel.org kernel.org] - Official website for the Linux Kernel<br />
** [http://github.com/torvalds/linux http://github.com/torvalds/linux] - Linus Torvalds' GitHub account with the upstream Linux kernel<br />
* [http://www.kernel.org/doc/ Linux Kernel documentation index]<br />
* [http://www.kernel.org/doc/man-pages/ Linux Kernel man pages]<br />
* [http://kernelnewbies.org/ Kernel Newbies Site - Excellent source of information for people new to kernel]<br />
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary Linus' kernel tree for 2.6]<br />
* [https://bugzilla.kernel.org/ Kernel bugzilla] - [https://bugzilla.kernel.org/show_bug.cgi?id=15790 Regressions for each of recent versions]<br />
* [http://www.fsfla.org/svnwiki/selibre/linux-libre/ Linux-libre project - Maintains and distributes fully free kernel]<br />
* [http://lingrok.org/ LinGrok, Linux kernel source code cross-reference]<br />
* [https://elixir.bootlin.com/linux/latest/source?a=arm Bootlin LXR (Linux Cross Reference)]<br />
* [http://lists.infradead.org/pipermail/linux-arm-kernel/ linux-arm-kernel - Mailing list archive]<br />
===How to upstream===<br />
* [http://www.elinux.org/images/a/ad/Arm-soc-checklist.pdf Your new ARM SoC Linux support check-list! by Thomas Petazzoni of Bootlin]<br />
*[http://www.cnx-software.com/2014/03/04/linux-kernel-upstreaming-how-to-linaro-connect-asia-2014/ Linux Kernel Upstreaming How-To (CNXSoft - Embedded Software Development)]<br />
**[http://www.youtube.com/watch?v=dY7fikYZ42c Matt Porter's YouTube video talk on “Upstreaming 101" (LCA14-111)]<br />
***[http://www.linaro.org/documents/download/65f888c674508efcf9bd5d90398a186a530d01c4c78db Matt Porter's presentation slides for “Upstreaming 101" (LCA14-111)]<br />
**[https://www.youtube.com/watch?v=FiQ5uV_Mm5c Matt Porter's YouTube video talk on “Upstreaming 201" (LCA14-112)]<br />
***[http://www.linaro.org/documents/download/7b9920fcc89589bad9063d87d9137f08530d020b71924 Matt Porter's presentation slides for “Upstreaming 201" (LCA14-112)]<br />
*[http://www.cnx-software.com/2011/08/19/how-to-write-and-submit-a-linux-kernel-patch/ How to Write and Submit a Linux Kernel Patch (CNXSoft - Embedded Software Development)]<br />
** [http://www.youtube.com/watch?v=LLBrBBImJt4 YouTube Video- Write and Submit your first Linux kernel Patch]<br />
** [http://www.cnx-software.com/pdf/kernel-tutorial/kernel_patch_tutorial.pdf Greg Kroah-Hartman Kernel Tutorial Write and Submit your first Linux Kernel Patch]<br />
*[http://www.linaro.org/connect-lca14/resources Linaro resources page from LCA (Linaro Connect Asia) 2014]<br />
<br />
=Notes=<br />
<references group=note /><br />
<br />
[[Category:Development]]</div>
Kenren