9#define BACKEND XAieRscMgrLinux
10#include <xaiefal/rsc/xaiefal-rscmgr-linux.hpp>
12#define BACKEND XAieRscMgrGeneric
13#include <xaiefal/rsc/xaiefal-rscmgr-generic.hpp>
16#define XAIE_ERROR_BCAST_ID 0U
17#define XAIE_ECC_BCAST_ID 6U
18#define XAIE_ECC_PERFCNT_ID 0U
31 throw std::invalid_argument(
"rscmgr: empty device handle");
32 Backend = std::make_shared<BACKEND>(DevHd);
47 std::vector<XAieUserRsc> vRequests;
63 RC =
Backend->requestAllocated(vRequests);
65 (vRequests.size() > 1)) {
67 RC =
Backend->requestContiguous(vRequests);
69 RC =
Backend->request(vRequests);
87 if (vRequests.size() == 0) {
95 NumAieRows =
dev()->NumRows -
dev()->AieTileRowStart;
96 NumRscs = (
dev()->NumCols *
dev()->NumRows) +
97 (
dev()->NumCols * NumAieRows);
99 vRequests.resize(NumRscs);
104 RC =
Backend->requestBc(vRequests, BcastAll);
117 RC =
Backend->requestContiguous(vRequests);
131 RC =
Backend->requestAllocated(vRequests);
156 std::vector<XAieUserRsc> vReleases;
167 return Backend->release(vReleases);
184 std::vector<XAieUserRsc> vReleases;
195 return Backend->free(vReleases);
226 uint64_t FirstBitmapOffset = 0x10;
227 uint64_t NumRscsInFile = 0;
234 "Could not open file " << File
239 Fs.write(
reinterpret_cast<char *
>(&NumRscsInFile),
240 sizeof(NumRscsInFile));
241 Fs.write(
reinterpret_cast<char *
>(&FirstBitmapOffset),
242 sizeof(FirstBitmapOffset));
245 "Failed to write rscs to file " << File
251 RC =
Backend->writeRscBitmaps(Fs, NumRscsInFile);
254 "Failed to write rscs to file " << File
260 Fs.seekp(std::ios_base::beg);
261 Fs.write(
reinterpret_cast<char *
>(&NumRscsInFile),
262 sizeof(NumRscsInFile));
265 "Failed to write rscs to file " << File
276 uint64_t *MetaHeader = (uint64_t *)MetaData;
277 uint64_t NumBitmaps, FirstBitmapOffset;
279 if (MetaHeader == NULL) {
281 "Invalid resource metadata" << std::endl;
282 return XAIE_INVALID_ARGS;
285 NumBitmaps = MetaHeader[0U];
286 FirstBitmapOffset = MetaHeader[1U];
288 if (FirstBitmapOffset < (
sizeof(uint64_t) * 2U) ||
291 "Invalid metadata header"
293 return XAIE_INVALID_ARGS;
295 return Backend->loadRscBitmaps(MetaData + FirstBitmapOffset,
306 std::vector<XAieUserRsc> vBcastRscs, vPerfRscs;
307 std::vector<XAie_LocType> vLocs;
308 uint32_t NumRscs, NumTiles;
311 NumRscs =
dev()->AieTileNumRows *
dev()->NumCols * 2
312 + (
dev()->NumRows -
dev()->AieTileNumRows)
314 vBcastRscs.resize(NumRscs);
317 RC =
Backend->requestBc(vBcastRscs,
true);
320 "broadcast resources for ECC" << std::endl;
324 NumTiles =
dev()->NumCols *
dev()->NumRows;
325 vLocs.resize(NumTiles);
326 RC = XAie_GetUngatedLocsInPartition(
dev(), &NumTiles, vLocs.data());
329 "resources for ECC, get ungated tiles failed"
333 vLocs.resize(NumTiles);
335 for (
auto loc : vLocs) {
339 TileType = XAie_GetTileTypefromLoc(
dev(), loc);
340 if (TileType == XAIEGBL_TILE_TYPE_AIETILE) {
342 Rsc.
Mod = XAIE_CORE_MOD;
346 RC =
Backend->requestAllocated(Rsc);
349 "Unable to reserve " <<
350 "perfcounter resources for ECC"
356 vPerfRscs.push_back(Rsc);
369 std::vector<XAieUserRsc> vRscs, vShimRscs;
370 const XAie_L1IntrMod *L1IntrMod;
374 NumRscs =
dev()->AieTileNumRows *
dev()->NumCols * 2
375 + (
dev()->NumRows -
dev()->AieTileNumRows)
377 vRscs.resize(NumRscs);
380 RC =
Backend->requestBc(vRscs,
true);
383 "broadcast resources for Error Handling"
388 L1IntrMod =
dev()->DevProp.DevMod[XAIEGBL_TILE_TYPE_SHIMPL].L1IntrMod;
389 for (uint32_t i = 1; i < L1IntrMod->MaxErrorBcIdsRvd; i++) {
390 for (uint8_t j = 0; j <
dev()->NumCols; j++) {
392 rsc.
Loc = XAie_TileLoc(j,
dev()->ShimRow);
393 rsc.
Mod = XAIE_PL_MOD;
396 vShimRscs.push_back(rsc);
399 RC =
Backend->requestAllocated(vShimRscs);
402 "shim broadcast resources for Error Handling"
426 return AieHandle->rscMgr()->saveAllocatedRscs(File);
437 return AieHandle->rscMgr()->loadStaticRscs(MetaData);
447 return AieHandle->rscMgr()->reserveEcc();
457 return AieHandle->rscMgr()->reserveErrorHandling();
static std::ostream & log(LogLevel Lvl=LogLevel::FAL_MAX)
Definition xaiefal-log.hpp:50
AI engine low level device pointer handle.
Definition xaiefal-base.hpp:104
AieRC reserveErrorHandling()
Definition xaiefal-rscmgr.hpp:456
AieRC saveAllocatedRscsToFile(const std::string &File)
Definition xaiefal-rscmgr.hpp:425
AieRC reserveEcc()
Definition xaiefal-rscmgr.hpp:446
AieRC loadStaticRscsFromMem(const char *MetaData)
Definition xaiefal-rscmgr.hpp:436
Base AI engine resource class. It defines resource operations and maintains resource state machine.
Definition xaiefal-rsc-base.hpp:69
uint32_t getPreferredId()
Definition xaiefal-rsc-base.hpp:141
virtual XAieRscType getRscType() const
Definition xaiefal-rsc-base.hpp:351
AieRC getRscs(std::vector< XAieUserRsc > &vOutRscs)
Definition xaiefal-rsc-base.hpp:332
AieRC setRscs(std::vector< XAieUserRsc > &vInRscs)
Definition xaiefal-rsc-base.hpp:342
AieRC request(XAieRsc &Rsc)
Definition xaiefal-rscmgr.hpp:45
XAieRscMgr(XAieDevHandle *DevHd)
Definition xaiefal-rscmgr.hpp:28
AieRC release(XAieRsc &Rsc)
Definition xaiefal-rscmgr.hpp:154
AieRC getAvailRscs(std::vector< XAieUserRscStat > &vStats)
Definition xaiefal-rscmgr.hpp:215
AieRC saveAllocatedRscs(const std::string &File)
Definition xaiefal-rscmgr.hpp:225
AieRC loadStaticRscs(const char *MetaData)
Definition xaiefal-rscmgr.hpp:275
AieRC getStaticRscs(std::vector< XAieUserRscStat > &vStats)
Definition xaiefal-rscmgr.hpp:204
~XAieRscMgr()
Definition xaiefal-rscmgr.hpp:34
std::shared_ptr< XAieRscMgrBackend > Backend
Definition xaiefal-rscmgr.hpp:415
AieRC reserveEcc()
Definition xaiefal-rscmgr.hpp:305
XAieDevHandle * AieHd
Definition xaiefal-rscmgr.hpp:414
AieRC reserveErrorHandling()
Definition xaiefal-rscmgr.hpp:368
XAie_DevInst * dev()
Definition xaiefal-rscmgr.hpp:409
AieRC free(XAieRsc &Rsc)
Definition xaiefal-rscmgr.hpp:182
Definition xaiefal-base.hpp:23
@ XAIE_COMBOEVENT
Definition xaiefal-rsc-group.hpp:34
@ XAIE_MDMPERFCNT
Definition xaiefal-rsc-group.hpp:36
@ XAIE_GROUPEVENT
Definition xaiefal-rsc-group.hpp:35
@ XAIE_SSEVENT
Definition xaiefal-rsc-group.hpp:32
@ XAIE_PERFCOUNT
Definition xaiefal-rsc-group.hpp:28
@ XAIE_PCEVENT
Definition xaiefal-rsc-group.hpp:31
@ XAIE_MAXRSC
Definition xaiefal-rsc-group.hpp:37
@ XAIE_TRACECTRL
Definition xaiefal-rsc-group.hpp:30
@ XAIE_BROADCAST
Definition xaiefal-rsc-group.hpp:33
@ XAIE_USEREVENT
Definition xaiefal-rsc-group.hpp:29
@ XAIE_STATIC_RSC
Definition xaiefal-rscmgr-backend-base.hpp:15
@ XAIE_AVAIL_RSC
Definition xaiefal-rscmgr-backend-base.hpp:16
@ FAL_ERROR
Definition xaiefal-log.hpp:14
@ FAL_WARN
Definition xaiefal-log.hpp:13
Data needed to make a resource request.
Definition xaiefal-rsc-base.hpp:27
uint32_t RscId
Definition xaiefal-rsc-base.hpp:41
XAieRscType RscType
Definition xaiefal-rsc-base.hpp:37
XAie_LocType Loc
Definition xaiefal-rsc-base.hpp:29
XAie_ModuleType Mod
Definition xaiefal-rsc-base.hpp:33
#define XAIE_RSC_ID_ANY
Definition xaiefal-common.hpp:7
#define XAIE_ERROR_BCAST_ID
Definition xaiefal-rscmgr.hpp:16
#define XAIE_ECC_PERFCNT_ID
Definition xaiefal-rscmgr.hpp:18
#define XAIE_ECC_BCAST_ID
Definition xaiefal-rscmgr.hpp:17