summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2010-08-13 13:23:31 +0530
committerBharat Nihalani <bnihalani@nvidia.com>2010-08-18 07:24:55 -0700
commit36dd44d5913083ab91bc4a77b6864f9db3915439 (patch)
tree4e251164ee0e485a5140070d71bd100f74380fd4
parentb0c9894398b13ab85da4bdba707efc68a438ddb8 (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.c18
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;