u32 genfifoentry;
        enum mode_type mode;
        struct completion data_completion;
+       struct mutex op_lock;
 };
 
 /**
                op->cmd.opcode, op->cmd.buswidth, op->addr.buswidth,
                op->dummy.buswidth, op->data.buswidth);
 
+       mutex_lock(&xqspi->op_lock);
        zynqmp_qspi_config_op(xqspi, mem->spi);
        zynqmp_qspi_chipselect(mem->spi, false);
        genfifoentry |= xqspi->genfifocs;
 return_err:
 
        zynqmp_qspi_chipselect(mem->spi, true);
+       mutex_unlock(&xqspi->op_lock);
 
        return err;
 }
                goto clk_dis_pclk;
        }
 
+       mutex_init(&xqspi->op_lock);
+
        pm_runtime_use_autosuspend(&pdev->dev);
        pm_runtime_set_autosuspend_delay(&pdev->dev, SPI_AUTOSUSPEND_TIMEOUT);
        pm_runtime_set_active(&pdev->dev);