diff --git a/core/linux-kirkwood-dt/PKGBUILD b/core/linux-kirkwood-dt/PKGBUILD index 8471b2e67..d8c3aea3f 100644 --- a/core/linux-kirkwood-dt/PKGBUILD +++ b/core/linux-kirkwood-dt/PKGBUILD @@ -7,7 +7,7 @@ pkgbase=linux-kirkwood-dt _kernelname=${pkgbase#linux} _desc="Marvell Kirkwood DT" pkgver=3.18 -pkgrel=1 +pkgrel=2 cryptodev_commit=6aa62a2c320b04f55fdfe0ed015c3d9b48997239 bfqver=v7r6 @@ -30,7 +30,8 @@ source=("ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-${pkgver}.tar.xz" "http://algo.ing.unimo.it/people/paolo/disk_sched/patches/${pkgver:0:4}.0-${bfqver}/0002-block-introduce-the-BFQ-${bfqver}-I-O-sched-for-${pkgver:0:4}.patch" "http://algo.ing.unimo.it/people/paolo/disk_sched/patches/${pkgver:0:4}.0-${bfqver}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-${bfqver}-for-${pkgver:0:4}.0.patch" 'goflexhome_dtb.patch' - 'pogo_e02_dtb.patch') + 'pogo_e02_dtb.patch' + 'mvsdio TX DMA workaround.patch') md5sums=('9e854df51ca3fef8bfe566dbd7b89241' 'eb9f27ba750e4b4a31cb76c65cfc221f' @@ -44,7 +45,8 @@ md5sums=('9e854df51ca3fef8bfe566dbd7b89241' '22ef862652608c8d6b07536e990d4bcb' 'b031b1aafd416453d1c8579bd6823fca' 'e42c64b6f4b54f382cf3d7e8d82968f1' - '341f8164dad19b6baf05d764a800862a') + '341f8164dad19b6baf05d764a800862a' + 'fd50ede1d3bfdd4b00a3c830ebf2db0d') prepare() { cd "${srcdir}/linux-${pkgver}" @@ -70,6 +72,9 @@ msg2 "Add the USB_QUIRK_RESET_RESUME for several webcams" # FS#26528 patch -Np1 -i "${srcdir}/usb-add-reset-resume-quirk-for-several-webcams.patch" +msg2 "Work around broken TX DMA in mvsdio" + patch -Np1 -i "${srcdir}/mvsdio TX DMA workaround.patch" + msg2 "Add Arch Linux ARM patch for ARMv5te plug computers, mach-types" patch -Np1 -i "${srcdir}/archlinuxarm.patch" cp "${srcdir}/mach-types" arch/arm/tools diff --git a/core/linux-kirkwood-dt/mvsdio TX DMA workaround.patch b/core/linux-kirkwood-dt/mvsdio TX DMA workaround.patch new file mode 100644 index 000000000..cee8fba16 --- /dev/null +++ b/core/linux-kirkwood-dt/mvsdio TX DMA workaround.patch @@ -0,0 +1,21 @@ +diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c +index 6b4c5ad..4f8618f 100644 +--- a/drivers/mmc/host/mvsdio.c ++++ b/drivers/mmc/host/mvsdio.c +@@ -111,10 +111,15 @@ static int mvsd_setup_data(struct mvsd_host *host, struct mmc_data *data) + mvsd_write(MVSD_BLK_COUNT, data->blocks); + mvsd_write(MVSD_BLK_SIZE, data->blksz); + +- if (nodma || (data->blksz | data->sg->offset) & 3) { ++ if (nodma || (data->blksz | data->sg->offset) & 3 || ++ ((!(data->flags & MMC_DATA_READ) && data->sg->offset & 0x3f))) { + /* + * We cannot do DMA on a buffer which offset or size + * is not aligned on a 4-byte boundary. ++ * ++ * It also appears the host to card DMA can corrupt ++ * data when the buffer is not aligned on a 64 byte ++ * boundary. + */ + host->pio_size = data->blocks * data->blksz; + host->pio_ptr = sg_virt(data->sg);