Back to home page

OSCL-LXR

 
 

    


0001 .. SPDX-License-Identifier: GPL-2.0
0002 
0003 ===================================================================
0004 PCI Non-Transparent Bridge (NTB) Endpoint Function (EPF) User Guide
0005 ===================================================================
0006 
0007 :Author: Kishon Vijay Abraham I <kishon@ti.com>
0008 
0009 This document is a guide to help users use pci-epf-ntb function driver
0010 and ntb_hw_epf host driver for NTB functionality. The list of steps to
0011 be followed in the host side and EP side is given below. For the hardware
0012 configuration and internals of NTB using configurable endpoints see
0013 Documentation/PCI/endpoint/pci-ntb-function.rst
0014 
0015 Endpoint Device
0016 ===============
0017 
0018 Endpoint Controller Devices
0019 ---------------------------
0020 
0021 For implementing NTB functionality at least two endpoint controller devices
0022 are required.
0023 
0024 To find the list of endpoint controller devices in the system::
0025 
0026         # ls /sys/class/pci_epc/
0027         2900000.pcie-ep  2910000.pcie-ep
0028 
0029 If PCI_ENDPOINT_CONFIGFS is enabled::
0030 
0031         # ls /sys/kernel/config/pci_ep/controllers
0032         2900000.pcie-ep  2910000.pcie-ep
0033 
0034 
0035 Endpoint Function Drivers
0036 -------------------------
0037 
0038 To find the list of endpoint function drivers in the system::
0039 
0040         # ls /sys/bus/pci-epf/drivers
0041         pci_epf_ntb   pci_epf_ntb
0042 
0043 If PCI_ENDPOINT_CONFIGFS is enabled::
0044 
0045         # ls /sys/kernel/config/pci_ep/functions
0046         pci_epf_ntb   pci_epf_ntb
0047 
0048 
0049 Creating pci-epf-ntb Device
0050 ----------------------------
0051 
0052 PCI endpoint function device can be created using the configfs. To create
0053 pci-epf-ntb device, the following commands can be used::
0054 
0055         # mount -t configfs none /sys/kernel/config
0056         # cd /sys/kernel/config/pci_ep/
0057         # mkdir functions/pci_epf_ntb/func1
0058 
0059 The "mkdir func1" above creates the pci-epf-ntb function device that will
0060 be probed by pci_epf_ntb driver.
0061 
0062 The PCI endpoint framework populates the directory with the following
0063 configurable fields::
0064 
0065         # ls functions/pci_epf_ntb/func1
0066         baseclass_code    deviceid          msi_interrupts    pci-epf-ntb.0
0067         progif_code       secondary         subsys_id         vendorid
0068         cache_line_size   interrupt_pin     msix_interrupts   primary
0069         revid             subclass_code     subsys_vendor_id
0070 
0071 The PCI endpoint function driver populates these entries with default values
0072 when the device is bound to the driver. The pci-epf-ntb driver populates
0073 vendorid with 0xffff and interrupt_pin with 0x0001::
0074 
0075         # cat functions/pci_epf_ntb/func1/vendorid
0076         0xffff
0077         # cat functions/pci_epf_ntb/func1/interrupt_pin
0078         0x0001
0079 
0080 
0081 Configuring pci-epf-ntb Device
0082 -------------------------------
0083 
0084 The user can configure the pci-epf-ntb device using its configfs entry. In order
0085 to change the vendorid and the deviceid, the following
0086 commands can be used::
0087 
0088         # echo 0x104c > functions/pci_epf_ntb/func1/vendorid
0089         # echo 0xb00d > functions/pci_epf_ntb/func1/deviceid
0090 
0091 In order to configure NTB specific attributes, a new sub-directory to func1
0092 should be created::
0093 
0094         # mkdir functions/pci_epf_ntb/func1/pci_epf_ntb.0/
0095 
0096 The NTB function driver will populate this directory with various attributes
0097 that can be configured by the user::
0098 
0099         # ls functions/pci_epf_ntb/func1/pci_epf_ntb.0/
0100         db_count    mw1         mw2         mw3         mw4         num_mws
0101         spad_count
0102 
0103 A sample configuration for NTB function is given below::
0104 
0105         # echo 4 > functions/pci_epf_ntb/func1/pci_epf_ntb.0/db_count
0106         # echo 128 > functions/pci_epf_ntb/func1/pci_epf_ntb.0/spad_count
0107         # echo 2 > functions/pci_epf_ntb/func1/pci_epf_ntb.0/num_mws
0108         # echo 0x100000 > functions/pci_epf_ntb/func1/pci_epf_ntb.0/mw1
0109         # echo 0x100000 > functions/pci_epf_ntb/func1/pci_epf_ntb.0/mw2
0110 
0111 Binding pci-epf-ntb Device to EP Controller
0112 --------------------------------------------
0113 
0114 NTB function device should be attached to two PCI endpoint controllers
0115 connected to the two hosts. Use the 'primary' and 'secondary' entries
0116 inside NTB function device to attach one PCI endpoint controller to
0117 primary interface and the other PCI endpoint controller to the secondary
0118 interface::
0119 
0120         # ln -s controllers/2900000.pcie-ep/ functions/pci-epf-ntb/func1/primary
0121         # ln -s controllers/2910000.pcie-ep/ functions/pci-epf-ntb/func1/secondary
0122 
0123 Once the above step is completed, both the PCI endpoint controllers are ready to
0124 establish a link with the host.
0125 
0126 
0127 Start the Link
0128 --------------
0129 
0130 In order for the endpoint device to establish a link with the host, the _start_
0131 field should be populated with '1'. For NTB, both the PCI endpoint controllers
0132 should establish link with the host::
0133 
0134         # echo 1 > controllers/2900000.pcie-ep/start
0135         # echo 1 > controllers/2910000.pcie-ep/start
0136 
0137 
0138 RootComplex Device
0139 ==================
0140 
0141 lspci Output
0142 ------------
0143 
0144 Note that the devices listed here correspond to the values populated in
0145 "Creating pci-epf-ntb Device" section above::
0146 
0147         # lspci
0148         0000:00:00.0 PCI bridge: Texas Instruments Device b00d
0149         0000:01:00.0 RAM memory: Texas Instruments Device b00d
0150 
0151 
0152 Using ntb_hw_epf Device
0153 -----------------------
0154 
0155 The host side software follows the standard NTB software architecture in Linux.
0156 All the existing client side NTB utilities like NTB Transport Client and NTB
0157 Netdev, NTB Ping Pong Test Client and NTB Tool Test Client can be used with NTB
0158 function device.
0159 
0160 For more information on NTB see
0161 :doc:`Non-Transparent Bridge <../../driver-api/ntb>`