diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2010-08-13 13:23:31 +0530 |
---|---|---|
committer | Bharat Nihalani <bnihalani@nvidia.com> | 2010-08-18 07:24:55 -0700 |
commit | 36dd44d5913083ab91bc4a77b6864f9db3915439 (patch) | |
tree | 4e251164ee0e485a5140070d71bd100f74380fd4 | |
parent | b0c9894398b13ab85da4bdba707efc68a438ddb8 (diff) |
[arm/tegra] spi: Fixing warning dump when timeout err happen.
If transfer started and driver waits for transfer completes with
given timeout, and if transfer have not completed in a given
timeout then driver handles the erro_timeout case. In this
error handling, it does not need to call the Interrupt done
as it has not been interupted yet.
Calling unnecessarily InterruptDone create warning for
unbalanced call.
Change-Id: Id7f924eefcd49131b9f752d530b108ab08874b57
(cherry picked from commit 31bc11d7583d089673cb0c474f210343a729e8da)
Reviewed-on: http://git-master/r/4377
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Tested-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
-rw-r--r-- | arch/arm/mach-tegra/nvrm/io/ap15/rm_spi_slink.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/arm/mach-tegra/nvrm/io/ap15/rm_spi_slink.c b/arch/arm/mach-tegra/nvrm/io/ap15/rm_spi_slink.c index 691e3c61fcb6..5364fbaaeb95 100644 --- a/arch/arm/mach-tegra/nvrm/io/ap15/rm_spi_slink.c +++ b/arch/arm/mach-tegra/nvrm/io/ap15/rm_spi_slink.c @@ -632,6 +632,7 @@ static NvBool HandleTransferCompletion(NvRmSpiHandle hRmSpiSlink) CurrPacketSize = NV_MIN(hRmSpiSlink->CurrTransInfo.PacketsPerWord * WordsWritten, hRmSpiSlink->CurrTransInfo.TxPacketsRemaining); hHwInt->HwSetDmaTransferSizeFxn(&hRmSpiSlink->HwRegs, CurrPacketSize); + hRmSpiSlink->IsIntDoneDue = NV_FALSE; hHwInt->HwStartTransferFxn(&hRmSpiSlink->HwRegs, NV_FALSE); hRmSpiSlink->CurrTransInfo.CurrPacketCount = CurrPacketSize; @@ -650,6 +651,7 @@ static NvBool HandleTransferCompletion(NvRmSpiHandle hRmSpiSlink) hRmSpiSlink->CurrTransInfo.PacketsPerWord)); hRmSpiSlink->CurrTransInfo.CurrPacketCount = CurrPacketSize; hHwInt->HwSetDmaTransferSizeFxn(&hRmSpiSlink->HwRegs, CurrPacketSize); + hRmSpiSlink->IsIntDoneDue = NV_FALSE; hHwInt->HwStartTransferFxn(&hRmSpiSlink->HwRegs, NV_FALSE); return NV_FALSE; } @@ -666,16 +668,16 @@ static void SpiSlinkIsr(void *args) /* If apb dma is used then postpone the handling in caller context */ if (hRmSpiSlink->IsUsingApbDma) { - NvOsSemaphoreSignal(hRmSpiSlink->hSynchSema); hRmSpiSlink->IsIntDoneDue = NV_TRUE; + NvOsSemaphoreSignal(hRmSpiSlink->hSynchSema); return; } /* Handle the transfer completion here only for non dma transfer */ IsTransferCompleted = HandleTransferCompletion(hRmSpiSlink); + hRmSpiSlink->IsIntDoneDue = NV_FALSE; if (IsTransferCompleted) NvOsSemaphoreSignal(hRmSpiSlink->hSynchSema); - hRmSpiSlink->IsIntDoneDue = NV_FALSE; NvRmInterruptDone(hRmSpiSlink->SpiInterruptHandle); } @@ -834,8 +836,10 @@ WaitForTransferCompletion( NvRmModuleReset(hRmSpiSlink->hDevice, NVRM_MODULE_ID(hRmSpiSlink->RmModuleId, hRmSpiSlink->InstanceId)); hRmSpiSlink->CurrentDirection = SerialHwDataFlow_None; - if ((!IsPoll) && (hRmSpiSlink->IsIntDoneDue)) + if ((!IsPoll) && (hRmSpiSlink->IsIntDoneDue)) { + hRmSpiSlink->IsIntDoneDue = NV_FALSE; NvRmInterruptDone(hRmSpiSlink->SpiInterruptHandle); + } return Error; } @@ -908,8 +912,10 @@ WaitForTransferCompletion( Error = (hRmSpiSlink->RxTransferStatus)? hRmSpiSlink->RxTransferStatus: hRmSpiSlink->TxTransferStatus; } - if ((!IsPoll) && (hRmSpiSlink->IsIntDoneDue)) + if ((!IsPoll) && (hRmSpiSlink->IsIntDoneDue)) { + hRmSpiSlink->IsIntDoneDue = NV_FALSE; NvRmInterruptDone(hRmSpiSlink->SpiInterruptHandle); + } return Error; } @@ -1923,6 +1929,7 @@ MasterModeReadWriteCpu( hRmSpiSlink->hHwInterface->HwSetDmaTransferSizeFxn(&hRmSpiSlink->HwRegs, hRmSpiSlink->CurrTransInfo.CurrPacketCount); + hRmSpiSlink->IsIntDoneDue = NV_FALSE; hRmSpiSlink->hHwInterface->HwStartTransferFxn(&hRmSpiSlink->HwRegs, NV_TRUE); WaitForTransferCompletion(hRmSpiSlink, NV_WAIT_INFINITE, IsPolling); @@ -2108,6 +2115,7 @@ static NvError MasterModeReadWriteDma( } } + hRmSpiSlink->IsIntDoneDue = NV_FALSE; if (!Error) hRmSpiSlink->hHwInterface->HwStartTransferFxn(&hRmSpiSlink->HwRegs, NV_TRUE); @@ -2211,6 +2219,7 @@ static NvError SlaveModeSpiStartReadWriteCpu( hRmSpiSlink->hHwInterface->HwSetDmaTransferSizeFxn(&hRmSpiSlink->HwRegs, hRmSpiSlink->CurrTransInfo.CurrPacketCount); + hRmSpiSlink->IsIntDoneDue = NV_FALSE; hRmSpiSlink->hHwInterface->HwStartTransferFxn(&hRmSpiSlink->HwRegs, NV_TRUE); return Error; @@ -2337,6 +2346,7 @@ static NvError SlaveModeSpiStartReadWriteDma( } } + hRmSpiSlink->IsIntDoneDue = NV_FALSE; if (!Error) hRmSpiSlink->hHwInterface->HwStartTransferFxn(&hRmSpiSlink->HwRegs, NV_TRUE); return Error; |