H6

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.

=Overview= See Mainlining Effort and Mainline U-Boot for support status. The initial support for the SoC will be added in kernel 4.17

High level differences

 * addition of PCIe support (broken, see below)
 * single lane PCIe 2.0
 * totally undocumented software interface
 * addition of USB 3.0 host
 * Mali T720 instead of Mali 450
 * DDR4 DRAM support
 * addition of IOMMU
 * though only connected to display controller and video codecs
 * (New?) Audio Hub component

Programming model/driver level differences

 * heavily changed memory map (UART0 at 0x05000000, for instance)
 * SRAM locations moved around as well (SRAM A1 at 0x2000 now)
 * 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)
 * DMA controller changed (more than 32 ports, but still limited to 32 bit addresses)
 * no GPIO port A and B

Errata
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.
 * The PCIe implementation is broken.

Possible workaround: http://linux-sunxi.org/User:Icenowy/Aw-el2-barebone

Some Allwinner H6 not all has a quirky Watchdog that doesn't make the SoC reboot.
 * The Watchdog implementation is broken.

=H6 SoC Features=
 * CPU
 * ARM Cortex-A53 Quad-Core
 * 512KB L2-Cache (shared between four cores)
 * 32 KB (Instruction) / 32KiB (Data) L1-Cache per core
 * SIMD NEON, VFP4
 * Virtualization
 * GPU
 * ARM Mali-T720 MP2
 * Featuring 2 unified shader cores
 * Complies with OpenGL ES 3.1, OpenCL 1.1
 * Memory
 * DDR3/DDR4/LPDDR2/LPDDR3 controller
 * NAND Flash controller and 64-bit ECC, supports full disk encryption
 * 3 MMC controllers, in which MMC2 (eMMC controller) supports full disk encryption
 * Video
 * 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
 * BD Directory, BD ISO and BD m2ts video decoding
 * H.264 High Profile 1080P@60fps encoding
 * 3840×1080,1920x2160 3D decoding
 * Complies with RTSP, HTTP,HLS,RTMP,MMS streaming media protocol
 * Display
 * Integrated HDMI V2.0 with HDCP2.2 4K@60fps
 * TV CVBS output
 * RGB LCD output
 * Camera
 * Integrated parallel 8-bit I/F YUV422 sensor
 * Support CCIR656 protocol fot NTSC and PAL
 * 5M CMOS sensor support
 * Support video capture resolution up to 1080p@30fps
 * Audio
 * Two audio digital-to-analog(DAC) channels 92dB SNR
 * Two differential microphone inputs (one low-noise)
 * Stereo Linein input
 * TDM Digital Microphone input
 * Embedded Controller:
 * AR100 controller.
 * Thermal Sensor Controller (TSC) providing over-temperature protection interrupt and over-temperature alarm interrupt
 * AXP805 PMIC
 * package: FBGA451, 15 mm x 15 mm, 0.65 mm Pitch

=Documentation=
 * [[File:Allwinner_H6_V200_Datasheet_V1.1.pdf]] (PDF, 80 pages, 2017-11-14)
 * [[File:Allwinner_H6_V200_User_Manual_V1.1.pdf]] (PDF, 965 pages, 2017-11-14)

= Register guide = = Software =

Original SDK
A beta version of the H6 BSP was released on 2018/01/30...


 * https://github.com/Allwinner-Homlet/H6-BSP4.9-brandy
 * https://github.com/Allwinner-Homlet/H6-BSP4.9-tools
 * https://github.com/Allwinner-Homlet/H6-BSP4.9-linux

SDK tarballs are also available from pine64, mirrored on our own dl server as well.
 * H6 Lichee v1.1 (mirror)
 * H6 BSP 1.0 (mirror)
 * H6 Android 7.1 SDK (mirror)

GPL Violations
As is customary, even the H6 SDKs/BSPs come with a range of binaries included in GPL licensed code.

H6-lichee-v1.1
The tarball for this can be found on the pine64 website.

kernel
In the subdirectory linux-3.10, a patched linux-3.10.65, the following binaries can be found:

libnand-xxx are Legacy Codes and will be removed in next release SDK. For source codes of these blobs, please visit : https://github.com/allwinner-zh/linux-3.4-sunxi/tree/master/modules/nand
 * 1) --- Nand Drivers ---

./modules/nand/sun50iw2p1/libnand_sun50iw2p1 ./modules/nand/common0/libnand ./modules/nand/sun50iw1p1/libnand_sun50iw1p1 ./modules/nand/sun8iw10p1/libnand_sun8iw10p1 ./modules/nand/sun8iw5p1/libnand ./modules/nand/sun8iw11p1/libnand_sun8iw11p1 ./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 ./drivers/video/sunxi/disp2/hdmi/libhdmi_sun50iw1 # Same as libhdmi_sun50iw1.
 * 1) - HDMI 1.0 Drivers -
 * 1) - HDMI 1.0 Drivers -

