Skip to content

Instantly share code, notes, and snippets.

@Entrpi
Created December 10, 2025 08:20
Show Gist options
  • Select an option

  • Save Entrpi/b278c16752e166b87152e518c240ac62 to your computer and use it in GitHub Desktop.

Select an option

Save Entrpi/b278c16752e166b87152e518c240ac62 to your computer and use it in GitHub Desktop.

CIX Sky1 Mainline Driver Porting Status

Date: 2025-12-10 Kernel: Mainline 6.18 (development) Board: Radxa Orion O6


Summary

Category Count Status
Ported & Working 20 Complete
Skipped (Not Needed) 14 Intentional
SOF Stack 4 Ported (no firmware)

Note: SOF drivers are ported but SOF firmware was never shipped by CIX/Radxa. Current audio uses remoteproc path (dsp_fw.bin).


Ported Drivers (Working)

Core Platform Drivers

Driver Config Location Commit Purpose
PCIe Host PCI_SKY1 pci/controller/cadence/pci-sky1.c a0d9f2c08f45 PCIe root complex, MSI/MSI-X support
Pinctrl PINCTRL_SKY1 pinctrl/cix/ b5d931a3d0d0 Pin multiplexing and GPIO
Reset RESET_SKY1 reset/reset-sky1.c b5d931a3d0d0 Reset controller
Reset AUDSS RESET_SKY1_AUDSS reset/reset-sky1-audss.c c1fb6d689d0e Audio subsystem reset
PWM PWM_SKY1 pwm/pwm-sky1.c b5d931a3d0d0 PWM controller
Watchdog SKY1_WATCHDOG watchdog/sky1_wdt.c b5d931a3d0d0 Hardware watchdog
Mailbox CIX_MBOX mailbox/cix-mailbox.c b5d931a3d0d0 Inter-processor communication
Hwspinlock HWSPINLOCK_SKY1 hwspinlock/sky1_hwspinlock.c 97730263cf1e Hardware spinlocks for IPC
NVMEM NVMEM_SKY1 nvmem/sky1-nvmem.c 25a8e2e55631 eFuse access via firmware
SoCinfo CIX_SKY1_SOCINFO soc/cix/sky1-socinfo.c bac67f39f122 SoC/board identification

PHY Drivers

Driver Config Location Commit Purpose
PCIe PHY PHY_CIX_PCIE phy/cix/phy-cix-pcie.c b5d931a3d0d0 PCIe physical layer
USB2 PHY PHY_CIX_USB2 phy/cix/phy-cix-usb2.c b5d931a3d0d0 USB 2.0 physical layer
USB3 PHY PHY_CIX_USB3 phy/cix/phy-cix-usb3.c b5d931a3d0d0 USB 3.0 physical layer
USBDP PHY PHY_CIX_USBDP phy/cix/phy-cix-usbdp.c b5d931a3d0d0 USB + DisplayPort combo PHY

USB Drivers

Driver Config Location Commit Purpose
CDNSP Platform USB_CDNSP_SKY1 usb/cdns3/cdnsp-sky1.c 68675c6430ed USB controller glue
RTS5453 Type-C TYPEC_RTS5453 usb/typec/rts5453.c 9ab5c6e2d91c USB-PD controller

Display Drivers

Driver Config Location Commit Purpose
Linlon DP DRM_CIX gpu/drm/cix/linlon-dp/ 4d72f735c7b2 Display Processing Unit
Trilin DPTX DRM_TRILIN_DP_CIX gpu/drm/cix/dptx/ 4d72f735c7b2 DisplayPort TX
Virtual Display DRM_CIX_VIRTUAL gpu/drm/cix/ 4d72f735c7b2 Virtual connector

Audio Drivers

Driver Config Location Commit Purpose
HDA IPBloq SND_HDA_CIX_IPBLOQ sound/pci/hda/ 18e2ba072369 HDA codec support
SOC Core SND_SOC_CIX sound/soc/cix/ c1fb6d689d0e ASoC platform
DSP Remoteproc CIX_DSP_RPROC remoteproc/cix_dsp_rproc.c 5e166d1f0971 DSP remote processor
DSP IPC CIX_DSP firmware/cix/cix-dsp.c - SOF mailbox helper*
SOF Common SND_SOC_SOF_CIX_COMMON sound/soc/sof/cix/ - SOF helpers*
SOF Sky1 SND_SOC_SOF_CIX_SKY1 sound/soc/sof/cix/ - SOF platform*

*SOF drivers ported but require firmware (sof-sky1.ri) that was never shipped

Interrupt Controller

Driver Config Location Commit Purpose
PDC SKY1_PDC irqchip/irq-sky1-pdc.c c82928ac8d12 Power Domain Controller IRQ

What Ported Drivers Provide

Full Hardware Support

  • PCIe: All 5 controllers working, MSI/MSI-X via ITS, NVMe/WiFi/Ethernet functional
  • USB: All 10 USB ports working, Type-C with OTG and role switching
  • Display: HDMI output at 1920x1280@60Hz via DPU + DP TX chain
  • Audio: HDA codec, I2S via ASoC (basic support)

