Skip to content

gs201 CMU bring-up incomplete: most clock domains still fixed-clock stubs #6

@ccrutchf

Description

@ccrutchf

State

Only PERIC0 has been (partially) wired to real CCF clocks on gs201 — enough for serial-getty@ttySAC0 to work over UART. Everything else stays as compatible = \"fixed-clock\" stubs with hardcoded rates.

Stubbed domains (from arch/arm64/boot/dts/exynos/google/gs201.dtsi after the bring-up commits):

  • CMU_TOP, CMU_MIF
  • CMU_HSI0 (USB power-island)
  • CMU_HSI2 (UFS)
  • CMU_DPU (display)
  • CMU_AUD
  • everything else

Patches that landed so far

  • 0013 clk-samsung-gs101: add gs201 Tensor G2 CMU_TOP/CMU_MIF (scaffolding, not full)
  • 0014 clk-samsung-gs101: add gs201 CMU_PERIC0 + USI0_UART chains
  • 0015 tty/serial/samsung: add google,gs201-uart compat (UPIO_MEM32)

Working in tree but not yet upstream — see #3.

What we learned along the way

HSI2 CMU clk hypothesis is RULED OUT for the UFS HS-Rate-B wedge (#1). Direct ioremap probes (gated on GS201_PROBE_CMU_DIVIDERS) confirmed: HSI2 dividers/muxes/gates are byte-identical at post_link, pre_pwr_change, post_pwr_change in both PWM-G4 and HS-Rate-B G4 attempts. The bootloader programs them, neither AOSP nor mainline rewrites at PMC, and the fixed-clock stub rates accidentally match reality:

  • ufs_aclk stub claims 267 MHz; hardware NOC divider /2 of SHARED0_DIV4 = 266.5 MHz ✓
  • ufs_unipro claims 177.664 MHz; UFS_EMBD divider /3 of SHARED0_DIV4 = 177.664 MHz ✓

So removing the stubs won't fix UFS HS. But the stubs are still wrong.

gs201 BL31 firewalls CMU access — kernel cmdline must include kvm-arm.mode=protected to unlock CMU readl. Without it, EL1 reads abort with synchronous external abort code 0x96000010. Documented at junkyard-boot-img/Makefile .build_boot.

Why finishing the CMU port matters

  • devfreq scaling can't reason about anything without real CCF
  • suspend / resume of the clock tree only works correctly with real parent/divider relationships
  • New driver bring-up (DPU, GPU frequency, AOC) needs the relevant CMU domain wired before its driver can probe
  • The gs201 PERIC0 quirks (DIV at 0x1808 not 0x1804, GATE at 0x20c0 not 0x20bc, no DBG mirror at base+0x4000 → auto_clock_gate=true triggers SError) are the kind of thing that's easier to clean up while finishing other domains

Order of operations

Roughly: CMU_DPU is a prerequisite for #5 display bring-up; CMU_HSI0 is a prerequisite for any USB-host or USB-gadget work; CMU_HSI2 is a prerequisite for real UFS perf tuning even after HS-Rate-B (#1) is solved. CMU_AUD is on the AOC (#4) critical path.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions