mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 09:50:04 +00:00
195 lines
6.2 KiB
Text
195 lines
6.2 KiB
Text
![]() |
The QorIQ DPAA Ethernet Driver
|
||
|
==============================
|
||
|
|
||
|
Authors:
|
||
|
Madalin Bucur <madalin.bucur@nxp.com>
|
||
|
Camelia Groza <camelia.groza@nxp.com>
|
||
|
|
||
|
Contents
|
||
|
========
|
||
|
|
||
|
- DPAA Ethernet Overview
|
||
|
- DPAA Ethernet Supported SoCs
|
||
|
- Configuring DPAA Ethernet in your kernel
|
||
|
- DPAA Ethernet Frame Processing
|
||
|
- DPAA Ethernet Features
|
||
|
- Debugging
|
||
|
|
||
|
DPAA Ethernet Overview
|
||
|
======================
|
||
|
|
||
|
DPAA stands for Data Path Acceleration Architecture and it is a
|
||
|
set of networking acceleration IPs that are available on several
|
||
|
generations of SoCs, both on PowerPC and ARM64.
|
||
|
|
||
|
The Freescale DPAA architecture consists of a series of hardware blocks
|
||
|
that support Ethernet connectivity. The Ethernet driver depends upon the
|
||
|
following drivers in the Linux kernel:
|
||
|
|
||
|
- Peripheral Access Memory Unit (PAMU) (* needed only for PPC platforms)
|
||
|
drivers/iommu/fsl_*
|
||
|
- Frame Manager (FMan)
|
||
|
drivers/net/ethernet/freescale/fman
|
||
|
- Queue Manager (QMan), Buffer Manager (BMan)
|
||
|
drivers/soc/fsl/qbman
|
||
|
|
||
|
A simplified view of the dpaa_eth interfaces mapped to FMan MACs:
|
||
|
|
||
|
dpaa_eth /eth0\ ... /ethN\
|
||
|
driver | | | |
|
||
|
------------- ---- ----------- ---- -------------
|
||
|
-Ports / Tx Rx \ ... / Tx Rx \
|
||
|
FMan | | | |
|
||
|
-MACs | MAC0 | | MACN |
|
||
|
/ dtsec0 \ ... / dtsecN \ (or tgec)
|
||
|
/ \ / \(or memac)
|
||
|
--------- -------------- --- -------------- ---------
|
||
|
FMan, FMan Port, FMan SP, FMan MURAM drivers
|
||
|
---------------------------------------------------------
|
||
|
FMan HW blocks: MURAM, MACs, Ports, SP
|
||
|
---------------------------------------------------------
|
||
|
|
||
|
The dpaa_eth relation to the QMan, BMan and FMan:
|
||
|
________________________________
|
||
|
dpaa_eth / eth0 \
|
||
|
driver / \
|
||
|
--------- -^- -^- -^- --- ---------
|
||
|
QMan driver / \ / \ / \ \ / | BMan |
|
||
|
|Rx | |Rx | |Tx | |Tx | | driver |
|
||
|
--------- |Dfl| |Err| |Cnf| |FQs| | |
|
||
|
QMan HW |FQ | |FQ | |FQs| | | | |
|
||
|
/ \ / \ / \ \ / | |
|
||
|
--------- --- --- --- -v- ---------
|
||
|
| FMan QMI | |
|
||
|
| FMan HW FMan BMI | BMan HW |
|
||
|
----------------------- --------
|
||
|
|
||
|
where the acronyms used above (and in the code) are:
|
||
|
DPAA = Data Path Acceleration Architecture
|
||
|
FMan = DPAA Frame Manager
|
||
|
QMan = DPAA Queue Manager
|
||
|
BMan = DPAA Buffers Manager
|
||
|
QMI = QMan interface in FMan
|
||
|
BMI = BMan interface in FMan
|
||
|
FMan SP = FMan Storage Profiles
|
||
|
MURAM = Multi-user RAM in FMan
|
||
|
FQ = QMan Frame Queue
|
||
|
Rx Dfl FQ = default reception FQ
|
||
|
Rx Err FQ = Rx error frames FQ
|
||
|
Tx Cnf FQ = Tx confirmation FQs
|
||
|
Tx FQs = transmission frame queues
|
||
|
dtsec = datapath three speed Ethernet controller (10/100/1000 Mbps)
|
||
|
tgec = ten gigabit Ethernet controller (10 Gbps)
|
||
|
memac = multirate Ethernet MAC (10/100/1000/10000)
|
||
|
|
||
|
DPAA Ethernet Supported SoCs
|
||
|
============================
|
||
|
|
||
|
The DPAA drivers enable the Ethernet controllers present on the following SoCs:
|
||
|
|
||
|
# PPC
|
||
|
P1023
|
||
|
P2041
|
||
|
P3041
|
||
|
P4080
|
||
|
P5020
|
||
|
P5040
|
||
|
T1023
|
||
|
T1024
|
||
|
T1040
|
||
|
T1042
|
||
|
T2080
|
||
|
T4240
|
||
|
B4860
|
||
|
|
||
|
# ARM
|
||
|
LS1043A
|
||
|
LS1046A
|
||
|
|
||
|
Configuring DPAA Ethernet in your kernel
|
||
|
========================================
|
||
|
|
||
|
To enable the DPAA Ethernet driver, the following Kconfig options are required:
|
||
|
|
||
|
# common for arch/arm64 and arch/powerpc platforms
|
||
|
CONFIG_FSL_DPAA=y
|
||
|
CONFIG_FSL_FMAN=y
|
||
|
CONFIG_FSL_DPAA_ETH=y
|
||
|
CONFIG_FSL_XGMAC_MDIO=y
|
||
|
|
||
|
# for arch/powerpc only
|
||
|
CONFIG_FSL_PAMU=y
|
||
|
|
||
|
# common options needed for the PHYs used on the RDBs
|
||
|
CONFIG_VITESSE_PHY=y
|
||
|
CONFIG_REALTEK_PHY=y
|
||
|
CONFIG_AQUANTIA_PHY=y
|
||
|
|
||
|
DPAA Ethernet Frame Processing
|
||
|
==============================
|
||
|
|
||
|
On Rx, buffers for the incoming frames are retrieved from one of the three
|
||
|
existing buffers pools. The driver initializes and seeds these, each with
|
||
|
buffers of different sizes: 1KB, 2KB and 4KB.
|
||
|
|
||
|
On Tx, all transmitted frames are returned to the driver through Tx
|
||
|
confirmation frame queues. The driver is then responsible for freeing the
|
||
|
buffers. In order to do this properly, a backpointer is added to the buffer
|
||
|
before transmission that points to the skb. When the buffer returns to the
|
||
|
driver on a confirmation FQ, the skb can be correctly consumed.
|
||
|
|
||
|
DPAA Ethernet Features
|
||
|
======================
|
||
|
|
||
|
Currently the DPAA Ethernet driver enables the basic features required for
|
||
|
a Linux Ethernet driver. The support for advanced features will be added
|
||
|
gradually.
|
||
|
|
||
|
The driver has Rx and Tx checksum offloading for UDP and TCP. Currently the Rx
|
||
|
checksum offload feature is enabled by default and cannot be controlled through
|
||
|
ethtool.
|
||
|
|
||
|
The driver has support for multiple prioritized Tx traffic classes. Priorities
|
||
|
range from 0 (lowest) to 3 (highest). These are mapped to HW workqueues with
|
||
|
strict priority levels. Each traffic class contains NR_CPU TX queues. By
|
||
|
default, only one traffic class is enabled and the lowest priority Tx queues
|
||
|
are used. Higher priority traffic classes can be enabled with the mqprio
|
||
|
qdisc. For example, all four traffic classes are enabled on an interface with
|
||
|
the following command. Furthermore, skb priority levels are mapped to traffic
|
||
|
classes as follows:
|
||
|
|
||
|
* priorities 0 to 3 - traffic class 0 (low priority)
|
||
|
* priorities 4 to 7 - traffic class 1 (medium-low priority)
|
||
|
* priorities 8 to 11 - traffic class 2 (medium-high priority)
|
||
|
* priorities 12 to 15 - traffic class 3 (high priority)
|
||
|
|
||
|
tc qdisc add dev <int> root handle 1: \
|
||
|
mqprio num_tc 4 map 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 hw 1
|
||
|
|
||
|
Debugging
|
||
|
=========
|
||
|
|
||
|
The following statistics are exported for each interface through ethtool:
|
||
|
|
||
|
- interrupt count per CPU
|
||
|
- Rx packets count per CPU
|
||
|
- Tx packets count per CPU
|
||
|
- Tx confirmed packets count per CPU
|
||
|
- Tx S/G frames count per CPU
|
||
|
- Tx error count per CPU
|
||
|
- Rx error count per CPU
|
||
|
- Rx error count per type
|
||
|
- congestion related statistics:
|
||
|
- congestion status
|
||
|
- time spent in congestion
|
||
|
- number of time the device entered congestion
|
||
|
- dropped packets count per cause
|
||
|
|
||
|
The driver also exports the following information in sysfs:
|
||
|
|
||
|
- the FQ IDs for each FQ type
|
||
|
/sys/devices/platform/dpaa-ethernet.0/net/<int>/fqids
|
||
|
|
||
|
- the IDs of the buffer pools in use
|
||
|
/sys/devices/platform/dpaa-ethernet.0/net/<int>/bpids
|