Thread (37 messages) 37 messages, 4 authors, 2012-01-06
STALE5280d REVIEWED: 1 (0M)

[PATCH v2] arm/tegra: use APB DMA for accessing APB devices

From: Stephen Warren <hidden>
Date: 2012-01-05 22:07:32
Also in: linux-tegra

Olof Johansson wrote at Wednesday, January 04, 2012 10:49 PM:
Tegra2 hangs if APB registers are accessed from the cpu during an
apb dma operation. The workaround is to use apb dma to read/write the
registers instead.
...
quoted hunk ↗ jump to hunk
diff --git a/arch/arm/mach-tegra/apbio.c b/arch/arm/mach-tegra/apbio.c
...
+u32 tegra_apb_readl(unsigned long offset)
...
+	INIT_COMPLETION(tegra_apb_wait);
+
+	tegra_dma_enqueue_req(tegra_apb_dma, &req);
+
+	ret = wait_for_completion_timeout(&tegra_apb_wait,
+		msecs_to_jiffies(50));
+
+	if (WARN(ret == 0, "apb read dma timed out")) {
+		*(u32 *)tegra_apb_bb = 0;
+		tegra_dma_dequeue_req(tegra_apb_dma, &req);
I think you need to swap those last two lines to make absolutely sure
that the timeout handling doesn't race with an actual DMA completion.

Otherwise,

Acked-by: Stephen Warren <redacted>

-- 
nvpublic
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help