Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'spi-5.1' into spi-linus

+244 -153
+4 -2
drivers/spi/atmel-quadspi.c
··· 570 570 571 571 static int __maybe_unused atmel_qspi_suspend(struct device *dev) 572 572 { 573 - struct atmel_qspi *aq = dev_get_drvdata(dev); 573 + struct spi_controller *ctrl = dev_get_drvdata(dev); 574 + struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); 574 575 575 576 clk_disable_unprepare(aq->qspick); 576 577 clk_disable_unprepare(aq->pclk); ··· 581 580 582 581 static int __maybe_unused atmel_qspi_resume(struct device *dev) 583 582 { 584 - struct atmel_qspi *aq = dev_get_drvdata(dev); 583 + struct spi_controller *ctrl = dev_get_drvdata(dev); 584 + struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); 585 585 586 586 clk_prepare_enable(aq->pclk); 587 587 clk_prepare_enable(aq->qspick);
+2 -2
drivers/spi/spi-fsl-lpspi.c
··· 62 62 #define CFGR1_PCSPOL BIT(8) 63 63 #define CFGR1_NOSTALL BIT(3) 64 64 #define CFGR1_MASTER BIT(0) 65 - #define FSR_RXCOUNT (BIT(16)|BIT(17)|BIT(18)) 65 + #define FSR_TXCOUNT (0xFF) 66 66 #define RSR_RXEMPTY BIT(1) 67 67 #define TCR_CPOL BIT(31) 68 68 #define TCR_CPHA BIT(30) ··· 452 452 } 453 453 454 454 if (temp_SR & SR_MBF || 455 - readl(fsl_lpspi->base + IMX7ULP_FSR) & FSR_RXCOUNT) { 455 + readl(fsl_lpspi->base + IMX7ULP_FSR) & FSR_TXCOUNT) { 456 456 writel(SR_FCF, fsl_lpspi->base + IMX7ULP_SR); 457 457 fsl_lpspi_intctrl(fsl_lpspi, IER_FCIE); 458 458 return IRQ_HANDLED;
-1
drivers/spi/spi-gpio.c
··· 35 35 * platform_device->driver_data ... points to spi_gpio 36 36 * 37 37 * spi->controller_state ... reserved for bitbang framework code 38 - * spi->controller_data ... holds chipselect GPIO 39 38 * 40 39 * spi->master->dev.driver_data ... points to spi_gpio->bitbang 41 40 */
+1 -1
drivers/spi/spi-imx.c
··· 1494 1494 1495 1495 /* flush rxfifo before transfer */ 1496 1496 while (spi_imx->devtype_data->rx_available(spi_imx)) 1497 - spi_imx->rx(spi_imx); 1497 + readl(spi_imx->base + MXC_CSPIRXDATA); 1498 1498 1499 1499 if (spi_imx->slave_mode) 1500 1500 return spi_imx_pio_transfer_slave(spi, transfer);
+1 -1
drivers/spi/spi-pic32.c
··· 559 559 dev_err(&spi->dev, "wait error/timedout\n"); 560 560 if (dma_issued) { 561 561 dmaengine_terminate_all(master->dma_rx); 562 - dmaengine_terminate_all(master->dma_rx); 562 + dmaengine_terminate_all(master->dma_tx); 563 563 } 564 564 ret = -ETIMEDOUT; 565 565 } else {
+6 -2
drivers/spi/spi-pxa2xx.c
··· 884 884 885 885 rate = min_t(int, ssp_clk, rate); 886 886 887 + /* 888 + * Calculate the divisor for the SCR (Serial Clock Rate), avoiding 889 + * that the SSP transmission rate can be greater than the device rate 890 + */ 887 891 if (ssp->type == PXA25x_SSP || ssp->type == CE4100_SSP) 888 - return (ssp_clk / (2 * rate) - 1) & 0xff; 892 + return (DIV_ROUND_UP(ssp_clk, 2 * rate) - 1) & 0xff; 889 893 else 890 - return (ssp_clk / rate - 1) & 0xfff; 894 + return (DIV_ROUND_UP(ssp_clk, rate) - 1) & 0xfff; 891 895 } 892 896 893 897 static unsigned int pxa2xx_ssp_get_clk_div(struct driver_data *drv_data,
+51 -70
drivers/spi/spi-rspi.c
··· 271 271 /* Sets parity, interrupt mask */ 272 272 rspi_write8(rspi, 0x00, RSPI_SPCR2); 273 273 274 - /* Sets SPCMD */ 274 + /* Resets sequencer */ 275 + rspi_write8(rspi, 0, RSPI_SPSCR); 275 276 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); 276 277 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 277 278 ··· 316 315 rspi_write8(rspi, 0x00, RSPI_SSLND); 317 316 rspi_write8(rspi, 0x00, RSPI_SPND); 318 317 319 - /* Sets SPCMD */ 318 + /* Resets sequencer */ 319 + rspi_write8(rspi, 0, RSPI_SPSCR); 320 320 rspi->spcmd |= SPCMD_SPB_8_TO_16(access_size); 321 321 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 322 322 ··· 368 366 /* Sets buffer to allow normal operation */ 369 367 rspi_write8(rspi, 0x00, QSPI_SPBFCR); 370 368 371 - /* Sets SPCMD */ 369 + /* Resets sequencer */ 370 + rspi_write8(rspi, 0, RSPI_SPSCR); 372 371 rspi_write16(rspi, rspi->spcmd, RSPI_SPCMD0); 373 372 374 373 /* Sets RSPI mode */ ··· 739 736 while (len > 0) { 740 737 n = qspi_set_send_trigger(rspi, len); 741 738 qspi_set_receive_trigger(rspi, len); 742 - if (n == QSPI_BUFFER_SIZE) { 743 - ret = rspi_wait_for_tx_empty(rspi); 744 - if (ret < 0) { 745 - dev_err(&rspi->ctlr->dev, "transmit timeout\n"); 746 - return ret; 747 - } 748 - for (i = 0; i < n; i++) 749 - rspi_write_data(rspi, *tx++); 750 - 751 - ret = rspi_wait_for_rx_full(rspi); 752 - if (ret < 0) { 753 - dev_err(&rspi->ctlr->dev, "receive timeout\n"); 754 - return ret; 755 - } 756 - for (i = 0; i < n; i++) 757 - *rx++ = rspi_read_data(rspi); 758 - } else { 759 - ret = rspi_pio_transfer(rspi, tx, rx, n); 760 - if (ret < 0) 761 - return ret; 739 + ret = rspi_wait_for_tx_empty(rspi); 740 + if (ret < 0) { 741 + dev_err(&rspi->ctlr->dev, "transmit timeout\n"); 742 + return ret; 762 743 } 744 + for (i = 0; i < n; i++) 745 + rspi_write_data(rspi, *tx++); 746 + 747 + ret = rspi_wait_for_rx_full(rspi); 748 + if (ret < 0) { 749 + dev_err(&rspi->ctlr->dev, "receive timeout\n"); 750 + return ret; 751 + } 752 + for (i = 0; i < n; i++) 753 + *rx++ = rspi_read_data(rspi); 754 + 763 755 len -= n; 764 756 } 765 757 ··· 791 793 792 794 while (n > 0) { 793 795 len = qspi_set_send_trigger(rspi, n); 794 - if (len == QSPI_BUFFER_SIZE) { 795 - ret = rspi_wait_for_tx_empty(rspi); 796 - if (ret < 0) { 797 - dev_err(&rspi->ctlr->dev, "transmit timeout\n"); 798 - return ret; 799 - } 800 - for (i = 0; i < len; i++) 801 - rspi_write_data(rspi, *tx++); 802 - } else { 803 - ret = rspi_pio_transfer(rspi, tx, NULL, len); 804 - if (ret < 0) 805 - return ret; 796 + ret = rspi_wait_for_tx_empty(rspi); 797 + if (ret < 0) { 798 + dev_err(&rspi->ctlr->dev, "transmit timeout\n"); 799 + return ret; 806 800 } 801 + for (i = 0; i < len; i++) 802 + rspi_write_data(rspi, *tx++); 803 + 807 804 n -= len; 808 805 } 809 806 ··· 823 830 824 831 while (n > 0) { 825 832 len = qspi_set_receive_trigger(rspi, n); 826 - if (len == QSPI_BUFFER_SIZE) { 827 - ret = rspi_wait_for_rx_full(rspi); 828 - if (ret < 0) { 829 - dev_err(&rspi->ctlr->dev, "receive timeout\n"); 830 - return ret; 831 - } 832 - for (i = 0; i < len; i++) 833 - *rx++ = rspi_read_data(rspi); 834 - } else { 835 - ret = rspi_pio_transfer(rspi, NULL, rx, len); 836 - if (ret < 0) 837 - return ret; 833 + ret = rspi_wait_for_rx_full(rspi); 834 + if (ret < 0) { 835 + dev_err(&rspi->ctlr->dev, "receive timeout\n"); 836 + return ret; 838 837 } 838 + for (i = 0; i < len; i++) 839 + *rx++ = rspi_read_data(rspi); 840 + 839 841 n -= len; 840 842 } 841 843 ··· 854 866 /* Single SPI Transfer */ 855 867 return qspi_transfer_out_in(rspi, xfer); 856 868 } 857 - } 858 - 859 - static int rspi_setup(struct spi_device *spi) 860 - { 861 - struct rspi_data *rspi = spi_controller_get_devdata(spi->controller); 862 - 863 - rspi->max_speed_hz = spi->max_speed_hz; 864 - 865 - rspi->spcmd = SPCMD_SSLKP; 866 - if (spi->mode & SPI_CPOL) 867 - rspi->spcmd |= SPCMD_CPOL; 868 - if (spi->mode & SPI_CPHA) 869 - rspi->spcmd |= SPCMD_CPHA; 870 - 871 - /* CMOS output mode and MOSI signal from previous transfer */ 872 - rspi->sppcr = 0; 873 - if (spi->mode & SPI_LOOP) 874 - rspi->sppcr |= SPPCR_SPLP; 875 - 876 - set_config_register(rspi, 8); 877 - 878 - return 0; 879 869 } 880 870 881 871 static u16 qspi_transfer_mode(const struct spi_transfer *xfer) ··· 925 959 struct spi_message *msg) 926 960 { 927 961 struct rspi_data *rspi = spi_controller_get_devdata(ctlr); 962 + struct spi_device *spi = msg->spi; 928 963 int ret; 964 + 965 + rspi->max_speed_hz = spi->max_speed_hz; 966 + 967 + rspi->spcmd = SPCMD_SSLKP; 968 + if (spi->mode & SPI_CPOL) 969 + rspi->spcmd |= SPCMD_CPOL; 970 + if (spi->mode & SPI_CPHA) 971 + rspi->spcmd |= SPCMD_CPHA; 972 + 973 + /* CMOS output mode and MOSI signal from previous transfer */ 974 + rspi->sppcr = 0; 975 + if (spi->mode & SPI_LOOP) 976 + rspi->sppcr |= SPPCR_SPLP; 977 + 978 + set_config_register(rspi, 8); 929 979 930 980 if (msg->spi->mode & 931 981 (SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)) { ··· 1249 1267 init_waitqueue_head(&rspi->wait); 1250 1268 1251 1269 ctlr->bus_num = pdev->id; 1252 - ctlr->setup = rspi_setup; 1253 1270 ctlr->auto_runtime_pm = true; 1254 1271 ctlr->transfer_one = ops->transfer_one; 1255 1272 ctlr->prepare_message = rspi_prepare_message;
+1 -3
drivers/spi/spi-stm32-qspi.c
··· 76 76 #define QSPI_PSMAR 0x28 77 77 #define QSPI_PIR 0x2c 78 78 #define QSPI_LPTR 0x30 79 - #define LPTR_DFT_TIMEOUT 0x10 80 79 81 80 #define STM32_QSPI_MAX_MMAP_SZ SZ_256M 82 81 #define STM32_QSPI_MAX_NORCHIP 2 ··· 371 372 flash->presc = presc; 372 373 373 374 mutex_lock(&qspi->lock); 374 - writel_relaxed(LPTR_DFT_TIMEOUT, qspi->io_base + QSPI_LPTR); 375 - cr = FIELD_PREP(CR_FTHRES_MASK, 3) | CR_TCEN | CR_SSHIFT | CR_EN; 375 + cr = FIELD_PREP(CR_FTHRES_MASK, 3) | CR_SSHIFT | CR_EN; 376 376 writel_relaxed(cr, qspi->io_base + QSPI_CR); 377 377 378 378 /* set dcr fsize to max address */
+3 -2
drivers/spi/spi-stm32.c
··· 1839 1839 1840 1840 spi->irq = platform_get_irq(pdev, 0); 1841 1841 if (spi->irq <= 0) { 1842 - dev_err(&pdev->dev, "no irq: %d\n", spi->irq); 1843 - ret = -ENOENT; 1842 + ret = spi->irq; 1843 + if (ret != -EPROBE_DEFER) 1844 + dev_err(&pdev->dev, "failed to get irq: %d\n", ret); 1844 1845 goto err_master_put; 1845 1846 } 1846 1847 ret = devm_request_threaded_irq(&pdev->dev, spi->irq,
+149 -64
drivers/spi/spi-tegra114.c
··· 307 307 x |= (u32)(*tx_buf++) << (i * 8); 308 308 tegra_spi_writel(tspi, x, SPI_TX_FIFO); 309 309 } 310 + 311 + tspi->cur_tx_pos += written_words * tspi->bytes_per_word; 310 312 } else { 313 + unsigned int write_bytes; 311 314 max_n_32bit = min(tspi->curr_dma_words, tx_empty_count); 312 315 written_words = max_n_32bit; 313 316 nbytes = written_words * tspi->bytes_per_word; 317 + if (nbytes > t->len - tspi->cur_pos) 318 + nbytes = t->len - tspi->cur_pos; 319 + write_bytes = nbytes; 314 320 for (count = 0; count < max_n_32bit; count++) { 315 321 u32 x = 0; 316 322 ··· 325 319 x |= (u32)(*tx_buf++) << (i * 8); 326 320 tegra_spi_writel(tspi, x, SPI_TX_FIFO); 327 321 } 322 + 323 + tspi->cur_tx_pos += write_bytes; 328 324 } 329 - tspi->cur_tx_pos += written_words * tspi->bytes_per_word; 325 + 330 326 return written_words; 331 327 } 332 328 ··· 352 344 for (i = 0; len && (i < 4); i++, len--) 353 345 *rx_buf++ = (x >> i*8) & 0xFF; 354 346 } 355 - tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word; 356 347 read_words += tspi->curr_dma_words; 348 + tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word; 357 349 } else { 358 350 u32 rx_mask = ((u32)1 << t->bits_per_word) - 1; 351 + u8 bytes_per_word = tspi->bytes_per_word; 352 + unsigned int read_bytes; 359 353 354 + len = rx_full_count * bytes_per_word; 355 + if (len > t->len - tspi->cur_pos) 356 + len = t->len - tspi->cur_pos; 357 + read_bytes = len; 360 358 for (count = 0; count < rx_full_count; count++) { 361 359 u32 x = tegra_spi_readl(tspi, SPI_RX_FIFO) & rx_mask; 362 360 363 - for (i = 0; (i < tspi->bytes_per_word); i++) 361 + for (i = 0; len && (i < bytes_per_word); i++, len--) 364 362 *rx_buf++ = (x >> (i*8)) & 0xFF; 365 363 } 366 - tspi->cur_rx_pos += rx_full_count * tspi->bytes_per_word; 367 364 read_words += rx_full_count; 365 + tspi->cur_rx_pos += read_bytes; 368 366 } 367 + 369 368 return read_words; 370 369 } 371 370 ··· 387 372 unsigned len = tspi->curr_dma_words * tspi->bytes_per_word; 388 373 389 374 memcpy(tspi->tx_dma_buf, t->tx_buf + tspi->cur_pos, len); 375 + tspi->cur_tx_pos += tspi->curr_dma_words * tspi->bytes_per_word; 390 376 } else { 391 377 unsigned int i; 392 378 unsigned int count; 393 379 u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos; 394 380 unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word; 381 + unsigned int write_bytes; 395 382 383 + if (consume > t->len - tspi->cur_pos) 384 + consume = t->len - tspi->cur_pos; 385 + write_bytes = consume; 396 386 for (count = 0; count < tspi->curr_dma_words; count++) { 397 387 u32 x = 0; 398 388 ··· 406 386 x |= (u32)(*tx_buf++) << (i * 8); 407 387 tspi->tx_dma_buf[count] = x; 408 388 } 389 + 390 + tspi->cur_tx_pos += write_bytes; 409 391 } 410 - tspi->cur_tx_pos += tspi->curr_dma_words * tspi->bytes_per_word; 411 392 412 393 /* Make the dma buffer to read by dma */ 413 394 dma_sync_single_for_device(tspi->dev, tspi->tx_dma_phys, ··· 426 405 unsigned len = tspi->curr_dma_words * tspi->bytes_per_word; 427 406 428 407 memcpy(t->rx_buf + tspi->cur_rx_pos, tspi->rx_dma_buf, len); 408 + tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word; 429 409 } else { 430 410 unsigned int i; 431 411 unsigned int count; 432 412 unsigned char *rx_buf = t->rx_buf + tspi->cur_rx_pos; 433 413 u32 rx_mask = ((u32)1 << t->bits_per_word) - 1; 414 + unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word; 415 + unsigned int read_bytes; 434 416 417 + if (consume > t->len - tspi->cur_pos) 418 + consume = t->len - tspi->cur_pos; 419 + read_bytes = consume; 435 420 for (count = 0; count < tspi->curr_dma_words; count++) { 436 421 u32 x = tspi->rx_dma_buf[count] & rx_mask; 437 422 438 - for (i = 0; (i < tspi->bytes_per_word); i++) 423 + for (i = 0; consume && (i < tspi->bytes_per_word); 424 + i++, consume--) 439 425 *rx_buf++ = (x >> (i*8)) & 0xFF; 440 426 } 427 + 428 + tspi->cur_rx_pos += read_bytes; 441 429 } 442 - tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word; 443 430 444 431 /* Make the dma buffer to read by dma */ 445 432 dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys, ··· 499 470 return 0; 500 471 } 501 472 473 + static int tegra_spi_flush_fifos(struct tegra_spi_data *tspi) 474 + { 475 + unsigned long timeout = jiffies + HZ; 476 + u32 status; 477 + 478 + status = tegra_spi_readl(tspi, SPI_FIFO_STATUS); 479 + if ((status & SPI_FIFO_EMPTY) != SPI_FIFO_EMPTY) { 480 + status |= SPI_RX_FIFO_FLUSH | SPI_TX_FIFO_FLUSH; 481 + tegra_spi_writel(tspi, status, SPI_FIFO_STATUS); 482 + while ((status & SPI_FIFO_EMPTY) != SPI_FIFO_EMPTY) { 483 + status = tegra_spi_readl(tspi, SPI_FIFO_STATUS); 484 + if (time_after(jiffies, timeout)) { 485 + dev_err(tspi->dev, 486 + "timeout waiting for fifo flush\n"); 487 + return -EIO; 488 + } 489 + 490 + udelay(1); 491 + } 492 + } 493 + 494 + return 0; 495 + } 496 + 502 497 static int tegra_spi_start_dma_based_transfer( 503 498 struct tegra_spi_data *tspi, struct spi_transfer *t) 504 499 { 505 500 u32 val; 506 501 unsigned int len; 507 502 int ret = 0; 508 - u32 status; 509 - 510 - /* Make sure that Rx and Tx fifo are empty */ 511 - status = tegra_spi_readl(tspi, SPI_FIFO_STATUS); 512 - if ((status & SPI_FIFO_EMPTY) != SPI_FIFO_EMPTY) { 513 - dev_err(tspi->dev, "Rx/Tx fifo are not empty status 0x%08x\n", 514 - (unsigned)status); 515 - return -EIO; 516 - } 503 + u8 dma_burst; 504 + struct dma_slave_config dma_sconfig = {0}; 517 505 518 506 val = SPI_DMA_BLK_SET(tspi->curr_dma_words - 1); 519 507 tegra_spi_writel(tspi, val, SPI_DMA_BLK); ··· 542 496 len = tspi->curr_dma_words * 4; 543 497 544 498 /* Set attention level based on length of transfer */ 545 - if (len & 0xF) 499 + if (len & 0xF) { 546 500 val |= SPI_TX_TRIG_1 | SPI_RX_TRIG_1; 547 - else if (((len) >> 4) & 0x1) 501 + dma_burst = 1; 502 + } else if (((len) >> 4) & 0x1) { 548 503 val |= SPI_TX_TRIG_4 | SPI_RX_TRIG_4; 549 - else 504 + dma_burst = 4; 505 + } else { 550 506 val |= SPI_TX_TRIG_8 | SPI_RX_TRIG_8; 507 + dma_burst = 8; 508 + } 551 509 552 510 if (tspi->cur_direction & DATA_DIR_TX) 553 511 val |= SPI_IE_TX; ··· 562 512 tegra_spi_writel(tspi, val, SPI_DMA_CTL); 563 513 tspi->dma_control_reg = val; 564 514 515 + dma_sconfig.device_fc = true; 565 516 if (tspi->cur_direction & DATA_DIR_TX) { 517 + dma_sconfig.dst_addr = tspi->phys + SPI_TX_FIFO; 518 + dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 519 + dma_sconfig.dst_maxburst = dma_burst; 520 + ret = dmaengine_slave_config(tspi->tx_dma_chan, &dma_sconfig); 521 + if (ret < 0) { 522 + dev_err(tspi->dev, 523 + "DMA slave config failed: %d\n", ret); 524 + return ret; 525 + } 526 + 566 527 tegra_spi_copy_client_txbuf_to_spi_txbuf(tspi, t); 567 528 ret = tegra_spi_start_tx_dma(tspi, len); 568 529 if (ret < 0) { ··· 584 523 } 585 524 586 525 if (tspi->cur_direction & DATA_DIR_RX) { 526 + dma_sconfig.src_addr = tspi->phys + SPI_RX_FIFO; 527 + dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 528 + dma_sconfig.src_maxburst = dma_burst; 529 + ret = dmaengine_slave_config(tspi->rx_dma_chan, &dma_sconfig); 530 + if (ret < 0) { 531 + dev_err(tspi->dev, 532 + "DMA slave config failed: %d\n", ret); 533 + return ret; 534 + } 535 + 587 536 /* Make the dma buffer to read by dma */ 588 537 dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys, 589 538 tspi->dma_buf_size, DMA_FROM_DEVICE); ··· 641 570 642 571 tspi->is_curr_dma_xfer = false; 643 572 644 - val |= SPI_DMA_EN; 645 - tegra_spi_writel(tspi, val, SPI_DMA_CTL); 573 + val = tspi->command1_reg; 574 + val |= SPI_PIO; 575 + tegra_spi_writel(tspi, val, SPI_COMMAND1); 646 576 return 0; 647 577 } 648 578 ··· 654 582 u32 *dma_buf; 655 583 dma_addr_t dma_phys; 656 584 int ret; 657 - struct dma_slave_config dma_sconfig; 658 585 659 586 dma_chan = dma_request_slave_channel_reason(tspi->dev, 660 587 dma_to_memory ? "rx" : "tx"); ··· 674 603 } 675 604 676 605 if (dma_to_memory) { 677 - dma_sconfig.src_addr = tspi->phys + SPI_RX_FIFO; 678 - dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 679 - dma_sconfig.src_maxburst = 0; 680 - } else { 681 - dma_sconfig.dst_addr = tspi->phys + SPI_TX_FIFO; 682 - dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 683 - dma_sconfig.dst_maxburst = 0; 684 - } 685 - 686 - ret = dmaengine_slave_config(dma_chan, &dma_sconfig); 687 - if (ret) 688 - goto scrub; 689 - if (dma_to_memory) { 690 606 tspi->rx_dma_chan = dma_chan; 691 607 tspi->rx_dma_buf = dma_buf; 692 608 tspi->rx_dma_phys = dma_phys; ··· 683 625 tspi->tx_dma_phys = dma_phys; 684 626 } 685 627 return 0; 686 - 687 - scrub: 688 - dma_free_coherent(tspi->dev, tspi->dma_buf_size, dma_buf, dma_phys); 689 - dma_release_channel(dma_chan); 690 - return ret; 691 628 } 692 629 693 630 static void tegra_spi_deinit_dma_param(struct tegra_spi_data *tspi, ··· 783 730 784 731 if (tspi->is_packed) 785 732 command1 |= SPI_PACKED; 733 + else 734 + command1 &= ~SPI_PACKED; 786 735 787 736 command1 &= ~(SPI_CS_SEL_MASK | SPI_TX_EN | SPI_RX_EN); 788 737 tspi->cur_direction = 0; ··· 803 748 dev_dbg(tspi->dev, "The def 0x%x and written 0x%x\n", 804 749 tspi->def_command1_reg, (unsigned)command1); 805 750 751 + ret = tegra_spi_flush_fifos(tspi); 752 + if (ret < 0) 753 + return ret; 806 754 if (total_fifo_words > SPI_FIFO_DEPTH) 807 755 ret = tegra_spi_start_dma_based_transfer(tspi, t); 808 756 else ··· 857 799 udelay(delay % 1000); 858 800 } 859 801 802 + static void tegra_spi_transfer_end(struct spi_device *spi) 803 + { 804 + struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master); 805 + int cs_val = (spi->mode & SPI_CS_HIGH) ? 0 : 1; 806 + 807 + if (cs_val) 808 + tspi->command1_reg |= SPI_CS_SW_VAL; 809 + else 810 + tspi->command1_reg &= ~SPI_CS_SW_VAL; 811 + tegra_spi_writel(tspi, tspi->command1_reg, SPI_COMMAND1); 812 + tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1); 813 + } 814 + 860 815 static int tegra_spi_transfer_one_message(struct spi_master *master, 861 816 struct spi_message *msg) 862 817 { ··· 909 838 if (WARN_ON(ret == 0)) { 910 839 dev_err(tspi->dev, 911 840 "spi transfer timeout, err %d\n", ret); 841 + if (tspi->is_curr_dma_xfer && 842 + (tspi->cur_direction & DATA_DIR_TX)) 843 + dmaengine_terminate_all(tspi->tx_dma_chan); 844 + if (tspi->is_curr_dma_xfer && 845 + (tspi->cur_direction & DATA_DIR_RX)) 846 + dmaengine_terminate_all(tspi->rx_dma_chan); 912 847 ret = -EIO; 848 + tegra_spi_flush_fifos(tspi); 849 + reset_control_assert(tspi->rst); 850 + udelay(2); 851 + reset_control_deassert(tspi->rst); 913 852 goto complete_xfer; 914 853 } 915 854 ··· 932 851 933 852 complete_xfer: 934 853 if (ret < 0 || skip) { 935 - tegra_spi_writel(tspi, tspi->def_command1_reg, 936 - SPI_COMMAND1); 854 + tegra_spi_transfer_end(spi); 937 855 tegra_spi_transfer_delay(xfer->delay_usecs); 938 856 goto exit; 939 857 } else if (list_is_last(&xfer->transfer_list, ··· 940 860 if (xfer->cs_change) 941 861 tspi->cs_control = spi; 942 862 else { 943 - tegra_spi_writel(tspi, tspi->def_command1_reg, 944 - SPI_COMMAND1); 863 + tegra_spi_transfer_end(spi); 945 864 tegra_spi_transfer_delay(xfer->delay_usecs); 946 865 } 947 866 } else if (xfer->cs_change) { 948 - tegra_spi_writel(tspi, tspi->def_command1_reg, 949 - SPI_COMMAND1); 867 + tegra_spi_transfer_end(spi); 950 868 tegra_spi_transfer_delay(xfer->delay_usecs); 951 869 } 952 870 ··· 967 889 tspi->status_reg); 968 890 dev_err(tspi->dev, "CpuXfer 0x%08x:0x%08x\n", 969 891 tspi->command1_reg, tspi->dma_control_reg); 892 + tegra_spi_flush_fifos(tspi); 893 + complete(&tspi->xfer_completion); 894 + spin_unlock_irqrestore(&tspi->lock, flags); 970 895 reset_control_assert(tspi->rst); 971 896 udelay(2); 972 897 reset_control_deassert(tspi->rst); 973 - complete(&tspi->xfer_completion); 974 - goto exit; 898 + return IRQ_HANDLED; 975 899 } 976 900 977 901 if (tspi->cur_direction & DATA_DIR_RX) ··· 1041 961 tspi->status_reg); 1042 962 dev_err(tspi->dev, "DmaXfer 0x%08x:0x%08x\n", 1043 963 tspi->command1_reg, tspi->dma_control_reg); 964 + tegra_spi_flush_fifos(tspi); 965 + complete(&tspi->xfer_completion); 966 + spin_unlock_irqrestore(&tspi->lock, flags); 1044 967 reset_control_assert(tspi->rst); 1045 968 udelay(2); 1046 969 reset_control_deassert(tspi->rst); 1047 - complete(&tspi->xfer_completion); 1048 - spin_unlock_irqrestore(&tspi->lock, flags); 1049 970 return IRQ_HANDLED; 1050 971 } 1051 972 ··· 1148 1067 1149 1068 spi_irq = platform_get_irq(pdev, 0); 1150 1069 tspi->irq = spi_irq; 1151 - ret = request_threaded_irq(tspi->irq, tegra_spi_isr, 1152 - tegra_spi_isr_thread, IRQF_ONESHOT, 1153 - dev_name(&pdev->dev), tspi); 1154 - if (ret < 0) { 1155 - dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n", 1156 - tspi->irq); 1157 - goto exit_free_master; 1158 - } 1159 1070 1160 1071 tspi->clk = devm_clk_get(&pdev->dev, "spi"); 1161 1072 if (IS_ERR(tspi->clk)) { 1162 1073 dev_err(&pdev->dev, "can not get clock\n"); 1163 1074 ret = PTR_ERR(tspi->clk); 1164 - goto exit_free_irq; 1075 + goto exit_free_master; 1165 1076 } 1166 1077 1167 1078 tspi->rst = devm_reset_control_get_exclusive(&pdev->dev, "spi"); 1168 1079 if (IS_ERR(tspi->rst)) { 1169 1080 dev_err(&pdev->dev, "can not get reset\n"); 1170 1081 ret = PTR_ERR(tspi->rst); 1171 - goto exit_free_irq; 1082 + goto exit_free_master; 1172 1083 } 1173 1084 1174 1085 tspi->max_buf_size = SPI_FIFO_DEPTH << 2; ··· 1168 1095 1169 1096 ret = tegra_spi_init_dma_param(tspi, true); 1170 1097 if (ret < 0) 1171 - goto exit_free_irq; 1098 + goto exit_free_master; 1172 1099 ret = tegra_spi_init_dma_param(tspi, false); 1173 1100 if (ret < 0) 1174 1101 goto exit_rx_dma_free; ··· 1190 1117 dev_err(&pdev->dev, "pm runtime get failed, e = %d\n", ret); 1191 1118 goto exit_pm_disable; 1192 1119 } 1120 + 1121 + reset_control_assert(tspi->rst); 1122 + udelay(2); 1123 + reset_control_deassert(tspi->rst); 1193 1124 tspi->def_command1_reg = SPI_M_S; 1194 1125 tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1); 1195 1126 pm_runtime_put(&pdev->dev); 1127 + ret = request_threaded_irq(tspi->irq, tegra_spi_isr, 1128 + tegra_spi_isr_thread, IRQF_ONESHOT, 1129 + dev_name(&pdev->dev), tspi); 1130 + if (ret < 0) { 1131 + dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n", 1132 + tspi->irq); 1133 + goto exit_pm_disable; 1134 + } 1196 1135 1197 1136 master->dev.of_node = pdev->dev.of_node; 1198 1137 ret = devm_spi_register_master(&pdev->dev, master); 1199 1138 if (ret < 0) { 1200 1139 dev_err(&pdev->dev, "can not register to master err %d\n", ret); 1201 - goto exit_pm_disable; 1140 + goto exit_free_irq; 1202 1141 } 1203 1142 return ret; 1204 1143 1144 + exit_free_irq: 1145 + free_irq(spi_irq, tspi); 1205 1146 exit_pm_disable: 1206 1147 pm_runtime_disable(&pdev->dev); 1207 1148 if (!pm_runtime_status_suspended(&pdev->dev)) ··· 1223 1136 tegra_spi_deinit_dma_param(tspi, false); 1224 1137 exit_rx_dma_free: 1225 1138 tegra_spi_deinit_dma_param(tspi, true); 1226 - exit_free_irq: 1227 - free_irq(spi_irq, tspi); 1228 1139 exit_free_master: 1229 1140 spi_master_put(master); 1230 1141 return ret;
+9 -3
drivers/spi/spi-tegra20-slink.c
··· 717 717 command2 = tspi->command2_reg; 718 718 command2 &= ~(SLINK_RXEN | SLINK_TXEN); 719 719 720 - tegra_slink_writel(tspi, command, SLINK_COMMAND); 721 - tspi->command_reg = command; 722 - 723 720 tspi->cur_direction = 0; 724 721 if (t->rx_buf) { 725 722 command2 |= SLINK_RXEN; ··· 726 729 command2 |= SLINK_TXEN; 727 730 tspi->cur_direction |= DATA_DIR_TX; 728 731 } 732 + 733 + /* 734 + * Writing to the command2 register bevore the command register prevents 735 + * a spike in chip_select line 0. This selects the chip_select line 736 + * before changing the chip_select value. 737 + */ 729 738 tegra_slink_writel(tspi, command2, SLINK_COMMAND2); 730 739 tspi->command2_reg = command2; 740 + 741 + tegra_slink_writel(tspi, command, SLINK_COMMAND); 742 + tspi->command_reg = command; 731 743 732 744 if (total_fifo_words > SLINK_FIFO_DEPTH) 733 745 ret = tegra_slink_start_dma_based_transfer(tspi, t);
+13 -2
drivers/spi/spi-topcliff-pch.c
··· 1299 1299 dma->rx_buf_virt, dma->rx_buf_dma); 1300 1300 } 1301 1301 1302 - static void pch_alloc_dma_buf(struct pch_spi_board_data *board_dat, 1302 + static int pch_alloc_dma_buf(struct pch_spi_board_data *board_dat, 1303 1303 struct pch_spi_data *data) 1304 1304 { 1305 1305 struct pch_spi_dma_ctrl *dma; 1306 + int ret; 1306 1307 1307 1308 dma = &data->dma; 1309 + ret = 0; 1308 1310 /* Get Consistent memory for Tx DMA */ 1309 1311 dma->tx_buf_virt = dma_alloc_coherent(&board_dat->pdev->dev, 1310 1312 PCH_BUF_SIZE, &dma->tx_buf_dma, GFP_KERNEL); 1313 + if (!dma->tx_buf_virt) 1314 + ret = -ENOMEM; 1315 + 1311 1316 /* Get Consistent memory for Rx DMA */ 1312 1317 dma->rx_buf_virt = dma_alloc_coherent(&board_dat->pdev->dev, 1313 1318 PCH_BUF_SIZE, &dma->rx_buf_dma, GFP_KERNEL); 1319 + if (!dma->rx_buf_virt) 1320 + ret = -ENOMEM; 1321 + 1322 + return ret; 1314 1323 } 1315 1324 1316 1325 static int pch_spi_pd_probe(struct platform_device *plat_dev) ··· 1396 1387 1397 1388 if (use_dma) { 1398 1389 dev_info(&plat_dev->dev, "Use DMA for data transfers\n"); 1399 - pch_alloc_dma_buf(board_dat, data); 1390 + ret = pch_alloc_dma_buf(board_dat, data); 1391 + if (ret) 1392 + goto err_spi_register_master; 1400 1393 } 1401 1394 1402 1395 ret = spi_register_master(master);
+4
drivers/spi/spi.c
··· 1039 1039 if (max_tx || max_rx) { 1040 1040 list_for_each_entry(xfer, &msg->transfers, 1041 1041 transfer_list) { 1042 + if (!xfer->len) 1043 + continue; 1042 1044 if (!xfer->tx_buf) 1043 1045 xfer->tx_buf = ctlr->dummy_tx; 1044 1046 if (!xfer->rx_buf) ··· 2197 2195 */ 2198 2196 cs[i] = devm_gpiod_get_index_optional(dev, "cs", i, 2199 2197 GPIOD_OUT_LOW); 2198 + if (IS_ERR(cs[i])) 2199 + return PTR_ERR(cs[i]); 2200 2200 2201 2201 if (cs[i]) { 2202 2202 /*