From 5fe433fc6504fd86d37accf5e09bc8520771e57d Mon Sep 17 00:00:00 2001 From: Bojan Rosko Date: Fri, 7 Mar 2025 08:51:10 +0000 Subject: [PATCH] fixes --- device/api/umd/device/tt_simulation_device.h | 23 +++++ device/simulation/tt_simulation_device.cpp | 85 +++++++++++++++---- tests/soc_descs/blackhole_simulation_1x2.yaml | 20 +++-- 3 files changed, 105 insertions(+), 23 deletions(-) diff --git a/device/api/umd/device/tt_simulation_device.h b/device/api/umd/device/tt_simulation_device.h index ecc0c85d..c8ff3b54 100644 --- a/device/api/umd/device/tt_simulation_device.h +++ b/device/api/umd/device/tt_simulation_device.h @@ -46,13 +46,28 @@ class tt_SimulationDevice : public tt_device { tt_cxy_pair core, const TensixSoftResetOptions& soft_resets = TENSIX_DEASSERT_SOFT_RESET); virtual void assert_risc_reset_at_core( tt_cxy_pair core, const TensixSoftResetOptions& soft_resets = TENSIX_ASSERT_SOFT_RESET); + +virtual void deassert_risc_reset_at_core( + const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets = TENSIX_DEASSERT_SOFT_RESET); +virtual void assert_risc_reset_at_core( + const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets = TENSIX_ASSERT_SOFT_RESET); + virtual void close_device(); // Runtime Functions virtual void write_to_device( const void* mem_ptr, uint32_t size_in_bytes, tt_cxy_pair core, uint64_t addr, const std::string& tlb_to_use); + virtual void write_to_device( + const void* mem_ptr, + uint32_t size_in_bytes, + chip_id_t chip, + tt::umd::CoreCoord core, + uint64_t addr, + const std::string& tlb_to_use); virtual void read_from_device( void* mem_ptr, tt_cxy_pair core, uint64_t addr, uint32_t size, const std::string& fallback_tlb); +virtual void read_from_device( + void* mem_ptr, chip_id_t chip, tt::umd::CoreCoord core, uint64_t addr, uint32_t size, const std::string& fallback_tlb); virtual void wait_for_non_mmio_flush(); virtual void wait_for_non_mmio_flush(const chip_id_t chip); @@ -78,6 +93,14 @@ class tt_SimulationDevice : public tt_device { virtual std::uint32_t get_numa_node_for_pcie_device(std::uint32_t device_id); virtual const tt_SocDescriptor& get_soc_descriptor(chip_id_t chip_id) const; + virtual void configure_active_ethernet_cores_for_mmio_device( + chip_id_t mmio_chip, const std::unordered_set& active_eth_cores_per_chip); + virtual void configure_active_ethernet_cores_for_mmio_device( + const std::unordered_set& active_eth_cores_per_chip, chip_id_t mmio_chip); + + CoordSystem get_coord_system_used() const; + tt_xy_pair translate_to_api_coords(const chip_id_t chip, const tt::umd::CoreCoord core_coord) const; + private: // State variables tt_driver_noc_params noc_params; diff --git a/device/simulation/tt_simulation_device.cpp b/device/simulation/tt_simulation_device.cpp index 63c96d7a..5e106cfa 100644 --- a/device/simulation/tt_simulation_device.cpp +++ b/device/simulation/tt_simulation_device.cpp @@ -50,7 +50,7 @@ void print_flatbuffer(const DeviceRequestResponse* buf) { } tt_SimulationDeviceInit::tt_SimulationDeviceInit(const std::filesystem::path& simulator_directory) : - simulator_directory(simulator_directory), soc_descriptor(simulator_directory / "soc_descriptor.yaml", false) {} + simulator_directory(simulator_directory), soc_descriptor(simulator_directory / "soc_descriptor.yaml", false) { } tt_SimulationDevice::tt_SimulationDevice(const tt_SimulationDeviceInit& init) : tt_device() { log_info(tt::LogEmulationDriver, "Instantiating simulation device"); @@ -85,7 +85,8 @@ tt_SimulationDevice::tt_SimulationDevice(const tt_SimulationDeviceInit& init) : tt_SimulationDevice::~tt_SimulationDevice() { close_device(); } -void tt_SimulationDevice::set_barrier_address_params(const barrier_address_params& barrier_address_params_) {} +void tt_SimulationDevice::set_barrier_address_params(const barrier_address_params& barrier_address_params_) { +} void tt_SimulationDevice::start_device(const tt_device_params& device_params) { void* buf_ptr = nullptr; @@ -135,6 +136,16 @@ void tt_SimulationDevice::assert_risc_reset_at_core(tt_cxy_pair core, const Tens assert_risc_reset(); } +void tt_SimulationDevice::deassert_risc_reset_at_core( + const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets) { + deassert_risc_reset_at_core({(size_t)chip, translate_to_api_coords(chip, core)}, soft_resets); +} + +void tt_SimulationDevice::assert_risc_reset_at_core( + const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets) { + assert_risc_reset_at_core({(size_t)chip, translate_to_api_coords(chip, core)}, soft_resets); +} + void tt_SimulationDevice::close_device() { // disconnect from remote connection log_info(tt::LogEmulationDriver, "Sending exit signal to remote..."); @@ -161,6 +172,16 @@ void tt_SimulationDevice::write_to_device( host.send_to_device(wr_buffer_ptr, wr_buffer_size); } +void tt_SimulationDevice::write_to_device( + const void* mem_ptr, + uint32_t size_in_bytes, + chip_id_t chip, + tt::umd::CoreCoord core, + uint64_t addr, + const std::string& tlb_to_use) { + write_to_device(mem_ptr, size_in_bytes, {(size_t)chip, translate_to_api_coords(chip, core)}, addr, tlb_to_use); + } + void tt_SimulationDevice::read_from_device( void* mem_ptr, tt_cxy_pair core, uint64_t addr, uint32_t size, const std::string& fallback_tlb) { void* rd_resp; @@ -182,29 +203,44 @@ void tt_SimulationDevice::read_from_device( nng_free(rd_resp, rd_rsp_sz); } -void tt_SimulationDevice::wait_for_non_mmio_flush() {} +void tt_SimulationDevice::read_from_device( + void* mem_ptr, chip_id_t chip, tt::umd::CoreCoord core, uint64_t addr, uint32_t size, const std::string& fallback_tlb) { + read_from_device(mem_ptr, {(size_t)chip, translate_to_api_coords(chip, core)}, addr, size, fallback_tlb); +} + +void tt_SimulationDevice::wait_for_non_mmio_flush() { +} -void tt_SimulationDevice::wait_for_non_mmio_flush(const chip_id_t chip) {} +void tt_SimulationDevice::wait_for_non_mmio_flush(const chip_id_t chip) { +} void tt_SimulationDevice::l1_membar( - const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set& cores) {} + const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set& cores) { + } void tt_SimulationDevice::dram_membar( - const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set& channels) {} + const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set& channels) { + } void tt_SimulationDevice::dram_membar( - const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set& cores) {} + const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set& cores) { + } // Misc. Functions to Query/Set Device State -std::vector tt_SimulationDevice::detect_available_device_ids() { return {0}; } +std::vector tt_SimulationDevice::detect_available_device_ids() { + return {0}; } -std::set tt_SimulationDevice::get_target_device_ids() { return target_devices_in_cluster; } +std::set tt_SimulationDevice::get_target_device_ids() { + return target_devices_in_cluster; } -std::set tt_SimulationDevice::get_target_mmio_device_ids() { return target_devices_in_cluster; } +std::set tt_SimulationDevice::get_target_mmio_device_ids() { + return target_devices_in_cluster; } -std::set tt_SimulationDevice::get_target_remote_device_ids() { return target_remote_chips; } +std::set tt_SimulationDevice::get_target_remote_device_ids() { + return target_remote_chips; } -std::map tt_SimulationDevice::get_clocks() { return {{0, 0}}; } +std::map tt_SimulationDevice::get_clocks() { + return {{0, 0}}; } void* tt_SimulationDevice::host_dma_address(std::uint64_t offset, chip_id_t src_device_id, uint16_t channel) const { return nullptr; @@ -229,12 +265,31 @@ std::uint64_t tt_SimulationDevice::get_dram_channel_size(std::uint32_t device_id return get_soc_descriptor(device_id).dram_bank_size; // Space per channel is identical for now } -std::uint32_t tt_SimulationDevice::get_num_host_channels(std::uint32_t device_id) { return 1; } +std::uint32_t tt_SimulationDevice::get_num_host_channels(std::uint32_t device_id) { + return 1; } -std::uint32_t tt_SimulationDevice::get_host_channel_size(std::uint32_t device_id, std::uint32_t channel) { return 0; } +std::uint32_t tt_SimulationDevice::get_host_channel_size(std::uint32_t device_id, std::uint32_t channel) { + return 0; } -std::uint32_t tt_SimulationDevice::get_numa_node_for_pcie_device(std::uint32_t device_id) { return 0; } +std::uint32_t tt_SimulationDevice::get_numa_node_for_pcie_device(std::uint32_t device_id) { + return 0; } const tt_SocDescriptor& tt_SimulationDevice::get_soc_descriptor(chip_id_t chip_id) const { return soc_descriptor_per_chip.at(chip_id); }; + +void tt_SimulationDevice::configure_active_ethernet_cores_for_mmio_device( + chip_id_t mmio_chip, const std::unordered_set& active_eth_cores_per_chip) {} +void tt_SimulationDevice::configure_active_ethernet_cores_for_mmio_device( + const std::unordered_set& active_eth_cores_per_chip, chip_id_t mmio_chip) {} + + +CoordSystem tt_SimulationDevice::get_coord_system_used() const { + return arch_name == tt::ARCH::GRAYSKULL ? CoordSystem::PHYSICAL : CoordSystem::VIRTUAL; +} + +// TODO: This is a temporary function while we're switching between the old and the new API. +// Eventually, this function should be so small it would be obvioud to remove. +tt_xy_pair tt_SimulationDevice::translate_to_api_coords(const chip_id_t chip, const tt::umd::CoreCoord core_coord) const { + return get_soc_descriptor(chip).translate_coord_to(core_coord, get_coord_system_used()); +} \ No newline at end of file diff --git a/tests/soc_descs/blackhole_simulation_1x2.yaml b/tests/soc_descs/blackhole_simulation_1x2.yaml index 471a6458..fa8caa01 100644 --- a/tests/soc_descs/blackhole_simulation_1x2.yaml +++ b/tests/soc_descs/blackhole_simulation_1x2.yaml @@ -11,14 +11,18 @@ pcie: dram: [[1-0]] -dram_preferred_eth_endpoint: - [ 1-0 ] - -dram_preferred_worker_endpoint: - [ 1-0 ] - -dram_address_offsets: - [ 0 ] +dram_views: + [ + { + channel: 0, + eth_endpoint: 0, + worker_endpoint: 0, + address_offset: 0 + } + ] + +dram_view_size: + 1073741824 eth: []