← Back to Devices

Exper Easypad 8 (Model T8E) — Mainline Linux 7.2 & Alpine Bring-Up

Active sun6i-a31s-exper-t8e 8" Tablet ARMv7

Last updated October 31, 2026

SoC Allwinner A31s (4× Cortex-A7 @ 1.2 GHz)
Architecture ARMv7
Kernel Mainline Linux 7.2
OS / Userland Alpine Linux 3.20 (OpenRC)
Boot Path Non-destructive MicroSD (U-Boot 2024.x SPL)

Standalone bring-up project and reproducible build tree for running modern mainline Linux 7.2 and Alpine Linux 3.20 on the Exper Easypad 8 (Model T8E) quad-core tablet.

Internal NAND/eMMC flash remains completely untouched; the entire system boots cleanly from an external MicroSD card. Removing the SD card restores the factory stock Android system.


Hardware Specifications

Component Specification Details / Bus
SoC Allwinner A31s (sun6i) Quad-core ARM Cortex-A7 @ 1.2 GHz
RAM 1 GiB DDR3 Clocked at 432 MHz (ZQ 251)
GPU PowerVR SGX544 MP2 Rev 1.1.5 (0x01c40000, IRQ SPI 97, AXP221 DCDC2 @ 1.2 V)
PMIC X-Powers AXP221s Connected via P2WI @ 0x68 (switched to P2WI mode by U-Boot)
Display 1024×768 LVDS Single-channel 24-bit LVDS panel (VESA mapping, 60 MHz pixel clock); PG12 panel supply, PH13 PWM0 + PA25 backlight
Touchscreen Goodix GT911 Capacitive Multi-touch on TWI1 @ 0x5d (INT=PA3, RST=PA2)
Storage MicroSD (mmc0) Routed to PF0–PF5; always-on 3.3V rail
USB OTG / MUSB Micro-USB connector; supports Device / Gadget mode
Accelerometer ST LIS3DH 3-axis motion sensor on TWI2 @ 0x19
Wireless Broadcom AP6210 / AP6181 (BCM43362) SDIO Wi-Fi (mmc1)
Debug Port UART0 (115200 8N1) Test pads on mainboard; routed to PH20 (TX) / PH21 (RX)

Hardware Support Status

Subsystem Driver / Mechanism Status Notes
BROM & SPL Allwinner boot0 / U-Boot SPL Working Boots reliably from MicroSD (offset 8 KB)
U-Boot Mainline U-Boot 2024+ Working PSCI, Non-Secure HYP mode, SimpleFB splash
PMIC & Fuel Gauge axp20x MFD / battery / ac / usb Working P2WI @ 0x68 + NMI IRQ; battery capacity, voltage, USB/AC sensing, PEK power key
Serial Console Synopsys DW APB UART (ttyS0) Working Earlycon + interactive getty shell
MicroSD Storage sunxi-mmc (mmc0) Working Rootfs mounted on mmcblk0p2
USB Gadget musb-sunxi + g_ether (usb0) Working CDC Ethernet / RNDIS (172.16.42.1/24)
SSH Server OpenSSH on Alpine Linux Working Direct root login via USB cable or Wi-Fi
Wi-Fi Broadcom brcmfmac (wlan0) Working SDIO Ampak AP6181 (BCM43362) on mmc1; live scanning & association verified
Touchscreen goodix driver (input0) Working 1024×768 1:1 aligned coordinate space, 5-point multi-touch validated
Sensors ST lis3dh IIO driver (iio:device0) Working 3-axis motion & tilt vector sensing with PA9 IRQ
cpufreq / DVFS cpufreq-dt + schedutil, AXP221 DCDC3 Working 480 / 720 / 864 / 1008 MHz at 1.0–1.2 V; reduces idle draw from ~470 mA to ~400 mA
Display (LCD) sun4i-drm (DE1 backend + TCON0 LVDS) Working card0 / LVDS-1 1024×768 @ 54.87 Hz, XRGB overlay planes, fbcon
HDMI & Audio sun4i-drm-hdmi + hdmi-codec Working EDID read, 1920×1080 @ 60 Hz on independent CRTC + ALSA stereo output (sun4i-hdmi)
Backlight pwm-backlight (PH13 PWM0, PA25 enable) Working /sys/class/backlight/backlight (0–56), bl_power for on/off
Video Decoder cedrus (A31 Cedar VE, /dev/video0) Working Stateless V4L2 decode for VP8 (bit-exact), H.264 High Profile, and MPEG-2
GPU (3D) pvrsrvkm (DDK 1.17 port) + Mesa GBM/EGL Working (Out-of-tree) SGX544 MP2 active on Linux 7.2: 55 fps KMS/EGL, glmark2-es2-drm score 211, Weston 10 Wayland
Thermal sun4i-ts sensor (cpu-thermal) Working /sys/class/thermal/thermal_zone0/temp (~36 °C idle)
Audio Allwinner sun4i-codec (sun6i-a31-codec) Working Stereo DAC, Line Out (Speaker amp PL4), Headphone & Mic

PowerVR SGX544 MP2 GPU Bring-Up on Linux 7.2

The Allwinner A31s integrates a PowerVR SGX544 MP2 rev 1.1.5 (CORE_ID 0x01191201, CORE_REVISION 0x00010105 at 0x01c40000, IRQ SPI 97, powered by AXP221 dcdc2 at 1.2 V). While mainline Linux includes the Device Tree binding (allwinner,sun6i-a31-gpu), there is no mainline kernel driver.

Key Hardware & Driver Findings

  1. Bank Layout & Early Bus Hang Root Cause:
    • The SGX544 MP2 register space is divided into 0x0000–0x3fff (broadcast bank — writes broadcast to all cores, reads hang the AXI/AHB bus), 0x4000–0x7fff (MP master bank), and 0x8000 + n*0x4000 (per-core banks).
    • Early bring-up probes hung on the first register read because they read offset 0x0020 in the broadcast bank before the master bank (0x4000) and per-core clock gating controls were sequenced.
  2. Clock & Power Sequencing (sunxi Platform Layer):
    • Sequencing dcdc2 (1.2 V), PRCM power-off gating release, PLL8/PLL9, and the GPU core/hyd/mem/AHB clocks brings the MP master bank (0x4010 / 0x4014) and both SGX cores online cleanly.
  3. Kernel Module (pvrsrvkm) & Mesa Integration:
    • Ported the open-source eurasia_km kernel module to Mainline Linux 7.2, paired with a patched Mesa GBM/EGL bridge and an OpenRC pvr init service (modprobe pvrsrvkm + pvrsrvctl --start).
    • Cold-boot verification: kernel module loads at ~4.96 s, SGX microkernel initializes at ~7.69 s.
  4. Measured GPU Benchmarks on the 1024×768 Panel:
    • kms-gles (GBM + EGL + GLES2 on sun4i-drm): 55.0 fps (vsync-locked to the 54.87 Hz LVDS panel) for single-layer rendering; 27.4 fps constant across 20 blended near-full-screen layers (~430 Mpixel/s) over a 180-second soak test (4,940 frames, 32k SGX interrupts, zero hardware recoveries/lockups).
    • glmark2-es2-drm: Completed all default benchmark scenes at 1024×768 with a score of 211 (after tuning /etc/powervr.ini ParamBufferSize=33554432 and MaxParamBufferSize=67108864 to avoid TA parameter buffer exhaustion on complex scenes).
    • Wayland (weston 10.0.1): Runs on the DRM backend using the SGX544 MP2 GL renderer with a custom gles-unpack-shim preload library providing GL_EXT_unpack_subimage; weston-simple-egl runs at ~55 fps vsync-locked with Goodix multi-touch input.

Built on This Port: Wireless Android Auto Head Unit

Repository: Mechres/exper-t8e-android-auto

Using the mainline Linux 7.2 DRM, ALSA, Wi-Fi, and Goodix touch stack from this port, the tablet also serves as a standalone wireless Android Auto head unit:

 phone (hotspot, AA head unit server :5277)
        ▲ Wi-Fi (tablet = client, phone = default gateway)
        │ TLS, Android Auto protocol
 ┌──────┴────────────────────────────────────────────────────────────┐
 │ exper-auto ── H.264 ──► ffmpeg (decode, yuv420p) ──► drm-show      │
 │     │                                    NEON bilinear scale+crop   │
 │     │ touch (Goodix GT911, evdev)         ──► DRM overlay plane ──► LVDS panel
 │     └ audio PCM ──► aplay ──► ALSA ──► 3.5 mm jack                  │
 │ exper-powerd: power key / external power (AXP221)                   │
 └─────────────────────────────────────────────────────────────────────┘
  • Custom ARMv7 NEON Scaler (drm-show): Because the Allwinner A31s DE1 hardware frontend scaler (sun4i-frontend) does not produce output on this SoC, drm-show implements a hand-tuned ARMv7 NEON bilinear scaler and YUV420p-to-XRGB converter that renders 800×480 H.264 streams onto a sun4i-drm plane at ~60 fps (compared to 25–40 fps with FFmpeg swscale).
  • Native 4:3 Projection: Requests a 640×480 active UI region (margin_width = 160) and scales it 1.6× to fill the 1024×768 panel without black bars or distortion.
  • Automotive Power Daemon (exper-powerd): Monitors AXP221 VBUS/AC presence and the physical power key, blanking the backlight when ignition power cuts and shutting down cleanly after a configurable delay.

Boot Architecture

[BROM] → [boot0 / SPL] (MicroSD offset 8 KB)
           ↓
[U-Boot 2024.x] (MicroSD offset 40 KB, PSCI / Non-Secure HYP)
  ├── LCD init & splash screen (SimpleFB @ 1024x768x32)
  └── Loads boot.scr → sun6i-a31s-exper-t8e-drm.dtb, zImage (cma=64M)
        ↓
[Linux Kernel 7.2 Mainline] (init at ~1.8 s)
  ├── 4× Cortex-A7 (SMP), 8250_dw serial console (PH20/PH21)
  ├── AXP221s PMIC on P2WI @ 0x68 (regulators, battery, power key)
  ├── sunxi-mmc root mount (root=/dev/mmcblk0p2), mmc1 SDIO Wi-Fi (wlan0)
  ├── goodix touchscreen (I2C1 0x5d), musb-sunxi USB gadget (usb0 CDC Ethernet)
  └── sun4i-drm (/dev/dri/card0, LVDS-1 + HDMI-A-1) & pvrsrvkm (SGX544 MP2)
        ↓
[Alpine Linux 3.20 (ARMv7 OpenRC)]
  ├── /sbin/getty 115200 ttyS0
  ├── sshd listening on 172.16.42.1:22
  └── wlan0 & DRM/Wayland/Android-Auto services ready

Reproducible Build Quick Start

# 1. Fetch Bootlin ARMv7 hard-float toolchain, mainline U-Boot, and Linux 7.2
bash scripts/fetch-sources.sh

# 2. Build U-Boot SPL + u-boot-sunxi-with-spl.bin
bash scripts/25-uboot-build.sh

# 3. Build mainline Linux 7.2 kernel, sun6i-a31s-exper-t8e-drm.dtb, and modules
bash scripts/30-kernel-build.sh

# 4. Assemble the Alpine Linux 3.20 ARMv7 rootfs and write bootable MicroSD image
bash scripts/45-alpine-stage1.sh
sudo bash scripts/45-alpine-stage2.sh

Device Tags:

Other Ported Devices