1 /* SPDX-License-Identifier: GPL-2.0
2 * Marvell OcteonTx2 CGX driver
4 * Copyright (C) 2018 Marvell International Ltd.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #ifndef __CGX_FW_INTF_H__
12 #define __CGX_FW_INTF_H__
14 #include <linux/bitops.h>
15 #include <linux/bitfield.h>
17 #define CGX_FIRMWARE_MAJOR_VER 1
18 #define CGX_FIRMWARE_MINOR_VER 0
20 #define CGX_EVENT_ACK 1UL
22 /* CGX error types. set for cmd response status as CGX_STAT_FAIL */
25 CGX_ERR_LMAC_NOT_ENABLED,
26 CGX_ERR_LMAC_MODE_INVALID,
27 CGX_ERR_REQUEST_ID_INVALID,
28 CGX_ERR_PREV_ACK_NOT_CLEAR,
29 CGX_ERR_PHY_LINK_DOWN,
30 CGX_ERR_PCS_RESET_FAIL,
34 CGX_ERR_SPUX_BR_BLKLOCK_FAIL,
35 CGX_ERR_SPUX_RX_ALIGN_FAIL,
36 CGX_ERR_SPUX_TX_FAULT,
37 CGX_ERR_SPUX_RX_FAULT,
38 CGX_ERR_SPUX_RESET_FAIL,
39 CGX_ERR_SPUX_AN_RESET_FAIL,
40 CGX_ERR_SPUX_USX_AN_RESET_FAIL,
41 CGX_ERR_SMUX_RX_LINK_NOT_OK,
42 CGX_ERR_PCS_RECV_LINK_FAIL,
43 CGX_ERR_TRAINING_FAIL,
45 CGX_ERR_SPUX_BER_FAIL,
46 CGX_ERR_SPUX_RSFEC_ALGN_FAIL, /* = 22 */
49 /* LINK speed types */
66 /* REQUEST ID types. Input to firmware */
72 CGX_CMD_GET_LINK_STS, /* optional to user */
73 CGX_CMD_LINK_BRING_UP,
74 CGX_CMD_LINK_BRING_DOWN,
78 CGX_CMD_LINK_STATE_CHANGE,
79 CGX_CMD_MODE_CHANGE, /* hot plug support */
80 CGX_CMD_INTF_SHUTDOWN,
81 CGX_CMD_GET_MKEX_PRFL_SIZE,
82 CGX_CMD_GET_MKEX_PRFL_ADDR
91 /* event types - cause of interrupt */
104 CGX_CMD_OWN_FIRMWARE,
108 * y - value to be written in the bitrange
109 * x - input value whose bitrange to be modified
111 #define FIELD_SET(m, y, x) \
113 FIELD_PREP((m), (y)))
115 /* scratchx(0) CSR used for ATF->non-secure SW communication.
116 * This acts as the status register
117 * Provides details on command ack/status, command response, error details
119 #define EVTREG_ACK BIT_ULL(0)
120 #define EVTREG_EVT_TYPE BIT_ULL(1)
121 #define EVTREG_STAT BIT_ULL(2)
122 #define EVTREG_ID GENMASK_ULL(8, 3)
124 /* Response to command IDs with command status as CGX_STAT_FAIL
126 * Not applicable for commands :
127 * CGX_CMD_LINK_BRING_UP/DOWN/CGX_EVT_LINK_CHANGE
129 #define EVTREG_ERRTYPE GENMASK_ULL(18, 9)
131 /* Response to cmd ID as CGX_CMD_GET_FW_VER with cmd status as
134 #define RESP_MAJOR_VER GENMASK_ULL(12, 9)
135 #define RESP_MINOR_VER GENMASK_ULL(16, 13)
137 /* Response to cmd ID as CGX_CMD_GET_MAC_ADDR with cmd status as
140 #define RESP_MAC_ADDR GENMASK_ULL(56, 9)
142 /* Response to cmd ID as CGX_CMD_GET_MKEX_PRFL_SIZE with cmd status as
145 #define RESP_MKEX_PRFL_SIZE GENMASK_ULL(63, 9)
147 /* Response to cmd ID as CGX_CMD_GET_MKEX_PRFL_ADDR with cmd status as
150 #define RESP_MKEX_PRFL_ADDR GENMASK_ULL(63, 9)
152 /* Response to cmd ID - CGX_CMD_LINK_BRING_UP/DOWN, event ID CGX_EVT_LINK_CHANGE
153 * status can be either CGX_STAT_FAIL or CGX_STAT_SUCCESS
155 * In case of CGX_STAT_FAIL, it indicates CGX configuration failed
156 * when processing link up/down/change command.
157 * Both err_type and current link status will be updated
159 * In case of CGX_STAT_SUCCESS, err_type will be CGX_ERR_NONE and current
160 * link status will be updated
163 uint64_t reserved1:9;
165 uint64_t full_duplex:1;
166 uint64_t speed:4; /* cgx_link_speed */
167 uint64_t err_type:10;
168 uint64_t reserved2:39;
171 #define RESP_LINKSTAT_UP GENMASK_ULL(9, 9)
172 #define RESP_LINKSTAT_FDUPLEX GENMASK_ULL(10, 10)
173 #define RESP_LINKSTAT_SPEED GENMASK_ULL(14, 11)
174 #define RESP_LINKSTAT_ERRTYPE GENMASK_ULL(24, 15)
176 /* scratchx(1) CSR used for non-secure SW->ATF communication
177 * This CSR acts as a command register
179 #define CMDREG_OWN BIT_ULL(0)
180 #define CMDREG_ID GENMASK_ULL(7, 2)
182 /* Any command using enable/disable as an argument need
183 * to set this bitfield.
184 * Ex: Loopback, HiGig...
186 #define CMDREG_ENABLE BIT_ULL(8)
188 /* command argument to be passed for cmd ID - CGX_CMD_SET_MTU */
189 #define CMDMTU_SIZE GENMASK_ULL(23, 8)
191 /* command argument to be passed for cmd ID - CGX_CMD_LINK_CHANGE */
192 #define CMDLINKCHANGE_LINKUP BIT_ULL(8)
193 #define CMDLINKCHANGE_FULLDPLX BIT_ULL(9)
194 #define CMDLINKCHANGE_SPEED GENMASK_ULL(13, 10)
196 #endif /* __CGX_FW_INTF_H__ */