1.. SPDX-License-Identifier: GPL-2.0 2 3================= 4Devlink Line card 5================= 6 7Background 8========== 9 10The ``devlink-linecard`` mechanism is targeted for manipulation of 11line cards that serve as a detachable PHY modules for modular switch 12system. Following operations are provided: 13 14 * Get a list of supported line card types. 15 * Provision of a slot with specific line card type. 16 * Get and monitor of line card state and its change. 17 18Line card according to the type may contain one or more gearboxes 19to mux the lanes with certain speed to multiple ports with lanes 20of different speed. Line card ensures N:M mapping between 21the switch ASIC modules and physical front panel ports. 22 23Overview 24======== 25 26Each line card devlink object is created by device driver, 27according to the physical line card slots available on the device. 28 29Similar to splitter cable, where the device might have no way 30of detection of the splitter cable geometry, the device 31might not have a way to detect line card type. For that devices, 32concept of provisioning is introduced. It allows the user to: 33 34 * Provision a line card slot with certain line card type 35 36 - Device driver would instruct the ASIC to prepare all 37 resources accordingly. The device driver would 38 create all instances, namely devlink port and netdevices 39 that reside on the line card, according to the line card type 40 * Manipulate of line card entities even without line card 41 being physically connected or powered-up 42 * Setup splitter cable on line card ports 43 44 - As on the ordinary ports, user may provision a splitter 45 cable of a certain type, without the need to 46 be physically connected to the port 47 * Configure devlink ports and netdevices 48 49Netdevice carrier is decided as follows: 50 51 * Line card is not inserted or powered-down 52 53 - The carrier is always down 54 * Line card is inserted and powered up 55 56 - The carrier is decided as for ordinary port netdevice 57 58Line card state 59=============== 60 61The ``devlink-linecard`` mechanism supports the following line card states: 62 63 * ``unprovisioned``: Line card is not provisioned on the slot. 64 * ``unprovisioning``: Line card slot is currently being unprovisioned. 65 * ``provisioning``: Line card slot is currently in a process of being provisioned 66 with a line card type. 67 * ``provisioning_failed``: Provisioning was not successful. 68 * ``provisioned``: Line card slot is provisioned with a type. 69 70The following diagram provides a general overview of ``devlink-linecard`` 71state transitions:: 72 73 +-------------------------+ 74 | | 75 +----------------------------------> unprovisioned | 76 | | | 77 | +--------|-------^--------+ 78 | | | 79 | | | 80 | +--------v-------|--------+ 81 | | | 82 | | provisioning | 83 | | | 84 | +------------|------------+ 85 | | 86 | +-----------------------------+ 87 | | | 88 | +------------v------------+ +------------v------------+ 89 | | | | | 90 +----- provisioning_failed | | provisioned | 91 | | | | | 92 | +------------^------------+ +------------|------------+ 93 | | | 94 | | | 95 | | +------------v------------+ 96 | | | | 97 | | | unprovisioning | 98 | | | | 99 | | +------------|------------+ 100 | | | 101 | +-----------------------------+ 102 | | 103 +-----------------------------------------------+ 104 105 106Example usage 107============= 108 109.. code:: shell 110 111 $ devlink lc show [ DEV [ lc LC_INDEX ] ] 112 $ devlink lc set DEV lc LC_INDEX [ { type LC_TYPE | notype } ] 113 114 # Show current line card configuration and status for all slots: 115 $ devlink lc 116 117 # Set slot 8 to be provisioned with type "16x100G": 118 $ devlink lc set pci/0000:01:00.0 lc 8 type 16x100G 119 120 # Set slot 8 to be unprovisioned: 121 $ devlink lc set pci/0000:01:00.0 lc 8 notype 122