summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Gilles <jgilles@multitech.com>2015-01-07 12:32:24 -0600
committerJesse Gilles <jgilles@multitech.com>2015-01-07 12:32:24 -0600
commitc15cb3f7540562afa86801c2511fc6d983af5fc6 (patch)
tree9167ee6defca193cf738eb1f93a2eef562750fa7
parent9f9d7b731d9a4c0ed842bd8c70a4b15044fc774f (diff)
downloadmeta-multitech-c15cb3f7540562afa86801c2511fc6d983af5fc6.tar.gz
meta-multitech-c15cb3f7540562afa86801c2511fc6d983af5fc6.tar.bz2
meta-multitech-c15cb3f7540562afa86801c2511fc6d983af5fc6.zip
linux-3.12.27: add linux-3.12-spi-atmel-dma-min.patch, build spi-atmel as module
Forces spi-atmel to always use DMA mode instead of switching between PIO and DMA depending on the transfer size. Switching between the two can cause Rx buffer corruption with the 3.12 driver. This comes at the cost of lower performance (15 to 20%) for small transfers (1-15 bytes), but improves reliability for protocols that use small and large transfers regularly. For large transfers (1024 bytes), DMA mode is 300% faster than PIO. https://lkml.org/lkml/2013/10/21/534
-rw-r--r--recipes-kernel/linux/linux-3.12.27/linux-3.12-spi-atmel-dma-min.patch18
-rw-r--r--recipes-kernel/linux/linux-3.12.27/mtcdt/defconfig2
-rw-r--r--recipes-kernel/linux/linux_3.12.27.bb3
3 files changed, 21 insertions, 2 deletions
diff --git a/recipes-kernel/linux/linux-3.12.27/linux-3.12-spi-atmel-dma-min.patch b/recipes-kernel/linux/linux-3.12.27/linux-3.12-spi-atmel-dma-min.patch
new file mode 100644
index 0000000..4aba504
--- /dev/null
+++ b/recipes-kernel/linux/linux-3.12.27/linux-3.12-spi-atmel-dma-min.patch
@@ -0,0 +1,18 @@
+Index: linux-3.12.27/drivers/spi/spi-atmel.c
+===================================================================
+--- linux-3.12.27.orig/drivers/spi/spi-atmel.c
++++ linux-3.12.27/drivers/spi/spi-atmel.c
+@@ -187,7 +187,12 @@
+ /* use PIO for small transfers, avoiding DMA setup/teardown overhead and
+ * cache operations; better heuristics consider wordsize and bitrate.
+ */
+-#define DMA_MIN_BYTES 16
++
++/* MTS: set DMA_MIN_BYTES=0 to use DMA all the time due to Rx buffer issues
++ * when switching between smaller PIO and larger DMA transfers
++ * https://lkml.org/lkml/2013/10/21/534
++ */
++#define DMA_MIN_BYTES 0
+
+ struct atmel_spi_dma {
+ struct dma_chan *chan_rx;
diff --git a/recipes-kernel/linux/linux-3.12.27/mtcdt/defconfig b/recipes-kernel/linux/linux-3.12.27/mtcdt/defconfig
index 8950cdd..e0476e8 100644
--- a/recipes-kernel/linux/linux-3.12.27/mtcdt/defconfig
+++ b/recipes-kernel/linux/linux-3.12.27/mtcdt/defconfig
@@ -1425,7 +1425,7 @@ CONFIG_SPI_MASTER=y
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
-CONFIG_SPI_ATMEL=y
+CONFIG_SPI_ATMEL=m
# CONFIG_SPI_BITBANG is not set
# CONFIG_SPI_GPIO is not set
# CONFIG_SPI_FSL_SPI is not set
diff --git a/recipes-kernel/linux/linux_3.12.27.bb b/recipes-kernel/linux/linux_3.12.27.bb
index eb6029c..53ee211 100644
--- a/recipes-kernel/linux/linux_3.12.27.bb
+++ b/recipes-kernel/linux/linux_3.12.27.bb
@@ -2,7 +2,7 @@ inherit kernel
# mts class to build dtb and append to kernel image
inherit linux-append-dtb
-PR = "r8"
+PR = "r9"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
@@ -23,6 +23,7 @@ COMMON_PATCHES = " \
file://linux-3.12.27-option-telit.patch \
file://linux-3.12-cdc-acm-ignore-exar-devices.patch \
file://linux-3.12-release-rfcomm-port-fix.patch \
+ file://linux-3.12-spi-atmel-dma-min.patch \
"
SRC_URI_append_mtcdt = "\