struct skl_module_cfg *mconfig,
                        struct skl_cpr_cfg *cpr_mconfig)
 {
+       u32 dma_io_buf;
+
        cpr_mconfig->gtw_cfg.node_id = skl_get_node_id(ctx, mconfig);
 
        if (cpr_mconfig->gtw_cfg.node_id == SKL_NON_GATEWAY_CPR_NODE_ID) {
                return;
        }
 
-       if (SKL_CONN_SOURCE == mconfig->hw_conn_type)
-               cpr_mconfig->gtw_cfg.dma_buffer_size = 2 * mconfig->obs;
-       else
-               cpr_mconfig->gtw_cfg.dma_buffer_size = 2 * mconfig->ibs;
+       switch (mconfig->hw_conn_type) {
+       case SKL_CONN_SOURCE:
+               if (mconfig->dev_type == SKL_DEVICE_HDAHOST)
+                       dma_io_buf =  mconfig->ibs;
+               else
+                       dma_io_buf =  mconfig->obs;
+               break;
+
+       case SKL_CONN_SINK:
+               if (mconfig->dev_type == SKL_DEVICE_HDAHOST)
+                       dma_io_buf =  mconfig->obs;
+               else
+                       dma_io_buf =  mconfig->ibs;
+               break;
+
+       default:
+               dev_warn(ctx->dev, "wrong connection type: %d\n",
+                               mconfig->hw_conn_type);
+               return;
+       }
+
+       cpr_mconfig->gtw_cfg.dma_buffer_size =
+                               mconfig->dma_buffer_size * dma_io_buf;
 
        cpr_mconfig->cpr_feature_mask = 0;
        cpr_mconfig->gtw_cfg.config_length  = 0;