diff --git a/device/api/umd/device/tt_device/grayskull_tt_device.h b/device/api/umd/device/tt_device/grayskull_tt_device.h index b1bcbe82..f377148b 100644 --- a/device/api/umd/device/tt_device/grayskull_tt_device.h +++ b/device/api/umd/device/tt_device/grayskull_tt_device.h @@ -14,5 +14,7 @@ class GrayskullTTDevice : public TTDevice { GrayskullTTDevice(std::unique_ptr pci_device); ChipInfo get_chip_info() override; + + BoardType get_board_type() override; }; } // namespace tt::umd diff --git a/device/api/umd/device/tt_device/tt_device.h b/device/api/umd/device/tt_device/tt_device.h index 250d61e7..47efbd38 100644 --- a/device/api/umd/device/tt_device/tt_device.h +++ b/device/api/umd/device/tt_device/tt_device.h @@ -141,7 +141,7 @@ class TTDevice { virtual uint32_t get_clock(); - virtual BoardType get_board_type(); + virtual BoardType get_board_type() = 0; protected: std::unique_ptr pci_device_; diff --git a/device/api/umd/device/types/cluster_descriptor_types.h b/device/api/umd/device/types/cluster_descriptor_types.h index 77be08db..8346ca0f 100644 --- a/device/api/umd/device/types/cluster_descriptor_types.h +++ b/device/api/umd/device/types/cluster_descriptor_types.h @@ -112,7 +112,6 @@ inline BlackholeChipType get_blackhole_chip_type(const BoardType board_type, con } } -// TODO: add Wormhole and Grayskull board types to this function inline BoardType get_board_type_from_board_id(const uint64_t board_id) { uint64_t upi = (board_id >> 36) & 0xFFFFF; diff --git a/device/api/umd/device/wormhole_implementation.h b/device/api/umd/device/wormhole_implementation.h index b49aae0e..718d1da3 100644 --- a/device/api/umd/device/wormhole_implementation.h +++ b/device/api/umd/device/wormhole_implementation.h @@ -90,6 +90,7 @@ static constexpr auto TLB_16M_OFFSET = tlb_offsets{ enum class arc_message_type { NOP = 0x11, // Do nothing + GET_SMBUS_TELEMETRY_ADDR = 0x2C, GET_AICLK = 0x34, ARC_GO_BUSY = 0x52, ARC_GO_SHORT_IDLE = 0x53, diff --git a/device/tt_device/grayskull_tt_device.cpp b/device/tt_device/grayskull_tt_device.cpp index 5b014592..16216e31 100644 --- a/device/tt_device/grayskull_tt_device.cpp +++ b/device/tt_device/grayskull_tt_device.cpp @@ -14,4 +14,10 @@ ChipInfo GrayskullTTDevice::get_chip_info() { throw std::runtime_error("Reading ChipInfo is not supported for Grayskull."); } +BoardType GrayskullTTDevice::get_board_type() { + throw std::runtime_error( + "Base TTDevice class does not have get_board_type implemented. Move this to abstract function once Grayskull " + "TTDevice is deleted."); +} + } // namespace tt::umd diff --git a/device/tt_device/tt_device.cpp b/device/tt_device/tt_device.cpp index 43df4ccf..fa129a0a 100644 --- a/device/tt_device/tt_device.cpp +++ b/device/tt_device/tt_device.cpp @@ -379,10 +379,4 @@ uint32_t TTDevice::get_clock() { "TTDevice is deleted."); } -BoardType TTDevice::get_board_type() { - throw std::runtime_error( - "Base TTDevice class does not have get_board_type implemented. Move this to abstract function once Grayskull " - "TTDevice is deleted."); -} - } // namespace tt::umd diff --git a/device/tt_device/wormhole_tt_device.cpp b/device/tt_device/wormhole_tt_device.cpp index fd55de44..5262e2e3 100644 --- a/device/tt_device/wormhole_tt_device.cpp +++ b/device/tt_device/wormhole_tt_device.cpp @@ -34,7 +34,12 @@ BoardType WormholeTTDevice::get_board_type() { ::std::vector arc_msg_return_values = {0}; static const uint32_t timeout_ms = 1000; uint32_t exit_code = get_arc_messenger()->send_message( - tt::umd::wormhole::ARC_MSG_COMMON_PREFIX | 0x2C, arc_msg_return_values, 0, 0, timeout_ms); + tt::umd::wormhole::ARC_MSG_COMMON_PREFIX | + (uint32_t)tt::umd::wormhole::arc_message_type::GET_SMBUS_TELEMETRY_ADDR, + arc_msg_return_values, + 0, + 0, + timeout_ms); static constexpr uint64_t noc_telemetry_offset = 0x810000000; uint64_t telemetry_struct_offset = arc_msg_return_values[0] + noc_telemetry_offset; @@ -42,8 +47,10 @@ BoardType WormholeTTDevice::get_board_type() { uint32_t board_id_lo; uint32_t board_id_hi; tt_xy_pair arc_core = tt::umd::wormhole::ARC_CORES[0]; - read_from_device(&board_id_hi, arc_core, telemetry_struct_offset + 16, sizeof(uint32_t)); - read_from_device(&board_id_lo, arc_core, telemetry_struct_offset + 20, sizeof(uint32_t)); + static uint64_t board_id_hi_telemetry_offset = 16; + static uint64_t board_id_lo_telemetry_offset = 20; + read_from_device(&board_id_hi, arc_core, telemetry_struct_offset + board_id_hi_telemetry_offset, sizeof(uint32_t)); + read_from_device(&board_id_lo, arc_core, telemetry_struct_offset + board_id_lo_telemetry_offset, sizeof(uint32_t)); return get_board_type_from_board_id(((uint64_t)board_id_hi << 32) | board_id_lo); }