From: Greg Kroah-Hartman Date: Sun, 16 Sep 2018 12:30:55 +0000 (+0200) Subject: 3.18-stable patches X-Git-Tag: v4.18.9~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f1936507700ba32a5417a11644d005dccdcccc48;p=thirdparty%2Fkernel%2Fstable-queue.git 3.18-stable patches added patches: i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch --- diff --git a/queue-3.18/i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch b/queue-3.18/i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch new file mode 100644 index 00000000000..6a754e3ea82 --- /dev/null +++ b/queue-3.18/i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch @@ -0,0 +1,59 @@ +From ae7304c3ea28a3ba47a7a8312c76c654ef24967e Mon Sep 17 00:00:00 2001 +From: Shubhrajyoti Datta +Date: Mon, 3 Sep 2018 15:11:11 +0530 +Subject: i2c: xiic: Make the start and the byte count write atomic + +From: Shubhrajyoti Datta + +commit ae7304c3ea28a3ba47a7a8312c76c654ef24967e upstream. + +Disable interrupts while configuring the transfer and enable them back. + +We have below as the programming sequence +1. start and slave address +2. byte count and stop + +In some customer platform there was a lot of interrupts between 1 and 2 +and after slave address (around 7 clock cyles) if 2 is not executed +then the transaction is nacked. + +To fix this case make the 2 writes atomic. + +Signed-off-by: Shubhrajyoti Datta +Signed-off-by: Michal Simek +[wsa: added a newline for better readability] +Signed-off-by: Wolfram Sang +Cc: stable@kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/i2c/busses/i2c-xiic.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/i2c/busses/i2c-xiic.c ++++ b/drivers/i2c/busses/i2c-xiic.c +@@ -500,6 +500,7 @@ static void xiic_start_recv(struct xiic_ + { + u8 rx_watermark; + struct i2c_msg *msg = i2c->rx_msg = i2c->tx_msg; ++ unsigned long flags; + + /* Clear and enable Rx full interrupt. */ + xiic_irq_clr_en(i2c, XIIC_INTR_RX_FULL_MASK | XIIC_INTR_TX_ERROR_MASK); +@@ -515,6 +516,7 @@ static void xiic_start_recv(struct xiic_ + rx_watermark = IIC_RX_FIFO_DEPTH; + xiic_setreg8(i2c, XIIC_RFD_REG_OFFSET, rx_watermark - 1); + ++ local_irq_save(flags); + if (!(msg->flags & I2C_M_NOSTART)) + /* write the address */ + xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, +@@ -525,6 +527,8 @@ static void xiic_start_recv(struct xiic_ + + xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, + msg->len | ((i2c->nmsgs == 1) ? XIIC_TX_DYN_STOP_MASK : 0)); ++ local_irq_restore(flags); ++ + if (i2c->nmsgs == 1) + /* very last, enable bus not busy as well */ + xiic_irq_clr_en(i2c, XIIC_INTR_BNB_MASK); diff --git a/queue-3.18/series b/queue-3.18/series index 680af568d58..f17ce1d4aa4 100644 --- a/queue-3.18/series +++ b/queue-3.18/series @@ -30,3 +30,4 @@ irda-only-insert-new-objects-into-the-global-database-via-setsockopt.patch enic-do-not-call-enic_change_mtu-in-enic_probe.patch fixes-commit-86af955d02bb-mm-numa-avoid-waiting-on-freed-migrated-pages.patch asoc-wm8994-fix-missing-break-in-switch.patch +i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch diff --git a/queue-4.14/series b/queue-4.14/series new file mode 100644 index 00000000000..1e503f6e4df --- /dev/null +++ b/queue-4.14/series @@ -0,0 +1,10 @@ +i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch +i2c-i801-fix-dnv-s-smbctrl-register-offset.patch +scsi-lpfc-correct-mds-diag-and-nvmet-configuration.patch +nbd-don-t-allow-invalid-blocksize-settings.patch +block-bfq-swap-puts-in-bfqg_and_blkg_put.patch +android-binder-fix-the-race-mmap-and-alloc_new_buf_locked.patch +mips-vdso-match-data-page-cache-colouring-when-d-aliases.patch +smb3-backup-intent-flag-missing-for-directory-opens-with-backupuid-mounts.patch +smb3-check-for-and-properly-advertise-directory-lease-support.patch +btrfs-fix-data-corruption-when-deduplicating-between-different-files.patch diff --git a/queue-4.18/series b/queue-4.18/series new file mode 100644 index 00000000000..e8decc49bac --- /dev/null +++ b/queue-4.18/series @@ -0,0 +1,20 @@ +i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch +i2c-i801-fix-dnv-s-smbctrl-register-offset.patch +hid-multitouch-fix-elan-panels-with-2-input-modes-declaration.patch +hid-core-fix-grouping-by-application.patch +hid-i2c-hid-fix-flooded-incomplete-report-after-s3-on-rayd-touchscreen.patch +hid-input-fix-leaking-custom-input-node-name.patch +mm-hugetlb-filter-out-hugetlb-pages-if-hugepage-migration-is-not-supported.patch +memory_hotplug-fix-kernel_panic-on-offline-page-processing.patch +mac80211-don-t-update-the-pm-state-of-a-peer-upon-a-multicast-frame.patch +scsi-lpfc-correct-mds-diag-and-nvmet-configuration.patch +nbd-don-t-allow-invalid-blocksize-settings.patch +block-don-t-warn-when-doing-fsync-on-read-only-devices.patch +block-bfq-swap-puts-in-bfqg_and_blkg_put.patch +android-binder-fix-the-race-mmap-and-alloc_new_buf_locked.patch +mips-vdso-match-data-page-cache-colouring-when-d-aliases.patch +smb3-backup-intent-flag-missing-for-directory-opens-with-backupuid-mounts.patch +smb3-check-for-and-properly-advertise-directory-lease-support.patch +cifs-connect-to-servername-instead-of-ip-for-ipc-share.patch +btrfs-fix-qgroup_free-wrong-num_bytes-in-btrfs_subvolume_reserve_metadata.patch +btrfs-fix-data-corruption-when-deduplicating-between-different-files.patch diff --git a/queue-4.4/series b/queue-4.4/series new file mode 100644 index 00000000000..cf001812e2a --- /dev/null +++ b/queue-4.4/series @@ -0,0 +1,2 @@ +i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch +i2c-i801-fix-dnv-s-smbctrl-register-offset.patch diff --git a/queue-4.9/series b/queue-4.9/series new file mode 100644 index 00000000000..cf001812e2a --- /dev/null +++ b/queue-4.9/series @@ -0,0 +1,2 @@ +i2c-xiic-make-the-start-and-the-byte-count-write-atomic.patch +i2c-i801-fix-dnv-s-smbctrl-register-offset.patch