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

Merge remote-tracking branches 'spi/topic/qup', 'spi/topic/rockchip', 'spi/topic/rspi', 'spi/topic/s3c64xx' and 'spi/topic/sc18is602' into spi-next

+469 -47
+8
Documentation/devicetree/bindings/spi/qcom,spi-qup.txt
··· 33 33 nodes. If unspecified, a single SPI device without a chip 34 34 select can be used. 35 35 36 + - dmas: Two DMA channel specifiers following the convention outlined 37 + in bindings/dma/dma.txt 38 + - dma-names: Names for the dma channels, if present. There must be at 39 + least one channel named "tx" for transmit and named "rx" for 40 + receive. 36 41 37 42 SPI slave nodes must be children of the SPI master node and can contain 38 43 properties described in Documentation/devicetree/bindings/spi/spi-bus.txt ··· 55 50 56 51 clocks = <&gcc GCC_BLSP2_QUP2_SPI_APPS_CLK>, <&gcc GCC_BLSP2_AHB_CLK>; 57 52 clock-names = "core", "iface"; 53 + 54 + dmas = <&blsp1_bam 13>, <&blsp1_bam 12>; 55 + dma-names = "rx", "tx"; 58 56 59 57 pinctrl-names = "default"; 60 58 pinctrl-0 = <&spi8_default>;
+4
Documentation/devicetree/bindings/spi/spi-rockchip.txt
··· 24 24 - dmas: DMA specifiers for tx and rx dma. See the DMA client binding, 25 25 Documentation/devicetree/bindings/dma/dma.txt 26 26 - dma-names: DMA request names should include "tx" and "rx" if present. 27 + - rx-sample-delay-ns: nanoseconds to delay after the SCLK edge before sampling 28 + Rx data (may need to be fine tuned for high capacitance lines). 29 + No delay (0) by default. 27 30 28 31 29 32 Example: ··· 36 33 reg = <0xff110000 0x1000>; 37 34 dmas = <&pdma1 11>, <&pdma1 12>; 38 35 dma-names = "tx", "rx"; 36 + rx-sample-delay-ns = <10>; 39 37 #address-cells = <1>; 40 38 #size-cells = <0>; 41 39 interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+304 -32
drivers/spi/spi-qup.c
··· 22 22 #include <linux/platform_device.h> 23 23 #include <linux/pm_runtime.h> 24 24 #include <linux/spi/spi.h> 25 + #include <linux/dmaengine.h> 26 + #include <linux/dma-mapping.h> 25 27 26 28 #define QUP_CONFIG 0x0000 27 29 #define QUP_STATE 0x0004 ··· 118 116 119 117 #define SPI_NUM_CHIPSELECTS 4 120 118 119 + #define SPI_MAX_DMA_XFER (SZ_64K - 64) 120 + 121 121 /* high speed mode is when bus rate is greater then 26MHz */ 122 122 #define SPI_HS_MIN_RATE 26000000 123 123 #define SPI_MAX_RATE 50000000 ··· 144 140 struct completion done; 145 141 int error; 146 142 int w_size; /* bytes per SPI word */ 143 + int n_words; 147 144 int tx_bytes; 148 145 int rx_bytes; 149 146 int qup_v1; 147 + 148 + int use_dma; 149 + struct dma_slave_config rx_conf; 150 + struct dma_slave_config tx_conf; 150 151 }; 151 152 152 153 ··· 206 197 207 198 return 0; 208 199 } 209 - 210 200 211 201 static void spi_qup_fifo_read(struct spi_qup *controller, 212 202 struct spi_transfer *xfer) ··· 274 266 } 275 267 } 276 268 269 + static void spi_qup_dma_done(void *data) 270 + { 271 + struct spi_qup *qup = data; 272 + 273 + complete(&qup->done); 274 + } 275 + 276 + static int spi_qup_prep_sg(struct spi_master *master, struct spi_transfer *xfer, 277 + enum dma_transfer_direction dir, 278 + dma_async_tx_callback callback) 279 + { 280 + struct spi_qup *qup = spi_master_get_devdata(master); 281 + unsigned long flags = DMA_PREP_INTERRUPT | DMA_PREP_FENCE; 282 + struct dma_async_tx_descriptor *desc; 283 + struct scatterlist *sgl; 284 + struct dma_chan *chan; 285 + dma_cookie_t cookie; 286 + unsigned int nents; 287 + 288 + if (dir == DMA_MEM_TO_DEV) { 289 + chan = master->dma_tx; 290 + nents = xfer->tx_sg.nents; 291 + sgl = xfer->tx_sg.sgl; 292 + } else { 293 + chan = master->dma_rx; 294 + nents = xfer->rx_sg.nents; 295 + sgl = xfer->rx_sg.sgl; 296 + } 297 + 298 + desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags); 299 + if (!desc) 300 + return -EINVAL; 301 + 302 + desc->callback = callback; 303 + desc->callback_param = qup; 304 + 305 + cookie = dmaengine_submit(desc); 306 + 307 + return dma_submit_error(cookie); 308 + } 309 + 310 + static void spi_qup_dma_terminate(struct spi_master *master, 311 + struct spi_transfer *xfer) 312 + { 313 + if (xfer->tx_buf) 314 + dmaengine_terminate_all(master->dma_tx); 315 + if (xfer->rx_buf) 316 + dmaengine_terminate_all(master->dma_rx); 317 + } 318 + 319 + static int spi_qup_do_dma(struct spi_master *master, struct spi_transfer *xfer) 320 + { 321 + dma_async_tx_callback rx_done = NULL, tx_done = NULL; 322 + int ret; 323 + 324 + if (xfer->rx_buf) 325 + rx_done = spi_qup_dma_done; 326 + else if (xfer->tx_buf) 327 + tx_done = spi_qup_dma_done; 328 + 329 + if (xfer->rx_buf) { 330 + ret = spi_qup_prep_sg(master, xfer, DMA_DEV_TO_MEM, rx_done); 331 + if (ret) 332 + return ret; 333 + 334 + dma_async_issue_pending(master->dma_rx); 335 + } 336 + 337 + if (xfer->tx_buf) { 338 + ret = spi_qup_prep_sg(master, xfer, DMA_MEM_TO_DEV, tx_done); 339 + if (ret) 340 + return ret; 341 + 342 + dma_async_issue_pending(master->dma_tx); 343 + } 344 + 345 + return 0; 346 + } 347 + 348 + static int spi_qup_do_pio(struct spi_master *master, struct spi_transfer *xfer) 349 + { 350 + struct spi_qup *qup = spi_master_get_devdata(master); 351 + int ret; 352 + 353 + ret = spi_qup_set_state(qup, QUP_STATE_RUN); 354 + if (ret) { 355 + dev_warn(qup->dev, "cannot set RUN state\n"); 356 + return ret; 357 + } 358 + 359 + ret = spi_qup_set_state(qup, QUP_STATE_PAUSE); 360 + if (ret) { 361 + dev_warn(qup->dev, "cannot set PAUSE state\n"); 362 + return ret; 363 + } 364 + 365 + spi_qup_fifo_write(qup, xfer); 366 + 367 + return 0; 368 + } 369 + 277 370 static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id) 278 371 { 279 372 struct spi_qup *controller = dev_id; ··· 424 315 error = -EIO; 425 316 } 426 317 427 - if (opflags & QUP_OP_IN_SERVICE_FLAG) 428 - spi_qup_fifo_read(controller, xfer); 318 + if (!controller->use_dma) { 319 + if (opflags & QUP_OP_IN_SERVICE_FLAG) 320 + spi_qup_fifo_read(controller, xfer); 429 321 430 - if (opflags & QUP_OP_OUT_SERVICE_FLAG) 431 - spi_qup_fifo_write(controller, xfer); 322 + if (opflags & QUP_OP_OUT_SERVICE_FLAG) 323 + spi_qup_fifo_write(controller, xfer); 324 + } 432 325 433 326 spin_lock_irqsave(&controller->lock, flags); 434 327 controller->error = error; ··· 443 332 return IRQ_HANDLED; 444 333 } 445 334 335 + static u32 336 + spi_qup_get_mode(struct spi_master *master, struct spi_transfer *xfer) 337 + { 338 + struct spi_qup *qup = spi_master_get_devdata(master); 339 + u32 mode; 340 + 341 + qup->w_size = 4; 342 + 343 + if (xfer->bits_per_word <= 8) 344 + qup->w_size = 1; 345 + else if (xfer->bits_per_word <= 16) 346 + qup->w_size = 2; 347 + 348 + qup->n_words = xfer->len / qup->w_size; 349 + 350 + if (qup->n_words <= (qup->in_fifo_sz / sizeof(u32))) 351 + mode = QUP_IO_M_MODE_FIFO; 352 + else 353 + mode = QUP_IO_M_MODE_BLOCK; 354 + 355 + return mode; 356 + } 446 357 447 358 /* set clock freq ... bits per word */ 448 359 static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer) 449 360 { 450 361 struct spi_qup *controller = spi_master_get_devdata(spi->master); 451 362 u32 config, iomode, mode, control; 452 - int ret, n_words, w_size; 363 + int ret, n_words; 453 364 454 365 if (spi->mode & SPI_LOOP && xfer->len > controller->in_fifo_sz) { 455 366 dev_err(controller->dev, "too big size for loopback %d > %d\n", ··· 491 358 return -EIO; 492 359 } 493 360 494 - w_size = 4; 495 - if (xfer->bits_per_word <= 8) 496 - w_size = 1; 497 - else if (xfer->bits_per_word <= 16) 498 - w_size = 2; 361 + mode = spi_qup_get_mode(spi->master, xfer); 362 + n_words = controller->n_words; 499 363 500 - n_words = xfer->len / w_size; 501 - controller->w_size = w_size; 502 - 503 - if (n_words <= (controller->in_fifo_sz / sizeof(u32))) { 504 - mode = QUP_IO_M_MODE_FIFO; 364 + if (mode == QUP_IO_M_MODE_FIFO) { 505 365 writel_relaxed(n_words, controller->base + QUP_MX_READ_CNT); 506 366 writel_relaxed(n_words, controller->base + QUP_MX_WRITE_CNT); 507 367 /* must be zero for FIFO */ 508 368 writel_relaxed(0, controller->base + QUP_MX_INPUT_CNT); 509 369 writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT); 510 - } else { 511 - mode = QUP_IO_M_MODE_BLOCK; 370 + } else if (!controller->use_dma) { 512 371 writel_relaxed(n_words, controller->base + QUP_MX_INPUT_CNT); 513 372 writel_relaxed(n_words, controller->base + QUP_MX_OUTPUT_CNT); 514 373 /* must be zero for BLOCK and BAM */ 515 374 writel_relaxed(0, controller->base + QUP_MX_READ_CNT); 516 375 writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT); 376 + } else { 377 + mode = QUP_IO_M_MODE_BAM; 378 + writel_relaxed(0, controller->base + QUP_MX_READ_CNT); 379 + writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT); 380 + 381 + if (!controller->qup_v1) { 382 + void __iomem *input_cnt; 383 + 384 + input_cnt = controller->base + QUP_MX_INPUT_CNT; 385 + /* 386 + * for DMA transfers, both QUP_MX_INPUT_CNT and 387 + * QUP_MX_OUTPUT_CNT must be zero to all cases but one. 388 + * That case is a non-balanced transfer when there is 389 + * only a rx_buf. 390 + */ 391 + if (xfer->tx_buf) 392 + writel_relaxed(0, input_cnt); 393 + else 394 + writel_relaxed(n_words, input_cnt); 395 + 396 + writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT); 397 + } 517 398 } 518 399 519 400 iomode = readl_relaxed(controller->base + QUP_IO_M_MODES); 520 401 /* Set input and output transfer mode */ 521 402 iomode &= ~(QUP_IO_M_INPUT_MODE_MASK | QUP_IO_M_OUTPUT_MODE_MASK); 522 - iomode &= ~(QUP_IO_M_PACK_EN | QUP_IO_M_UNPACK_EN); 403 + 404 + if (!controller->use_dma) 405 + iomode &= ~(QUP_IO_M_PACK_EN | QUP_IO_M_UNPACK_EN); 406 + else 407 + iomode |= QUP_IO_M_PACK_EN | QUP_IO_M_UNPACK_EN; 408 + 523 409 iomode |= (mode << QUP_IO_M_OUTPUT_MODE_MASK_SHIFT); 524 410 iomode |= (mode << QUP_IO_M_INPUT_MODE_MASK_SHIFT); 525 411 ··· 580 428 config &= ~(QUP_CONFIG_NO_INPUT | QUP_CONFIG_NO_OUTPUT | QUP_CONFIG_N); 581 429 config |= xfer->bits_per_word - 1; 582 430 config |= QUP_CONFIG_SPI_MODE; 431 + 432 + if (controller->use_dma) { 433 + if (!xfer->tx_buf) 434 + config |= QUP_CONFIG_NO_OUTPUT; 435 + if (!xfer->rx_buf) 436 + config |= QUP_CONFIG_NO_INPUT; 437 + } 438 + 583 439 writel_relaxed(config, controller->base + QUP_CONFIG); 584 440 585 441 /* only write to OPERATIONAL_MASK when register is present */ 586 - if (!controller->qup_v1) 587 - writel_relaxed(0, controller->base + QUP_OPERATIONAL_MASK); 442 + if (!controller->qup_v1) { 443 + u32 mask = 0; 444 + 445 + /* 446 + * mask INPUT and OUTPUT service flags to prevent IRQs on FIFO 447 + * status change in BAM mode 448 + */ 449 + 450 + if (mode == QUP_IO_M_MODE_BAM) 451 + mask = QUP_OP_IN_SERVICE_FLAG | QUP_OP_OUT_SERVICE_FLAG; 452 + 453 + writel_relaxed(mask, controller->base + QUP_OPERATIONAL_MASK); 454 + } 455 + 588 456 return 0; 589 457 } 590 458 ··· 633 461 controller->tx_bytes = 0; 634 462 spin_unlock_irqrestore(&controller->lock, flags); 635 463 636 - if (spi_qup_set_state(controller, QUP_STATE_RUN)) { 637 - dev_warn(controller->dev, "cannot set RUN state\n"); 638 - goto exit; 639 - } 464 + if (controller->use_dma) 465 + ret = spi_qup_do_dma(master, xfer); 466 + else 467 + ret = spi_qup_do_pio(master, xfer); 640 468 641 - if (spi_qup_set_state(controller, QUP_STATE_PAUSE)) { 642 - dev_warn(controller->dev, "cannot set PAUSE state\n"); 469 + if (ret) 643 470 goto exit; 644 - } 645 - 646 - spi_qup_fifo_write(controller, xfer); 647 471 648 472 if (spi_qup_set_state(controller, QUP_STATE_RUN)) { 649 473 dev_warn(controller->dev, "cannot set EXECUTE state\n"); ··· 648 480 649 481 if (!wait_for_completion_timeout(&controller->done, timeout)) 650 482 ret = -ETIMEDOUT; 483 + 651 484 exit: 652 485 spi_qup_set_state(controller, QUP_STATE_RESET); 653 486 spin_lock_irqsave(&controller->lock, flags); ··· 656 487 if (!ret) 657 488 ret = controller->error; 658 489 spin_unlock_irqrestore(&controller->lock, flags); 490 + 491 + if (ret && controller->use_dma) 492 + spi_qup_dma_terminate(master, xfer); 493 + 494 + return ret; 495 + } 496 + 497 + static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi, 498 + struct spi_transfer *xfer) 499 + { 500 + struct spi_qup *qup = spi_master_get_devdata(master); 501 + size_t dma_align = dma_get_cache_alignment(); 502 + u32 mode; 503 + 504 + qup->use_dma = 0; 505 + 506 + if (xfer->rx_buf && (xfer->len % qup->in_blk_sz || 507 + IS_ERR_OR_NULL(master->dma_rx) || 508 + !IS_ALIGNED((size_t)xfer->rx_buf, dma_align))) 509 + return false; 510 + 511 + if (xfer->tx_buf && (xfer->len % qup->out_blk_sz || 512 + IS_ERR_OR_NULL(master->dma_tx) || 513 + !IS_ALIGNED((size_t)xfer->tx_buf, dma_align))) 514 + return false; 515 + 516 + mode = spi_qup_get_mode(master, xfer); 517 + if (mode == QUP_IO_M_MODE_FIFO) 518 + return false; 519 + 520 + qup->use_dma = 1; 521 + 522 + return true; 523 + } 524 + 525 + static void spi_qup_release_dma(struct spi_master *master) 526 + { 527 + if (!IS_ERR_OR_NULL(master->dma_rx)) 528 + dma_release_channel(master->dma_rx); 529 + if (!IS_ERR_OR_NULL(master->dma_tx)) 530 + dma_release_channel(master->dma_tx); 531 + } 532 + 533 + static int spi_qup_init_dma(struct spi_master *master, resource_size_t base) 534 + { 535 + struct spi_qup *spi = spi_master_get_devdata(master); 536 + struct dma_slave_config *rx_conf = &spi->rx_conf, 537 + *tx_conf = &spi->tx_conf; 538 + struct device *dev = spi->dev; 539 + int ret; 540 + 541 + /* allocate dma resources, if available */ 542 + master->dma_rx = dma_request_slave_channel_reason(dev, "rx"); 543 + if (IS_ERR(master->dma_rx)) 544 + return PTR_ERR(master->dma_rx); 545 + 546 + master->dma_tx = dma_request_slave_channel_reason(dev, "tx"); 547 + if (IS_ERR(master->dma_tx)) { 548 + ret = PTR_ERR(master->dma_tx); 549 + goto err_tx; 550 + } 551 + 552 + /* set DMA parameters */ 553 + rx_conf->direction = DMA_DEV_TO_MEM; 554 + rx_conf->device_fc = 1; 555 + rx_conf->src_addr = base + QUP_INPUT_FIFO; 556 + rx_conf->src_maxburst = spi->in_blk_sz; 557 + 558 + tx_conf->direction = DMA_MEM_TO_DEV; 559 + tx_conf->device_fc = 1; 560 + tx_conf->dst_addr = base + QUP_OUTPUT_FIFO; 561 + tx_conf->dst_maxburst = spi->out_blk_sz; 562 + 563 + ret = dmaengine_slave_config(master->dma_rx, rx_conf); 564 + if (ret) { 565 + dev_err(dev, "failed to configure RX channel\n"); 566 + goto err; 567 + } 568 + 569 + ret = dmaengine_slave_config(master->dma_tx, tx_conf); 570 + if (ret) { 571 + dev_err(dev, "failed to configure TX channel\n"); 572 + goto err; 573 + } 574 + 575 + return 0; 576 + 577 + err: 578 + dma_release_channel(master->dma_tx); 579 + err_tx: 580 + dma_release_channel(master->dma_rx); 659 581 return ret; 660 582 } 661 583 ··· 823 563 master->transfer_one = spi_qup_transfer_one; 824 564 master->dev.of_node = pdev->dev.of_node; 825 565 master->auto_runtime_pm = true; 566 + master->dma_alignment = dma_get_cache_alignment(); 567 + master->max_dma_len = SPI_MAX_DMA_XFER; 826 568 827 569 platform_set_drvdata(pdev, master); 828 570 ··· 835 573 controller->iclk = iclk; 836 574 controller->cclk = cclk; 837 575 controller->irq = irq; 576 + 577 + ret = spi_qup_init_dma(master, res->start); 578 + if (ret == -EPROBE_DEFER) 579 + goto error; 580 + else if (!ret) 581 + master->can_dma = spi_qup_can_dma; 838 582 839 583 /* set v1 flag if device is version 1 */ 840 584 if (of_device_is_compatible(dev->of_node, "qcom,spi-qup-v1.1.1")) ··· 878 610 ret = spi_qup_set_state(controller, QUP_STATE_RESET); 879 611 if (ret) { 880 612 dev_err(dev, "cannot set RESET state\n"); 881 - goto error; 613 + goto error_dma; 882 614 } 883 615 884 616 writel_relaxed(0, base + QUP_OPERATIONAL); ··· 902 634 ret = devm_request_irq(dev, irq, spi_qup_qup_irq, 903 635 IRQF_TRIGGER_HIGH, pdev->name, controller); 904 636 if (ret) 905 - goto error; 637 + goto error_dma; 906 638 907 639 pm_runtime_set_autosuspend_delay(dev, MSEC_PER_SEC); 908 640 pm_runtime_use_autosuspend(dev); ··· 917 649 918 650 disable_pm: 919 651 pm_runtime_disable(&pdev->dev); 652 + error_dma: 653 + spi_qup_release_dma(master); 920 654 error: 921 655 clk_disable_unprepare(cclk); 922 656 clk_disable_unprepare(iclk); ··· 1009 739 ret = spi_qup_set_state(controller, QUP_STATE_RESET); 1010 740 if (ret) 1011 741 return ret; 742 + 743 + spi_qup_release_dma(master); 1012 744 1013 745 clk_disable_unprepare(controller->cclk); 1014 746 clk_disable_unprepare(controller->iclk);
+32 -4
drivers/spi/spi-rockchip.c
··· 179 179 u8 tmode; 180 180 u8 bpw; 181 181 u8 n_bytes; 182 + u8 rsd_nsecs; 182 183 unsigned len; 183 184 u32 speed; 184 185 ··· 303 302 return 0; 304 303 } 305 304 306 - static int rockchip_spi_unprepare_message(struct spi_master *master, 307 - struct spi_message *msg) 305 + static void rockchip_spi_handle_err(struct spi_master *master, 306 + struct spi_message *msg) 308 307 { 309 308 unsigned long flags; 310 309 struct rockchip_spi *rs = spi_master_get_devdata(master); ··· 314 313 /* 315 314 * For DMA mode, we need terminate DMA channel and flush 316 315 * fifo for the next transfer if DMA thansfer timeout. 317 - * unprepare_message() was called by core if transfer complete 318 - * or timeout. Maybe it is reasonable for error handling here. 316 + * handle_err() was called by core if transfer failed. 317 + * Maybe it is reasonable for error handling here. 319 318 */ 320 319 if (rs->use_dma) { 321 320 if (rs->state & RXBUSY) { ··· 328 327 } 329 328 330 329 spin_unlock_irqrestore(&rs->lock, flags); 330 + } 331 + 332 + static int rockchip_spi_unprepare_message(struct spi_master *master, 333 + struct spi_message *msg) 334 + { 335 + struct rockchip_spi *rs = spi_master_get_devdata(master); 331 336 332 337 spi_enable_chip(rs, 0); 333 338 ··· 500 493 { 501 494 u32 div = 0; 502 495 u32 dmacr = 0; 496 + int rsd = 0; 503 497 504 498 u32 cr0 = (CR0_BHT_8BIT << CR0_BHT_OFFSET) 505 499 | (CR0_SSD_ONE << CR0_SSD_OFFSET); ··· 529 521 /* div doesn't support odd number */ 530 522 div = DIV_ROUND_UP(rs->max_freq, rs->speed); 531 523 div = (div + 1) & 0xfffe; 524 + 525 + /* Rx sample delay is expressed in parent clock cycles (max 3) */ 526 + rsd = DIV_ROUND_CLOSEST(rs->rsd_nsecs * (rs->max_freq >> 8), 527 + 1000000000 >> 8); 528 + if (!rsd && rs->rsd_nsecs) { 529 + pr_warn_once("rockchip-spi: %u Hz are too slow to express %u ns delay\n", 530 + rs->max_freq, rs->rsd_nsecs); 531 + } else if (rsd > 3) { 532 + rsd = 3; 533 + pr_warn_once("rockchip-spi: %u Hz are too fast to express %u ns delay, clamping at %u ns\n", 534 + rs->max_freq, rs->rsd_nsecs, 535 + rsd * 1000000000U / rs->max_freq); 536 + } 537 + cr0 |= rsd << CR0_RSD_OFFSET; 532 538 533 539 writel_relaxed(cr0, rs->regs + ROCKCHIP_SPI_CTRLR0); 534 540 ··· 636 614 struct rockchip_spi *rs; 637 615 struct spi_master *master; 638 616 struct resource *mem; 617 + u32 rsd_nsecs; 639 618 640 619 master = spi_alloc_master(&pdev->dev, sizeof(struct rockchip_spi)); 641 620 if (!master) ··· 688 665 rs->dev = &pdev->dev; 689 666 rs->max_freq = clk_get_rate(rs->spiclk); 690 667 668 + if (!of_property_read_u32(pdev->dev.of_node, "rx-sample-delay-ns", 669 + &rsd_nsecs)) 670 + rs->rsd_nsecs = rsd_nsecs; 671 + 691 672 rs->fifo_len = get_fifo_len(rs); 692 673 if (!rs->fifo_len) { 693 674 dev_err(&pdev->dev, "Failed to get fifo length\n"); ··· 715 688 master->prepare_message = rockchip_spi_prepare_message; 716 689 master->unprepare_message = rockchip_spi_unprepare_message; 717 690 master->transfer_one = rockchip_spi_transfer_one; 691 + master->handle_err = rockchip_spi_handle_err; 718 692 719 693 rs->dma_tx.ch = dma_request_slave_channel(rs->dev, "tx"); 720 694 if (!rs->dma_tx.ch)
+118 -8
drivers/spi/spi-rspi.c
··· 177 177 #define SPBFCR_RXRST 0x40 /* Receive Buffer Data Reset */ 178 178 #define SPBFCR_TXTRG_MASK 0x30 /* Transmit Buffer Data Triggering Number */ 179 179 #define SPBFCR_RXTRG_MASK 0x07 /* Receive Buffer Data Triggering Number */ 180 + /* QSPI on R-Car Gen2 */ 181 + #define SPBFCR_TXTRG_1B 0x00 /* 31 bytes (1 byte available) */ 182 + #define SPBFCR_TXTRG_32B 0x30 /* 0 byte (32 bytes available) */ 183 + #define SPBFCR_RXTRG_1B 0x00 /* 1 byte (31 bytes available) */ 184 + #define SPBFCR_RXTRG_32B 0x07 /* 32 bytes (0 byte available) */ 185 + 186 + #define QSPI_BUFFER_SIZE 32u 180 187 181 188 struct rspi_data { 182 189 void __iomem *addr; ··· 371 364 rspi_write8(rspi, SPCR_SPE | SPCR_MSTR, RSPI_SPCR); 372 365 373 366 return 0; 367 + } 368 + 369 + static void qspi_update(const struct rspi_data *rspi, u8 mask, u8 val, u8 reg) 370 + { 371 + u8 data; 372 + 373 + data = rspi_read8(rspi, reg); 374 + data &= ~mask; 375 + data |= (val & mask); 376 + rspi_write8(rspi, data, reg); 377 + } 378 + 379 + static int qspi_set_send_trigger(struct rspi_data *rspi, unsigned int len) 380 + { 381 + unsigned int n; 382 + 383 + n = min(len, QSPI_BUFFER_SIZE); 384 + 385 + if (len >= QSPI_BUFFER_SIZE) { 386 + /* sets triggering number to 32 bytes */ 387 + qspi_update(rspi, SPBFCR_TXTRG_MASK, 388 + SPBFCR_TXTRG_32B, QSPI_SPBFCR); 389 + } else { 390 + /* sets triggering number to 1 byte */ 391 + qspi_update(rspi, SPBFCR_TXTRG_MASK, 392 + SPBFCR_TXTRG_1B, QSPI_SPBFCR); 393 + } 394 + 395 + return n; 396 + } 397 + 398 + static void qspi_set_receive_trigger(struct rspi_data *rspi, unsigned int len) 399 + { 400 + unsigned int n; 401 + 402 + n = min(len, QSPI_BUFFER_SIZE); 403 + 404 + if (len >= QSPI_BUFFER_SIZE) { 405 + /* sets triggering number to 32 bytes */ 406 + qspi_update(rspi, SPBFCR_RXTRG_MASK, 407 + SPBFCR_RXTRG_32B, QSPI_SPBFCR); 408 + } else { 409 + /* sets triggering number to 1 byte */ 410 + qspi_update(rspi, SPBFCR_RXTRG_MASK, 411 + SPBFCR_RXTRG_1B, QSPI_SPBFCR); 412 + } 374 413 } 375 414 376 415 #define set_config_register(spi, n) spi->ops->set_config_register(spi, n) ··· 662 609 return __rspi_can_dma(rspi, xfer); 663 610 } 664 611 612 + static int rspi_dma_check_then_transfer(struct rspi_data *rspi, 613 + struct spi_transfer *xfer) 614 + { 615 + if (rspi->master->can_dma && __rspi_can_dma(rspi, xfer)) { 616 + /* rx_buf can be NULL on RSPI on SH in TX-only Mode */ 617 + int ret = rspi_dma_transfer(rspi, &xfer->tx_sg, 618 + xfer->rx_buf ? &xfer->rx_sg : NULL); 619 + if (ret != -EAGAIN) 620 + return 0; 621 + } 622 + 623 + return -EAGAIN; 624 + } 625 + 665 626 static int rspi_common_transfer(struct rspi_data *rspi, 666 627 struct spi_transfer *xfer) 667 628 { 668 629 int ret; 669 630 670 - if (rspi->master->can_dma && __rspi_can_dma(rspi, xfer)) { 671 - /* rx_buf can be NULL on RSPI on SH in TX-only Mode */ 672 - ret = rspi_dma_transfer(rspi, &xfer->tx_sg, 673 - xfer->rx_buf ? &xfer->rx_sg : NULL); 674 - if (ret != -EAGAIN) 675 - return ret; 676 - } 631 + ret = rspi_dma_check_then_transfer(rspi, xfer); 632 + if (ret != -EAGAIN) 633 + return ret; 677 634 678 635 ret = rspi_pio_transfer(rspi, xfer->tx_buf, xfer->rx_buf, xfer->len); 679 636 if (ret < 0) ··· 724 661 return rspi_common_transfer(rspi, xfer); 725 662 } 726 663 664 + static int qspi_trigger_transfer_out_int(struct rspi_data *rspi, const u8 *tx, 665 + u8 *rx, unsigned int len) 666 + { 667 + int i, n, ret; 668 + int error; 669 + 670 + while (len > 0) { 671 + n = qspi_set_send_trigger(rspi, len); 672 + qspi_set_receive_trigger(rspi, len); 673 + if (n == QSPI_BUFFER_SIZE) { 674 + error = rspi_wait_for_tx_empty(rspi); 675 + if (error < 0) { 676 + dev_err(&rspi->master->dev, "transmit timeout\n"); 677 + return error; 678 + } 679 + for (i = 0; i < n; i++) 680 + rspi_write_data(rspi, *tx++); 681 + 682 + error = rspi_wait_for_rx_full(rspi); 683 + if (error < 0) { 684 + dev_err(&rspi->master->dev, "receive timeout\n"); 685 + return error; 686 + } 687 + for (i = 0; i < n; i++) 688 + *rx++ = rspi_read_data(rspi); 689 + } else { 690 + ret = rspi_pio_transfer(rspi, tx, rx, n); 691 + if (ret < 0) 692 + return ret; 693 + } 694 + len -= n; 695 + } 696 + 697 + return 0; 698 + } 699 + 727 700 static int qspi_transfer_out_in(struct rspi_data *rspi, 728 701 struct spi_transfer *xfer) 729 702 { 703 + int ret; 704 + 730 705 qspi_receive_init(rspi); 731 706 732 - return rspi_common_transfer(rspi, xfer); 707 + ret = rspi_dma_check_then_transfer(rspi, xfer); 708 + if (ret != -EAGAIN) 709 + return ret; 710 + 711 + ret = qspi_trigger_transfer_out_int(rspi, xfer->tx_buf, 712 + xfer->rx_buf, xfer->len); 713 + if (ret < 0) 714 + return ret; 715 + 716 + return 0; 733 717 } 734 718 735 719 static int qspi_transfer_out(struct rspi_data *rspi, struct spi_transfer *xfer)
+2 -2
drivers/spi/spi-s3c64xx.c
··· 324 324 325 325 /* Acquire DMA channels */ 326 326 sdd->rx_dma.ch = dma_request_slave_channel_compat(mask, filter, 327 - (void *)sdd->rx_dma.dmach, dev, "rx"); 327 + (void *)(long)sdd->rx_dma.dmach, dev, "rx"); 328 328 if (!sdd->rx_dma.ch) { 329 329 dev_err(dev, "Failed to get RX DMA channel\n"); 330 330 ret = -EBUSY; ··· 333 333 spi->dma_rx = sdd->rx_dma.ch; 334 334 335 335 sdd->tx_dma.ch = dma_request_slave_channel_compat(mask, filter, 336 - (void *)sdd->tx_dma.dmach, dev, "tx"); 336 + (void *)(long)sdd->tx_dma.dmach, dev, "tx"); 337 337 if (!sdd->tx_dma.ch) { 338 338 dev_err(dev, "Failed to get TX DMA channel\n"); 339 339 ret = -EBUSY;
+1 -1
drivers/spi/spi-sc18is602.c
··· 286 286 hw->freq = SC18IS602_CLOCK; 287 287 break; 288 288 } 289 - master->bus_num = client->adapter->nr; 289 + master->bus_num = np ? -1 : client->adapter->nr; 290 290 master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_LSB_FIRST; 291 291 master->bits_per_word_mask = SPI_BPW_MASK(8); 292 292 master->setup = sc18is602_setup;