diff --git a/README.md b/README.md index 0014e828..6d9e0e2e 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,6 @@ Plugins: * aie_base : No feature * aie_debug : No feature * aie_halt : Internal, used with ML Debugger on Client -* aie_pc : No feature * aie_profile : Used on Client, Edge, Alveo, hardware emulation * aie_status : Used on Edge, Alveo, hardware emulation * aie_trace : Used on Client, Edge, Alveo, hardware emulation @@ -78,11 +77,9 @@ Plugins: * lop : Low-overhead OpenCL trace of host code. Available on Edge, Alveo, hardware emulation * ml_timeline : Available on Client and VE2 (VAIML) * native : host trace used on Edge, Alveo, and Client, hardware emulation -* noc : No feature * opencl : OpenCL trace of host code. Available on Edge, Alveo, hardware emulation * pl_deadlock: Detect and interpret PL deadlock. Available on Edge, Alveo * power: Available on Alveo -* system_compiler : No feature * user : Called from user host code. Available on Edge, Alveo, Client, hardware emulation. * vart : No feature * vp_base : No feature diff --git a/profile/plugin/CMakeLists.txt b/profile/plugin/CMakeLists.txt index 829c4f00..c2db27b3 100644 --- a/profile/plugin/CMakeLists.txt +++ b/profile/plugin/CMakeLists.txt @@ -25,7 +25,6 @@ elseif (XDP_CLIENT_BUILD_CMAKE STREQUAL "yes") if (WIN32) add_subdirectory(aie_halt) - add_subdirectory(aie_pc) endif() else() @@ -52,9 +51,7 @@ add_subdirectory(aie_status) add_subdirectory(aie_profile) add_subdirectory(aie_trace) add_subdirectory(device_offload/hw_emu) -add_subdirectory(noc) add_subdirectory(power) -add_subdirectory(system_compiler) add_subdirectory(vart) else() diff --git a/profile/plugin/aie_pc/CMakeLists.txt b/profile/plugin/aie_pc/CMakeLists.txt deleted file mode 100644 index 0ca7ffb7..00000000 --- a/profile/plugin/aie_pc/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. -# - -# ======================================================================== -# This builds the AIE PC Plugin which can configure Perf Counter registers -# to count cycles between core function start and end. -# It is currently built on Client Windows Only. -# ========================================================================= - -if (XDP_CLIENT_BUILD_CMAKE STREQUAL "yes") - set(IMPL_DIR "${PROFILE_DIR}/plugin/aie_pc/clientDev") -endif() - - -file(GLOB XDP_AIE_PC_PLUGIN_FILES - "${PROFILE_DIR}/plugin/aie_pc/*.h" - "${PROFILE_DIR}/plugin/aie_pc/*.cpp" - "${IMPL_DIR}/*.h" - "${IMPL_DIR}/*.cpp" -) - -file(GLOB XDP_DEVICE_COMMON_FILES - "${PROFILE_DIR}/device/common/*.h" - "${PROFILE_DIR}/device/common/*.cpp" -) - -if (XDP_CLIENT_BUILD_CMAKE STREQUAL "yes") - xrt_configure_version_file(xdp_aie_pc_plugin SHARED) - add_library(xdp_aie_pc_plugin SHARED xdp_aie_pc_plugin-version.rc - ${XDP_AIE_PC_PLUGIN_FILES} ${XDP_DEVICE_COMMON_FILES}) - add_dependencies(xdp_aie_pc_plugin xdp_core xrt_coreutil) - target_link_libraries(xdp_aie_pc_plugin PRIVATE xdp_core xrt_coreutil xaiengine) - target_compile_definitions(xdp_aie_pc_plugin PRIVATE XDP_CLIENT_BUILD=1 -DXAIE_FEATURE_MSVC) - target_include_directories(xdp_aie_pc_plugin PRIVATE ${AIERT_DIR}/include) - set_target_properties(xdp_aie_pc_plugin PROPERTIES VERSION ${XRT_VERSION_STRING} SOVERSION ${XRT_SOVERSION}) - - install (TARGETS xdp_aie_pc_plugin - RUNTIME DESTINATION ${XDP_PLUGIN_INSTALL_DIR} COMPONENT ${XRT_COMPONENT} - LIBRARY DESTINATION ${XDP_PLUGIN_INSTALL_DIR} COMPONENT ${XRT_COMPONENT} ${XRT_NAMELINK_SKIP} - ) - -# Else, on edge-aarch64 don't build at all - -endif() diff --git a/profile/plugin/aie_pc/aie_pc_cb.cpp b/profile/plugin/aie_pc/aie_pc_cb.cpp deleted file mode 100644 index 6d7dc29b..00000000 --- a/profile/plugin/aie_pc/aie_pc_cb.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright (C) 2024 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#define XDP_PLUGIN_SOURCE - -#include "xdp/profile/plugin/aie_pc/aie_pc_cb.h" -#include "xdp/profile/plugin/aie_pc/aie_pc_plugin.h" - -namespace xdp { - - static AIEPCPlugin aiePCPluginInstance; - - static void updateDeviceAIEPC(void* hwCtxImpl) - { - if (AIEPCPlugin::alive()) { - aiePCPluginInstance.updateDevice(hwCtxImpl); - } - } - - static void finishflushDeviceAIEPC(void* hwCtxImpl) - { - if (AIEPCPlugin::alive()) { - aiePCPluginInstance.finishflushDevice(hwCtxImpl); - } - } - -} // end namespace xdp - -extern "C" -void updateDeviceAIEPC(void* hwCtxImpl) -{ - xdp::updateDeviceAIEPC(hwCtxImpl); -} - -extern "C" -void finishflushDeviceAIEPC(void* hwCtxImpl) -{ - xdp::finishflushDeviceAIEPC(hwCtxImpl); -} \ No newline at end of file diff --git a/profile/plugin/aie_pc/aie_pc_cb.h b/profile/plugin/aie_pc/aie_pc_cb.h deleted file mode 100644 index 549fe381..00000000 --- a/profile/plugin/aie_pc/aie_pc_cb.h +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (C) 2024 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#ifndef XDP_PLUGIN_AIE_PC_CB_H -#define XDP_PLUGIN_AIE_PC_CB_H - -#include "xdp/config.h" - -extern "C" { - - XDP_PLUGIN_EXPORT void updateDeviceAIEPC(void* hwCtxImpl); - XDP_PLUGIN_EXPORT void finishflushDeviceAIEPC(void* hwCtxImpl); - -} -#endif diff --git a/profile/plugin/aie_pc/aie_pc_impl.h b/profile/plugin/aie_pc/aie_pc_impl.h deleted file mode 100644 index 459fdf4d..00000000 --- a/profile/plugin/aie_pc/aie_pc_impl.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (C) 2024 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#ifndef XDP_PLUGIN_AIE_PC_IMPL_H -#define XDP_PLUGIN_AIE_PC_IMPL_H - -#include "core/include/xrt/xrt_hw_context.h" - -namespace xdp { - - class VPDatabase; - - class AIEPCImpl - { - protected : - VPDatabase* db = nullptr; - xrt::hw_context mHwContext; - - public: - AIEPCImpl(VPDatabase* dB) - : db(dB) - {} - - AIEPCImpl() = delete; - - virtual ~AIEPCImpl() {} - - virtual void updateDevice(void*) = 0; - virtual void finishflushDevice(void*) = 0; - - void setHwContext(xrt::hw_context ctx) - { - mHwContext = std::move(ctx); - } - }; - -} -#endif \ No newline at end of file diff --git a/profile/plugin/aie_pc/aie_pc_plugin.cpp b/profile/plugin/aie_pc/aie_pc_plugin.cpp deleted file mode 100644 index e5f4e68a..00000000 --- a/profile/plugin/aie_pc/aie_pc_plugin.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (C) 2024 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#define XDP_PLUGIN_SOURCE - -#include -#include - -#include "core/common/device.h" -#include "core/common/message.h" -#include "core/common/api/hw_context_int.h" - -#include "xdp/profile/plugin/aie_pc/aie_pc_plugin.h" -#include "xdp/profile/plugin/vp_base/info.h" -#include "xdp/profile/plugin/vp_base/utility.h" - -#ifdef XDP_CLIENT_BUILD -#include "xdp/profile/plugin/aie_pc/clientDev/aie_pc.h" -#endif - -namespace xdp { - - bool AIEPCPlugin::live = false; - - AIEPCPlugin::AIEPCPlugin() - : XDPPlugin() - { - AIEPCPlugin::live = true; - - db->registerPlugin(this); - db->registerInfo(info::aie_pc); - } - - AIEPCPlugin::~AIEPCPlugin() - { - if (VPDatabase::alive()) { - try { - writeAll(false); - } - catch (...) { - } - db->unregisterPlugin(this); - } - - AIEPCPlugin::live = false; - } - - bool AIEPCPlugin::alive() - { - return AIEPCPlugin::live; - } - - void AIEPCPlugin::updateDevice(void* hwCtxImpl) - { -#ifdef XDP_CLIENT_BUILD - if (mHwCtxImpl) { - // For client device flow, only 1 device and xclbin is supported now. - return; - } - mHwCtxImpl = hwCtxImpl; - - xrt::hw_context hwContext = xrt_core::hw_context_int::create_hw_context_from_implementation(mHwCtxImpl); - std::shared_ptr coreDevice = xrt_core::hw_context_int::get_core_device(hwContext); - - // Only one device for Client Device flow - uint64_t deviceId = db->addDevice("win_device"); - (db->getStaticInfo()).updateDeviceFromCoreDevice(deviceId, coreDevice); - (db->getStaticInfo()).setDeviceName(deviceId, "win_device"); - - DeviceDataEntry.valid = true; - DeviceDataEntry.implementation = std::make_unique(db); - DeviceDataEntry.implementation->setHwContext(hwContext); - DeviceDataEntry.implementation->updateDevice(mHwCtxImpl); -#endif - } - - void AIEPCPlugin::finishflushDevice(void* hwCtxImpl) - { -#ifdef XDP_CLIENT_BUILD - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", "AIE PC Plugin Finish Flush"); - if (!mHwCtxImpl || !DeviceDataEntry.valid) { - return; - } - - if (hwCtxImpl != mHwCtxImpl) { - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", - "New Hw Context Impl passed in AIE PC Plugin."); - return; - } - - DeviceDataEntry.valid = false; - DeviceDataEntry.implementation->finishflushDevice(mHwCtxImpl); -#endif - } - - void AIEPCPlugin::writeAll(bool /*openNewFiles*/) - { -#ifdef XDP_CLIENT_BUILD - - if (!mHwCtxImpl || !DeviceDataEntry.valid) { - return; - } - - // For client device flow, only 1 device and xclbin is supported now. - DeviceDataEntry.valid = false; - DeviceDataEntry.implementation->finishflushDevice(mHwCtxImpl); -#endif - } - -} \ No newline at end of file diff --git a/profile/plugin/aie_pc/aie_pc_plugin.h b/profile/plugin/aie_pc/aie_pc_plugin.h deleted file mode 100644 index c9a32002..00000000 --- a/profile/plugin/aie_pc/aie_pc_plugin.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (C) 2024 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#ifndef XDP_AIE_PC_PLUGIN_H -#define XDP_AIE_PC_PLUGIN_H - -#include "xdp/profile/plugin/aie_pc/aie_pc_impl.h" -#include "xdp/profile/plugin/vp_base/vp_base_plugin.h" - - -namespace xdp { - - class AIEPCPlugin : public XDPPlugin - { - public: - - AIEPCPlugin(); - ~AIEPCPlugin(); - - void updateDevice(void* hwCtxImpl); - void finishflushDevice(void* hwCtxImpl); - - void writeAll(bool); - - static bool alive(); - - private: - static bool live; - - struct DeviceData { - bool valid; - std::unique_ptr implementation; - } DeviceDataEntry; - - void* mHwCtxImpl = nullptr; - - }; - -} // end namespace xdp - -#endif diff --git a/profile/plugin/aie_pc/clientDev/aie_pc.cpp b/profile/plugin/aie_pc/clientDev/aie_pc.cpp deleted file mode 100644 index f18389f5..00000000 --- a/profile/plugin/aie_pc/clientDev/aie_pc.cpp +++ /dev/null @@ -1,395 +0,0 @@ -/** - * Copyright (C) 2024 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#define XDP_PLUGIN_SOURCE - -#include -#include -#include - -#include "core/common/device.h" -#include "core/common/message.h" -#include "core/common/api/hw_context_int.h" - -#include "xdp/profile/database/database.h" -#include "xdp/profile/database/static_info/aie_util.h" -#include "xdp/profile/database/static_info/aie_constructs.h" -#include "xdp/profile/device/common/client_transaction.h" -#include "xdp/profile/plugin/aie_pc/clientDev/aie_pc.h" -#include "xdp/profile/plugin/vp_base/utility.h" -#include "xdp/profile/plugin/vp_base/info.h" - -#include "core/common/api/bo_int.h" -#include "xrt/xrt_bo.h" -#include "core/common/api/xclbin_int.h" -#include "core/include/xclbin.h" - -extern "C" { - #include - #include - #include -} - -namespace xdp { - - struct PCInfo { - uint64_t startPC; - uint64_t endPC; - XAie_Events startPCEvent; - XAie_Events endPCEvent; - uint64_t perfCounterOffset; - uint8_t perfCounterId; - }; - - struct TilePCInfo { - std::unique_ptr eventsCorePC_0_1; - std::unique_ptr eventsCorePC_2_3; - }; - - AIEPCClientDevImpl::AIEPCClientDevImpl(VPDatabase*dB) - : AIEPCImpl(dB) - { - } - - AIEPCClientDevImpl::~AIEPCClientDevImpl() - {} - - void AIEPCClientDevImpl::updateDevice(void* hwCtxImpl) - { - (void)hwCtxImpl; - - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", - "In AIEPCClientDevImpl::updateDevice"); - - std::unique_ptr txnHandler - = std::make_unique(mHwContext, "AIE PC"); - - if (!txnHandler->initializeKernel("XDP_KERNEL")) - return; - - boost::property_tree::ptree aieMetadata; - try { - auto device = xrt_core::hw_context_int::get_core_device(mHwContext); - xrt::xclbin xrtXclbin = device.get()->get_xclbin(device.get()->get_xclbin_uuid()); - auto data = xrt_core::xclbin_int::get_axlf_section(xrtXclbin, AIE_METADATA); - - if (!data.first || !data.second) { - xrt_core::message::send(xrt_core::message::severity_level::warning, "XRT", "Empty AIE Metadata in xclbin"); - return; - } - - std::stringstream ss; - ss.write(data.first,data.second); - - boost::property_tree::read_json(ss, aieMetadata); - } catch (const std::exception& e) { - std::string msg("AIE Metadata could not be read/processed from xclbin: "); - msg += e.what(); - xrt_core::message::send(xrt_core::message::severity_level::warning, "XRT", msg); - return; - } - - std::string str = xrt_core::config::get_aie_pc_settings(); - - std::vector addresses; - - std::map>>::iterator itrSpec; - std::map>::iterator itrTileInfo; - - uint32_t nEntries = 0; - - boost::split(addresses, str, boost::is_any_of(";")); - // Format : col, row:start_pc:end_pc ; col,row:start_pc:end_pc - for (uint32_t i = 0; i < addresses.size(); i++) { - std::vector address; - boost::split(address, addresses[i], boost::is_any_of(":")); - if (3 != address.size()) { - continue; - } - std::vector loc; - boost::split(loc, address[0], boost::is_any_of(",")); - if (2 != loc.size()) { - continue; - } - uint64_t col = 0, row = 0; - col = std::stoul(loc[0], nullptr, 10); - row = std::stoul(loc[1], nullptr, 10); - - itrSpec = spec.find(col); - // No entries added for current column - if (itrSpec == spec.end()) { - // Populate info - std::unique_ptr info = std::make_unique(); - info->startPC = std::stoul(address[1], nullptr, 10); - info->endPC = std::stoul(address[2], nullptr, 10); - info->startPCEvent = (XAie_Events)XAIE_EVENT_PC_0_CORE; - info->endPCEvent = (XAie_Events)XAIE_EVENT_PC_1_CORE; - info->perfCounterId = 0; - info->perfCounterOffset = 0x0031520; - - std::stringstream msg; - msg << "Configure PC event for Core " - << col << ", " << row << " Start PC " << info->startPC << " End PC " << info->endPC - << " using perf counter id " << std::to_string(info->perfCounterId) - << " perf counter address " << std::hex << info->perfCounterOffset << std::dec; - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", msg.str()); - - // Add new map for current column - spec[col] = std::map>(); - - // Add TilePCInfo entry for current column, row - spec[col][row] = std::make_unique(); - spec[col][row]->eventsCorePC_0_1 = std::move(info); - - nEntries++; - continue; - } - - // Entry found for current column - if (itrSpec != spec.end()) { - itrTileInfo = itrSpec->second.find(row); - - // No entry found for current column,row core tile - if (itrTileInfo == itrSpec->second.end()) { - // Populate info - std::unique_ptr info = std::make_unique(); - info->startPC = std::stoul(address[1], nullptr, 10); - info->endPC = std::stoul(address[2], nullptr, 10); - info->startPCEvent = (XAie_Events)XAIE_EVENT_PC_0_CORE; - info->endPCEvent = (XAie_Events)XAIE_EVENT_PC_1_CORE; - info->perfCounterId = 0; - info->perfCounterOffset = 0x0031520; - - std::stringstream msg; - msg << "Configure PC event for Core " - << col << ", " << row << " Start PC " << info->startPC << " End PC " << info->endPC - << " using perf counter id " << std::to_string(info->perfCounterId) - << " perf counter address " << std::hex << info->perfCounterOffset << std::dec; - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", msg.str()); - - // Add TilePCInfo entry for current column, row - itrSpec->second.emplace(row, std::make_unique()); - spec[col][row]->eventsCorePC_0_1 = std::move(info); - - nEntries++; - continue; - } - - // Entry found for current column,row core tile - if (itrTileInfo != itrSpec->second.end()) { - - // Check whether XAIE_EVENT_PC_2_CORE, XAIE_EVENT_PC_3_CORE configured for current column,row core tile - if (nullptr == itrTileInfo->second->eventsCorePC_2_3) { - - // Populate info - std::unique_ptr info = std::make_unique(); - info->startPC = std::stoul(address[1], nullptr, 10); - info->endPC = std::stoul(address[2], nullptr, 10); - info->startPCEvent = (XAie_Events)XAIE_EVENT_PC_2_CORE; - info->endPCEvent = (XAie_Events)XAIE_EVENT_PC_3_CORE; - info->perfCounterId = 1; - info->perfCounterOffset = 0x0031524; - - std::stringstream msg; - msg << "Configure PC event for Core " - << col << ", " << row << " Start PC " << info->startPC << " End PC " << info->endPC - << " using perf counter id " << std::to_string(info->perfCounterId) - << " perf counter address " << std::hex << info->perfCounterOffset << std::dec; - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", msg.str()); - - itrTileInfo->second->eventsCorePC_2_3 = std::move(info); - nEntries++; - continue; - } else { - std::string msg; - msg += "Core PC Events for tile in settings " + addresses[i] - + " are already used up. So, it is ignored. Please use a different core for this Start/End PC addresses.\n"; - xrt_core::message::send(xrt_core::message::severity_level::warning, "XRT", msg); - continue; - } - } - } - } - // end parsing settings and populating desired configurations - - xdp::aie::driver_config meta_config = xdp::aie::getDriverConfig(aieMetadata, "aie_metadata.driver_config"); - - XAie_Config cfg { - meta_config.hw_gen, - meta_config.base_address, - meta_config.column_shift, - meta_config.row_shift, - meta_config.num_rows, - meta_config.num_columns, - meta_config.shim_row, - meta_config.mem_row_start, - meta_config.mem_num_rows, - meta_config.aie_tile_row_start, - meta_config.aie_tile_num_rows, - {0} - }; - - auto RC = XAie_CfgInitialize(&aieDevInst, &cfg); - if (RC != XAIE_OK) { - xrt_core::message::send(xrt_core::message::severity_level::warning, "XRT", "AIE Driver Initialization Failed."); - return; - } - - XAie_StartTransaction(&aieDevInst, XAIE_TRANSACTION_DISABLE_AUTO_FLUSH); - - for (auto const &specEntry : spec) { - for (auto const &rowEntry : specEntry.second) { - auto coreTile = XAie_TileLoc(static_cast(specEntry.first), static_cast(rowEntry.first)); - - if (rowEntry.second->eventsCorePC_0_1) { - XAie_EventPCEnable(&aieDevInst, coreTile, 0, static_cast(rowEntry.second->eventsCorePC_0_1->startPC)); - XAie_EventPCEnable(&aieDevInst, coreTile, 1, static_cast(rowEntry.second->eventsCorePC_0_1->endPC)); - - // Reset Perf Counter - RC = XAie_PerfCounterReset(&aieDevInst, coreTile, XAIE_CORE_MOD, rowEntry.second->eventsCorePC_0_1->perfCounterId); - if(RC != XAIE_OK) { - xrt_core::message::send(xrt_core::message::severity_level::error, "XRT", "AIE Performance Counter Reset Failed."); - return; - } - - RC = XAie_PerfCounterControlSet(&aieDevInst, coreTile, XAIE_CORE_MOD, rowEntry.second->eventsCorePC_0_1->perfCounterId, - rowEntry.second->eventsCorePC_0_1->startPCEvent, rowEntry.second->eventsCorePC_0_1->endPCEvent); - - if(RC != XAIE_OK) { - xrt_core::message::send(xrt_core::message::severity_level::error, "XRT", "AIE Performance Counter Set with Function Call and Return Failed."); - return; - } - } - if (rowEntry.second->eventsCorePC_2_3) { - XAie_EventPCEnable(&aieDevInst, coreTile, 2, static_cast(rowEntry.second->eventsCorePC_2_3->startPC)); - XAie_EventPCEnable(&aieDevInst, coreTile, 3, static_cast(rowEntry.second->eventsCorePC_2_3->endPC)); - - // Reset Perf Counter - RC = XAie_PerfCounterReset(&aieDevInst, coreTile, XAIE_CORE_MOD, rowEntry.second->eventsCorePC_2_3->perfCounterId); - if(RC != XAIE_OK) { - xrt_core::message::send(xrt_core::message::severity_level::error, "XRT", "AIE Performance Counter Reset Failed."); - return; - } - RC = XAie_PerfCounterControlSet(&aieDevInst, coreTile, XAIE_CORE_MOD, rowEntry.second->eventsCorePC_2_3->perfCounterId, - rowEntry.second->eventsCorePC_2_3->startPCEvent, rowEntry.second->eventsCorePC_2_3->endPCEvent); - if(RC != XAIE_OK) { - xrt_core::message::send(xrt_core::message::severity_level::error, "XRT", "AIE Performance Counter Set with Function Call and Return Failed."); - return; - } - } - } - } - - std::stringstream msg1; - msg1 << "Configuration completed for " << nEntries << " entries. " << std::endl; - xrt_core::message::send(xrt_core::message::severity_level::info, "XRT", msg1.str()); - - uint8_t* txnBin = XAie_ExportSerializedTransaction(&aieDevInst, 1, 0); - if (!txnHandler->submitTransaction(txnBin)) - return; - XAie_ClearTransaction(&aieDevInst); - - sz = sizeof(read_register_op_t) + sizeof(register_data_t) * (nEntries - 1); - op = (read_register_op_t*)malloc(sz); - op->count = nEntries; - - uint32_t idx = 0; - for (auto const &specEntry : spec) { - for (auto const &rowEntry : specEntry.second) { - if (rowEntry.second->eventsCorePC_0_1) { - op->data[idx].address = ((specEntry.first) << 25) /*col*/ + ((rowEntry.first) << 20) /*row*/ + rowEntry.second->eventsCorePC_0_1->perfCounterOffset; - idx++; - } - if (rowEntry.second->eventsCorePC_2_3) { - op->data[idx].address = ((specEntry.first) << 25) /*col*/ + ((rowEntry.first) << 20) /*row*/ + rowEntry.second->eventsCorePC_2_3->perfCounterOffset; - idx++; - } - } - } - - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", "AIE PC txn to configure counter completed"); - } - - void AIEPCClientDevImpl::finishflushDevice(void* hwCtxImpl) - { - (void)hwCtxImpl; - - if (db->infoAvailable(xdp::info::ml_timeline)) { - db->broadcast(VPDatabase::MessageType::READ_RECORD_TIMESTAMPS, nullptr); - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", "Done reading recorded timestamps."); - } - - xrt::bo resultBO; - try { - resultBO = xrt_core::bo_int::create_bo(mHwContext, 0x20000, xrt_core::bo_int::use_type::debug); - } catch (std::exception& e) { - std::stringstream msg; - msg << "Unable to create 128KB buffer for AIE PC Profile results. Cannot get AIE PC Profile info. " << e.what() << std::endl; - xrt_core::message::send(xrt_core::message::severity_level::warning, "XRT", msg.str()); - return; - } - - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", "AIE PC Finish Flush "); - std::unique_ptr txnHandler - = std::make_unique(mHwContext, "AIE PC Handler"); - - if (!txnHandler->initializeKernel("XDP_KERNEL")) - return; - XAie_StartTransaction(&aieDevInst, XAIE_TRANSACTION_DISABLE_AUTO_FLUSH); - - XAie_AddCustomTxnOp(&aieDevInst, XAIE_IO_CUSTOM_OP_READ_REGS, (void*)(op), sz); - uint8_t *txn_ptr = XAie_ExportSerializedTransaction(&aieDevInst, 1, 0); - - if (!txnHandler) - return; - txnHandler->setTransactionName("AIE PC Profile Read"); - if (!txnHandler->submitTransaction(txn_ptr)) - return; - - XAie_ClearTransaction(&aieDevInst); - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", "AIE PC txn to read perf counter completed"); - - resultBO.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - auto resultBOMap = resultBO.map(); - uint32_t* output = reinterpret_cast(resultBOMap); - - // Process output - uint32_t idx = 0; - for (auto const &specEntry : spec) { - for (auto const &rowEntry : specEntry.second) { - - if (rowEntry.second->eventsCorePC_0_1) { - std::stringstream msg; - msg << "Core " << specEntry.first << ", " << rowEntry.first - << " PC " << rowEntry.second->eventsCorePC_0_1->startPC << ":" << rowEntry.second->eventsCorePC_0_1->endPC - << " Counter address/values: 0x" << std::hex << op->data[idx].address << ": " << std::dec << output[idx]; - xrt_core::message::send(xrt_core::message::severity_level::info, "XRT", msg.str()); - idx++; - } - if (rowEntry.second->eventsCorePC_2_3) { - std::stringstream msg; - msg << "Core " << specEntry.first << ", " << rowEntry.first - << " PC " << rowEntry.second->eventsCorePC_2_3->startPC << ":" << rowEntry.second->eventsCorePC_2_3->endPC - << " Counter address/values: 0x" << std::hex << op->data[idx].address << ": " << std::dec << output[idx]; - xrt_core::message::send(xrt_core::message::severity_level::info, "XRT", msg.str()); - idx++; - } - } - } - - xrt_core::message::send(xrt_core::message::severity_level::debug, "XRT", "AIE PC Finish Flush Done"); - } -} diff --git a/profile/plugin/aie_pc/clientDev/aie_pc.h b/profile/plugin/aie_pc/clientDev/aie_pc.h deleted file mode 100644 index 67647bb4..00000000 --- a/profile/plugin/aie_pc/clientDev/aie_pc.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (C) 2024 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#ifndef XDP_PLUGIN_AIE_PC_CLIENTDEV_IMPL_H -#define XDP_PLUGIN_AIE_PC_CLIENTDEV_IMPL_H - -#include "xdp/config.h" -#include "xdp/profile/plugin/aie_pc/aie_pc_impl.h" - -extern "C" { - #include - #include -} - -#include - -namespace xdp { - - struct TilePCInfo; - - class AIEPCClientDevImpl : public AIEPCImpl - { - XAie_DevInst aieDevInst = {0}; - - std::size_t sz; - read_register_op_t* op; - - std::map>> spec; - - public : - AIEPCClientDevImpl(VPDatabase* dB); - - ~AIEPCClientDevImpl(); - - virtual void updateDevice(void* hwCtxImpl); - virtual void finishflushDevice(void* hwCtxImpl); - }; - -} - -#endif \ No newline at end of file diff --git a/profile/plugin/noc/CMakeLists.txt b/profile/plugin/noc/CMakeLists.txt deleted file mode 100644 index d555e32a..00000000 --- a/profile/plugin/noc/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# Copyright (C) 2022 Advanced Micro Devices, Inc. All rights reserved. -# - -# ==================================================================== -# This builds the NoC plugin, which is currently unused and not -# completely implemented, but included for future expansion. -# ==================================================================== - -file(GLOB NOC_PLUGIN_FILES - "${PROFILE_DIR}/plugin/noc/*.h" - "${PROFILE_DIR}/plugin/noc/*.cpp" - "${PROFILE_DIR}/writer/noc/*.h" - "${PROFILE_DIR}/writer/noc/*.cpp" -) - -add_library(xdp_noc_plugin SHARED ${NOC_PLUGIN_FILES}) -add_dependencies(xdp_noc_plugin xdp_core xrt_core) -target_link_libraries(xdp_noc_plugin PRIVATE xdp_core xrt_core) - -set_target_properties(xdp_noc_plugin PROPERTIES VERSION ${XRT_VERSION_STRING} SOVERSION ${XRT_SOVERSION}) - -install (TARGETS xdp_noc_plugin - RUNTIME DESTINATION ${XDP_PLUGIN_INSTALL_DIR} COMPONENT ${XRT_COMPONENT} - LIBRARY DESTINATION ${XDP_PLUGIN_INSTALL_DIR} COMPONENT ${XRT_COMPONENT} ${XRT_NAMELINK_SKIP} -) diff --git a/profile/plugin/noc/noc_cb.cpp b/profile/plugin/noc/noc_cb.cpp deleted file mode 100644 index d511c1f3..00000000 --- a/profile/plugin/noc/noc_cb.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (C) 2020 Xilinx, Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#include "xdp/profile/plugin/noc/noc_plugin.h" - -namespace xdp { - - // The NOC profiling plugin doesn't have any callbacks. Instead, it - // only has a single static instance of the plugin object. - - static NOCProfilingPlugin nocPluginInstance; - -} // end namespace xdp diff --git a/profile/plugin/noc/noc_plugin.cpp b/profile/plugin/noc/noc_plugin.cpp deleted file mode 100755 index 1cae6386..00000000 --- a/profile/plugin/noc/noc_plugin.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Copyright (C) 2020-2021 Xilinx, Inc - * Copyright (C) 2022-2025 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#define XDP_PLUGIN_SOURCE - -#include "core/common/system.h" -#include "core/common/time.h" -#include "core/common/config_reader.h" -#include "core/include/xrt/experimental/xrt-next.h" -#include "core/include/xrt/xrt_device.h" - -#include "xdp/profile/database/static_info/aie_constructs.h" -#include "xdp/profile/plugin/noc/noc_plugin.h" -#include "xdp/profile/writer/noc/noc_writer.h" -#include "xdp/profile/plugin/vp_base/info.h" -#include "xdp/profile/device/utility.h" - -#include - -namespace xdp { - - NOCProfilingPlugin::NOCProfilingPlugin() - : XDPPlugin(), mKeepPolling(true) - { - db->registerPlugin(this); - db->registerInfo(info::noc); - - uint32_t numDevices = xrt_core::get_total_devices(true).second; - uint32_t index = 0; - while (index < numDevices) { - try { - auto xrtDevice = std::make_unique(index); - auto ownedHandle = xrtDevice->get_handle()->get_device_handle(); - // Determine the name of the device - std::string deviceName = util::getDeviceName(ownedHandle); - mDevices.push_back(deviceName); - - std::string outputFile = "noc_profile_" + deviceName + ".csv"; - VPWriter* writer = new NOCProfilingWriter(outputFile.c_str(), - deviceName.c_str(), - index) ; - writers.push_back(writer); - db->addOpenedFile(writer->getcurrentFileName(), "NOC_PROFILE") ; - } catch (const std::runtime_error &) { - break; - } - ++index; - } - - // Get polling interval (in msec) - mPollingInterval = xrt_core::config::get_noc_profile_interval_ms(); - - // Start the NOC profiling thread - mPollingThread = std::thread(&NOCProfilingPlugin::pollNOCCounters, this); - } - - NOCProfilingPlugin::~NOCProfilingPlugin() - { - // Stop the polling thread - mKeepPolling = false; - mPollingThread.join(); - - if (VPDatabase::alive()) { - for (auto w : writers) { - w->write(false); - } - - db->unregisterPlugin(this); - } - } - - void NOCProfilingPlugin::pollNOCCounters() - { - /* - uint64_t pollnum = 0; - - while (mKeepPolling) { - // Get timestamp in milliseconds - double timestamp = xrt_core::time_ns() / 1.0e6; - uint64_t index = 0; - - // Iterate over all devices - for (auto device : mDevices) { - XclbinInfo* currentXclbin = db->getStaticInfo().getCurrentlyLoadedXclbin(index); - // Iterate over all NOC NMUs - auto numNOC = db->getStaticInfo().getNumNOC(index, currentXclbin); - for (uint64_t n=0; n < numNOC; n++) { - auto noc = db->getStaticInfo().getNOC(index, currentXclbin, n); - - // Name = ----- - std::vector result; - boost::split(result, noc->name, boost::is_any_of("-")); - std::string cellName = (result.size() > 1) ? result[1] : "N/A"; - - // TODO: replace dummy data with counter values - std::vector values; - - // Read - uint64_t readByteCount = pollnum * 128; - uint64_t readBurstCount = pollnum * 10; - uint64_t readTotalLatency = pollnum * 1000; - uint64_t readMinLatency = 42; - uint64_t readMaxLatency = 100; - values.push_back(readByteCount); - values.push_back(readBurstCount); - values.push_back(readTotalLatency); - values.push_back(readMinLatency); - values.push_back(readMaxLatency); - - // Write - uint64_t writeByteCount = pollnum * 234; - uint64_t writeBurstCount = pollnum * 21; - uint64_t writeTotalLatency = pollnum * 1234; - uint64_t writeMinLatency = 24; - uint64_t writeMaxLatency = 123; - values.push_back(writeByteCount); - values.push_back(writeBurstCount); - values.push_back(writeTotalLatency); - values.push_back(writeMinLatency); - values.push_back(writeMaxLatency); - - // Add sample to dynamic database - // db->getDynamicInfo().addNOCSample(index, timestamp, cellName, values); - ++index; - } - } - - std::this_thread::sleep_for(std::chrono::milliseconds(mPollingInterval)); - ++pollnum; - } - */ - } - -} // end namespace xdp diff --git a/profile/plugin/noc/noc_plugin.h b/profile/plugin/noc/noc_plugin.h deleted file mode 100755 index f1ba4ca7..00000000 --- a/profile/plugin/noc/noc_plugin.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (C) 2020 Xilinx, Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#ifndef XDP_NOC_PLUGIN_DOT_H -#define XDP_NOC_PLUGIN_DOT_H - -#include -#include -#include - -#include "xdp/profile/plugin/vp_base/vp_base_plugin.h" -#include "xdp/config.h" - -namespace xdp { - - class NOCProfilingPlugin : public XDPPlugin - { - public: - NOCProfilingPlugin(); - ~NOCProfilingPlugin(); - - private: - void pollNOCCounters(); - - private: - // NOC profiling uses its own thread - bool mKeepPolling; - unsigned int mPollingInterval; - std::thread mPollingThread; - std::vector mDevices; - }; - -} // end namespace xdp - -#endif diff --git a/profile/plugin/system_compiler/CMakeLists.txt b/profile/plugin/system_compiler/CMakeLists.txt deleted file mode 100644 index 520364b9..00000000 --- a/profile/plugin/system_compiler/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -# Copyright (C) 2022 Advanced Micro Devices, Inc. All rights reserved. -# - -# ==================================================================== -# This builds the System Compiler plugin. -# ==================================================================== - -file(GLOB SYSTEM_COMPILER_PLUGIN_FILES - "${PROFILE_DIR}/plugin/system_compiler/*.h" - "${PROFILE_DIR}/plugin/system_compiler/*.cpp" -) - -add_library(xdp_system_compiler_plugin SHARED ${SYSTEM_COMPILER_PLUGIN_FILES}) -add_dependencies(xdp_system_compiler_plugin xdp_core) -target_link_libraries(xdp_system_compiler_plugin PRIVATE xdp_core) - -set_target_properties(xdp_system_compiler_plugin PROPERTIES VERSION ${XRT_VERSION_STRING} SOVERSION ${XRT_SOVERSION}) - -install (TARGETS xdp_system_compiler_plugin - RUNTIME DESTINATION ${XDP_PLUGIN_INSTALL_DIR} COMPONENT ${XRT_COMPONENT} - LIBRARY DESTINATION ${XDP_PLUGIN_INSTALL_DIR} COMPONENT ${XRT_COMPONENT} ${XRT_NAMELINK_SKIP} -) diff --git a/profile/plugin/system_compiler/system_compiler_cb.cpp b/profile/plugin/system_compiler/system_compiler_cb.cpp deleted file mode 100644 index 49a9539d..00000000 --- a/profile/plugin/system_compiler/system_compiler_cb.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (C) 2021 Xilinx, Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#include "xdp/profile/plugin/system_compiler/system_compiler_plugin.h" - -namespace xdp { - - // The System Compiler plugin currently doesn't have any callbacks. - // Instead, it only has a single static instance of the plugin object. - - static SystemCompilerPlugin systemCompilerPluginInstance ; - -} // end namespace xdp diff --git a/profile/plugin/system_compiler/system_compiler_plugin.cpp b/profile/plugin/system_compiler/system_compiler_plugin.cpp deleted file mode 100644 index 4c407357..00000000 --- a/profile/plugin/system_compiler/system_compiler_plugin.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (C) 2021 Xilinx, Inc - * Copyright (C) 2023-2025 Advanced Micro Devices, Inc. - All rights reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#define XDP_PLUGIN_SOURCE - -#include "xdp/profile/plugin/system_compiler/system_compiler_plugin.h" -#include "xdp/profile/plugin/vp_base/info.h" - -namespace xdp { - - SystemCompilerPlugin::SystemCompilerPlugin() : XDPPlugin() - { - db->registerPlugin(this); - db->registerInfo(info::system_compiler); - - db->addOpenedFile("sc_host_summary.csv", "PROFILE_SUMMARY"); - db->addOpenedFile("sc_trace.csv", "VP_TRACE"); - } - - SystemCompilerPlugin::~SystemCompilerPlugin() - { - } - - -} // end namespace xdp diff --git a/profile/plugin/system_compiler/system_compiler_plugin.h b/profile/plugin/system_compiler/system_compiler_plugin.h deleted file mode 100644 index 861af9d3..00000000 --- a/profile/plugin/system_compiler/system_compiler_plugin.h +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (C) 2021 Xilinx, Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may - * not use this file except in compliance with the License. A copy of the - * License is located at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -#ifndef SYSTEM_COMPILER_PLUGIN_DOT_H -#define SYSTEM_COMPILER_PLUGIN_DOT_H - -#include "xdp/profile/plugin/vp_base/vp_base_plugin.h" - -namespace xdp { - - class SystemCompilerPlugin : public XDPPlugin - { - public: - SystemCompilerPlugin() ; - ~SystemCompilerPlugin() ; - } ; - -} // end namespace xdp - -#endif diff --git a/profile/plugin/vp_base/info.h b/profile/plugin/vp_base/info.h index d5693b76..546e8ba3 100644 --- a/profile/plugin/vp_base/info.h +++ b/profile/plugin/vp_base/info.h @@ -1,6 +1,6 @@ /** * Copyright (C) 2016-2021 Xilinx, Inc - * Copyright (C) 2022-2024 Advanced Micro Devices, Inc. - All rights reserved + * Copyright (C) 2022-2026 Advanced Micro Devices, Inc. - All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"). You may * not use this file except in compliance with the License. A copy of the @@ -20,8 +20,7 @@ #include -namespace xdp { -namespace info { +namespace xdp::info { const uint64_t aie_profile = 0x00001 ; const uint64_t aie_trace = 0x00002 ; @@ -29,21 +28,20 @@ namespace info { const uint64_t hal = 0x00008 ; const uint64_t lop = 0x00010 ; const uint64_t native = 0x00020 ; - const uint64_t noc = 0x00040 ; + // Removed functionality: 0x00040 is currently unused const uint64_t opencl_counters = 0x00080 ; const uint64_t opencl_trace = 0x00100 ; const uint64_t power = 0x00200 ; - const uint64_t system_compiler = 0x00400 ; + // Removed functionality: 0x00400 is currently unused const uint64_t user = 0x00800 ; const uint64_t vart = 0x01000 ; const uint64_t aie_status = 0x02000 ; const uint64_t ml_timeline = 0x04000 ; const uint64_t aie_halt = 0x08000 ; - const uint64_t aie_pc = 0x10000 ; + // Removed functionality: 0x10000 is currently unused const uint64_t aie_debug = 0x20000 ; const uint64_t aie_dtrace = 0x40000 ; -} // end namespace info -} // end namespace xdp ; +} // end namespace xdp::info #endif