Skip to content

Commit a8aff78

Browse files
fimohameasmellby
authored andcommitted
simplicity_sdk: Patch to handle DMA stop on error
added dma stop transfer handling in leader & follower dispatch interrupt functions during error state in sl_i2c.c to stop dma transfer upon failure Upstream-Status: Pending Signed-off-by: S Mohamed Fiaz <[email protected]>
1 parent b932880 commit a8aff78

File tree

1 file changed

+10
-0
lines changed
  • simplicity_sdk/platform/driver/i2c/src

1 file changed

+10
-0
lines changed

simplicity_sdk/platform/driver/i2c/src/sl_i2c.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,6 +1649,11 @@ void sli_i2c_leader_dispatch_interrupt(sli_i2c_instance_t *sl_i2c_instance)
16491649
}
16501650
sl_i2c_instance->state = SLI_I2C_STATE_ERROR;
16511651
sl_hal_i2c_clear_interrupts(i2c_base_addr, _I2C_IF_MASK);
1652+
if (sl_i2c_instance->transfer_seq == SL_I2C_WRITE) {
1653+
DMADRV_StopTransfer(sl_i2c_instance->dma_channel.dma_tx_channel);
1654+
} else if (sl_i2c_instance->transfer_seq == SL_I2C_READ) {
1655+
DMADRV_StopTransfer(sl_i2c_instance->dma_channel.dma_rx_channel);
1656+
}
16521657
// Abort on error
16531658
(i2c_base_addr)->CMD = I2C_CMD_ABORT;
16541659
}
@@ -1732,6 +1737,11 @@ void sli_i2c_follower_dispatch_interrupt(sli_i2c_instance_t *sl_i2c_instance)
17321737
}
17331738
sl_i2c_instance->state = SLI_I2C_STATE_ERROR;
17341739
sl_hal_i2c_clear_interrupts(i2c_base_addr, _I2C_IF_MASK);
1740+
if (sl_i2c_instance->transfer_seq == SL_I2C_WRITE) {
1741+
DMADRV_StopTransfer(sl_i2c_instance->dma_channel.dma_tx_channel);
1742+
} else if (sl_i2c_instance->transfer_seq == SL_I2C_READ) {
1743+
DMADRV_StopTransfer(sl_i2c_instance->dma_channel.dma_rx_channel);
1744+
}
17351745
// Abort on error
17361746
(i2c_base_addr)->CMD = I2C_CMD_ABORT;
17371747
}

0 commit comments

Comments
 (0)