44#define ADIN1110_BUFF_LEN 1530
45#define ADIN1110_ETH_ALEN 6
46#define ADIN1110_ETHERTYPE_LEN 2
47#define ADIN1110_ETH_HDR_LEN 14
48#define ADIN1110_ADDR_FILT_LEN 16
50#define ADIN1110_FCS_LEN 4
51#define ADIN1110_MAC_LEN 6
53#define ADIN1110_ADDR_MASK NO_OS_GENMASK(12, 0)
54#define ADIN1110_RD_FRAME_SIZE 7
55#define ADIN1110_WR_FRAME_SIZE 6
56#define ADIN1110_RD_HDR_SIZE 3
57#define ADIN1110_WR_HDR_SIZE 2
58#define ADIN1110_PHY_ID_REG 1
60#define ADIN1110_PHY_ID 0x0283BC91
61#define ADIN2111_PHY_ID 0x0283BCA1
63#define ADIN1110_PORTS 1
64#define ADIN2111_PORTS 2
66#define ADIN1110_CD_MASK NO_OS_BIT(15)
67#define ADIN1110_RW_MASK NO_OS_BIT(13)
69#define ADIN1110_SOFT_RST_REG 0x3C
70#define ADIN1110_RESET_REG 0x03
71#define ADIN1110_SWRESET NO_OS_BIT(0)
72#define ADIN1110_SWRESET_KEY1 0x4F1C
73#define ADIN1110_SWRESET_KEY2 0xC1F4
74#define ADIN1110_SWRELEASE_KEY1 0x6F1A
75#define ADIN1110_SWRELEASE_KEY2 0xA1F6
77#define ADIN1110_SPI_CD NO_OS_BIT(7)
78#define ADIN1110_SPI_RW NO_OS_BIT(5)
80#define ADIN1110_CONFIG1_REG 0x04
81#define ADIN1110_CONFIG1_SYNC NO_OS_BIT(15)
83#define ADIN1110_CONFIG2_REG 0x06
84#define ADIN2111_P2_FWD_UNK2HOST_MASK NO_OS_BIT(12)
85#define ADIN2111_PORT_CUT_THRU_EN NO_OS_BIT(11)
86#define ADIN1110_CRC_APPEND NO_OS_BIT(5)
87#define ADIN1110_FWD_UNK2HOST_MASK NO_OS_BIT(2)
89#define ADIN1110_STATUS0_REG 0x08
90#define ADIN1110_STATUS0_TXPE_MASK NO_OS_BIT(0)
91#define ADIN1110_RESETC_MASK NO_OS_BIT(6)
93#define ADIN1110_STATUS1_REG 0x09
94#define ADIN1110_LINK_STATE_MASK NO_OS_BIT(0)
95#define ADIN2111_P2_RX_RDY NO_OS_BIT(17)
96#define ADIN1110_SPI_ERR NO_OS_BIT(10)
97#define ADIN1110_RX_RDY NO_OS_BIT(4)
99#define ADIN1110_IMASK1_REG 0x0D
100#define ADIN2111_RX_RDY_IRQ NO_OS_BIT(17)
101#define ADIN1110_SPI_ERR_IRQ NO_OS_BIT(10)
102#define ADIN1110_RX_RDY_IRQ NO_OS_BIT(4)
103#define ADIN1110_TX_RDY_IRQ NO_OS_BIT(3)
105#define ADIN1110_MDIOACC(x) (0x20 + (x))
106#define ADIN1110_MDIO_TRDONE NO_OS_BIT(31)
107#define ADIN1110_MDIO_TAERR NO_OS_BIT(30)
108#define ADIN1110_MDIO_ST NO_OS_GENMASK(29, 28)
109#define ADIN1110_MDIO_OP NO_OS_GENMASK(27, 26)
110#define ADIN1110_MDIO_PRTAD NO_OS_GENMASK(25, 21)
111#define ADIN1110_MDIO_DEVAD NO_OS_GENMASK(20, 16)
112#define ADIN1110_MDIO_DATA NO_OS_GENMASK(15, 0)
114#define ADIN1110_MMD_ACR_DEVAD_MASK NO_OS_GENMASK(4, 0)
115#define ADIN1110_MMD_ACR_FUNCTION_MASK NO_OS_GENMASK(15, 14)
116#define ADIN1110_MMD_ACCESS_MASK NO_OS_GENMASK(15, 0)
117#define ADIN1110_MMD_ACCESS_CTRL_REG 0x0D
118#define ADIN1110_MMD_ACCESS_REG 0x0E
120#define ADIN1110_MI_SFT_PD_MASK NO_OS_BIT(11)
121#define ADIN1110_MDIO_PHY_ID(x) ((x) + 1)
122#define ADIN1110_MI_CONTROL_REG 0x0
124#define ADIN1110_CRSM_SFT_PD_CNTRL_REG 0x8812
125#define ADIN1110_CRSM_SFT_PD_MASK NO_OS_BIT(0)
127#define ADIN1110_TX_FSIZE_REG 0x30
128#define ADIN1110_TX_REG 0x31
129#define ADIN1110_TX_SPACE_REG 0x32
131#define ADIN1110_FIFO_CLR_REG 0x36
132#define ADIN1110_FIFO_CLR_RX_MASK NO_OS_BIT(0)
133#define ADIN1110_FIFO_CLR_TX_MASK NO_OS_BIT(1)
135#define ADIN1110_MAC_RST_STATUS_REG 0x3B
137#define ADIN2111_MAC_ADDR_APPLY2PORT2 NO_OS_BIT(31)
138#define ADIN1110_MAC_ADDR_APPLY2PORT NO_OS_BIT(30)
139#define ADIN2111_MAC_ADDR_TO_OTHER_PORT NO_OS_BIT(17)
140#define ADIN1110_MAC_ADDR_TO_HOST NO_OS_BIT(16)
142#define ADIN1110_MAC_ADDR_FILT_UPR_REG(x) (0x50 + 2 * (x))
143#define ADIN1110_MAC_ADDR_FILT_LWR_REG(x) (0x51 + 2 * (x))
145#define ADIN1110_MAC_ADDR_UPR_MASK NO_OS_GENMASK(15, 0)
146#define ADIN1110_MAC_ADDR_LWR_MASK NO_OS_GENMASK(31, 0)
148#define ADIN1110_MAC_ADDR_MASK_UPR_REG 0x70
149#define ADIN1110_MAC_ADDR_MASK_LWR_REG 0x71
151#define ADIN1110_RX_FRM_CNT_REG 0xA0
152#define ADIN1110_RX_CRC_ERR_CNT_REG 0xA4
153#define ADIN1110_RX_ALGN_ERR_CNT_REG 0xA5
154#define ADIN1110_RX_LS_ERR_CNT_REG 0xA6
155#define ADIN1110_RX_PHY_ERR_CNT_REG 0xA7
156#define ADIN1110_TX_FRM_CNT_REG 0xA8
157#define ADIN1110_TX_BCAST_CNT_REG 0xA9
158#define ADIN1110_TX_MCAST_CNT_REG 0xAA
159#define ADIN1110_TX_UCAST_CNT_REG 0xAB
160#define ADIN1110_RX_BCAST_CNT_REG 0xA1
161#define ADIN1110_RX_MCAST_CNT_REG 0xA2
162#define ADIN1110_RX_UCAST_CNT_REG 0xA3
164#define ADIN1110_RX_DROP_FULL_CNT_REG 0xAC
165#define ADIN1110_RX_DROP_FILT_CNT_REG 0xAD
167#define ADIN1110_RX_FSIZE_REG 0x90
168#define ADIN1110_RX_REG 0x91
170#define ADIN2111_RX_P2_FSIZE_REG 0xC0
171#define ADIN2111_RX_P2_REG 0xC1
173#define ADIN1110_CLEAR_STATUS0 0xFFF
176#define ADIN1110_MDIO_OP_ADDR 0x0
177#define ADIN1110_MDIO_OP_WR 0x1
178#define ADIN1110_MDIO_OP_RD 0x3
180#define ADIN1110_WR_HEADER_LEN 2
181#define ADIN1110_FRAME_HEADER_LEN 2
182#define ADIN1110_RD_HEADER_LEN 3
183#define ADIN1110_REG_LEN 4
184#define ADIN1110_CRC_LEN 1
185#define ADIN1110_FEC_LEN 4
187#define ADIN_MAC_MULTICAST_ADDR_SLOT 0
188#define ADIN_MAC_BROADCAST_ADDR_SLOT 1
189#define ADIN_MAC_P1_ADDR_SLOT 2
190#define ADIN_MAC_P2_ADDR_SLOT 3
191#define ADIN_MAC_FDB_ADDR_SLOT 4
int adin1110_set_mac_addr(struct adin1110_desc *desc, uint8_t mac_address[ADIN1110_ETH_ALEN])
Set a MAC address destination filter, frames who's DA doesn't match are dropped.
Definition adin1110.c:423
adin1110_chip_id
The chips supported by this driver.
Definition adin1110.h:196
@ ADIN2111
Definition adin1110.h:198
@ ADIN1110
Definition adin1110.h:197
int adin1110_link_state(struct adin1110_desc *, uint32_t *)
Reset both the MAC and PHY.
Definition adin1110.c:834
int adin1110_broadcast_filter(struct adin1110_desc *, bool)
Set/clear a broadcast filter. By enabling this, broadcast frames will be forwarded to the host.
Definition adin1110.c:517
int adin1110_mdio_read_c45(struct adin1110_desc *, uint32_t, uint32_t, uint16_t, uint16_t *)
Read a PHY register using clause 45.
Definition adin1110.c:367
int adin1110_reg_read(struct adin1110_desc *, uint16_t, uint32_t *)
Read a register's value.
Definition adin1110.c:183
int adin1110_init(struct adin1110_desc **, struct adin1110_init_param *)
Initialize the device.
Definition adin1110.c:943
int adin1110_reg_update(struct adin1110_desc *, uint16_t, uint32_t, uint32_t)
Update a register's value based on a mask.
Definition adin1110.c:205
int adin1110_reg_write(struct adin1110_desc *, uint16_t, uint32_t)
Write a register's value.
Definition adin1110.c:112
int adin1110_remove(struct adin1110_desc *)
Free a device descriptor.
Definition adin1110.c:1051
int adin1110_mdio_read(struct adin1110_desc *, uint32_t, uint32_t, uint16_t *)
Read a PHY register using clause 22.
Definition adin1110.c:229
int adin1110_write_fifo(struct adin1110_desc *, uint32_t, struct adin1110_eth_buff *)
Write a frame to the TX FIFO.
Definition adin1110.c:536
int adin1110_set_promisc(struct adin1110_desc *, uint32_t, bool)
Set a port in promiscuous mode. All MAC filters are dropped.
Definition adin1110.c:854
int adin1110_phy_reset(struct adin1110_desc *)
Reset the PHY device.
Definition adin1110.c:787
int adin1110_mac_reset(struct adin1110_desc *)
Reset the MAC device.
Definition adin1110.c:729
int adin1110_mdio_write_c45(struct adin1110_desc *, uint32_t, uint32_t, uint32_t, uint16_t)
Write a PHY register using clause 45.
Definition adin1110.c:309
#define ADIN1110_ETH_ALEN
Definition adin1110.h:45
int adin1110_read_fifo(struct adin1110_desc *, uint32_t, struct adin1110_eth_buff *)
Read a frame from the RX FIFO.
Definition adin1110.c:635
int adin1110_sw_reset(struct adin1110_desc *)
Reset both the MAC and PHY.
Definition adin1110.c:823
int adin1110_mdio_write(struct adin1110_desc *, uint32_t, uint32_t, uint16_t)
Write a PHY register using clause 22.
Definition adin1110.c:269
Header file of GPIO Interface.
Header file of SPI Interface.
Header file of utility functions.
ADIN1110 device descriptor.
Definition adin1110.h:204
enum adin1110_chip_id chip_type
Definition adin1110.h:205
struct oa_tc6_desc * oa_desc
Definition adin1110.h:214
struct no_os_gpio_desc * reset_gpio
Definition adin1110.h:209
bool append_crc
Definition adin1110.h:212
struct no_os_spi_desc * comm_desc
Definition adin1110.h:206
uint8_t mac_address[ADIN1110_ETH_ALEN]
Definition adin1110.h:207
uint8_t * data
Definition adin1110.h:208
bool oa_tc6_spi
Definition adin1110.h:211
struct no_os_gpio_desc * int_gpio
Definition adin1110.h:210
Buffer structure used for frame RX and TX transactions.
Definition adin1110.h:233
uint8_t mac_dest[ADIN1110_ETH_ALEN]
Definition adin1110.h:235
uint32_t len
Definition adin1110.h:234
uint8_t mac_source[ADIN1110_ETH_ALEN]
Definition adin1110.h:236
uint8_t ethertype[2]
Definition adin1110.h:237
uint8_t * payload
Definition adin1110.h:238
Initialization parameter for the device descriptor.
Definition adin1110.h:220
struct no_os_spi_init_param comm_param
Definition adin1110.h:222
bool oa_tc6_spi
Definition adin1110.h:227
struct no_os_gpio_init_param int_param
Definition adin1110.h:224
uint8_t mac_address[ADIN1110_ETH_ALEN]
Definition adin1110.h:225
bool append_crc
Definition adin1110.h:226
struct no_os_gpio_init_param reset_param
Definition adin1110.h:223
enum adin1110_chip_id chip_type
Definition adin1110.h:221
Structure holding the GPIO descriptor.
Definition no_os_gpio.h:84
Structure holding the parameters for GPIO initialization.
Definition no_os_gpio.h:67
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128
Holds the frame buffers and the communication descriptor for the OA TC6 driver.
Definition oa_tc6.h:181