Skip to content

DPAA2 Ethernet configuration

The DPAA2 network complex is somewhat unique as the resources available are not "hardwired" - they can be connected dynamically to achieve various scenarios, such as connecting certain ports to virtual machines or to accelerators such as the AIOP.

DPAA2 can be complicated to understand - what is presented here is an attempt to simplify it for those looking to use it with standard Linux network interfaces.

For a more in depth overview of DPAA2 technologies, see DPAA2 overview

Terms you need to know:

  • MC: Management Complex

    This is the internal engine in the DPAA2 complex which manages the DPAA2 objects, and abstracts many of the low level details away from the operating system.

  • DPC: Data path configuration file

    The data path configuration file sets out the hardware resources available - most users do not need to touch this file.

  • DPL: Data path layout file

    The DPL sets up the connections between resources in the DPAA2 complex - practically this is where MACs are connected to the network controllers.

  • DPNI: Data path network interface

    This is most analogous to an "eth" interface in Linux

  • DPMAC: Data path MAC:

    This is the "front" end of an Ethernet interface - what connects to the PHY.

  • DPIO: Data path I/O

    This is the operating system interface to the data plane - all frames are transmitted and received through a DPIO object. The LS1088 has eight DPIO objects available so the processing of frames can be spread across all cores.

The simplest configuration is to connect each DPNI to a DPMAC.

Other end point for DPNI's exist such as DPDMUX or DPSW in the larger SoCs (LS/LX2XXX) - for more information on these, please see the NXP documentation.

The default configuration (eth-dpl-all)

MAC name Device Name on Panel Linux Interface Name (10 port config)
DPMAC7 VSC8514 U21 GE0 eth0
DPMAC8 VSC8514 U21 GE1 eth1
DPMAC9 VSC8514 U21 GE2 eth2
DPMAC10 VSC8514 U21 GE3 eth3
DPMAC3 VSC8514 U29 GE4 eth4
DPMAC4 VSC8514 U29 GE5 eth5
DPMAC5 VSC8514 U29 GE6 eth6
DPMAC6 VSC8514 U29 GE7 eth7
DPMAC1 SFP+ XG0 eth8
DPMAC2 SFP+ XG1 eth9

In U-Boot, these will be prefixed based on the interconnect type, e.g 'DPMAC6@qsgmii' for VSC8514 and 'DPMAC1@xgmii' for SFP+

The default DPC and DPL configuration is provided in the firmware builder repository.

Ten64 ships with a configuration that makes all 10 ethernet ports available. However, this is a compromise configuration that stretches the resources in the LS1088 - if you don't need all 10 interfaces it is a good idea to remove any you are not using.

(Up to nine interfaces can be supported without compromising the internal resources in the LS1088)

Boot time set up and deployment

To get working network interfaces the following steps need to happen, at the bootloader stage:

  1. Load the MC firmware and DPC file into memory and then start the management complex For example (when U-Boot is loaded from QSPI):
mcinitcmd=sf probe 0:0;sf read 0x80000000 0x300000 0x200000;sf read 0x80100000 0x5C0000 0x40000;fsl_mc start mc 0x80000000 0x80100000
  1. Read the DPL file and (lazy)apply it:
sf read 0x80001000 0x580000 0x40000 && fsl_mc lazyapply dpl 0x80001000

Lazyapply delays the application of the DPL until the hand off to Linux, so you can still use the network interfaes in U-Boot.

Runtime configuration

You can also leave DPNI's and DPMAC's unconfigured in the DPL and connect them at runtime using restool.

Resource object dependencies

Each network interface (DPNI) requires a certain number of dependent objects (such as DPMCPs or DPCONs).

A full overview can be found in NXP's DPAA2 objects dependencies, which can be summarized as:

  • Each DPNI requires a DPBP and DPMCP, plus N * DPCON where N is the number of receive queues.
  • Each DPMAC being controlled by an operating system requires one DPMCP
  • One DPIO is required per CPU core, and each DPIO requires a DPMCP.

Memory reservation

DPAA2 requires a portion of host memory to function, on the Ten64 we use the lowest amount by default (around ~700MiB). If you use AIOP or push high amounts of packets, you may need to adjust this using the "mcmemsize" variable in U-Boot. A reboot is required for changes to "mcmemsize" to take effect.

See README.lsch3 in U-Boot for more details on the MC memory reservation.

As a guide, NXP sets a default of "mcmemsize=0x70000000" (1.75GiB) on the developer boards.

Useful references