Lines Matching refs:op

368 				 const struct spi_mem_op *op)  in fsl_qspi_supports_op()  argument
373 ret = fsl_qspi_check_buswidth(q, op->cmd.buswidth); in fsl_qspi_supports_op()
375 if (op->addr.nbytes) in fsl_qspi_supports_op()
376 ret |= fsl_qspi_check_buswidth(q, op->addr.buswidth); in fsl_qspi_supports_op()
378 if (op->dummy.nbytes) in fsl_qspi_supports_op()
379 ret |= fsl_qspi_check_buswidth(q, op->dummy.buswidth); in fsl_qspi_supports_op()
381 if (op->data.nbytes) in fsl_qspi_supports_op()
382 ret |= fsl_qspi_check_buswidth(q, op->data.buswidth); in fsl_qspi_supports_op()
391 if (op->addr.nbytes + in fsl_qspi_supports_op()
392 (op->dummy.nbytes ? 1:0) + in fsl_qspi_supports_op()
393 (op->data.nbytes ? 1:0) > 6) in fsl_qspi_supports_op()
397 if (op->dummy.nbytes && in fsl_qspi_supports_op()
398 (op->dummy.nbytes * 8 / op->dummy.buswidth > 64)) in fsl_qspi_supports_op()
402 if (op->data.dir == SPI_MEM_DATA_IN && in fsl_qspi_supports_op()
403 (op->data.nbytes > q->devtype_data->ahb_buf_size || in fsl_qspi_supports_op()
404 (op->data.nbytes > q->devtype_data->rxfifo - 4 && in fsl_qspi_supports_op()
405 !IS_ALIGNED(op->data.nbytes, 8)))) in fsl_qspi_supports_op()
408 if (op->data.dir == SPI_MEM_DATA_OUT && in fsl_qspi_supports_op()
409 op->data.nbytes > q->devtype_data->txfifo) in fsl_qspi_supports_op()
412 return spi_mem_default_supports_op(mem, op); in fsl_qspi_supports_op()
416 const struct spi_mem_op *op) in fsl_qspi_prepare_lut() argument
422 lutval[0] |= LUT_DEF(0, LUT_CMD, LUT_PAD(op->cmd.buswidth), in fsl_qspi_prepare_lut()
423 op->cmd.opcode); in fsl_qspi_prepare_lut()
430 for (i = 0; i < op->addr.nbytes; i++) { in fsl_qspi_prepare_lut()
431 u8 addrbyte = op->addr.val >> (8 * (op->addr.nbytes - i - 1)); in fsl_qspi_prepare_lut()
434 LUT_PAD(op->addr.buswidth), in fsl_qspi_prepare_lut()
439 if (op->dummy.nbytes) { in fsl_qspi_prepare_lut()
441 LUT_PAD(op->dummy.buswidth), in fsl_qspi_prepare_lut()
442 op->dummy.nbytes * 8 / in fsl_qspi_prepare_lut()
443 op->dummy.buswidth); in fsl_qspi_prepare_lut()
447 if (op->data.nbytes) { in fsl_qspi_prepare_lut()
449 op->data.dir == SPI_MEM_DATA_IN ? in fsl_qspi_prepare_lut()
451 LUT_PAD(op->data.buswidth), in fsl_qspi_prepare_lut()
551 static void fsl_qspi_read_ahb(struct fsl_qspi *q, const struct spi_mem_op *op) in fsl_qspi_read_ahb() argument
553 memcpy_fromio(op->data.buf.in, in fsl_qspi_read_ahb()
555 op->data.nbytes); in fsl_qspi_read_ahb()
559 const struct spi_mem_op *op) in fsl_qspi_fill_txfifo() argument
565 for (i = 0; i < ALIGN_DOWN(op->data.nbytes, 4); i += 4) { in fsl_qspi_fill_txfifo()
566 memcpy(&val, op->data.buf.out + i, 4); in fsl_qspi_fill_txfifo()
571 if (i < op->data.nbytes) { in fsl_qspi_fill_txfifo()
572 memcpy(&val, op->data.buf.out + i, op->data.nbytes - i); in fsl_qspi_fill_txfifo()
578 for (i = op->data.nbytes; i < 16; i += 4) in fsl_qspi_fill_txfifo()
584 const struct spi_mem_op *op) in fsl_qspi_read_rxfifo() argument
588 u8 *buf = op->data.buf.in; in fsl_qspi_read_rxfifo()
591 for (i = 0; i < ALIGN_DOWN(op->data.nbytes, 4); i += 4) { in fsl_qspi_read_rxfifo()
597 if (i < op->data.nbytes) { in fsl_qspi_read_rxfifo()
600 memcpy(buf + i, &val, op->data.nbytes - i); in fsl_qspi_read_rxfifo()
604 static int fsl_qspi_do_op(struct fsl_qspi *q, const struct spi_mem_op *op) in fsl_qspi_do_op() argument
616 qspi_writel(q, op->data.nbytes | QUADSPI_IPCR_SEQID(SEQID_LUT), in fsl_qspi_do_op()
623 if (!err && op->data.nbytes && op->data.dir == SPI_MEM_DATA_IN) in fsl_qspi_do_op()
624 fsl_qspi_read_rxfifo(q, op); in fsl_qspi_do_op()
641 static int fsl_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) in fsl_qspi_exec_op() argument
675 fsl_qspi_prepare_lut(q, op); in fsl_qspi_exec_op()
682 if (op->data.nbytes > (q->devtype_data->rxfifo - 4) && in fsl_qspi_exec_op()
683 op->data.dir == SPI_MEM_DATA_IN) { in fsl_qspi_exec_op()
684 fsl_qspi_read_ahb(q, op); in fsl_qspi_exec_op()
689 if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT) in fsl_qspi_exec_op()
690 fsl_qspi_fill_txfifo(q, op); in fsl_qspi_exec_op()
692 err = fsl_qspi_do_op(q, op); in fsl_qspi_exec_op()
703 static int fsl_qspi_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op) in fsl_qspi_adjust_op_size() argument
707 if (op->data.dir == SPI_MEM_DATA_OUT) { in fsl_qspi_adjust_op_size()
708 if (op->data.nbytes > q->devtype_data->txfifo) in fsl_qspi_adjust_op_size()
709 op->data.nbytes = q->devtype_data->txfifo; in fsl_qspi_adjust_op_size()
711 if (op->data.nbytes > q->devtype_data->ahb_buf_size) in fsl_qspi_adjust_op_size()
712 op->data.nbytes = q->devtype_data->ahb_buf_size; in fsl_qspi_adjust_op_size()
713 else if (op->data.nbytes > (q->devtype_data->rxfifo - 4)) in fsl_qspi_adjust_op_size()
714 op->data.nbytes = ALIGN_DOWN(op->data.nbytes, 8); in fsl_qspi_adjust_op_size()