diff --git a/src/jtag/drivers/mpsse.c b/src/jtag/drivers/mpsse.c index 063ef2ffb..d6cbc8404 100644 --- a/src/jtag/drivers/mpsse.c +++ b/src/jtag/drivers/mpsse.c @@ -443,8 +443,8 @@ int mpsse_clock_data(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_off while (length > 0) { /* Guarantee buffer space enough for a minimum size transfer */ - if (buffer_write_space(ctx) + (length < 8) < (out ? 4 : 3) - || (in && buffer_read_space(ctx) < 1)) + if (buffer_write_space(ctx) + (length < 8) < (out || (!out && !in) ? 4 : 3) + || (in && buffer_read_space(ctx) < 1)) retval = mpsse_flush(ctx); if (length < 8) { @@ -465,8 +465,8 @@ int mpsse_clock_data(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_off if (this_bytes > 65536) this_bytes = 65536; /* Buffer space limit. We already made sure there's space for the minimum - *transfer. */ - if (out && this_bytes + 3 > buffer_write_space(ctx)) + * transfer. */ + if ((out || (!out && !in)) && this_bytes + 3 > buffer_write_space(ctx)) this_bytes = buffer_write_space(ctx) - 3; if (in && this_bytes > buffer_read_space(ctx)) this_bytes = buffer_read_space(ctx);