/* Read data if receive data valid is set */
                while (cdns_i2c_readreg(CDNS_I2C_SR_OFFSET) &
                       CDNS_I2C_SR_RXDV) {
-                       /*
-                        * Clear hold bit that was set for FIFO control if
-                        * RX data left is less than FIFO depth, unless
-                        * repeated start is selected.
-                        */
-                       if ((id->recv_count < CDNS_I2C_FIFO_DEPTH) &&
-                           !id->bus_hold_flag)
-                               cdns_i2c_clear_bus_hold(id);
-
                        if (id->recv_count > 0) {
                                *(id->p_recv_buf)++ =
                                        cdns_i2c_readreg(CDNS_I2C_DATA_OFFSET);
                                id->recv_count--;
                                id->curr_recv_count--;
+
+                               /*
+                                * Clear hold bit that was set for FIFO control
+                                * if RX data left is less than or equal to
+                                * FIFO DEPTH unless repeated start is selected
+                                */
+                               if (id->recv_count <= CDNS_I2C_FIFO_DEPTH &&
+                                   !id->bus_hold_flag)
+                                       cdns_i2c_clear_bus_hold(id);
+
                        } else {
                                dev_err(id->adap.dev.parent,
                                        "xfer_size reg rollover. xfer aborted!\n");