TT Zephyr Platforms 19.0.0-rc2
Tenstorrent Firmware
Loading...
Searching...
No Matches
regulator.c File Reference
#include "avs.h"
#include "dw_apb_i2c.h"
#include "regulator.h"
#include "regulator_config.h"
#include "status_reg.h"
#include "timer.h"
#include <math.h>
#include <float.h>
#include <stdint.h>
#include <tenstorrent/smc_msg.h>
#include <tenstorrent/msgqueue.h>
#include <tenstorrent/post_code.h>
#include <tenstorrent/sys_init_defines.h>
#include <zephyr/init.h>
#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>
#include <zephyr/drivers/misc/bh_fwtable.h>

Data Structures

struct  OperationBits

Macros

#define LINEAR_FORMAT_CONSTANT   (1 << 9)
#define SCALE_LOOP   0.335f
#define PMBUS_MST_ID   1
#define MFR_CTRL_OPS   0xD2
#define MFR_CTRL_OPS_DATA_BYTE_SIZE   1
#define VOUT_COMMAND   0x21
#define VOUT_COMMAND_DATA_BYTE_SIZE   2
#define VOUT_SCALE_LOOP   0x29
#define VOUT_SCALE_LOOP_DATA_BYTE_SIZE   2
#define READ_VOUT   0x8B
#define READ_VOUT_DATA_BYTE_SIZE   2
#define READ_IOUT   0x8C
#define READ_IOUT_DATA_BYTE_SIZE   2
#define READ_POUT   0x96
#define READ_POUT_DATA_BYTE_SIZE   2
#define OPERATION   0x1
#define OPERATION_DATA_BYTE_SIZE   1
#define PMBUS_CMD_BYTE_SIZE   1
#define PMBUS_FLIP_BYTES   0
#define GDDR_VDDR_FB1   0.422
#define GDDR_VDDR_FB2   1.0
#define CB_GDDR_VDDR_FB1   1.37
#define CB_GDDR_VDDR_FB2   4.32
#define SCRAPPY_GDDR_VDDR_FB1   1.07
#define SCRAPPY_GDDR_VDDR_FB2   3.48

Functions

 LOG_MODULE_REGISTER (regulator)
static float ConvertLinear11ToFloat (uint16_t value)
float GetVcoreCurrent (void)
float GetVcorePower (void)
static void set_max20730 (uint32_t slave_addr, uint32_t voltage_in_mv, float rfb1, float rfb2)
static void set_mpm3695 (uint32_t slave_addr, uint32_t voltage_in_mv, float rfb1, float rfb2)
static void i2c_set_max20816 (uint32_t slave_addr, uint32_t voltage_in_mv)
static float i2c_get_max20816 (uint32_t slave_addr)
void set_vcore (uint32_t voltage_in_mv)
uint32_t get_vcore (void)
void set_vcorem (uint32_t voltage_in_mv)
uint32_t get_vcorem (void)
void set_gddr_vddr (PcbType board_type, uint32_t voltage_in_mv)
void SwitchVoutControl (VoltageCmdSource source)
uint32_t RegulatorInit (PcbType board_type)
static uint8_t set_voltage_handler (const union request *request, struct response *response)
 Handler for TT_SMC_MSG_SET_VOLTAGE messages.
static uint8_t get_voltage_handler (const union request *request, struct response *response)
 Handler for TT_SMC_MSG_GET_VOLTAGE messages.
static uint8_t switch_vout_control_handler (const union request *request, struct response *response)
 Handler for TT_SMC_MSG_SWITCH_VOUT_CONTROL messages.
 REGISTER_MESSAGE (TT_SMC_MSG_SET_VOLTAGE, set_voltage_handler)
 REGISTER_MESSAGE (TT_SMC_MSG_GET_VOLTAGE, get_voltage_handler)
 REGISTER_MESSAGE (TT_SMC_MSG_SWITCH_VOUT_CONTROL, switch_vout_control_handler)
static int regulator_init (void)
 SYS_INIT_APP (regulator_init)

Variables

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

Macro Definition Documentation

◆ CB_GDDR_VDDR_FB1

#define CB_GDDR_VDDR_FB1   1.37

◆ CB_GDDR_VDDR_FB2

#define CB_GDDR_VDDR_FB2   4.32

◆ GDDR_VDDR_FB1

#define GDDR_VDDR_FB1   0.422

◆ GDDR_VDDR_FB2

#define GDDR_VDDR_FB2   1.0

◆ LINEAR_FORMAT_CONSTANT

#define LINEAR_FORMAT_CONSTANT   (1 << 9)

◆ MFR_CTRL_OPS

#define MFR_CTRL_OPS   0xD2

◆ MFR_CTRL_OPS_DATA_BYTE_SIZE

#define MFR_CTRL_OPS_DATA_BYTE_SIZE   1

◆ OPERATION

#define OPERATION   0x1

◆ OPERATION_DATA_BYTE_SIZE

#define OPERATION_DATA_BYTE_SIZE   1

◆ PMBUS_CMD_BYTE_SIZE

#define PMBUS_CMD_BYTE_SIZE   1

