u32 addr = msgs[dev->msg_write_idx].addr;
        u32 buf_len = dev->tx_buf_len;
        u8 *buf = dev->tx_buf;
+       bool need_restart = false;
 
        intr_mask = DW_IC_INTR_DEFAULT_MASK;
 
                        /* new i2c_msg */
                        buf = msgs[dev->msg_write_idx].buf;
                        buf_len = msgs[dev->msg_write_idx].len;
+
+                       /* If both IC_EMPTYFIFO_HOLD_MASTER_EN and
+                        * IC_RESTART_EN are set, we must manually
+                        * set restart bit between messages.
+                        */
+                       if ((dev->master_cfg & DW_IC_CON_RESTART_EN) &&
+                                       (dev->msg_write_idx > 0))
+                               need_restart = true;
                }
 
                tx_limit = dev->tx_fifo_depth - dw_readl(dev, DW_IC_TXFLR);
                            buf_len == 1)
                                cmd |= BIT(9);
 
+                       if (need_restart) {
+                               cmd |= BIT(10);
+                               need_restart = false;
+                       }
+
                        if (msgs[dev->msg_write_idx].flags & I2C_M_RD) {
 
                                /* avoid rx buffer overrun */