]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - Documentation/networking/dpaa.txt
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi...
[karo-tx-linux.git] / Documentation / networking / dpaa.txt
1 The QorIQ DPAA Ethernet Driver
2 ==============================
3
4 Authors:
5 Madalin Bucur <madalin.bucur@nxp.com>
6 Camelia Groza <camelia.groza@nxp.com>
7
8 Contents
9 ========
10
11         - DPAA Ethernet Overview
12         - DPAA Ethernet Supported SoCs
13         - Configuring DPAA Ethernet in your kernel
14         - DPAA Ethernet Frame Processing
15         - DPAA Ethernet Features
16         - Debugging
17
18 DPAA Ethernet Overview
19 ======================
20
21 DPAA stands for Data Path Acceleration Architecture and it is a
22 set of networking acceleration IPs that are available on several
23 generations of SoCs, both on PowerPC and ARM64.
24
25 The Freescale DPAA architecture consists of a series of hardware blocks
26 that support Ethernet connectivity. The Ethernet driver depends upon the
27 following drivers in the Linux kernel:
28
29  - Peripheral Access Memory Unit (PAMU) (* needed only for PPC platforms)
30     drivers/iommu/fsl_*
31  - Frame Manager (FMan)
32     drivers/net/ethernet/freescale/fman
33  - Queue Manager (QMan), Buffer Manager (BMan)
34     drivers/soc/fsl/qbman
35
36 A simplified view of the dpaa_eth interfaces mapped to FMan MACs:
37
38   dpaa_eth       /eth0\     ...       /ethN\
39   driver        |      |             |      |
40   -------------   ----   -----------   ----   -------------
41        -Ports  / Tx  Rx \    ...    / Tx  Rx \
42   FMan        |          |         |          |
43        -MACs  |   MAC0   |         |   MACN   |
44              /   dtsec0   \  ...  /   dtsecN   \ (or tgec)
45             /              \     /              \(or memac)
46   ---------  --------------  ---  --------------  ---------
47       FMan, FMan Port, FMan SP, FMan MURAM drivers
48   ---------------------------------------------------------
49       FMan HW blocks: MURAM, MACs, Ports, SP
50   ---------------------------------------------------------
51
52 The dpaa_eth relation to the QMan, BMan and FMan:
53               ________________________________
54   dpaa_eth   /            eth0                \
55   driver    /                                  \
56   ---------   -^-   -^-   -^-   ---    ---------
57   QMan driver / \   / \   / \  \   /  | BMan    |
58              |Rx | |Rx | |Tx | |Tx |  | driver  |
59   ---------  |Dfl| |Err| |Cnf| |FQs|  |         |
60   QMan HW    |FQ | |FQ | |FQs| |   |  |         |
61              /   \ /   \ /   \  \ /   |         |
62   ---------   ---   ---   ---   -v-    ---------
63             |        FMan QMI         |         |
64             | FMan HW       FMan BMI  | BMan HW |
65               -----------------------   --------
66
67 where the acronyms used above (and in the code) are:
68 DPAA = Data Path Acceleration Architecture
69 FMan = DPAA Frame Manager
70 QMan = DPAA Queue Manager
71 BMan = DPAA Buffers Manager
72 QMI = QMan interface in FMan
73 BMI = BMan interface in FMan
74 FMan SP = FMan Storage Profiles
75 MURAM = Multi-user RAM in FMan
76 FQ = QMan Frame Queue
77 Rx Dfl FQ = default reception FQ
78 Rx Err FQ = Rx error frames FQ
79 Tx Cnf FQ = Tx confirmation FQs
80 Tx FQs = transmission frame queues
81 dtsec = datapath three speed Ethernet controller (10/100/1000 Mbps)
82 tgec = ten gigabit Ethernet controller (10 Gbps)
83 memac = multirate Ethernet MAC (10/100/1000/10000)
84
85 DPAA Ethernet Supported SoCs
86 ============================
87
88 The DPAA drivers enable the Ethernet controllers present on the following SoCs:
89
90 # PPC
91 P1023
92 P2041
93 P3041
94 P4080
95 P5020
96 P5040
97 T1023
98 T1024
99 T1040
100 T1042
101 T2080
102 T4240
103 B4860
104
105 # ARM
106 LS1043A
107 LS1046A
108
109 Configuring DPAA Ethernet in your kernel
110 ========================================
111
112 To enable the DPAA Ethernet driver, the following Kconfig options are required:
113
114 # common for arch/arm64 and arch/powerpc platforms
115 CONFIG_FSL_DPAA=y
116 CONFIG_FSL_FMAN=y
117 CONFIG_FSL_DPAA_ETH=y
118 CONFIG_FSL_XGMAC_MDIO=y
119
120 # for arch/powerpc only
121 CONFIG_FSL_PAMU=y
122
123 # common options needed for the PHYs used on the RDBs
124 CONFIG_VITESSE_PHY=y
125 CONFIG_REALTEK_PHY=y
126 CONFIG_AQUANTIA_PHY=y
127
128 DPAA Ethernet Frame Processing
129 ==============================
130
131 On Rx, buffers for the incoming frames are retrieved from one of the three
132 existing buffers pools. The driver initializes and seeds these, each with
133 buffers of different sizes: 1KB, 2KB and 4KB.
134
135 On Tx, all transmitted frames are returned to the driver through Tx
136 confirmation frame queues. The driver is then responsible for freeing the
137 buffers. In order to do this properly, a backpointer is added to the buffer
138 before transmission that points to the skb. When the buffer returns to the
139 driver on a confirmation FQ, the skb can be correctly consumed.
140
141 DPAA Ethernet Features
142 ======================
143
144 Currently the DPAA Ethernet driver enables the basic features required for
145 a Linux Ethernet driver. The support for advanced features will be added
146 gradually.
147
148 The driver has Rx and Tx checksum offloading for UDP and TCP. Currently the Rx
149 checksum offload feature is enabled by default and cannot be controlled through
150 ethtool.
151
152 The driver has support for multiple prioritized Tx traffic classes. Priorities
153 range from 0 (lowest) to 3 (highest). These are mapped to HW workqueues with
154 strict priority levels. Each traffic class contains NR_CPU TX queues. By
155 default, only one traffic class is enabled and the lowest priority Tx queues
156 are used. Higher priority traffic classes can be enabled with the mqprio
157 qdisc. For example, all four traffic classes are enabled on an interface with
158 the following command. Furthermore, skb priority levels are mapped to traffic
159 classes as follows:
160
161         * priorities 0 to 3 - traffic class 0 (low priority)
162         * priorities 4 to 7 - traffic class 1 (medium-low priority)
163         * priorities 8 to 11 - traffic class 2 (medium-high priority)
164         * priorities 12 to 15 - traffic class 3 (high priority)
165
166 tc qdisc add dev <int> root handle 1: \
167          mqprio num_tc 4 map 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 hw 1
168
169 Debugging
170 =========
171
172 The following statistics are exported for each interface through ethtool:
173
174         - interrupt count per CPU
175         - Rx packets count per CPU
176         - Tx packets count per CPU
177         - Tx confirmed packets count per CPU
178         - Tx S/G frames count per CPU
179         - Tx error count per CPU
180         - Rx error count per CPU
181         - Rx error count per type
182         - congestion related statistics:
183                 - congestion status
184                 - time spent in congestion
185                 - number of time the device entered congestion
186                 - dropped packets count per cause
187
188 The driver also exports the following information in sysfs:
189
190         - the FQ IDs for each FQ type
191         /sys/devices/platform/dpaa-ethernet.0/net/<int>/fqids
192
193         - the IDs of the buffer pools in use
194         /sys/devices/platform/dpaa-ethernet.0/net/<int>/bpids