The patch titled spi_bfin: wait for tx to complete on full duplex paths has been added to the -mm tree. Its filename is spi_bfin-wait-for-tx-to-complete-on-full-duplex-paths.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: spi_bfin: wait for tx to complete on full duplex paths From: Bryan Wu <bryan.wu@xxxxxxxxxx> Full duplex SPI operation should not read a dummy byte at the first transfer. Bug and fix by Jean-Christian de Rivaz <jc@xxxxxxxx>: http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&tracker_item_id=3678 Signed-off-by: Jean-Christian de Rivaz <jc@xxxxxxxx> Signed-off-by: Bryan Wu <bryan.wu@xxxxxxxxxx> Signed-off-by: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- drivers/spi/spi_bfin5xx.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff -puN drivers/spi/spi_bfin5xx.c~spi_bfin-wait-for-tx-to-complete-on-full-duplex-paths drivers/spi/spi_bfin5xx.c --- a/drivers/spi/spi_bfin5xx.c~spi_bfin-wait-for-tx-to-complete-on-full-duplex-paths +++ a/drivers/spi/spi_bfin5xx.c @@ -358,14 +358,10 @@ static void u8_cs_chg_reader(struct driv static void u8_duplex(struct driver_data *drv_data) { - /* poll for SPI completion before start */ - while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) - cpu_relax(); - /* in duplex mode, clk is triggered by writing of TDBR */ while (drv_data->rx < drv_data->rx_end) { write_TDBR(drv_data, (*(u8 *) (drv_data->tx))); - while (read_STAT(drv_data) & BIT_STAT_TXS) + while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) cpu_relax(); while (!(read_STAT(drv_data) & BIT_STAT_RXS)) cpu_relax(); @@ -495,14 +491,10 @@ static void u16_cs_chg_reader(struct dri static void u16_duplex(struct driver_data *drv_data) { - /* poll for SPI completion before start */ - while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) - cpu_relax(); - /* in duplex mode, clk is triggered by writing of TDBR */ while (drv_data->tx < drv_data->tx_end) { write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); - while (read_STAT(drv_data) & BIT_STAT_TXS) + while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) cpu_relax(); while (!(read_STAT(drv_data) & BIT_STAT_RXS)) cpu_relax(); @@ -516,15 +508,11 @@ static void u16_cs_chg_duplex(struct dri { struct chip_data *chip = drv_data->cur_chip; - /* poll for SPI completion before start */ - while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) - cpu_relax(); - while (drv_data->tx < drv_data->tx_end) { cs_active(drv_data, chip); write_TDBR(drv_data, (*(u16 *) (drv_data->tx))); - while (read_STAT(drv_data) & BIT_STAT_TXS) + while (!(read_STAT(drv_data) & BIT_STAT_SPIF)) cpu_relax(); while (!(read_STAT(drv_data) & BIT_STAT_RXS)) cpu_relax(); _ Patches currently in -mm which might be from bryan.wu@xxxxxxxxxx are origin.patch git-mtd.patch blackfin-serial-driver-this-driver-enable-sports-on-blackfin-emulate-uart.patch kernel-printkc-concerns-about-the-console-handover.patch remove-mm_ptovvtop.patch spi_bfin-remove-useless-fault-path.patch spi_bfin-use-more-useful-gpio-labels.patch spi_bfin-wait-for-tx-to-complete-on-some-cs_chg-paths.patch spi_bfin-wait-for-tx-to-complete-on-full-duplex-paths.patch spi_bfin-wait-for-tx-to-complete-on-write-paths.patch spi_bfin-headers-are-not-for-changelogs.patch blackfin-rtc-driver-the-frequency-function-is-in-units-of-hz-not-units-of-seconds-so-lock-our-driver-down-to-1-hz.patch blackfin-rtc-driver-we-pass-in-a-struct-device-to-the-irq-handler-not-a-struct-platform_device-so-fix-the-irq-handler.patch blackfin-rtc-driver-cleanup-proc-handler-we-dont-need-rtc-reg-dump-now-that-we-have-mmr-filesystem-in-sysfs.patch blackfin-rtc-driver-use-dev_dbg-rather-than-pr_stamp.patch blackfin-rtc-driver-read_alarm-checks-the-enabled-field-not-the-pending-field.patch blackfin-rtc-driver-shave-off-another-memcpy-by-using-assignment.patch blackfin-rtc-driver-convert-sync-wait-to-use-the-irq-write-complete-notice.patch sanitize-the-type-of-struct-useru_ar0.patch add-cmpxchg_local-to-blackfin-replace-__cmpxchg-by-generic-cmpxchg.patch d_path-make-d_path-use-a-struct-path.patch procfs-constify-function-pointer-tables.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html