System Infrastructure

  • Hwspinlock: Inter-processor synchronization (100 locks)
  • Mailbox: SCMI communication, DSP IPC
  • NVMEM: eFuse access for chip ID, calibration data
  • SoCinfo: Board identification (PHECDA Rev A), firmware versions
  • Reset/Clocks: Full power management support

Current Boot Parameters

# No workarounds needed!
console=ttyAMA2,115200 earlycon=pl011,0x040d0000 clk_ignore_unused

Skipped Drivers (Not Needed)

Redundant / Covered by Mainline

Driver Config Reason
Timer GPT TIMER_SKY1_GPT ARM arch timer is primary, GPT nodes disabled in DT
Bus Devfreq ARM_CIX_BUS_DEVFREQ Mainline SCMI perf domain provides same functionality
PMU Event DEVFREQ_EVENT_CIX_PMU Consumer (bus devfreq) not needed, stub functions
UART Clock COMMON_CLK_CIX Incomplete driver, clk_ignore_unused works
Thermal CIX_THERMAL 5 thermal zones already work via SCMI

ACPI-Only (Using DT Boot)

Driver Config Reason
ACPI Power Domain CIX_ACPI_POWER_DOMAIN Not using ACPI boot
ACPI Clock CIX_ACPI_CLK Not using ACPI boot
SOC ACPI CIX_SOC_ACPI Not using ACPI boot

Vendor Debug Infrastructure

Driver Config Reason
Reboot Reason SKY1_REBOOT_REASON Coupled to vendor blackbox system
DST/Blackbox CIX_DST Vendor crash dump, not upstreamable
Clock Debug CIX_CLK_DEBUG Debug-only feature

Hardware Not Present / Laptop-Only

Driver Config Reason
EC CIX_EC Embedded Controller - laptop hardware
Sensorhub CIX_SENSORHUB Sensor fusion hub - laptop/tablet
E-Shutter CIX_SKY1_E_SHUTTER Electronic shutter - camera

Android-Specific

Driver Config Reason
Vendor Hooks CIX_VENDOR_HOOKS Android GKI scheduler hooks

Disabled in Device Tree

Driver Config Reason
Hardware RNG HW_RANDOM_SKY1 DT node disabled, has debug printks

DSP / Sound Open Firmware Stack

Two Audio Paths (Mutually Exclusive)

The Sky1 HiFi5 DSP supports two different audio stacks:

Path DT Compatible Driver Firmware Status
Remoteproc cix,sky1-hifi5 cix_dsp_rproc.ko dsp_fw.bin ✅ Working
SOF cix,sky1-dsp sof-audio-of-sky1.ko sof-sky1.ri ⚠️ No firmware

Current DT uses: Remoteproc path (cix,sky1-hifi5)

DSP Drivers (Ported)

Driver Config Location Status
DSP IPC Helper CIX_DSP drivers/firmware/cix/cix-dsp.c ✅ Ported
SOF Common SND_SOC_SOF_CIX_COMMON sound/soc/sof/cix/cix-common.c ✅ Ported
SOF Sky1 SND_SOC_SOF_CIX_SKY1 sound/soc/sof/cix/cix-sky1.c ✅ Ported
Header - include/linux/firmware/cix/dsp.h ✅ Ported

DSP Stack Architecture

┌─────────────────────────────────────┐
│  SND_SOC_SOF_CIX_SKY1              │  Audio effects, mixing
│  (sound/soc/sof/cix/)               │  codec configuration
└──────────────┬──────────────────────┘
               │ depends on
┌──────────────▼──────────────────────┐
│  CIX_DSP                            │  IPC abstraction
│  (drivers/firmware/cix/cix-dsp.c)   │  for mailbox
└──────────────┬──────────────────────┘
               │ uses
┌──────────────▼──────────────────────┐
│  CIX_DSP_RPROC                      │  ✅ Working
│  (drivers/remoteproc/)              │  Loads dsp_fw.bin
└──────────────┬──────────────────────┘
               │ uses
┌──────────────▼──────────────────────┐
│  CIX_MBOX                           │  ✅ Working
│  (drivers/mailbox/)                 │  Inter-processor comm
└─────────────────────────────────────┘

Current DSP Status (Remoteproc Path)

$ cat /sys/class/remoteproc/remoteproc0/state
running

$ cat /sys/class/remoteproc/remoteproc0/name
cix-dsp-rproc

The DSP boots and runs via remoteproc. Basic audio works through ASoC platform driver.

SOF Firmware Status

SOF firmware does not exist and was never shipped by CIX/Radxa:

File Purpose Status
dsp_fw.bin Remoteproc firmware ✅ Present
sof-sky1.ri SOF runtime image ❌ Not shipped
sof-sky1-*.tplg Audio topology ❌ Not shipped

Building SOF firmware would require:

  1. Sound Open Firmware source code
  2. Xtensa/HiFi5 DSP toolchain
  3. Platform-specific port for Sky1 DSP

