7#ifndef INCLUDE_TENSTORRENT_LIB_BH_CHIP_H_
8#define INCLUDE_TENSTORRENT_LIB_BH_CHIP_H_
100#define DT_PHANDLE_OR_CHILD(node_id, name) \
101 COND_CODE_1(DT_NODE_HAS_PROP(node_id, name), (DT_PHANDLE(node_id, name)), \
102 (DT_CHILD(node_id, name)))
104#define HAS_DT_PHANDLE_OR_CHILD(node_id, name) DT_NODE_EXISTS(DT_PHANDLE_OR_CHILD(node_id, name))
105#define BH_CHIP_COUNT DT_PROP_LEN_OR(DT_PATH(chips), chips, 0)
108#define MAKE_STRUCT_FIELD(n) .n
109#define INIT_STRAP(n) MAKE_STRUCT_FIELD(DT_NODE_FULL_NAME_TOKEN(n)) = \
110 GPIO_DT_SPEC_GET(n, gpios),
112#define INIT_CHIP(n, prop, idx) \
115 .asic_reset = GPIO_DT_SPEC_GET( \
116 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), asic_reset), \
118 .spi_reset = GPIO_DT_SPEC_GET( \
119 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), spi_reset), \
121 .flash = DEVICE_DT_GET_OR_NULL( \
122 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), flash)), \
123 .jtag = DEVICE_DT_GET( \
124 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), jtag)), \
125 .arc = BH_ARC_INIT( \
126 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), arc)), \
127 .spi_mux = GPIO_DT_SPEC_GET( \
128 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), spi_mux), \
130 .pgood = GPIO_DT_SPEC_GET( \
131 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), pgood), \
133 .therm_trip = GPIO_DT_SPEC_GET( \
134 DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), therm_trip), \
136 .strapping = {COND_CODE_1( \
137 HAS_DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), strapping), \
138 (DT_FOREACH_CHILD(DT_PHANDLE_OR_CHILD(DT_PHANDLE_BY_IDX(n, prop, idx), strapping), \
142 .auto_reset_timer = Z_TIMER_INITIALIZER( \
143 BH_CHIPS[idx].auto_reset_timer, bh_chip_auto_reset, NULL), \
146#define BH_CHIP_PRIMARY_INDEX DT_PROP(DT_PATH(chips), primary)
#define BH_CHIP_COUNT
Definition bh_chip.h:105
int bh_chip_write_logs(struct bh_chip *chip, char *log_data, size_t log_size)
Definition bh_chip.c:129
int bh_chip_set_fan_rpm(struct bh_chip *chip, uint16_t rpm)
Definition bh_chip.c:100
void bh_chip_assert_asic_reset(const struct bh_chip *chip)
Definition bh_chip.c:143
int jtag_bootrom_reset_sequence(struct bh_chip *chip, bool force_reset)
Definition reset.c:32
void bh_chip_unset_straps(struct bh_chip *chip)
Definition strapping.c:48
int bh_chip_set_input_power(struct bh_chip *chip, uint16_t power)
Definition bh_chip.c:82
int therm_trip_gpio_setup(struct bh_chip *chip)
Definition bh_chip.c:179
void bh_chip_cancel_bus_transfer_clear(struct bh_chip *chip)
Definition bh_chip.c:25
int bh_chip_set_input_power_lim(struct bh_chip *chip, uint16_t max_power)
Definition bh_chip.c:91
void bh_chip_auto_reset(struct k_timer *timer)
Definition bh_chip.c:119
void bh_chip_assert_spi_reset(const struct bh_chip *chip)
Definition bh_chip.c:153
int bh_chip_set_static_info(struct bh_chip *chip, dmStaticInfo *info)
Definition bh_chip.c:69
int bh_chip_set_therm_trip_count(struct bh_chip *chip, uint16_t therm_trip_count)
Definition bh_chip.c:109
int bh_chip_reset_chip(struct bh_chip *chip, bool force_reset)
Definition bh_chip.c:163
void bh_chip_set_straps(struct bh_chip *chip)
Definition strapping.c:14
void bh_chip_cancel_bus_transfer_set(struct bh_chip *chip)
Definition bh_chip.c:20
struct bh_chip BH_CHIPS[DT_PROP_LEN_OR(DT_PATH(chips), chips, 0)]
void handle_pgood_event(struct bh_chip *chip, struct gpio_dt_spec board_fault_led)
Definition bh_chip.c:242
cm2dmMessageRet bh_chip_get_cm2dm_message(struct bh_chip *chip)
Definition bh_chip.c:30
void bh_chip_deassert_asic_reset(const struct bh_chip *chip)
Definition bh_chip.c:148
void bh_chip_deassert_spi_reset(const struct bh_chip *chip)
Definition bh_chip.c:158
int pgood_gpio_setup(struct bh_chip *chip)
Definition bh_chip.c:218
static uint16_t power
Definition cm2dm_msg.c:43
struct bh_arc arc
Definition bh_chip.h:38
struct gpio_dt_spec asic_reset
Definition bh_chip.h:28
const struct device * jtag
Definition bh_chip.h:34
const struct device * flash
Definition bh_chip.h:33
struct gpio_dt_spec spi_mux
Definition bh_chip.h:30
struct gpio_dt_spec spi_reset
Definition bh_chip.h:29
const struct bh_straps strapping
Definition bh_chip.h:36
struct gpio_dt_spec therm_trip
Definition bh_chip.h:32
struct gpio_dt_spec pgood
Definition bh_chip.h:31
uint32_t arc_hang_pc
Definition bh_chip.h:78
bool arc_wdog_triggered
Definition bh_chip.h:80
uint8_t fan_speed
Definition bh_chip.h:83
int64_t pgood_last_trip_ms
Definition bh_chip.h:69
bool pgood_severe_fault
Definition bh_chip.h:68
uint8_t last_cm2dm_seq_num
Definition bh_chip.h:88
bool workaround_applied
Definition bh_chip.h:43
bool last_cm2dm_seq_num_valid
Definition bh_chip.h:89
volatile bool therm_trip_triggered
Definition bh_chip.h:62
atomic_t trigger_reset
Definition bh_chip.h:58
uint16_t therm_trip_count
Definition bh_chip.h:63
uint32_t telemetry_heartbeat
Definition bh_chip.h:75
volatile bool pgood_fall_triggered
Definition bh_chip.h:66
volatile bool performing_reset
Definition bh_chip.h:59
volatile bool pgood_rise_triggered
Definition bh_chip.h:67
bool arc_needs_init_msg
Definition bh_chip.h:49
unsigned int bus_cancel_flag
Definition bh_chip.h:51
uint32_t auto_reset_timeout
Definition bh_chip.h:72
bool fan_speed_forced
Definition bh_chip.h:85
struct bh_chip_data data
Definition bh_chip.h:94
struct gpio_callback therm_trip_cb
Definition bh_chip.h:95
const struct bh_chip_config config
Definition bh_chip.h:93
struct k_timer auto_reset_timer
Definition bh_chip.h:97
struct gpio_callback pgood_cb
Definition bh_chip.h:96
struct gpio_dt_spec gpio6
Definition bh_chip.h:21
struct gpio_dt_spec gpio38
Definition bh_chip.h:22
struct gpio_dt_spec gpio40
Definition bh_chip.h:24
struct gpio_dt_spec gpio39
Definition bh_chip.h:23