Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

   This page gives an overview of Axi EmacliteLinux driver which is available as part of the Xilinx Linux distribution or Open source Linux distribution as drivers/net/ethernet/xilinx/xilinx_emaclite.c

HW IP features

Features supported

  • Parameterized AXI4 slave interface based on the AXI4 or AXI4-Lite specification for transmit and receive data dual port memory access
  • Media Independent Interface (MII) for connection to external 10/100 Mbps PHY transceivers
  • Independent internal 2K byte TX and RX dual port memory for holding data for one packet
  • Optional dual buffer memories, 4K byte ping-pong, for TX and RX
  • Receive and Transmit Interrupts support
  • Optional Management Data Input/Output (MDIO) interface for PHY access
  • Internal loopback support

Features Supported in the driver

  • Media Independent Interface (MII) for connection to external 10/100 Mbps PHY transceivers
  • Independent internal 2K byte TX and RX dual port memory for holding data for one packet

Missing Features and Known Issues/Limitations in Driver

  • Internal loopback is not supported in the Linux kernel
  • Need to validate the driver on Zynq Ultrascale+ MPSoc

Kernel Configuration

The following config options should be enabled in order to build the Axi Emaclite driver
CONFIG_ETHERNET
CONFIG_NET_VENDOR_XILINX
CONFIG_XILINX_EMACLITE




Devicetree

Code Block
themeMidnight
 axi_ethernetlite_1: ethernet@40e00000 {
                        compatible = "xlnx,axi-ethernetlite-3.0", "xlnx,xps-ethernetlite-1.00.a";
                        device_type = "network";
                        interrupt-parent = <&axi_intc_1>;
                        interrupts = <1 0>;
                        local-mac-address = [00 0a 35 00 00 00];
                        phy-handle = <&phy0>;
                        reg = <0x40e00000 0x10000>;
                        xlnx,duplex = <0x1>;
                        xlnx,include-global-buffers = <0x1>;
                        xlnx,include-internal-loopback = <0x0>;
                        xlnx,include-mdio = <0x1>;
                        xlnx,instance = "axi_ethernetlite_inst";
                        xlnx,rx-ping-pong = <0x1>;
                        xlnx,s-axi-id-width = <0x1>;
                        xlnx,tx-ping-pong = <0x1>;
                        xlnx,use-internal = <0x0>;
                        mdio {
                                #address-cells = <1>;
                                #size-cells = <0>;
                                phy0: phy@7 {
                                        compatible = "marvell,88e1111";
                                        device_type = "ethernet-phy";
                                        reg = <7>;
                                } ;
                        } ;
                } ;
 


Test Procedure


Diagnostic and Protocol Tests

PING

This utility used to test the reachability of a host on an Internet Protocol(IP) network and to measure the round trip time for messages sent from the originating host to a destination computer

How to Run
ping <Remote IP Address>


Telnet

telnet <Server IP Address>


Pkt Generator

Please refer the below link for how to run and various options

https://www.kernel.org/doc/Documentation/networking/pktgen.txt


Stress Test


Iperf with option -d

Run iperf in dual testing mode. This will cause the server to connect back to the client on the port specified in the -L option (or defaults to the port the client connected to the server on). This is done immediately therefore running the tests simultaneously.

./iperf -c <Server IP> -d

Ping flood test
Users can send hundred or more packets per second using -f option. It prints a ‘.’ when a packet is sent, and a backspace is printed when a packet is received

Code Block
themeMidnight
ping -f localhost

Performance Tests


Netperf


More information please refer the below link
http://www.netperf.org/netperf/
How to Run
Server:
netserver

Client:
taskset 2 ./netperf -H <Server IP> -t TCP_STREAM
taskset 2 ./netperf -H <Server IP> -t UDP_STREAM

Iperf
More information please refer the below link
http://en.wikipedia.org/wiki/Iperf

How to Run
Server:
./iperf -s -u
./iperf -s

Client:
./iperf -c <Server IP> -u -b <bandwidth>
./iperf -c <Server IP>

Mainline status

  • The current driver available in the Xilinx Linux distribution is in sync except remove #define ALIGNMENT and minor code refactoring.

Change Log

2021.1
  • 5.10 kernel rebase
  • Misc cleanup (Remove advertising of 1G speed and auto negotiation, Remove custom BUFFER_ALIGN macro)

64870dcf8663 net: emaclite: Remove advertising of 1G speed and auto negotiation
b0be09613a6e net: emaclite: Remove custom BUFFER_ALIGN macro


2020.2
  • Coverity fixes.

ef553bd0e4ee net: emaclite: Add variable and conditions to check the return value

...