rockchip_pm/variants/
mod.rs

1use alloc::collections::btree_map::BTreeMap;
2
3use crate::RkBoard;
4
5#[macro_use]
6mod _macros;
7
8mod rk3588;
9
10pub type DomainMap = BTreeMap<PowerDomain, RockchipDomainInfo>;
11
12#[repr(transparent)]
13#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
14pub struct PowerDomain(pub usize);
15
16impl From<u32> for PowerDomain {
17    fn from(value: u32) -> Self {
18        PowerDomain(value as usize)
19    }
20}
21
22#[allow(dead_code)]
23#[derive(Clone, Debug, Default)]
24pub struct RockchipPmuInfo {
25    pub pwr_offset: u32,
26    pub status_offset: u32,
27    pub req_offset: u32,
28    pub idle_offset: u32,
29    pub ack_offset: u32,
30    pub mem_pwr_offset: u32,
31    pub chain_status_offset: u32,
32    pub mem_status_offset: u32,
33    pub repair_status_offset: u32,
34    pub clk_ungate_offset: u32,
35    pub mem_sd_offset: u32,
36    pub core_pwrcnt_offset: u32,
37    pub gpu_pwrcnt_offset: u32,
38    pub core_power_transition_time: u32,
39    pub gpu_power_transition_time: u32,
40
41    pub domains: DomainMap,
42}
43
44impl RockchipPmuInfo {
45    pub fn new(board: RkBoard) -> Self {
46        match board {
47            RkBoard::Rk3588 => rk3588::pmu_info(),
48            RkBoard::Rk3568 => unimplemented!(),
49        }
50    }
51}
52
53#[allow(dead_code)]
54#[derive(Debug, Clone, Default)]
55pub struct RockchipDomainInfo {
56    pub name: &'static str,
57    pub pwr_mask: i32,
58    pub status_mask: i32,
59    pub req_mask: i32,
60    pub idle_mask: i32,
61    pub ack_mask: i32,
62    pub active_wakeup: bool,
63    pub pwr_w_mask: i32,
64    pub req_w_mask: i32,
65    pub mem_status_mask: i32,
66    pub repair_status_mask: i32,
67    pub clk_ungate_mask: i32,
68    pub clk_ungate_w_mask: i32,
69    pub mem_num: i32,
70    pub keepon_startup: bool,
71    pub always_on: bool,
72    pub pwr_offset: u32,
73    pub mem_offset: u32,
74    pub req_offset: u32,
75}