36 Commits

Author SHA1 Message Date
Pavan Nikhilesh
4362312431 usertools: fix device binding module detection
Some kernel modules use '-' in their name when registering through
`pci_register_driver` and the same name  is populated in
'/sys/bus/pci/drivers/'.
But the kernel always populates modules names replacing '-' with '_'
in '/sys/module/'.

Example:
	# ./usertools/dpdk-devbind.py -b octeontx2-nicpf 0002:03:00.0
	Error: Driver 'octeontx2-nicpf' is not loaded.

	# ls /sys/bus/pci/drivers/octeontx2-nicpf
	bind  module  new_id  remove_id  uevent  unbind
	# ls /sys/module/octeontx2_nicpf/
	drivers  uevent  version

The patch addresses it by always replacing '-' with '_' when looking in
'/sys/module/'

Signed-off-by: Phanendra Vukkisala <pvukkisala@marvell.com>
Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
2019-11-27 00:00:24 +01:00
Anatoly Burakov
2804529fe0 usertools: print binding errors to stderr
Bring consistency to error messages and output them to stderr.
Also, whenever the script tells the user to "check usage", don't
tell the user to do it and just display usage instead.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
2019-07-31 00:22:33 +02:00
Anatoly Burakov
681a672886 usertools: check if module is loaded before binding
Currently, if an attempt is made to bind a device to a driver that
is not loaded, a confusing and misleading error message appears.
Fix it so that, before binding to the driver, we actually check if
it is loaded in the kernel first.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
2019-07-31 00:22:33 +02:00
Anatoly Burakov
15f6aac759 usertools: add error on missing driver to bind
A common user error is to forget driver to which the PCI devices should
be bound to. Currently, the error message in this case looks unhelpful
misleading and indecipherable to anyone but people who know how devbind
works.

Fix this by checking if the driver string is actually a valid device
string. If it is, we assume that the user has just forgot to specify the
driver, and display appropriate error. We also assume that no one will
name their driver in a format that looks like a PCI address, but that
seems like a reasonable assumption to make.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
2019-07-31 00:22:33 +02:00
Xiaoyun Li
034c328eb0 raw/ntb: support Intel NTB
Add in the list of registers for the device.
And enable NTB device ops for Intel Skylake platform.

Signed-off-by: Xiaoyun Li <xiaoyun.li@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
2019-07-05 12:50:19 +02:00
Jerin Jacob
f5be5d9921 usertools: add octeontx2 DMA device binding
Update the devbind script with new section of DMA devices, also
added OCTEONTX2 DMA device ID to DMA device list

Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Signed-off-by: Satha Rao <skoteshwar@marvell.com>
2019-07-05 12:43:54 +02:00
Nicolas Chautru
07488e2914 usertools: add baseband device binding
Allows binding of baseband devices

Signed-off-by: Nicolas Chautru <nicolas.chautru@intel.com>
Acked-by: Amr Mokhtar <amr.mokhtar@intel.com>
2019-07-04 23:44:58 +02:00
Timothy Redaelli
93b93beb12 usertools: fix refresh binding infos
Currently clear_data (dpdk-devbind.py) doesn't work as expected
since "global devices" is missing and so "devices" is considered
a local variable.

This commit changes "clear_data" function in order to really clear
devices by adding "global devices".

Fixes: ea9f00f7289a ("usertools: refactor NIC and crypto binding details")
Cc: stable@dpdk.org

Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
Acked-by: Luca Boccassi <bluca@debian.org>
Reviewed-by: David Marchand <david.marchand@redhat.com>
2019-07-04 23:08:58 +02:00
Bruce Richardson
12d4777ac1 usertools: support IOAT device binding
In order to allow binding/unbinding of devices for use by the
ioat_rawdev, we need to update the devbind script to add a new class
of device, and add device ids for the specific HW instances.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Jiayu Hu <jiayu.hu@intel.com>
Tested-by: Harry van Haaren <harry.van.haaren@intel.com>
2019-07-04 09:44:01 +02:00
Rosen Xu
c01c748e4a net/ipn3ke: add new driver
Add Intel FPGA Acceleration NIC IPN3KE ethdev PMD driver.

Signed-off-by: Rosen Xu <rosen.xu@intel.com>
Signed-off-by: Andy Pei <andy.pei@intel.com>
Signed-off-by: Dan Wei <dan.wei@intel.com>
2019-04-19 14:51:54 +02:00
Jerin Jacob
0bcc66441d usertools: add octeontx2 SSO and NPA PCIe devices
Add the Marvell's octeontx2's SSO and NPA PCIe devices as
eventdev, mempool devices in devbind script.

Signed-off-by: Jerin Jacob <jerinj@marvell.com>
2019-03-27 01:24:27 +01:00
Anatoly Burakov
109cb989d9 usertools: skip empty categories in devices status
If there aren't any devices of a particular category on user's
system, we still display them, which is bad for usability. Fix
devbind to not print out a category unless there are devices in
it.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Reviewed-by: David Hunt <david.hunt@intel.com>
2018-11-23 01:43:20 +01:00
Anatoly Burakov
1a5a9cb32a usertools: check for lspci dependency
On some distributions (such as CentOS 7) lspci may not be installed
by default, causing exceptions which are difficult to interpret.

