--- /dev/null
+From ae7304c3ea28a3ba47a7a8312c76c654ef24967e Mon Sep 17 00:00:00 2001
+From: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
+Date: Mon, 3 Sep 2018 15:11:11 +0530
+Subject: i2c: xiic: Make the start and the byte count write atomic
+
+From: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
+
+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 <shubhrajyoti.datta@xilinx.com>
+Signed-off-by: Michal Simek <michal.simek@xilinx.com>
+[wsa: added a newline for better readability]
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+Cc: stable@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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);
--- /dev/null
+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
--- /dev/null
+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