platform/x86: mlx-platform: Add initial support for new modular system
authorVadim Pasternak <vadimp@nvidia.com>
Sat, 2 Oct 2021 09:32:31 +0000 (12:32 +0300)
committerHans de Goede <hdegoede@redhat.com>
Tue, 19 Oct 2021 08:41:55 +0000 (10:41 +0200)
commita5d8f57edfb44a3f036152258d844c21c0436382
tree769083c1dca33fbbd65e4ddf4c74608c261297a9
parentaafa1cafedca7c64d6a43cd21488d28d1d1be884
platform/x86: mlx-platform: Add initial support for new modular system

Add initial chassis management support for Nvidia modular Ethernet
switch systems MSN4800, providing a high performance switching solution
for Enterprise Data Centers (EDC) for building Ethernet based clusters,
High-Performance Computing (HPC) and embedded environments.

This system could be equipped with the different types of replaceable
line cards and management board. The first system flavor will support
the line card type MSN4800-C16 equipped with Lattice CPLD devices aimed
for system and ASIC control, one Nvidia FPGA for gearboxes (PHYs)
management, and four Nvidia gearboxes for the port control and with
16x100GbE QSFP28 ports and also with various devices for electrical
control.

The system is equipped with eight slots for line cards, four slots for
power supplies and six slots for fans. It could be configured as fully
populated or with even only one line card. The line cards are
hot-pluggable.
In the future when more line card flavors are to be available (for
example line cards with 8x200Gb Eth port, with 4x400 Eth ports, or with
some kind of smart cards for offloading purpose), any type of line card
could be inserted at any slot.

The system is based on Nvidia Spectrum-3 ASIC. The switch height is
4U and it fits standard rack size.

System could be configured as fully populated or with even only one
line card. The line cards are hot-pluggable.

Line cards are connected to the chassis through I2C interface for the
chassis management operations and through PCIe for the networking
operations. Future line cards could be connected to the chassis through
InfiniBand fabric, instead of PCIe.

The first type of line card supports 16x100GbE QSFP28 Ethernet ports.
Those line cards equipped with the programmable devices aimed for
system control of Nvidia Ethernet switch ASIC control, Nvidia FPGA,
Nvidia gearboxes (PHYs).
The next coming  card generations are supposed to support:
- Line cards with 8x200Gbe QSFP28 Ethernet ports.
- Line cards with 4x400Gbe QSFP-DD Ethernet ports.
- Smart cards equipped with Nvidia ARM CPU for offloading and for fast
  access to the storage (EBoF).
- Fabric cards for inter-connection.

The basic system initialization flow with input signals from the
programmable device to kernel hotplug driver and with OS response
to some of these signals is depicted below.

lc#n_prsnt *-> Input: line card presence in/out events.
    Informational event. Required action - 'udev' event
    generation for logging.
lc#n_verified *-> Input: line card verification status events coming
    after line card security signature validation by
    hardware. Required action - connect line card
    driver and initialized line card devices feeding
    from system auxiliary power domain.
lc#n_pwr <-* Output: line card power on / off from OS. Action
    should be performed by platform power management
    driver.
lc#n_powered *-> Input: line card power on/off events coming after
    line card "power good" on/off events, mean that
    line card power up sequence has been successfully
    completed or line card "power good" status has been
    dropped. Required action - connect line card
    devices feeding from system main power domain.
lc#n_synced *-> Input: line card synchronization events, coming
    after hardware-firmware synchronization handshake.
    Required action - to enable line card, in case
    lc#n_ready has been received before.
lc#n_ready *-> Input: line card ready events, indicating line card
    PHYs ready / unready states. Required action -
    enable line card, in case lc#n_synced has been
    received before.
lc#n_enable <-* Output: line card enable from OS - release FPGA and
    PHYs line card devices from reset state. Action
    should be performed by platform power management
    driver.
lc#n_active *-> Input: when line card "active event" is received
    for particular line card, its network, hardware
    monitoring and thermal interfaces should be
    configured according to the configuration obtained
    from the firmware. When opposite "inactive event"
    is received all the above interfaces should be
    teared down. Required action - connect / disconnect
    the above line card interfaces through ASIC I2C
    chassis management driver.

For initial support:
- Define new system type 'VMOD0011' to support new modular system.
- Provide initial platform configuration for new system type.
- Extend the registers definitions.
- Add support for modular system registers related to line card
  specific events - insertion/removal, power on/off, verification
  and activation.
- Add hotplug configuration for the above events.
- Add configurations for hotplug actions for the modular system.

Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>
Reviewed-by: Michael Shych <michaelsh@nvidia.com>
Link: https://lore.kernel.org/r/20211002093238.3771419-3-vadimp@nvidia.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/mlx-platform.c