From 1d3d1c8454f5053ec5f0865c6c31f4bbed5c998a Mon Sep 17 00:00:00 2001 From: CTCaer Date: Sun, 14 Jun 2020 13:19:53 +0300 Subject: [PATCH] clock: Prevent PLLC4 from glitching --- bootloader/soc/clock.c | 5 ++++- nyx/nyx_gui/soc/clock.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bootloader/soc/clock.c b/bootloader/soc/clock.c index 5d49b33..e19c993 100644 --- a/bootloader/soc/clock.c +++ b/bootloader/soc/clock.c @@ -349,12 +349,15 @@ static void _clock_disable_pllc4(u32 mask) { pllc4_enabled &= ~mask; - if (pllc4_enabled & PLLC4_IN_USE) + // Check if currently in use or disabled. + if ((pllc4_enabled & PLLC4_IN_USE) || !(pllc4_enabled & PLLC4_ENABLED)) return; // Disable PLLC4. + msleep(1); // Wait at least 1ms to prevent glitching. CLOCK(CLK_RST_CONTROLLER_PLLC4_BASE) &= ~PLLCX_BASE_ENABLE; CLOCK(CLK_RST_CONTROLLER_PLLC4_BASE) |= PLLC4_BASE_IDDQ; + usleep(10); pllc4_enabled = 0; } diff --git a/nyx/nyx_gui/soc/clock.c b/nyx/nyx_gui/soc/clock.c index 5d49b33..e19c993 100644 --- a/nyx/nyx_gui/soc/clock.c +++ b/nyx/nyx_gui/soc/clock.c @@ -349,12 +349,15 @@ static void _clock_disable_pllc4(u32 mask) { pllc4_enabled &= ~mask; - if (pllc4_enabled & PLLC4_IN_USE) + // Check if currently in use or disabled. + if ((pllc4_enabled & PLLC4_IN_USE) || !(pllc4_enabled & PLLC4_ENABLED)) return; // Disable PLLC4. + msleep(1); // Wait at least 1ms to prevent glitching. CLOCK(CLK_RST_CONTROLLER_PLLC4_BASE) &= ~PLLCX_BASE_ENABLE; CLOCK(CLK_RST_CONTROLLER_PLLC4_BASE) |= PLLC4_BASE_IDDQ; + usleep(10); pllc4_enabled = 0; }