return ret;
 }
 
-static int mchp_coreqspi_setup_clock(struct mchp_coreqspi *qspi, struct spi_device *spi)
+static int mchp_coreqspi_setup_clock(struct mchp_coreqspi *qspi, struct spi_device *spi,
+                                    const struct spi_mem_op *op)
 {
        unsigned long clk_hz;
        u32 control, baud_rate_val = 0;
        if (!clk_hz)
                return -EINVAL;
 
-       baud_rate_val = DIV_ROUND_UP(clk_hz, 2 * spi->max_speed_hz);
+       baud_rate_val = DIV_ROUND_UP(clk_hz, 2 * op->max_freq);
        if (baud_rate_val > MAX_DIVIDER || baud_rate_val < MIN_DIVIDER) {
                dev_err(&spi->dev,
                        "could not configure the clock for spi clock %d Hz & system clock %ld Hz\n",
-                       spi->max_speed_hz, clk_hz);
+                       op->max_freq, clk_hz);
                return -EINVAL;
        }
 
        if (err)
                goto error;
 
-       err = mchp_coreqspi_setup_clock(qspi, mem->spi);
+       err = mchp_coreqspi_setup_clock(qspi, mem->spi, op);
        if (err)
                goto error;
 
 
 static bool mchp_coreqspi_supports_op(struct spi_mem *mem, const struct spi_mem_op *op)
 {
+       struct mchp_coreqspi *qspi = spi_controller_get_devdata(mem->spi->controller);
+       unsigned long clk_hz;
+       u32 baud_rate_val;
+
        if (!spi_mem_default_supports_op(mem, op))
                return false;
 
                        return false;
        }
 
+       clk_hz = clk_get_rate(qspi->clk);
+       if (!clk_hz)
+               return false;
+
+       baud_rate_val = DIV_ROUND_UP(clk_hz, 2 * op->max_freq);
+       if (baud_rate_val > MAX_DIVIDER || baud_rate_val < MIN_DIVIDER)
+               return false;
+
        return true;
 }
 
        .exec_op = mchp_coreqspi_exec_op,
 };
 
+static const struct spi_controller_mem_caps mchp_coreqspi_mem_caps = {
+       .per_op_freq = true,
+};
+
 static int mchp_coreqspi_probe(struct platform_device *pdev)
 {
        struct spi_controller *ctlr;
 
        ctlr->bits_per_word_mask = SPI_BPW_MASK(8);
        ctlr->mem_ops = &mchp_coreqspi_mem_ops;
+       ctlr->mem_caps = &mchp_coreqspi_mem_caps;
        ctlr->setup = mchp_coreqspi_setup_op;
        ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_RX_DUAL | SPI_RX_QUAD |
                          SPI_TX_DUAL | SPI_TX_QUAD;