Lines Matching refs:op
391 const struct spi_mem_op *op) in nxp_fspi_supports_op() argument
400 ret = nxp_fspi_check_buswidth(f, op->cmd.buswidth); in nxp_fspi_supports_op()
402 if (op->addr.nbytes) in nxp_fspi_supports_op()
403 ret |= nxp_fspi_check_buswidth(f, op->addr.buswidth); in nxp_fspi_supports_op()
405 if (op->dummy.nbytes) in nxp_fspi_supports_op()
406 ret |= nxp_fspi_check_buswidth(f, op->dummy.buswidth); in nxp_fspi_supports_op()
408 if (op->data.nbytes) in nxp_fspi_supports_op()
409 ret |= nxp_fspi_check_buswidth(f, op->data.buswidth); in nxp_fspi_supports_op()
417 if (op->addr.nbytes > 4) in nxp_fspi_supports_op()
425 if (op->addr.val >= f->memmap_phy_size) in nxp_fspi_supports_op()
429 if (op->dummy.buswidth && in nxp_fspi_supports_op()
430 (op->dummy.nbytes * 8 / op->dummy.buswidth > 64)) in nxp_fspi_supports_op()
434 if (op->data.dir == SPI_MEM_DATA_IN && in nxp_fspi_supports_op()
435 (op->data.nbytes > f->devtype_data->ahb_buf_size || in nxp_fspi_supports_op()
436 (op->data.nbytes > f->devtype_data->rxfifo - 4 && in nxp_fspi_supports_op()
437 !IS_ALIGNED(op->data.nbytes, 8)))) in nxp_fspi_supports_op()
440 if (op->data.dir == SPI_MEM_DATA_OUT && in nxp_fspi_supports_op()
441 op->data.nbytes > f->devtype_data->txfifo) in nxp_fspi_supports_op()
444 return spi_mem_default_supports_op(slave, op); in nxp_fspi_supports_op()
485 const struct spi_mem_op *op) in nxp_fspi_prepare_lut() argument
492 lutval[0] |= LUT_DEF(0, LUT_CMD, LUT_PAD(op->cmd.buswidth), in nxp_fspi_prepare_lut()
493 op->cmd.opcode); in nxp_fspi_prepare_lut()
496 if (op->addr.nbytes) { in nxp_fspi_prepare_lut()
498 LUT_PAD(op->addr.buswidth), in nxp_fspi_prepare_lut()
499 op->addr.nbytes * 8); in nxp_fspi_prepare_lut()
504 if (op->dummy.nbytes) { in nxp_fspi_prepare_lut()
510 LUT_PAD(op->data.buswidth), in nxp_fspi_prepare_lut()
511 op->dummy.nbytes * 8 / in nxp_fspi_prepare_lut()
512 op->dummy.buswidth); in nxp_fspi_prepare_lut()
517 if (op->data.nbytes) { in nxp_fspi_prepare_lut()
519 op->data.dir == SPI_MEM_DATA_IN ? in nxp_fspi_prepare_lut()
521 LUT_PAD(op->data.buswidth), in nxp_fspi_prepare_lut()
538 op->cmd.opcode, lutval[0], lutval[1], lutval[2], lutval[3], op->data.nbytes); in nxp_fspi_prepare_lut()
627 static void nxp_fspi_read_ahb(struct nxp_fspi *f, const struct spi_mem_op *op) in nxp_fspi_read_ahb() argument
629 u32 len = op->data.nbytes; in nxp_fspi_read_ahb()
632 memcpy_fromio(op->data.buf.in, (f->ahb_addr + op->addr.val), len); in nxp_fspi_read_ahb()
636 const struct spi_mem_op *op) in nxp_fspi_fill_txfifo() argument
640 u8 *buf = (u8 *)op->data.buf.out; in nxp_fspi_fill_txfifo()
650 for (i = 0; i < ALIGN_DOWN(op->data.nbytes, 8); i += 8) { in nxp_fspi_fill_txfifo()
662 if (i < op->data.nbytes) { in nxp_fspi_fill_txfifo()
671 for (j = 0; j < ALIGN(op->data.nbytes - i, 4); j += 4) { in nxp_fspi_fill_txfifo()
680 const struct spi_mem_op *op) in nxp_fspi_read_rxfifo() argument
684 int len = op->data.nbytes; in nxp_fspi_read_rxfifo()
685 u8 *buf = (u8 *)op->data.buf.in; in nxp_fspi_read_rxfifo()
708 buf = op->data.buf.in + i; in nxp_fspi_read_rxfifo()
715 len = op->data.nbytes - i; in nxp_fspi_read_rxfifo()
716 for (j = 0; j < op->data.nbytes - i; j += 4) { in nxp_fspi_read_rxfifo()
730 static int nxp_fspi_do_op(struct nxp_fspi *f, const struct spi_mem_op *op) in nxp_fspi_do_op() argument
743 fspi_writel(f, op->addr.val, base + FSPI_IPCR0); in nxp_fspi_do_op()
749 fspi_writel(f, op->data.nbytes | in nxp_fspi_do_op()
762 if (!err && op->data.nbytes && op->data.dir == SPI_MEM_DATA_IN) in nxp_fspi_do_op()
763 nxp_fspi_read_rxfifo(f, op); in nxp_fspi_do_op()
769 const struct spi_mem_op *op) in nxp_fspi_exec_op() argument
783 nxp_fspi_prepare_lut(f, op); in nxp_fspi_exec_op()
790 if (op->data.nbytes > (f->devtype_data->rxfifo - 4) && in nxp_fspi_exec_op()
791 op->data.dir == SPI_MEM_DATA_IN && in nxp_fspi_exec_op()
793 nxp_fspi_read_ahb(f, op); in nxp_fspi_exec_op()
795 if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT) in nxp_fspi_exec_op()
796 nxp_fspi_fill_txfifo(f, op); in nxp_fspi_exec_op()
798 err = nxp_fspi_do_op(f, op); in nxp_fspi_exec_op()
808 struct spi_mem_op *op) in nxp_fspi_adjust_op_size() argument
816 if (op->data.dir == SPI_MEM_DATA_OUT) { in nxp_fspi_adjust_op_size()
817 if (op->data.nbytes > f->devtype_data->txfifo) in nxp_fspi_adjust_op_size()
818 op->data.nbytes = f->devtype_data->txfifo; in nxp_fspi_adjust_op_size()
820 if (op->data.nbytes > f->devtype_data->ahb_buf_size) in nxp_fspi_adjust_op_size()
821 op->data.nbytes = f->devtype_data->ahb_buf_size; in nxp_fspi_adjust_op_size()
822 else if (op->data.nbytes > (f->devtype_data->rxfifo - 4)) in nxp_fspi_adjust_op_size()
823 op->data.nbytes = ALIGN_DOWN(op->data.nbytes, 8); in nxp_fspi_adjust_op_size()
828 op->data.dir == SPI_MEM_DATA_IN && in nxp_fspi_adjust_op_size()
829 op->data.nbytes > f->devtype_data->rxfifo) in nxp_fspi_adjust_op_size()
830 op->data.nbytes = f->devtype_data->rxfifo; in nxp_fspi_adjust_op_size()