TT-System-Firmware APIs 19.10.99
Tenstorrent Firmware
Loading...
Searching...
No Matches
pvt_tt_bh.c File Reference
Include dependency graph for pvt_tt_bh.c:

Data Structures

struct  pd_ip_cfg0_t
union  pd_ip_cfg0_u
struct  ts_ip_cfg0_t
union  ts_ip_cfg0_u
struct  pvt_cntl_irq_en_reg_t
union  pvt_cntl_irq_en_reg_u
struct  pvt_cntl_ts_pd_irq_enable_reg_t
union  pvt_cntl_ts_pd_irq_enable_reg_u
struct  pvt_cntl_vm_irq_enable_reg_t
union  pvt_cntl_vm_irq_enable_reg_u
struct  pvt_cntl_vm_alarma_cfg_reg_t
union  pvt_cntl_vm_alarma_cfg_reg_u
struct  pvt_cntl_vm_alarmb_cfg_reg_t
union  pvt_cntl_vm_alarmb_cfg_reg_u
struct  pvt_cntl_clk_synth_reg_t
union  pvt_cntl_clk_synth_reg_u
struct  pvt_cntl_sdif_status_reg_t
union  pvt_cntl_sdif_status_reg_u
struct  pvt_cntl_sdif_reg_t
union  pvt_cntl_sdif_reg_u

Macros

#define DT_DRV_COMPAT   tenstorrent_bh_pvt
#define PVT_ID_NUM   0x80080008
#define PVT_TM_SCRATCH   0x8008000C
#define PVT_CNTL_IRQ_EN_REG_ADDR   0x80080040
#define PVT_CNTL_TS_00_IRQ_ENABLE_REG_ADDR   0x800800C0
#define PVT_CNTL_PD_00_IRQ_ENABLE_REG_ADDR   0x80080340
#define PVT_CNTL_VM_00_IRQ_ENABLE_REG_ADDR   0x80080A00
#define PVT_CNTL_TS_00_ALARMA_CFG_REG_ADDR   0x800800E0
#define PVT_CNTL_TS_00_ALARMB_CFG_REG_ADDR   0x800800E4
#define PVT_CNTL_TS_CMN_CLK_SYNTH_REG_ADDR   0x80080080
#define PVT_CNTL_PD_CMN_CLK_SYNTH_REG_ADDR   0x80080300
#define PVT_CNTL_VM_CMN_CLK_SYNTH_REG_ADDR   0x80080800
#define PVT_CNTL_PD_CMN_SDIF_STATUS_REG_ADDR   0x80080308
#define PVT_CNTL_PD_CMN_SDIF_REG_ADDR   0x8008030C
#define PVT_CNTL_TS_CMN_SDIF_STATUS_REG_ADDR   0x80080088
#define PVT_CNTL_TS_CMN_SDIF_REG_ADDR   0x8008008C
#define PVT_CNTL_PD_CMN_SDIF_STATUS_REG_ADDR   0x80080308
#define PVT_CNTL_PD_CMN_SDIF_REG_ADDR   0x8008030C
#define PVT_CNTL_VM_CMN_SDIF_STATUS_REG_ADDR   0x80080808
#define PVT_CNTL_VM_CMN_SDIF_REG_ADDR   0x8008080C
#define PVT_CNTL_TS_00_SDIF_DONE_REG_ADDR   0x800800D4
#define PVT_CNTL_TS_00_SDIF_DATA_REG_ADDR   0x800800D8
#define PVT_CNTL_VM_00_SDIF_RDATA_REG_ADDR   0x80080A30
#define PVT_CNTL_PD_00_SDIF_DONE_REG_ADDR   0x80080354
#define PVT_CNTL_PD_00_SDIF_DATA_REG_ADDR   0x80080358
#define TS_PD_OFFSET   0x40
#define VM_OFFSET   0x200
#define GET_TS_REG_ADDR(ID, REG_NAME)
#define GET_PD_REG_ADDR(ID, REG_NAME)
#define GET_VM_REG_ADDR(ID, REG_NAME)
#define IP_CNTL_ADDR   0x0
#define IP_CFG0_ADDR   0x1
#define IP_CFGA_ADDR   0x2
#define IP_DATA_ADDR   0x3
#define IP_POLLING_ADDR   0x4
#define IP_TMR_ADDR   0x5
#define IP_CFG1_ADDR   0x6
#define ALARM_A_THERM_TRIP_TEMP   83
#define ALARM_B_THERM_TRIP_TEMP   109
#define TS_HYSTERESIS_DELTA   5
#define ALL_AGING_OSC   0x7 /* enable delay chain 19, 20, 21 for aging measurement */
#define NUM_TS   8
#define NUM_VM   8
#define NUM_PD   16
#define PVT_CNTL_IRQ_EN_REG_DEFAULT   (0x00000000)
#define PVT_CNTL_TS_PD_IRQ_ENABLE_REG_DEFAULT   (0x00000000)
#define PVT_CNTL_VM_IRQ_ENABLE_REG_DEFAULT   (0x00000000)
#define PVT_CNTL_VM_ALARMA_CFG_REG_DEFAULT   (0x00000000)
#define PVT_CNTL_VM_ALARMB_CFG_REG_DEFAULT   (0x00000000)
#define PVT_CNTL_CLK_SYNTH_REG_DEFAULT   (0x00010000)
#define PVT_CNTL_SDIF_STATUS_REG_DEFAULT   (0x00000000)
#define PVT_CNTL_SDIF_REG_DEFAULT   (0x00000000)
#define DEFINE_PVT_TT_BH(id)

Functions

 LOG_MODULE_REGISTER (pvt_tt_bh, LOG_LEVEL_DBG)
static uint16_t temp_to_dout (float temp)
static void pvt_tt_bh_interrupt_config (void)
static void pvt_tt_bh_clock_config (void)
static void wait_sdif_ready (uint32_t status_reg_addr)
static void sdif_write (uint32_t status_reg_addr, uint32_t wr_data_reg_addr, uint32_t sdif_addr, uint32_t data)
static void enable_aging_meas (void)
int pvt_tt_bh_attr_get (const struct device *dev, enum sensor_channel chan, enum sensor_attribute attr, struct sensor_value *val)
static int pvt_tt_bh_is_alive (void)
 Verifies if the PVT device is alive according to section 18.1 of the datasheet.
static int pvt_tt_bh_init (const struct device *dev)

Variables

static const struct device *const pll_dev_1 = DEVICE_DT_GET_OR_NULL(DT_NODELABEL(pll1))
static const struct sensor_driver_api pvt_tt_bh_driver_api

Macro Definition Documentation

◆ ALARM_A_THERM_TRIP_TEMP

#define ALARM_A_THERM_TRIP_TEMP   83

◆ ALARM_B_THERM_TRIP_TEMP

#define ALARM_B_THERM_TRIP_TEMP   109

◆ ALL_AGING_OSC

#define ALL_AGING_OSC   0x7 /* enable delay chain 19, 20, 21 for aging measurement */

◆ DEFINE_PVT_TT_BH

