aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorAlistair Popple <alistair@popple.id.au>2015-10-29 14:12:30 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-11-12 16:37:26 +1100
commit03c6c2de0a0bb8d553d2d1c87f266d43610a0532 (patch)
tree865b95f6f005a1fedda016e044379635e9e7212f /doc
parent5adf85d444b9818ad3f85f32b256c4015cccb56c (diff)
downloadskiboot-03c6c2de0a0bb8d553d2d1c87f266d43610a0532.zip
skiboot-03c6c2de0a0bb8d553d2d1c87f266d43610a0532.tar.gz
skiboot-03c6c2de0a0bb8d553d2d1c87f266d43610a0532.tar.bz2
Add Nvlink documentation including device tree bindings
Signed-off-by: Alistair Popple <alistair@popple.id.au> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'doc')
-rw-r--r--doc/device-tree/nvlink.txt137
-rw-r--r--doc/nvlink.txt146
2 files changed, 283 insertions, 0 deletions
diff --git a/doc/device-tree/nvlink.txt b/doc/device-tree/nvlink.txt
new file mode 100644
index 0000000..70e9545
--- /dev/null
+++ b/doc/device-tree/nvlink.txt
@@ -0,0 +1,137 @@
+===========================
+Nvlink Device Tree Bindings
+===========================
+
+See doc/nvlink.txt for general Nvlink information.
+
+NPU bindings:
+
+xscom@3fc0000000000 {
+ npu@8013c00 {
+ reg = <0x8013c00 0x2c>;
+ compatible = "ibm,power8-npu";
+ ibm,npu-index = <0x0>;
+ ibm,npu-links = <0x4>;
+
+; Number of links wired up to this npu.
+
+ phandle = <0x100002bc>;
+ linux,phandle = <0x100002bc>;
+
+ link@0 {
+ ibm,npu-pbcq = <0x1000000b>;
+
+; phandle to the pbcq which connects to the GPU.
+
+ ibm,npu-phy = <0x80000000 0x8010c3f>;
+
+; SCOM address of the IBM PHY controlling this link.
+
+ compatible = "ibm,npu-link";
+ ibm,npu-lane-mask = <0xff>;
+
+; Mask specifying which IBM PHY lanes are used for this link.
+
+ phandle = <0x100002bd>;
+ ibm,npu-link-index = <0x0>;
+
+; Hardware link index. Naples systems contain links at index 0,1,4 & 5.
+; Used to calculate various address offsets.
+
+ linux,phandle = <0x100002bd>;
+ };
+
+ link@1 {
+ ibm,npu-pbcq = <0x1000000b>;
+ ibm,npu-phy = <0x80000000 0x8010c3f>;
+ compatible = "ibm,npu-link";
+ ibm,npu-lane-mask = <0xff00>;
+ phandle = <0x100002be>;
+ ibm,npu-link-index = <0x1>;
+ linux,phandle = <0x100002be>;
+ };
+
+ link@4 {
+ ibm,npu-pbcq = <0x1000000a>;
+ ibm,npu-phy = <0x80000000 0x8010c7f>;
+ compatible = "ibm,npu-link";
+ ibm,npu-lane-mask = <0xff00>;
+ phandle = <0x100002bf>;
+ ibm,npu-link-index = <0x4>;
+ linux,phandle = <0x100002bf>;
+ };
+
+ link@5 {
+ ibm,npu-pbcq = <0x1000000a>;
+ ibm,npu-phy = <0x80000000 0x8010c7f>;
+ compatible = "ibm,npu-link";
+ ibm,npu-lane-mask = <0xff>;
+ phandle = <0x100002c0>;
+ ibm,npu-link-index = <0x5>;
+ linux,phandle = <0x100002c0>;
+ };
+ };
+};
+
+Emulated PCI device bindings:
+
+ pciex@3fff000400000 {
+ ibm,npcq = <0x100002bc>;
+
+; phandle to the NPU node. Used to find associated PCI GPU devices.
+
+ compatible = "ibm,power8-npu-pciex", "ibm,ioda2-npu-phb";
+
+ pci@0 {
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ revision-id = <0x0>;
+ interrupts = <0x1>;
+ device-id = <0x4ea>;
+ ibm,pci-config-space-type = <0x1>;
+ vendor-id = <0x1014>;
+ ibm,gpu = <0x100002f7>;
+
+; phandle pointing the associated GPU PCI device node
+
+ phandle = <0x100002fc>;
+ };
+
+ pci@1 {
+ reg = <0x800 0x0 0x0 0x0 0x0>;
+ revision-id = <0x0>;
+ interrupts = <0x1>;
+ device-id = <0x4ea>;
+ ibm,pci-config-space-type = <0x1>;
+ vendor-id = <0x1014>;
+ ibm,gpu = <0x100002f5>;
+ phandle = <0x100002fe>;
+ class-code = <0x60400>;
+ linux,phandle = <0x100002fe>;
+ };
+
+ pci@0,1 {
+ reg = <0x100 0x0 0x0 0x0 0x0>;
+ revision-id = <0x0>;
+ interrupts = <0x2>;
+ device-id = <0x4ea>;
+ ibm,pci-config-space-type = <0x1>;
+ vendor-id = <0x1014>;
+ ibm,gpu = <0x100002f7>;
+ phandle = <0x100002fd>;
+ class-code = <0x60400>;
+ linux,phandle = <0x100002fd>;
+ };
+
+ pci@1,1 {
+ reg = <0x900 0x0 0x0 0x0 0x0>;
+ revision-id = <0x0>;
+ interrupts = <0x2>;
+ device-id = <0x4ea>;
+ ibm,pci-config-space-type = <0x1>;
+ vendor-id = <0x1014>;
+ ibm,gpu = <0x100002f5>;
+ phandle = <0x100002ff>;
+ class-code = <0x60400>;
+ linux,phandle = <0x100002ff>;
+ };
+ };
diff --git a/doc/nvlink.txt b/doc/nvlink.txt
new file mode 100644
index 0000000..5673de4
--- /dev/null
+++ b/doc/nvlink.txt
@@ -0,0 +1,146 @@
+OPAL/Skiboot Nvlink Interface Documentation
+----------------------------------------------------------------------
+
+========
+Overview
+========
+
+NV-Link is a high speed interconnect that is used in conjunction with
+a PCI-E connection to create an interface between chips that provides
+very high data bandwidth. The PCI-E connection is used as the control
+path to initiate and report status of large data transfers. The data
+transfers themselves are sent over the NV-Link.
+
+On IBM Power systems the NV-Link hardware is similar to our standard
+PCI hardware so to maximise code reuse the NV-Link is exposed as an
+emulated PCI device through system firmware (OPAL/skiboot). Thus each
+NV-Link capable device will appear as two devices on a system, the
+real PCI-E device and at least one emulated PCI device used for the
+NV-Link.
+
+Presently the NV-Link is only capable of data transfers initiated by
+the target, thus the emulated PCI device will only handle registers
+for link initialisation, DMA transfers and error reporting (EEH).
+
+====================
+Emulated PCI Devices
+====================
+
+Each link will be exported as an emulated PCI device with a minimum of
+two emulated PCI devices per GPU. Emulated PCI devices are grouped per
+GPU.
+
+The emulated PCI device will be exported as a standard PCI device by
+the Linux kernel. It has a standard PCI configuration space to expose
+necessary device parameters. The only functionality available is
+related to the setup of DMA windows.
+
+Configuration Space Parameters
+-----------------------------
+
+Vendor ID = 0x1014 (IBM)
+Device ID = 0x04ea
+Revision ID = 0x00
+Class = 0x068000 (Bridge Device Other, ProgIf = 0x0)
+BAR0/1 = TL/DL Registers
+
+TL/DL Registers
+---------------
+
+Each link has 128KB of TL/DL registers. These will always be mapped
+to 64-bit BAR#0 of the emulated PCI device configuration space.
+
+BAR#0 + 128K +-----------+
+ | NTL (64K) |
+BAR#0 + 64K +-----------+
+ | DL (64K) |
+BAR#0 +-----------+
+
+Vendor Specific Capabilities
+----------------------------
+
++-----------------+----------------+----------------+----------------+
+| Reserved | Cap Length | Next Cap Ptr | Cap ID (0x09) |
++-----------------+----------------+----------------+----------------+
+| Procedure Status Register |
++--------------------------------------------------------------------+
+| Procedure Control Register |
++---------------------------------------------------+----------------+
+| Reserved | Link Number |
++---------------------------------------------------+----------------+
+
+Procedure Control Register
+
+ Used to start hardware procedures.
+
+ Writes will start the corresponding procedure and set bit 31 in the
+ procedure status register. This register must not be written while
+ bit 31 is set in the status register. Performing a write while
+ another procudure is already in progress will abort that procedure.
+
+ Reads will return the in progress procedure or the last completed
+ procedure number depending on the procedure status field.
+
+ Procedure Numbers:
+ 0 - Abort in-progress procedure
+ 1 - NOP
+ 2 - Unsupported procedure
+ 3 - Unsupported procedure
+ 4 - Naples PHY - RESET
+ 5 - Naples PHY - TX_ZCAL
+ 6 - Naples PHY - RX_DCCAL
+ 7 - Naples PHY - TX_RXCAL_ENABLE
+ 8 - Naples PHY - TX_RXCAL_DISABLE
+ 9 - Naples PHY - RX_TRAINING
+ 10 - Naples NPU - RESET
+ 11 - Naples PHY - PHY preterminate
+ 12 - Naples PHY - PHY terminated
+
+ Procedure 5 (TX_ZCAL) should only be run once. System firmware will
+ ensure this so device drivers may call this procedure mutiple
+ times.
+
+Procedure Status Register
+
+ The procedure status register is used to determine when execution
+ of the procedure number in the control register is complete and if
+ it completed successfully.
+
+ This register must be polled frequently to allow system firmware to
+ execute the procedures.
+
+ Fields:
+ Bit 31 - Procedure in progress
+ Bit 30 - Procedure complete
+ Bit 3-0 - Procedure completion code
+
+ Procedure completion codes:
+ 0 - Procedure completed successfully.
+ 1 - Transient failure. Procedure should be rerun.
+ 2 - Permanent failure. Procedure will never complete successfully.
+ 3 - Procedure aborted.
+ 4 - Unsupported procedure.
+
+Link Number
+
+ Physical link number this emulated PCI device is assoicated
+ with. One of 0, 1, 4 or 5 (links 2 & 3 do not exist on Naples).
+
+Reserved
+
+ These fields must be ignored and no value should be assumed.
+
+Interrupts
+----------
+
+Each link has a single DL/TL interrupt assigned to it. These will be
+exposed as an LSI via the emulated PCI device. There are 4 links
+consuming 4 LSI interrupts. The 4 remaining interrupts supported by the
+corresponding PHB will be routed to OS platform for the purpose of error
+reporting.
+
+====================
+Device Tree Bindings
+====================
+
+See doc/device-tree/nvlink.txt