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. Allwinner H6 has a quirky Watchdog that doesn't make the SoC reboot.
 * The PCIe implementation is broken.
 * 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.0, OpenCL 1.2
 * 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 =