Skip to content

Commit 2d9807d

Browse files
authored
[AIERT] Configure DMA channel enable only for AIE1 (#1340)
On later-generation devices (aie2, aie2p, ...), the channel enable bit is no longer used. As a result, invoking this API may unintentionally overwrite the channel control register, as a MaskWrite64 with an all-zero mask is "incorrectly" treated as a Write64 operation by aie-rt.
1 parent c0c2c51 commit 2d9807d

15 files changed

+27
-328
lines changed

compiler/plugins/target/AMD-AIE/iree-amd-aie/Target/AMDAIERT.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,10 +298,9 @@ LogicalResult addInitConfig(const AMDAIEDeviceModel &deviceModel,
298298
int chNum = op.getChannelIndex();
299299
auto channelDir = static_cast<DMAChannelDir>(op.getChannelDir());
300300
bool issueToken = tileLoc.row == 0 && channelDir == DMAChannelDir::MM2S;
301-
bool setChannelEnable = true;
302-
if (failed(configurePushToBdQueue(
303-
deviceModel, tileLoc, chNum, channelDir, bd.getBdId().value(),
304-
op.getRepeatCount(), issueToken, setChannelEnable)))
301+
if (failed(configurePushToBdQueue(deviceModel, tileLoc, chNum,
302+
channelDir, bd.getBdId().value(),
303+
op.getRepeatCount(), issueToken)))
305304
return failure();
306305
}
307306
}