Fix devbind script to check if lspci is installed at script startup.

Cc: stable@dpdk.org

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Reviewed-by: Rami Rosen <roszenrami@gmail.com>
2018-11-19 00:03:52 +01:00
Sunila Sahu
9d35895e51 usertools: add octeontx zip device for binding
Add the cavium octeontx zip pci device details.

Signed-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>
Signed-off-by: Shally Verma <shally.verma@caviumnetworks.com>
Signed-off-by: Sunila Sahu <sunila.sahu@caviumnetworks.com>
2018-07-25 13:36:26 +02:00
Pavan Nikhilesh
f4bc0010f7 usertools: add Cavium TIM as an event device
Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2018-04-16 11:11:06 +02:00
Xiaohua Zhang
20526313ba usertools: support AVP device
Signed-off-by: Xiaohua Zhang <xiaohua.zhang@windriver.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
2018-03-28 00:49:53 +02:00
Anatoly Burakov
c76a10ec15 usertools/devbind: fix kernel module reporting
lspci reports kernel modules in "Module" string, but devbind
expects it to be "Module_str". Fix it up similar to how we fix
up "Driver" to be "Driver_str".

Fixes: c3ce205d5729 ("usertools: optimize lspci invocation")
Cc: stable@dpdk.org

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
2018-02-06 02:18:45 +01:00
Anatoly Burakov
02e157e4a8 usertools/devbind: remove unused function
Fixes: 629395b063e8 ("igb_uio: remove PCI id table")
Cc: stable@dpdk.org

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
2018-02-06 02:18:37 +01:00
Bruce Richardson
9d7c01f810 tools: use SPDX tag for Intel copyright files
Replace the BSD license header with the SPDX tag for
scripting files with only an Intel copyright on them.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
2018-01-04 22:41:39 +01:00
Pavel Shirshov
e483961492 usertools: fix a typo in bind script
Signed-off-by: Pavel Shirshov <pavel.shirshov@gmail.com>
2017-11-13 06:26:28 +01:00
Omri Mor
8fab26f8ee usertools: fix device binding with python 3
When using Python 3, dpdk-devbind.py fails to detect modules other than
igb_uio.

Fixes: bb9f408550d1 ("tools: support binding to built-in kernel modules")

Signed-off-by: Omri Mor <omrimor2@illinois.edu>
2017-11-07 23:34:38 +01:00
Ferruh Yigit
657c713385 usertools: add option to unbind all devices
-u accepts "dpdk" argument to unbind all devices bound to a DPDK driver.

Usage:
usertools/dpdk-devbind.py -u dpdk

Example:
$ usertools/dpdk-devbind.py -s

Network devices using DPDK-compatible driver
============================================
0000:08:00.1 '...' drv=igb_uio unused=
0000:81:00.0 '...' drv=igb_uio unused=
0000:88:00.0 '...' drv=igb_uio unused=
0000:88:00.1 '...' drv=igb_uio unused=
...

$ usertools/dpdk-devbind.py -u dpdk
$ usertools/dpdk-devbind.py -s

Network devices using DPDK-compatible driver
============================================
<none>
....

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
2017-07-06 00:53:15 +02:00
Jerin Jacob
156c42ead1 usertools: add Cavium pkx as network device
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-05-07 14:32:17 +02:00
Guduri Prathyusha
6413d477a6 usertools: fix binding device match
If multiple devices of same class are added to a device type,
only devices that match first device listed in device type list are
processed.

Fixing it in device_type_match() by returning false after iterating
through all the devices listed in a device type list.

Fixes: 8ad08a287918 ("usertools: define DPDK PCI functional device")

Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
2017-05-07 14:32:05 +02:00
Mark Asselstine
df86b009dd usertools: remove devbind module search corner cases
The existing code used to search for module files via modinfo has
several corner cases which can result in it failing where it should be
successful.

The call to lower() would cause results returned by 'modinfo' to be
forced to lowercase, results which were subsequently passed to
exists() which is case sensitive. This was most likely done to capture
all variants of failure strings modinfo might return
(ie. ERROR/Error/error/...)  without thought negative effect to the
later call to exists(). For many this is a nonissue but if the module
path included non-lowercase alpha characters, something which is
easily possible with a non-lowercase kernel-extraversion string, this
would cause an issue.

We could move the call to lower() to the check for "error" but this
still leaves possible corner cases, for modules or module paths with
'error' in them.

Instead we will prevent modinfo's stderr from being used as a "good
value" for path, meaning we either get a valid path from modinfo, or
nothing at all. This removes all corner cases.

Ultimately these preliminary checks are unnecessary as exists() will
only return True if it is passed a valid path, passing it modinfo's
stderr would fail. In keeping with the original code, however, we do
some preliminary checks, but we are now free of corner cases.

Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
2017-05-01 23:58:31 +02:00
Ferruh Yigit
b153c00bf8 usertools: add --status-dev option to devbind
Script displays status for all device types and output is much
longer than it used to be. This makes harder to read script output.

