DMTF Implementation

Alveo™ supports PLDM Over MCTP Over SMBus at slave address 0x18 (0x30 in 8-bit). The latest sensor information is stored locally in SC FW and is exposed on-demand to server BMC via PLDM Type-2 commands. Sensor information is stored and represented in the platform descriptor record (PDR).

PLDM Over MCTP Over SMBus Protocol

SC supports the SMBus discovery via the default SMBus 2.0 at I2C slave address 0x61 (0xC2 in 8-bit) and the MCTP/PLDM protocol at I2C slave address 0x18 (0x30 in 8-bit). Alveo OoB implementation adheres to the following DMTF specifications:

  1. PLDM Base Specification ([DSP0240])
  2. PLDM for Platform Monitoring and Control Specification ([DSP0248])
  3. MCTP Base Specification ([DSP0236])
  4. MCTP SMBus Binding Spec ([DSP0237])

Currently, the following sensor readings are reported via PLDM Type-2 commands:

  1. FPGA die/junction temperature
  2. Board temperature
  3. QSFP0 temperature (if present)
  4. QSFP1 temperature (if present)

Default SMBus 2.0 commands

For the purposes of SMBus address discovery (at default SMBus address 0xC2 (8-bit)), Alveo™ cards are ‘Fixed and Non-Discoverable Device’. Only Get UDID (general) and Get UDID (directed) commands are supported.

MCTP control messages The following MCTP control commands are supported in the SC:

Table: Supported MCTP control commands and description

Command ID Description
Set Endpoint ID 0x01 Assigns an EID to the endpoint at the given physical address
Get Endpoint ID 0x02 Returns the EID presently assigned to an endpoint
Get Endpoint UUID 0x03 Retrieves a per-device unique UUID associated with the endpoint
Get MCTP Version Support 0x04 Lists which versions of the MCTP control protocol are supported on an endpoint
Get Message Type Support 0x05 Lists the message types that an endpoint supports

PLDM commands

The following PLDM commands are supported in the SC:

Table: Supported PLDM commands and description

Command ID Description
SetTID 0x01 Sets the terminus ID (TID) for a PLDM terminus
GetTID 0x02 Returns the present TID setting for a PLDM terminus
GetPLDMVersion 0x03 Returns versions for PLDM base & type specification
GetPLDMTypes 0x04 Returns PLDM type capabilities and list of the supported PLDM types
GetPLDMCommands 0x04 Returns PLDM command capabilities supported for a specific PLDM type and version
GetSensorReading 0x11 Returns present reading and threshold event state values from a numeric sensor
GetSensorThresholds 0x13 Returns the present threshold settings for a PLDM numeric sensor
GetPDRRepositoryInfo 0x50 Returns size & number of records in PDR and time stamps on last PRD update
GetPDR 0x51 Returns individual PDRs from a PDR repository
GetPDRRepositorySignature 0x53 Returns a signature that changes when the repo has been changed

These PLDM commands are categorized into type 0 and type 2, as detailed in the following table.

Table: Supported Type 0 and Type 2 PLDM commands

PLDM Type 0 Commands PLDM Type 2 Commands
SetTID (0x01) SetTID (0x01)
GetTID (0x02) GetTID (0x02)
GetPLDMVersion (0x03) GetSensorReading (0x11)
GetPLDMTypes (0x04) GetSensorThresholds (0x12)
GetPLDMCommands (0x05) GetPDRRepositoryInfo (0x50)
  GetPDRRepositorySignature (0x53)

Platform Descriptor Record (PDR)

PDRs provide semantic information for sensors and effects their relationship to the entities that are monitored or controlled. The SC FW has nine PDRs in total:

Terminus Locator PDR

The terminus locator PDR provides information that associates a PLDM terminus handle with values that uniquely identify the device or software that contains the PLDM terminus. The fields populated in the terminus locator PDR are listed in the following table.

Table: Populated Terminus Locator Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
VALIDITY 0x1
CONTAINER_ID 0x7f7f

Table: Populated Terminus Locator Fields (cont’d)

Field Value
TERMINUS_LOCATOR_TYPE UID (0x0)
TERMINUS_LOCATOR_VALUESIZE 17
TERMINUS_INSTANCE 1
DEVICE_UID 62 bf a1 a4 c2 a4 11 e8 be 1f e0 3f 49 e8 97 a4

