![]() |
TT-System-Firmware APIs 19.15.99
Tenstorrent Firmware
|
SMBus command set for DMFW (master) <-> CMFW (slave) communication. More...
Enumerations | |
| enum | CMFWSMBusReg { CMFW_SMBUS_TELEMETRY_READ = 0x02 , CMFW_SMBUS_TELEMETRY_WRITE = 0x03 , CMFW_SMBUS_UPDATE_ARC_STATE = 0x04 , CMFW_SMBUS_REQ = 0x10 , CMFW_SMBUS_ACK = 0x11 , CMFW_SMBUS_DM_STATIC_INFO = 0x20 , CMFW_SMBUS_PING = 0x21 , CMFW_SMBUS_FAN_SPEED = 0x22 , CMFW_SMBUS_FAN_RPM = 0x23 , CMFW_SMBUS_POWER_LIMIT = 0x24 , CMFW_SMBUS_POWER_INSTANT = 0x25 , CMFW_SMBUS_TELEMETRY_READ_CRC = 0x26 , CMFW_SMBUS_TELEMETRY_READ_CRC_DATA = 0x27 , CMFW_SMBUS_THERM_TRIP_COUNT = 0x28 , CMFW_SMBUS_DMC_LOG = 0x29 , CMFW_SMBUS_PING_V2 = 0x2A , CMFW_SMBUS_TEST_READ = 0xD8 , CMFW_SMBUS_TEST_WRITE = 0xD9 , CMFW_SMBUS_TEST_READ_WORD = 0xDA , CMFW_SMBUS_TEST_WRITE_WORD = 0xDB , CMFW_SMBUS_TEST_READ_BLOCK = 0xDC , CMFW_SMBUS_TEST_WRITE_BLOCK = 0xDD , CMFW_SMBUS_TEST_WRITE_BLOCK_READ_BLOCK = 0xDE , CMFW_SMBUS_MSG_MAX } |
| SMBus command codes handled by the CMFW. More... | |
SMBus command set for DMFW (master) <-> CMFW (slave) communication.
The DMFW acts as the SMBus master and issues these commands to the CMFW (the SMBus slave). Each command has an access type and a fixed payload size:
| enum CMFWSMBusReg |
SMBus command codes handled by the CMFW.
| Command | Code | Access | Description |
|---|---|---|---|
| CMFW_SMBUS_TELEMETRY_READ | 0x02 | RW | Get telemetry data |
| CMFW_SMBUS_TELEMETRY_WRITE | 0x03 | RW | Write telemetry data and relay control data |
| CMFW_SMBUS_UPDATE_ARC_STATE | 0x04 | WO | Update the ARC state |
| CMFW_SMBUS_REQ | 0x10 | RO | Read cm2dmMessage struct describing a request from the CMFW |
| CMFW_SMBUS_ACK | 0x11 | WO | Ack a cm2dmMessage with sequence number and message ID |
| CMFW_SMBUS_DM_STATIC_INFO | 0x20 | WO | Write dmStaticInfo struct including DMFW version |
| CMFW_SMBUS_PING | 0x21 | WO | Write 0xA5A5 to respond to CMFW request kCm2DmMsgIdPing |
| CMFW_SMBUS_FAN_SPEED | 0x22 | WO | Target fan speed percentage (0-100) broadcast to every CMFW |
| CMFW_SMBUS_FAN_RPM | 0x23 | WO | Fan speed response to CMFW fan-speed-update requests |
| CMFW_SMBUS_POWER_LIMIT | 0x24 | WO | Input power limit for the board |
| CMFW_SMBUS_POWER_INSTANT | 0x25 | WO | Current input power for the board |
| CMFW_SMBUS_TELEMETRY_READ_CRC | 0x26 | WO | Select a telemetry tag for reading |
| CMFW_SMBUS_TELEMETRY_READ_CRC_DATA | 0x27 | RO | Read telemetry payload and response metadata after selecting a tag |
| CMFW_SMBUS_THERM_TRIP_COUNT | 0x28 | WO | Thermal trip count |
| CMFW_SMBUS_DMC_LOG | 0x29 | WO | Up to 32 bytes of data to log from the DMC side |
| CMFW_SMBUS_PING_V2 | 0x2A | RO | Read data to verify the SMC got this ping request |
| CMFW_SMBUS_TEST_READ | 0xD8 | RO | Test read from CMFW scratch register |
| CMFW_SMBUS_TEST_WRITE | 0xD9 | WO | Test write to CMFW scratch register |
| CMFW_SMBUS_TEST_READ_WORD | 0xDA | RO | Test read from CMFW scratch register |
| CMFW_SMBUS_TEST_WRITE_WORD | 0xDB | WO | Test write to CMFW scratch register |
| CMFW_SMBUS_TEST_READ_BLOCK | 0xDC | RO | Test read from CMFW scratch register |
| CMFW_SMBUS_TEST_WRITE_BLOCK | 0xDD | WO | Test write to CMFW scratch register |
| CMFW_SMBUS_TEST_WRITE_BLOCK_READ_BLOCK | 0xDE | RW | Test write to CMFW scratch register and read it back |
| Enumerator | ||
|---|---|---|
| CMFW_SMBUS_TELEMETRY_READ | 0x02 | Get telemetry data. Input (1 byte):
Output (7 bytes, little-endian):
|
| CMFW_SMBUS_TELEMETRY_WRITE | 0x03 | Write telemetry data and relay control data. Input (33 bytes): telemetry payload from the DMC. The CMFW currently validates only the length and does not interpret the contents. Output (20 bytes, little-endian):
|
| CMFW_SMBUS_UPDATE_ARC_STATE | 0x04 | Update the ARC state. Input (3 bytes):
|
| CMFW_SMBUS_REQ | 0x10 | Read cm2dmMessage struct describing a request from the CMFW. Output (6 bytes, little-endian), a cm2dmMessage struct:
All bytes are zero when no message is pending. |
| CMFW_SMBUS_ACK | 0x11 | Ack a cm2dmMessage with sequence number and message ID. Input (2 bytes), a cm2dmAck struct:
On a match the pending cm2dmMessage is cleared. |
| CMFW_SMBUS_DM_STATIC_INFO | 0x20 | Write dmStaticInfo struct including DMFW version. Input (24 bytes, little-endian), a dmStaticInfo of six uint32 fields:
|
| CMFW_SMBUS_PING | 0x21 | Write 0xA5A5 to respond to CMFW request kCm2DmMsgIdPing. Input (2 bytes): 16-bit value, must equal 0xA5A5 (little-endian). Responds to the CMFW request kCm2DmMsgIdPing. |
| CMFW_SMBUS_FAN_SPEED | 0x22 | Target fan speed percentage (0-100) broadcast to every CMFW. Input (2 bytes): 16-bit target fan speed percentage (0-100), little-endian. Broadcast by the DMFW to every CMFW so each chip's telemetry reflects the board-level setting. |
| CMFW_SMBUS_FAN_RPM | 0x23 | Fan speed response to CMFW fan-speed-update requests. Input (2 bytes): 16-bit fan speed in RPM, little-endian. Responds to the CMFW request kCm2DmMsgIdFanSpeedUpdate or kCm2DmMsgIdForcedFanSpeedUpdate. |
| CMFW_SMBUS_POWER_LIMIT | 0x24 | Input power limit for the board. Input (2 bytes): 16-bit board input power limit (little-endian). Clamped to the board limit and applied to the board-power and Doppler-slow throttlers. |
| CMFW_SMBUS_POWER_INSTANT | 0x25 | Current input power for the board. Input (2 bytes): 16-bit current input power (little-endian). Stored with an additional board-power offset added and triggers a DVFS timer adjustment. |
| CMFW_SMBUS_TELEMETRY_READ_CRC | 0x26 | Select a telemetry tag for reading. Input (1 byte):
This command itself returns no data; the value is read back with the separate CMFW_SMBUS_TELEMETRY_READ_CRC_DATA (0x27) command. "CRC" refers to the transport PEC byte appended by the SMBus layer, not a CRC computed by the handler. |
| CMFW_SMBUS_TELEMETRY_READ_CRC_DATA | 0x27 | Read telemetry payload and response metadata after selecting a tag. Output (7 bytes, little-endian), same layout as CMFW_SMBUS_TELEMETRY_READ:
|
| CMFW_SMBUS_THERM_TRIP_COUNT | 0x28 | Thermal trip count. Input (2 bytes): 16-bit thermal trip count, little-endian. |
| CMFW_SMBUS_DMC_LOG | 0x29 | Up to 32 bytes of data to log from the DMC side. Input (variable, up to 32 bytes): raw log characters written to the DMC vUART; no structured fields. |
| CMFW_SMBUS_PING_V2 | 0x2A | Read data to verify the SMC got this ping request. Output (2 bytes): fixed sentinel 0xA5, 0xA5. Read to verify the SMC received this ping request. |
| CMFW_SMBUS_TEST_READ | 0xD8 | Test read from CMFW scratch register. Output (1 byte): low byte of the CMFW scratch register. |
| CMFW_SMBUS_TEST_WRITE | 0xD9 | Test write to CMFW scratch register. Input (1 byte): value written to the CMFW scratch register. |
| CMFW_SMBUS_TEST_READ_WORD | 0xDA | Test read from CMFW scratch register. Output (2 bytes): low 16 bits of the scratch register, little-endian. |
| CMFW_SMBUS_TEST_WRITE_WORD | 0xDB | Test write to CMFW scratch register. Input (2 bytes): value written to the scratch register, little-endian. |
| CMFW_SMBUS_TEST_READ_BLOCK | 0xDC | Test read from CMFW scratch register. Output (4 bytes): full 32-bit scratch register, little-endian. |
| CMFW_SMBUS_TEST_WRITE_BLOCK | 0xDD | Test write to CMFW scratch register. Input (4 bytes): value written to the scratch register, little-endian. |
| CMFW_SMBUS_TEST_WRITE_BLOCK_READ_BLOCK | 0xDE | Test write to CMFW scratch register and read it back. Input (4 bytes): value written to the scratch register, little-endian. Output (4 bytes): the value read back, little-endian. |
| CMFW_SMBUS_MSG_MAX | One past the last defined command code; not a real command. The command codes above are sparse, so this is not a count of commands. It is used as a known-invalid command code (e.g. in the smbus_target tests). | |