305 auto TileType = ctx->
XAieDevInst->DevOps->GetTTypefromLoc(
307 assert(TileType == XAIEGBL_TILE_TYPE_AIETILE);
309 if (ctx->
XAieConfig->AieGen == XAIE_DEV_GEN_AIEML) {
310 const int num_bds = 2;
311 int s2mm_current_bd[num_bds];
312 int mm2s_current_bd[num_bds];
314 for (
int i = 0; i < num_bds; i++) {
315 print_aie2_dmachannel_status(ctx, col, row,
"DMA",
"s2mm", i,
316 0x0001DF00 + 4 * i, 0x0001DE00 + 8 * i,
319 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DF18 + (0x4 * i),
321 printf(
"DMA [%d, %d] s2mm%d write_count = %d\n", col, row, i,
324 for (
int i = 0; i < num_bds; i++)
325 print_aie2_dmachannel_status(ctx, col, row,
"DMA",
"mm2s", i,
326 0x0001DF10 + 4 * i, 0x0001DE10 + 8 * i,
329 for (
int bd = 0; bd < 8; bd++) {
333 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D000 + (0x20 * bd),
335 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D004 + (0x20 * bd),
337 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D014 + (0x20 * bd),
340 int bd_valid = (dma_bd_control >> 25) & 0x1;
341 u32 nextBd = ((dma_bd_control >> 27) & 0xF);
342 u32 useNextBd = ((dma_bd_control >> 26) & 0x1);
343 int isPacket = (dma_bd_packet >> 30) & 0x1;
344 u32 packetID = (dma_bd_packet >> 19) & 0x1F;
345 u32 packetType = (dma_bd_packet >> 16) & 0x7;
346 int words_to_transfer = (dma_bd_addr & 0x3FFF);
347 int base_address = dma_bd_addr >> 14;
348 int acquireEnabled = (dma_bd_control >> 12) & 0x1;
349 u32 acquireLock = dma_bd_control & 0xf;
350 int acquireValue = (((int)dma_bd_control << 20) >> 25);
351 u32 releaseLock = (dma_bd_control >> 13) & 0xf;
352 int releaseValue = (((int)dma_bd_control << 7) >> 25);
353 int releaseEnabled = releaseValue != 0;
355 print_bd(bd, bd_valid, nextBd, useNextBd, isPacket, packetID, packetType,
356 words_to_transfer, base_address, acquireEnabled, acquireLock,
357 acquireValue, releaseEnabled, releaseLock, releaseValue,
358 s2mm_current_bd, mm2s_current_bd, num_bds);
362 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DF10, &dma_mm2s_status);
364 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DF00, &dma_s2mm_status);
365 u32 dma_mm2s0_control;
366 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DE10, &dma_mm2s0_control);
367 u32 dma_mm2s1_control;
368 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DE18, &dma_mm2s1_control);
369 u32 dma_s2mm0_control;
370 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DE00, &dma_s2mm0_control);
371 u32 dma_s2mm1_control;
372 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DE08, &dma_s2mm1_control);
374 u32 s2mm_ch0_running = dma_s2mm_status & 0x3;
375 u32 s2mm_ch1_running = (dma_s2mm_status >> 2) & 0x3;
376 u32 mm2s_ch0_running = dma_mm2s_status & 0x3;
377 u32 mm2s_ch1_running = (dma_mm2s_status >> 2) & 0x3;
378 int s2mm0_current_bd, s2mm1_current_bd;
379 int mm2s0_current_bd, mm2s1_current_bd;
380 s2mm0_current_bd = (dma_s2mm_status >> 16) & 0xf;
381 s2mm1_current_bd = (dma_s2mm_status >> 20) & 0xf;
382 mm2s0_current_bd = (dma_mm2s_status >> 16) & 0xf;
383 mm2s1_current_bd = (dma_mm2s_status >> 20) & 0xf;
384 u32 s2mm_ch0_stalled = (dma_s2mm_status >> 4) & 0x1;
385 u32 s2mm_ch1_stalled = (dma_s2mm_status >> 5) & 0x1;
386 u32 mm2s_ch0_stalled = (dma_mm2s_status >> 4) & 0x1;
387 u32 mm2s_ch1_stalled = (dma_mm2s_status >> 5) & 0x1;
389 printf(
"DMA [%d, %d] mm2s_status/0ctrl/1ctrl is %08X %02X %02X, "
390 "s2mm_status/0ctrl/1ctrl is %08X %02X %02X\n",
391 col, row, dma_mm2s_status, dma_mm2s0_control, dma_mm2s1_control,
392 dma_s2mm_status, dma_s2mm0_control, dma_s2mm1_control);
393 print_aie1_dmachannel_status(ctx, col, row,
"DMA",
"s2mm", 0,
394 s2mm_ch0_running, s2mm_ch0_stalled);
395 print_aie1_dmachannel_status(ctx, col, row,
"DMA",
"s2mm", 1,
396 s2mm_ch1_running, s2mm_ch1_stalled);
397 print_aie1_dmachannel_status(ctx, col, row,
"DMA",
"mm2s", 0,
398 mm2s_ch0_running, mm2s_ch0_stalled);
399 print_aie1_dmachannel_status(ctx, col, row,
"DMA",
"mm2s", 1,
400 mm2s_ch1_running, mm2s_ch1_stalled);
401 for (
int bd = 0; bd < 8; bd++) {
403 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D000 + (0x20 * bd),
406 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D018 + (0x20 * bd),
410 if ((dma_bd_control >> 31) & 0x1 && (dma_bd_control != 0xFFFFFFFF)) {
411 printf(
"BD %d valid ", bd);
412 u32 nextBd = ((dma_bd_control >> 13) & 0xF);
413 u32 useNextBd = ((dma_bd_control >> 17) & 0x1);
415 printf(
"(Next BD: %d)\n", nextBd);
417 printf(
"(Last BD)\n");
419 if (bd == s2mm0_current_bd) {
420 printf(
" * Current BD for s2mm channel 0\n");
422 if (bd == s2mm1_current_bd) {
423 printf(
" * Current BD for s2mm channel 1\n");
425 if (bd == mm2s0_current_bd) {
426 printf(
" * Current BD for mm2s channel 0\n");
428 if (bd == mm2s1_current_bd) {
429 printf(
" * Current BD for mm2s channel 1\n");
432 if (dma_bd_control & 0x08000000) {
434 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D010 + (0x20 * bd),
436 printf(
" Packet mode: %02X\n", dma_packet & 0x1F);
438 int words_to_transfer = 1 + (dma_bd_control & 0x1FFF);
439 int base_address = dma_bd_addr_a & 0x1FFF;
440 printf(
" Transferring %d 32 bit words to/from byte address %06X\n",
441 words_to_transfer, base_address * 4);
444 for (
int w = 0; w < 7; w++) {
446 XAie_DataMemRdWord(ctx->
XAieDevInst, XAie_TileLoc(col, row),
447 (base_address + w) * 4, &tmpd);
448 printf(
"%08X ", tmpd);
451 int hasAcquire = (dma_bd_addr_a >> 18) & 0x1;
452 int hasRelease = (dma_bd_addr_a >> 21) & 0x1;
453 if (hasAcquire || hasRelease) {
454 u32 lock_id = (dma_bd_addr_a >> 22) & 0xf;
456 printf(
" Acquires lock %d ", lock_id);
457 if ((dma_bd_addr_a >> 16) & 0x1)
458 printf(
"with value %d ", (dma_bd_addr_a >> 17) & 0x1);
461 printf(
" Releases lock %d ", lock_id);
462 if ((dma_bd_addr_a >> 19) & 0x1)
463 printf(
"with value %d ", (dma_bd_addr_a >> 20) & 0x1);
466 printf(
"currently ");
468 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001EF00, &locks);
469 u32 two_bits = (locks >> (lock_id * 2)) & 0x3;
471 u32 acquired = two_bits & 0x1;
472 u32 value = two_bits & 0x2;
475 printf(value ?
"1" :
"0");
481 if (dma_bd_control & 0x30000000) {
482 int FIFO = (dma_bd_control >> 28) & 0x3;
483 u32 dma_fifo_counter;
484 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001DF20,
486 printf(
" Using FIFO Cnt%d : %08X\n", FIFO, dma_fifo_counter);
511 auto TileType = ctx->
XAieDevInst->DevOps->GetTTypefromLoc(
513 assert(TileType == XAIEGBL_TILE_TYPE_MEMTILE);
514 assert(ctx->
XAieConfig->AieGen == XAIE_DEV_GEN_AIEML);
516 int s2mm_current_bd[6];
517 int mm2s_current_bd[6];
519 for (
int i = 0; i < 6; i++) {
520 print_aie2_dmachannel_status(ctx, col, row,
"MemTileDMA",
"s2mm", i,
521 0x000A0660 + 4 * i, 0x000A0600 + 8 * i,
524 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000A06B0 + (0x4 * i),
526 printf(
"MemTileDMA [%d, %d] s2mm%d write_count = %d\n", col, row, i,
529 for (
int i = 0; i < 6; i++)
530 print_aie2_dmachannel_status(ctx, col, row,
"MemTileDMA",
"mm2s", i,
531 0x000A0680 + 4 * i, 0x000A0630 + 8 * i,
536 for (
int bd = 0; bd < 8; bd++) {
540 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000A0000 + (0x20 * bd),
542 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000A0004 + (0x20 * bd),
544 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000A001C + (0x20 * bd),
547 int bd_valid = (dma_bd_7 >> 31) & 0x1;
548 u32 nextBd = ((dma_bd_1 >> 20) & 0xF);
549 u32 useNextBd = ((dma_bd_1 >> 19) & 0x1);
550 int isPacket = (dma_bd_0 >> 31) & 0x1;
551 u32 packetID = (dma_bd_0 >> 23) & 0x1F;
552 u32 packetType = (dma_bd_0 >> 28) & 0x7;
553 int words_to_transfer = (dma_bd_0 & 0x1FFFF);
554 int base_address = dma_bd_1 & 0x7FFFF;
555 int acquireEnabled = (dma_bd_7 >> 12) & 0x1;
556 u32 acquireLock = dma_bd_7 & 0xff;
557 int acquireValue = (((int)dma_bd_7 << 17) >> 25);
558 u32 releaseLock = (dma_bd_7 >> 16) & 0xff;
559 int releaseValue = (((int)dma_bd_7 << 1) >> 25);
560 int releaseEnabled = releaseValue != 0;
562 print_bd(bd, bd_valid, nextBd, useNextBd, isPacket, packetID, packetType,
563 words_to_transfer, base_address, acquireEnabled, acquireLock,
564 acquireValue, releaseEnabled, releaseLock, releaseValue,
565 s2mm_current_bd, mm2s_current_bd, 6);
574 auto TileType = ctx->
XAieDevInst->DevOps->GetTTypefromLoc(
576 assert(TileType == XAIEGBL_TILE_TYPE_SHIMNOC);
578 const int num_bds = 2;
579 int s2mm_current_bd[num_bds];
580 int mm2s_current_bd[num_bds];
581 if (ctx->
XAieConfig->AieGen == XAIE_DEV_GEN_AIEML) {
582 for (
int i = 0; i < num_bds; i++) {
583 print_aie2_dmachannel_status(ctx, col, row,
"ShimDMA",
"s2mm", i,
584 0x0001D220 + 4 * i, 0x0001D200 + 8 * i,
587 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D230 + (0x4 * i),
589 printf(
"ShimDMA [%d, %d] s2mm%d write_count = %d\n", col, row, i,
592 for (
int i = 0; i < num_bds; i++)
593 print_aie2_dmachannel_status(ctx, col, row,
"ShimDMA",
"mm2s", i,
594 0x0001D228 + 4 * i, 0x0001D210 + 8 * i,
597 u32 dma_mm2s_status, dma_s2mm_status;
598 u32 dma_mm2s0_control, dma_mm2s1_control;
599 u32 dma_s2mm0_control, dma_s2mm1_control;
600 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D164, &dma_mm2s_status);
601 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D160, &dma_s2mm_status);
602 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D150, &dma_mm2s0_control);
603 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D158, &dma_mm2s1_control);
604 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D140, &dma_s2mm0_control);
605 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D148, &dma_s2mm1_control);
607 u32 s2mm_ch0_running = dma_s2mm_status & 0x3;
608 u32 s2mm_ch1_running = (dma_s2mm_status >> 2) & 0x3;
609 u32 mm2s_ch0_running = dma_mm2s_status & 0x3;
610 u32 mm2s_ch1_running = (dma_mm2s_status >> 2) & 0x3;
611 s2mm_current_bd[0] = (dma_s2mm_status >> 16) & 0xf;
612 s2mm_current_bd[1] = (dma_s2mm_status >> 20) & 0xf;
613 mm2s_current_bd[0] = (dma_mm2s_status >> 16) & 0xf;
614 mm2s_current_bd[1] = (dma_mm2s_status >> 20) & 0xf;
615 u32 s2mm_ch0_stalled = (dma_s2mm_status >> 4) & 0x1;
616 u32 s2mm_ch1_stalled = (dma_s2mm_status >> 5) & 0x1;
617 u32 mm2s_ch0_stalled = (dma_mm2s_status >> 4) & 0x1;
618 u32 mm2s_ch1_stalled = (dma_mm2s_status >> 5) & 0x1;
620 printf(
"ShimDMA [%d, %d] AIE1 mm2s_status/0ctrl/1ctrl is %08X %02X %02X, "
621 "s2mm_status/0ctrl/1ctrl is %08X %02X %02X\n",
622 col, row, dma_mm2s_status, dma_mm2s0_control, dma_mm2s1_control,
623 dma_s2mm_status, dma_s2mm0_control, dma_s2mm1_control);
624 print_aie1_dmachannel_status(ctx, col, row,
"ShimDMA",
"s2mm", 0,
625 s2mm_ch0_running, s2mm_ch0_stalled);
626 print_aie1_dmachannel_status(ctx, col, row,
"ShimDMA",
"s2mm", 1,
627 s2mm_ch1_running, s2mm_ch1_stalled);
628 print_aie1_dmachannel_status(ctx, col, row,
"ShimDMA",
"mm2s", 0,
629 mm2s_ch0_running, mm2s_ch0_stalled);
630 print_aie1_dmachannel_status(ctx, col, row,
"ShimDMA",
"mm2s", 1,
631 mm2s_ch1_running, mm2s_ch1_stalled);
635 if (ctx->
XAieConfig->AieGen == XAIE_DEV_GEN_AIEML) {
637 int overflowAddr = tileAddr + 0x00014120;
638 int underflowAddr = tileAddr + 0x00014128;
639 u32 overflow, underflow;
642 printf(
" overflow?:%x underflow?:%x\n", overflow, underflow);
644 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00014F00, &locks);
645 printf(
"ShimDMA [%d, %d] AIE1 locks are %08X\n", col, row, locks);
646 for (
int lock = 0; lock < 16; lock++) {
647 u32 two_bits = (locks >> (lock * 2)) & 0x3;
649 printf(
"Lock %d: ", lock);
650 u32 acquired = two_bits & 0x1;
651 u32 value = two_bits & 0x2;
654 printf(value ?
"1" :
"0");
660 for (
int bd = 0; bd < 8; bd++) {
661 int words_to_transfer;
666 int acquire_lockID, release_lockID;
667 int enable_lock_release;
668 int lock_release_val;
670 int enable_lock_acquire;
671 int lock_acquire_val;
674 if (ctx->
XAieConfig->AieGen == XAIE_DEV_GEN_AIEML) {
676 u32 dma_bd_buffer_length;
679 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D000 + (0x20 * bd),
680 &dma_bd_buffer_length);
681 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D004 + (0x20 * bd),
683 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D008 + (0x20 * bd),
685 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D01C + (0x20 * bd),
689 words_to_transfer = dma_bd_buffer_length;
691 u64(dma_bd_addr_low & 0xFFFC) + (u64(dma_bd_2 & 0xFF) << 32);
692 bd_valid = (dma_bd_7 >> 25) & 0x1;
693 use_next_bd = ((dma_bd_7 >> 26) & 0x1);
694 next_bd = ((dma_bd_7 >> 27) & 0xF);
695 acquire_lockID = ((dma_bd_7 >> 0) & 0xF);
696 release_lockID = ((dma_bd_7 >> 13) & 0xF);
697 lock_release_val = (s32(dma_bd_7) << 7) >> 25;
698 enable_lock_release = lock_release_val != 0;
700 lock_acquire_val = (s32(dma_bd_7) << 20) >> 25;
701 enable_lock_acquire = ((dma_bd_7 >> 12) & 0x1);
705 u32 dma_bd_buffer_length;
707 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D000 + (0x14 * bd),
709 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D004 + (0x14 * bd),
710 &dma_bd_buffer_length);
711 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001D008 + (0x14 * bd),
713 words_to_transfer = dma_bd_buffer_length;
715 (u64)dma_bd_addr_a + ((u64)((dma_bd_control >> 16) & 0xFFFF) << 32);
716 bd_valid = dma_bd_control & 0x1;
717 use_next_bd = ((dma_bd_control >> 15) & 0x1);
718 next_bd = ((dma_bd_control >> 11) & 0xF);
719 release_lockID = acquire_lockID = ((dma_bd_control >> 7) & 0xF);
720 enable_lock_release = ((dma_bd_control >> 6) & 0x1);
721 lock_release_val = ((dma_bd_control >> 5) & 0x1);
722 use_release_val = ((dma_bd_control >> 4) & 0x1);
723 enable_lock_acquire = ((dma_bd_control >> 3) & 0x1);
724 lock_acquire_val = ((dma_bd_control >> 2) & 0x1);
725 use_acquire_val = ((dma_bd_control >> 1) & 0x1);
727 bool isPacket =
false;
730 print_bd(bd, bd_valid, next_bd, use_next_bd, isPacket, packetID, packetType,
731 words_to_transfer, base_address, enable_lock_acquire,
732 acquire_lockID, lock_acquire_val, enable_lock_release,
733 release_lockID, lock_release_val, s2mm_current_bd, mm2s_current_bd,
744 u32 status, coreTimerLow, PC, LR, SP, locks, R0, R4;
746 if (ctx->
XAieConfig->AieGen == XAIE_DEV_GEN_AIEML) {
747 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x032004, &status);
748 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0340F8, &coreTimerLow);
749 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00031100, &PC);
750 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00031130, &LR);
751 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00031120, &SP);
752 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000340D8, &trace_status);
754 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00030C00, &R0);
755 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00030C40, &R4);
758 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x032004, &status);
759 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0340F8, &coreTimerLow);
760 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00030280, &PC);
761 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000302B0, &LR);
762 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000302A0, &SP);
763 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x000140D8, &trace_status);
765 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00030000, &R0);
766 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x00030040, &R4);
768 printf(
"Core [%d, %d] status is %08X, timer is %u, PC is %08X"
769 ", LR is %08X, SP is %08X, R0 is %08X,R4 is %08X\n",
770 col, row, status, coreTimerLow, PC, LR, SP, R0, R4);
771 printf(
"Core [%d, %d] trace status is %08X\n", col, row, trace_status);
773 if (ctx->
XAieConfig->AieGen == XAIE_DEV_GEN_AIEML) {
776 XAie_Read32(ctx->
XAieDevInst, tileAddr + 0x0001EF00, &locks);
777 printf(
"Core [%d, %d] AIE1 locks are %08X\n", col, row, locks);
778 for (
int lock = 0; lock < 16; lock++) {
779 u32 two_bits = (locks >> (lock * 2)) & 0x3;
781 printf(
"Lock %d: ", lock);
782 u32 acquired = two_bits & 0x1;
783 u32 value = two_bits & 0x2;
786 printf(value ?
"1" :
"0");
793 const char *core_status_strings[] = {
808 "Cascade Stall Slave",
809 "Cascade Stall Master",
815 "Core Processor Bus Stall",
818 printf(
"Core Status: ");
819 for (
int i = 0; i <= 21; i++) {
820 if ((status >> i) & 0x1)
821 printf(
"%s ", core_status_strings[i]);