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; }