So I tried that, and things are now back to ~110 seconds before a glitch. This is the code in case anyone's curious: base_bits = fls(24000); clock_bits = fls(clock); shift = min(32 - base_bits, 32 - clock_bits); WREG32(DCCG_AUDIO_DTO0_PHASE, 24000 << shift); WREG32(DCCG_AUDIO_DTO0_MODULE, clock << shift); So that didn't help...