Patrick Georgi (pgeorgi@google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/11017
-gerrit
commit b8930575f7a924aa1a340ae791d5664790935fe5 Author: Tom Warren twarren@nvidia.com Date: Fri Jul 17 08:19:18 2015 -0700
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 --- src/soc/nvidia/tegra132/dma.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/soc/nvidia/tegra132/dma.c b/src/soc/nvidia/tegra132/dma.c index 9f04e97..fb98692 100644 --- a/src/soc/nvidia/tegra132/dma.c +++ b/src/soc/nvidia/tegra132/dma.c @@ -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 * 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 - * 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 */ struct apb_dma_channel * const dma_claim(void)