This patch adds new --status-dev argument to the script to select
a device group to display status.

Supported device groups:
net
crypto
event
mempool

Sample usage:
./usertools/dpdk-devbind.py --status-dev mempool

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
2017-04-30 15:28:01 +02:00
Guduri Prathyusha
720b7a0582 usertools: fix device binding with kernel tools
The following sequence of operation gives error in binding devices
1) Bind a device using dpdk-devbind.py
2) Unbind the device using kernel tools(/sys/bus/pci/device/driver/unbind)
3) Bind the device using kernel tools(/sys/bus/pci/driver/new_id and
/sys/bus/pci/driver/bind)

The bind failure was due to cached driver name in 'driver_override'.
Fix it by writing 'null' to driver_override just after binding a
device so that any method of binding/unbinding can be used.

Fixes: 2fc350293570 ("usertools: use optimized driver override scheme to bind")

Reported-by: Lijuan A Tu <lijuanx.a.tu@intel.com>
Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
2017-04-30 15:28:01 +02:00
Guduri Prathyusha
80a1858db2 usertools: add mempool PCI functional device
Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-04-25 11:38:41 +02:00
Guduri Prathyusha
32a02dbf1f usertools: add eventdev PCI functional device
Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-04-25 11:36:32 +02:00
Guduri Prathyusha
8ad08a2879 usertools: define DPDK PCI functional device
This patch creates the framework to define the DPDK PCI functional
device by specifying the pci attributes like Vendor ID, Device ID,
Sub Vendor ID, Sub Device ID and Class.This enables a flexible way to
add DPDK function devices based on PCI attributes.

Crypto devices can belong to Encryption class(0x10) or Processor
class(0x0b) based on the vendor preference.

Using this framework, The above disparity can be encoded in the following
format

encryption_class = [{'Class': '10', 'Vendor': None,
                     'Device': None, 'SVendor': None, 'SDevice': None}]

intel_processor_class = [{'Class': '0b', 'Vendor': '8086', 'Device': None,
                    'SVendor': None, 'SDevice': None}]

crypto_devices = [encryption_class, intel_processor_class]

Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-04-25 11:36:11 +02:00
Guduri Prathyusha
2fc3502935 usertools: use optimized driver override scheme to bind
The current device bind model uses /sys/bus/pci/driver/new_id scheme to
bind devices to the driver. This scheme has following operations to bind
a device to the driver.
1) Write device ID and vendor ID to /sys/bus/pci/driver/new_id
2) Write PCI BDF number to /sys/bus/pci/driver/bind
3) On step (1), _All_ the devices that match the device ID and vendor ID
get bound to the driver
4) Except for requested devices, Unbind the remaining devices

In kernels >= 3.15, An alternative scheme driver_override can be used to
bind a device to driver.This scheme has following operations to bind a
device to driver.
1) Write driver to /sys/bus/pci/device/driver_override
2) Write PCI BDF number to /sys/bus/pci/driver/bind

This script detects the presence of /sys/bus/pci/device/driver_override,
if available use optimized bind scheme to bind it

Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-04-25 11:35:24 +02:00
Guduri Prathyusha
c3ce205d57 usertools: optimize lspci invocation
lspci invoked twice over all the pci devices in the system.
The first pass is to extract Numeric IDs and second pass to get extended
device details.

As an optimization, Used lspci with -nn option in get_device_details()
to obtain Numeric ID and extended device details in one shot.

In addition to this, After binding the PCI device, lspci needs to be
invoked again to confirm the proper bind operation. Used a boolean
argument to express this case in get_pci_device_details()

Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-04-25 11:33:59 +02:00
Guduri Prathyusha
c7dd412bef usertools: refactor binding status
Identified and parameterized the common code in show_status() function as
show_device_status().This will enable to avoid code duplication when
additional devices added to the script.

Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-04-25 11:33:09 +02:00
Guduri Prathyusha
ea9f00f728 usertools: refactor NIC and crypto binding details
get_nic_details() and get_crypto_details() shares a lot of common code.
Created a new unified get_device_details() function get the device details.

Signed-off-by: Guduri Prathyusha <gprathyusha@caviumnetworks.com>
Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-04-25 11:32:17 +02:00
Yoni Gilad
617d90527f usertools: fix active interface detection when binding
When adding crypto devices, the "Active" and "Ssh_if" attributes of
existing network devices were reset. This causes the following issues:

- Network interfaces aren't marked as "*Active*" in the --status output.
- Active network interfaces can be unbound without the --force option,
  causing loss of network connection.

The reset was caused by the call to devices[d].update in
get_crypto_details.

This patch prevents the update on non-crypto devices.

Fixes: cb4a1d14bf3e ("tools: bind crypto devices")
Cc: stable@dpdk.org

Signed-off-by: Yoni Gilad <yonig@radcom.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2017-01-30 17:30:21 +01:00
Thomas Monjalon
c6dab2a873 tools: move to usertools
Rename tools/ into usertools/ to differentiate from buildtools/
and devtools/ while making clear these scripts are part of
DPDK runtime.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
2017-01-04 21:17:32 +01:00