mirror of
https://github.com/CTCaer/hekate
synced 2024-11-16 08:59:26 +00:00
bdk: bpmp: add state set function
Some states are controlled via software. So add a function for that.
This commit is contained in:
parent
1a98e3a702
commit
edf00d8e51
2 changed files with 19 additions and 0 deletions
|
@ -237,6 +237,7 @@ void bpmp_clk_rate_relaxed(bool enable)
|
||||||
// APB clock affects RTC, PWM, MEMFETCH, APE, USB, SOR PWM,
|
// APB clock affects RTC, PWM, MEMFETCH, APE, USB, SOR PWM,
|
||||||
// I2C host, DC/DSI/DISP. UART gives extra stress.
|
// I2C host, DC/DSI/DISP. UART gives extra stress.
|
||||||
// 92: 100% success ratio. 93-94: 595-602MHz has 99% success ratio. 95: 608MHz less.
|
// 92: 100% success ratio. 93-94: 595-602MHz has 99% success ratio. 95: 608MHz less.
|
||||||
|
// APB clock max is supposed to be 204 MHz though.
|
||||||
static const u8 pll_divn[] = {
|
static const u8 pll_divn[] = {
|
||||||
0, // BPMP_CLK_NORMAL: 408MHz 0% - 136MHz APB.
|
0, // BPMP_CLK_NORMAL: 408MHz 0% - 136MHz APB.
|
||||||
85, // BPMP_CLK_HIGH_BOOST: 544MHz 33% - 136MHz APB.
|
85, // BPMP_CLK_HIGH_BOOST: 544MHz 33% - 136MHz APB.
|
||||||
|
@ -300,6 +301,13 @@ void bpmp_clk_rate_set(bpmp_freq_t fid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// State is reset to RUN on any clock or source set via SW.
|
||||||
|
void bpmp_state_set(bpmp_state_t state)
|
||||||
|
{
|
||||||
|
u32 cfg = CLOCK(CLK_RST_CONTROLLER_SCLK_BURST_POLICY) & ~0xF0000000u;
|
||||||
|
CLOCK(CLK_RST_CONTROLLER_SCLK_BURST_POLICY) = cfg | (state << 28u);
|
||||||
|
}
|
||||||
|
|
||||||
// The following functions halt BPMP to reduce power while sleeping.
|
// The following functions halt BPMP to reduce power while sleeping.
|
||||||
// They are not as accurate as RTC at big values but they guarantee time+ delay.
|
// They are not as accurate as RTC at big values but they guarantee time+ delay.
|
||||||
void bpmp_usleep(u32 us)
|
void bpmp_usleep(u32 us)
|
||||||
|
|
|
@ -54,6 +54,16 @@ typedef enum
|
||||||
BPMP_CLK_MAX
|
BPMP_CLK_MAX
|
||||||
} bpmp_freq_t;
|
} bpmp_freq_t;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
BPMP_STATE_STANDBY = 0, // 32KHz.
|
||||||
|
BPMP_STATE_IDLE = 1,
|
||||||
|
BPMP_STATE_RUN = 2,
|
||||||
|
|
||||||
|
BPMP_STATE_IRQ = BIT(2),
|
||||||
|
BPMP_STATE_FIQ = BIT(3),
|
||||||
|
} bpmp_state_t;
|
||||||
|
|
||||||
#define BPMP_CLK_LOWEST_BOOST BPMP_CLK_HIGH2_BOOST
|
#define BPMP_CLK_LOWEST_BOOST BPMP_CLK_HIGH2_BOOST
|
||||||
#define BPMP_CLK_LOWER_BOOST BPMP_CLK_SUPER_BOOST
|
#define BPMP_CLK_LOWER_BOOST BPMP_CLK_SUPER_BOOST
|
||||||
#define BPMP_CLK_DEFAULT_BOOST BPMP_CLK_HYPER_BOOST
|
#define BPMP_CLK_DEFAULT_BOOST BPMP_CLK_HYPER_BOOST
|
||||||
|
@ -65,6 +75,7 @@ void bpmp_mmu_disable();
|
||||||
void bpmp_clk_rate_relaxed(bool enable);
|
void bpmp_clk_rate_relaxed(bool enable);
|
||||||
void bpmp_clk_rate_get();
|
void bpmp_clk_rate_get();
|
||||||
void bpmp_clk_rate_set(bpmp_freq_t fid);
|
void bpmp_clk_rate_set(bpmp_freq_t fid);
|
||||||
|
void bpmp_state_set(bpmp_state_t state);
|
||||||
void bpmp_usleep(u32 us);
|
void bpmp_usleep(u32 us);
|
||||||
void bpmp_msleep(u32 ms);
|
void bpmp_msleep(u32 ms);
|
||||||
void bpmp_halt();
|
void bpmp_halt();
|
||||||
|
|
Loading…
Reference in a new issue