Merge branch 'bind_unbind' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core into next
This brings in devm_device_add_group() and friends so that we can create driver-specific device attributes as managed resources.tirimbino
commit
53a7ff8fb7
@ -0,0 +1,194 @@ |
||||
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 |
@ -1 +0,0 @@ |
||||
../../../../arm/boot/dts/sunxi-h3-h5.dtsi |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue