]> Git Repo - J-u-boot.git/blob - include/turris-omnia-mcu-interface.h
Merge patch series "configs: ti: Enable basic settings for SystemReady ACS"
[J-u-boot.git] / include / turris-omnia-mcu-interface.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * CZ.NIC's Turris Omnia MCU I2C interface commands definitions
4  *
5  * 2023 by Marek BehĂșn <[email protected]>
6  */
7
8 #ifndef __TURRIS_OMNIA_MCU_INTERFACE_H
9 #define __TURRIS_OMNIA_MCU_INTERFACE_H
10
11 #include <linux/bitops.h>
12
13 enum omnia_commands_e {
14         CMD_GET_STATUS_WORD             = 0x01, /* slave sends status word back */
15         CMD_GENERAL_CONTROL             = 0x02,
16         CMD_LED_MODE                    = 0x03, /* default/user */
17         CMD_LED_STATE                   = 0x04, /* LED on/off */
18         CMD_LED_COLOR                   = 0x05, /* LED number + RED + GREEN + BLUE */
19         CMD_USER_VOLTAGE                = 0x06,
20         CMD_SET_BRIGHTNESS              = 0x07,
21         CMD_GET_BRIGHTNESS              = 0x08,
22         CMD_GET_RESET                   = 0x09,
23         CMD_GET_FW_VERSION_APP          = 0x0A, /* 20B git hash number */
24         CMD_SET_WATCHDOG_STATE          = 0x0B, /* 0 - disable
25                                                  * 1 - enable / ping
26                                                  * after boot watchdog is started
27                                                  * with 2 minutes timeout
28                                                  */
29
30         /* CMD_WATCHDOG_STATUS          = 0x0C, not implemented anymore */
31
32         CMD_GET_WATCHDOG_STATE          = 0x0D,
33         CMD_GET_FW_VERSION_BOOT         = 0x0E, /* 20B git hash number */
34         CMD_GET_FW_CHECKSUM             = 0x0F, /* 4B length, 4B checksum */
35
36         /* available if FEATURES_SUPPORTED bit set in status word */
37         CMD_GET_FEATURES                = 0x10,
38
39         /* available if EXT_CMD bit set in features */
40         CMD_GET_EXT_STATUS_DWORD        = 0x11,
41         CMD_EXT_CONTROL                 = 0x12,
42         CMD_GET_EXT_CONTROL_STATUS      = 0x13,
43
44         /* available if NEW_INT_API bit set in features */
45         CMD_GET_INT_AND_CLEAR           = 0x14,
46         CMD_GET_INT_MASK                = 0x15,
47         CMD_SET_INT_MASK                = 0x16,
48
49         /* available if FLASHING bit set in features */
50         CMD_FLASH                       = 0x19,
51
52         /* available if WDT_PING bit set in features */
53         CMD_SET_WDT_TIMEOUT             = 0x20,
54         CMD_GET_WDT_TIMELEFT            = 0x21,
55
56         /* available if POWEROFF_WAKEUP bit set in features */
57         CMD_SET_WAKEUP                  = 0x22,
58         CMD_GET_UPTIME_AND_WAKEUP       = 0x23,
59         CMD_POWER_OFF                   = 0x24,
60
61         /* available if USB_OVC_PROT_SETTING bit set in features */
62         CMD_SET_USB_OVC_PROT            = 0x25,
63         CMD_GET_USB_OVC_PROT            = 0x26,
64
65         /* available if TRNG bit set in features */
66         CMD_TRNG_COLLECT_ENTROPY        = 0x28,
67
68         /* available if CRYPTO bit set in features */
69         CMD_CRYPTO_GET_PUBLIC_KEY       = 0x29,
70         CMD_CRYPTO_SIGN_MESSAGE         = 0x2A,
71         CMD_CRYPTO_COLLECT_SIGNATURE    = 0x2B,
72
73         /* available if BOARD_INFO it set in features */
74         CMD_BOARD_INFO_GET              = 0x2C,
75         CMD_BOARD_INFO_BURN             = 0x2D,
76
77         /* available only at address 0x2b (led-controller) */
78         /* available only if LED_GAMMA_CORRECTION bit set in features */
79         CMD_SET_GAMMA_CORRECTION        = 0x30,
80         CMD_GET_GAMMA_CORRECTION        = 0x31,
81
82         /* available only at address 0x2b (led-controller) */
83         /* available only if PER_LED_CORRECTION bit set in features */
84         /* available only if FROM_BIT_16_INVALID bit NOT set in features */
85         CMD_SET_LED_CORRECTIONS         = 0x32,
86         CMD_GET_LED_CORRECTIONS         = 0x33,
87 };
88
89 enum omnia_flashing_commands_e {
90         FLASH_CMD_UNLOCK                = 0x01,
91         FLASH_CMD_SIZE_AND_CSUM         = 0x02,
92         FLASH_CMD_PROGRAM               = 0x03,
93         FLASH_CMD_RESET                 = 0x04,
94 };
95
96 enum omnia_sts_word_e {
97         STS_MCU_TYPE_MASK                       = GENMASK(1, 0),
98         STS_MCU_TYPE_STM32                      = 0 << 0,
99         STS_MCU_TYPE_GD32                       = 1 << 0,
100         STS_MCU_TYPE_MKL                        = 2 << 0,
101         STS_FEATURES_SUPPORTED                  = BIT(2),
102         STS_USER_REGULATOR_NOT_SUPPORTED        = BIT(3),
103         STS_CARD_DET                            = BIT(4),
104         STS_MSATA_IND                           = BIT(5),
105         STS_USB30_OVC                           = BIT(6),
106         STS_USB31_OVC                           = BIT(7),
107         STS_USB30_PWRON                         = BIT(8),
108         STS_USB31_PWRON                         = BIT(9),
109         STS_ENABLE_4V5                          = BIT(10),
110         STS_BUTTON_MODE                         = BIT(11),
111         STS_BUTTON_PRESSED                      = BIT(12),
112         STS_BUTTON_COUNTER_MASK                 = GENMASK(15, 13)
113 };
114
115 enum omnia_ctl_byte_e {
116         CTL_LIGHT_RST           = BIT(0),
117         CTL_HARD_RST            = BIT(1),
118         /* BIT(2) is currently reserved */
119         CTL_USB30_PWRON         = BIT(3),
120         CTL_USB31_PWRON         = BIT(4),
121         CTL_ENABLE_4V5          = BIT(5),
122         CTL_BUTTON_MODE         = BIT(6),
123         CTL_BOOTLOADER          = BIT(7)
124 };
125
126 enum omnia_features_e {
127         FEAT_PERIPH_MCU                 = BIT(0),
128         FEAT_EXT_CMDS                   = BIT(1),
129         FEAT_WDT_PING                   = BIT(2),
130         FEAT_LED_STATE_EXT_MASK         = GENMASK(4, 3),
131         FEAT_LED_STATE_EXT              = 1 << 3,
132         FEAT_LED_STATE_EXT_V32          = 2 << 3,
133         FEAT_LED_GAMMA_CORRECTION       = BIT(5),
134         FEAT_NEW_INT_API                = BIT(6),
135         FEAT_BOOTLOADER                 = BIT(7),
136         FEAT_FLASHING                   = BIT(8),
137         FEAT_NEW_MESSAGE_API            = BIT(9),
138         FEAT_BRIGHTNESS_INT             = BIT(10),
139         FEAT_POWEROFF_WAKEUP            = BIT(11),
140         FEAT_CAN_OLD_MESSAGE_API        = BIT(12),
141         FEAT_TRNG                       = BIT(13),
142         FEAT_CRYPTO                     = BIT(14),
143         FEAT_BOARD_INFO                 = BIT(15),
144
145         /*
146          * Orginally the features command replied only 16 bits. If more were
147          * read, either the I2C transaction failed or 0xff bytes were sent.
148          * Therefore to consider bits 16 - 31 valid, one bit (20) was reserved
149          * to be zero.
150          */
151
152         /* Bits 16 - 19 correspond to bits 0 - 3 of status word */
153         FEAT_MCU_TYPE_MASK              = GENMASK(17, 16),
154         FEAT_MCU_TYPE_STM32             = 0 << 16,
155         FEAT_MCU_TYPE_GD32              = 1 << 16,
156         FEAT_MCU_TYPE_MKL               = 2 << 16,
157         FEAT_FEATURES_SUPPORTED         = BIT(18),
158         FEAT_USER_REGULATOR_NOT_SUPPORTED = BIT(19),
159
160         /* must not be set */
161         FEAT_FROM_BIT_16_INVALID        = BIT(20),
162
163         FEAT_PER_LED_CORRECTION         = BIT(21),
164         FEAT_USB_OVC_PROT_SETTING       = BIT(22),
165 };
166
167 enum omnia_ext_sts_dword_e {
168         EXT_STS_SFP_nDET                = BIT(0),
169         EXT_STS_LED_STATES_MASK         = GENMASK(31, 12),
170         EXT_STS_WLAN0_MSATA_LED         = BIT(12),
171         EXT_STS_WLAN1_LED               = BIT(13),
172         EXT_STS_WLAN2_LED               = BIT(14),
173         EXT_STS_WPAN0_LED               = BIT(15),
174         EXT_STS_WPAN1_LED               = BIT(16),
175         EXT_STS_WPAN2_LED               = BIT(17),
176         EXT_STS_WAN_LED0                = BIT(18),
177         EXT_STS_WAN_LED1                = BIT(19),
178         EXT_STS_LAN0_LED0               = BIT(20),
179         EXT_STS_LAN0_LED1               = BIT(21),
180         EXT_STS_LAN1_LED0               = BIT(22),
181         EXT_STS_LAN1_LED1               = BIT(23),
182         EXT_STS_LAN2_LED0               = BIT(24),
183         EXT_STS_LAN2_LED1               = BIT(25),
184         EXT_STS_LAN3_LED0               = BIT(26),
185         EXT_STS_LAN3_LED1               = BIT(27),
186         EXT_STS_LAN4_LED0               = BIT(28),
187         EXT_STS_LAN4_LED1               = BIT(29),
188         EXT_STS_LAN5_LED0               = BIT(30),
189         EXT_STS_LAN5_LED1               = BIT(31),
190 };
191
192 enum omnia_ext_ctl_e {
193         EXT_CTL_nRES_MMC                = BIT(0),
194         EXT_CTL_nRES_LAN                = BIT(1),
195         EXT_CTL_nRES_PHY                = BIT(2),
196         EXT_CTL_nPERST0                 = BIT(3),
197         EXT_CTL_nPERST1                 = BIT(4),
198         EXT_CTL_nPERST2                 = BIT(5),
199         EXT_CTL_PHY_SFP                 = BIT(6),
200         EXT_CTL_PHY_SFP_AUTO            = BIT(7),
201         EXT_CTL_nVHV_CTRL               = BIT(8),
202 };
203
204 enum omnia_int_e {
205         INT_CARD_DET            = BIT(0),
206         INT_MSATA_IND           = BIT(1),
207         INT_USB30_OVC           = BIT(2),
208         INT_USB31_OVC           = BIT(3),
209         INT_BUTTON_PRESSED      = BIT(4),
210         INT_SFP_nDET            = BIT(5),
211         INT_BRIGHTNESS_CHANGED  = BIT(6),
212         INT_TRNG                = BIT(7),
213         INT_MESSAGE_SIGNED      = BIT(8),
214
215         INT_LED_STATES_MASK     = GENMASK(31, 12),
216         INT_WLAN0_MSATA_LED     = BIT(12),
217         INT_WLAN1_LED           = BIT(13),
218         INT_WLAN2_LED           = BIT(14),
219         INT_WPAN0_LED           = BIT(15),
220         INT_WPAN1_LED           = BIT(16),
221         INT_WPAN2_LED           = BIT(17),
222         INT_WAN_LED0            = BIT(18),
223         INT_WAN_LED1            = BIT(19),
224         INT_LAN0_LED0           = BIT(20),
225         INT_LAN0_LED1           = BIT(21),
226         INT_LAN1_LED0           = BIT(22),
227         INT_LAN1_LED1           = BIT(23),
228         INT_LAN2_LED0           = BIT(24),
229         INT_LAN2_LED1           = BIT(25),
230         INT_LAN3_LED0           = BIT(26),
231         INT_LAN3_LED1           = BIT(27),
232         INT_LAN4_LED0           = BIT(28),
233         INT_LAN4_LED1           = BIT(29),
234         INT_LAN5_LED0           = BIT(30),
235         INT_LAN5_LED1           = BIT(31),
236 };
237
238 enum omnia_cmd_poweroff_e {
239         CMD_POWER_OFF_POWERON_BUTTON    = BIT(0),
240         CMD_POWER_OFF_MAGIC             = 0xdead,
241 };
242
243 enum cmd_usb_ovc_prot_e {
244         CMD_xET_USB_OVC_PROT_PORT_MASK  = GENMASK(3, 0),
245         CMD_xET_USB_OVC_PROT_ENABLE     = BIT(4),
246 };
247
248 #endif /* __TURRIS_OMNIA_MCU_INTERFACE_H */
This page took 0.041867 seconds and 4 git commands to generate.