mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-26 03:32:17 +00:00
clock: move pllx enable to clock object
This commit is contained in:
parent
d368b93fdd
commit
8f9d52aa89
3 changed files with 30 additions and 18 deletions
|
@ -58,24 +58,7 @@ void ccplex_boot_cpu0(u32 entry)
|
||||||
else
|
else
|
||||||
_ccplex_enable_power_t210b01();
|
_ccplex_enable_power_t210b01();
|
||||||
|
|
||||||
// Enable PLLX and set it to 300 MHz.
|
clock_enable_pllx();
|
||||||
if (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & PLLX_BASE_ENABLE)) // PLLX_ENABLE.
|
|
||||||
{
|
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLX_MISC_3) &= 0xFFFFFFF7; // Disable IDDQ.
|
|
||||||
usleep(2);
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
// Enable PLLX.
|
|
||||||
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = PLLX_BASE_ENABLE | (4 << 20) | (78 << 8) | 2;
|
|
||||||
}
|
|
||||||
// Wait for PLL to stabilize.
|
|
||||||
while (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & PLLX_BASE_LOCK))
|
|
||||||
;
|
|
||||||
|
|
||||||
// Configure MSELECT source and enable clock to 102MHz.
|
// 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;
|
||||||
|
|
|
@ -279,6 +279,32 @@ void clock_disable_pwm()
|
||||||
clock_disable(&_clock_pwm);
|
clock_disable(&_clock_pwm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clock_enable_pllx()
|
||||||
|
{
|
||||||
|
// Configure and enable PLLX if disabled.
|
||||||
|
if (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & PLLX_BASE_ENABLE)) // PLLX_ENABLE.
|
||||||
|
{
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_MISC_3) &= ~PLLX_MISC3_IDDQ; // Disable IDDQ.
|
||||||
|
usleep(2);
|
||||||
|
|
||||||
|
// Set div configuration.
|
||||||
|
const u32 pllx_div_cfg = (2 << 20) | (156 << 8) | 2; // P div: 2 (3), N div: 156, M div: 2. 998.4 MHz.
|
||||||
|
|
||||||
|
// Bypass dividers.
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = PLLX_BASE_BYPASS | pllx_div_cfg;
|
||||||
|
// Disable bypass
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = pllx_div_cfg;
|
||||||
|
// Set PLLX_LOCK_ENABLE.
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_MISC) |= PLLX_MISC_LOCK_EN;
|
||||||
|
// Enable PLLX.
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) = PLLX_BASE_ENABLE | pllx_div_cfg;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for PLL to stabilize.
|
||||||
|
while (!(CLOCK(CLK_RST_CONTROLLER_PLLX_BASE) & PLLX_BASE_LOCK))
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
void clock_enable_pllc(u32 divn)
|
void clock_enable_pllc(u32 divn)
|
||||||
{
|
{
|
||||||
u8 pll_divn_curr = (CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) >> 10) & 0xFF;
|
u8 pll_divn_curr = (CLOCK(CLK_RST_CONTROLLER_PLLC_BASE) >> 10) & 0xFF;
|
||||||
|
|
|
@ -167,6 +167,8 @@
|
||||||
#define PLLX_BASE_REF_DIS BIT(29)
|
#define PLLX_BASE_REF_DIS BIT(29)
|
||||||
#define PLLX_BASE_ENABLE BIT(30)
|
#define PLLX_BASE_ENABLE BIT(30)
|
||||||
#define PLLX_BASE_BYPASS BIT(31)
|
#define PLLX_BASE_BYPASS BIT(31)
|
||||||
|
#define PLLX_MISC_LOCK_EN BIT(18)
|
||||||
|
#define PLLX_MISC3_IDDQ BIT(3)
|
||||||
|
|
||||||
#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)
|
||||||
|
@ -628,6 +630,7 @@ void clock_enable_coresight();
|
||||||
void clock_disable_coresight();
|
void clock_disable_coresight();
|
||||||
void clock_enable_pwm();
|
void clock_enable_pwm();
|
||||||
void clock_disable_pwm();
|
void clock_disable_pwm();
|
||||||
|
void clock_enable_pllx();
|
||||||
void clock_enable_pllc(u32 divn);
|
void clock_enable_pllc(u32 divn);
|
||||||
void clock_disable_pllc();
|
void clock_disable_pllc();
|
||||||
void clock_enable_pllu();
|
void clock_enable_pllu();
|
||||||
|
|
Loading…
Reference in a new issue