Skip to content

Commit a976835

Browse files
committed
Merge tag 'ntb-5.20' of https://github.com/jonmason/ntb
Pull NTB updates from Jon Mason: "Non-Transparent Bridge updates. Fix of heap data and clang warnings, support for a new Intel NTB device, and NTB EndPoint Function (EPF) support and the various fixes for that" * tag 'ntb-5.20' of https://github.com/jonmason/ntb: MAINTAINERS: add PCI Endpoint NTB drivers to NTB files NTB: EPF: Tidy up some bounds checks NTB: EPF: Fix error code in epf_ntb_bind() PCI: endpoint: pci-epf-vntb: reduce several globals to statics PCI: endpoint: pci-epf-vntb: fix error handle in epf_ntb_mw_bar_init() PCI: endpoint: Fix Kconfig dependency NTB: EPF: set pointer addr to null using NULL rather than 0 Documentation: PCI: extend subheading underline for "lspci output" section Documentation: PCI: Use code-block block for scratchpad registers diagram Documentation: PCI: Add specification for the PCI vNTB function device PCI: endpoint: Support NTB transfer between RC and EP NTB: epf: Allow more flexibility in the memory BAR map method PCI: designware-ep: Allow pci_epc_set_bar() update inbound map address ntb: intel: add GNR support for Intel PCIe gen5 NTB NTB: ntb_tool: uninitialized heap data in tool_fn_write() ntb: idt: fix clang -Wformat warnings
2 parents 9872e4a + e4fe2a2 commit a976835

File tree

14 files changed

+1822
-25
lines changed

14 files changed

+1822
-25
lines changed

Documentation/PCI/endpoint/index.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ PCI Endpoint Framework
1313
pci-test-howto
1414
pci-ntb-function
1515
pci-ntb-howto
16+
pci-vntb-function
17+
pci-vntb-howto
1618

