A64

Allwinner A64 (sun50i) SoC features a Quad-Core Cortex-A53 ARM CPU, and a Mali400 MP2 GPU from ARM.

=Overview=

The A64 is basically an Allwinner H3 with the Cortex-A7 cores replaced with Cortex-A53 cores (ARM64 architecture). They share most of the memory map, clocks, interrupts and also uses the same IP blocks. Differences between the H3 and the A64 seem to be:
 * The H3 has three USB host controllers, whereas the A64 has only one. Both SoCs have an additional USB-OTG controller, which is assumed to be used as normal host controller as well.
 * The H3 DRAM controller supports up to 2GB of RAM, the A64 supports up to 3 GB. Despite being a 64-bit chip, this makes the SoC entirely 32-bit on the physical side.
 * The H3 supports 5 UARTs, the A64 has 6 of them.
 * The MMC controller has been updated to support faster transfer modes. The MMC clocks have changed on the way, now the MMC controller itself provides support for the output and sample phase.
 * The H3 has SRAM A1 mapped at address 0, the BROM is at 0xffff0000. The A64 has its BROM mapped at address 0, SRAM A1 is mapped right behind it at 0x10000 (64KB).
 * The pinmux configuration is still somewhat similar, but differs to an extent which makes them incompatible. A prominent example is (the debug) UART0, which is on PortA on the H3, but on PortB on the A64. H3 lacks PortB entirely.

=A64 SoC Features=


 * CPU
 * ARM Cortex-A53 Quad-Core (r0p4, revidr=0x80) (scroll down for the PDF link)
 * 512KiB L2-Cache
 * 32KiB (Instruction) / 32KiB (Data) L1-Cache per core
 * SIMD NEON (including double-precision floating point), VFP4
 * Cryptography Extension (SHA and AES instructions)
 * Affected by one critical erratum (only in AArch64 state): 843419
 * GPU
 * ARM Mali400 MP2
 * Featuring 1 vertex shader (GP) and 2 fragment shaders (PP).
 * Complies with OpenGL ES 2.0
 * Memory
 * DDR2/DDR3/DDR3L/LPDDR2/LPDDR3 controller (up to 3GB of 667MHz(DDR-1333))
 * NAND Flash controller and 64-bit ECC
 * Video
 * H.265 4k@30fps, 1080p@120fps decoding
 * H.264 1080p@fps decoding
 * MPEG 1/2/4: 1080p@60fps
 * VC1 1080p@30fps
 * VP8 1080p@60fps
 * AVS/AVS+ 1080p@60fps
 * JPEG/MJPEG 1080p@30fps
 * H.264 1080P@60fps encoding
 * Display
 * LVDS single link up to 1366x768@60fps
 * RBG with DE/SYNC up to 1920x1200@60fps
 * MIPI DSI 4-lanes up to 1920x1200@60fps
 * HDMI1.4 with HDCP1.2 up to 4k@30fps
 * Camera
 * Supports parallel 8-bit YUV422 sensor
 * Support CCIR656 protocol for NTSC and PAL
 * Maximum still capture resolution 5M
 * Maximum video capture resolution up to 1080p@30fps
 * PMIC
 * X-Powers AXP803, as seen used with A64 in Olimex Olinuxino A64 design

= Documentation =


 * A64 Datasheet v1.1
 * A64 User Manual v1.0
 * [[File:Allwinner_A64_User_Manual_V1.1.pdf]]

Some devices in the SoC are not described in the manual, but have descriptions in other SoC's manuals:
 * RSB: MMIO address and IRQ mentioned in the A64 manual, IP description in the A83T manual.
 * PRCM: MMIO address mentioned in the A64 manual, IP description in the A83T manual.

Some remarks about the memory map.
 * A64/Memory map

= Register guide = = Software =

Mainline U-Boot
Basic support for the A64 SoC has been been merged into 2016.05-rc1. This covers UART, MMC and required GPIOs and clocks, but no Ethernet or USB yet. Also as there is no information on the DRAM controller so far, the SPL support is not enabled, so boot0 is required at the moment to get U-Boot loaded.

The U-Boot implementation is 64-bit (armv8), so an aarch64 cross compiler is needed to compile U-Boot.

Sunxi Community
= Devices =


 * Azpen Hybrix
 * Banana Pi M64
 * Jide Remix Mini
 * Pine64

Devices in development:
 * Olimex A64 Linux Laptop
 * Olimex A64 Olinuxino

GPL Violations
The publically available SDKs contain kernel and u-boot trees which include and depend on several binaries. Allwinner is always violating the GPL in this way since A31. In the current A64 SDK, lots of blobs are included in kernel and U-Boot, including the critical DRAM code and the important HDMI code.

(The list below may be not finished, and do not list files related to non-A64 SoC)

kernel

 * lichee/linux-3.10/modules/aw_schw/libschw
 * lichee/linux-3.10/modules/nand/sun50iw1p1/libnand_sun50iw1p1
 * lichee/linux-3.10/drivers/input/touchscreen/aw5x06/libAW5306
 * lichee/linux-3.10/drivers/video/sunxi/disp2/hdmi/libhdmi_sun50iw1
 * lichee/linux-3.10/drivers/media/platform/sunxi-vfe/lib/lib{isp,mipicsi2_v1,mipicsi2_v2}

U-Boot
(Only u-boot-2014.07 is checked here)
 * lichee/brandy/u-boot-2014.07/arch/arm/cpu/armv8/wine/dram/libdram-homlet
 * lichee/brandy/u-boot-2014.07/arch/arm/cpu/armv8/wine/dram/libdram-pad
 * lichee/brandy/u-boot-2014.07/arch/arm/cpu/armv7/sun50iw1p1/dram/libchipid
 * lichee/brandy/u-boot-2014.07/arch/arm/cpu/armv7/sun50iw1p1/dram/libdram
 * lichee/brandy/u-boot-2014.07/drivers/video/sunxi/disp2/hdmi/libhdmi_sun50iw1
 * lichee/brandy/u-boot-2014.07/nand_sunxi/sun50iw1p1/libnand-sun50iw1p1

= See also =

=References=

= External links =
 * Product Page
 * lichee_A64_A5.1_V1.0.tar.gz