t132: Correct dma_busy function

In case of continuous mode, use STA_ACTIVITY bit to determine if DMA
operation is complete. However, in case of ONCE mode, use STA_BSY bit
to determine if DMA operation on the channel is complete.

This change was propogated from T210, commit ID fe48f094

BUG=None
BRANCH=None
TEST=Ryu/Rush build OK.

Change-Id: I13073cc12ed0a6390d55b00c725d1cc7d0797e23
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: aab62d5148b57fd1e05c1e838eafe8fdee431ef8
Original-Change-Id: I7388e9fd73d591de50962aaefc5ab902f560fc6f
Original-Signed-off-by: Tom Warren <twarren@nvidia.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/286468
Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: http://review.coreboot.org/11017
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Tom Warren 2015-07-17 08:19:18 -07:00 committed by Patrick Georgi
parent 2b7693d63a
commit d9c7a7b4da
1 changed files with 14 additions and 2 deletions

View File

@ -69,9 +69,21 @@ int dma_busy(struct apb_dma_channel * const channel)
* In continuous mode, the BSY_n bit in APB_DMA_STATUS and * In continuous mode, the BSY_n bit in APB_DMA_STATUS and
* BSY in APBDMACHAN_CHANNEL_n_STA_0 will remain set as '1' so long * BSY in APBDMACHAN_CHANNEL_n_STA_0 will remain set as '1' so long
* as the channel is enabled. So for this function we'll use the * as the channel is enabled. So for this function we'll use the
* DMA_ACTIVITY bit. * DMA_ACTIVITY bit in case of continuous mode.
*
* However, for ONCE mode, the BSY_n bit in APB_DMA_STATUS will be used
* to determine end of dma operation.
*/ */
return read32(&channel->regs->sta) & APB_STA_DMA_ACTIVITY ? 1 : 0; uint32_t bit;
if (read32(&channel->regs->csr) & APB_CSR_ONCE)
/* Once mode */
bit = APB_STA_BSY;
else
/* Continuous mode */
bit = APB_STA_DMA_ACTIVITY;
return read32(&channel->regs->sta) & bit ? 1 : 0;
} }
/* claim a DMA channel */ /* claim a DMA channel */
struct apb_dma_channel * const dma_claim(void) struct apb_dma_channel * const dma_claim(void)