1719
function/binding/pci-test
1820
function/binding/pci-ntb
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
=================
4+
PCI vNTB Function
5+
=================
6+
7+
:Author: Frank Li <Frank.Li@nxp.com>
8+
9+
The difference between PCI NTB function and PCI vNTB function is
10+
11+
PCI NTB function need at two endpoint instances and connect HOST1
12+
and HOST2.
13+
14+
PCI vNTB function only use one host and one endpoint(EP), use NTB
15+
connect EP and PCI host
16+
17+
.. code-block:: text
18+
19+
20+
+------------+ +---------------------------------------+
21+
| | | |
22+
+------------+ | +--------------+
23+
| NTB | | | NTB |
24+
| NetDev | | | NetDev |
25+
+------------+ | +--------------+
26+
| NTB | | | NTB |
27+
| Transfer | | | Transfer |
28+
+------------+ | +--------------+
29+
| | | | |
30+
| PCI NTB | | | |
31+
| EPF | | | |
32+
| Driver | | | PCI Virtual |
33+
| | +---------------+ | NTB Driver |
34+
| | | PCI EP NTB |<------>| |
35+
| | | FN Driver | | |
36+
+------------+ +---------------+ +--------------+
37+
| | | | | |
38+
| PCI BUS | <-----> | PCI EP BUS | | Virtual PCI |
39+
| | PCI | | | BUS |
40+
+------------+ +---------------+--------+--------------+
41+
PCI RC PCI EP
42+
43+
Constructs used for Implementing vNTB
44+
=====================================
45+
46+
1) Config Region
47+
2) Self Scratchpad Registers
48+
3) Peer Scratchpad Registers
49+
4) Doorbell (DB) Registers
50+
5) Memory Window (MW)
51+
52+
53+
Config Region:
54+
--------------
55+
56+
It is same as PCI NTB Function driver
57+
58+
Scratchpad Registers:
59+
---------------------
60+
61+
It is appended after Config region.
62+
63+
.. code-block:: text
64+
65+
66+
+--------------------------------------------------+ Base
67+
| |
68+
| |
69+
| |
70+
| Common Config Register |
71+
| |
72+
| |
73+
| |
74+
+-----------------------+--------------------------+ Base + span_offset
75+
| | |
76+
| Peer Span Space | Span Space |
77+
| | |
78+
| | |
79+
+-----------------------+--------------------------+ Base + span_offset
80+
| | | + span_count * 4
81+
| | |
82+
| Span Space | Peer Span Space |
83+
| | |
84+
+-----------------------+--------------------------+
85+
Virtual PCI Pcie Endpoint
86+
NTB Driver NTB Driver
87+
88+
89+
Doorbell Registers:
90+
-------------------
91+
92+
Doorbell Registers are used by the hosts to interrupt each other.
93+
94+
Memory Window:
95+
--------------
96+
97+
Actual transfer of data between the two hosts will happen using the
98+
memory window.
99+
100+
Modeling Constructs:
101+
====================
102+
103+
32-bit BARs.
104+
105+
====== ===============
106+
BAR NO CONSTRUCTS USED
107+
====== ===============
108+
BAR0 Config Region
109+
BAR1 Doorbell
110+
BAR2 Memory Window 1
111+
BAR3 Memory Window 2
112+
BAR4 Memory Window 3
113+
BAR5 Memory Window 4
114+
====== ===============
115+
116+
64-bit BARs.
117+
118+
====== ===============================
119+
BAR NO CONSTRUCTS USED
120+
====== ===============================
121+
BAR0 Config Region + Scratchpad
122+
BAR1
123+
BAR2 Doorbell
124+
BAR3
125+
BAR4 Memory Window 1
126+
BAR5
127+
====== ===============================
128+
129+
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
===================================================================
4+
PCI Non-Transparent Bridge (NTB) Endpoint Function (EPF) User Guide
5+
===================================================================
6+
7+
:Author: Frank Li <Frank.Li@nxp.com>
8+
9+
This document is a guide to help users use pci-epf-vntb function driver
10+
and ntb_hw_epf host driver for NTB functionality. The list of steps to
11+
be followed in the host side and EP side is given below. For the hardware
12+
configuration and internals of NTB using configurable endpoints see
13+
Documentation/PCI/endpoint/pci-vntb-function.rst
14+
15+
Endpoint Device
16+
===============
17+
18+
Endpoint Controller Devices
19+
---------------------------
20+
21+
To find the list of endpoint controller devices in the system::
22+
23+
# ls /sys/class/pci_epc/
24+
5f010000.pcie_ep
25+
26+
If PCI_ENDPOINT_CONFIGFS is enabled::
27+
28+
# ls /sys/kernel/config/pci_ep/controllers
29+
5f010000.pcie_ep
30+
31+
Endpoint Function Drivers
32+
-------------------------
33+
34+
To find the list of endpoint function drivers in the system::
35+
36+
# ls /sys/bus/pci-epf/drivers
37+
pci_epf_ntb pci_epf_test pci_epf_vntb
38+
39+
If PCI_ENDPOINT_CONFIGFS is enabled::
40+
41+
# ls /sys/kernel/config/pci_ep/functions
42+
pci_epf_ntb pci_epf_test pci_epf_vntb
43+
44+
45+
Creating pci-epf-vntb Device
46+
----------------------------
47+
48+
PCI endpoint function device can be created using the configfs. To create
49+
pci-epf-vntb device, the following commands can be used::
50+
51+
# mount -t configfs none /sys/kernel/config
52+
# cd /sys/kernel/config/pci_ep/
53+
# mkdir functions/pci_epf_vntb/func1
54+
55+
The "mkdir func1" above creates the pci-epf-ntb function device that will
56+
be probed by pci_epf_vntb driver.
57+
58+
The PCI endpoint framework populates the directory with the following
59+
configurable fields::
60+
61+
# ls functions/pci_epf_ntb/func1
62+
baseclass_code deviceid msi_interrupts pci-epf-ntb.0
63+
progif_code secondary subsys_id vendorid
64+
cache_line_size interrupt_pin msix_interrupts primary
65+
revid subclass_code subsys_vendor_id
66+
67+
The PCI endpoint function driver populates these entries with default values
68+
when the device is bound to the driver. The pci-epf-vntb driver populates
69+
vendorid with 0xffff and interrupt_pin with 0x0001::
70+
71+
# cat functions/pci_epf_vntb/func1/vendorid
72+
0xffff
73+
# cat functions/pci_epf_vntb/func1/interrupt_pin
74+
0x0001
75+
76+
77+
Configuring pci-epf-vntb Device
78+
-------------------------------
79+
80+
The user can configure the pci-epf-vntb device using its configfs entry. In order
81+
to change the vendorid and the deviceid, the following
82+
commands can be used::
83+
84+
# echo 0x1957 > functions/pci_epf_vntb/func1/vendorid
85+
# echo 0x0809 > functions/pci_epf_vntb/func1/deviceid
86+
87+
In order to configure NTB specific attributes, a new sub-directory to func1
88+
should be created::
89+
90+
# mkdir functions/pci_epf_vntb/func1/pci_epf_vntb.0/
91+
92+
The NTB function driver will populate this directory with various attributes
93+
that can be configured by the user::
94+
95+
# ls functions/pci_epf_vntb/func1/pci_epf_vntb.0/
96+
db_count mw1 mw2 mw3 mw4 num_mws
97+
spad_count
98+
99+
A sample configuration for NTB function is given below::
100+
101+
# echo 4 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/db_count
102+
# echo 128 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/spad_count
103+
# echo 1 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/num_mws
104+
# echo 0x100000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw1
105+
106+
A sample configuration for virtual NTB driver for virutal PCI bus::
107+
108+
# echo 0x1957 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vntb_vid
109+
# echo 0x080A > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vntb_pid
110+
# echo 0x10 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vbus_number
111+
112+
Binding pci-epf-ntb Device to EP Controller
113+
--------------------------------------------
114+
115+
NTB function device should be attached to PCI endpoint controllers
116+
connected to the host.
117+
118+
# ln -s controllers/5f010000.pcie_ep functions/pci-epf-ntb/func1/primary
119+
120+
Once the above step is completed, the PCI endpoint controllers are ready to
121+
establish a link with the host.
122+
123+
124+
Start the Link
125+
--------------
126+
127+
In order for the endpoint device to establish a link with the host, the _start_
128+
field should be populated with '1'. For NTB, both the PCI endpoint controllers
129+
should establish link with the host (imx8 don't need this steps)::
130+
131+
# echo 1 > controllers/5f010000.pcie_ep/start
132+
133+
RootComplex Device
134+
==================
135+
136+
lspci Output at Host side
137+
-------------------------
138+
139+
Note that the devices listed here correspond to the values populated in
140+
"Creating pci-epf-ntb Device" section above::
141+
142+
# lspci
143+
00:00.0 PCI bridge: Freescale Semiconductor Inc Device 0000 (rev 01)
144+
01:00.0 RAM memory: Freescale Semiconductor Inc Device 0809
145+
146+
Endpoint Device / Virtual PCI bus
147+
=================================
148+
149+
lspci Output at EP Side / Virtual PCI bus
150+
-----------------------------------------
151+
152+
Note that the devices listed here correspond to the values populated in
153+
"Creating pci-epf-ntb Device" section above::
154+
155+
# lspci
156+
10:00.0 Unassigned class [ffff]: Dawicontrol Computersysteme GmbH Device 1234 (rev ff)
157+
158+
Using ntb_hw_epf Device
159+
-----------------------
160+
161+
The host side software follows the standard NTB software architecture in Linux.
162+
All the existing client side NTB utilities like NTB Transport Client and NTB
163+
Netdev, NTB Ping Pong Test Client and NTB Tool Test Client can be used with NTB
164+
function device.
165+
166+
For more information on NTB see
167+
:doc:`Non-Transparent Bridge <../../driver-api/ntb>`

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14468,6 +14468,7 @@ W: https://github.com/jonmason/ntb/wiki
1446814468
T: git git://github.com/jonmason/ntb.git
1446914469
F: drivers/net/ntb_netdev.c
1447014470
F: drivers/ntb/
14471+
F: drivers/pci/endpoint/functions/pci-epf-*ntb.c
1447114472
F: include/linux/ntb.h
1447214473
F: include/linux/ntb_transport.h
1447314474
F: tools/testing/selftests/ntb/

0 commit comments

Comments
 (0)