}
 }
 
-static int _sdw_prepare_stream(struct sdw_stream_runtime *stream)
+static int _sdw_prepare_stream(struct sdw_stream_runtime *stream,
+                              bool update_params)
 {
        struct sdw_master_runtime *m_rt;
        struct sdw_bus *bus = NULL;
                        return -EINVAL;
                }
 
+               if (!update_params)
+                       goto program_params;
+
                /* Increment cumulative bus bandwidth */
                /* TODO: Update this during Device-Device support */
                bus->params.bandwidth += m_rt->stream->params.rate *
                        }
                }
 
+program_params:
                /* Program params */
                ret = sdw_program_params(bus);
                if (ret < 0) {
  */
 int sdw_prepare_stream(struct sdw_stream_runtime *stream)
 {
+       bool update_params = true;
        int ret;
 
        if (!stream) {
                goto state_err;
        }
 
-       ret = _sdw_prepare_stream(stream);
+       /*
+        * when the stream is DISABLED, this means sdw_prepare_stream()
+        * is called as a result of an underflow or a resume operation.
+        * In this case, the bus parameters shall not be recomputed, but
+        * still need to be re-applied
+        */
+       if (stream->state == SDW_STREAM_DISABLED)
+               update_params = false;
+
+       ret = _sdw_prepare_stream(stream, update_params);
 
 state_err:
        sdw_release_bus_lock(stream);