Numeric Sensor PDR

The numeric sensor PDR is primarily used to describe the semantics of a PLDM numeric sensor and includes factors to convert raw sensor readings to normalized units.

Numeric Sensor PDR for FPGA Temperature

Table: Numeric Sensor PDR for FPGA Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0001
ENTITY_TYPE 0x0051 (P/L PHYSICAL (0x0), ENTITY_ID 0x0051)
ENTITY_INSTANCE_NUMBER 0x0002
CONTAINER_ID 0x7f7f
SENSOR_INIT NO_INIT (0x0)
SENSOR_AUXILIARY_NAMES_PDR True
BASE_UNIT DEGREES_C (0x2)
UNIT_MODIFIER 0
RATE_UNIT NONE (0x0)
BASE_OEM_UNIT_HANDLE 0
AUX_UNIT NONE (0x0)
AUX_UNIT_MODIFIER 0
AUX_RATE_UNIT NONE (0x0)
REL DIVIDED_BY (0x0)
AUX_OEM_UNIT_HANDLE 0
IS_LINEAR True
SENSOR_DATA_SIZE SINT16 (0x3)
RESOLUTION 1
OFFSET 0
ACCURACY +/– 0.0%
PLUS_TOLERANCE 3
MINUS_TOLERANCE 3
HYSTERESIS 0
SUPPORTED_THRESHOLDS

UPPER_THRESHOLD_FATAL(0x2)

UPPER_THRESHOLD_CRITICAL (0x1)

UPPER_THRESHOLD_WARNING (0x0)

THRESHOLD_AND_HYSTERESIS_VOLATILITY None
STATE_TRANSITION_INTERVAL 0.0 sec
UPDATE_INTERVAL 0.10000000149011612 sec
MAX_READABLE 127
MIN_READABLE –40
RANGE_FIELD_FORMAT SINT16 (0x3)
RANGE_FIELD_SUPPORT

FATAL_HIGH (0x5) CRITICAL_HIGH (0x3)

NORMAL_MIN(0x2) NORMAL_MAX(0x1)

NOMINAL_VALUE 0
NORMAL_MAX 88
NORMAL_MIN 3
WARNING_HIGH 88
WARNING_LOW 0
CRITICAL_HIGH 97
CRITICAL_LOW 0
FATAL_HIGH 107
FATAL_LOW 0

Numeric Sensor PDR for Board Temperature

Table: Numeric Sensor PDR for Board Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0002
ENTITY_TYPE 0x0051 (P/L PHYSICAL (0x0), ENTITY_ID 0x0051)
ENTITY_INSTANCE_NUMBER 0x0002
CONTAINER_ID 0x7f7f
SENSOR_INIT NO_INIT (0x0)
SENSOR_AUXILIARY_NAMES_PDR True
BASE_UNIT DEGREES_C (0x2)
UNIT_MODIFIER 0
RATE_UNIT NONE (0x0)
BASE_OEM_UNIT_HANDLE 0
AUX_UNIT NONE (0x0)
AUX_UNIT_MODIFIER 0
AUX_RATE_UNIT NONE (0x0)
REL DIVIDED_BY (0x0)
AUX_OEM_UNIT_HANDLE 0
IS_LINEAR True
SENSOR_DATA_SIZE SINT16 (0x3)
RESOLUTION 1
OFFSET 0
ACCURACY +/– 0.0%
PLUS_TOLERANCE 3
MINUS_TOLERANCE 3
HYSTERESIS 0
SUPPORTED_THRESHOLDS

UPPER_THRESHOLD_FATAL(0x2)

UPPER_THRESHOLD_CRITICAL (0x1)

UPPER_THRESHOLD_WARNING (0x0)

THRESHOLD_AND_HYSTERESIS_VOLATILITY None
STATE_TRANSITION_INTERVAL 0.0 sec
UPDATE_INTERVAL 0.10000000149011612 sec
MAX_READABLE 127
MIN_READABLE –40
RANGE_FIELD_FORMAT SINT16 (0x3)
RANGE_FIELD_SUPPORT

FATAL_HIGH (0x5) CRITICAL_HIGH (0x3)

NORMAL_MIN (0x2) NORMAL_MAX (0x1)

