aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/spi/sh-msiof.txt19
-rw-r--r--drivers/spi/Kconfig6
-rw-r--r--drivers/spi/spi-armada-3700.c25
-rw-r--r--drivers/spi/spi-ath79.c23
-rw-r--r--drivers/spi/spi-axi-spi-engine.c3
-rw-r--r--drivers/spi/spi-bcm-qspi.c194
-rw-r--r--drivers/spi/spi-bcm53xx.c18
-rw-r--r--drivers/spi/spi-davinci.c4
-rw-r--r--drivers/spi/spi-dw-mid.c4
-rw-r--r--drivers/spi/spi-dw.c9
-rw-r--r--drivers/spi/spi-dw.h1
-rw-r--r--drivers/spi/spi-fsl-lpspi.c8
-rw-r--r--drivers/spi/spi-fsl-spi.c17
-rw-r--r--drivers/spi/spi-mt65xx.c37
-rw-r--r--drivers/spi/spi-pxa2xx.c5
-rw-r--r--drivers/spi/spi-rspi.c5
-rw-r--r--drivers/spi/spi-s3c64xx.c2
-rw-r--r--drivers/spi/spi-sh-msiof.c4
-rw-r--r--drivers/spi/spi.c18
19 files changed, 259 insertions, 143 deletions
diff --git a/Documentation/devicetree/bindings/spi/sh-msiof.txt b/Documentation/devicetree/bindings/spi/sh-msiof.txt
index da6614c63796..dc975064fa27 100644
--- a/Documentation/devicetree/bindings/spi/sh-msiof.txt
+++ b/Documentation/devicetree/bindings/spi/sh-msiof.txt
@@ -1,17 +1,23 @@
1Renesas MSIOF spi controller 1Renesas MSIOF spi controller
2 2
3Required properties: 3Required properties:
4- compatible : "renesas,msiof-<soctype>" for SoCs, 4- compatible : "renesas,msiof-r8a7790" (R-Car H2)
5 "renesas,sh-msiof" for SuperH, or
6 "renesas,sh-mobile-msiof" for SH Mobile series.
7 Examples with soctypes are:
8 "renesas,msiof-r8a7790" (R-Car H2)
9 "renesas,msiof-r8a7791" (R-Car M2-W) 5 "renesas,msiof-r8a7791" (R-Car M2-W)
10 "renesas,msiof-r8a7792" (R-Car V2H) 6 "renesas,msiof-r8a7792" (R-Car V2H)
11 "renesas,msiof-r8a7793" (R-Car M2-N) 7 "renesas,msiof-r8a7793" (R-Car M2-N)
12 "renesas,msiof-r8a7794" (R-Car E2) 8 "renesas,msiof-r8a7794" (R-Car E2)
13 "renesas,msiof-r8a7796" (R-Car M3-W) 9 "renesas,msiof-r8a7796" (R-Car M3-W)
14 "renesas,msiof-sh73a0" (SH-Mobile AG5) 10 "renesas,msiof-sh73a0" (SH-Mobile AG5)
11 "renesas,sh-mobile-msiof" (generic SH-Mobile compatibile device)
12 "renesas,rcar-gen2-msiof" (generic R-Car Gen2 compatible device)
13 "renesas,rcar-gen3-msiof" (generic R-Car Gen3 compatible device)
14 "renesas,sh-msiof" (deprecated)
15
16 When compatible with the generic version, nodes
17 must list the SoC-specific version corresponding
18 to the platform first followed by the generic
19 version.
20
15- reg : A list of offsets and lengths of the register sets for 21- reg : A list of offsets and lengths of the register sets for
16 the device. 22 the device.
17 If only one register set is present, it is to be used 23 If only one register set is present, it is to be used
@@ -61,7 +67,8 @@ Documentation/devicetree/bindings/pinctrl/renesas,*.
61Example: 67Example:
62 68
63 msiof0: spi@e6e20000 { 69 msiof0: spi@e6e20000 {
64 compatible = "renesas,msiof-r8a7791"; 70 compatible = "renesas,msiof-r8a7791",
71 "renesas,rcar-gen2-msiof";
65 reg = <0 0xe6e20000 0 0x0064>; 72 reg = <0 0xe6e20000 0 0x0064>;
66 interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>; 73 interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;
67 clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>; 74 clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>;
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index ec4aa252d6e8..7415022fa0d7 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -162,7 +162,8 @@ config SPI_BCM63XX_HSSPI
162 162
163config SPI_BCM_QSPI 163config SPI_BCM_QSPI
164 tristate "Broadcom BSPI and MSPI controller support" 164 tristate "Broadcom BSPI and MSPI controller support"
165 depends on ARCH_BRCMSTB || ARCH_BCM || ARCH_BCM_IPROC || COMPILE_TEST 165 depends on ARCH_BRCMSTB || ARCH_BCM || ARCH_BCM_IPROC || \
166 BMIPS_GENERIC || COMPILE_TEST
166 default ARCH_BCM_IPROC 167 default ARCH_BCM_IPROC
167 help 168 help
168 Enables support for the Broadcom SPI flash and MSPI controller. 169 Enables support for the Broadcom SPI flash and MSPI controller.
@@ -263,7 +264,7 @@ config SPI_EP93XX
263 mode. 264 mode.
264 265
265config SPI_FALCON 266config SPI_FALCON
266 tristate "Falcon SPI controller support" 267 bool "Falcon SPI controller support"
267 depends on SOC_FALCON 268 depends on SOC_FALCON
268 help 269 help
269 The external bus unit (EBU) found on the FALC-ON SoC has SPI 270 The external bus unit (EBU) found on the FALC-ON SoC has SPI
@@ -378,6 +379,7 @@ config SPI_FSL_SPI
378config SPI_FSL_DSPI 379config SPI_FSL_DSPI
379 tristate "Freescale DSPI controller" 380 tristate "Freescale DSPI controller"
380 select REGMAP_MMIO 381 select REGMAP_MMIO
382 depends on HAS_DMA
381 depends on SOC_VF610 || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST 383 depends on SOC_VF610 || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
382 help 384 help
383 This enables support for the Freescale DSPI controller in master 385 This enables support for the Freescale DSPI controller in master
diff --git a/drivers/spi/spi-armada-3700.c b/drivers/spi/spi-armada-3700.c
index e89da0af45d2..6c7d7a460689 100644
--- a/drivers/spi/spi-armada-3700.c
+++ b/drivers/spi/spi-armada-3700.c
@@ -170,12 +170,12 @@ static int a3700_spi_pin_mode_set(struct a3700_spi *a3700_spi,
170 val &= ~(A3700_SPI_DATA_PIN0 | A3700_SPI_DATA_PIN1); 170 val &= ~(A3700_SPI_DATA_PIN0 | A3700_SPI_DATA_PIN1);
171 171
172 switch (pin_mode) { 172 switch (pin_mode) {
173 case 1: 173 case SPI_NBITS_SINGLE:
174 break; 174 break;
175 case 2: 175 case SPI_NBITS_DUAL:
176 val |= A3700_SPI_DATA_PIN0; 176 val |= A3700_SPI_DATA_PIN0;
177 break; 177 break;
178 case 4: 178 case SPI_NBITS_QUAD:
179 val |= A3700_SPI_DATA_PIN1; 179 val |= A3700_SPI_DATA_PIN1;
180 break; 180 break;
181 default: 181 default:
@@ -340,8 +340,7 @@ static irqreturn_t a3700_spi_interrupt(int irq, void *dev_id)
340 spireg_write(a3700_spi, A3700_SPI_INT_STAT_REG, cause); 340 spireg_write(a3700_spi, A3700_SPI_INT_STAT_REG, cause);
341 341
342 /* Wake up the transfer */ 342 /* Wake up the transfer */
343 if (a3700_spi->wait_mask & cause) 343 complete(&a3700_spi->done);
344 complete(&a3700_spi->done);
345 344
346 return IRQ_HANDLED; 345 return IRQ_HANDLED;
347} 346}
@@ -421,7 +420,7 @@ static void a3700_spi_fifo_thres_set(struct a3700_spi *a3700_spi,
421} 420}
422 421
423static void a3700_spi_transfer_setup(struct spi_device *spi, 422static void a3700_spi_transfer_setup(struct spi_device *spi,
424 struct spi_transfer *xfer) 423 struct spi_transfer *xfer)
425{ 424{
426 struct a3700_spi *a3700_spi; 425 struct a3700_spi *a3700_spi;
427 unsigned int byte_len; 426 unsigned int byte_len;
@@ -562,6 +561,7 @@ static int a3700_spi_fifo_read(struct a3700_spi *a3700_spi)
562 val = spireg_read(a3700_spi, A3700_SPI_DATA_IN_REG); 561 val = spireg_read(a3700_spi, A3700_SPI_DATA_IN_REG);
563 if (a3700_spi->buf_len >= 4) { 562 if (a3700_spi->buf_len >= 4) {
564 u32 data = le32_to_cpu(val); 563 u32 data = le32_to_cpu(val);
564
565 memcpy(a3700_spi->rx_buf, &data, 4); 565 memcpy(a3700_spi->rx_buf, &data, 4);
566 566
567 a3700_spi->buf_len -= 4; 567 a3700_spi->buf_len -= 4;
@@ -800,7 +800,7 @@ static int a3700_spi_probe(struct platform_device *pdev)
800 struct spi_master *master; 800 struct spi_master *master;
801 struct a3700_spi *spi; 801 struct a3700_spi *spi;
802 u32 num_cs = 0; 802 u32 num_cs = 0;
803 int ret = 0; 803 int irq, ret = 0;
804 804
805 master = spi_alloc_master(dev, sizeof(*spi)); 805 master = spi_alloc_master(dev, sizeof(*spi));
806 if (!master) { 806 if (!master) {
@@ -825,7 +825,7 @@ static int a3700_spi_probe(struct platform_device *pdev)
825 master->unprepare_message = a3700_spi_unprepare_message; 825 master->unprepare_message = a3700_spi_unprepare_message;
826 master->set_cs = a3700_spi_set_cs; 826 master->set_cs = a3700_spi_set_cs;
827 master->flags = SPI_MASTER_HALF_DUPLEX; 827 master->flags = SPI_MASTER_HALF_DUPLEX;
828 master->mode_bits |= (SPI_RX_DUAL | SPI_RX_DUAL | 828 master->mode_bits |= (SPI_RX_DUAL | SPI_TX_DUAL |
829 SPI_RX_QUAD | SPI_TX_QUAD); 829 SPI_RX_QUAD | SPI_TX_QUAD);
830 830
831 platform_set_drvdata(pdev, master); 831 platform_set_drvdata(pdev, master);
@@ -846,12 +846,13 @@ static int a3700_spi_probe(struct platform_device *pdev)
846 goto error; 846 goto error;
847 } 847 }
848 848
849 spi->irq = platform_get_irq(pdev, 0); 849 irq = platform_get_irq(pdev, 0);
850 if (spi->irq < 0) { 850 if (irq < 0) {
851 dev_err(dev, "could not get irq: %d\n", spi->irq); 851 dev_err(dev, "could not get irq: %d\n", irq);
852 ret = -ENXIO; 852 ret = -ENXIO;
853 goto error; 853 goto error;
854 } 854 }
855 spi->irq = irq;
855 856
856 init_completion(&spi->done); 857 init_completion(&spi->done);
857 858
@@ -900,7 +901,6 @@ static int a3700_spi_remove(struct platform_device *pdev)
900 struct a3700_spi *spi = spi_master_get_devdata(master); 901 struct a3700_spi *spi = spi_master_get_devdata(master);
901 902
902 clk_unprepare(spi->clk); 903 clk_unprepare(spi->clk);
903 spi_master_put(master);
904 904
905 return 0; 905 return 0;
906} 906}
@@ -908,7 +908,6 @@ static int a3700_spi_remove(struct platform_device *pdev)
908static struct platform_driver a3700_spi_driver = { 908static struct platform_driver a3700_spi_driver = {
909 .driver = { 909 .driver = {
910 .name = DRIVER_NAME, 910 .name = DRIVER_NAME,
911 .owner = THIS_MODULE,
912 .of_match_table = of_match_ptr(a3700_spi_dt_ids), 911 .of_match_table = of_match_ptr(a3700_spi_dt_ids),
913 }, 912 },
914 .probe = a3700_spi_probe, 913 .probe = a3700_spi_probe,
diff --git a/drivers/spi/spi-ath79.c b/drivers/spi/spi-ath79.c
index f369174fbd88..b89cee11f418 100644
--- a/drivers/spi/spi-ath79.c
+++ b/drivers/spi/spi-ath79.c
@@ -78,14 +78,16 @@ static void ath79_spi_chipselect(struct spi_device *spi, int is_active)
78 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base); 78 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
79 } 79 }
80 80
81 if (spi->chip_select) { 81 if (gpio_is_valid(spi->cs_gpio)) {
82 /* SPI is normally active-low */ 82 /* SPI is normally active-low */
83 gpio_set_value(spi->cs_gpio, cs_high); 83 gpio_set_value_cansleep(spi->cs_gpio, cs_high);
84 } else { 84 } else {
85 u32 cs_bit = AR71XX_SPI_IOC_CS(spi->chip_select);
86
85 if (cs_high) 87 if (cs_high)
86 sp->ioc_base |= AR71XX_SPI_IOC_CS0; 88 sp->ioc_base |= cs_bit;
87 else 89 else
88 sp->ioc_base &= ~AR71XX_SPI_IOC_CS0; 90 sp->ioc_base &= ~cs_bit;
89 91
90 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base); 92 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
91 } 93 }
@@ -118,11 +120,8 @@ static int ath79_spi_setup_cs(struct spi_device *spi)
118 struct ath79_spi *sp = ath79_spidev_to_sp(spi); 120 struct ath79_spi *sp = ath79_spidev_to_sp(spi);
119 int status; 121 int status;
120 122
121 if (spi->chip_select && !gpio_is_valid(spi->cs_gpio))
122 return -EINVAL;
123
124 status = 0; 123 status = 0;
125 if (spi->chip_select) { 124 if (gpio_is_valid(spi->cs_gpio)) {
126 unsigned long flags; 125 unsigned long flags;
127 126
128 flags = GPIOF_DIR_OUT; 127 flags = GPIOF_DIR_OUT;
@@ -134,10 +133,12 @@ static int ath79_spi_setup_cs(struct spi_device *spi)
134 status = gpio_request_one(spi->cs_gpio, flags, 133 status = gpio_request_one(spi->cs_gpio, flags,
135 dev_name(&spi->dev)); 134 dev_name(&spi->dev));
136 } else { 135 } else {
136 u32 cs_bit = AR71XX_SPI_IOC_CS(spi->chip_select);
137
137 if (spi->mode & SPI_CS_HIGH) 138 if (spi->mode & SPI_CS_HIGH)
138 sp->ioc_base &= ~AR71XX_SPI_IOC_CS0; 139 sp->ioc_base &= ~cs_bit;
139 else 140 else
140 sp->ioc_base |= AR71XX_SPI_IOC_CS0; 141 sp->ioc_base |= cs_bit;
141 142
142 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base); 143 ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
143 } 144 }
@@ -147,7 +148,7 @@ static int ath79_spi_setup_cs(struct spi_device *spi)
147 148
148static void ath79_spi_cleanup_cs(struct spi_device *spi) 149static void ath79_spi_cleanup_cs(struct spi_device *spi)
149{ 150{
150 if (spi->chip_select) { 151 if (gpio_is_valid(spi->cs_gpio)) {
151 gpio_free(spi->cs_gpio); 152 gpio_free(spi->cs_gpio);
152 } 153 }
153} 154}
diff --git a/drivers/spi/spi-axi-spi-engine.c b/drivers/spi/spi-axi-spi-engine.c
index 319225d7e761..6ab4c7700228 100644
--- a/drivers/spi/spi-axi-spi-engine.c
+++ b/drivers/spi/spi-axi-spi-engine.c
@@ -494,7 +494,8 @@ static int spi_engine_probe(struct platform_device *pdev)
494 SPI_ENGINE_VERSION_MAJOR(version), 494 SPI_ENGINE_VERSION_MAJOR(version),
495 SPI_ENGINE_VERSION_MINOR(version), 495 SPI_ENGINE_VERSION_MINOR(version),
496 SPI_ENGINE_VERSION_PATCH(version)); 496 SPI_ENGINE_VERSION_PATCH(version));
497 return -ENODEV; 497 ret = -ENODEV;
498 goto err_put_master;
498 } 499 }
499 500
500 spi_engine->clk = devm_clk_get(&pdev->dev, "s_axi_aclk"); 501 spi_engine->clk = devm_clk_get(&pdev->dev, "s_axi_aclk");
diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c
index 14f9dea3173f..958fb4ee972d 100644
--- a/drivers/spi/spi-bcm-qspi.c
+++ b/drivers/spi/spi-bcm-qspi.c
@@ -89,7 +89,7 @@
89#define BSPI_BPP_MODE_SELECT_MASK BIT(8) 89#define BSPI_BPP_MODE_SELECT_MASK BIT(8)
90#define BSPI_BPP_ADDR_SELECT_MASK BIT(16) 90#define BSPI_BPP_ADDR_SELECT_MASK BIT(16)
91 91
92#define BSPI_READ_LENGTH 256 92#define BSPI_READ_LENGTH 512
93 93
94/* MSPI register offsets */ 94/* MSPI register offsets */
95#define MSPI_SPCR0_LSB 0x000 95#define MSPI_SPCR0_LSB 0x000
@@ -192,9 +192,11 @@ struct bcm_qspi_dev_id {
192 void *dev; 192 void *dev;
193}; 193};
194 194
195
195struct qspi_trans { 196struct qspi_trans {
196 struct spi_transfer *trans; 197 struct spi_transfer *trans;
197 int byte; 198 int byte;
199 bool mspi_last_trans;
198}; 200};
199 201
200struct bcm_qspi { 202struct bcm_qspi {
@@ -616,6 +618,16 @@ static int bcm_qspi_setup(struct spi_device *spi)
616 return 0; 618 return 0;
617} 619}
618 620
621static bool bcm_qspi_mspi_transfer_is_last(struct bcm_qspi *qspi,
622 struct qspi_trans *qt)
623{
624 if (qt->mspi_last_trans &&
625 spi_transfer_is_last(qspi->master, qt->trans))
626 return true;
627 else
628 return false;
629}
630
619static int update_qspi_trans_byte_count(struct bcm_qspi *qspi, 631static int update_qspi_trans_byte_count(struct bcm_qspi *qspi,
620 struct qspi_trans *qt, int flags) 632 struct qspi_trans *qt, int flags)
621{ 633{
@@ -629,7 +641,6 @@ static int update_qspi_trans_byte_count(struct bcm_qspi *qspi,
629 641
630 if (qt->byte >= qt->trans->len) { 642 if (qt->byte >= qt->trans->len) {
631 /* we're at the end of the spi_transfer */ 643 /* we're at the end of the spi_transfer */
632
633 /* in TX mode, need to pause for a delay or CS change */ 644 /* in TX mode, need to pause for a delay or CS change */
634 if (qt->trans->delay_usecs && 645 if (qt->trans->delay_usecs &&
635 (flags & TRANS_STATUS_BREAK_DELAY)) 646 (flags & TRANS_STATUS_BREAK_DELAY))
@@ -641,7 +652,7 @@ static int update_qspi_trans_byte_count(struct bcm_qspi *qspi,
641 goto done; 652 goto done;
642 653
643 dev_dbg(&qspi->pdev->dev, "advance msg exit\n"); 654 dev_dbg(&qspi->pdev->dev, "advance msg exit\n");
644 if (spi_transfer_is_last(qspi->master, qt->trans)) 655 if (bcm_qspi_mspi_transfer_is_last(qspi, qt))
645 ret = TRANS_STATUS_BREAK_EOM; 656 ret = TRANS_STATUS_BREAK_EOM;
646 else 657 else
647 ret = TRANS_STATUS_BREAK_NO_BYTES; 658 ret = TRANS_STATUS_BREAK_NO_BYTES;
@@ -813,7 +824,7 @@ static int bcm_qspi_bspi_flash_read(struct spi_device *spi,
813 struct spi_flash_read_message *msg) 824 struct spi_flash_read_message *msg)
814{ 825{
815 struct bcm_qspi *qspi = spi_master_get_devdata(spi->master); 826 struct bcm_qspi *qspi = spi_master_get_devdata(spi->master);
816 u32 addr = 0, len, len_words; 827 u32 addr = 0, len, rdlen, len_words;
817 int ret = 0; 828 int ret = 0;
818 unsigned long timeo = msecs_to_jiffies(100); 829 unsigned long timeo = msecs_to_jiffies(100);
819 struct bcm_qspi_soc_intc *soc_intc = qspi->soc_intc; 830 struct bcm_qspi_soc_intc *soc_intc = qspi->soc_intc;
@@ -826,7 +837,7 @@ static int bcm_qspi_bspi_flash_read(struct spi_device *spi,
826 bcm_qspi_write(qspi, MSPI, MSPI_WRITE_LOCK, 0); 837 bcm_qspi_write(qspi, MSPI, MSPI_WRITE_LOCK, 0);
827 838
828 /* 839 /*
829 * when using flex mode mode we need to send 840 * when using flex mode we need to send
830 * the upper address byte to bspi 841 * the upper address byte to bspi
831 */ 842 */
832 if (bcm_qspi_bspi_ver_three(qspi) == false) { 843 if (bcm_qspi_bspi_ver_three(qspi) == false) {
@@ -840,48 +851,127 @@ static int bcm_qspi_bspi_flash_read(struct spi_device *spi,
840 else 851 else
841 addr = msg->from & 0x00ffffff; 852 addr = msg->from & 0x00ffffff;
842 853
843 /* set BSPI RAF buffer max read length */
844 len = msg->len;
845 if (len > BSPI_READ_LENGTH)
846 len = BSPI_READ_LENGTH;
847
848 if (bcm_qspi_bspi_ver_three(qspi) == true) 854 if (bcm_qspi_bspi_ver_three(qspi) == true)
849 addr = (addr + 0xc00000) & 0xffffff; 855 addr = (addr + 0xc00000) & 0xffffff;
850 856
851 reinit_completion(&qspi->bspi_done); 857 /*
852 bcm_qspi_enable_bspi(qspi); 858 * read into the entire buffer by breaking the reads
853 len_words = (len + 3) >> 2; 859 * into RAF buffer read lengths
854 qspi->bspi_rf_msg = msg; 860 */
855 qspi->bspi_rf_msg_status = 0; 861 len = msg->len;
856 qspi->bspi_rf_msg_idx = 0; 862 qspi->bspi_rf_msg_idx = 0;
857 qspi->bspi_rf_msg_len = len;
858 dev_dbg(&qspi->pdev->dev, "bspi xfr addr 0x%x len 0x%x", addr, len);
859 863
860 bcm_qspi_write(qspi, BSPI, BSPI_RAF_START_ADDR, addr); 864 do {
861 bcm_qspi_write(qspi, BSPI, BSPI_RAF_NUM_WORDS, len_words); 865 if (len > BSPI_READ_LENGTH)
862 bcm_qspi_write(qspi, BSPI, BSPI_RAF_WATERMARK, 0); 866 rdlen = BSPI_READ_LENGTH;
867 else
868 rdlen = len;
869
870 reinit_completion(&qspi->bspi_done);
871 bcm_qspi_enable_bspi(qspi);
872 len_words = (rdlen + 3) >> 2;
873 qspi->bspi_rf_msg = msg;
874 qspi->bspi_rf_msg_status = 0;
875 qspi->bspi_rf_msg_len = rdlen;
876 dev_dbg(&qspi->pdev->dev,
877 "bspi xfr addr 0x%x len 0x%x", addr, rdlen);
878 bcm_qspi_write(qspi, BSPI, BSPI_RAF_START_ADDR, addr);
879 bcm_qspi_write(qspi, BSPI, BSPI_RAF_NUM_WORDS, len_words);
880 bcm_qspi_write(qspi, BSPI, BSPI_RAF_WATERMARK, 0);
881 if (qspi->soc_intc) {
882 /*
883 * clear soc MSPI and BSPI interrupts and enable
884 * BSPI interrupts.
885 */
886 soc_intc->bcm_qspi_int_ack(soc_intc, MSPI_BSPI_DONE);
887 soc_intc->bcm_qspi_int_set(soc_intc, BSPI_DONE, true);
888 }
863 889
864 if (qspi->soc_intc) { 890 /* Must flush previous writes before starting BSPI operation */
865 /* 891 mb();
866 * clear soc MSPI and BSPI interrupts and enable 892 bcm_qspi_bspi_lr_start(qspi);
867 * BSPI interrupts. 893 if (!wait_for_completion_timeout(&qspi->bspi_done, timeo)) {
868 */ 894 dev_err(&qspi->pdev->dev, "timeout waiting for BSPI\n");
869 soc_intc->bcm_qspi_int_ack(soc_intc, MSPI_BSPI_DONE); 895 ret = -ETIMEDOUT;
870 soc_intc->bcm_qspi_int_set(soc_intc, BSPI_DONE, true); 896 break;
897 }
898
899 /* set msg return length */
900 msg->retlen += rdlen;
901 addr += rdlen;
902 len -= rdlen;
903 } while (len);
904
905 return ret;
906}
907
908static int bcm_qspi_transfer_one(struct spi_master *master,
909 struct spi_device *spi,
910 struct spi_transfer *trans)
911{
912 struct bcm_qspi *qspi = spi_master_get_devdata(master);
913 int slots;
914 unsigned long timeo = msecs_to_jiffies(100);
915
916 bcm_qspi_chip_select(qspi, spi->chip_select);
917 qspi->trans_pos.trans = trans;
918 qspi->trans_pos.byte = 0;
919
920 while (qspi->trans_pos.byte < trans->len) {
921 reinit_completion(&qspi->mspi_done);
922
923 slots = write_to_hw(qspi, spi);
924 if (!wait_for_completion_timeout(&qspi->mspi_done, timeo)) {
925 dev_err(&qspi->pdev->dev, "timeout waiting for MSPI\n");
926 return -ETIMEDOUT;
927 }
928
929 read_from_hw(qspi, slots);
871 } 930 }
872 931
873 /* Must flush previous writes before starting BSPI operation */ 932 return 0;
874 mb(); 933}
875 934
876 bcm_qspi_bspi_lr_start(qspi); 935static int bcm_qspi_mspi_flash_read(struct spi_device *spi,
877 if (!wait_for_completion_timeout(&qspi->bspi_done, timeo)) { 936 struct spi_flash_read_message *msg)
878 dev_err(&qspi->pdev->dev, "timeout waiting for BSPI\n"); 937{
879 ret = -ETIMEDOUT; 938 struct bcm_qspi *qspi = spi_master_get_devdata(spi->master);
880 } else { 939 struct spi_transfer t[2];
881 /* set the return length for the caller */ 940 u8 cmd[6];
882 msg->retlen = len; 941 int ret;
942
943 memset(cmd, 0, sizeof(cmd));
944 memset(t, 0, sizeof(t));
945
946 /* tx */
947 /* opcode is in cmd[0] */
948 cmd[0] = msg->read_opcode;
949 cmd[1] = msg->from >> (msg->addr_width * 8 - 8);
950 cmd[2] = msg->from >> (msg->addr_width * 8 - 16);
951 cmd[3] = msg->from >> (msg->addr_width * 8 - 24);
952 cmd[4] = msg->from >> (msg->addr_width * 8 - 32);
953 t[0].tx_buf = cmd;
954 t[0].len = msg->addr_width + msg->dummy_bytes + 1;
955 t[0].bits_per_word = spi->bits_per_word;
956 t[0].tx_nbits = msg->opcode_nbits;
957 /* lets mspi know that this is not last transfer */
958 qspi->trans_pos.mspi_last_trans = false;
959 ret = bcm_qspi_transfer_one(spi->master, spi, &t[0]);
960
961 /* rx */
962 qspi->trans_pos.mspi_last_trans = true;
963 if (!ret) {
964 /* rx */
965 t[1].rx_buf = msg->buf;
966 t[1].len = msg->len;
967 t[1].rx_nbits = msg->data_nbits;
968 t[1].bits_per_word = spi->bits_per_word;
969 ret = bcm_qspi_transfer_one(spi->master, spi, &t[1]);
883 } 970 }
884 971
972 if (!ret)
973 msg->retlen = msg->len;
974
885 return ret; 975 return ret;
886} 976}
887 977
@@ -918,8 +1008,7 @@ static int bcm_qspi_flash_read(struct spi_device *spi,
918 mspi_read = true; 1008 mspi_read = true;
919 1009
920 if (mspi_read) 1010 if (mspi_read)
921 /* this will make the m25p80 read to fallback to mspi read */ 1011 return bcm_qspi_mspi_flash_read(spi, msg);
922 return -EAGAIN;
923 1012
924 io_width = msg->data_nbits ? msg->data_nbits : SPI_NBITS_SINGLE; 1013 io_width = msg->data_nbits ? msg->data_nbits : SPI_NBITS_SINGLE;
925 addrlen = msg->addr_width; 1014 addrlen = msg->addr_width;
@@ -931,33 +1020,6 @@ static int bcm_qspi_flash_read(struct spi_device *spi,
931 return ret; 1020 return ret;
932} 1021}
933 1022
934static int bcm_qspi_transfer_one(struct spi_master *master,
935 struct spi_device *spi,
936 struct spi_transfer *trans)
937{
938 struct bcm_qspi *qspi = spi_master_get_devdata(master);
939 int slots;
940 unsigned long timeo = msecs_to_jiffies(100);
941
942 bcm_qspi_chip_select(qspi, spi->chip_select);
943 qspi->trans_pos.trans = trans;
944 qspi->trans_pos.byte = 0;
945
946 while (qspi->trans_pos.byte < trans->len) {
947 reinit_completion(&qspi->mspi_done);
948
949 slots = write_to_hw(qspi, spi);
950 if (!wait_for_completion_timeout(&qspi->mspi_done, timeo)) {
951 dev_err(&qspi->pdev->dev, "timeout waiting for MSPI\n");
952 return -ETIMEDOUT;
953 }
954
955 read_from_hw(qspi, slots);
956 }
957
958 return 0;
959}
960
961static void bcm_qspi_cleanup(struct spi_device *spi) 1023static void bcm_qspi_cleanup(struct spi_device *spi)
962{ 1024{
963 struct bcm_qspi_parms *xp = spi_get_ctldata(spi); 1025 struct bcm_qspi_parms *xp = spi_get_ctldata(spi);
@@ -1187,6 +1249,7 @@ int bcm_qspi_probe(struct platform_device *pdev,
1187 qspi->pdev = pdev; 1249 qspi->pdev = pdev;
1188 qspi->trans_pos.trans = NULL; 1250 qspi->trans_pos.trans = NULL;
1189 qspi->trans_pos.byte = 0; 1251 qspi->trans_pos.byte = 0;
1252 qspi->trans_pos.mspi_last_trans = true;
1190 qspi->master = master; 1253 qspi->master = master;
1191 1254
1192 master->bus_num = -1; 1255 master->bus_num = -1;
@@ -1345,7 +1408,6 @@ int bcm_qspi_remove(struct platform_device *pdev)
1345{ 1408{
1346 struct bcm_qspi *qspi = platform_get_drvdata(pdev); 1409 struct bcm_qspi *qspi = platform_get_drvdata(pdev);
1347 1410
1348 platform_set_drvdata(pdev, NULL);
1349 bcm_qspi_hw_uninit(qspi); 1411 bcm_qspi_hw_uninit(qspi);
1350 clk_disable_unprepare(qspi->clk); 1412 clk_disable_unprepare(qspi->clk);
1351 kfree(qspi->dev_ids); 1413 kfree(qspi->dev_ids);
diff --git a/drivers/spi/spi-bcm53xx.c b/drivers/spi/spi-bcm53xx.c
index afb51699dbb5..6e409eabe1c9 100644
--- a/drivers/spi/spi-bcm53xx.c
+++ b/drivers/spi/spi-bcm53xx.c
@@ -1,3 +1,11 @@
1/*
2 * Copyright (C) 2014-2016 Rafał Miłecki <rafal@milecki.pl>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
1#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 9#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
2 10
3#include <linux/kernel.h> 11#include <linux/kernel.h>
@@ -275,10 +283,6 @@ static int bcm53xxspi_flash_read(struct spi_device *spi,
275 * BCMA 283 * BCMA
276 **************************************************/ 284 **************************************************/
277 285
278static struct spi_board_info bcm53xx_info = {
279 .modalias = "bcm53xxspiflash",
280};
281
282static const struct bcma_device_id bcm53xxspi_bcma_tbl[] = { 286static const struct bcma_device_id bcm53xxspi_bcma_tbl[] = {
283 BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_NS_QSPI, BCMA_ANY_REV, BCMA_ANY_CLASS), 287 BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_NS_QSPI, BCMA_ANY_REV, BCMA_ANY_CLASS),
284 {}, 288 {},
@@ -311,6 +315,7 @@ static int bcm53xxspi_bcma_probe(struct bcma_device *core)
311 b53spi->bspi = true; 315 b53spi->bspi = true;
312 bcm53xxspi_disable_bspi(b53spi); 316 bcm53xxspi_disable_bspi(b53spi);
313 317
318 master->dev.of_node = dev->of_node;
314 master->transfer_one = bcm53xxspi_transfer_one; 319 master->transfer_one = bcm53xxspi_transfer_one;
315 if (b53spi->mmio_base) 320 if (b53spi->mmio_base)
316 master->spi_flash_read = bcm53xxspi_flash_read; 321 master->spi_flash_read = bcm53xxspi_flash_read;
@@ -324,9 +329,6 @@ static int bcm53xxspi_bcma_probe(struct bcma_device *core)
324 return err; 329 return err;
325 } 330 }
326 331
327 /* Broadcom SoCs (at least with the CC rev 42) use SPI for flash only */
328 spi_new_device(master, &bcm53xx_info);
329
330 return 0; 332 return 0;
331} 333}
332 334
@@ -361,4 +363,4 @@ module_exit(bcm53xxspi_module_exit);
361 363
362MODULE_DESCRIPTION("Broadcom BCM53xx SPI Controller driver"); 364MODULE_DESCRIPTION("Broadcom BCM53xx SPI Controller driver");
363MODULE_AUTHOR("Rafał Miłecki <zajec5@gmail.com>"); 365MODULE_AUTHOR("Rafał Miłecki <zajec5@gmail.com>");
364MODULE_LICENSE("GPL"); 366MODULE_LICENSE("GPL v2");
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index d36c11b73a35..02fb96797ac8 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -646,7 +646,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
646 buf = t->rx_buf; 646 buf = t->rx_buf;
647 t->rx_dma = dma_map_single(&spi->dev, buf, 647 t->rx_dma = dma_map_single(&spi->dev, buf,
648 t->len, DMA_FROM_DEVICE); 648 t->len, DMA_FROM_DEVICE);
649 if (!t->rx_dma) { 649 if (dma_mapping_error(&spi->dev, !t->rx_dma)) {
650 ret = -EFAULT; 650 ret = -EFAULT;
651 goto err_rx_map; 651 goto err_rx_map;
652 } 652 }
@@ -660,7 +660,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
660 buf = (void *)t->tx_buf; 660 buf = (void *)t->tx_buf;
661 t->tx_dma = dma_map_single(&spi->dev, buf, 661 t->tx_dma = dma_map_single(&spi->dev, buf,
662 t->len, DMA_TO_DEVICE); 662 t->len, DMA_TO_DEVICE);
663 if (!t->tx_dma) { 663 if (dma_mapping_error(&spi->dev, t->tx_dma)) {
664 ret = -EFAULT; 664 ret = -EFAULT;
665 goto err_tx_map; 665 goto err_tx_map;
666 } 666 }
diff --git a/drivers/spi/spi-dw-mid.c b/drivers/spi/spi-dw-mid.c
index e31971f91475..837cb8d0bac6 100644
--- a/drivers/spi/spi-dw-mid.c
+++ b/drivers/spi/spi-dw-mid.c
@@ -274,11 +274,11 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer)
274static void mid_spi_dma_stop(struct dw_spi *dws) 274static void mid_spi_dma_stop(struct dw_spi *dws)
275{ 275{
276 if (test_bit(TX_BUSY, &dws->dma_chan_busy)) { 276 if (test_bit(TX_BUSY, &dws->dma_chan_busy)) {
277 dmaengine_terminate_all(dws->txchan); 277 dmaengine_terminate_sync(dws->txchan);
278 clear_bit(TX_BUSY, &dws->dma_chan_busy); 278 clear_bit(TX_BUSY, &dws->dma_chan_busy);
279 } 279 }
280 if (test_bit(RX_BUSY, &dws->dma_chan_busy)) { 280 if (test_bit(RX_BUSY, &dws->dma_chan_busy)) {
281 dmaengine_terminate_all(dws->rxchan); 281 dmaengine_terminate_sync(dws->rxchan);
282 clear_bit(RX_BUSY, &dws->dma_chan_busy); 282 clear_bit(RX_BUSY, &dws->dma_chan_busy);
283 } 283 }
284} 284}
diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
index b715a26a9148..b217c22ff72f 100644
--- a/drivers/spi/spi-dw.c
+++ b/drivers/spi/spi-dw.c
@@ -107,7 +107,10 @@ static const struct file_operations dw_spi_regs_ops = {
107 107
108static int dw_spi_debugfs_init(struct dw_spi *dws) 108static int dw_spi_debugfs_init(struct dw_spi *dws)
109{ 109{
110 dws->debugfs = debugfs_create_dir("dw_spi", NULL); 110 char name[32];
111
112 snprintf(name, 32, "dw_spi%d", dws->master->bus_num);
113 dws->debugfs = debugfs_create_dir(name, NULL);
111 if (!dws->debugfs) 114 if (!dws->debugfs)
112 return -ENOMEM; 115 return -ENOMEM;
113 116
@@ -483,9 +486,9 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
483 dws->type = SSI_MOTO_SPI; 486 dws->type = SSI_MOTO_SPI;
484 dws->dma_inited = 0; 487 dws->dma_inited = 0;
485 dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR); 488 dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR);
486 snprintf(dws->name, sizeof(dws->name), "dw_spi%d", dws->bus_num);
487 489
488 ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, dws->name, master); 490 ret = request_irq(dws->irq, dw_spi_irq, IRQF_SHARED, dev_name(dev),
491 master);
489 if (ret < 0) { 492 if (ret < 0) {
490 dev_err(dev, "can not get IRQ\n"); 493 dev_err(dev, "can not get IRQ\n");
491 goto err_free_master; 494 goto err_free_master;
diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h
index c21ca02f8ec5..da5eab62df34 100644
--- a/drivers/spi/spi-dw.h
+++ b/drivers/spi/spi-dw.h
@@ -101,7 +101,6 @@ struct dw_spi_dma_ops {
101struct dw_spi { 101struct dw_spi {
102 struct spi_master *master; 102 struct spi_master *master;
103 enum dw_ssi_type type; 103 enum dw_ssi_type type;
104 char name[16];
105 104
106 void __iomem *regs; 105 void __iomem *regs;
107 unsigned long paddr; 106 unsigned long paddr;
diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c
index 52551f6d0c7d..cb3c73007ca1 100644
--- a/drivers/spi/spi-fsl-lpspi.c
+++ b/drivers/spi/spi-fsl-lpspi.c
@@ -366,7 +366,7 @@ static int fsl_lpspi_transfer_one_msg(struct spi_master *master,
366 struct spi_transfer *xfer; 366 struct spi_transfer *xfer;
367 bool is_first_xfer = true; 367 bool is_first_xfer = true;
368 u32 temp; 368 u32 temp;
369 int ret; 369 int ret = 0;
370 370
371 msg->status = 0; 371 msg->status = 0;
372 msg->actual_length = 0; 372 msg->actual_length = 0;
@@ -512,9 +512,9 @@ static int fsl_lpspi_remove(struct platform_device *pdev)
512 512
513static struct platform_driver fsl_lpspi_driver = { 513static struct platform_driver fsl_lpspi_driver = {
514 .driver = { 514 .driver = {
515 .name = DRIVER_NAME, 515 .name = DRIVER_NAME,
516 .of_match_table = fsl_lpspi_dt_ids, 516 .of_match_table = fsl_lpspi_dt_ids,
517 }, 517 },
518 .probe = fsl_lpspi_probe, 518 .probe = fsl_lpspi_probe,
519 .remove = fsl_lpspi_remove, 519 .remove = fsl_lpspi_remove,
520}; 520};
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
index 8b290d9d7935..0fc3452652ae 100644
--- a/drivers/spi/spi-fsl-spi.c
+++ b/drivers/spi/spi-fsl-spi.c
@@ -267,10 +267,9 @@ static int fsl_spi_setup_transfer(struct spi_device *spi,
267 if ((mpc8xxx_spi->spibrg / hz) > 64) { 267 if ((mpc8xxx_spi->spibrg / hz) > 64) {
268 cs->hw_mode |= SPMODE_DIV16; 268 cs->hw_mode |= SPMODE_DIV16;
269 pm = (mpc8xxx_spi->spibrg - 1) / (hz * 64) + 1; 269 pm = (mpc8xxx_spi->spibrg - 1) / (hz * 64) + 1;
270 270 WARN_ONCE(pm > 16,
271 WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. " 271 "%s: Requested speed is too low: %d Hz. Will use %d Hz instead.\n",
272 "Will use %d Hz instead.\n", dev_name(&spi->dev), 272 dev_name(&spi->dev), hz, mpc8xxx_spi->spibrg / 1024);
273 hz, mpc8xxx_spi->spibrg / 1024);
274 if (pm > 16) 273 if (pm > 16)
275 pm = 16; 274 pm = 16;
276 } else { 275 } else {
@@ -727,12 +726,13 @@ static int of_fsl_spi_get_chipselects(struct device *dev)
727 return 0; 726 return 0;
728 } 727 }
729 728
730 pinfo->gpios = kmalloc(ngpios * sizeof(*pinfo->gpios), GFP_KERNEL); 729 pinfo->gpios = kmalloc_array(ngpios, sizeof(*pinfo->gpios),
730 GFP_KERNEL);
731 if (!pinfo->gpios) 731 if (!pinfo->gpios)
732 return -ENOMEM; 732 return -ENOMEM;
733 memset(pinfo->gpios, -1, ngpios * sizeof(*pinfo->gpios)); 733 memset(pinfo->gpios, -1, ngpios * sizeof(*pinfo->gpios));
734 734
735 pinfo->alow_flags = kzalloc(ngpios * sizeof(*pinfo->alow_flags), 735 pinfo->alow_flags = kcalloc(ngpios, sizeof(*pinfo->alow_flags),
736 GFP_KERNEL); 736 GFP_KERNEL);
737 if (!pinfo->alow_flags) { 737 if (!pinfo->alow_flags) {
738 ret = -ENOMEM; 738 ret = -ENOMEM;
@@ -762,8 +762,9 @@ static int of_fsl_spi_get_chipselects(struct device *dev)
762 ret = gpio_direction_output(pinfo->gpios[i], 762 ret = gpio_direction_output(pinfo->gpios[i],
763 pinfo->alow_flags[i]); 763 pinfo->alow_flags[i]);
764 if (ret) { 764 if (ret) {
765 dev_err(dev, "can't set output direction for gpio " 765 dev_err(dev,
766 "#%d: %d\n", i, ret); 766 "can't set output direction for gpio #%d: %d\n",
767 i, ret);
767 goto err_loop; 768 goto err_loop;
768 } 769 }
769 } 770 }
diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c
index 899d7a8f0889..278867a31950 100644
--- a/drivers/spi/spi-mt65xx.c
+++ b/drivers/spi/spi-mt65xx.c
@@ -73,7 +73,7 @@
73#define MTK_SPI_IDLE 0 73#define MTK_SPI_IDLE 0
74#define MTK_SPI_PAUSED 1 74#define MTK_SPI_PAUSED 1
75 75
76#define MTK_SPI_MAX_FIFO_SIZE 32 76#define MTK_SPI_MAX_FIFO_SIZE 32U
77#define MTK_SPI_PACKET_SIZE 1024 77#define MTK_SPI_PACKET_SIZE 1024
78 78
79struct mtk_spi_compatible { 79struct mtk_spi_compatible {
@@ -333,7 +333,7 @@ static int mtk_spi_fifo_transfer(struct spi_master *master,
333 struct mtk_spi *mdata = spi_master_get_devdata(master); 333 struct mtk_spi *mdata = spi_master_get_devdata(master);
334 334
335 mdata->cur_transfer = xfer; 335 mdata->cur_transfer = xfer;
336 mdata->xfer_len = xfer->len; 336 mdata->xfer_len = min(MTK_SPI_MAX_FIFO_SIZE, xfer->len);
337 mtk_spi_prepare_transfer(master, xfer); 337 mtk_spi_prepare_transfer(master, xfer);
338 mtk_spi_setup_packet(master); 338 mtk_spi_setup_packet(master);
339 339
@@ -410,7 +410,10 @@ static bool mtk_spi_can_dma(struct spi_master *master,
410 struct spi_device *spi, 410 struct spi_device *spi,
411 struct spi_transfer *xfer) 411 struct spi_transfer *xfer)
412{ 412{
413 return xfer->len > MTK_SPI_MAX_FIFO_SIZE; 413 /* Buffers for DMA transactions must be 4-byte aligned */
414 return (xfer->len > MTK_SPI_MAX_FIFO_SIZE &&
415 (unsigned long)xfer->tx_buf % 4 == 0 &&
416 (unsigned long)xfer->rx_buf % 4 == 0);
414} 417}
415 418
416static int mtk_spi_setup(struct spi_device *spi) 419static int mtk_spi_setup(struct spi_device *spi)
@@ -451,7 +454,33 @@ static irqreturn_t mtk_spi_interrupt(int irq, void *dev_id)
451 &reg_val, remainder); 454 &reg_val, remainder);
452 } 455 }
453 } 456 }
454 spi_finalize_current_transfer(master); 457
458 trans->len -= mdata->xfer_len;
459 if (!trans->len) {
460 spi_finalize_current_transfer(master);
461 return IRQ_HANDLED;
462 }
463
464 if (trans->tx_buf)
465 trans->tx_buf += mdata->xfer_len;
466 if (trans->rx_buf)
467 trans->rx_buf += mdata->xfer_len;
468
469 mdata->xfer_len = min(MTK_SPI_MAX_FIFO_SIZE, trans->len);
470 mtk_spi_setup_packet(master);
471
472 cnt = trans->len / 4;
473 iowrite32_rep(mdata->base + SPI_TX_DATA_REG, trans->tx_buf, cnt);
474
475 remainder = trans->len % 4;
476 if (remainder > 0) {
477 reg_val = 0;
478 memcpy(&reg_val, trans->tx_buf + (cnt * 4), remainder);
479 writel(reg_val, mdata->base + SPI_TX_DATA_REG);
480 }
481
482 mtk_spi_enable_transfer(master);
483
455 return IRQ_HANDLED; 484 return IRQ_HANDLED;
456 } 485 }
457 486
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index dd7b5b47291d..3f3751e2b521 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1458,6 +1458,10 @@ static const struct pci_device_id pxa2xx_spi_pci_compound_match[] = {
1458 { PCI_VDEVICE(INTEL, 0x1ac2), LPSS_BXT_SSP }, 1458 { PCI_VDEVICE(INTEL, 0x1ac2), LPSS_BXT_SSP },
1459 { PCI_VDEVICE(INTEL, 0x1ac4), LPSS_BXT_SSP }, 1459 { PCI_VDEVICE(INTEL, 0x1ac4), LPSS_BXT_SSP },
1460 { PCI_VDEVICE(INTEL, 0x1ac6), LPSS_BXT_SSP }, 1460 { PCI_VDEVICE(INTEL, 0x1ac6), LPSS_BXT_SSP },
1461 /* GLK */
1462 { PCI_VDEVICE(INTEL, 0x31c2), LPSS_BXT_SSP },
1463 { PCI_VDEVICE(INTEL, 0x31c4), LPSS_BXT_SSP },
1464 { PCI_VDEVICE(INTEL, 0x31c6), LPSS_BXT_SSP },
1461 /* APL */ 1465 /* APL */
1462 { PCI_VDEVICE(INTEL, 0x5ac2), LPSS_BXT_SSP }, 1466 { PCI_VDEVICE(INTEL, 0x5ac2), LPSS_BXT_SSP },
1463 { PCI_VDEVICE(INTEL, 0x5ac4), LPSS_BXT_SSP }, 1467 { PCI_VDEVICE(INTEL, 0x5ac4), LPSS_BXT_SSP },
@@ -1690,6 +1694,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
1690 pxa2xx_spi_write(drv_data, SSCR1, tmp); 1694 pxa2xx_spi_write(drv_data, SSCR1, tmp);
1691 tmp = SSCR0_SCR(2) | SSCR0_Motorola | SSCR0_DataSize(8); 1695 tmp = SSCR0_SCR(2) | SSCR0_Motorola | SSCR0_DataSize(8);
1692 pxa2xx_spi_write(drv_data, SSCR0, tmp); 1696 pxa2xx_spi_write(drv_data, SSCR0, tmp);
1697 break;
1693 default: 1698 default:
1694 tmp = SSCR1_RxTresh(RX_THRESH_DFLT) | 1699 tmp = SSCR1_RxTresh(RX_THRESH_DFLT) |
1695 SSCR1_TxTresh(TX_THRESH_DFLT); 1700 SSCR1_TxTresh(TX_THRESH_DFLT);
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
index 9daf50031737..bc3c8686f4d9 100644
--- a/drivers/spi/spi-rspi.c
+++ b/drivers/spi/spi-rspi.c
@@ -808,7 +808,7 @@ static int qspi_transfer_out(struct rspi_data *rspi, struct spi_transfer *xfer)
808 for (i = 0; i < len; i++) 808 for (i = 0; i < len; i++)
809 rspi_write_data(rspi, *tx++); 809 rspi_write_data(rspi, *tx++);
810 } else { 810 } else {
811 ret = rspi_pio_transfer(rspi, tx, NULL, n); 811 ret = rspi_pio_transfer(rspi, tx, NULL, len);
812 if (ret < 0) 812 if (ret < 0)
813 return ret; 813 return ret;
814 } 814 }
@@ -845,10 +845,9 @@ static int qspi_transfer_in(struct rspi_data *rspi, struct spi_transfer *xfer)
845 for (i = 0; i < len; i++) 845 for (i = 0; i < len; i++)
846 *rx++ = rspi_read_data(rspi); 846 *rx++ = rspi_read_data(rspi);
847 } else { 847 } else {
848 ret = rspi_pio_transfer(rspi, NULL, rx, n); 848 ret = rspi_pio_transfer(rspi, NULL, rx, len);
849 if (ret < 0) 849 if (ret < 0)
850 return ret; 850 return ret;
851 *rx++ = ret;
852 } 851 }
853 n -= len; 852 n -= len;
854 } 853 }
diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
index 3c09e94cf827..186342b74141 100644
--- a/drivers/spi/spi-s3c64xx.c
+++ b/drivers/spi/spi-s3c64xx.c
@@ -1003,7 +1003,7 @@ static struct s3c64xx_spi_info *s3c64xx_spi_parse_dt(struct device *dev)
1003 sci->num_cs = temp; 1003 sci->num_cs = temp;
1004 } 1004 }
1005 1005
1006 sci->no_cs = of_property_read_bool(dev->of_node, "broken-cs"); 1006 sci->no_cs = of_property_read_bool(dev->of_node, "no-cs-readback");
1007 1007
1008 return sci; 1008 return sci;
1009} 1009}
diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
index 0012ad02e569..1f00eeb0b5a3 100644
--- a/drivers/spi/spi-sh-msiof.c
+++ b/drivers/spi/spi-sh-msiof.c
@@ -973,14 +973,16 @@ static const struct sh_msiof_chipdata r8a779x_data = {
973}; 973};
974 974
975static const struct of_device_id sh_msiof_match[] = { 975static const struct of_device_id sh_msiof_match[] = {
976 { .compatible = "renesas,sh-msiof", .data = &sh_data },
977 { .compatible = "renesas,sh-mobile-msiof", .data = &sh_data }, 976 { .compatible = "renesas,sh-mobile-msiof", .data = &sh_data },
978 { .compatible = "renesas,msiof-r8a7790", .data = &r8a779x_data }, 977 { .compatible = "renesas,msiof-r8a7790", .data = &r8a779x_data },
979 { .compatible = "renesas,msiof-r8a7791", .data = &r8a779x_data }, 978 { .compatible = "renesas,msiof-r8a7791", .data = &r8a779x_data },
980 { .compatible = "renesas,msiof-r8a7792", .data = &r8a779x_data }, 979 { .compatible = "renesas,msiof-r8a7792", .data = &r8a779x_data },
981 { .compatible = "renesas,msiof-r8a7793", .data = &r8a779x_data }, 980 { .compatible = "renesas,msiof-r8a7793", .data = &r8a779x_data },
982 { .compatible = "renesas,msiof-r8a7794", .data = &r8a779x_data }, 981 { .compatible = "renesas,msiof-r8a7794", .data = &r8a779x_data },
982 { .compatible = "renesas,rcar-gen2-msiof", .data = &r8a779x_data },
983 { .compatible = "renesas,msiof-r8a7796", .data = &r8a779x_data }, 983 { .compatible = "renesas,msiof-r8a7796", .data = &r8a779x_data },
984 { .compatible = "renesas,rcar-gen3-msiof", .data = &r8a779x_data },
985 { .compatible = "renesas,sh-msiof", .data = &sh_data }, /* Deprecated */
984 {}, 986 {},
985}; 987};
986MODULE_DEVICE_TABLE(of, sh_msiof_match); 988MODULE_DEVICE_TABLE(of, sh_msiof_match);
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 656dd3e3220c..e70955339d33 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -621,8 +621,10 @@ void spi_unregister_device(struct spi_device *spi)
621 if (!spi) 621 if (!spi)
622 return; 622 return;
623 623
624 if (spi->dev.of_node) 624 if (spi->dev.of_node) {
625 of_node_clear_flag(spi->dev.of_node, OF_POPULATED); 625 of_node_clear_flag(spi->dev.of_node, OF_POPULATED);
626 of_node_put(spi->dev.of_node);
627 }
626 if (ACPI_COMPANION(&spi->dev)) 628 if (ACPI_COMPANION(&spi->dev))
627 acpi_device_clear_enumerated(ACPI_COMPANION(&spi->dev)); 629 acpi_device_clear_enumerated(ACPI_COMPANION(&spi->dev));
628 device_unregister(&spi->dev); 630 device_unregister(&spi->dev);
@@ -672,7 +674,7 @@ int spi_register_board_info(struct spi_board_info const *info, unsigned n)
672 if (!n) 674 if (!n)
673 return -EINVAL; 675 return -EINVAL;
674 676
675 bi = kzalloc(n * sizeof(*bi), GFP_KERNEL); 677 bi = kcalloc(n, sizeof(*bi), GFP_KERNEL);
676 if (!bi) 678 if (!bi)
677 return -ENOMEM; 679 return -ENOMEM;
678 680
@@ -805,12 +807,12 @@ static int __spi_map_msg(struct spi_master *master, struct spi_message *msg)
805 if (master->dma_tx) 807 if (master->dma_tx)
806 tx_dev = master->dma_tx->device->dev; 808 tx_dev = master->dma_tx->device->dev;
807 else 809 else
808 tx_dev = &master->dev; 810 tx_dev = master->dev.parent;
809 811
810 if (master->dma_rx) 812 if (master->dma_rx)
811 rx_dev = master->dma_rx->device->dev; 813 rx_dev = master->dma_rx->device->dev;
812 else 814 else
813 rx_dev = &master->dev; 815 rx_dev = master->dev.parent;
814 816
815 list_for_each_entry(xfer, &msg->transfers, transfer_list) { 817 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
816 if (!master->can_dma(master, msg->spi, xfer)) 818 if (!master->can_dma(master, msg->spi, xfer))
@@ -852,12 +854,12 @@ static int __spi_unmap_msg(struct spi_master *master, struct spi_message *msg)
852 if (master->dma_tx) 854 if (master->dma_tx)
853 tx_dev = master->dma_tx->device->dev; 855 tx_dev = master->dma_tx->device->dev;
854 else 856 else
855 tx_dev = &master->dev; 857 tx_dev = master->dev.parent;
856 858
857 if (master->dma_rx) 859 if (master->dma_rx)
858 rx_dev = master->dma_rx->device->dev; 860 rx_dev = master->dma_rx->device->dev;
859 else 861 else
860 rx_dev = &master->dev; 862 rx_dev = master->dev.parent;
861 863
862 list_for_each_entry(xfer, &msg->transfers, transfer_list) { 864 list_for_each_entry(xfer, &msg->transfers, transfer_list) {
863 if (!master->can_dma(master, msg->spi, xfer)) 865 if (!master->can_dma(master, msg->spi, xfer))
@@ -1603,11 +1605,13 @@ of_register_spi_device(struct spi_master *master, struct device_node *nc)
1603 if (rc) { 1605 if (rc) {
1604 dev_err(&master->dev, "spi_device register error %s\n", 1606 dev_err(&master->dev, "spi_device register error %s\n",
1605 nc->full_name); 1607 nc->full_name);
1606 goto err_out; 1608 goto err_of_node_put;
1607 } 1609 }
1608 1610
1609 return spi; 1611 return spi;
1610 1612
1613err_of_node_put:
1614 of_node_put(nc);
1611err_out: 1615err_out:
1612 spi_dev_put(spi); 1616 spi_dev_put(spi);
1613 return ERR_PTR(rc); 1617 return ERR_PTR(rc);