Research: GCC/TLMM Clock Enable on SDM636 from UEFI ABL

Research: GCC/TLMM Clock Enable on SDM636 from UEFI ABL

Date: 2026-03-28 · Status: Research complete; device verification still needed.

Context: ABL v2.1 hung when trying to read TLMM GPIO 105 (hall sensor) at flat address 0x03069004. This research determined why and confirmed the working address.


Executive Summary

There is no dedicated GCC_TLMM_AHB_CLK on SDM660/SDM636. The TLMM block sits on the CNOC (Config NOC) bus. However, the ABL hang was NOT a clock issue — it was an XPU (eXtended Protection Unit) access control block. The flat TLMM address range (0x03000000) is XPU-protected from ABL. The south tile address (0x03100000) is accessible.


Key Hardware Addresses

ComponentPhysical BaseNotes
GCC (CLK_CTL_BASE)0x00100000768 KB, clock controller
TLMM (flat — XPU-blocked)0x0300000012 MB, blocked from ABL
TLMM south tile (works)0x03100000mainline kernel mapping for GPIO 105
Hall sensor GPIO_IN_OUT0x03169004South tile base + 105×0x1000 + 0x04

Bus Topology

CPU → SNOC (System NOC) → CNOC (Config NOC) → TLMM north/south/center
                                             → BLSP, SDCC, USB, etc.

TLMM is a slave on CNOC. GPIO 105 is in the south tile. No clock gating needed — CNOC clocks are active at ABL time. The XPU block at the flat address is a TrustZone policy decision, not a clock issue.


XBL Clock Init (for reference)

XBL’s Clock_DebugInit() enables: GCC_SNOC_CNOC_AHB_CBCR, GCC_CNOC_PERIPH_NORTH_AHB_CBCR, GCC_CNOC_PERIPH_SOUTH_AHB_CBCR. These remain active into ABL. No additional clock enables are needed for TLMM access — only the correct address range matters.

Conclusion

  • Do NOT use raw address 0x03069004 — XPU-blocked → indefinite bus stall
  • Use 0x03169004 (south tile) with GCD memory mapping before MmioRead32
  • No clock enable needed — CNOC is already running at ABL time
  • This is confirmed working in ABL v2.2+ (hall sensor reads GPIO 105 correctly)

More posts