What SOF Would Enable (If Firmware Existed)

  • DSP-based audio effects (EQ, DRC, etc.)
  • Low-latency audio processing
  • Codec configuration via topology files
  • Power-efficient audio offload

Conclusion

The SOF drivers are ported and ready, but without firmware they cannot be used. The current working audio path is remoteproc-based (cix,sky1-hifi5cix_dsp_rproc) which provides basic audio functionality without DSP effects.


GPU Status (Separate Effort)

The Mali G720 GPU uses mainline Panthor driver (not vendor kbase):

Component Status Notes
Panthor driver In progress EGL context works, job execution times out
Mesa 25.3.0 Built OpenGL ES 3.1 queries work
Firmware Working CSF v3.13.0 boots

See docs/csf-interface-comparison.md and docs/sky1-gpu-power-state-model.md for GPU debugging details.


File Locations

Mainline Kernel

  • Source: /home/radxa/mainline-linux/
  • Config: arch/arm64/configs/defconfig + fragments

Vendor Kernel (Reference)

  • Source: /home/radxa/radxa-kernel-6.6/
  • Config: arch/arm64/configs/cix.config

Documentation

  • This file: ~/docs/sky1-driver-porting-status.md
  • Debug log: ~/docs/sky1-panthor-debug-log.md
  • Vendor analysis: ~/docs/cix-vendor-driver-analysis.md

Next Steps

  1. Port DSP/SOF drivers ✅ Complete

    • include/linux/firmware/cix/dsp.h
    • drivers/firmware/cix/cix-dsp.c
    • sound/soc/sof/cix/cix-common.c
    • sound/soc/sof/cix/cix-sky1.c
  2. SOF Audio - Blocked on firmware

    • SOF firmware (sof-sky1.ri, *.tplg) was never shipped
    • Would require building from SOF source with HiFi5 toolchain
    • Current audio works via remoteproc path (dsp_fw.bin)
  3. Continue GPU debugging

    • Resolve shader power activation issue
    • Get actual rendering working

Appendix: Full Config Comparison

Enabled in Mainline (CIX/SKY1)

CONFIG_ARCH_CIX=y
CONFIG_CIX_CPU_IPA=y
CONFIG_CIX_DSP_RPROC=m
CONFIG_CIX_MBOX=y
CONFIG_CIX_SKY1_SOCINFO=y
CONFIG_CLK_SKY1_AUDSS=y
CONFIG_DRM_CIX_EDP_PANEL=m
CONFIG_DRM_CIX=m
CONFIG_DRM_CIX_VIRTUAL=m
CONFIG_DRM_TRILIN_DP_CIX=m
CONFIG_HWSPINLOCK_SKY1=y
CONFIG_NVMEM_SKY1=y
CONFIG_PCI_SKY1=y
CONFIG_PHY_CIX_PCIE=y
CONFIG_PHY_CIX_USB2=y
CONFIG_PHY_CIX_USB3=y
CONFIG_PHY_CIX_USBDP=y
CONFIG_PINCTRL_SKY1_BASE=y
CONFIG_PINCTRL_SKY1=y
CONFIG_PWM_SKY1=y
CONFIG_RESET_SKY1_AUDSS=y
CONFIG_RESET_SKY1=y
CONFIG_SKY1_PDC=y
CONFIG_SKY1_WATCHDOG=y
CONFIG_SND_HDA_CIX_IPBLOQ=m
CONFIG_SND_SOC_CIX=m
CONFIG_SND_SOC_SKY1_SOUND_CARD=m
CONFIG_USB_CDNSP_SKY1=y

In Vendor But Not Mainline (Intentionally Skipped)

CONFIG_ARM_CIX_BUS_DEVFREQ=y        # Redundant
CONFIG_CIX_ACPI_CLK=y               # ACPI-only
CONFIG_CIX_ACPI_POWER_DOMAIN=y      # ACPI-only
CONFIG_CIX_AP2SE_IPC=y              # SE IPC
CONFIG_CIX_CLK_DEBUG=y              # Debug
CONFIG_CIX_CPU_INSTPIPE_FRESH=y     # Vendor optimization
CONFIG_CIX_DSP=m                    # Ported
CONFIG_CIX_DST=y                    # Vendor debug
CONFIG_CIX_EC=y                     # Laptop
CONFIG_CIX_SE_CONFIG=y              # SE config
CONFIG_CIX_SENSORHUB=y              # Laptop
CONFIG_CIX_SOC_ACPI=y               # ACPI-only
CONFIG_CIX_THERMAL=y                # SCMI works
CONFIG_CIX_VENDOR_HOOKS=y           # Android
CONFIG_COMMON_CLK_CIX=y             # Incomplete
CONFIG_DEVFREQ_EVENT_CIX_PMU=y      # Redundant
CONFIG_SKY1_REBOOT_REASON=y         # Vendor debug
CONFIG_SND_SOC_SOF_CIX_SKY1=m       # Ported
CONFIG_TIMER_SKY1_GPT=y             # Redundant
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment