1use kernel::utilities::registers::ReadOnly;
13use kernel::utilities::registers::ReadWrite;
14use kernel::utilities::registers::WriteOnly;
15use kernel::utilities::registers::{register_bitfields, register_structs};
16pub const SPI_HOST_PARAM_NUM_C_S: u32 = 1;
18pub const SPI_HOST_PARAM_TX_DEPTH: u32 = 72;
20pub const SPI_HOST_PARAM_RX_DEPTH: u32 = 64;
22pub const SPI_HOST_PARAM_CMD_DEPTH: u32 = 4;
24pub const SPI_HOST_PARAM_NUM_ALERTS: u32 = 1;
26pub const SPI_HOST_PARAM_REG_WIDTH: u32 = 32;
28
29register_structs! {
30 pub SpiHostRegisters {
31 (0x0000 => pub(crate) intr_state: ReadWrite<u32, INTR::Register>),
33 (0x0004 => pub(crate) intr_enable: ReadWrite<u32, INTR::Register>),
35 (0x0008 => pub(crate) intr_test: ReadWrite<u32, INTR::Register>),
37 (0x000c => pub(crate) alert_test: ReadWrite<u32, ALERT_TEST::Register>),
39 (0x0010 => pub(crate) control: ReadWrite<u32, CONTROL::Register>),
41 (0x0014 => pub(crate) status: ReadWrite<u32, STATUS::Register>),
43 (0x0018 => pub(crate) configopts: [ReadWrite<u32, CONFIGOPTS::Register>; 1]),
45 (0x001c => pub(crate) csid: ReadWrite<u32, CSID::Register>),
47 (0x0020 => pub(crate) command: ReadWrite<u32, COMMAND::Register>),
49 (0x0024 => pub(crate) rxdata: [ReadOnly<u32>; 1]),
51 (0x0028 => pub(crate) txdata: [WriteOnly<u32>; 1]),
53 (0x002c => pub(crate) error_enable: ReadWrite<u32, ERROR_ENABLE::Register>),
55 (0x0030 => pub(crate) error_status: ReadWrite<u32, ERROR_STATUS::Register>),
57 (0x0034 => pub(crate) event_enable: ReadWrite<u32, EVENT_ENABLE::Register>),
59 (0x0038 => @END),
60 }
61}
62
63register_bitfields![u32,
64 pub(crate) INTR [
66 ERROR OFFSET(0) NUMBITS(1) [],
67 SPI_EVENT OFFSET(1) NUMBITS(1) [],
68 ],
69 pub(crate) ALERT_TEST [
70 FATAL_FAULT OFFSET(0) NUMBITS(1) [],
71 ],
72 pub(crate) CONTROL [
73 RX_WATERMARK OFFSET(0) NUMBITS(8) [],
74 TX_WATERMARK OFFSET(8) NUMBITS(8) [],
75 OUTPUT_EN OFFSET(29) NUMBITS(1) [],
76 SW_RST OFFSET(30) NUMBITS(1) [],
77 SPIEN OFFSET(31) NUMBITS(1) [],
78 ],
79 pub(crate) STATUS [
80 TXQD OFFSET(0) NUMBITS(8) [],
81 RXQD OFFSET(8) NUMBITS(8) [],
82 CMDQD OFFSET(16) NUMBITS(4) [],
83 RXWM OFFSET(20) NUMBITS(1) [],
84 BYTEORDER OFFSET(22) NUMBITS(1) [],
85 RXSTALL OFFSET(23) NUMBITS(1) [],
86 RXEMPTY OFFSET(24) NUMBITS(1) [],
87 RXFULL OFFSET(25) NUMBITS(1) [],
88 TXWM OFFSET(26) NUMBITS(1) [],
89 TXSTALL OFFSET(27) NUMBITS(1) [],
90 TXEMPTY OFFSET(28) NUMBITS(1) [],
91 TXFULL OFFSET(29) NUMBITS(1) [],
92 ACTIVE OFFSET(30) NUMBITS(1) [],
93 READY OFFSET(31) NUMBITS(1) [],
94 ],
95 pub(crate) CONFIGOPTS [
96 CLKDIV_0 OFFSET(0) NUMBITS(16) [],
97 CSNIDLE_0 OFFSET(16) NUMBITS(4) [],
98 CSNTRAIL_0 OFFSET(20) NUMBITS(4) [],
99 CSNLEAD_0 OFFSET(24) NUMBITS(4) [],
100 FULLCYC_0 OFFSET(29) NUMBITS(1) [],
101 CPHA_0 OFFSET(30) NUMBITS(1) [],
102 CPOL_0 OFFSET(31) NUMBITS(1) [],
103 ],
104 pub(crate) CSID [
105 CSID OFFSET(0) NUMBITS(32) [],
106 ],
107 pub(crate) COMMAND [
108 LEN OFFSET(0) NUMBITS(9) [],
109 CSAAT OFFSET(9) NUMBITS(1) [],
110 SPEED OFFSET(10) NUMBITS(2) [],
111 DIRECTION OFFSET(12) NUMBITS(2) [],
112 ],
113 pub(crate) ERROR_ENABLE [
114 CMDBUSY OFFSET(0) NUMBITS(1) [],
115 OVERFLOW OFFSET(1) NUMBITS(1) [],
116 UNDERFLOW OFFSET(2) NUMBITS(1) [],
117 CMDINVAL OFFSET(3) NUMBITS(1) [],
118 CSIDINVAL OFFSET(4) NUMBITS(1) [],
119 ],
120 pub(crate) ERROR_STATUS [
121 CMDBUSY OFFSET(0) NUMBITS(1) [],
122 OVERFLOW OFFSET(1) NUMBITS(1) [],
123 UNDERFLOW OFFSET(2) NUMBITS(1) [],
124 CMDINVAL OFFSET(3) NUMBITS(1) [],
125 CSIDINVAL OFFSET(4) NUMBITS(1) [],
126 ACCESSINVAL OFFSET(5) NUMBITS(1) [],
127 ],
128 pub(crate) EVENT_ENABLE [
129 RXFULL OFFSET(0) NUMBITS(1) [],
130 TXEMPTY OFFSET(1) NUMBITS(1) [],
131 RXWM OFFSET(2) NUMBITS(1) [],
132 TXWM OFFSET(3) NUMBITS(1) [],
133 READY OFFSET(4) NUMBITS(1) [],
134 IDLE OFFSET(5) NUMBITS(1) [],
135 ],
136];
137
138