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/res', 'spi/topic/rockchip', 'spi/topic/sh', 'spi/topic/ti-qspi' and 'spi/topic/xilinx' into spi-next

+176 -57
+1
Documentation/devicetree/bindings/spi/spi-rockchip.txt
··· 9 9 "rockchip,rk3066-spi" for rk3066. 10 10 "rockchip,rk3188-spi", "rockchip,rk3066-spi" for rk3188. 11 11 "rockchip,rk3288-spi", "rockchip,rk3066-spi" for rk3288. 12 + "rockchip,rk3399-spi", "rockchip,rk3066-spi" for rk3399. 12 13 - reg: physical base address of the controller and length of memory mapped 13 14 region. 14 15 - interrupts: The interrupt number to the cpu. The interrupt specifier format
+22
Documentation/devicetree/bindings/spi/spi-xilinx.txt
··· 1 + Xilinx SPI controller Device Tree Bindings 2 + ------------------------------------------------- 3 + 4 + Required properties: 5 + - compatible : Should be "xlnx,xps-spi-2.00.a" or "xlnx,xps-spi-2.00.b" 6 + - reg : Physical base address and size of SPI registers map. 7 + - interrupts : Property with a value describing the interrupt 8 + number. 9 + - interrupt-parent : Must be core interrupt controller 10 + 11 + Optional properties: 12 + - xlnx,num-ss-bits : Number of chip selects used. 13 + 14 + Example: 15 + axi_quad_spi@41e00000 { 16 + compatible = "xlnx,xps-spi-2.00.a"; 17 + interrupt-parent = <&intc>; 18 + interrupts = <0 31 1>; 19 + reg = <0x41e00000 0x10000>; 20 + xlnx,num-ss-bits = <0x1>; 21 + }; 22 +
+3 -3
drivers/spi/Kconfig
··· 487 487 488 488 config SPI_RSPI 489 489 tristate "Renesas RSPI/QSPI controller" 490 - depends on SUPERH || ARCH_SHMOBILE || COMPILE_TEST 490 + depends on SUPERH || ARCH_RENESAS || COMPILE_TEST 491 491 help 492 492 SPI driver for Renesas RSPI and QSPI blocks. 493 493 ··· 537 537 config SPI_SH_MSIOF 538 538 tristate "SuperH MSIOF SPI controller" 539 539 depends on HAVE_CLK && HAS_DMA 540 - depends on SUPERH || ARCH_SHMOBILE || COMPILE_TEST 540 + depends on SUPERH || ARCH_RENESAS || COMPILE_TEST 541 541 help 542 542 SPI driver for SuperH and SH Mobile MSIOF blocks. 543 543 ··· 556 556 557 557 config SPI_SH_HSPI 558 558 tristate "SuperH HSPI controller" 559 - depends on ARCH_SHMOBILE || COMPILE_TEST 559 + depends on ARCH_RENESAS || COMPILE_TEST 560 560 help 561 561 SPI driver for SuperH HSPI blocks. 562 562
+37 -23
drivers/spi/spi-rockchip.c
··· 13 13 * 14 14 */ 15 15 16 - #include <linux/init.h> 17 - #include <linux/module.h> 18 16 #include <linux/clk.h> 19 - #include <linux/err.h> 20 - #include <linux/delay.h> 21 - #include <linux/interrupt.h> 22 - #include <linux/platform_device.h> 23 - #include <linux/slab.h> 24 - #include <linux/spi/spi.h> 25 - #include <linux/scatterlist.h> 26 - #include <linux/of.h> 27 - #include <linux/pm_runtime.h> 28 - #include <linux/io.h> 29 17 #include <linux/dmaengine.h> 18 + #include <linux/module.h> 19 + #include <linux/of.h> 20 + #include <linux/platform_device.h> 21 + #include <linux/spi/spi.h> 22 + #include <linux/pm_runtime.h> 23 + #include <linux/scatterlist.h> 30 24 31 25 #define DRIVER_NAME "rockchip-spi" 32 26 ··· 173 179 u8 tmode; 174 180 u8 bpw; 175 181 u8 n_bytes; 176 - u8 rsd_nsecs; 182 + u32 rsd_nsecs; 177 183 unsigned len; 178 184 u32 speed; 179 185 ··· 185 191 u32 state; 186 192 /* protect state */ 187 193 spinlock_t lock; 188 - 189 - struct completion xfer_completion; 190 194 191 195 u32 use_dma; 192 196 struct sg_table tx_sg; ··· 257 265 static void rockchip_spi_set_cs(struct spi_device *spi, bool enable) 258 266 { 259 267 u32 ser; 260 - struct rockchip_spi *rs = spi_master_get_devdata(spi->master); 268 + struct spi_master *master = spi->master; 269 + struct rockchip_spi *rs = spi_master_get_devdata(master); 270 + 271 + pm_runtime_get_sync(rs->dev); 261 272 262 273 ser = readl_relaxed(rs->regs + ROCKCHIP_SPI_SER) & SER_MASK; 263 274 ··· 285 290 ser &= ~(1 << spi->chip_select); 286 291 287 292 writel_relaxed(ser, rs->regs + ROCKCHIP_SPI_SER); 293 + 294 + pm_runtime_put_sync(rs->dev); 288 295 } 289 296 290 297 static int rockchip_spi_prepare_message(struct spi_master *master, ··· 316 319 */ 317 320 if (rs->use_dma) { 318 321 if (rs->state & RXBUSY) { 319 - dmaengine_terminate_all(rs->dma_rx.ch); 322 + dmaengine_terminate_async(rs->dma_rx.ch); 320 323 flush_fifo(rs); 321 324 } 322 325 323 326 if (rs->state & TXBUSY) 324 - dmaengine_terminate_all(rs->dma_tx.ch); 327 + dmaengine_terminate_async(rs->dma_tx.ch); 325 328 } 326 329 327 330 spin_unlock_irqrestore(&rs->lock, flags); ··· 430 433 spin_unlock_irqrestore(&rs->lock, flags); 431 434 } 432 435 433 - static void rockchip_spi_prepare_dma(struct rockchip_spi *rs) 436 + static int rockchip_spi_prepare_dma(struct rockchip_spi *rs) 434 437 { 435 438 unsigned long flags; 436 439 struct dma_slave_config rxconf, txconf; ··· 453 456 rs->dma_rx.ch, 454 457 rs->rx_sg.sgl, rs->rx_sg.nents, 455 458 rs->dma_rx.direction, DMA_PREP_INTERRUPT); 459 + if (!rxdesc) 460 + return -EINVAL; 456 461 457 462 rxdesc->callback = rockchip_spi_dma_rxcb; 458 463 rxdesc->callback_param = rs; ··· 472 473 rs->dma_tx.ch, 473 474 rs->tx_sg.sgl, rs->tx_sg.nents, 474 475 rs->dma_tx.direction, DMA_PREP_INTERRUPT); 476 + if (!txdesc) { 477 + if (rxdesc) 478 + dmaengine_terminate_sync(rs->dma_rx.ch); 479 + return -EINVAL; 480 + } 475 481 476 482 txdesc->callback = rockchip_spi_dma_txcb; 477 483 txdesc->callback_param = rs; ··· 498 494 dmaengine_submit(txdesc); 499 495 dma_async_issue_pending(rs->dma_tx.ch); 500 496 } 497 + 498 + return 0; 501 499 } 502 500 503 501 static void rockchip_spi_config(struct rockchip_spi *rs) ··· 509 503 int rsd = 0; 510 504 511 505 u32 cr0 = (CR0_BHT_8BIT << CR0_BHT_OFFSET) 512 - | (CR0_SSD_ONE << CR0_SSD_OFFSET); 506 + | (CR0_SSD_ONE << CR0_SSD_OFFSET) 507 + | (CR0_EM_BIG << CR0_EM_OFFSET); 513 508 514 509 cr0 |= (rs->n_bytes << CR0_DFS_OFFSET); 515 510 cr0 |= ((rs->mode & 0x3) << CR0_SCPH_OFFSET); ··· 613 606 if (rs->use_dma) { 614 607 if (rs->tmode == CR0_XFM_RO) { 615 608 /* rx: dma must be prepared first */ 616 - rockchip_spi_prepare_dma(rs); 609 + ret = rockchip_spi_prepare_dma(rs); 617 610 spi_enable_chip(rs, 1); 618 611 } else { 619 612 /* tx or tr: spi must be enabled first */ 620 613 spi_enable_chip(rs, 1); 621 - rockchip_spi_prepare_dma(rs); 614 + ret = rockchip_spi_prepare_dma(rs); 622 615 } 623 616 } else { 624 617 spi_enable_chip(rs, 1); ··· 724 717 master->handle_err = rockchip_spi_handle_err; 725 718 726 719 rs->dma_tx.ch = dma_request_slave_channel(rs->dev, "tx"); 727 - if (!rs->dma_tx.ch) 720 + if (IS_ERR_OR_NULL(rs->dma_tx.ch)) { 721 + /* Check tx to see if we need defer probing driver */ 722 + if (PTR_ERR(rs->dma_tx.ch) == -EPROBE_DEFER) { 723 + ret = -EPROBE_DEFER; 724 + goto err_get_fifo_len; 725 + } 728 726 dev_warn(rs->dev, "Failed to request TX DMA channel\n"); 727 + } 729 728 730 729 rs->dma_rx.ch = dma_request_slave_channel(rs->dev, "rx"); 731 730 if (!rs->dma_rx.ch) { ··· 884 871 { .compatible = "rockchip,rk3066-spi", }, 885 872 { .compatible = "rockchip,rk3188-spi", }, 886 873 { .compatible = "rockchip,rk3288-spi", }, 874 + { .compatible = "rockchip,rk3399-spi", }, 887 875 { }, 888 876 }; 889 877 MODULE_DEVICE_TABLE(of, rockchip_spi_dt_match);
+109 -28
drivers/spi/spi-ti-qspi.c
··· 31 31 #include <linux/of.h> 32 32 #include <linux/of_device.h> 33 33 #include <linux/pinctrl/consumer.h> 34 + #include <linux/mfd/syscon.h> 35 + #include <linux/regmap.h> 34 36 35 37 #include <linux/spi/spi.h> 36 38 ··· 46 44 47 45 struct spi_master *master; 48 46 void __iomem *base; 49 - void __iomem *ctrl_base; 50 47 void __iomem *mmap_base; 48 + struct regmap *ctrl_base; 49 + unsigned int ctrl_reg; 51 50 struct clk *fclk; 52 51 struct device *dev; 53 52 ··· 58 55 u32 cmd; 59 56 u32 dc; 60 57 61 - bool ctrl_mod; 58 + bool mmap_enabled; 62 59 }; 63 60 64 61 #define QSPI_PID (0x0) ··· 68 65 #define QSPI_SPI_CMD_REG (0x48) 69 66 #define QSPI_SPI_STATUS_REG (0x4c) 70 67 #define QSPI_SPI_DATA_REG (0x50) 71 - #define QSPI_SPI_SETUP0_REG (0x54) 68 + #define QSPI_SPI_SETUP_REG(n) ((0x54 + 4 * n)) 72 69 #define QSPI_SPI_SWITCH_REG (0x64) 73 - #define QSPI_SPI_SETUP1_REG (0x58) 74 - #define QSPI_SPI_SETUP2_REG (0x5c) 75 - #define QSPI_SPI_SETUP3_REG (0x60) 76 70 #define QSPI_SPI_DATA_REG_1 (0x68) 77 71 #define QSPI_SPI_DATA_REG_2 (0x6c) 78 72 #define QSPI_SPI_DATA_REG_3 (0x70) ··· 108 108 #define QSPI_FRAME 4096 109 109 110 110 #define QSPI_AUTOSUSPEND_TIMEOUT 2000 111 + 112 + #define MEM_CS_EN(n) ((n + 1) << 8) 113 + #define MEM_CS_MASK (7 << 8) 114 + 115 + #define MM_SWITCH 0x1 116 + 117 + #define QSPI_SETUP_RD_NORMAL (0x0 << 12) 118 + #define QSPI_SETUP_RD_DUAL (0x1 << 12) 119 + #define QSPI_SETUP_RD_QUAD (0x3 << 12) 120 + #define QSPI_SETUP_ADDR_SHIFT 8 121 + #define QSPI_SETUP_DUMMY_SHIFT 10 111 122 112 123 static inline unsigned long ti_qspi_read(struct ti_qspi *qspi, 113 124 unsigned long reg) ··· 377 366 return 0; 378 367 } 379 368 369 + static void ti_qspi_enable_memory_map(struct spi_device *spi) 370 + { 371 + struct ti_qspi *qspi = spi_master_get_devdata(spi->master); 372 + 373 + ti_qspi_write(qspi, MM_SWITCH, QSPI_SPI_SWITCH_REG); 374 + if (qspi->ctrl_base) { 375 + regmap_update_bits(qspi->ctrl_base, qspi->ctrl_reg, 376 + MEM_CS_EN(spi->chip_select), 377 + MEM_CS_MASK); 378 + } 379 + qspi->mmap_enabled = true; 380 + } 381 + 382 + static void ti_qspi_disable_memory_map(struct spi_device *spi) 383 + { 384 + struct ti_qspi *qspi = spi_master_get_devdata(spi->master); 385 + 386 + ti_qspi_write(qspi, 0, QSPI_SPI_SWITCH_REG); 387 + if (qspi->ctrl_base) 388 + regmap_update_bits(qspi->ctrl_base, qspi->ctrl_reg, 389 + 0, MEM_CS_MASK); 390 + qspi->mmap_enabled = false; 391 + } 392 + 393 + static void ti_qspi_setup_mmap_read(struct spi_device *spi, 394 + struct spi_flash_read_message *msg) 395 + { 396 + struct ti_qspi *qspi = spi_master_get_devdata(spi->master); 397 + u32 memval = msg->read_opcode; 398 + 399 + switch (msg->data_nbits) { 400 + case SPI_NBITS_QUAD: 401 + memval |= QSPI_SETUP_RD_QUAD; 402 + break; 403 + case SPI_NBITS_DUAL: 404 + memval |= QSPI_SETUP_RD_DUAL; 405 + break; 406 + default: 407 + memval |= QSPI_SETUP_RD_NORMAL; 408 + break; 409 + } 410 + memval |= ((msg->addr_width - 1) << QSPI_SETUP_ADDR_SHIFT | 411 + msg->dummy_bytes << QSPI_SETUP_DUMMY_SHIFT); 412 + ti_qspi_write(qspi, memval, 413 + QSPI_SPI_SETUP_REG(spi->chip_select)); 414 + } 415 + 416 + static int ti_qspi_spi_flash_read(struct spi_device *spi, 417 + struct spi_flash_read_message *msg) 418 + { 419 + struct ti_qspi *qspi = spi_master_get_devdata(spi->master); 420 + int ret = 0; 421 + 422 + mutex_lock(&qspi->list_lock); 423 + 424 + if (!qspi->mmap_enabled) 425 + ti_qspi_enable_memory_map(spi); 426 + ti_qspi_setup_mmap_read(spi, msg); 427 + memcpy_fromio(msg->buf, qspi->mmap_base + msg->from, msg->len); 428 + msg->retlen = msg->len; 429 + 430 + mutex_unlock(&qspi->list_lock); 431 + 432 + return ret; 433 + } 434 + 380 435 static int ti_qspi_start_transfer_one(struct spi_master *master, 381 436 struct spi_message *m) 382 437 { ··· 474 397 ti_qspi_write(qspi, qspi->dc, QSPI_SPI_DC_REG); 475 398 476 399 mutex_lock(&qspi->list_lock); 400 + 401 + if (qspi->mmap_enabled) 402 + ti_qspi_disable_memory_map(spi); 477 403 478 404 list_for_each_entry(t, &m->transfers, transfer_list) { 479 405 qspi->cmd |= QSPI_WLEN(t->bits_per_word); ··· 521 441 { 522 442 struct ti_qspi *qspi; 523 443 struct spi_master *master; 524 - struct resource *r, *res_ctrl, *res_mmap; 444 + struct resource *r, *res_mmap; 525 445 struct device_node *np = pdev->dev.of_node; 526 446 u32 max_freq; 527 447 int ret = 0, num_cs, irq; ··· 567 487 } 568 488 } 569 489 570 - res_ctrl = platform_get_resource_byname(pdev, 571 - IORESOURCE_MEM, "qspi_ctrlmod"); 572 - if (res_ctrl == NULL) { 573 - res_ctrl = platform_get_resource(pdev, IORESOURCE_MEM, 2); 574 - if (res_ctrl == NULL) { 575 - dev_dbg(&pdev->dev, 576 - "control module resources not required\n"); 577 - } 578 - } 579 - 580 490 irq = platform_get_irq(pdev, 0); 581 491 if (irq < 0) { 582 492 dev_err(&pdev->dev, "no irq resource?\n"); ··· 581 511 goto free_master; 582 512 } 583 513 584 - if (res_ctrl) { 585 - qspi->ctrl_mod = true; 586 - qspi->ctrl_base = devm_ioremap_resource(&pdev->dev, res_ctrl); 587 - if (IS_ERR(qspi->ctrl_base)) { 588 - ret = PTR_ERR(qspi->ctrl_base); 589 - goto free_master; 514 + if (res_mmap) { 515 + qspi->mmap_base = devm_ioremap_resource(&pdev->dev, 516 + res_mmap); 517 + master->spi_flash_read = ti_qspi_spi_flash_read; 518 + if (IS_ERR(qspi->mmap_base)) { 519 + dev_err(&pdev->dev, 520 + "falling back to PIO mode\n"); 521 + master->spi_flash_read = NULL; 590 522 } 591 523 } 524 + qspi->mmap_enabled = false; 592 525 593 - if (res_mmap) { 594 - qspi->mmap_base = devm_ioremap_resource(&pdev->dev, res_mmap); 595 - if (IS_ERR(qspi->mmap_base)) { 596 - ret = PTR_ERR(qspi->mmap_base); 597 - goto free_master; 526 + if (of_property_read_bool(np, "syscon-chipselects")) { 527 + qspi->ctrl_base = 528 + syscon_regmap_lookup_by_phandle(np, 529 + "syscon-chipselects"); 530 + if (IS_ERR(qspi->ctrl_base)) 531 + return PTR_ERR(qspi->ctrl_base); 532 + ret = of_property_read_u32_index(np, 533 + "syscon-chipselects", 534 + 1, &qspi->ctrl_reg); 535 + if (ret) { 536 + dev_err(&pdev->dev, 537 + "couldn't get ctrl_mod reg index\n"); 538 + return ret; 598 539 } 599 540 } 600 541
+4 -3
include/linux/spi/spi.h
··· 604 604 * SPI resource management while processing a SPI message 605 605 */ 606 606 607 + typedef void (*spi_res_release_t)(struct spi_master *master, 608 + struct spi_message *msg, 609 + void *res); 610 + 607 611 /** 608 612 * struct spi_res - spi resource management structure 609 613 * @entry: list entry ··· 617 613 * this is based on ideas from devres, but focused on life-cycle 618 614 * management during spi_message processing 619 615 */ 620 - typedef void (*spi_res_release_t)(struct spi_master *master, 621 - struct spi_message *msg, 622 - void *res); 623 616 struct spi_res { 624 617 struct list_head entry; 625 618 spi_res_release_t release;