mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-23 09:42:19 +03:00
- Renamed the directory to oak - Updated the make files to compile the source - Removed unused script ESDP-16549 Bug 3882239 Bug 3824037 Change-Id: I1dee5def85b6e25f88dff999f1051bfe62d5613b Signed-off-by: Sheetal Tigadoli <stigadoli@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2856988 Reviewed-by: Sumeet Gupta <sumeetg@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
167 lines
7.3 KiB
Plaintext
167 lines
7.3 KiB
Plaintext
|
|
Linux driver for OAK revision A0/B0 (For Linux kernel 5)
|
|
--------------------------------------------------------
|
|
|
|
The purpose of this linux driver is to provide basic functionality for network data
|
|
exchange between the common Linux protocol implementation and up to 10Gbit Ethernet
|
|
networks.
|
|
|
|
Additional functionality is provided by the driver to the user space, that allows
|
|
control of the particular chip components e.g.: Unimac, ESU and Gicu.
|
|
|
|
This functional enhancement is not subject of a common Linux driver but is primarily
|
|
used to control and test the operation modes of the test/board in a way that is not
|
|
directly supported by the standard network protocoll. See also the 'cmdtool' source.
|
|
|
|
Compilation:
|
|
------------
|
|
|
|
1) On your target Linux system execute: sudo su
|
|
2) Then change to any directory and extract the complete source from the source file:
|
|
tar -xvf ./drv-src.tar
|
|
3) The driver supports currently the two known Marvell PCIe device vendor IDs:
|
|
|
|
vendor: 0x11AB device: 0x0000 (undefined)
|
|
vendor: 0x11AB device: 0xABCD
|
|
|
|
Execute: lspci -v -d 11ab: -vv
|
|
|
|
If the device id is not listed above you do not need to change the ID in the system
|
|
but you just can add the alternate device ID to the driver source.
|
|
|
|
With a source code editor:
|
|
Just copy line 36 in file oak.c (PCI_DEVICE(0x11AB, 0x0000), insert the new line
|
|
after the current one and change the device ID 0x0000 to the one listed in your
|
|
PCIe configuration space.
|
|
|
|
4) COMPILATION:
|
|
|
|
Now the driver source has to be compiled against the kernel in use, at least kernel
|
|
release 5.4.2.
|
|
|
|
# make -C /lib/modules/`uname -r`/build M=`pwd` modules
|
|
|
|
The command line above locates your current kernel version (uname -r) and builds a new
|
|
kernel object (oak_pci.ko) in the current directory. Alternatively you can change the
|
|
KDIR line in the file ./m accordingly and execute: ./m
|
|
|
|
If there is any compilation error please report to Marvell.
|
|
|
|
Please note that the driver does not support MSI.
|
|
For the purpose of parallel processing of interrupts only MSIX is supported by the driver
|
|
and must be supported (enabled) by the linux kernel. This should be the default.
|
|
|
|
5) LOADING ...:
|
|
Once you have successfully generated the kernel object you may load it manually to
|
|
the kernel environment from your working directory. This is done with the 'insmod' system
|
|
tool.
|
|
|
|
When loading the kernel object you should define a debug level. This generates log messages
|
|
in the system log file that can be used to trace the driver activity.
|
|
|
|
To do this start the background syslog monitoring in a separate command shell:
|
|
# tail -f /var/log/syslog &
|
|
Alternatively you can also use the dmesg (-c / clear) command.
|
|
|
|
Then load the driver with debug level 3 (bit 0 and 1):
|
|
|
|
# insmod oak_pci.ko debug=0x00 chan=10 txs=32 rxs=32 rto=100 mhdr=0
|
|
|
|
Debug levels comply to the system defined values e.g.:
|
|
|
|
NETIF_MSG_DRV = 0x0001,
|
|
NETIF_MSG_PROBE = 0x0002,
|
|
NETIF_MSG_LINK = 0x0004,
|
|
NETIF_MSG_TIMER = 0x0008,
|
|
NETIF_MSG_IFDOWN = 0x0010,
|
|
NETIF_MSG_IFUP = 0x0020,
|
|
NETIF_MSG_RX_ERR = 0x0040,
|
|
NETIF_MSG_TX_ERR = 0x0080,
|
|
NETIF_MSG_TX_QUEUED = 0x0100,
|
|
NETIF_MSG_INTR = 0x0200,
|
|
NETIF_MSG_TX_DONE = 0x0400,
|
|
NETIF_MSG_RX_STATUS = 0x0800,
|
|
NETIF_MSG_PKTDATA = 0x1000,
|
|
NETIF_MSG_HW = 0x2000,
|
|
NETIF_MSG_WOL = 0x4000,
|
|
|
|
6) PARAMETERS:
|
|
Additional load parameter as used in 5) above:
|
|
chan=10 This load parameter is used to limit the internal number of transmit/receive
|
|
descriptor pairs of the PCIe Unimac at port 11.
|
|
The default is 10 and may be changed to a value between 1...10 e.g.
|
|
for better debugging. Note that not all channels will be in use by the
|
|
Linux protocol stack.
|
|
txs=32 This parameter defines the maximal number of descriptor entries on the
|
|
transmit side, that is the number of TX packets that can be queued to
|
|
each of the configured descriptors.
|
|
rxs=32 The same as txs but applies to the receive descriptors.
|
|
rto=100 Receive timeout: the timeout before a receive interrupt is executed on any
|
|
receive descriptor ring in case there is low traffic and packet delay time
|
|
in the ring shall be reduced (to be verfied with icmp response time/ping).
|
|
The value is given in micro seconds.
|
|
mhdr=1 Instructs the ESU to create the Marvell-header status per rx packet.
|
|
This may be required for some Unimac receive mappings that require packet
|
|
flow information e.g. source port id ....
|
|
There is no need to change it to zero.
|
|
|
|
7) Once the kernel object has been loaded successfully the ifconfig -a command should
|
|
display a new network interface.
|
|
|
|
Up to this level of operation the driver did not yet fully access the Unimac and other
|
|
parts. It just checked the existing PCIe device and 'attached' to the kernel's networking
|
|
interface and is still waiting to be started.
|
|
|
|
8) CONFIGURATION:
|
|
When you assign an IP address to the interface e.g. #ifconfig ethX 1.1.1.1 the driver gets
|
|
the start command for complete initialization of the hardware. This may be the most critical
|
|
situation for any problems. After this the driver should be able to send and receive packets
|
|
and process interrupt handling. It's now fully operational.
|
|
|
|
In this state you may use the cmdtool (test tool) as shown in 11) below.
|
|
|
|
9) STOP:
|
|
ifconfig ethX stops activities on the hardware again. The driver is now disconnected from
|
|
the network and not fully operational.
|
|
|
|
10) UNLOAD: Finally you may unload the driver with: # rmmod oak_pci
|
|
|
|
11) CMDTOOL (comamnd line tool, may be packaged sperately)
|
|
|
|
In the driver source directory extract the file cli-src.tar .
|
|
This creates a subdirectory cmdtool in the current directory.
|
|
|
|
Change to the directory: # cd cmdtool
|
|
and just execute: # make
|
|
|
|
This generates a binary: cli
|
|
|
|
Just execute for help: # ./cli
|
|
|
|
Syntax error, use: ./cli [ help ] <command> ...
|
|
commands : help mac esu gicu pcie gen exec rxmap irq showc dump set ATU VTU TCAM ESTAT ...
|
|
|
|
This shows a list of commands that can be executed on top of the driver's interface, that has to be specified
|
|
with the argument -if ethX
|
|
|
|
Each command can be shown in detail with # ./cli help <cmd>
|
|
|
|
The following most command groups can be used:
|
|
|
|
mac - write or read (dump) registers of the Unimac at port 11.
|
|
esu - write or read (dump) registers of the ESU.
|
|
gicu- write or read (dump) registers of the Gicu.
|
|
|
|
irq - displays the interrupt mapping scheme of MSIX interrupts in use for each particular tx/tx channel.
|
|
showc - display tx or rx descriptor information for a specific range of descritors but the maximal number
|
|
that have been configured with rxs/txs parameter. This displays the byte count of each frame in a
|
|
tx/rx descriptor , timestamp information, buffer DMA addresses, Vlan tags, checksum info and the
|
|
HW read/write pointers of the Unimac. This command may be used to trace round robin activities on
|
|
a particular descriptor ring of the Unimac.
|
|
|
|
ATU VTU TCAM ESTAT
|
|
Commands for ATU VTU operations or TCAM operations or ESU port statistics.
|
|
|
|
rxmap - setup a Unimac rx-mapping on a specific queue[0-9] on a rx descripror/ring.
|
|
dump - hexdump of binary file.
|