TT-System-Firmware APIs 19.8.99
Tenstorrent Firmware
Loading...
Searching...
No Matches
cm2dm_msg.c File Reference

CMFW to DMFW message handling. More...

#include <string.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/misc/bh_fwtable.h>
#include <zephyr/drivers/watchdog.h>
#include <zephyr/drivers/uart.h>
#include <zephyr/sys/byteorder.h>
#include <zephyr/sys/crc.h>
#include <tenstorrent/smc_msg.h>
#include <tenstorrent/msgqueue.h>
#include "cm2dm_msg.h"
#include "asic_state.h"
#include "reg.h"
#include "status_reg.h"
#include "fan_ctrl.h"
#include "telemetry.h"
#include "dvfs.h"

Data Structures

struct  Cm2DmMsgState

Functions

 K_SEM_DEFINE (dmfw_ping_sem, 0, 1)
void PostCm2DmMsg (Cm2DmMsgId msg_id, uint32_t data)
static Cm2DmMsgId next_id_rr (uint32_t pending_messages)
int32_t Cm2DmMsgReqSmbusHandler (uint8_t *data, uint8_t *size)
int32_t Cm2DmMsgAckSmbusHandler (const uint8_t *data, uint8_t size)
void IssueChipReset (Cm2DmResetLevel reset_level)
void ChipResetRequest (void *arg)
void UpdateFanSpeedRequest (uint32_t fan_speed)
void UpdateForcedFanSpeedRequest (uint32_t fan_speed)
void Dm2CmReadyRequest (void)
void UpdateAutoResetTimeoutRequest (uint32_t timeout)
void UpdateTelemHeartbeatRequest (uint32_t heartbeat)
void RequestLedBlink (uint32_t blink_mode)
void reset_request_handler (struct k_timer *timer)
 K_TIMER_DEFINE (reset_timer, reset_request_handler, NULL)
static uint8_t reset_dm_handler (const union request *request, struct response *response)
 Handler for TT_SMC_MSG_TRIGGER_RESET.
 REGISTER_MESSAGE (TT_SMC_MSG_TRIGGER_RESET, reset_dm_handler)
static uint8_t ping_dm_handler (const union request *request, struct response *response)
 Handler for host request to ping DMC.
 REGISTER_MESSAGE (TT_SMC_MSG_PING_DM, ping_dm_handler)
static uint8_t set_watchdog_timeout (const union request *request, struct response *response)
 Handler for TT_SMC_MSG_SET_WDT_TIMEOUT.
 REGISTER_MESSAGE (TT_SMC_MSG_SET_WDT_TIMEOUT, set_watchdog_timeout)
int32_t Dm2CmSendDataHandler (const uint8_t *data, uint8_t size)
int32_t Dm2CmPingHandler (const uint8_t *data, uint8_t size)
int32_t Dm2CmPingV2 (uint8_t *data, uint8_t *size)
int32_t Dm2CmSendPowerHandler (const uint8_t *data, uint8_t size)
uint16_t GetInputPower (void)
int32_t Dm2CmSendFanRPMHandler (const uint8_t *data, uint8_t size)
int32_t SMBusTelemRegHandler (const uint8_t *data, uint8_t size)
int32_t SMBusTelemDataHandler (uint8_t *data, uint8_t *size)
int32_t Dm2CmSendThermTripCountHandler (const uint8_t *data, uint8_t size)
int32_t Dm2CmWriteTelemetry (const uint8_t *data, uint8_t size)
int32_t Dm2CmReadControlData (uint8_t *data, uint8_t *size)
int32_t Dm2CmDMCLogHandler (const uint8_t *data, uint8_t size)

Variables