◆ PMBUS_FLIP_BYTES

#define PMBUS_FLIP_BYTES   0

◆ PMBUS_MST_ID

#define PMBUS_MST_ID   1

◆ READ_IOUT

#define READ_IOUT   0x8C

◆ READ_IOUT_DATA_BYTE_SIZE

#define READ_IOUT_DATA_BYTE_SIZE   2

◆ READ_POUT

#define READ_POUT   0x96

◆ READ_POUT_DATA_BYTE_SIZE

#define READ_POUT_DATA_BYTE_SIZE   2

◆ READ_VOUT

#define READ_VOUT   0x8B

◆ READ_VOUT_DATA_BYTE_SIZE

#define READ_VOUT_DATA_BYTE_SIZE   2

◆ SCALE_LOOP

#define SCALE_LOOP   0.335f

◆ SCRAPPY_GDDR_VDDR_FB1

#define SCRAPPY_GDDR_VDDR_FB1   1.07

◆ SCRAPPY_GDDR_VDDR_FB2

#define SCRAPPY_GDDR_VDDR_FB2   3.48

◆ VOUT_COMMAND

#define VOUT_COMMAND   0x21

◆ VOUT_COMMAND_DATA_BYTE_SIZE

#define VOUT_COMMAND_DATA_BYTE_SIZE   2

◆ VOUT_SCALE_LOOP

#define VOUT_SCALE_LOOP   0x29

◆ VOUT_SCALE_LOOP_DATA_BYTE_SIZE

#define VOUT_SCALE_LOOP_DATA_BYTE_SIZE   2

Function Documentation

◆ ConvertLinear11ToFloat()

float ConvertLinear11ToFloat ( uint16_t value)
static

◆ get_vcore()

uint32_t get_vcore ( void )

◆ get_vcorem()

uint32_t get_vcorem ( void )

◆ get_voltage_handler()

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

Handler for TT_SMC_MSG_GET_VOLTAGE messages.

Reads the current voltage from the specified regulator via I2C and returns it in the response message.

Parameters
requestPointer to the host request message, use request->get_voltage for structured access
responsePointer to the response message to be sent back to host, will contain:
  • data[1]: Current voltage reading in millivolts
Returns
0 on success
non-zero on error
See also
get_voltage_rqst

◆ GetVcoreCurrent()

float GetVcoreCurrent ( void )

◆ GetVcorePower()

float GetVcorePower ( void )

◆ i2c_get_max20816()

float i2c_get_max20816 ( uint32_t slave_addr)
static

◆ i2c_set_max20816()

void i2c_set_max20816 ( uint32_t slave_addr,
uint32_t voltage_in_mv )
static

◆ LOG_MODULE_REGISTER()

LOG_MODULE_REGISTER ( regulator )

◆ REGISTER_MESSAGE() [1/3]

REGISTER_MESSAGE ( TT_SMC_MSG_GET_VOLTAGE ,
get_voltage_handler  )

◆ REGISTER_MESSAGE() [2/3]

REGISTER_MESSAGE ( TT_SMC_MSG_SET_VOLTAGE ,
set_voltage_handler  )

◆ REGISTER_MESSAGE() [3/3]

◆ regulator_init()

int regulator_init ( void )
static

◆ RegulatorInit()

uint32_t RegulatorInit ( PcbType board_type)

◆ set_gddr_vddr()

void set_gddr_vddr ( PcbType board_type,
uint32_t voltage_in_mv )

◆ set_max20730()

void set_max20730 ( uint32_t slave_addr,
uint32_t voltage_in_mv,
float rfb1,
float rfb2 )
static

◆ set_mpm3695()

void set_mpm3695 ( uint32_t slave_addr,
uint32_t voltage_in_mv,
float rfb1,
float rfb2 )
static

◆ set_vcore()

void set_vcore ( uint32_t voltage_in_mv)

◆ set_vcorem()

void set_vcorem ( uint32_t voltage_in_mv)

◆ set_voltage_handler()

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

Handler for TT_SMC_MSG_SET_VOLTAGE messages.

Sets the voltage on the specified regulator via I2C. The request should contain the I2C slave address and the voltage value in millivolts.

Parameters
requestPointer to the host request message, use request->set_voltage for structured access
responsePointer to the response message to be sent back to host
Returns
0 on success
non-zero on error
See also
set_voltage_rqst

◆ switch_vout_control_handler()

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

Handler for TT_SMC_MSG_SWITCH_VOUT_CONTROL messages.

Switches the VOUT control source for voltage regulators. This allows switching between different control methods.

Parameters
requestPointer to the host request message, use request->switch_vout_control for structured access
responsePointer to the response message to be sent back to host
Returns
0 on success
non-zero on error
See also
switch_vout_control_rqst

◆ SwitchVoutControl()

void SwitchVoutControl ( VoltageCmdSource source)

◆ SYS_INIT_APP()

SYS_INIT_APP ( regulator_init )

Variable Documentation

◆ fwtable_dev

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

◆ vout_cmd_source

uint8_t vout_cmd_source = VoutCommand
static