#define DEFINE_PVT_TT_BH ( id)
Value:
static int16_t pvt_tt_bh_therm_cali_delta[DT_PROP(DT_DRV_INST(id), num_ts)] = {}; \
\
static const struct pvt_tt_bh_config pvt_tt_bh_config_##_id = { \
.num_ts = DT_PROP(DT_DRV_INST(id), num_ts), \
.num_pd = DT_PROP(DT_DRV_INST(id), num_pd), \
.num_vm = DT_PROP(DT_DRV_INST(id), num_vm), \
\
.therm_cali_delta = pvt_tt_bh_therm_cali_delta, \
}; \
\
static struct pvt_tt_bh_data pvt_tt_bh_data_##_id = {}; \
\
DEVICE_DT_INST_DEFINE(id, pvt_tt_bh_init, NULL, &pvt_tt_bh_data_##_id, \
&pvt_tt_bh_config_##_id, POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, \
#define NULL
Definition avs.c:45
#define DT_PROP(node_id, prop)
#define DT_DRV_INST(inst)
static const struct sensor_driver_api pvt_tt_bh_driver_api
Definition pvt_tt_bh.c:504
static int pvt_tt_bh_init(const struct device *dev)
Definition pvt_tt_bh.c:430
__INT16_TYPE__ int16_t
Definition pvt_tt_bh.h:36

◆ DT_DRV_COMPAT

#define DT_DRV_COMPAT   tenstorrent_bh_pvt

◆ GET_PD_REG_ADDR

#define GET_PD_REG_ADDR ( ID,
REG_NAME )
Value:
(ID * TS_PD_OFFSET + PVT_CNTL_PD_00_##REG_NAME##_REG_ADDR)
#define TS_PD_OFFSET
Definition pvt_tt_bh.c:57

◆ GET_TS_REG_ADDR

#define GET_TS_REG_ADDR ( ID,
REG_NAME )
Value:
(ID * TS_PD_OFFSET + PVT_CNTL_TS_00_##REG_NAME##_REG_ADDR)

◆ GET_VM_REG_ADDR

#define GET_VM_REG_ADDR ( ID,
REG_NAME )
Value:
(ID * VM_OFFSET + PVT_CNTL_VM_00_##REG_NAME##_REG_ADDR)
#define VM_OFFSET
Definition pvt_tt_bh.c:58

◆ IP_CFG0_ADDR

#define IP_CFG0_ADDR   0x1

◆ IP_CFG1_ADDR

#define IP_CFG1_ADDR   0x6

◆ IP_CFGA_ADDR

#define IP_CFGA_ADDR   0x2

◆ IP_CNTL_ADDR

#define IP_CNTL_ADDR   0x0

◆ IP_DATA_ADDR

#define IP_DATA_ADDR   0x3

◆ IP_POLLING_ADDR

#define IP_POLLING_ADDR   0x4

◆ IP_TMR_ADDR

#define IP_TMR_ADDR   0x5

◆ NUM_PD

#define NUM_PD   16

◆ NUM_TS

#define NUM_TS   8

◆ NUM_VM

#define NUM_VM   8

◆ PVT_CNTL_CLK_SYNTH_REG_DEFAULT

#define PVT_CNTL_CLK_SYNTH_REG_DEFAULT   (0x00010000)

◆ PVT_CNTL_IRQ_EN_REG_ADDR

#define PVT_CNTL_IRQ_EN_REG_ADDR   0x80080040

◆ PVT_CNTL_IRQ_EN_REG_DEFAULT

#define PVT_CNTL_IRQ_EN_REG_DEFAULT   (0x00000000)

◆ PVT_CNTL_PD_00_IRQ_ENABLE_REG_ADDR

#define PVT_CNTL_PD_00_IRQ_ENABLE_REG_ADDR   0x80080340

◆ PVT_CNTL_PD_00_SDIF_DATA_REG_ADDR

#define PVT_CNTL_PD_00_SDIF_DATA_REG_ADDR   0x80080358

◆ PVT_CNTL_PD_00_SDIF_DONE_REG_ADDR

#define PVT_CNTL_PD_00_SDIF_DONE_REG_ADDR   0x80080354

◆ PVT_CNTL_PD_CMN_CLK_SYNTH_REG_ADDR

#define PVT_CNTL_PD_CMN_CLK_SYNTH_REG_ADDR   0x80080300

◆ PVT_CNTL_PD_CMN_SDIF_REG_ADDR [1/2]

#define PVT_CNTL_PD_CMN_SDIF_REG_ADDR   0x8008030C

◆ PVT_CNTL_PD_CMN_SDIF_REG_ADDR [2/2]

#define PVT_CNTL_PD_CMN_SDIF_REG_ADDR   0x8008030C

◆ PVT_CNTL_PD_CMN_SDIF_STATUS_REG_ADDR [1/2]

#define PVT_CNTL_PD_CMN_SDIF_STATUS_REG_ADDR   0x80080308

◆ PVT_CNTL_PD_CMN_SDIF_STATUS_REG_ADDR [2/2]

#define PVT_CNTL_PD_CMN_SDIF_STATUS_REG_ADDR   0x80080308

◆ PVT_CNTL_SDIF_REG_DEFAULT

#define PVT_CNTL_SDIF_REG_DEFAULT   (0x00000000)

◆ PVT_CNTL_SDIF_STATUS_REG_DEFAULT

#define PVT_CNTL_SDIF_STATUS_REG_DEFAULT   (0x00000000)

◆ PVT_CNTL_TS_00_ALARMA_CFG_REG_ADDR

#define PVT_CNTL_TS_00_ALARMA_CFG_REG_ADDR   0x800800E0

◆ PVT_CNTL_TS_00_ALARMB_CFG_REG_ADDR

#define PVT_CNTL_TS_00_ALARMB_CFG_REG_ADDR   0x800800E4

◆ PVT_CNTL_TS_00_IRQ_ENABLE_REG_ADDR

#define PVT_CNTL_TS_00_IRQ_ENABLE_REG_ADDR   0x800800C0

◆ PVT_CNTL_TS_00_SDIF_DATA_REG_ADDR

#define PVT_CNTL_TS_00_SDIF_DATA_REG_ADDR   0x800800D8

◆ PVT_CNTL_TS_00_SDIF_DONE_REG_ADDR

#define PVT_CNTL_TS_00_SDIF_DONE_REG_ADDR   0x800800D4

◆ PVT_CNTL_TS_CMN_CLK_SYNTH_REG_ADDR

#define PVT_CNTL_TS_CMN_CLK_SYNTH_REG_ADDR   0x80080080

◆ PVT_CNTL_TS_CMN_SDIF_REG_ADDR

#define PVT_CNTL_TS_CMN_SDIF_REG_ADDR   0x8008008C

◆ PVT_CNTL_TS_CMN_SDIF_STATUS_REG_ADDR

#define PVT_CNTL_TS_CMN_SDIF_STATUS_REG_ADDR   0x80080088

◆ PVT_CNTL_TS_PD_IRQ_ENABLE_REG_DEFAULT

#define PVT_CNTL_TS_PD_IRQ_ENABLE_REG_DEFAULT   (0x00000000)

◆ PVT_CNTL_VM_00_IRQ_ENABLE_REG_ADDR

#define PVT_CNTL_VM_00_IRQ_ENABLE_REG_ADDR   0x80080A00

◆ PVT_CNTL_VM_00_SDIF_RDATA_REG_ADDR

#define PVT_CNTL_VM_00_SDIF_RDATA_REG_ADDR   0x80080A30

◆ PVT_CNTL_VM_ALARMA_CFG_REG_DEFAULT

#define PVT_CNTL_VM_ALARMA_CFG_REG_DEFAULT   (0x00000000)

◆ PVT_CNTL_VM_ALARMB_CFG_REG_DEFAULT

#define PVT_CNTL_VM_ALARMB_CFG_REG_DEFAULT   (0x00000000)

◆ PVT_CNTL_VM_CMN_CLK_SYNTH_REG_ADDR

#define PVT_CNTL_VM_CMN_CLK_SYNTH_REG_ADDR   0x80080800

◆ PVT_CNTL_VM_CMN_SDIF_REG_ADDR

#define PVT_CNTL_VM_CMN_SDIF_REG_ADDR   0x8008080C

◆ PVT_CNTL_VM_CMN_SDIF_STATUS_REG_ADDR

#define PVT_CNTL_VM_CMN_SDIF_STATUS_REG_ADDR   0x80080808

◆ PVT_CNTL_VM_IRQ_ENABLE_REG_DEFAULT

#define PVT_CNTL_VM_IRQ_ENABLE_REG_DEFAULT   (0x00000000)

◆ PVT_ID_NUM

#define PVT_ID_NUM   0x80080008

◆ PVT_TM_SCRATCH

#define PVT_TM_SCRATCH   0x8008000C

◆ TS_HYSTERESIS_DELTA

#define TS_HYSTERESIS_DELTA   5

◆ TS_PD_OFFSET

#define TS_PD_OFFSET   0x40

◆ VM_OFFSET

#define VM_OFFSET   0x200

Function Documentation

◆ enable_aging_meas()

void enable_aging_meas ( void )
static

◆ LOG_MODULE_REGISTER()

LOG_MODULE_REGISTER ( pvt_tt_bh ,
LOG_LEVEL_DBG  )

◆ pvt_tt_bh_attr_get()

int pvt_tt_bh_attr_get ( const struct device * dev,
enum sensor_channel chan,
enum sensor_attribute attr,
struct sensor_value * val )

◆ pvt_tt_bh_clock_config()

void pvt_tt_bh_clock_config ( void )
inlinestatic

◆ pvt_tt_bh_init()

int pvt_tt_bh_init ( const struct device * dev)
static

◆ pvt_tt_bh_interrupt_config()

void pvt_tt_bh_interrupt_config ( void )
inlinestatic

◆ pvt_tt_bh_is_alive()

int pvt_tt_bh_is_alive ( void )
static

Verifies if the PVT device is alive according to section 18.1 of the datasheet.

Performs the following steps in order, 1) Verifies ID is 0 2) Verifies scratch register is 0x0 3) Verifies writing scratch register by walking 1s

