mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
clock: Add more defines and simplify some logic
This commit is contained in:
parent
15afdf53e4
commit
11ca6caf5f
3 changed files with 29 additions and 16 deletions
|
@ -62,24 +62,31 @@ void ccplex_boot_cpu0(u32 entry)
|
||||||
else
|
else
|
||||||
_ccplex_enable_power_t210b01();
|
_ccplex_enable_power_t210b01();
|
||||||
|
|
||||||
if (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & 0x40000000)) // PLLX_ENABLE.
|
// Enable PLLX and set it to 300 MHz.
|
||||||
|
if (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & PLLX_BASE_ENABLE)) // PLLX_ENABLE.
|
||||||
{
|
{
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLX_MISC_3) &= 0xFFFFFFF7; // Disable IDDQ.
|
CLOCK(CLK_RST_CONTROLLER_PLLX_MISC_3) &= 0xFFFFFFF7; // Disable IDDQ.
|
||||||
usleep(2);
|
usleep(2);
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = 0x80404E02;
|
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = 0x404E02;
|
// Bypass dividers.
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = PLLX_BASE_BYPASS | (4 << 20) | (78 << 8) | 2; // P div: 4 (5), N div: 78, M div: 2.
|
||||||
|
// Disable bypass
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = (4 << 20) | (78 << 8) | 2;
|
||||||
|
// Set PLLX_LOCK_ENABLE.
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLX_MISC) = (CLOCK(CLK_RST_CONTROLLER_PLLX_MISC) & 0xFFFBFFFF) | 0x40000;
|
CLOCK(CLK_RST_CONTROLLER_PLLX_MISC) = (CLOCK(CLK_RST_CONTROLLER_PLLX_MISC) & 0xFFFBFFFF) | 0x40000;
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = 0x40404E02;
|
// Enable PLLX.
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = PLLX_BASE_ENABLE | (4 << 20) | (78 << 8) | 2;
|
||||||
}
|
}
|
||||||
while (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & 0x8000000))
|
// Wait for PLL to stabilize.
|
||||||
|
while (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & PLLX_BASE_LOCK))
|
||||||
;
|
;
|
||||||
|
|
||||||
// Configure MSELECT source and enable clock.
|
// Configure MSELECT source and enable clock to 102MHz.
|
||||||
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT) = (CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT) & 0x1FFFFF00) | 6;
|
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT) = (CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT) & 0x1FFFFF00) | 6;
|
||||||
CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_V) = (CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_V) & ~BIT(CLK_V_MSELECT)) | BIT(CLK_V_MSELECT);
|
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_V_SET) = BIT(CLK_V_MSELECT);
|
||||||
|
|
||||||
// Configure initial CPU clock frequency and enable clock.
|
// Configure initial CPU clock frequency and enable clock.
|
||||||
CLOCK(CLK_RST_CONTROLLER_CCLK_BURST_POLICY) = 0x20008888;
|
CLOCK(CLK_RST_CONTROLLER_CCLK_BURST_POLICY) = 0x20008888; // PLLX_OUT0_LJ.
|
||||||
CLOCK(CLK_RST_CONTROLLER_SUPER_CCLK_DIVIDER) = 0x80000000;
|
CLOCK(CLK_RST_CONTROLLER_SUPER_CCLK_DIVIDER) = 0x80000000;
|
||||||
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_V_SET) = BIT(CLK_V_CPUG);
|
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_V_SET) = BIT(CLK_V_CPUG);
|
||||||
|
|
||||||
|
@ -113,7 +120,7 @@ void ccplex_boot_cpu0(u32 entry)
|
||||||
// MC(MC_TZ_SECURITY_CTRL) = 1;
|
// MC(MC_TZ_SECURITY_CTRL) = 1;
|
||||||
|
|
||||||
// Clear MSELECT reset.
|
// Clear MSELECT reset.
|
||||||
CLOCK(CLK_RST_CONTROLLER_RST_DEVICES_V) &= ~BIT(CLK_V_MSELECT);
|
CLOCK(CLK_RST_CONTROLLER_RST_DEV_V_CLR) = BIT(CLK_V_MSELECT);
|
||||||
// Clear NONCPU reset.
|
// Clear NONCPU reset.
|
||||||
CLOCK(CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR) = 0x20000000;
|
CLOCK(CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR) = 0x20000000;
|
||||||
// Clear CPU0 reset.
|
// Clear CPU0 reset.
|
||||||
|
|
|
@ -235,13 +235,13 @@ void clock_disable_sor1()
|
||||||
|
|
||||||
void clock_enable_kfuse()
|
void clock_enable_kfuse()
|
||||||
{
|
{
|
||||||
u32 kfuse_clk_unmask = ~BIT(CLK_H_KFUSE);
|
CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_SET) = BIT(CLK_H_KFUSE);
|
||||||
CLOCK(CLK_RST_CONTROLLER_RST_DEVICES_H) = (CLOCK(CLK_RST_CONTROLLER_RST_DEVICES_H) & kfuse_clk_unmask) | BIT(CLK_H_KFUSE);
|
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_CLR) = BIT(CLK_H_KFUSE);
|
||||||
CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_H) &= kfuse_clk_unmask;
|
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) = BIT(CLK_H_KFUSE);
|
||||||
CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_H) = (CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_H) & kfuse_clk_unmask) | BIT(CLK_H_KFUSE);
|
usleep(10); // Wait 10s to prevent glitching.
|
||||||
usleep(10);
|
|
||||||
CLOCK(CLK_RST_CONTROLLER_RST_DEVICES_H) &= kfuse_clk_unmask;
|
CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_CLR) = BIT(CLK_H_KFUSE);
|
||||||
usleep(20);
|
usleep(20); // Wait 20s fo kfuse hw to init.
|
||||||
}
|
}
|
||||||
|
|
||||||
void clock_disable_kfuse()
|
void clock_disable_kfuse()
|
||||||
|
|
|
@ -163,9 +163,15 @@
|
||||||
#define CLK_NOT_USED 0x0
|
#define CLK_NOT_USED 0x0
|
||||||
|
|
||||||
/*! PLL control and status bits */
|
/*! PLL control and status bits */
|
||||||
|
#define PLLX_BASE_LOCK BIT(27)
|
||||||
|
#define PLLX_BASE_REF_DIS BIT(29)
|
||||||
|
#define PLLX_BASE_ENABLE BIT(30)
|
||||||
|
#define PLLX_BASE_BYPASS BIT(31)
|
||||||
|
|
||||||
#define PLLCX_BASE_LOCK BIT(27)
|
#define PLLCX_BASE_LOCK BIT(27)
|
||||||
#define PLLCX_BASE_REF_DIS BIT(29)
|
#define PLLCX_BASE_REF_DIS BIT(29)
|
||||||
#define PLLCX_BASE_ENABLE BIT(30)
|
#define PLLCX_BASE_ENABLE BIT(30)
|
||||||
|
#define PLLCX_BASE_BYPASS BIT(31)
|
||||||
|
|
||||||
#define PLLA_OUT0_RSTN_CLR BIT(0)
|
#define PLLA_OUT0_RSTN_CLR BIT(0)
|
||||||
#define PLLA_OUT0_CLKEN BIT(1)
|
#define PLLA_OUT0_CLKEN BIT(1)
|
||||||
|
|
Loading…
Reference in a new issue