1use kernel::utilities::registers::ReadWrite;
13use kernel::utilities::registers::{register_bitfields, register_structs};
14pub const PWRMGR_PARAM_NUM_WKUPS: u32 = 6;
16pub const PWRMGR_PARAM_SYSRST_CTRL_AON_WKUP_REQ_IDX: u32 = 0;
18pub const PWRMGR_PARAM_ADC_CTRL_AON_WKUP_REQ_IDX: u32 = 1;
20pub const PWRMGR_PARAM_PINMUX_AON_PIN_WKUP_REQ_IDX: u32 = 2;
22pub const PWRMGR_PARAM_PINMUX_AON_USB_WKUP_REQ_IDX: u32 = 3;
24pub const PWRMGR_PARAM_AON_TIMER_AON_WKUP_REQ_IDX: u32 = 4;
26pub const PWRMGR_PARAM_SENSOR_CTRL_WKUP_REQ_IDX: u32 = 5;
28pub const PWRMGR_PARAM_NUM_RST_REQS: u32 = 2;
30pub const PWRMGR_PARAM_NUM_INT_RST_REQS: u32 = 2;
32pub const PWRMGR_PARAM_NUM_DEBUG_RST_REQS: u32 = 1;
34pub const PWRMGR_PARAM_RESET_MAIN_PWR_IDX: u32 = 2;
36pub const PWRMGR_PARAM_RESET_ESC_IDX: u32 = 3;
38pub const PWRMGR_PARAM_RESET_NDM_IDX: u32 = 4;
40pub const PWRMGR_PARAM_NUM_ALERTS: u32 = 1;
42pub const PWRMGR_PARAM_REG_WIDTH: u32 = 32;
44
45register_structs! {
46    pub PwrmgrRegisters {
47        (0x0000 => pub(crate) intr_state: ReadWrite<u32, INTR::Register>),
49        (0x0004 => pub(crate) intr_enable: ReadWrite<u32, INTR::Register>),
51        (0x0008 => pub(crate) intr_test: ReadWrite<u32, INTR::Register>),
53        (0x000c => pub(crate) alert_test: ReadWrite<u32, ALERT_TEST::Register>),
55        (0x0010 => pub(crate) ctrl_cfg_regwen: ReadWrite<u32, CTRL_CFG_REGWEN::Register>),
57        (0x0014 => pub(crate) control: ReadWrite<u32, CONTROL::Register>),
59        (0x0018 => pub(crate) cfg_cdc_sync: ReadWrite<u32, CFG_CDC_SYNC::Register>),
61        (0x001c => pub(crate) wakeup_en_regwen: ReadWrite<u32, WAKEUP_EN_REGWEN::Register>),
63        (0x0020 => pub(crate) wakeup_en: [ReadWrite<u32, WAKEUP_EN::Register>; 1]),
65        (0x0024 => pub(crate) wake_status: [ReadWrite<u32, WAKE_STATUS::Register>; 1]),
67        (0x0028 => pub(crate) reset_en_regwen: ReadWrite<u32, RESET_EN_REGWEN::Register>),
69        (0x002c => pub(crate) reset_en: [ReadWrite<u32, RESET_EN::Register>; 1]),
71        (0x0030 => pub(crate) reset_status: [ReadWrite<u32, RESET_STATUS::Register>; 1]),
73        (0x0034 => pub(crate) escalate_reset_status: ReadWrite<u32, ESCALATE_RESET_STATUS::Register>),
75        (0x0038 => pub(crate) wake_info_capture_dis: ReadWrite<u32, WAKE_INFO_CAPTURE_DIS::Register>),
77        (0x003c => pub(crate) wake_info: ReadWrite<u32, WAKE_INFO::Register>),
79        (0x0040 => pub(crate) fault_status: ReadWrite<u32, FAULT_STATUS::Register>),
81        (0x0044 => @END),
82    }
83}
84
85register_bitfields![u32,
86    pub(crate) INTR [
88        WAKEUP OFFSET(0) NUMBITS(1) [],
89    ],
90    pub(crate) ALERT_TEST [
91        FATAL_FAULT OFFSET(0) NUMBITS(1) [],
92    ],
93    pub(crate) CTRL_CFG_REGWEN [
94        EN OFFSET(0) NUMBITS(1) [],
95    ],
96    pub(crate) CONTROL [
97        LOW_POWER_HINT OFFSET(0) NUMBITS(1) [
98            NONE = 0,
99            LOW_POWER = 1,
100        ],
101        CORE_CLK_EN OFFSET(4) NUMBITS(1) [
102            DISABLED = 0,
103            ENABLED = 1,
104        ],
105        IO_CLK_EN OFFSET(5) NUMBITS(1) [
106            DISABLED = 0,
107            ENABLED = 1,
108        ],
109        USB_CLK_EN_LP OFFSET(6) NUMBITS(1) [
110            DISABLED = 0,
111            ENABLED = 1,
112        ],
113        USB_CLK_EN_ACTIVE OFFSET(7) NUMBITS(1) [
114            DISABLED = 0,
115            ENABLED = 1,
116        ],
117        MAIN_PD_N OFFSET(8) NUMBITS(1) [
118            POWER_DOWN = 0,
119            POWER_UP = 1,
120        ],
121    ],
122    pub(crate) CFG_CDC_SYNC [
123        SYNC OFFSET(0) NUMBITS(1) [],
124    ],
125    pub(crate) WAKEUP_EN_REGWEN [
126        EN OFFSET(0) NUMBITS(1) [],
127    ],
128    pub(crate) WAKEUP_EN [
129        EN_0 OFFSET(0) NUMBITS(1) [],
130        EN_1 OFFSET(1) NUMBITS(1) [],
131        EN_2 OFFSET(2) NUMBITS(1) [],
132        EN_3 OFFSET(3) NUMBITS(1) [],
133        EN_4 OFFSET(4) NUMBITS(1) [],
134        EN_5 OFFSET(5) NUMBITS(1) [],
135    ],
136    pub(crate) WAKE_STATUS [
137        VAL_0 OFFSET(0) NUMBITS(1) [],
138        VAL_1 OFFSET(1) NUMBITS(1) [],
139        VAL_2 OFFSET(2) NUMBITS(1) [],
140        VAL_3 OFFSET(3) NUMBITS(1) [],
141        VAL_4 OFFSET(4) NUMBITS(1) [],
142        VAL_5 OFFSET(5) NUMBITS(1) [],
143    ],
144    pub(crate) RESET_EN_REGWEN [
145        EN OFFSET(0) NUMBITS(1) [],
146    ],
147    pub(crate) RESET_EN [
148        EN_0 OFFSET(0) NUMBITS(1) [],
149        EN_1 OFFSET(1) NUMBITS(1) [],
150    ],
151    pub(crate) RESET_STATUS [
152        VAL_0 OFFSET(0) NUMBITS(1) [],
153        VAL_1 OFFSET(1) NUMBITS(1) [],
154    ],
155    pub(crate) ESCALATE_RESET_STATUS [
156        VAL OFFSET(0) NUMBITS(1) [],
157    ],
158    pub(crate) WAKE_INFO_CAPTURE_DIS [
159        VAL OFFSET(0) NUMBITS(1) [],
160    ],
161    pub(crate) WAKE_INFO [
162        REASONS OFFSET(0) NUMBITS(6) [],
163        FALL_THROUGH OFFSET(6) NUMBITS(1) [],
164        ABORT OFFSET(7) NUMBITS(1) [],
165    ],
166    pub(crate) FAULT_STATUS [
167        REG_INTG_ERR OFFSET(0) NUMBITS(1) [],
168        ESC_TIMEOUT OFFSET(1) NUMBITS(1) [],
169        MAIN_PD_GLITCH OFFSET(2) NUMBITS(1) [],
170    ],
171];
172
173