compiler/plugins/target/AMD-AIE/iree-amd-aie/Target/test/add_12_i8_using_2d_dma_op_with_padding.mlir

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ module {
3939
// CHECK: XAIE API: XAie_DmaEnableBd with args: &dmaDesc=ptr
4040
// CHECK: XAIE API: XAie_DmaWriteBd with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 0, row: 1), bdId=0
4141
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0, bdId=0, repeatCount=1, enTokenIssue=0
42-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0
4342

4443
// CHECK: cdo-driver: (NOP Command): Payload Length: 0
4544

@@ -58,4 +57,3 @@ module {
5857
// CHECK: cdo-driver: Address: 0x00000000001A001C Data is: 0x8140FF41
5958

6059
// CHECK: cdo-driver: (Write64): Address: 0x00000000001A0604 Data: 0x00000000
61-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000001A0600 Mask: 0x00000000 Data: 0x00000001

compiler/plugins/target/AMD-AIE/iree-amd-aie/Target/test/add_21_i8_using_dma_op_with_padding.mlir

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ module {
5151
// CHECK: XAIE API: XAie_DmaEnableBd with args: &dmaDesc=ptr
5252
// CHECK: XAIE API: XAie_DmaWriteBd with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 0, row: 1), bdId=1
5353
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0, bdId=0, repeatCount=1, enTokenIssue=0
54-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0
5554

5655
// CHECK: cdo-driver: (NOP Command): Payload Length: 0
5756

@@ -81,4 +80,3 @@ module {
8180
// CHECK: cdo-driver: Address: 0x00000000001A003C Data is: 0x8140FF41
8281

8382
// CHECK: cdo-driver: (Write64): Address: 0x00000000001A0604 Data: 0x00000000
84-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000001A0600 Mask: 0x00000000 Data: 0x00000001

compiler/plugins/target/AMD-AIE/iree-amd-aie/Target/test/add_378_i32_using_dma_op_with_padding.mlir

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ module {
5050
// CHECK: XAIE API: XAie_DmaEnableBd with args: &dmaDesc=ptr
5151
// CHECK: XAIE API: XAie_DmaWriteBd with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 0, row: 1), bdId=1
5252
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0, bdId=0, repeatCount=1, enTokenIssue=0
53-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0
5453

5554
// CHECK: cdo-driver: (NOP Command): Payload Length: 0
5655

@@ -80,4 +79,3 @@ module {
8079
// CHECK: cdo-driver: Address: 0x00000000001A003C Data is: 0x8140FF41
8180

8281
// CHECK: cdo-driver: (Write64): Address: 0x00000000001A0604 Data: 0x00000000
83-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000001A0600 Mask: 0x00000000 Data: 0x00000001

compiler/plugins/target/AMD-AIE/iree-amd-aie/Target/test/bd_chaining.mlir

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,8 @@ aie.device(npu1_4col) {
241241
// CHECK: XAIE API: XAie_DmaEnableBd with args: &dmaDesc=ptr
242242
// CHECK: XAIE API: XAie_DmaWriteBd with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 0, row: 2), bdId=6
243243
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 2), chNum=0, direction=0, bdId=0, repeatCount=1, enTokenIssue=0
244-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 2), chNum=0, direction=0
245244
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 2), chNum=1, direction=0, bdId=1, repeatCount=1, enTokenIssue=0
246-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 2), chNum=1, direction=0
247245
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 2), chNum=0, direction=1, bdId=3, repeatCount=1, enTokenIssue=0
248-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 2), chNum=0, direction=1
249246
// CHECK: XAIE API: XAie_DmaDescInit with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 2, row: 1)
250247
// CHECK: XAIE API: dmaDesc.DmaMod->SetLock with args: &dmaDesc=ptr, acqLock=XAie_Lock(LockId: 65, LockVal: -1), relLock=XAie_Lock(LockId: 64, LockVal: 1), acqEn=1, relEn=0
251248
// CHECK: XAIE API: XAie_DmaSetAddrLen with args: &dmaDesc=ptr, basePlusOffsetInBytes=524288, lenInBytes=1024
@@ -259,9 +256,7 @@ aie.device(npu1_4col) {
259256
// CHECK: XAIE API: XAie_DmaEnableBd with args: &dmaDesc=ptr
260257
// CHECK: XAIE API: XAie_DmaWriteBd with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 2, row: 1), bdId=1
261258
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 2, row: 1), chNum=0, direction=0, bdId=0, repeatCount=1, enTokenIssue=0
262-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 2, row: 1), chNum=0, direction=0
263259
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 2, row: 1), chNum=0, direction=1, bdId=1, repeatCount=1, enTokenIssue=0
264-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 2, row: 1), chNum=0, direction=1
265260
// CHECK: XAIE API: XAie_DmaDescInit with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 0, row: 1)
266261
// CHECK: XAIE API: dmaDesc.DmaMod->SetLock with args: &dmaDesc=ptr, acqLock=XAie_Lock(LockId: 65, LockVal: -1), relLock=XAie_Lock(LockId: 64, LockVal: 1), acqEn=1, relEn=0
267262
// CHECK: XAIE API: XAie_DmaSetAddrLen with args: &dmaDesc=ptr, basePlusOffsetInBytes=524288, lenInBytes=512
@@ -276,9 +271,7 @@ aie.device(npu1_4col) {
276271
// CHECK: XAIE API: XAie_DmaEnableBd with args: &dmaDesc=ptr
277272
// CHECK: XAIE API: XAie_DmaWriteBd with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 0, row: 1), bdId=1
278273
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0, bdId=0, repeatCount=1, enTokenIssue=0
279-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=0
280274
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=1, bdId=1, repeatCount=1, enTokenIssue=0
281-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 1), chNum=0, direction=1
282275
// CHECK: XAIE API: XAie_DmaDescInit with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 1, row: 1)
283276
// CHECK: XAIE API: dmaDesc.DmaMod->SetLock with args: &dmaDesc=ptr, acqLock=XAie_Lock(LockId: 65, LockVal: -1), relLock=XAie_Lock(LockId: 64, LockVal: 1), acqEn=1, relEn=0
284277
// CHECK: XAIE API: XAie_DmaSetAddrLen with args: &dmaDesc=ptr, basePlusOffsetInBytes=524288, lenInBytes=2048
@@ -293,9 +286,7 @@ aie.device(npu1_4col) {
293286
// CHECK: XAIE API: XAie_DmaEnableBd with args: &dmaDesc=ptr
294287
// CHECK: XAIE API: XAie_DmaWriteBd with args: devInst=ptr, &dmaDesc=ptr, tileLoc=TileLoc(col: 1, row: 1), bdId=1
295288
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 1, row: 1), chNum=0, direction=0, bdId=0, repeatCount=1, enTokenIssue=0
296-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 1, row: 1), chNum=0, direction=0
297289
// CHECK: XAIE API: XAie_DmaChannelSetStartQueue with args: devInst=ptr, tileLoc=TileLoc(col: 1, row: 1), chNum=0, direction=1, bdId=1, repeatCount=1, enTokenIssue=0
298-
// CHECK: XAIE API: XAie_DmaChannelEnable with args: devInst=ptr, tileLoc=TileLoc(col: 1, row: 1), chNum=0, direction=1
299290
// CHECK: XAIE API: XAie_StrmConnCctEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 0), CTRL=StrmSwPortType::CTRL, slvPortNum=0, SOUTH=StrmSwPortType::SOUTH, mstrPortNum=0
300291
// CHECK: XAIE API: XAie_StrmConnCctEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 0), strmTtoStrmT(connect.src.bundle)=StrmSwPortType::SOUTH, connect.src.channel=3, strmTtoStrmT(connect.dst.bundle)=StrmSwPortType::NORTH, connect.dst.channel=0
301292
// CHECK: XAIE API: XAie_StrmConnCctEnable with args: devInst=ptr, tileLoc=TileLoc(col: 0, row: 0), strmTtoStrmT(connect.src.bundle)=StrmSwPortType::SOUTH, connect.src.channel=7, strmTtoStrmT(connect.dst.bundle)=StrmSwPortType::EAST, connect.dst.channel=0
@@ -399,11 +390,8 @@ aie.device(npu1_4col) {
399390
// CHECK: cdo-driver: Address: 0x000000000021D0D4 Data is: 0x1E042000
400391

401392
// CHECK: cdo-driver: (Write64): Address: 0x000000000021DE04 Data: 0x00000000
402-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x000000000021DE00 Mask: 0x00000000 Data: 0x00000001
403393
// CHECK: cdo-driver: (Write64): Address: 0x000000000021DE0C Data: 0x00000001
404-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x000000000021DE08 Mask: 0x00000000 Data: 0x00000001
405394
// CHECK: cdo-driver: (Write64): Address: 0x000000000021DE14 Data: 0x00000003
406-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x000000000021DE10 Mask: 0x00000000 Data: 0x00000001
407395
// CHECK: cdo-driver: (BlockWrite-DMAWriteCmd): Start Address: 0x00000000041A0000 Size: 8
408396
// CHECK: cdo-driver: Address: 0x00000000041A0000 Data is: 0x00000100
409397
// CHECK: cdo-driver: Address: 0x00000000041A0004 Data is: 0x000A0000
@@ -426,10 +414,8 @@ aie.device(npu1_4col) {
426414
// CHECK: cdo-driver: Address: 0x00000000041A003C Data is: 0x8141FF40
427415

428416
// CHECK: cdo-driver: (Write64): Address: 0x00000000041A0604 Data: 0x00000000
429-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000041A0600 Mask: 0x00000000 Data: 0x00000001
430417
// CHECK: cdo-driver: (Write64): Address: 0x00000000041A0634 Data: 0x00000001
431-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000041A0630 Mask: 0x00000000 Data: 0x00000001
432-
// CHECK: cdo-driver: (NOP Command): Payload Length: 2
418+
// CHECK: cdo-driver: (NOP Command): Payload Length: 0
433419
// CHECK: cdo-driver: (BlockWrite-DMAWriteCmd): Start Address: 0x00000000001A0000 Size: 8
434420
// CHECK: cdo-driver: Address: 0x00000000001A0000 Data is: 0x00000080
435421
// CHECK: cdo-driver: Address: 0x00000000001A0004 Data is: 0x000A0000
@@ -452,10 +438,8 @@ aie.device(npu1_4col) {
452438
// CHECK: cdo-driver: Address: 0x00000000001A003C Data is: 0x8141FF40
453439

454440
// CHECK: cdo-driver: (Write64): Address: 0x00000000001A0604 Data: 0x00000000
455-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000001A0600 Mask: 0x00000000 Data: 0x00000001
456441
// CHECK: cdo-driver: (Write64): Address: 0x00000000001A0634 Data: 0x00000001
457-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000001A0630 Mask: 0x00000000 Data: 0x00000001
458-
// CHECK: cdo-driver: (NOP Command): Payload Length: 2
442+
// CHECK: cdo-driver: (NOP Command): Payload Length: 0
459443
// CHECK: cdo-driver: (BlockWrite-DMAWriteCmd): Start Address: 0x00000000021A0000 Size: 8
460444
// CHECK: cdo-driver: Address: 0x00000000021A0000 Data is: 0x00000200
461445
// CHECK: cdo-driver: Address: 0x00000000021A0004 Data is: 0x000A0000
@@ -478,9 +462,7 @@ aie.device(npu1_4col) {
478462
// CHECK: cdo-driver: Address: 0x00000000021A003C Data is: 0x8141FF40
479463

480464
// CHECK: cdo-driver: (Write64): Address: 0x00000000021A0604 Data: 0x00000000
481-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000021A0600 Mask: 0x00000000 Data: 0x00000001
482465
// CHECK: cdo-driver: (Write64): Address: 0x00000000021A0634 Data: 0x00000001
483-
// CHECK: cdo-driver: (MaskWrite64): Address: 0x00000000021A0630 Mask: 0x00000000 Data: 0x00000001
484466
// CHECK: cdo-driver: (Write64): Address: 0x000000000003F008 Data: 0x80000000
485467
// CHECK: cdo-driver: (Write64): Address: 0x000000000003F100 Data: 0x80000000
486468
// CHECK: cdo-driver: (Write64): Address: 0x000000000003F030 Data: 0x80000005

0 commit comments

Comments
 (0)