summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2017-09-11 18:48:09 +0000
committermav <mav@FreeBSD.org>2017-09-11 18:48:09 +0000
commit79bc7bdebf65dc6c94762a67a84d7166c610c85f (patch)
tree543e0555bc10384cf228c379926774fef20f6f6a /share
parent4356bd3ccae287c6a7c1be25ae8ac4ed6559cbbb (diff)
downloadFreeBSD-src-79bc7bdebf65dc6c94762a67a84d7166c610c85f.zip
FreeBSD-src-79bc7bdebf65dc6c94762a67a84d7166c610c85f.tar.gz
MFC r323032, r323053, r323058, r323059, r323084, r323114, r323127:
Add NTB driver for PLX/Avago/Broadcom PCIe switches. This driver supports both NTB-to-NTB and NTB-to-Root Port modes (though the second with predictable complications on hot-plug and reboot events). I tested it with PEX 8717 and PEX 8733 chips, but expect it should work with many other compatible ones too. It supports up to two NT bridges per chip, each of which can have up to 2 64-bit or 4 32-bit memory windows, 6 or 12 scratchpad registers and 16 doorbells. There are also 4 DMA engines in those chips, but they are not yet supported. While there, rename Intel NTB driver from generic ntb_hw(4) to more specific ntb_hw_intel(4), so now it is on par with this new ntb_hw_plx(4) driver and alike to Linux naming.
Diffstat (limited to 'share')
-rw-r--r--share/man/man4/Makefile8
-rw-r--r--share/man/man4/if_ntb.416
-rw-r--r--share/man/man4/ntb.491
-rw-r--r--share/man/man4/ntb_hw_intel.4 (renamed from share/man/man4/ntb_hw.4)66
-rw-r--r--share/man/man4/ntb_hw_plx.4118
-rw-r--r--share/man/man4/ntb_transport.447
6 files changed, 280 insertions, 66 deletions
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 86bdc37..1a92920 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -383,7 +383,9 @@ MAN= aac.4 \
ng_vlan.4 \
nmdm.4 \
nsp.4 \
- ${_ntb_hw.4} \
+ ${_ntb.4} \
+ ${_ntb_hw_intel.4} \
+ ${_ntb_hw_plx.4} \
${_ntb_transport.4} \
${_if_ntb.4} \
null.4 \
@@ -707,7 +709,6 @@ MLINKS+=netintro.4 net.4 \
netintro.4 networking.4
MLINKS+=${_nfe.4} ${_if_nfe.4}
MLINKS+=nge.4 if_nge.4
-MLINKS+=${_ntb_hw.4} ${_ntb.4}
MLINKS+=${_nxge.4} ${_if_nxge.4}
MLINKS+=ow.4 onewire.4
MLINKS+=patm.4 if_patm.4
@@ -853,7 +854,8 @@ _xnb.4= xnb.4
_if_ntb.4= if_ntb.4
_ioat.4= ioat.4
_ntb.4= ntb.4
-_ntb_hw.4= ntb_hw.4
+_ntb_hw_intel.4= ntb_hw_intel.4
+_ntb_hw_plx.4= ntb_hw_plx.4
_ntb_transport.4=ntb_transport.4
_qlxge.4= qlxge.4
_qlxgb.4= qlxgb.4
diff --git a/share/man/man4/if_ntb.4 b/share/man/man4/if_ntb.4
index 6f52d77..5629eb4 100644
--- a/share/man/man4/if_ntb.4
+++ b/share/man/man4/if_ntb.4
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 29, 2016
+.Dd September 2, 2017
.Dt IF_NTB 4
.Os
.Sh NAME
@@ -35,6 +35,8 @@
To compile this driver into your kernel,
place the following lines in your kernel configuration file:
.Bd -ragged -offset indent
+.Cd "device ntb"
+.Cd "device ntb_transport"
.Cd "device if_ntb"
.Ed
.Pp
@@ -48,7 +50,7 @@ The following tunables are settable from the
.Xr loader 8 :
.Bl -ohang
.It Va hw.if_ntb.num_queues
-Number of transport queues to use per interface.
+Limits maximal number of queues per interface.
Default is unlimited.
.El
.Sh DESCRIPTION
@@ -56,12 +58,10 @@ The
.Nm
driver attaches on top of the
.Xr ntb_transport 4
-driver to utilize its resources to create virtual Ethernet interface between
-the systems.
-Interface capabilities depend on the underlying transport.
-Typical MTU is about 64KB to reduce overhead.
-By default one queue is used, but more may be configured.
-The MAC address for interface is randomly generated.
+driver to utilize one or more of its packet queues to create virtual
+Ethernet network interface between the systems.
+Typical MTU for the interface is about 64KB to reduce overhead.
+Default MAC address for the interface is randomly generated.
.Pp
The
.Nm
diff --git a/share/man/man4/ntb.4 b/share/man/man4/ntb.4
new file mode 100644
index 0000000..598852d
--- /dev/null
+++ b/share/man/man4/ntb.4
@@ -0,0 +1,91 @@
+.\"
+.\" Copyright (c) 2017 Alexander Motin <mav@FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd September 2, 2017
+.Dt NTB 4
+.Os
+.Sh NAME
+.Nm ntb
+.Nd Non-Transparent Bridge subsystem
+.Sh SYNOPSIS
+To compile it into your kernel,
+place the following lines in your kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device ntb"
+.Ed
+.Pp
+Or, to load it as a module at boot, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+ntb_load="YES"
+.Ed
+.Pp
+The following tunables are settable from the
+.Xr loader 8 :
+.Bl -ohang
+.It Va hw.ntb.debug_level
+Driver debug level.
+The default value is 0, higher means more verbose.
+.It Va hint.ntb_hw. Ns Ar X Ns Va .config
+Configures a set of NTB functions, separated by commas,
+and their resource allocation.
+Each function can be configured as: "[<name>][:<mw>[:<spad>[:<db>]]]", where:
+.Va name
+is a name of the driver to attach (empty means any),
+.Va mw
+is a number of memory windows to allocate (empty means all available),
+.Va spad
+is a number of scratchpad registers to allocate (empty means all available),
+.Va db
+is a number of doorbells to allocate (empty means all available).
+The default configuration is empty string, which means single function
+with all available resources, allowing any driver to attach.
+.El
+.Sh DESCRIPTION
+Non-Transparent Bridges allow to connect two computer systems with PCIe
+link(s), providing each of them limited access to others memory space,
+scratchpad registers and interrupts.
+The
+.Nm
+subsystem uses those resources provided in generic way by hardware drivers
+and splits them between several functions, according to specified
+configuration.
+.Sh SEE ALSO
+.Xr if_ntb 4 ,
+.Xr ntb_transport 4 ,
+.Xr ntb_hw_intel 4 ,
+.Xr ntb_hw_plx 4
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+subsystem was developed by Intel and originally written by
+.An Carl Delsey Aq Mt carl@FreeBSD.org .
+Later improvements were done by
+.An Conrad E. Meyer Aq Mt cem@FreeBSD.org
+and
+.An Alexander Motin Aq Mt mav@FreeBSD.org .
diff --git a/share/man/man4/ntb_hw.4 b/share/man/man4/ntb_hw_intel.4
index b6dffce..423dc96 100644
--- a/share/man/man4/ntb_hw.4
+++ b/share/man/man4/ntb_hw_intel.4
@@ -1,5 +1,5 @@
.\"
-.\" Copyright (c) 2016 Alexander Motin <mav@FreeBSD.org>
+.\" Copyright (c) 2016-2017 Alexander Motin <mav@FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -25,66 +25,45 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 28, 2016
-.Dt NTB_HW 4
+.Dd August 30, 2017
+.Dt NTB_HW_INTEL 4
.Os
.Sh NAME
-.Nm ntb ,
-.Nm ntb_hw
+.Nm ntb_hw_intel
.Nd Intel(R) Non-Transparent Bridge driver
.Sh SYNOPSIS
To compile this driver into your kernel,
place the following lines in your kernel configuration file:
.Bd -ragged -offset indent
-.Cd "device ntb_hw"
+.Cd "device ntb"
+.Cd "device ntb_hw_intel"
.Ed
.Pp
Or, to load the driver as a module at boot, place the following line in
.Xr loader.conf 5 :
.Bd -literal -offset indent
-ntb_hw_load="YES"
+ntb_hw_intel_load="YES"
.Ed
-.Pp
-The following tunables are settable from the
-.Xr loader 8 :
-.Bl -ohang
-.It Va hw.ntb.debug_level
-Driver debug level.
-The default value is 0, higher means more verbose.
-.It Va hint.ntb_hw. Ns Ar X Ns Va .config
-Configures NTB resources split between several consumer devices.
-Configuration of multiple consumer devices separated by commas.
-Each device can be configured as: "<name>[:<mw>[:<spad>[:<db>]]]", where:
-.Va name
-is a name of the driver which should attach the device (empty means any),
-.Va mw
-is a number of memory windows to allocate (empty means all available),
-.Va spad
-is a number of scratchpad registers to allocate (empty means all available),
-.Va db
-is a number of doorbells to allocate (empty means all available).
-The default configuration is empty string, which means single device
-with all available resources allowing any driver attachment.
-.El
.Sh DESCRIPTION
-The NTB allows you to connect two computer systems using a PCIe link if they
-have the correct equipment and connectors.
-The
-.Nm ntb_hw
-driver provides support for the Non-Transparent Bridge (NTB) in the Intel S1200
-and Xeon E3/E5 processor families.
The
-.Nm
-driver hides hardware details, exposing memory windows, scratchpads and
-doorbells via hardware independent KPI.
+.Nm ntb_hw_intel
+driver provides support for the Non-Transparent Bridge (NTB) hardware in
+Intel Xeon E3/E5 and S1200 processor families, which allow one of their PCIe
+ports to be switched from transparent to non-transparent bridge mode.
+In this mode bridge looks not as a PCI bridge, but as PCI endpoint device.
+The driver hides hardware details, exposing memory windows, scratchpads
+and doorbells of the other side via hardware independent KPI to
+.Xr ntb 4
+subsystem.
.Pp
-The hardware provides 2-3 memory windows to the other system's memory,
-16 scratchpad registers and 14/34 doorbells to interrupt the other system.
+The hardware provides 2 or 3 memory windows to the other system's memory,
+16 scratchpad registers and 14 or 34 doorbells to interrupt the other system.
On Xeon processors one of memory windows is typically consumed by the driver
-to workaround multiple hardware erratas.
+itself to workaround multiple hardware erratas.
.Sh CONFIGURATION
The NTB configuration should be set by BIOS.
-It includes enabling NTB, choosing between NTB-to-NTB or NTB-to-Root Port mode,
+It includes enabling NTB, choosing between NTB-to-NTB (back-to-back) or
+NTB-to-Root Port mode,
enabling split BAR mode (one of two 64-bit BARs can be split into two 32-bit
ones) and configuring BAR sizes in bits (from 12 to 29/39) for both NTB sides.
.Pp
@@ -92,8 +71,9 @@ The recommended configuration is NTB-to-NTB mode, split bar is enabled and
all BAR sizes are set to 20 (1 MiB).
This needs to be done on both systems.
.Sh SEE ALSO
+.Xr if_ntb 4 ,
.Xr ntb_transport 4 ,
-.Xr if_ntb 4
+.Xr ntb 4 ,
.Sh AUTHORS
.An -nosplit
The
diff --git a/share/man/man4/ntb_hw_plx.4 b/share/man/man4/ntb_hw_plx.4
new file mode 100644
index 0000000..54500a1
--- /dev/null
+++ b/share/man/man4/ntb_hw_plx.4
@@ -0,0 +1,118 @@
+.\"
+.\" Copyright (c) 2017 Alexander Motin <mav@FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd August 30, 2017
+.Dt NTB_HW_PLX 4
+.Os
+.Sh NAME
+.Nm ntb_hw_plx
+.Nd PLX/Avago/Broadcom Non-Transparent Bridge driver
+.Sh SYNOPSIS
+To compile this driver into your kernel,
+place the following lines in your kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device ntb"
+.Cd "device ntb_hw_plx"
+.Ed
+.Pp
+Or, to load the driver as a module at boot, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+ntb_hw_plx_load="YES"
+.Ed
+.Pp
+The following tunables are settable from the
+.Xr loader 8 :
+.Bl -ohang
+.It Va hint.ntb_hw. Ns Ar X Ns Va .b2b
+Being set to 1 (default) tells the driver attached to Virtual Interface of the
+NTB that it works in NTB-to-NTB (back-to-back) mode, 0 -- NTB-to-Root Port.
+Driver attached to Link Interface (visible from Root Port side) switches to
+NTB-to-Root Port mode automatically, but one attached to Virtual Interface
+can't detect what is on the other side and require external knowledge.
+.El
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for the Non-Transparent Bridge (NTB) hardware in
+PLX PCIe bridge chips, which allow up to two of their PCIe ports to be
+switched from transparent to non-transparent bridge mode.
+In this mode bridge looks not as a PCI bridge, but as PCI endpoint device.
+The driver hides hardware details, exposing memory windows, scratchpads
+and doorbells of the other side via hardware independent KPI to
+.Xr ntb 4
+subsystem.
+.Pp
+Each PLX NTB provides up to 2 64-bit or 4 32-bit memory windows to the
+other system's memory, 6 or 12 scratchpad registers and 16 doorbells to
+interrupt the other system.
+In NTB-to-NTB mode one of memory windows (or half of it, if bigger then 1MB)
+is consumed by the driver itself to access scratchpad and doorbell registers
+of the other side.
+.Sh HARDWARE
+The following PLX/Avago/Broadcom chips are supported by the
+.Nm
+driver:
+.Pp
+.Bl -bullet -compact
+.It
+PEX 8713
+.It
+PEX 8717
+.It
+PEX 8725
+.It
+PEX 8733
+.It
+PEX 8749
+.El
+.Pp
+, but it may also work with other compatible ones.
+.Sh CONFIGURATION
+The basic chip configuration should be done by serial EEPROM or via i2c.
+It includes enabling NTB on one or both sides (choosing between NTB-to-NTB
+(back-to-back) and NTB-to-Root Port modes) and configuring BARs sizes.
+.Pp
+The recommended mode is NTB-to-NTB mode, since while NTB-to-Root Port is
+generally supported by the driver, it require PCI hotplug handling on the
+Root Port, that may be difficult or cause different kinds of problems.
+.Sh SEE ALSO
+.Xr if_ntb 4 ,
+.Xr ntb_transport 4 ,
+.Xr ntb 4 ,
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Alexander Motin Aq Mt mav@FreeBSD.org .
+.Sh BUGS
+There is no way to protect your system from malicious behavior on the other
+system once the link is brought up.
+Anyone with root or kernel access on the other system can read or write to
+any location on your system.
+In other words, only connect two systems that completely trust each other.
diff --git a/share/man/man4/ntb_transport.4 b/share/man/man4/ntb_transport.4
index 43b412c..ef12b2a 100644
--- a/share/man/man4/ntb_transport.4
+++ b/share/man/man4/ntb_transport.4
@@ -1,5 +1,5 @@
.\"
-.\" Copyright (c) 2016 Alexander Motin <mav@FreeBSD.org>
+.\" Copyright (c) 2016-2017 Alexander Motin <mav@FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -25,14 +25,21 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 29, 2016
+.Dd September 2, 2017
.Dt NTB_TRANSPORT 4
.Os
.Sh NAME
.Nm ntb_transport
.Nd Packet-oriented transport for Non-Transparent Bridges
.Sh SYNOPSIS
-To load the driver as a module at boot, place the following line in
+To compile this driver into your kernel,
+place the following lines in your kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device ntb"
+.Cd "device ntb_transport"
+.Ed
+.Pp
+Or, to load the driver as a module at boot, place the following line in
.Xr loader.conf 5 :
.Bd -literal -offset indent
ntb_transport_load="YES"
@@ -45,28 +52,44 @@ The following tunables are settable from the
Driver debug level.
The default value is 0, higher means more verbose.
.It Va hint.ntb_transport. Ns Ar X Ns Va .config
-Configures queues allocation for consumer devices, separated by commas.
-Each device can be configured as: "<name>[:<queues>]", where:
+Configures a set of the transport consumers, separated by commas.
+Each consumer can be configured as: "[<name>][:<queues>]", where:
.Va name
-is a name of the driver which should attach the device (empty means any),
+is a name of the driver to attach (empty means any),
.Va queues
-is a number of queues to allocate (empty means automatic),
-The default configuration is empty string, which means single device
-with one queue per memory window allowing any driver attachment.
+is a number of queues to allocate (empty means automatic).
+The default configuration is empty string, which means single consumer
+with one queue per memory window, allowing any driver to attach.
.El
.Sh DESCRIPTION
The
.Nm
driver attaches on top of the
.Nm ntb
-driver to utilize its resources to create set of bidirectional queues,
+driver to utilize its resources to create a set of bidirectional queues,
delivering packets between the systems.
-The primary purpose of this is to be used by
+The primary purpose of this driver is to be used by
.Nm if_ntb
network interface, but other consumers may also be developed using KPI.
+.Pp
+Each
+.Nm
+require from underlying
+.Nm ntb
+instance:
+.Bl -bullet -compact
+.It
+1 or more memory windows;
+.It
+6 scratchpads, plus 2 more for each additional memory window;
+.It
+1 doorbell for each memory window or configured queue.
+.El
.Sh SEE ALSO
.Xr if_ntb 4 ,
-.Xr ntb_hw 4
+.Xr ntb 4 ,
+.Xr ntb_hw_intel 4 ,
+.Xr ntb_hw_plx 4
.Sh AUTHORS
.An -nosplit
The
OpenPOWER on IntegriCloud