Lines Matching refs:xfer

492 static inline bool atmel_spi_is_vmalloc_xfer(struct spi_transfer *xfer)
494 return is_vmalloc_addr(xfer->tx_buf) || is_vmalloc_addr(xfer->rx_buf);
498 struct spi_transfer *xfer)
500 return as->use_dma && xfer->len >= DMA_MIN_BYTES;
505 struct spi_transfer *xfer)
510 return atmel_spi_use_dma(as, xfer) &&
511 !atmel_spi_is_vmalloc_xfer(xfer);
513 return atmel_spi_use_dma(as, xfer);
656 struct spi_transfer *xfer)
659 unsigned long xfer_pos = xfer->len - as->current_remaining_bytes;
670 if (xfer->bits_per_word > 8)
671 spi_writel(as, TDR, *(u16 *)(xfer->tx_buf + xfer_pos));
673 spi_writel(as, TDR, *(u8 *)(xfer->tx_buf + xfer_pos));
676 " start pio xfer %p: len %u tx %p rx %p bitpw %d\n",
677 xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
678 xfer->bits_per_word);
688 struct spi_transfer *xfer)
692 u32 offset = xfer->len - as->current_remaining_bytes;
693 const u16 *words = (const u16 *)((u8 *)xfer->tx_buf + offset);
694 const u8 *bytes = (const u8 *)((u8 *)xfer->tx_buf + offset);
701 current_remaining_data = ((xfer->bits_per_word > 8) ?
720 if (xfer->bits_per_word > 8) {
733 if (xfer->bits_per_word > 8)
743 " start fifo xfer %p: len %u tx %p rx %p bitpw %d\n",
744 xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
745 xfer->bits_per_word);
758 struct spi_transfer *xfer)
763 atmel_spi_next_xfer_fifo(host, xfer);
765 atmel_spi_next_xfer_single(host, xfer);
772 struct spi_transfer *xfer,
789 *plen = xfer->len;
791 if (atmel_spi_dma_slave_config(as, xfer->bits_per_word))
795 if (atmel_spi_is_vmalloc_xfer(xfer) &&
799 xfer->len,
805 xfer->rx_sg.sgl,
806 xfer->rx_sg.nents,
814 if (atmel_spi_is_vmalloc_xfer(xfer) &&
816 memcpy(as->addr_tx_bbuf, xfer->tx_buf, xfer->len);
819 xfer->len, DMA_MEM_TO_DEV,
824 xfer->tx_sg.sgl,
825 xfer->tx_sg.nents,
834 " start dma xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
835 xfer, xfer->len, xfer->tx_buf, (unsigned long long)xfer->tx_dma,
836 xfer->rx_buf, (unsigned long long)xfer->rx_dma);
865 struct spi_transfer *xfer,
870 *rx_dma = xfer->rx_dma + xfer->len - *plen;
871 *tx_dma = xfer->tx_dma + xfer->len - *plen;
878 struct spi_transfer *xfer)
898 scbr = DIV_ROUND_UP(bus_hz, xfer->speed_hz);
907 xfer->speed_hz, scbr, bus_hz/255);
913 xfer->speed_hz, scbr, bus_hz);
919 xfer->effective_speed_hz = bus_hz / scbr;
929 struct spi_transfer *xfer)
938 atmel_spi_next_xfer_data(host, xfer, &tx_dma, &rx_dma, &len);
944 if (xfer->bits_per_word > 8)
950 " start xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
951 xfer, xfer->len, xfer->tx_buf,
952 (unsigned long long)xfer->tx_dma, xfer->rx_buf,
953 (unsigned long long)xfer->rx_dma);
957 atmel_spi_next_xfer_data(host, xfer, &tx_dma, &rx_dma, &len);
963 if (xfer->bits_per_word > 8)
969 " next xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
970 xfer, xfer->len, xfer->tx_buf,
971 (unsigned long long)xfer->tx_dma, xfer->rx_buf,
972 (unsigned long long)xfer->rx_dma);
997 atmel_spi_dma_map_xfer(struct atmel_spi *as, struct spi_transfer *xfer)
1001 xfer->tx_dma = xfer->rx_dma = INVALID_DMA_ADDRESS;
1002 if (xfer->tx_buf) {
1005 void *nonconst_tx = (void *)xfer->tx_buf;
1007 xfer->tx_dma = dma_map_single(dev,
1008 nonconst_tx, xfer->len,
1010 if (dma_mapping_error(dev, xfer->tx_dma))
1013 if (xfer->rx_buf) {
1014 xfer->rx_dma = dma_map_single(dev,
1015 xfer->rx_buf, xfer->len,
1017 if (dma_mapping_error(dev, xfer->rx_dma)) {
1018 if (xfer->tx_buf)
1020 xfer->tx_dma, xfer->len,
1029 struct spi_transfer *xfer)
1031 if (xfer->tx_dma != INVALID_DMA_ADDRESS)
1032 dma_unmap_single(host->dev.parent, xfer->tx_dma,
1033 xfer->len, DMA_TO_DEVICE);
1034 if (xfer->rx_dma != INVALID_DMA_ADDRESS)
1035 dma_unmap_single(host->dev.parent, xfer->rx_dma,
1036 xfer->len, DMA_FROM_DEVICE);
1045 atmel_spi_pump_single_data(struct atmel_spi *as, struct spi_transfer *xfer)
1049 unsigned long xfer_pos = xfer->len - as->current_remaining_bytes;
1051 if (xfer->bits_per_word > 8) {
1052 rxp16 = (u16 *)(((u8 *)xfer->rx_buf) + xfer_pos);
1055 rxp = ((u8 *)xfer->rx_buf) + xfer_pos;
1058 if (xfer->bits_per_word > 8) {
1069 atmel_spi_pump_fifo_data(struct atmel_spi *as, struct spi_transfer *xfer)
1073 u32 offset = xfer->len - as->current_remaining_bytes;
1074 u16 *words = (u16 *)((u8 *)xfer->rx_buf + offset);
1075 u8 *bytes = (u8 *)((u8 *)xfer->rx_buf + offset);
1079 num_bytes = ((xfer->bits_per_word > 8) ?
1089 if (xfer->bits_per_word > 8)
1095 if (xfer->bits_per_word > 8)
1109 atmel_spi_pump_pio_data(struct atmel_spi *as, struct spi_transfer *xfer)
1112 atmel_spi_pump_fifo_data(as, xfer);
1114 atmel_spi_pump_single_data(as, xfer);
1126 struct spi_transfer *xfer;
1142 * updated with the last xfer.
1160 xfer = as->current_transfer;
1161 atmel_spi_pump_pio_data(as, xfer);
1355 struct spi_transfer *xfer)
1370 if (bits != xfer->bits_per_word - 8) {
1382 if (atmel_spi_dma_map_xfer(as, xfer) < 0)
1386 atmel_spi_set_xfer_speed(as, spi, xfer);
1389 as->current_transfer = xfer;
1390 as->current_remaining_bytes = xfer->len;
1396 atmel_spi_pdc_next_xfer(host, xfer);
1398 } else if (atmel_spi_use_dma(as, xfer)) {
1401 xfer, &len);
1414 atmel_spi_next_xfer_pio(host, xfer);
1418 dma_timeout = msecs_to_jiffies(spi_controller_xfer_timeout(host, xfer));
1455 } else if (atmel_spi_use_dma(as, xfer)) {
1462 atmel_spi_dma_unmap_xfer(host, xfer);