OpenCAPI Device Tree Bindings

NPU bindings

The NPU nodes are similar to those in Nvlink Device Tree Bindings.

We distinguish between OpenCAPI and NVLink links using the ibm.npu-link-type property. NPUs with a mixture of OpenCAPI and NVLink links are currently unsupported.

xscom@603fc00000000 {
  npu@5011000 {
    compatible = "ibm,power9-npu";
    phandle = <0xe6>;
    reg = <0x5011000 0x2c>;
    ibm,npu-index = <0x0>;
    ibm,npu-links = <0x2>; /* Number of links wired up to this npu. */

    link@2 {
      compatible = "ibm,npu-link";
      ibm,npu-link-type = "opencapi";
      ibm,npu-group-id = <0x1>;
      ibm,npu-lane-mask = <0xf1e000>; /* Mask specifying which IBM PHY lanes
                                       * are used for this link. 24-bit,
                                       * lane 0 is most significant bit */
      ibm,npu-phy = <0x80000000 0x9010c3f>; /* SCOM address of the IBM PHY
                                             * controlling this link. */
      ibm,npu-link-index = <0x2>; /* Hardware link index.
                                   * Used to calculate various address offsets. */
      phandle = <0xe7>;
    };

    link@3 {
      compatible = "ibm,npu-link";
      ibm,npu-link-type = "opencapi";
      ibm,npu-group-id = <0x2>;
      ibm,npu-lane-mask = <0x78f>;
      ibm,npu-phy = <0x80000000 0x9010c3f>;
      ibm,npu-link-index = <0x3>;
      phandle = <0xe8>;
    };
  };
};

PCI device bindings

The PCI devices mostly look like regular PCI devices (see PCI Device Tree Bindings), but have a few additional fields to allow the devices to be associated with the relevant NPU. These fields are presently not consumed by anything but may be used in future.

pciex@600e800000000 {
  /* OpenCAPI specific properties */
  compatible = "ibm,power9-npu-opencapi-pciex", "ibm,ioda2-npu2-opencapi-phb";
  ibm,npcq = <0xe6>; /* phandle to the NPU node */
  ibm,npu-index = <0x0>;
  ibm,links = <0x1>;
  /* Generic PCI fields here */
}