static const struct device *const fwtable_dev = DEVICE_DT_GET(DT_NODELABEL(fwtable))
static Cm2DmMsgState cm2dm_msg_state
static uint16_t power
static uint16_t telemetry_reg
struct { 
   uint8_t   chip_reset_asic_called: 1 
   uint8_t   chip_reset_dmc_called: 1 
chip_reset_state
static uint8_t reset_type
const struct devicedmc_uart = DEVICE_DT_GET_OR_NULL(DT_ALIAS(dmc_vuart))

Detailed Description

CMFW to DMFW message handling.

Function Documentation

◆ ChipResetRequest()

void ChipResetRequest ( void * arg)

◆ Cm2DmMsgAckSmbusHandler()

int32_t Cm2DmMsgAckSmbusHandler ( const uint8_t * data,
uint8_t size )

◆ Cm2DmMsgReqSmbusHandler()

int32_t Cm2DmMsgReqSmbusHandler ( uint8_t * data,
uint8_t * size )

◆ Dm2CmDMCLogHandler()

int32_t Dm2CmDMCLogHandler ( const uint8_t * data,
uint8_t size )

◆ Dm2CmPingHandler()

int32_t Dm2CmPingHandler ( const uint8_t * data,
uint8_t size )

◆ Dm2CmPingV2()

int32_t Dm2CmPingV2 ( uint8_t * data,
uint8_t * size )

◆ Dm2CmReadControlData()

int32_t Dm2CmReadControlData ( uint8_t * data,
uint8_t * size )

◆ Dm2CmReadyRequest()

void Dm2CmReadyRequest ( void )

◆ Dm2CmSendDataHandler()

int32_t Dm2CmSendDataHandler ( const uint8_t * data,
uint8_t size )

◆ Dm2CmSendFanRPMHandler()

int32_t Dm2CmSendFanRPMHandler ( const uint8_t * data,
uint8_t size )

◆ Dm2CmSendPowerHandler()

int32_t Dm2CmSendPowerHandler ( const uint8_t * data,
uint8_t size )

◆ Dm2CmSendThermTripCountHandler()

int32_t Dm2CmSendThermTripCountHandler ( const uint8_t * data,
uint8_t size )

◆ Dm2CmWriteTelemetry()

int32_t Dm2CmWriteTelemetry ( const uint8_t * data,
uint8_t size )

◆ GetInputPower()

uint16_t GetInputPower ( void )

◆ IssueChipReset()

void IssueChipReset ( Cm2DmResetLevel reset_level)

◆ K_SEM_DEFINE()

K_SEM_DEFINE ( dmfw_ping_sem ,
0 ,
1  )

◆ K_TIMER_DEFINE()

K_TIMER_DEFINE ( reset_timer ,
reset_request_handler ,
NULL  )

◆ next_id_rr()

Cm2DmMsgId next_id_rr ( uint32_t pending_messages)
static

◆ ping_dm_handler()

uint8_t ping_dm_handler ( const union request * request,
struct response * response )
static

Handler for host request to ping DMC.

Handler for a host request to ping the DMC. This request is used to test SMBUS stability.

Parameters
[in]requestThe request, of type dmc_ping_rqst, with command code TT_SMC_MSG_PING_DM to ping the DMC. If dmc_ping_rqst::legacy_ping is false, The SMC requests a block read; otherwise, the SMC requests a block write.
[out]responseThe response to the host. Set to 1 if DMC is alive, 0 otherwise.
Returns
0

◆ PostCm2DmMsg()

void PostCm2DmMsg ( Cm2DmMsgId msg_id,
uint32_t data )

◆ REGISTER_MESSAGE() [1/3]

REGISTER_MESSAGE ( TT_SMC_MSG_PING_DM ,
ping_dm_handler  )

◆ REGISTER_MESSAGE() [2/3]

◆ REGISTER_MESSAGE() [3/3]

REGISTER_MESSAGE ( TT_SMC_MSG_TRIGGER_RESET ,
reset_dm_handler  )

◆ RequestLedBlink()

void RequestLedBlink ( uint32_t blink_mode)

◆ reset_dm_handler()

uint8_t reset_dm_handler ( const union request * request,
struct response * response )
static

◆ reset_request_handler()

void reset_request_handler ( struct k_timer * timer)

◆ set_watchdog_timeout()

uint8_t set_watchdog_timeout ( const union request * request,
struct response * response )
static

Handler for TT_SMC_MSG_SET_WDT_TIMEOUT.

Handler for a host request to set the watchdog timeout value. This can be used to configure the watchdog timer period or disable it entirely.

Parameters
[in]requestThe request, of type set_wdt_timeout_rqst, with command code TT_SMC_MSG_SET_WDT_TIMEOUT. The set_wdt_timeout_rqst::timeout_ms field specifies the timeout value in milliseconds. If set to 0, the watchdog is disabled.
[out]responseThe response to the host (unused for this handler).
Return values
0Success
ENODEVWatchdog device is not ready
ENOTSUPTimeout is below the minimum feed interval
Returns
Other error codes for watchdog setup failures
See also
set_wdt_timeout_rqst

◆ SMBusTelemDataHandler()

int32_t SMBusTelemDataHandler ( uint8_t * data,
uint8_t * size )

◆ SMBusTelemRegHandler()

int32_t SMBusTelemRegHandler ( const uint8_t * data,
uint8_t size )

◆ UpdateAutoResetTimeoutRequest()

void UpdateAutoResetTimeoutRequest ( uint32_t timeout)

◆ UpdateFanSpeedRequest()

void UpdateFanSpeedRequest ( uint32_t fan_speed)

◆ UpdateForcedFanSpeedRequest()

void UpdateForcedFanSpeedRequest ( uint32_t fan_speed)

◆ UpdateTelemHeartbeatRequest()

void UpdateTelemHeartbeatRequest ( uint32_t heartbeat)

Variable Documentation

◆ chip_reset_asic_called

uint8_t chip_reset_asic_called

◆ chip_reset_dmc_called

uint8_t chip_reset_dmc_called

◆ [struct]

struct { ... } chip_reset_state

◆ cm2dm_msg_state

Cm2DmMsgState cm2dm_msg_state
static

◆ dmc_uart

const struct device* dmc_uart = DEVICE_DT_GET_OR_NULL(DT_ALIAS(dmc_vuart))

◆ fwtable_dev

const struct device* const fwtable_dev = DEVICE_DT_GET(DT_NODELABEL(fwtable))
static

◆ power

uint16_t power
static

◆ reset_type

uint8_t reset_type
static

◆ telemetry_reg

uint16_t telemetry_reg
static