NOMINAL_VALUE 0
NORMAL_MAX 80
NORMAL_MIN –40
WARNING_HIGH 80
WARNING_LOW 0
CRITICAL_HIGH 85
CRITICAL_LOW 0
FATAL_HIGH 125
FATAL_LOW 0

Numeric Sensor PDR for QSFP0 Temperature

Table: Numeric Sensor PDR for QSFPO Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0002
ENTITY_TYPE 0x0051 (P/L PHYSICAL (0x0), ENTITY_ID (0x0051)
ENTITY_INSTANCE_NUMBER 0x0002
CONTAINER_ID 0x7f7f
SENSOR_INIT NO_INIT (0x0)
SENSOR_AUXILIARY_NAMES_PDR True
BASE_UNIT DEGREES_C (0x2)
UNIT_MODIFIER 0
RATE_UNIT NONE (0x0)
BASE_OEM_UNIT_HANDLE 0
AUX_UNIT NONE (0x0)
AUX_UNIT_MODIFIER 0
AUX_RATE_UNIT NONE (0x0)
REL DIVIDED_BY (0x0)
AUX_OEM_UNIT_HANDLE 0
IS_LINEAR True
SENSOR_DATA_SIZE SINT16 (0x3)
RESOLUTION 1
OFFSET 0
ACCURACY +/– 0.0%
PLUS_TOLERANCE 3
MINUS_TOLERANCE 3
HYSTERESIS 0
SUPPORTED_THRESHOLDS

UPPER_THRESHOLD_FATAL (0x2)

UPPER_THRESHOLD_CRITICAL (0x1)

UPPER_THRESHOLD_WARNING (0x0)

THRESHOLD_AND_HYSTERESIS_VOLATILITY None
STATE_TRANSITION_INTERVAL 0.0 sec
UPDATE_INTERVAL 0.10000000149011612 sec
MAX_READABLE 127
MIN_READABLE –40
RANGE_FIELD_FORMAT SINT16 (0x3)
RANGE_FIELD_SUPPORT

FATAL_HIGH (0x5) CRITICAL_HIGH (0x3)

NORMAL_MIN (0x2) NORMAL_MAX (0x1)

NOMINAL_VALUE 0
NORMAL_MAX 80
NORMAL_MIN –40
WARNING_HIGH 80
WARNING_LOW 0
CRITICAL_HIGH 85
CRITICAL_LOW 0
FATAL_HIGH 125
FATAL_LOW 0

Numeric Sensor PDR for QSFP1 Temperature Fields

Table Numeric Sensor PDR for QSFP1 Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0004
ENTITY_TYPE 0x0051 (P/L PHYSICAL (0x0), ENTITY_ID (0x0051)
ENTITY_INSTANCE_NUMBER 0x0004
CONTAINER_ID 0x7f7f
SENSOR_INIT NO_INIT (0x0)
SENSOR_AUXILIARY_NAMES_PDR True
BASE_UNIT DEGREES_C (0x2)
UNIT_MODIFIER 0
RATE_UNIT NONE (0x0)
BASE_OEM_UNIT_HANDLE 0
AUX_UNIT NONE (0x0)
AUX_UNIT_MODIFIER 0
AUX_RATE_UNIT NONE (0x0)
REL DIVIDED_BY (0x0)
AUX_OEM_UNIT_HANDLE 0
IS_LINEAR True
SENSOR_DATA_SIZE SINT16 (0x3)
RESOLUTION 1
OFFSET 0
ACCURACY +/– 0.0%
PLUS_TOLERANCE 3
MINUS_TOLERANCE 3
HYSTERESIS 0
SUPPORTED_THRESHOLDS

UPPER_THRESHOLD_FATAL (0x2)

UPPER_THRESHOLD_CRITICAL (0x1)

UPPER_THRESHOLD_WARNING (0x0)

THRESHOLD_AND_HYSTERESIS_VOLATILITY None
STATE_TRANSITION_INTERVAL 0.0 sec
UPDATE_INTERVAL 0.10000000149011612 sec
MAX_READABLE 127
MIN_READABLE –40
RANGE_FIELD_FORMAT SINT16(0x3)
RANGE_FIELD_SUPPORT

FATAL_HIGH (0x5) CRITICAL_HIGH (0x3)

NORMAL_MIN (0x2) NORMAL_MAX (0x1)

NOMINAL_VALUE 0
NORMAL_MAX 80
NORMAL_MIN –40
WARNING_HIGH 80
WARNING_LOW 0
CRITICAL_HIGH 85
CRITICAL_LOW 0
FATAL_HIGH 90
FATAL_LOW 0

Sensor Auxiliary Names PDR

The sensor auxiliary names PDR may be used to provide optional information that names the sensor.

Sensor Auxiliary Names PDR for FPGA Temperature

Table: Sensor Auxiliary Names PDR for FPGFA Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0001
SENSOR_COUNT 1
NAME_STRING_COUNT 1
NAME_LANGUAGE_TAG en-US
SENSOR_NAME FPGA temperature

Sensor Auxiliary Names PDR for Board Temperature

Table: Sensor Auxiliary Names PDR for Board Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0002
SENSOR_COUNT 1
NAME_STRING_COUNT 1
NAME_LANGUAGE_TAG en-US
SENSOR_NAME Board temperature

Sensor Auxiliary Names PDR for QSFP0 Temperature

Table: Sensor Auxiliary Names PDR for QSFP0 Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0003
SENSOR_COUNT 1
NAME_STRING_COUNT 1
NAME_LANGUAGE_TAG en-US
SENSOR_NAME QSFP-0 temperature

Sensor Auxiliary Names PDR for QSFP1 Temperature

Table: Sensor Auxiliary Names PDR for QSFP1 Temperature Fields

Field Value
PLDM_TERMINUS_HANDLE 0x0000
SENSOR_ID 0x0004
SENSOR_COUNT 1
NAME_STRING_COUNT 1
NAME_LANGUAGE_TAG en-US
SENSOR_NAME QSFP-1 temperature

Sample PLDM Transaction

This section examines a sample PLDM request and response message. For this example, the BMC on the server has a I2C address of 0x20 and the SC has an I2C address of 0xCE.

PLDM Request

The PLDM request originates from the server BMC and SC FW receives this request via I2C interface at address 0xCE. The MCTP packet encapsulation and the different fields are explained in the MCTP SMBus/I2C Transport Binding Specification

Figure: PLDM Request
_images/BMC-request.png

A request sent from the BMC to the SC will resemble the following table.

_images/SC-request.png

The blue section is the PLDM message that can be decoded, as explained in the PLDM Base Specification

Table: PLDM Message Payload

_images/payload.png

*Note*: The PLDM completion code is present only in PDM response messages.

The blue section in the previous message decoded using the PLDM message scheme resembles the following figure.

Table: PLDM Message Scheme

_images/message-scheme.png

Hdr and PLDM completion code field only applies to PLDM responses, not PLDM requests. PLDM Command code 0x11 corresponds to the GetSensorReading and the payload can now be decoded, as detailed in the following table.

Table: PLDM Completion Codes

Type Request Data Value In Our Examples
uint16 Sensor ID 0x0001
bool8 rearmEventState 0x00

Now the SC knows that the server BMC is requesting a sensor reading with sensor ID 0x01.

PLDM Response

The SC frames the response to each valid PLDM request in the background and sends the response in SMBus master mode. This section provides a detailed explanation of how the SC PLDM packets. Additionally, the details about how MCTP packets are within each PLDM packet gets built is also provided.

The following table details the response for GetSensorReading.

Table: GetSensorReading Response

Type Request Data Value In Our Examples
enum8 completionCode 0x00
enum8 sensorDataSize 0x02
enum8 sensorOperationalState 0x00
enum8 sensoreventMessageEnable 0x00
enum8 presentState 0x01
enum8 previousState 0x00
enum8 eventState 0x01
uint16 presentReading 0x002A

The response that gets plugged into the PLDM message scheme resembles the following table.

_images/response.png

The PLDM message encapsulated inside MCTP response resembles the following table.

Table: PDLM Message in MCTP Response

The server BMC decodes the MCTP response it receives to obtain the sensor readings.

Xilinx Support

For support resources such as answers, documentation, downloads, and forums, see the Alveo Accelerator Cards Xilinx Community Forum.

License

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License.

You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

All images and documentation, including all debug and support documentation, are licensed under the Creative Commons (CC) Attribution 4.0 International License (the “CC-BY-4.0 License”); you may not use this file except in compliance with the CC-BY-4.0 License.

You may obtain a copy of the CC-BY-4.0 License at https://creativecommons.org/licenses/by/4.0/

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

XD038 | © Copyright 2021 Xilinx, Inc.