[linux-yocto] [PATCH 05/22] valleyisland-io: fix DMA tranfer issue in ACPI mode

boon.leong.ong at intel.com boon.leong.ong at intel.com
Wed Jan 29 10:41:30 PST 2014


From: Ong Boon Leong <boon.leong.ong at intel.com>

BayTrail ACPI mode SPI is not read/writing correctly at low speeds
using DMA mode. Changing DMA SRC_MSIZE and
DEST_MSIZE of SPI FIFO side from 16 to 32 fixes the issue.

Signed-off-by: Ong Boon Leong <boon.leong.ong at intel.com>
---
 ...Fix-BYT-ACPI-mode-SPI-DMA-transfer-failur.patch |   68 ++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 meta/cfg/kernel-cache/features/valleyisland-io/0003-spi-pxa2xx-Fix-BYT-ACPI-mode-SPI-DMA-transfer-failur.patch

diff --git a/meta/cfg/kernel-cache/features/valleyisland-io/0003-spi-pxa2xx-Fix-BYT-ACPI-mode-SPI-DMA-transfer-failur.patch b/meta/cfg/kernel-cache/features/valleyisland-io/0003-spi-pxa2xx-Fix-BYT-ACPI-mode-SPI-DMA-transfer-failur.patch
new file mode 100644
index 0000000..2a484b7
--- /dev/null
+++ b/meta/cfg/kernel-cache/features/valleyisland-io/0003-spi-pxa2xx-Fix-BYT-ACPI-mode-SPI-DMA-transfer-failur.patch
@@ -0,0 +1,68 @@
+From 65730ba793f1427bc971b36d79eba0a6e57d5479 Mon Sep 17 00:00:00 2001
+From: Ong Boon Leong <boon.leong.ong at intel.com>
+Date: Wed, 22 Jan 2014 16:35:29 +0800
+Subject: [PATCH] spi/pxa2xx: Fix BYT ACPI mode SPI DMA transfer failure at
+ low speeds
+
+For Intel BayTrail, under ACPI mode, SPI is not reading/writing
+correctly at low speeds when using DMA mode. Fix the issue by
+changing DMA SRC_MSIZE and DEST_MSIZE of SPI FIFO side from 16 to 32.
+
+Signed-off-by: Ong Boon Leong <boon.leong.ong at intel.com>
+---
+ drivers/spi/spi-pxa2xx.c |   25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
+index 1e2aa26..1c252bf 100644
+--- a/drivers/spi/spi-pxa2xx.c
++++ b/drivers/spi/spi-pxa2xx.c
+@@ -45,6 +45,15 @@ MODULE_DESCRIPTION("PXA2xx SSP SPI Controller");
+ MODULE_LICENSE("GPL");
+ MODULE_ALIAS("platform:pxa2xx-spi");
+ 
++#ifdef CONFIG_ACPI
++static struct acpi_device_id pxa2xx_spi_acpi_match[] = {
++	{ "INT33C0", 0 },
++	{ "INT33C1", 0 },
++	{ "80860F0E", 0 },
++	{ },
++};
++#endif
++
+ #define MAX_BUSES 3
+ 
+ #define TIMOUT_DFLT		1000
+@@ -962,6 +971,16 @@ static int setup(struct spi_device *spi)
+ 		 * DMA with them.
+ 		 */
+ 		chip->enable_dma = drv_data->master_info->enable_dma;
++#ifdef CONFIG_ACPI
++		/*
++		 * Detect if spi device belongs to Intel BayTrail.
++		 * If true, set dma_burst_size to 32 in order
++		 * to fix data read/write corruption at low speed mode.
++		 */
++		 if (acpi_match_device(pxa2xx_spi_acpi_match, &spi->dev)
++			== (struct acpi_device_id *) "80860F0E")
++			chip->dma_burst_size = 32;
++#endif
+ 	}
+ 
+ 	chip->threshold = (SSCR1_RxTresh(rx_thres) & SSCR1_RFT) |
+@@ -1103,12 +1122,6 @@ pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev)
+ 	return pdata;
+ }
+ 
+-static struct acpi_device_id pxa2xx_spi_acpi_match[] = {
+-	{ "INT33C0", 0 },
+-	{ "INT33C1", 0 },
+-	{ "80860F0E", 0 },
+-	{ },
+-};
+ MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);
+ #else
+ static inline struct pxa2xx_spi_master *
+-- 
+1.7.10.4
+
-- 
1.7.10.4



More information about the linux-yocto mailing list