Lines Matching refs:xfer

489 static inline bool atmel_spi_is_vmalloc_xfer(struct spi_transfer *xfer)
491 return is_vmalloc_addr(xfer->tx_buf) || is_vmalloc_addr(xfer->rx_buf);
495 struct spi_transfer *xfer)
497 return as->use_dma && xfer->len >= DMA_MIN_BYTES;
502 struct spi_transfer *xfer)
507 return atmel_spi_use_dma(as, xfer) &&
508 !atmel_spi_is_vmalloc_xfer(xfer);
510 return atmel_spi_use_dma(as, xfer);
653 struct spi_transfer *xfer)
656 unsigned long xfer_pos = xfer->len - as->current_remaining_bytes;
667 if (xfer->bits_per_word > 8)
668 spi_writel(as, TDR, *(u16 *)(xfer->tx_buf + xfer_pos));
670 spi_writel(as, TDR, *(u8 *)(xfer->tx_buf + xfer_pos));
673 " start pio xfer %p: len %u tx %p rx %p bitpw %d\n",
674 xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
675 xfer->bits_per_word);
685 struct spi_transfer *xfer)
689 u32 offset = xfer->len - as->current_remaining_bytes;
690 const u16 *words = (const u16 *)((u8 *)xfer->tx_buf + offset);
691 const u8 *bytes = (const u8 *)((u8 *)xfer->tx_buf + offset);
698 current_remaining_data = ((xfer->bits_per_word > 8) ?
717 if (xfer->bits_per_word > 8) {
730 if (xfer->bits_per_word > 8)
740 " start fifo xfer %p: len %u tx %p rx %p bitpw %d\n",
741 xfer, xfer->len, xfer->tx_buf, xfer->rx_buf,
742 xfer->bits_per_word);
755 struct spi_transfer *xfer)
760 atmel_spi_next_xfer_fifo(host, xfer);
762 atmel_spi_next_xfer_single(host, xfer);
769 struct spi_transfer *xfer,
786 *plen = xfer->len;
788 if (atmel_spi_dma_slave_config(as, xfer->bits_per_word))
792 if (atmel_spi_is_vmalloc_xfer(xfer) &&
796 xfer->len,
802 xfer->rx_sg.sgl,
803 xfer->rx_sg.nents,
811 if (atmel_spi_is_vmalloc_xfer(xfer) &&
813 memcpy(as->addr_tx_bbuf, xfer->tx_buf, xfer->len);
816 xfer->len, DMA_MEM_TO_DEV,
821 xfer->tx_sg.sgl,
822 xfer->tx_sg.nents,
831 " start dma xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
832 xfer, xfer->len, xfer->tx_buf, (unsigned long long)xfer->tx_dma,
833 xfer->rx_buf, (unsigned long long)xfer->rx_dma);
862 struct spi_transfer *xfer,
867 *rx_dma = xfer->rx_dma + xfer->len - *plen;
868 *tx_dma = xfer->tx_dma + xfer->len - *plen;
875 struct spi_transfer *xfer)
895 scbr = DIV_ROUND_UP(bus_hz, xfer->speed_hz);
904 xfer->speed_hz, scbr, bus_hz/255);
910 xfer->speed_hz, scbr, bus_hz);
916 xfer->effective_speed_hz = bus_hz / scbr;
926 struct spi_transfer *xfer)
935 atmel_spi_next_xfer_data(host, xfer, &tx_dma, &rx_dma, &len);
941 if (xfer->bits_per_word > 8)
947 " start xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
948 xfer, xfer->len, xfer->tx_buf,
949 (unsigned long long)xfer->tx_dma, xfer->rx_buf,
950 (unsigned long long)xfer->rx_dma);
954 atmel_spi_next_xfer_data(host, xfer, &tx_dma, &rx_dma, &len);
960 if (xfer->bits_per_word > 8)
966 " next xfer %p: len %u tx %p/%08llx rx %p/%08llx\n",
967 xfer, xfer->len, xfer->tx_buf,
968 (unsigned long long)xfer->tx_dma, xfer->rx_buf,
969 (unsigned long long)xfer->rx_dma);
994 atmel_spi_dma_map_xfer(struct atmel_spi *as, struct spi_transfer *xfer)
998 xfer->tx_dma = xfer->rx_dma = INVALID_DMA_ADDRESS;
999 if (xfer->tx_buf) {
1002 void *nonconst_tx = (void *)xfer->tx_buf;
1004 xfer->tx_dma = dma_map_single(dev,
1005 nonconst_tx, xfer->len,
1007 if (dma_mapping_error(dev, xfer->tx_dma))
1010 if (xfer->rx_buf) {
1011 xfer->rx_dma = dma_map_single(dev,
1012 xfer->rx_buf, xfer->len,
1014 if (dma_mapping_error(dev, xfer->rx_dma)) {
1015 if (xfer->tx_buf)
1017 xfer->tx_dma, xfer->len,
1026 struct spi_transfer *xfer)
1028 if (xfer->tx_dma != INVALID_DMA_ADDRESS)
1029 dma_unmap_single(host->dev.parent, xfer->tx_dma,
1030 xfer->len, DMA_TO_DEVICE);
1031 if (xfer->rx_dma != INVALID_DMA_ADDRESS)
1032 dma_unmap_single(host->dev.parent, xfer->rx_dma,
1033 xfer->len, DMA_FROM_DEVICE);
1042 atmel_spi_pump_single_data(struct atmel_spi *as, struct spi_transfer *xfer)
1046 unsigned long xfer_pos = xfer->len - as->current_remaining_bytes;
1048 if (xfer->bits_per_word > 8) {
1049 rxp16 = (u16 *)(((u8 *)xfer->rx_buf) + xfer_pos);
1052 rxp = ((u8 *)xfer->rx_buf) + xfer_pos;
1055 if (xfer->bits_per_word > 8) {
1066 atmel_spi_pump_fifo_data(struct atmel_spi *as, struct spi_transfer *xfer)
1070 u32 offset = xfer->len - as->current_remaining_bytes;
1071 u16 *words = (u16 *)((u8 *)xfer->rx_buf + offset);
1072 u8 *bytes = (u8 *)((u8 *)xfer->rx_buf + offset);
1076 num_bytes = ((xfer->bits_per_word > 8) ?
1086 if (xfer->bits_per_word > 8)
1092 if (xfer->bits_per_word > 8)
1106 atmel_spi_pump_pio_data(struct atmel_spi *as, struct spi_transfer *xfer)
1109 atmel_spi_pump_fifo_data(as, xfer);
1111 atmel_spi_pump_single_data(as, xfer);
1123 struct spi_transfer *xfer;
1139 * updated with the last xfer.
1157 xfer = as->current_transfer;
1158 atmel_spi_pump_pio_data(as, xfer);
1352 struct spi_transfer *xfer)
1367 if (bits != xfer->bits_per_word - 8) {
1379 if (atmel_spi_dma_map_xfer(as, xfer) < 0)
1383 atmel_spi_set_xfer_speed(as, spi, xfer);
1386 as->current_transfer = xfer;
1387 as->current_remaining_bytes = xfer->len;
1393 atmel_spi_pdc_next_xfer(host, xfer);
1395 } else if (atmel_spi_use_dma(as, xfer)) {
1398 xfer, &len);
1411 atmel_spi_next_xfer_pio(host, xfer);
1415 dma_timeout = msecs_to_jiffies(spi_controller_xfer_timeout(host, xfer));
1452 } else if (atmel_spi_use_dma(as, xfer)) {
1459 atmel_spi_dma_unmap_xfer(host, xfer);