mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-07 13:53:24 +00:00
net: ti: icssg-prueth: Add ICSSG ethernet driver
This is the Ethernet driver for TI AM654 Silicon rev. 2 with the ICSSG PRU Sub-system running dual-EMAC firmware. The Programmable Real-time Unit and Industrial Communication Subsystem Gigabit (PRU_ICSSG) is a low-latency microcontroller subsystem in the TI SoCs. This subsystem is provided for the use cases like implementation of custom peripheral interfaces, offloading of tasks from the other processor cores of the SoC, etc. Every ICSSG core has two Programmable Real-Time Unit(PRUs), two auxiliary Real-Time Transfer Unit (RT_PRUs), and two Transmit Real-Time Transfer Units (TX_PRUs). Each one of these runs its own firmware. Every ICSSG core has two MII ports connect to these PRUs and also a MDIO port. The cores can run different firmwares to support different protocols and features like switch-dev, timestamping, etc. It uses System DMA to transfer and receive packets and shared memory register emulation between the firmware and driver for control and configuration. This patch adds support for basic EMAC functionality with 1Gbps and 100Mbps link speed. 10M and half duplex mode are not supported currently as they require IEP, the support for which will be added later. Support for switch-dev, timestamp, etc. will be added later by subsequent patch series. Signed-off-by: Roger Quadros <rogerq@ti.com> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: MD Danish Anwar <danishanwar@ti.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
172e604a8c
commit
128d5874c0
@ -183,4 +183,17 @@ config CPMAC
|
||||
help
|
||||
TI AR7 CPMAC Ethernet support
|
||||
|
||||
config TI_ICSSG_PRUETH
|
||||
tristate "TI Gigabit PRU Ethernet driver"
|
||||
select PHYLIB
|
||||
depends on PRU_REMOTEPROC
|
||||
depends on ARCH_K3 && OF && TI_K3_UDMA_GLUE_LAYER
|
||||
help
|
||||
Support dual Gigabit Ethernet ports over the ICSSG PRU Subsystem.
|
||||
This subsystem is available starting with the AM65 platform.
|
||||
|
||||
This driver requires firmware binaries which will run on the PRUs
|
||||
to support the Ethernet operation. Currently, it supports Ethernet
|
||||
with 1G and 100M link speed.
|
||||
|
||||
endif # NET_VENDOR_TI
|
||||
|
@ -28,3 +28,11 @@ obj-$(CONFIG_TI_K3_AM65_CPSW_NUSS) += ti-am65-cpsw-nuss.o
|
||||
ti-am65-cpsw-nuss-y := am65-cpsw-nuss.o cpsw_sl.o am65-cpsw-ethtool.o cpsw_ale.o k3-cppi-desc-pool.o am65-cpsw-qos.o
|
||||
ti-am65-cpsw-nuss-$(CONFIG_TI_K3_AM65_CPSW_SWITCHDEV) += am65-cpsw-switchdev.o
|
||||
obj-$(CONFIG_TI_K3_AM65_CPTS) += am65-cpts.o
|
||||
|
||||
obj-$(CONFIG_TI_ICSSG_PRUETH) += icssg-prueth.o
|
||||
icssg-prueth-y := k3-cppi-desc-pool.o \
|
||||
icssg/icssg_prueth.o \
|
||||
icssg/icssg_classifier.o \
|
||||
icssg/icssg_queues.o \
|
||||
icssg/icssg_config.o \
|
||||
icssg/icssg_mii_cfg.o \
|
||||
|
1809
drivers/net/ethernet/ti/icssg/icssg_prueth.c
Normal file
1809
drivers/net/ethernet/ti/icssg/icssg_prueth.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -34,13 +34,42 @@
|
||||
|
||||
#include <net/devlink.h>
|
||||
|
||||
#include "icssg_config.h"
|
||||
#include "icssg_switch_map.h"
|
||||
|
||||
#define PRUETH_MAX_MTU (2000 - ETH_HLEN - ETH_FCS_LEN)
|
||||
#define PRUETH_MIN_PKT_SIZE (VLAN_ETH_ZLEN)
|
||||
#define PRUETH_MAX_PKT_SIZE (PRUETH_MAX_MTU + ETH_HLEN + ETH_FCS_LEN)
|
||||
|
||||
#define ICSS_SLICE0 0
|
||||
#define ICSS_SLICE1 1
|
||||
|
||||
#define ICSS_FW_PRU 0
|
||||
#define ICSS_FW_RTU 1
|
||||
|
||||
#define ICSSG_MAX_RFLOWS 8 /* per slice */
|
||||
|
||||
/* Firmware status codes */
|
||||
#define ICSS_HS_FW_READY 0x55555555
|
||||
#define ICSS_HS_FW_DEAD 0xDEAD0000 /* lower 16 bits contain error code */
|
||||
|
||||
/* Firmware command codes */
|
||||
#define ICSS_HS_CMD_BUSY 0x40000000
|
||||
#define ICSS_HS_CMD_DONE 0x80000000
|
||||
#define ICSS_HS_CMD_CANCEL 0x10000000
|
||||
|
||||
/* Firmware commands */
|
||||
#define ICSS_CMD_SPAD 0x20
|
||||
#define ICSS_CMD_RXTX 0x10
|
||||
#define ICSS_CMD_ADD_FDB 0x1
|
||||
#define ICSS_CMD_DEL_FDB 0x2
|
||||
#define ICSS_CMD_SET_RUN 0x4
|
||||
#define ICSS_CMD_GET_FDB_SLOT 0x5
|
||||
#define ICSS_CMD_ENABLE_VLAN 0x5
|
||||
#define ICSS_CMD_DISABLE_VLAN 0x6
|
||||
#define ICSS_CMD_ADD_FILTER 0x7
|
||||
#define ICSS_CMD_ADD_MAC 0x8
|
||||
|
||||
/* In switch mode there are 3 real ports i.e. 3 mac addrs.
|
||||
* however Linux sees only the host side port. The other 2 ports
|
||||
* are the switch ports.
|
||||
@ -214,4 +243,7 @@ int icssg_queue_pop(struct prueth *prueth, u8 queue);
|
||||
void icssg_queue_push(struct prueth *prueth, int queue, u16 addr);
|
||||
u32 icssg_queue_level(struct prueth *prueth, int queue);
|
||||
|
||||
#define prueth_napi_to_tx_chn(pnapi) \
|
||||
container_of(pnapi, struct prueth_tx_chn, napi_tx)
|
||||
|
||||
#endif /* __NET_TI_ICSSG_PRUETH_H */
|
||||
|
Loading…
Reference in New Issue
Block a user