Legacy Codes for old platform, not for H6, should be removed in next release SDK.
 * 1) -- ARISC Drivers  --

./drivers/arisc/binary/arisc_sun8iw5p1.bin ./drivers/arisc/binary/arisc_sun50iw1p1.code


 * 1) --- Power Manager Subsystem ---

./drivers/soc/allwinner/pm/standby/standby.xn # It's a linker script, not a blob.

Legacy Codes for old platform, not for H6, should be removed in next release SDK.

./drivers/soc/allwinner/pm/resume1/sun8i_resume1_scatter.scat # It's a linker script, not a blob. ./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. ./drivers/soc/allwinner/pm_legacy/standby/sun9i_resume1_scatter.scat # It's a linker script, not a blob. ./drivers/soc/allwinner/pm_legacy/standby/sun8i_resume1_scatter.scat # It's a linker script, not a blob. ./drivers/soc/allwinner/pm_legacy/standby/standby.xn # It's a linker script, not a blob. ./drivers/soc/allwinner/pm_legacy/standby/gen_check_code # Same as pm/resume1/gen_check_code

Legacy Codes for old platform, not for H6, should be removed in next release SDK. ./drivers/media/platform/sunxi-vfe/lib/libisp_32 ./drivers/media/platform/sunxi-vfe/lib/lib_mipicsi2_v1 ./drivers/media/platform/sunxi-vfe/lib/lib_mipicsi2_v2 ./drivers/media/platform/sunxi-vfe/lib/libisp_64
 * 1) - Camera Relative -

U-Boot
'''u-boot-2011.09 are legacy source codes, H6 didn’t use it. It should be removed in next release SDK. '''

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/.

In the subdirectory lichee/brandy/u-boot-2011.09/, a patched u-boot 2011-09-rc1, the following binaries can be found:

./nand_sunxi/sun8iw3/libnand-sun8iw3 ./nand_sunxi/sun8iw1/libnand-sun8iw1 ./nand_sunxi/sun8iw5/libnand-sun8iw5 ./nand_sunxi/sun8iw8/libnand-sun8iw8 ./nand_sunxi/sun9iw1/libnand-sun9iw1 ./nand_sunxi/sun7i/libnand-sun7i ./nand_sunxi/sun8iw9/libnand-sun8iw9 ./nand_sunxi/sun8iw7/libnand-sun8iw7 ./nand_sunxi/sun5i/libnand-sun5i ./nand_sunxi/sun8iw6/libnand-sun8iw6 ./board/sunxi/sun9iw1/box_standby/cpus_pm/cpus_pm_binary.code ./board/sunxi/sun8iw7/box_standby/cpus_pm/cpus_pm_binary.code ./board/sunxi/sun8iw6/box_standby/cpus_pm/cpus_pm_binary.code ./arch/arm/cpu/armv7/sun8iw5/dram/libdram ./arch/arm/cpu/armv7/sun8iw8/dram/libdram ./arch/arm/cpu/armv7/sun9iw1/dram/libdram ./arch/arm/cpu/armv7/sun8iw7/dram/libchipid ./arch/arm/cpu/armv7/sun8iw7/dram/libdram ./arch/arm/cpu/armv7/sun8iw6/dram/libdram-homlet ./arch/arm/cpu/armv7/sun8iw6/dram/libdram-pad ./drivers/video_sunxi/sunxi_v1/obj_video ./drivers/video_sunxi/sunxi_v2/de_bsp/hdmi/aw/libhdcp ./drivers/video_sunxi/sunxi_v2/de_bsp/de/lowlevel_sun9iw1/libdsi ./drivers/video_sunxi/sunxi_v2/de_bsp/de/lowlevel_sun9iw1/libedp ./drivers/video_sunxi/sunxi_v2/obj_video ./drivers/video_sunxi/sunxi_v3/obj_video

In the subdirectory lichee/brandy/u-boot-2014.07/, a patched u-boot 2014-07, the following binaries can be found: libnand-xxx are Legacy Codes and will be removed in next release SDK. For source code of these blobs, please visit : https://github.com/allwinner-zh/bootloader/tree/master/u-boot-2011.09/nand_spl , and https://github.com/allwinner-zh/bootloader/tree/master/u-boot-2011.09/nand_sunxi

./nand_sunxi/sun50iw2p1/libnand-sun50iw2p1 ./nand_sunxi/sun50iw3p1/libnand-sun50iw3p1 ./nand_sunxi/sun50iw1p1/libnand-sun50iw1p1 ./nand_sunxi/sun8iw10p1/libnand-sun8iw10p1 ./nand_sunxi/sun8iw11p1/libnand-sun8iw11p1 ./nand_sunxi/sun8iw12p1/libnand-sun8iw12p1 ./nand_sunxi/sun50iw6p1/libnand-sun50iw6p1

./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 ./drivers/video/sunxi/disp2/hdmi/libhdmi_sun50iw1 # Same as libhdmi_sun8iw11

= Devices =