If these checks fail, the PVT sensor should not be considered reliable.

Return values
0On success.
-EIOOn hardware failure with error logs.

◆ sdif_write()

void sdif_write ( uint32_t status_reg_addr,
uint32_t wr_data_reg_addr,
uint32_t sdif_addr,
uint32_t data )
static

◆ temp_to_dout()

uint16_t temp_to_dout ( float temp)
static

◆ wait_sdif_ready()

void wait_sdif_ready ( uint32_t status_reg_addr)
static

Variable Documentation

◆ pll_dev_1

const struct device* const pll_dev_1 = DEVICE_DT_GET_OR_NULL(DT_NODELABEL(pll1))
static

◆ pvt_tt_bh_driver_api

const struct sensor_driver_api pvt_tt_bh_driver_api
static
Initial value:
= {
.attr_set = NULL,
.attr_get = pvt_tt_bh_attr_get,
.trigger_set = NULL,
.sample_fetch = NULL,
.channel_get = NULL,
.submit = pvt_tt_bh_submit,
.get_decoder = pvt_tt_bh_get_decoder,
}
int pvt_tt_bh_attr_get(const struct device *dev, enum sensor_channel chan, enum sensor_attribute attr, struct sensor_value *val)
Definition pvt_tt_bh.c:352
int pvt_tt_bh_get_decoder(const struct device *dev, const struct sensor_decoder_api **api)
Definition pvt_tt_bh_decoder.c:141
void pvt_tt_bh_submit(const struct device *sensor, struct rtio_iodev_sqe *sqe)
Definition pvt_tt_bh_rtio.c:356