mutex_lock(&qspi->list_lock);
 
        if (!qspi->mmap_enabled || qspi->current_cs != spi_get_chipselect(mem->spi, 0)) {
-               ti_qspi_setup_clk(qspi, mem->spi->max_speed_hz);
+               ti_qspi_setup_clk(qspi, op->max_freq);
                ti_qspi_enable_memory_map(mem->spi);
        }
        ti_qspi_setup_mmap_read(mem->spi, op->cmd.opcode, op->data.buswidth,
        .adjust_op_size = ti_qspi_adjust_op_size,
 };
 
+static const struct spi_controller_mem_caps ti_qspi_mem_caps = {
+       .per_op_freq = true,
+};
+
 static int ti_qspi_start_transfer_one(struct spi_controller *host,
                struct spi_message *m)
 {
        host->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(16) |
                                   SPI_BPW_MASK(8);
        host->mem_ops = &ti_qspi_mem_ops;
+       host->mem_caps = &ti_qspi_mem_caps;
 
        if (!of_property_read_u32(np, "num-cs", &num_cs))
                host->num_chipselect = num_cs;