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

Merge tag 'spi-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi

Pull spi updates from Mark Brown:
"One small core feature this time around but mostly driver improvements
and additions for SPI:

- Add support for controlling the idle state of MOSI, some systems
can support this and depending on the system integration may need
it to avoid glitching in some situations

- Support for polling mode in the S3C64xx driver and DMA on the
Qualcomm QSPI driver

- Support for several Allwinner SoCs, AMD Pensando Elba, Intel Mount
Evans, Renesas RZ/V2M, and ST STM32H7"

* tag 'spi-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi: (66 commits)
spi: dt-bindings: atmel,at91rm9200-spi: fix broken sam9x7 compatible
spi: dt-bindings: atmel,at91rm9200-spi: add sam9x7 compatible
spi: Add support for Renesas CSI
spi: dt-bindings: Add bindings for RZ/V2M CSI
spi: sun6i: Use the new helper to derive the xfer timeout value
spi: atmel: Prevent false timeouts on long transfers
spi: dt-bindings: stm32: do not disable spi-slave property for stm32f4-f7
spi: Create a helper to derive adaptive timeouts
spi: spi-geni-qcom: correctly handle -EPROBE_DEFER from dma_request_chan()
spi: stm32: disable spi-slave property for stm32f4-f7
spi: stm32: introduction of stm32h7 SPI device mode support
spi: stm32: use dmaengine_terminate_{a}sync instead of _all
spi: stm32: renaming of spi_master into spi_controller
spi: dw: Remove misleading comment for Mount Evans SoC
spi: dt-bindings: snps,dw-apb-ssi: Add compatible for Intel Mount Evans SoC
spi: dw: Add compatible for Intel Mount Evans SoC
spi: s3c64xx: Use dev_err_probe()
spi: s3c64xx: Use the managed spi master allocation function
spi: spl022: Probe defer is no error
spi: spi-imx: fix mixing of native and gpio chipselects for imx51/imx53/imx6 variants
...

+1636 -414
+1 -7
Documentation/devicetree/bindings/spi/allwinner,sun4i-a10-spi.yaml
··· 14 14 - Maxime Ripard <mripard@kernel.org> 15 15 16 16 properties: 17 - "#address-cells": true 18 - "#size-cells": true 19 - 20 17 compatible: 21 18 const: allwinner,sun4i-a10-spi 22 19 ··· 43 46 - const: rx 44 47 - const: tx 45 48 46 - num-cs: true 47 - 48 49 patternProperties: 49 50 "^.*@[0-9a-f]+": 50 51 type: object 51 - additionalProperties: true 52 52 properties: 53 53 reg: 54 54 items: ··· 65 71 - clocks 66 72 - clock-names 67 73 68 - additionalProperties: false 74 + unevaluatedProperties: false 69 75 70 76 examples: 71 77 - |
+11 -7
Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml
··· 14 14 - Maxime Ripard <mripard@kernel.org> 15 15 16 16 properties: 17 - "#address-cells": true 18 - "#size-cells": true 19 - 20 17 compatible: 21 18 oneOf: 19 + - const: allwinner,sun50i-r329-spi 22 20 - const: allwinner,sun6i-a31-spi 23 21 - const: allwinner,sun8i-h3-spi 24 22 - items: ··· 26 28 - allwinner,sun50i-h616-spi 27 29 - allwinner,suniv-f1c100s-spi 28 30 - const: allwinner,sun8i-h3-spi 31 + - items: 32 + - enum: 33 + - allwinner,sun20i-d1-spi 34 + - allwinner,sun50i-r329-spi-dbi 35 + - const: allwinner,sun50i-r329-spi 36 + - items: 37 + - const: allwinner,sun20i-d1-spi-dbi 38 + - const: allwinner,sun50i-r329-spi-dbi 39 + - const: allwinner,sun50i-r329-spi 29 40 30 41 reg: 31 42 maxItems: 1 ··· 65 58 - const: rx 66 59 - const: tx 67 60 68 - num-cs: true 69 - 70 61 patternProperties: 71 62 "^.*@[0-9a-f]+": 72 63 type: object 73 - additionalProperties: true 74 64 properties: 75 65 reg: 76 66 items: ··· 87 83 - clocks 88 84 - clock-names 89 85 90 - additionalProperties: false 86 + unevaluatedProperties: false 91 87 92 88 examples: 93 89 - |
+4
Documentation/devicetree/bindings/spi/atmel,at91rm9200-spi.yaml
··· 20 20 - items: 21 21 - const: microchip,sam9x60-spi 22 22 - const: atmel,at91rm9200-spi 23 + - items: 24 + - const: microchip,sam9x7-spi 25 + - const: microchip,sam9x60-spi 26 + - const: atmel,at91rm9200-spi 23 27 24 28 reg: 25 29 maxItems: 1
+16 -2
Documentation/devicetree/bindings/spi/cdns,qspi-nor.yaml
··· 46 46 maxItems: 2 47 47 items: 48 48 enum: [ qspi, qspi-ocp ] 49 + - if: 50 + properties: 51 + compatible: 52 + contains: 53 + const: amd,pensando-elba-qspi 54 + then: 55 + properties: 56 + cdns,fifo-depth: 57 + enum: [ 128, 256, 1024 ] 58 + default: 1024 59 + else: 60 + properties: 61 + cdns,fifo-depth: 62 + enum: [ 128, 256 ] 63 + default: 128 49 64 50 65 properties: 51 66 compatible: 52 67 oneOf: 53 68 - items: 54 69 - enum: 70 + - amd,pensando-elba-qspi 55 71 - ti,k2g-qspi 56 72 - ti,am654-ospi 57 73 - intel,lgm-qspi ··· 92 76 description: 93 77 Size of the data FIFO in words. 94 78 $ref: /schemas/types.yaml#/definitions/uint32 95 - enum: [ 128, 256 ] 96 - default: 128 97 79 98 80 cdns,fifo-width: 99 81 $ref: /schemas/types.yaml#/definitions/uint32
+3
Documentation/devicetree/bindings/spi/qcom,spi-qcom-qspi.yaml
··· 29 29 reg: 30 30 maxItems: 1 31 31 32 + iommus: 33 + maxItems: 1 34 + 32 35 interrupts: 33 36 maxItems: 1 34 37
+70
Documentation/devicetree/bindings/spi/renesas,rzv2m-csi.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/spi/renesas,rzv2m-csi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Renesas RZ/V2M Clocked Serial Interface (CSI) 8 + 9 + maintainers: 10 + - Fabrizio Castro <fabrizio.castro.jz@renesas.com> 11 + - Geert Uytterhoeven <geert+renesas@glider.be> 12 + 13 + allOf: 14 + - $ref: spi-controller.yaml# 15 + 16 + properties: 17 + compatible: 18 + const: renesas,rzv2m-csi 19 + 20 + reg: 21 + maxItems: 1 22 + 23 + interrupts: 24 + maxItems: 1 25 + 26 + clocks: 27 + items: 28 + - description: The clock used to generate the output clock (CSICLK) 29 + - description: Internal clock to access the registers (PCLK) 30 + 31 + clock-names: 32 + items: 33 + - const: csiclk 34 + - const: pclk 35 + 36 + resets: 37 + maxItems: 1 38 + 39 + power-domains: 40 + maxItems: 1 41 + 42 + required: 43 + - compatible 44 + - reg 45 + - interrupts 46 + - clocks 47 + - clock-names 48 + - resets 49 + - power-domains 50 + - '#address-cells' 51 + - '#size-cells' 52 + 53 + unevaluatedProperties: false 54 + 55 + examples: 56 + - | 57 + #include <dt-bindings/interrupt-controller/arm-gic.h> 58 + #include <dt-bindings/clock/r9a09g011-cpg.h> 59 + csi4: spi@a4020200 { 60 + compatible = "renesas,rzv2m-csi"; 61 + reg = <0xa4020200 0x80>; 62 + interrupts = <GIC_SPI 230 IRQ_TYPE_LEVEL_HIGH>; 63 + clocks = <&cpg CPG_MOD R9A09G011_CSI4_CLK>, 64 + <&cpg CPG_MOD R9A09G011_CPERI_GRPH_PCLK>; 65 + clock-names = "csiclk", "pclk"; 66 + resets = <&cpg R9A09G011_CSI_GPH_PRESETN>; 67 + power-domains = <&cpg>; 68 + #address-cells = <1>; 69 + #size-cells = <0>; 70 + };
-2
Documentation/devicetree/bindings/spi/samsung,spi.yaml
··· 35 35 minItems: 2 36 36 maxItems: 3 37 37 38 - cs-gpios: true 39 - 40 38 dmas: 41 39 minItems: 2 42 40 maxItems: 2
+2
Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml
··· 74 74 const: intel,keembay-ssi 75 75 - description: Intel Thunder Bay SPI Controller 76 76 const: intel,thunderbay-ssi 77 + - description: Intel Mount Evans Integrated Management Complex SPI Controller 78 + const: intel,mountevans-imc-ssi 77 79 - description: AMD Pensando Elba SoC SPI Controller 78 80 const: amd,pensando-elba-spi 79 81 - description: Baikal-T1 SPI Controller
-3
Documentation/devicetree/bindings/spi/socionext,uniphier-spi.yaml
··· 17 17 - $ref: spi-controller.yaml# 18 18 19 19 properties: 20 - "#address-cells": true 21 - "#size-cells": true 22 - 23 20 compatible: 24 21 const: socionext,uniphier-scssi 25 22
+1 -1
Documentation/devicetree/bindings/spi/spi-controller.yaml
··· 17 17 18 18 properties: 19 19 $nodename: 20 - pattern: "^spi(@.*|-[0-9a-f])*$" 20 + pattern: "^spi(@.*|-([0-9]|[1-9][0-9]+))?$" 21 21 22 22 "#address-cells": 23 23 enum: [0, 1]
+6
Documentation/devicetree/bindings/spi/spi-zynqmp-qspi.yaml
··· 32 32 clocks: 33 33 maxItems: 2 34 34 35 + iommus: 36 + maxItems: 1 37 + 38 + power-domains: 39 + maxItems: 1 40 + 35 41 required: 36 42 - compatible 37 43 - reg
+7
drivers/spi/Kconfig
··· 825 825 help 826 826 SPI driver for Renesas RSPI and QSPI blocks. 827 827 828 + config SPI_RZV2M_CSI 829 + tristate "Renesas RZV2M CSI controller" 830 + depends on ARCH_RENESAS || COMPILE_TEST 831 + help 832 + SPI driver for Renesas RZ/V2M Clocked Serial Interface (CSI) 833 + 828 834 config SPI_QCOM_QSPI 829 835 tristate "QTI QSPI controller" 830 836 depends on ARCH_QCOM || COMPILE_TEST ··· 942 936 config SPI_STM32 943 937 tristate "STMicroelectronics STM32 SPI controller" 944 938 depends on ARCH_STM32 || COMPILE_TEST 939 + select SPI_SLAVE 945 940 help 946 941 SPI driver for STMicroelectronics STM32 SoCs. 947 942
+1
drivers/spi/Makefile
··· 113 113 obj-$(CONFIG_MACH_REALTEK_RTL) += spi-realtek-rtl.o 114 114 obj-$(CONFIG_SPI_RPCIF) += spi-rpc-if.o 115 115 obj-$(CONFIG_SPI_RSPI) += spi-rspi.o 116 + obj-$(CONFIG_SPI_RZV2M_CSI) += spi-rzv2m-csi.o 116 117 obj-$(CONFIG_SPI_S3C64XX) += spi-s3c64xx.o 117 118 obj-$(CONFIG_SPI_SC18IS602) += spi-sc18is602.o 118 119 obj-$(CONFIG_SPI_SH) += spi-sh.o
+11 -7
drivers/spi/spi-atmel.c
··· 233 233 */ 234 234 #define DMA_MIN_BYTES 16 235 235 236 - #define SPI_DMA_TIMEOUT (msecs_to_jiffies(1000)) 236 + #define SPI_DMA_MIN_TIMEOUT (msecs_to_jiffies(1000)) 237 + #define SPI_DMA_TIMEOUT_PER_10K (msecs_to_jiffies(4)) 237 238 238 239 #define AUTOSUSPEND_TIMEOUT 2000 239 240 ··· 1280 1279 struct atmel_spi_device *asd; 1281 1280 int timeout; 1282 1281 int ret; 1283 - unsigned long dma_timeout; 1282 + unsigned int dma_timeout; 1283 + long ret_timeout; 1284 1284 1285 1285 as = spi_controller_get_devdata(host); 1286 1286 ··· 1335 1333 atmel_spi_unlock(as); 1336 1334 } 1337 1335 1338 - dma_timeout = wait_for_completion_timeout(&as->xfer_completion, 1339 - SPI_DMA_TIMEOUT); 1340 - if (WARN_ON(dma_timeout == 0)) { 1341 - dev_err(&spi->dev, "spi transfer timeout\n"); 1342 - as->done_status = -EIO; 1336 + dma_timeout = msecs_to_jiffies(spi_controller_xfer_timeout(host, xfer)); 1337 + ret_timeout = wait_for_completion_interruptible_timeout(&as->xfer_completion, 1338 + dma_timeout); 1339 + if (ret_timeout <= 0) { 1340 + dev_err(&spi->dev, "spi transfer %s\n", 1341 + !ret_timeout ? "timeout" : "canceled"); 1342 + as->done_status = ret_timeout < 0 ? ret_timeout : -EIO; 1343 1343 } 1344 1344 1345 1345 if (as->done_status)
+19
drivers/spi/spi-cadence-quadspi.c
··· 40 40 #define CQSPI_SUPPORT_EXTERNAL_DMA BIT(2) 41 41 #define CQSPI_NO_SUPPORT_WR_COMPLETION BIT(3) 42 42 #define CQSPI_SLOW_SRAM BIT(4) 43 + #define CQSPI_NEEDS_APB_AHB_HAZARD_WAR BIT(5) 43 44 44 45 /* Capabilities */ 45 46 #define CQSPI_SUPPORTS_OCTAL BIT(0) ··· 91 90 u32 pd_dev_id; 92 91 bool wr_completion; 93 92 bool slow_sram; 93 + bool apb_ahb_hazard; 94 94 }; 95 95 96 96 struct cqspi_driver_platdata { ··· 1029 1027 if (cqspi->wr_delay) 1030 1028 ndelay(cqspi->wr_delay); 1031 1029 1030 + /* 1031 + * If a hazard exists between the APB and AHB interfaces, perform a 1032 + * dummy readback from the controller to ensure synchronization. 1033 + */ 1034 + if (cqspi->apb_ahb_hazard) 1035 + readl(reg_base + CQSPI_REG_INDIRECTWR); 1036 + 1032 1037 while (remaining > 0) { 1033 1038 size_t write_words, mod_bytes; 1034 1039 ··· 1763 1754 cqspi->wr_completion = false; 1764 1755 if (ddata->quirks & CQSPI_SLOW_SRAM) 1765 1756 cqspi->slow_sram = true; 1757 + if (ddata->quirks & CQSPI_NEEDS_APB_AHB_HAZARD_WAR) 1758 + cqspi->apb_ahb_hazard = true; 1766 1759 1767 1760 if (of_device_is_compatible(pdev->dev.of_node, 1768 1761 "xlnx,versal-ospi-1.0")) { ··· 1899 1888 .quirks = CQSPI_DISABLE_DAC_MODE, 1900 1889 }; 1901 1890 1891 + static const struct cqspi_driver_platdata pensando_cdns_qspi = { 1892 + .quirks = CQSPI_NEEDS_APB_AHB_HAZARD_WAR | CQSPI_DISABLE_DAC_MODE, 1893 + }; 1894 + 1902 1895 static const struct of_device_id cqspi_dt_ids[] = { 1903 1896 { 1904 1897 .compatible = "cdns,qspi-nor", ··· 1931 1916 { 1932 1917 .compatible = "starfive,jh7110-qspi", 1933 1918 .data = &jh7110_qspi, 1919 + }, 1920 + { 1921 + .compatible = "amd,pensando-elba-qspi", 1922 + .data = &pensando_cdns_qspi, 1934 1923 }, 1935 1924 { /* end of table */ } 1936 1925 };
+1
drivers/spi/spi-cadence.c
··· 102 102 * @regs: Virtual address of the SPI controller registers 103 103 * @ref_clk: Pointer to the peripheral clock 104 104 * @pclk: Pointer to the APB clock 105 + * @clk_rate: Reference clock frequency, taken from @ref_clk 105 106 * @speed_hz: Current SPI bus clock speed in Hz 106 107 * @txbuf: Pointer to the TX buffer 107 108 * @rxbuf: Pointer to the RX buffer
+6 -8
drivers/spi/spi-dw-core.c
··· 57 57 DW_SPI_DBGFS_REG("RX_SAMPLE_DLY", DW_SPI_RX_SAMPLE_DLY), 58 58 }; 59 59 60 - static int dw_spi_debugfs_init(struct dw_spi *dws) 60 + static void dw_spi_debugfs_init(struct dw_spi *dws) 61 61 { 62 62 char name[32]; 63 63 64 64 snprintf(name, 32, "dw_spi%d", dws->master->bus_num); 65 65 dws->debugfs = debugfs_create_dir(name, NULL); 66 - if (!dws->debugfs) 67 - return -ENOMEM; 68 66 69 67 dws->regset.regs = dw_spi_dbgfs_regs; 70 68 dws->regset.nregs = ARRAY_SIZE(dw_spi_dbgfs_regs); 71 69 dws->regset.base = dws->regs; 72 70 debugfs_create_regset32("registers", 0400, dws->debugfs, &dws->regset); 73 - 74 - return 0; 75 71 } 76 72 77 73 static void dw_spi_debugfs_remove(struct dw_spi *dws) ··· 76 80 } 77 81 78 82 #else 79 - static inline int dw_spi_debugfs_init(struct dw_spi *dws) 83 + static inline void dw_spi_debugfs_init(struct dw_spi *dws) 80 84 { 81 - return 0; 82 85 } 83 86 84 87 static inline void dw_spi_debugfs_remove(struct dw_spi *dws) ··· 421 426 int ret; 422 427 423 428 dws->dma_mapped = 0; 424 - dws->n_bytes = DIV_ROUND_UP(transfer->bits_per_word, BITS_PER_BYTE); 429 + dws->n_bytes = 430 + roundup_pow_of_two(DIV_ROUND_UP(transfer->bits_per_word, 431 + BITS_PER_BYTE)); 432 + 425 433 dws->tx = (void *)transfer->tx_buf; 426 434 dws->tx_len = transfer->len / dws->n_bytes; 427 435 dws->rx = transfer->rx_buf;
+58 -18
drivers/spi/spi-dw-dma.c
··· 72 72 dw_writel(dws, DW_SPI_DMATDLR, dws->txburst); 73 73 } 74 74 75 - static void dw_spi_dma_sg_burst_init(struct dw_spi *dws) 75 + static int dw_spi_dma_caps_init(struct dw_spi *dws) 76 76 { 77 - struct dma_slave_caps tx = {0}, rx = {0}; 77 + struct dma_slave_caps tx, rx; 78 + int ret; 78 79 79 - dma_get_slave_caps(dws->txchan, &tx); 80 - dma_get_slave_caps(dws->rxchan, &rx); 80 + ret = dma_get_slave_caps(dws->txchan, &tx); 81 + if (ret) 82 + return ret; 83 + 84 + ret = dma_get_slave_caps(dws->rxchan, &rx); 85 + if (ret) 86 + return ret; 87 + 88 + if (!(tx.directions & BIT(DMA_MEM_TO_DEV) && 89 + rx.directions & BIT(DMA_DEV_TO_MEM))) 90 + return -ENXIO; 81 91 82 92 if (tx.max_sg_burst > 0 && rx.max_sg_burst > 0) 83 93 dws->dma_sg_burst = min(tx.max_sg_burst, rx.max_sg_burst); ··· 97 87 dws->dma_sg_burst = rx.max_sg_burst; 98 88 else 99 89 dws->dma_sg_burst = 0; 90 + 91 + /* 92 + * Assuming both channels belong to the same DMA controller hence the 93 + * peripheral side address width capabilities most likely would be 94 + * the same. 95 + */ 96 + dws->dma_addr_widths = tx.dst_addr_widths & rx.src_addr_widths; 97 + 98 + return 0; 100 99 } 101 100 102 101 static int dw_spi_dma_init_mfld(struct device *dev, struct dw_spi *dws) ··· 114 95 struct dw_dma_slave dma_rx = { .src_id = 0 }, *rx = &dma_rx; 115 96 struct pci_dev *dma_dev; 116 97 dma_cap_mask_t mask; 98 + int ret = -EBUSY; 117 99 118 100 /* 119 101 * Get pci device for DMA controller, currently it could only ··· 144 124 145 125 init_completion(&dws->dma_completion); 146 126 147 - dw_spi_dma_maxburst_init(dws); 127 + ret = dw_spi_dma_caps_init(dws); 128 + if (ret) 129 + goto free_txchan; 148 130 149 - dw_spi_dma_sg_burst_init(dws); 131 + dw_spi_dma_maxburst_init(dws); 150 132 151 133 pci_dev_put(dma_dev); 152 134 153 135 return 0; 154 136 137 + free_txchan: 138 + dma_release_channel(dws->txchan); 139 + dws->txchan = NULL; 155 140 free_rxchan: 156 141 dma_release_channel(dws->rxchan); 157 142 dws->rxchan = NULL; 158 143 err_exit: 159 144 pci_dev_put(dma_dev); 160 - return -EBUSY; 145 + return ret; 161 146 } 162 147 163 148 static int dw_spi_dma_init_generic(struct device *dev, struct dw_spi *dws) ··· 188 163 189 164 init_completion(&dws->dma_completion); 190 165 191 - dw_spi_dma_maxburst_init(dws); 166 + ret = dw_spi_dma_caps_init(dws); 167 + if (ret) 168 + goto free_txchan; 192 169 193 - dw_spi_dma_sg_burst_init(dws); 170 + dw_spi_dma_maxburst_init(dws); 194 171 195 172 return 0; 196 173 174 + free_txchan: 175 + dma_release_channel(dws->txchan); 176 + dws->txchan = NULL; 197 177 free_rxchan: 198 178 dma_release_channel(dws->rxchan); 199 179 dws->rxchan = NULL; ··· 228 198 return IRQ_HANDLED; 229 199 } 230 200 201 + static enum dma_slave_buswidth dw_spi_dma_convert_width(u8 n_bytes) 202 + { 203 + switch (n_bytes) { 204 + case 1: 205 + return DMA_SLAVE_BUSWIDTH_1_BYTE; 206 + case 2: 207 + return DMA_SLAVE_BUSWIDTH_2_BYTES; 208 + case 4: 209 + return DMA_SLAVE_BUSWIDTH_4_BYTES; 210 + default: 211 + return DMA_SLAVE_BUSWIDTH_UNDEFINED; 212 + } 213 + } 214 + 231 215 static bool dw_spi_can_dma(struct spi_controller *master, 232 216 struct spi_device *spi, struct spi_transfer *xfer) 233 217 { 234 218 struct dw_spi *dws = spi_controller_get_devdata(master); 219 + enum dma_slave_buswidth dma_bus_width; 235 220 236 - return xfer->len > dws->fifo_len; 237 - } 221 + if (xfer->len <= dws->fifo_len) 222 + return false; 238 223 239 - static enum dma_slave_buswidth dw_spi_dma_convert_width(u8 n_bytes) 240 - { 241 - if (n_bytes == 1) 242 - return DMA_SLAVE_BUSWIDTH_1_BYTE; 243 - else if (n_bytes == 2) 244 - return DMA_SLAVE_BUSWIDTH_2_BYTES; 224 + dma_bus_width = dw_spi_dma_convert_width(dws->n_bytes); 245 225 246 - return DMA_SLAVE_BUSWIDTH_UNDEFINED; 226 + return dws->dma_addr_widths & BIT(dma_bus_width); 247 227 } 248 228 249 229 static int dw_spi_dma_wait(struct dw_spi *dws, unsigned int len, u32 speed)
+22
drivers/spi/spi-dw-mmio.c
··· 236 236 return 0; 237 237 } 238 238 239 + /* 240 + * DMA-based mem ops are not configured for this device and are not tested. 241 + */ 242 + static int dw_spi_mountevans_imc_init(struct platform_device *pdev, 243 + struct dw_spi_mmio *dwsmmio) 244 + { 245 + /* 246 + * The Intel Mount Evans SoC's Integrated Management Complex DW 247 + * apb_ssi_v4.02a controller has an errata where a full TX FIFO can 248 + * result in data corruption. The suggested workaround is to never 249 + * completely fill the FIFO. The TX FIFO has a size of 32 so the 250 + * fifo_len is set to 31. 251 + */ 252 + dwsmmio->dws.fifo_len = 31; 253 + 254 + return 0; 255 + } 256 + 239 257 static int dw_spi_canaan_k210_init(struct platform_device *pdev, 240 258 struct dw_spi_mmio *dwsmmio) 241 259 { ··· 423 405 { .compatible = "snps,dwc-ssi-1.01a", .data = dw_spi_hssi_init}, 424 406 { .compatible = "intel,keembay-ssi", .data = dw_spi_intel_init}, 425 407 { .compatible = "intel,thunderbay-ssi", .data = dw_spi_intel_init}, 408 + { 409 + .compatible = "intel,mountevans-imc-ssi", 410 + .data = dw_spi_mountevans_imc_init, 411 + }, 426 412 { .compatible = "microchip,sparx5-spi", dw_spi_mscc_sparx5_init}, 427 413 { .compatible = "canaan,k210-spi", dw_spi_canaan_k210_init}, 428 414 { .compatible = "amd,pensando-elba-spi", .data = dw_spi_elba_init},
+1
drivers/spi/spi-dw.h
··· 190 190 struct dma_chan *rxchan; 191 191 u32 rxburst; 192 192 u32 dma_sg_burst; 193 + u32 dma_addr_widths; 193 194 unsigned long dma_chan_busy; 194 195 dma_addr_t dma_addr; /* phy address of the Data register */ 195 196 const struct dw_spi_dma_ops *dma_ops;
+7 -1
drivers/spi/spi-fsl-lpspi.c
··· 303 303 304 304 perclk_rate = clk_get_rate(fsl_lpspi->clk_per); 305 305 306 + if (!config.speed_hz) { 307 + dev_err(fsl_lpspi->dev, 308 + "error: the transmission speed provided is 0!\n"); 309 + return -EINVAL; 310 + } 311 + 306 312 if (config.speed_hz > perclk_rate / 2) { 307 313 dev_err(fsl_lpspi->dev, 308 314 "per-clk should be at least two times of transfer speed"); ··· 917 911 if (ret == -EPROBE_DEFER) 918 912 goto out_pm_get; 919 913 if (ret < 0) 920 - dev_err(&pdev->dev, "dma setup error %d, use pio\n", ret); 914 + dev_warn(&pdev->dev, "dma setup error %d, use pio\n", ret); 921 915 else 922 916 /* 923 917 * disable LPSPI module IRQ when enable DMA mode successfully,
+1 -1
drivers/spi/spi-geni-qcom.c
··· 35 35 #define CS_DEMUX_OUTPUT_SEL GENMASK(3, 0) 36 36 37 37 #define SE_SPI_TRANS_CFG 0x25c 38 - #define CS_TOGGLE BIT(0) 38 + #define CS_TOGGLE BIT(1) 39 39 40 40 #define SE_SPI_WORD_LEN 0x268 41 41 #define WORD_LEN_MSK GENMASK(9, 0)
+1 -1
drivers/spi/spi-hisi-kunpeng.c
··· 169 169 master = container_of(hs->dev, struct spi_controller, dev); 170 170 snprintf(name, 32, "hisi_spi%d", master->bus_num); 171 171 hs->debugfs = debugfs_create_dir(name, NULL); 172 - if (!hs->debugfs) 172 + if (IS_ERR(hs->debugfs)) 173 173 return -ENOMEM; 174 174 175 175 hs->regset.regs = hisi_spi_regs;
+43 -22
drivers/spi/spi-imx.c
··· 281 281 #define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs & 3) + 4)) 282 282 #define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs & 3) + 8)) 283 283 #define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs & 3) + 12)) 284 + #define MX51_ECSPI_CONFIG_DATACTL(cs) (1 << ((cs & 3) + 16)) 284 285 #define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs & 3) + 20)) 285 286 286 287 #define MX51_ECSPI_INT 0x10 ··· 517 516 writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL); 518 517 } 519 518 519 + static int mx51_ecspi_channel(const struct spi_device *spi) 520 + { 521 + if (!spi_get_csgpiod(spi, 0)) 522 + return spi_get_chipselect(spi, 0); 523 + return spi->controller->unused_native_cs; 524 + } 525 + 520 526 static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx, 521 527 struct spi_message *msg) 522 528 { ··· 534 526 u32 testreg, delay; 535 527 u32 cfg = readl(spi_imx->base + MX51_ECSPI_CONFIG); 536 528 u32 current_cfg = cfg; 529 + int channel = mx51_ecspi_channel(spi); 537 530 538 531 /* set Master or Slave mode */ 539 532 if (spi_imx->slave_mode) ··· 549 540 ctrl |= MX51_ECSPI_CTRL_DRCTL(spi_imx->spi_drctl); 550 541 551 542 /* set chip select to use */ 552 - ctrl |= MX51_ECSPI_CTRL_CS(spi_get_chipselect(spi, 0)); 543 + ctrl |= MX51_ECSPI_CTRL_CS(channel); 553 544 554 545 /* 555 546 * The ctrl register must be written first, with the EN bit set other ··· 570 561 * BURST_LENGTH + 1 bits are received 571 562 */ 572 563 if (spi_imx->slave_mode && is_imx53_ecspi(spi_imx)) 573 - cfg &= ~MX51_ECSPI_CONFIG_SBBCTRL(spi_get_chipselect(spi, 0)); 564 + cfg &= ~MX51_ECSPI_CONFIG_SBBCTRL(channel); 574 565 else 575 - cfg |= MX51_ECSPI_CONFIG_SBBCTRL(spi_get_chipselect(spi, 0)); 566 + cfg |= MX51_ECSPI_CONFIG_SBBCTRL(channel); 576 567 577 568 if (spi->mode & SPI_CPOL) { 578 - cfg |= MX51_ECSPI_CONFIG_SCLKPOL(spi_get_chipselect(spi, 0)); 579 - cfg |= MX51_ECSPI_CONFIG_SCLKCTL(spi_get_chipselect(spi, 0)); 569 + cfg |= MX51_ECSPI_CONFIG_SCLKPOL(channel); 570 + cfg |= MX51_ECSPI_CONFIG_SCLKCTL(channel); 580 571 } else { 581 - cfg &= ~MX51_ECSPI_CONFIG_SCLKPOL(spi_get_chipselect(spi, 0)); 582 - cfg &= ~MX51_ECSPI_CONFIG_SCLKCTL(spi_get_chipselect(spi, 0)); 572 + cfg &= ~MX51_ECSPI_CONFIG_SCLKPOL(channel); 573 + cfg &= ~MX51_ECSPI_CONFIG_SCLKCTL(channel); 583 574 } 584 575 585 - if (spi->mode & SPI_CS_HIGH) 586 - cfg |= MX51_ECSPI_CONFIG_SSBPOL(spi_get_chipselect(spi, 0)); 576 + if (spi->mode & SPI_MOSI_IDLE_LOW) 577 + cfg |= MX51_ECSPI_CONFIG_DATACTL(channel); 587 578 else 588 - cfg &= ~MX51_ECSPI_CONFIG_SSBPOL(spi_get_chipselect(spi, 0)); 579 + cfg &= ~MX51_ECSPI_CONFIG_DATACTL(channel); 580 + 581 + if (spi->mode & SPI_CS_HIGH) 582 + cfg |= MX51_ECSPI_CONFIG_SSBPOL(channel); 583 + else 584 + cfg &= ~MX51_ECSPI_CONFIG_SSBPOL(channel); 589 585 590 586 if (cfg == current_cfg) 591 587 return 0; ··· 635 621 bool cpha = (spi->mode & SPI_CPHA); 636 622 bool flip_cpha = (spi->mode & SPI_RX_CPHA_FLIP) && spi_imx->rx_only; 637 623 u32 cfg = readl(spi_imx->base + MX51_ECSPI_CONFIG); 624 + int channel = mx51_ecspi_channel(spi); 638 625 639 626 /* Flip cpha logical value iff flip_cpha */ 640 627 cpha ^= flip_cpha; 641 628 642 629 if (cpha) 643 - cfg |= MX51_ECSPI_CONFIG_SCLKPHA(spi_get_chipselect(spi, 0)); 630 + cfg |= MX51_ECSPI_CONFIG_SCLKPHA(channel); 644 631 else 645 - cfg &= ~MX51_ECSPI_CONFIG_SCLKPHA(spi_get_chipselect(spi, 0)); 632 + cfg &= ~MX51_ECSPI_CONFIG_SCLKPHA(channel); 646 633 647 634 writel(cfg, spi_imx->base + MX51_ECSPI_CONFIG); 648 635 } ··· 1752 1737 else 1753 1738 controller->num_chipselect = 3; 1754 1739 1755 - spi_imx->controller->transfer_one = spi_imx_transfer_one; 1756 - spi_imx->controller->setup = spi_imx_setup; 1757 - spi_imx->controller->cleanup = spi_imx_cleanup; 1758 - spi_imx->controller->prepare_message = spi_imx_prepare_message; 1759 - spi_imx->controller->unprepare_message = spi_imx_unprepare_message; 1760 - spi_imx->controller->slave_abort = spi_imx_slave_abort; 1761 - spi_imx->controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_NO_CS; 1740 + controller->transfer_one = spi_imx_transfer_one; 1741 + controller->setup = spi_imx_setup; 1742 + controller->cleanup = spi_imx_cleanup; 1743 + controller->prepare_message = spi_imx_prepare_message; 1744 + controller->unprepare_message = spi_imx_unprepare_message; 1745 + controller->slave_abort = spi_imx_slave_abort; 1746 + controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_NO_CS | 1747 + SPI_MOSI_IDLE_LOW; 1762 1748 1763 1749 if (is_imx35_cspi(spi_imx) || is_imx51_ecspi(spi_imx) || 1764 1750 is_imx53_ecspi(spi_imx)) 1765 - spi_imx->controller->mode_bits |= SPI_LOOP | SPI_READY; 1751 + controller->mode_bits |= SPI_LOOP | SPI_READY; 1766 1752 1767 1753 if (is_imx51_ecspi(spi_imx) || is_imx53_ecspi(spi_imx)) 1768 - spi_imx->controller->mode_bits |= SPI_RX_CPHA_FLIP; 1754 + controller->mode_bits |= SPI_RX_CPHA_FLIP; 1769 1755 1770 1756 if (is_imx51_ecspi(spi_imx) && 1771 1757 device_property_read_u32(&pdev->dev, "cs-gpios", NULL)) ··· 1775 1759 * setting the burst length to the word size. This is 1776 1760 * considerably faster than manually controlling the CS. 1777 1761 */ 1778 - spi_imx->controller->mode_bits |= SPI_CS_WORD; 1762 + controller->mode_bits |= SPI_CS_WORD; 1763 + 1764 + if (is_imx51_ecspi(spi_imx) || is_imx53_ecspi(spi_imx)) { 1765 + controller->max_native_cs = 4; 1766 + controller->flags |= SPI_MASTER_GPIO_SS; 1767 + } 1779 1768 1780 1769 spi_imx->spi_drctl = spi_drctl; 1781 1770
+19 -14
drivers/spi/spi-mt65xx.c
··· 1144 1144 if (mdata->dev_comp->must_tx) 1145 1145 master->flags = SPI_MASTER_MUST_TX; 1146 1146 if (mdata->dev_comp->ipm_design) 1147 - master->mode_bits |= SPI_LOOP; 1147 + master->mode_bits |= SPI_LOOP | SPI_RX_DUAL | SPI_TX_DUAL | 1148 + SPI_RX_QUAD | SPI_TX_QUAD; 1148 1149 1149 1150 if (mdata->dev_comp->ipm_design) { 1150 1151 mdata->dev = dev; ··· 1270 1269 return 0; 1271 1270 } 1272 1271 1273 - static int mtk_spi_remove(struct platform_device *pdev) 1272 + static void mtk_spi_remove(struct platform_device *pdev) 1274 1273 { 1275 1274 struct spi_master *master = platform_get_drvdata(pdev); 1276 1275 struct mtk_spi *mdata = spi_master_get_devdata(master); ··· 1279 1278 if (mdata->use_spimem && !completion_done(&mdata->spimem_done)) 1280 1279 complete(&mdata->spimem_done); 1281 1280 1282 - ret = pm_runtime_resume_and_get(&pdev->dev); 1283 - if (ret < 0) 1284 - return ret; 1281 + ret = pm_runtime_get_sync(&pdev->dev); 1282 + if (ret < 0) { 1283 + dev_warn(&pdev->dev, "Failed to resume hardware (%pe)\n", ERR_PTR(ret)); 1284 + } else { 1285 + /* 1286 + * If pm runtime resume failed, clks are disabled and 1287 + * unprepared. So don't access the hardware and skip clk 1288 + * unpreparing. 1289 + */ 1290 + mtk_spi_reset(mdata); 1285 1291 1286 - mtk_spi_reset(mdata); 1287 - 1288 - if (mdata->dev_comp->no_need_unprepare) { 1289 - clk_unprepare(mdata->spi_clk); 1290 - clk_unprepare(mdata->spi_hclk); 1292 + if (mdata->dev_comp->no_need_unprepare) { 1293 + clk_unprepare(mdata->spi_clk); 1294 + clk_unprepare(mdata->spi_hclk); 1295 + } 1291 1296 } 1292 1297 1293 1298 pm_runtime_put_noidle(&pdev->dev); 1294 1299 pm_runtime_disable(&pdev->dev); 1295 - 1296 - return 0; 1297 1300 } 1298 1301 1299 1302 #ifdef CONFIG_PM_SLEEP ··· 1316 1311 clk_disable_unprepare(mdata->spi_hclk); 1317 1312 } 1318 1313 1319 - return ret; 1314 + return 0; 1320 1315 } 1321 1316 1322 1317 static int mtk_spi_resume(struct device *dev) ··· 1417 1412 .of_match_table = mtk_spi_of_match, 1418 1413 }, 1419 1414 .probe = mtk_spi_probe, 1420 - .remove = mtk_spi_remove, 1415 + .remove_new = mtk_spi_remove, 1421 1416 }; 1422 1417 1423 1418 module_platform_driver(mtk_spi_driver);
+2 -2
drivers/spi/spi-pl022.c
··· 2217 2217 amba_set_drvdata(adev, pl022); 2218 2218 status = devm_spi_register_master(&adev->dev, master); 2219 2219 if (status != 0) { 2220 - dev_err(&adev->dev, 2221 - "probe - problem registering spi master\n"); 2220 + dev_err_probe(&adev->dev, status, 2221 + "problem registering spi master\n"); 2222 2222 goto err_spi_register; 2223 2223 } 2224 2224 dev_dbg(dev, "probe succeeded\n");
+212 -6
drivers/spi/spi-qcom-qspi.c
··· 2 2 // Copyright (c) 2017-2018, The Linux foundation. All rights reserved. 3 3 4 4 #include <linux/clk.h> 5 + #include <linux/dmapool.h> 6 + #include <linux/dma-mapping.h> 5 7 #include <linux/interconnect.h> 6 8 #include <linux/interrupt.h> 7 9 #include <linux/io.h> ··· 64 62 #define WR_FIFO_FULL BIT(10) 65 63 #define WR_FIFO_OVERRUN BIT(11) 66 64 #define TRANSACTION_DONE BIT(16) 65 + #define DMA_CHAIN_DONE BIT(31) 67 66 #define QSPI_ERR_IRQS (RESP_FIFO_UNDERRUN | HRESP_FROM_NOC_ERR | \ 68 67 WR_FIFO_OVERRUN) 69 68 #define QSPI_ALL_IRQS (QSPI_ERR_IRQS | RESP_FIFO_RDY | \ ··· 111 108 #define RD_FIFO_RESET 0x0030 112 109 #define RESET_FIFO BIT(0) 113 110 111 + #define NEXT_DMA_DESC_ADDR 0x0040 112 + #define CURRENT_DMA_DESC_ADDR 0x0044 113 + #define CURRENT_MEM_ADDR 0x0048 114 + 114 115 #define CUR_MEM_ADDR 0x0048 115 116 #define HW_VERSION 0x004c 116 117 #define RD_FIFO 0x0050 117 118 #define SAMPLING_CLK_CFG 0x0090 118 119 #define SAMPLING_CLK_STATUS 0x0094 119 120 121 + #define QSPI_ALIGN_REQ 32 120 122 121 123 enum qspi_dir { 122 124 QSPI_READ, 123 125 QSPI_WRITE, 126 + }; 127 + 128 + struct qspi_cmd_desc { 129 + u32 data_address; 130 + u32 next_descriptor; 131 + u32 direction:1; 132 + u32 multi_io_mode:3; 133 + u32 reserved1:4; 134 + u32 fragment:1; 135 + u32 reserved2:7; 136 + u32 length:16; 124 137 }; 125 138 126 139 struct qspi_xfer { ··· 156 137 QSPI_NUM_CLKS 157 138 }; 158 139 140 + /* 141 + * Number of entries in sgt returned from spi framework that- 142 + * will be supported. Can be modified as required. 143 + * In practice, given max_dma_len is 64KB, the number of 144 + * entries is not expected to exceed 1. 145 + */ 146 + #define QSPI_MAX_SG 5 147 + 159 148 struct qcom_qspi { 160 149 void __iomem *base; 161 150 struct device *dev; 162 151 struct clk_bulk_data *clks; 163 152 struct qspi_xfer xfer; 153 + struct dma_pool *dma_cmd_pool; 154 + dma_addr_t dma_cmd_desc[QSPI_MAX_SG]; 155 + void *virt_cmd_desc[QSPI_MAX_SG]; 156 + unsigned int n_cmd_desc; 164 157 struct icc_path *icc_path_cpu_to_qspi; 165 158 unsigned long last_speed; 166 159 /* Lock to protect data accessed by IRQs */ ··· 184 153 { 185 154 switch (buswidth) { 186 155 case 1: 187 - return SDR_1BIT << MULTI_IO_MODE_SHFT; 156 + return SDR_1BIT; 188 157 case 2: 189 - return SDR_2BIT << MULTI_IO_MODE_SHFT; 158 + return SDR_2BIT; 190 159 case 4: 191 - return SDR_4BIT << MULTI_IO_MODE_SHFT; 160 + return SDR_4BIT; 192 161 default: 193 162 dev_warn_once(ctrl->dev, 194 163 "Unexpected bus width: %u\n", buswidth); 195 - return SDR_1BIT << MULTI_IO_MODE_SHFT; 164 + return SDR_1BIT; 196 165 } 197 166 } 198 167 199 168 static void qcom_qspi_pio_xfer_cfg(struct qcom_qspi *ctrl) 200 169 { 201 170 u32 pio_xfer_cfg; 171 + u32 iomode; 202 172 const struct qspi_xfer *xfer; 203 173 204 174 xfer = &ctrl->xfer; ··· 211 179 else 212 180 pio_xfer_cfg |= TRANSFER_FRAGMENT; 213 181 pio_xfer_cfg &= ~MULTI_IO_MODE_MSK; 214 - pio_xfer_cfg |= qspi_buswidth_to_iomode(ctrl, xfer->buswidth); 182 + iomode = qspi_buswidth_to_iomode(ctrl, xfer->buswidth); 183 + pio_xfer_cfg |= iomode << MULTI_IO_MODE_SHFT; 215 184 216 185 writel(pio_xfer_cfg, ctrl->base + PIO_XFER_CFG); 217 186 } ··· 250 217 static void qcom_qspi_handle_err(struct spi_master *master, 251 218 struct spi_message *msg) 252 219 { 220 + u32 int_status; 253 221 struct qcom_qspi *ctrl = spi_master_get_devdata(master); 254 222 unsigned long flags; 223 + int i; 255 224 256 225 spin_lock_irqsave(&ctrl->lock, flags); 257 226 writel(0, ctrl->base + MSTR_INT_EN); 227 + int_status = readl(ctrl->base + MSTR_INT_STATUS); 228 + writel(int_status, ctrl->base + MSTR_INT_STATUS); 258 229 ctrl->xfer.rem_bytes = 0; 230 + 231 + /* free cmd descriptors if they are around (DMA mode) */ 232 + for (i = 0; i < ctrl->n_cmd_desc; i++) 233 + dma_pool_free(ctrl->dma_cmd_pool, ctrl->virt_cmd_desc[i], 234 + ctrl->dma_cmd_desc[i]); 235 + ctrl->n_cmd_desc = 0; 259 236 spin_unlock_irqrestore(&ctrl->lock, flags); 260 237 } 261 238 ··· 285 242 } 286 243 287 244 /* 288 - * Set BW quota for CPU as driver supports FIFO mode only. 245 + * Set BW quota for CPU. 289 246 * We don't have explicit peak requirement so keep it equal to avg_bw. 290 247 */ 291 248 avg_bw_cpu = Bps_to_icc(speed_hz); ··· 301 258 return 0; 302 259 } 303 260 261 + static int qcom_qspi_alloc_desc(struct qcom_qspi *ctrl, dma_addr_t dma_ptr, 262 + uint32_t n_bytes) 263 + { 264 + struct qspi_cmd_desc *virt_cmd_desc, *prev; 265 + dma_addr_t dma_cmd_desc; 266 + 267 + /* allocate for dma cmd descriptor */ 268 + virt_cmd_desc = dma_pool_alloc(ctrl->dma_cmd_pool, GFP_KERNEL | __GFP_ZERO, &dma_cmd_desc); 269 + if (!virt_cmd_desc) 270 + return -ENOMEM; 271 + 272 + ctrl->virt_cmd_desc[ctrl->n_cmd_desc] = virt_cmd_desc; 273 + ctrl->dma_cmd_desc[ctrl->n_cmd_desc] = dma_cmd_desc; 274 + ctrl->n_cmd_desc++; 275 + 276 + /* setup cmd descriptor */ 277 + virt_cmd_desc->data_address = dma_ptr; 278 + virt_cmd_desc->direction = ctrl->xfer.dir; 279 + virt_cmd_desc->multi_io_mode = qspi_buswidth_to_iomode(ctrl, ctrl->xfer.buswidth); 280 + virt_cmd_desc->fragment = !ctrl->xfer.is_last; 281 + virt_cmd_desc->length = n_bytes; 282 + 283 + /* update previous descriptor */ 284 + if (ctrl->n_cmd_desc >= 2) { 285 + prev = (ctrl->virt_cmd_desc)[ctrl->n_cmd_desc - 2]; 286 + prev->next_descriptor = dma_cmd_desc; 287 + prev->fragment = 1; 288 + } 289 + 290 + return 0; 291 + } 292 + 293 + static int qcom_qspi_setup_dma_desc(struct qcom_qspi *ctrl, 294 + struct spi_transfer *xfer) 295 + { 296 + int ret; 297 + struct sg_table *sgt; 298 + dma_addr_t dma_ptr_sg; 299 + unsigned int dma_len_sg; 300 + int i; 301 + 302 + if (ctrl->n_cmd_desc) { 303 + dev_err(ctrl->dev, "Remnant dma buffers n_cmd_desc-%d\n", ctrl->n_cmd_desc); 304 + return -EIO; 305 + } 306 + 307 + sgt = (ctrl->xfer.dir == QSPI_READ) ? &xfer->rx_sg : &xfer->tx_sg; 308 + if (!sgt->nents || sgt->nents > QSPI_MAX_SG) { 309 + dev_warn_once(ctrl->dev, "Cannot handle %d entries in scatter list\n", sgt->nents); 310 + return -EAGAIN; 311 + } 312 + 313 + for (i = 0; i < sgt->nents; i++) { 314 + dma_ptr_sg = sg_dma_address(sgt->sgl + i); 315 + if (!IS_ALIGNED(dma_ptr_sg, QSPI_ALIGN_REQ)) { 316 + dev_warn_once(ctrl->dev, "dma_address not aligned to %d\n", QSPI_ALIGN_REQ); 317 + return -EAGAIN; 318 + } 319 + } 320 + 321 + for (i = 0; i < sgt->nents; i++) { 322 + dma_ptr_sg = sg_dma_address(sgt->sgl + i); 323 + dma_len_sg = sg_dma_len(sgt->sgl + i); 324 + 325 + ret = qcom_qspi_alloc_desc(ctrl, dma_ptr_sg, dma_len_sg); 326 + if (ret) 327 + goto cleanup; 328 + } 329 + return 0; 330 + 331 + cleanup: 332 + for (i = 0; i < ctrl->n_cmd_desc; i++) 333 + dma_pool_free(ctrl->dma_cmd_pool, ctrl->virt_cmd_desc[i], 334 + ctrl->dma_cmd_desc[i]); 335 + ctrl->n_cmd_desc = 0; 336 + return ret; 337 + } 338 + 339 + static void qcom_qspi_dma_xfer(struct qcom_qspi *ctrl) 340 + { 341 + /* Setup new interrupts */ 342 + writel(DMA_CHAIN_DONE, ctrl->base + MSTR_INT_EN); 343 + 344 + /* kick off transfer */ 345 + writel((u32)((ctrl->dma_cmd_desc)[0]), ctrl->base + NEXT_DMA_DESC_ADDR); 346 + } 347 + 348 + /* Switch to DMA if transfer length exceeds this */ 349 + #define QSPI_MAX_BYTES_FIFO 64 350 + 351 + static bool qcom_qspi_can_dma(struct spi_controller *ctlr, 352 + struct spi_device *slv, struct spi_transfer *xfer) 353 + { 354 + return xfer->len > QSPI_MAX_BYTES_FIFO; 355 + } 356 + 304 357 static int qcom_qspi_transfer_one(struct spi_master *master, 305 358 struct spi_device *slv, 306 359 struct spi_transfer *xfer) ··· 405 266 int ret; 406 267 unsigned long speed_hz; 407 268 unsigned long flags; 269 + u32 mstr_cfg; 408 270 409 271 speed_hz = slv->max_speed_hz; 410 272 if (xfer->speed_hz) ··· 416 276 return ret; 417 277 418 278 spin_lock_irqsave(&ctrl->lock, flags); 279 + mstr_cfg = readl(ctrl->base + MSTR_CONFIG); 419 280 420 281 /* We are half duplex, so either rx or tx will be set */ 421 282 if (xfer->rx_buf) { ··· 431 290 ctrl->xfer.is_last = list_is_last(&xfer->transfer_list, 432 291 &master->cur_msg->transfers); 433 292 ctrl->xfer.rem_bytes = xfer->len; 293 + 294 + if (xfer->rx_sg.nents || xfer->tx_sg.nents) { 295 + /* do DMA transfer */ 296 + if (!(mstr_cfg & DMA_ENABLE)) { 297 + mstr_cfg |= DMA_ENABLE; 298 + writel(mstr_cfg, ctrl->base + MSTR_CONFIG); 299 + } 300 + 301 + ret = qcom_qspi_setup_dma_desc(ctrl, xfer); 302 + if (ret != -EAGAIN) { 303 + if (!ret) 304 + qcom_qspi_dma_xfer(ctrl); 305 + goto exit; 306 + } 307 + dev_warn_once(ctrl->dev, "DMA failure, falling back to PIO\n"); 308 + ret = 0; /* We'll retry w/ PIO */ 309 + } 310 + 311 + if (mstr_cfg & DMA_ENABLE) { 312 + mstr_cfg &= ~DMA_ENABLE; 313 + writel(mstr_cfg, ctrl->base + MSTR_CONFIG); 314 + } 434 315 qcom_qspi_pio_xfer(ctrl); 435 316 317 + exit: 436 318 spin_unlock_irqrestore(&ctrl->lock, flags); 319 + 320 + if (ret) 321 + return ret; 437 322 438 323 /* We'll call spi_finalize_current_transfer() when done */ 439 324 return 1; ··· 491 324 492 325 writel(mstr_cfg, ctrl->base + MSTR_CONFIG); 493 326 spin_unlock_irqrestore(&ctrl->lock, flags); 327 + 328 + return 0; 329 + } 330 + 331 + static int qcom_qspi_alloc_dma(struct qcom_qspi *ctrl) 332 + { 333 + ctrl->dma_cmd_pool = dmam_pool_create("qspi cmd desc pool", 334 + ctrl->dev, sizeof(struct qspi_cmd_desc), 0, 0); 335 + if (!ctrl->dma_cmd_pool) 336 + return -ENOMEM; 494 337 495 338 return 0; 496 339 } ··· 603 426 int_status = readl(ctrl->base + MSTR_INT_STATUS); 604 427 writel(int_status, ctrl->base + MSTR_INT_STATUS); 605 428 429 + /* PIO mode handling */ 606 430 if (ctrl->xfer.dir == QSPI_WRITE) { 607 431 if (int_status & WR_FIFO_EMPTY) 608 432 ret = pio_write(ctrl); ··· 624 446 625 447 if (!ctrl->xfer.rem_bytes) { 626 448 writel(0, ctrl->base + MSTR_INT_EN); 449 + spi_finalize_current_transfer(dev_get_drvdata(ctrl->dev)); 450 + } 451 + 452 + /* DMA mode handling */ 453 + if (int_status & DMA_CHAIN_DONE) { 454 + int i; 455 + 456 + writel(0, ctrl->base + MSTR_INT_EN); 457 + ctrl->xfer.rem_bytes = 0; 458 + 459 + for (i = 0; i < ctrl->n_cmd_desc; i++) 460 + dma_pool_free(ctrl->dma_cmd_pool, ctrl->virt_cmd_desc[i], 461 + ctrl->dma_cmd_desc[i]); 462 + ctrl->n_cmd_desc = 0; 463 + 464 + ret = IRQ_HANDLED; 627 465 spi_finalize_current_transfer(dev_get_drvdata(ctrl->dev)); 628 466 } 629 467 ··· 711 517 return ret; 712 518 } 713 519 520 + ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32)); 521 + if (ret) 522 + return dev_err_probe(dev, ret, "could not set DMA mask\n"); 523 + 714 524 master->max_speed_hz = 300000000; 525 + master->max_dma_len = 65536; /* as per HPG */ 526 + master->dma_alignment = QSPI_ALIGN_REQ; 715 527 master->num_chipselect = QSPI_NUM_CS; 716 528 master->bus_num = -1; 717 529 master->dev.of_node = pdev->dev.of_node; ··· 728 528 master->prepare_message = qcom_qspi_prepare_message; 729 529 master->transfer_one = qcom_qspi_transfer_one; 730 530 master->handle_err = qcom_qspi_handle_err; 531 + if (of_property_read_bool(pdev->dev.of_node, "iommus")) 532 + master->can_dma = qcom_qspi_can_dma; 731 533 master->auto_runtime_pm = true; 732 534 733 535 ret = devm_pm_opp_set_clkname(&pdev->dev, "core"); ··· 741 539 dev_err(&pdev->dev, "invalid OPP table in device tree\n"); 742 540 return ret; 743 541 } 542 + 543 + ret = qcom_qspi_alloc_dma(ctrl); 544 + if (ret) 545 + return ret; 744 546 745 547 pm_runtime_use_autosuspend(dev); 746 548 pm_runtime_set_autosuspend_delay(dev, 250);
+667
drivers/spi/spi-rzv2m-csi.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * Renesas RZ/V2M Clocked Serial Interface (CSI) driver 4 + * 5 + * Copyright (C) 2023 Renesas Electronics Corporation 6 + */ 7 + 8 + #include <linux/clk.h> 9 + #include <linux/count_zeros.h> 10 + #include <linux/interrupt.h> 11 + #include <linux/iopoll.h> 12 + #include <linux/platform_device.h> 13 + #include <linux/reset.h> 14 + #include <linux/spi/spi.h> 15 + 16 + /* Registers */ 17 + #define CSI_MODE 0x00 /* CSI mode control */ 18 + #define CSI_CLKSEL 0x04 /* CSI clock select */ 19 + #define CSI_CNT 0x08 /* CSI control */ 20 + #define CSI_INT 0x0C /* CSI interrupt status */ 21 + #define CSI_IFIFOL 0x10 /* CSI receive FIFO level display */ 22 + #define CSI_OFIFOL 0x14 /* CSI transmit FIFO level display */ 23 + #define CSI_IFIFO 0x18 /* CSI receive window */ 24 + #define CSI_OFIFO 0x1C /* CSI transmit window */ 25 + #define CSI_FIFOTRG 0x20 /* CSI FIFO trigger level */ 26 + 27 + /* CSI_MODE */ 28 + #define CSI_MODE_CSIE BIT(7) 29 + #define CSI_MODE_TRMD BIT(6) 30 + #define CSI_MODE_CCL BIT(5) 31 + #define CSI_MODE_DIR BIT(4) 32 + #define CSI_MODE_CSOT BIT(0) 33 + 34 + #define CSI_MODE_SETUP 0x00000040 35 + 36 + /* CSI_CLKSEL */ 37 + #define CSI_CLKSEL_CKP BIT(17) 38 + #define CSI_CLKSEL_DAP BIT(16) 39 + #define CSI_CLKSEL_SLAVE BIT(15) 40 + #define CSI_CLKSEL_CKS GENMASK(14, 1) 41 + 42 + /* CSI_CNT */ 43 + #define CSI_CNT_CSIRST BIT(28) 44 + #define CSI_CNT_R_TRGEN BIT(19) 45 + #define CSI_CNT_UNDER_E BIT(13) 46 + #define CSI_CNT_OVERF_E BIT(12) 47 + #define CSI_CNT_TREND_E BIT(9) 48 + #define CSI_CNT_CSIEND_E BIT(8) 49 + #define CSI_CNT_T_TRGR_E BIT(4) 50 + #define CSI_CNT_R_TRGR_E BIT(0) 51 + 52 + /* CSI_INT */ 53 + #define CSI_INT_UNDER BIT(13) 54 + #define CSI_INT_OVERF BIT(12) 55 + #define CSI_INT_TREND BIT(9) 56 + #define CSI_INT_CSIEND BIT(8) 57 + #define CSI_INT_T_TRGR BIT(4) 58 + #define CSI_INT_R_TRGR BIT(0) 59 + 60 + /* CSI_FIFOTRG */ 61 + #define CSI_FIFOTRG_R_TRG GENMASK(2, 0) 62 + 63 + #define CSI_FIFO_SIZE_BYTES 32 64 + #define CSI_FIFO_HALF_SIZE 16 65 + #define CSI_EN_DIS_TIMEOUT_US 100 66 + #define CSI_CKS_MAX 0x3FFF 67 + 68 + #define UNDERRUN_ERROR BIT(0) 69 + #define OVERFLOW_ERROR BIT(1) 70 + #define TX_TIMEOUT_ERROR BIT(2) 71 + #define RX_TIMEOUT_ERROR BIT(3) 72 + 73 + #define CSI_MAX_SPI_SCKO 8000000 74 + 75 + struct rzv2m_csi_priv { 76 + void __iomem *base; 77 + struct clk *csiclk; 78 + struct clk *pclk; 79 + struct device *dev; 80 + struct spi_controller *controller; 81 + const u8 *txbuf; 82 + u8 *rxbuf; 83 + int buffer_len; 84 + int bytes_sent; 85 + int bytes_received; 86 + int bytes_to_transfer; 87 + int words_to_transfer; 88 + unsigned char bytes_per_word; 89 + wait_queue_head_t wait; 90 + u8 errors; 91 + u32 status; 92 + }; 93 + 94 + static const unsigned char x_trg[] = { 95 + 0, 1, 1, 2, 2, 2, 2, 3, 96 + 3, 3, 3, 3, 3, 3, 3, 4, 97 + 4, 4, 4, 4, 4, 4, 4, 4, 98 + 4, 4, 4, 4, 4, 4, 4, 5 99 + }; 100 + 101 + static const unsigned char x_trg_words[] = { 102 + 1, 2, 2, 4, 4, 4, 4, 8, 103 + 8, 8, 8, 8, 8, 8, 8, 16, 104 + 16, 16, 16, 16, 16, 16, 16, 16, 105 + 16, 16, 16, 16, 16, 16, 16, 32 106 + }; 107 + 108 + static void rzv2m_csi_reg_write_bit(const struct rzv2m_csi_priv *csi, 109 + int reg_offs, int bit_mask, u32 value) 110 + { 111 + int nr_zeros; 112 + u32 tmp; 113 + 114 + nr_zeros = count_trailing_zeros(bit_mask); 115 + value <<= nr_zeros; 116 + 117 + tmp = (readl(csi->base + reg_offs) & ~bit_mask) | value; 118 + writel(tmp, csi->base + reg_offs); 119 + } 120 + 121 + static int rzv2m_csi_sw_reset(struct rzv2m_csi_priv *csi, int assert) 122 + { 123 + u32 reg; 124 + 125 + rzv2m_csi_reg_write_bit(csi, CSI_CNT, CSI_CNT_CSIRST, assert); 126 + 127 + if (assert) { 128 + return readl_poll_timeout(csi->base + CSI_MODE, reg, 129 + !(reg & CSI_MODE_CSOT), 0, 130 + CSI_EN_DIS_TIMEOUT_US); 131 + } 132 + 133 + return 0; 134 + } 135 + 136 + static int rzv2m_csi_start_stop_operation(const struct rzv2m_csi_priv *csi, 137 + int enable, bool wait) 138 + { 139 + u32 reg; 140 + 141 + rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_CSIE, enable); 142 + 143 + if (!enable && wait) 144 + return readl_poll_timeout(csi->base + CSI_MODE, reg, 145 + !(reg & CSI_MODE_CSOT), 0, 146 + CSI_EN_DIS_TIMEOUT_US); 147 + 148 + return 0; 149 + } 150 + 151 + static int rzv2m_csi_fill_txfifo(struct rzv2m_csi_priv *csi) 152 + { 153 + int i; 154 + 155 + if (readl(csi->base + CSI_OFIFOL)) 156 + return -EIO; 157 + 158 + if (csi->bytes_per_word == 2) { 159 + u16 *buf = (u16 *)csi->txbuf; 160 + 161 + for (i = 0; i < csi->words_to_transfer; i++) 162 + writel(buf[i], csi->base + CSI_OFIFO); 163 + } else { 164 + u8 *buf = (u8 *)csi->txbuf; 165 + 166 + for (i = 0; i < csi->words_to_transfer; i++) 167 + writel(buf[i], csi->base + CSI_OFIFO); 168 + } 169 + 170 + csi->txbuf += csi->bytes_to_transfer; 171 + csi->bytes_sent += csi->bytes_to_transfer; 172 + 173 + return 0; 174 + } 175 + 176 + static int rzv2m_csi_read_rxfifo(struct rzv2m_csi_priv *csi) 177 + { 178 + int i; 179 + 180 + if (readl(csi->base + CSI_IFIFOL) != csi->bytes_to_transfer) 181 + return -EIO; 182 + 183 + if (csi->bytes_per_word == 2) { 184 + u16 *buf = (u16 *)csi->rxbuf; 185 + 186 + for (i = 0; i < csi->words_to_transfer; i++) 187 + buf[i] = (u16)readl(csi->base + CSI_IFIFO); 188 + } else { 189 + u8 *buf = (u8 *)csi->rxbuf; 190 + 191 + for (i = 0; i < csi->words_to_transfer; i++) 192 + buf[i] = (u8)readl(csi->base + CSI_IFIFO); 193 + } 194 + 195 + csi->rxbuf += csi->bytes_to_transfer; 196 + csi->bytes_received += csi->bytes_to_transfer; 197 + 198 + return 0; 199 + } 200 + 201 + static inline void rzv2m_csi_calc_current_transfer(struct rzv2m_csi_priv *csi) 202 + { 203 + int bytes_transferred = max_t(int, csi->bytes_received, csi->bytes_sent); 204 + int bytes_remaining = csi->buffer_len - bytes_transferred; 205 + int to_transfer; 206 + 207 + if (csi->txbuf) 208 + /* 209 + * Leaving a little bit of headroom in the FIFOs makes it very 210 + * hard to raise an overflow error (which is only possible 211 + * when IP transmits and receives at the same time). 212 + */ 213 + to_transfer = min_t(int, CSI_FIFO_HALF_SIZE, bytes_remaining); 214 + else 215 + to_transfer = min_t(int, CSI_FIFO_SIZE_BYTES, bytes_remaining); 216 + 217 + if (csi->bytes_per_word == 2) 218 + to_transfer >>= 1; 219 + 220 + /* 221 + * We can only choose a trigger level from a predefined set of values. 222 + * This will pick a value that is the greatest possible integer that's 223 + * less than or equal to the number of bytes we need to transfer. 224 + * This may result in multiple smaller transfers. 225 + */ 226 + csi->words_to_transfer = x_trg_words[to_transfer - 1]; 227 + 228 + if (csi->bytes_per_word == 2) 229 + csi->bytes_to_transfer = csi->words_to_transfer << 1; 230 + else 231 + csi->bytes_to_transfer = csi->words_to_transfer; 232 + } 233 + 234 + static inline void rzv2m_csi_set_rx_fifo_trigger_level(struct rzv2m_csi_priv *csi) 235 + { 236 + rzv2m_csi_reg_write_bit(csi, CSI_FIFOTRG, CSI_FIFOTRG_R_TRG, 237 + x_trg[csi->words_to_transfer - 1]); 238 + } 239 + 240 + static inline void rzv2m_csi_enable_rx_trigger(struct rzv2m_csi_priv *csi, 241 + bool enable) 242 + { 243 + rzv2m_csi_reg_write_bit(csi, CSI_CNT, CSI_CNT_R_TRGEN, enable); 244 + } 245 + 246 + static void rzv2m_csi_disable_irqs(const struct rzv2m_csi_priv *csi, 247 + u32 enable_bits) 248 + { 249 + u32 cnt = readl(csi->base + CSI_CNT); 250 + 251 + writel(cnt & ~enable_bits, csi->base + CSI_CNT); 252 + } 253 + 254 + static void rzv2m_csi_disable_all_irqs(struct rzv2m_csi_priv *csi) 255 + { 256 + rzv2m_csi_disable_irqs(csi, CSI_CNT_R_TRGR_E | CSI_CNT_T_TRGR_E | 257 + CSI_CNT_CSIEND_E | CSI_CNT_TREND_E | 258 + CSI_CNT_OVERF_E | CSI_CNT_UNDER_E); 259 + } 260 + 261 + static inline void rzv2m_csi_clear_irqs(struct rzv2m_csi_priv *csi, u32 irqs) 262 + { 263 + writel(irqs, csi->base + CSI_INT); 264 + } 265 + 266 + static void rzv2m_csi_clear_all_irqs(struct rzv2m_csi_priv *csi) 267 + { 268 + rzv2m_csi_clear_irqs(csi, CSI_INT_UNDER | CSI_INT_OVERF | 269 + CSI_INT_TREND | CSI_INT_CSIEND | CSI_INT_T_TRGR | 270 + CSI_INT_R_TRGR); 271 + } 272 + 273 + static void rzv2m_csi_enable_irqs(struct rzv2m_csi_priv *csi, u32 enable_bits) 274 + { 275 + u32 cnt = readl(csi->base + CSI_CNT); 276 + 277 + writel(cnt | enable_bits, csi->base + CSI_CNT); 278 + } 279 + 280 + static int rzv2m_csi_wait_for_interrupt(struct rzv2m_csi_priv *csi, 281 + u32 wait_mask, u32 enable_bits) 282 + { 283 + int ret; 284 + 285 + rzv2m_csi_enable_irqs(csi, enable_bits); 286 + 287 + ret = wait_event_timeout(csi->wait, 288 + ((csi->status & wait_mask) == wait_mask) || 289 + csi->errors, HZ); 290 + 291 + rzv2m_csi_disable_irqs(csi, enable_bits); 292 + 293 + if (csi->errors) 294 + return -EIO; 295 + 296 + if (!ret) 297 + return -ETIMEDOUT; 298 + 299 + return 0; 300 + } 301 + 302 + static int rzv2m_csi_wait_for_tx_empty(struct rzv2m_csi_priv *csi) 303 + { 304 + int ret; 305 + 306 + if (readl(csi->base + CSI_OFIFOL) == 0) 307 + return 0; 308 + 309 + ret = rzv2m_csi_wait_for_interrupt(csi, CSI_INT_TREND, CSI_CNT_TREND_E); 310 + 311 + if (ret == -ETIMEDOUT) 312 + csi->errors |= TX_TIMEOUT_ERROR; 313 + 314 + return ret; 315 + } 316 + 317 + static inline int rzv2m_csi_wait_for_rx_ready(struct rzv2m_csi_priv *csi) 318 + { 319 + int ret; 320 + 321 + if (readl(csi->base + CSI_IFIFOL) == csi->bytes_to_transfer) 322 + return 0; 323 + 324 + ret = rzv2m_csi_wait_for_interrupt(csi, CSI_INT_R_TRGR, 325 + CSI_CNT_R_TRGR_E); 326 + 327 + if (ret == -ETIMEDOUT) 328 + csi->errors |= RX_TIMEOUT_ERROR; 329 + 330 + return ret; 331 + } 332 + 333 + static irqreturn_t rzv2m_csi_irq_handler(int irq, void *data) 334 + { 335 + struct rzv2m_csi_priv *csi = (struct rzv2m_csi_priv *)data; 336 + 337 + csi->status = readl(csi->base + CSI_INT); 338 + rzv2m_csi_disable_irqs(csi, csi->status); 339 + 340 + if (csi->status & CSI_INT_OVERF) 341 + csi->errors |= OVERFLOW_ERROR; 342 + if (csi->status & CSI_INT_UNDER) 343 + csi->errors |= UNDERRUN_ERROR; 344 + 345 + wake_up(&csi->wait); 346 + 347 + return IRQ_HANDLED; 348 + } 349 + 350 + static void rzv2m_csi_setup_clock(struct rzv2m_csi_priv *csi, u32 spi_hz) 351 + { 352 + unsigned long csiclk_rate = clk_get_rate(csi->csiclk); 353 + unsigned long pclk_rate = clk_get_rate(csi->pclk); 354 + unsigned long csiclk_rate_limit = pclk_rate >> 1; 355 + u32 cks; 356 + 357 + /* 358 + * There is a restriction on the frequency of CSICLK, it has to be <= 359 + * PCLK / 2. 360 + */ 361 + if (csiclk_rate > csiclk_rate_limit) { 362 + clk_set_rate(csi->csiclk, csiclk_rate >> 1); 363 + csiclk_rate = clk_get_rate(csi->csiclk); 364 + } else if ((csiclk_rate << 1) <= csiclk_rate_limit) { 365 + clk_set_rate(csi->csiclk, csiclk_rate << 1); 366 + csiclk_rate = clk_get_rate(csi->csiclk); 367 + } 368 + 369 + spi_hz = spi_hz > CSI_MAX_SPI_SCKO ? CSI_MAX_SPI_SCKO : spi_hz; 370 + 371 + cks = DIV_ROUND_UP(csiclk_rate, spi_hz << 1); 372 + if (cks > CSI_CKS_MAX) 373 + cks = CSI_CKS_MAX; 374 + 375 + dev_dbg(csi->dev, "SPI clk rate is %ldHz\n", csiclk_rate / (cks << 1)); 376 + 377 + rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_CKS, cks); 378 + } 379 + 380 + static void rzv2m_csi_setup_operating_mode(struct rzv2m_csi_priv *csi, 381 + struct spi_transfer *t) 382 + { 383 + if (t->rx_buf && !t->tx_buf) 384 + /* Reception-only mode */ 385 + rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_TRMD, 0); 386 + else 387 + /* Send and receive mode */ 388 + rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_TRMD, 1); 389 + 390 + csi->bytes_per_word = t->bits_per_word / 8; 391 + rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_CCL, 392 + csi->bytes_per_word == 2); 393 + } 394 + 395 + static int rzv2m_csi_setup(struct spi_device *spi) 396 + { 397 + struct rzv2m_csi_priv *csi = spi_controller_get_devdata(spi->controller); 398 + int ret; 399 + 400 + rzv2m_csi_sw_reset(csi, 0); 401 + 402 + writel(CSI_MODE_SETUP, csi->base + CSI_MODE); 403 + 404 + /* Setup clock polarity and phase timing */ 405 + rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_CKP, 406 + !(spi->mode & SPI_CPOL)); 407 + rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_DAP, 408 + !(spi->mode & SPI_CPHA)); 409 + 410 + /* Setup serial data order */ 411 + rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_DIR, 412 + !!(spi->mode & SPI_LSB_FIRST)); 413 + 414 + /* Set the operation mode as master */ 415 + rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_SLAVE, 0); 416 + 417 + /* Give the IP a SW reset */ 418 + ret = rzv2m_csi_sw_reset(csi, 1); 419 + if (ret) 420 + return ret; 421 + rzv2m_csi_sw_reset(csi, 0); 422 + 423 + /* 424 + * We need to enable the communication so that the clock will settle 425 + * for the right polarity before enabling the CS. 426 + */ 427 + rzv2m_csi_start_stop_operation(csi, 1, false); 428 + udelay(10); 429 + rzv2m_csi_start_stop_operation(csi, 0, false); 430 + 431 + return 0; 432 + } 433 + 434 + static int rzv2m_csi_pio_transfer(struct rzv2m_csi_priv *csi) 435 + { 436 + bool tx_completed = csi->txbuf ? false : true; 437 + bool rx_completed = csi->rxbuf ? false : true; 438 + int ret = 0; 439 + 440 + /* Make sure the TX FIFO is empty */ 441 + writel(0, csi->base + CSI_OFIFOL); 442 + 443 + csi->bytes_sent = 0; 444 + csi->bytes_received = 0; 445 + csi->errors = 0; 446 + 447 + rzv2m_csi_disable_all_irqs(csi); 448 + rzv2m_csi_clear_all_irqs(csi); 449 + rzv2m_csi_enable_rx_trigger(csi, true); 450 + 451 + while (!tx_completed || !rx_completed) { 452 + /* 453 + * Decide how many words we are going to transfer during 454 + * this cycle (for both TX and RX), then set the RX FIFO trigger 455 + * level accordingly. No need to set a trigger level for the 456 + * TX FIFO, as this IP comes with an interrupt that fires when 457 + * the TX FIFO is empty. 458 + */ 459 + rzv2m_csi_calc_current_transfer(csi); 460 + rzv2m_csi_set_rx_fifo_trigger_level(csi); 461 + 462 + rzv2m_csi_enable_irqs(csi, CSI_INT_OVERF | CSI_INT_UNDER); 463 + 464 + /* Make sure the RX FIFO is empty */ 465 + writel(0, csi->base + CSI_IFIFOL); 466 + 467 + writel(readl(csi->base + CSI_INT), csi->base + CSI_INT); 468 + csi->status = 0; 469 + 470 + rzv2m_csi_start_stop_operation(csi, 1, false); 471 + 472 + /* TX */ 473 + if (csi->txbuf) { 474 + ret = rzv2m_csi_fill_txfifo(csi); 475 + if (ret) 476 + break; 477 + 478 + ret = rzv2m_csi_wait_for_tx_empty(csi); 479 + if (ret) 480 + break; 481 + 482 + if (csi->bytes_sent == csi->buffer_len) 483 + tx_completed = true; 484 + } 485 + 486 + /* 487 + * Make sure the RX FIFO contains the desired number of words. 488 + * We then either flush its content, or we copy it onto 489 + * csi->rxbuf. 490 + */ 491 + ret = rzv2m_csi_wait_for_rx_ready(csi); 492 + if (ret) 493 + break; 494 + 495 + /* RX */ 496 + if (csi->rxbuf) { 497 + rzv2m_csi_start_stop_operation(csi, 0, false); 498 + 499 + ret = rzv2m_csi_read_rxfifo(csi); 500 + if (ret) 501 + break; 502 + 503 + if (csi->bytes_received == csi->buffer_len) 504 + rx_completed = true; 505 + } 506 + 507 + ret = rzv2m_csi_start_stop_operation(csi, 0, true); 508 + if (ret) 509 + goto pio_quit; 510 + 511 + if (csi->errors) { 512 + ret = -EIO; 513 + goto pio_quit; 514 + } 515 + } 516 + 517 + rzv2m_csi_start_stop_operation(csi, 0, true); 518 + 519 + pio_quit: 520 + rzv2m_csi_disable_all_irqs(csi); 521 + rzv2m_csi_enable_rx_trigger(csi, false); 522 + rzv2m_csi_clear_all_irqs(csi); 523 + 524 + return ret; 525 + } 526 + 527 + static int rzv2m_csi_transfer_one(struct spi_controller *controller, 528 + struct spi_device *spi, 529 + struct spi_transfer *transfer) 530 + { 531 + struct rzv2m_csi_priv *csi = spi_controller_get_devdata(controller); 532 + struct device *dev = csi->dev; 533 + int ret; 534 + 535 + csi->txbuf = transfer->tx_buf; 536 + csi->rxbuf = transfer->rx_buf; 537 + csi->buffer_len = transfer->len; 538 + 539 + rzv2m_csi_setup_operating_mode(csi, transfer); 540 + 541 + rzv2m_csi_setup_clock(csi, transfer->speed_hz); 542 + 543 + ret = rzv2m_csi_pio_transfer(csi); 544 + if (ret) { 545 + if (csi->errors & UNDERRUN_ERROR) 546 + dev_err(dev, "Underrun error\n"); 547 + if (csi->errors & OVERFLOW_ERROR) 548 + dev_err(dev, "Overflow error\n"); 549 + if (csi->errors & TX_TIMEOUT_ERROR) 550 + dev_err(dev, "TX timeout error\n"); 551 + if (csi->errors & RX_TIMEOUT_ERROR) 552 + dev_err(dev, "RX timeout error\n"); 553 + } 554 + 555 + return ret; 556 + } 557 + 558 + static int rzv2m_csi_probe(struct platform_device *pdev) 559 + { 560 + struct spi_controller *controller; 561 + struct device *dev = &pdev->dev; 562 + struct rzv2m_csi_priv *csi; 563 + struct reset_control *rstc; 564 + int irq; 565 + int ret; 566 + 567 + controller = devm_spi_alloc_master(dev, sizeof(*csi)); 568 + if (!controller) 569 + return -ENOMEM; 570 + 571 + csi = spi_controller_get_devdata(controller); 572 + platform_set_drvdata(pdev, csi); 573 + 574 + csi->dev = dev; 575 + csi->controller = controller; 576 + 577 + csi->base = devm_platform_ioremap_resource(pdev, 0); 578 + if (IS_ERR(csi->base)) 579 + return PTR_ERR(csi->base); 580 + 581 + irq = platform_get_irq(pdev, 0); 582 + if (irq < 0) 583 + return irq; 584 + 585 + csi->csiclk = devm_clk_get(dev, "csiclk"); 586 + if (IS_ERR(csi->csiclk)) 587 + return dev_err_probe(dev, PTR_ERR(csi->csiclk), 588 + "could not get csiclk\n"); 589 + 590 + csi->pclk = devm_clk_get(dev, "pclk"); 591 + if (IS_ERR(csi->pclk)) 592 + return dev_err_probe(dev, PTR_ERR(csi->pclk), 593 + "could not get pclk\n"); 594 + 595 + rstc = devm_reset_control_get_shared(dev, NULL); 596 + if (IS_ERR(rstc)) 597 + return dev_err_probe(dev, PTR_ERR(rstc), "Missing reset ctrl\n"); 598 + 599 + init_waitqueue_head(&csi->wait); 600 + 601 + controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST; 602 + controller->dev.of_node = pdev->dev.of_node; 603 + controller->bits_per_word_mask = SPI_BPW_MASK(16) | SPI_BPW_MASK(8); 604 + controller->setup = rzv2m_csi_setup; 605 + controller->transfer_one = rzv2m_csi_transfer_one; 606 + controller->use_gpio_descriptors = true; 607 + 608 + ret = devm_request_irq(dev, irq, rzv2m_csi_irq_handler, 0, 609 + dev_name(dev), csi); 610 + if (ret) 611 + return dev_err_probe(dev, ret, "cannot request IRQ\n"); 612 + 613 + /* 614 + * The reset also affects other HW that is not under the control 615 + * of Linux. Therefore, all we can do is make sure the reset is 616 + * deasserted. 617 + */ 618 + reset_control_deassert(rstc); 619 + 620 + /* Make sure the IP is in SW reset state */ 621 + ret = rzv2m_csi_sw_reset(csi, 1); 622 + if (ret) 623 + return ret; 624 + 625 + ret = clk_prepare_enable(csi->csiclk); 626 + if (ret) 627 + return dev_err_probe(dev, ret, "could not enable csiclk\n"); 628 + 629 + ret = spi_register_controller(controller); 630 + if (ret) { 631 + clk_disable_unprepare(csi->csiclk); 632 + return dev_err_probe(dev, ret, "register controller failed\n"); 633 + } 634 + 635 + return 0; 636 + } 637 + 638 + static int rzv2m_csi_remove(struct platform_device *pdev) 639 + { 640 + struct rzv2m_csi_priv *csi = platform_get_drvdata(pdev); 641 + 642 + spi_unregister_controller(csi->controller); 643 + rzv2m_csi_sw_reset(csi, 1); 644 + clk_disable_unprepare(csi->csiclk); 645 + 646 + return 0; 647 + } 648 + 649 + static const struct of_device_id rzv2m_csi_match[] = { 650 + { .compatible = "renesas,rzv2m-csi" }, 651 + { /* sentinel */ } 652 + }; 653 + MODULE_DEVICE_TABLE(of, rzv2m_csi_match); 654 + 655 + static struct platform_driver rzv2m_csi_drv = { 656 + .probe = rzv2m_csi_probe, 657 + .remove = rzv2m_csi_remove, 658 + .driver = { 659 + .name = "rzv2m_csi", 660 + .of_match_table = rzv2m_csi_match, 661 + }, 662 + }; 663 + module_platform_driver(rzv2m_csi_drv); 664 + 665 + MODULE_LICENSE("GPL"); 666 + MODULE_AUTHOR("Fabrizio Castro <castro.fabrizio.jz@renesas.com>"); 667 + MODULE_DESCRIPTION("Clocked Serial Interface Driver");
+102 -95
drivers/spi/spi-s3c64xx.c
··· 19 19 #include <linux/platform_data/spi-s3c64xx.h> 20 20 21 21 #define MAX_SPI_PORTS 12 22 - #define S3C64XX_SPI_QUIRK_POLL (1 << 0) 23 22 #define S3C64XX_SPI_QUIRK_CS_AUTO (1 << 1) 24 23 #define AUTOSUSPEND_TIMEOUT 2000 25 24 ··· 58 59 #define S3C64XX_SPI_MODE_BUS_TSZ_HALFWORD (1<<17) 59 60 #define S3C64XX_SPI_MODE_BUS_TSZ_WORD (2<<17) 60 61 #define S3C64XX_SPI_MODE_BUS_TSZ_MASK (3<<17) 62 + #define S3C64XX_SPI_MODE_RX_RDY_LVL GENMASK(16, 11) 63 + #define S3C64XX_SPI_MODE_RX_RDY_LVL_SHIFT 11 61 64 #define S3C64XX_SPI_MODE_SELF_LOOPBACK (1<<3) 62 65 #define S3C64XX_SPI_MODE_RXDMA_ON (1<<2) 63 66 #define S3C64XX_SPI_MODE_TXDMA_ON (1<<1) ··· 116 115 117 116 #define S3C64XX_SPI_TRAILCNT S3C64XX_SPI_MAX_TRAILCNT 118 117 118 + #define S3C64XX_SPI_POLLING_SIZE 32 119 + 119 120 #define msecs_to_loops(t) (loops_per_jiffy / 1000 * HZ * t) 120 - #define is_polling(x) (x->port_conf->quirks & S3C64XX_SPI_QUIRK_POLL) 121 + #define is_polling(x) (x->cntrlr_info->polling) 121 122 122 123 #define RXBUSY (1<<2) 123 124 #define TXBUSY (1<<3) ··· 556 553 } 557 554 558 555 static int s3c64xx_wait_for_pio(struct s3c64xx_spi_driver_data *sdd, 559 - struct spi_transfer *xfer) 556 + struct spi_transfer *xfer, bool use_irq) 560 557 { 561 558 void __iomem *regs = sdd->regs; 562 559 unsigned long val; ··· 565 562 u32 cpy_len; 566 563 u8 *buf; 567 564 int ms; 565 + unsigned long time_us; 568 566 569 - /* millisecs to xfer 'len' bytes @ 'cur_speed' */ 570 - ms = xfer->len * 8 * 1000 / sdd->cur_speed; 567 + /* microsecs to xfer 'len' bytes @ 'cur_speed' */ 568 + time_us = (xfer->len * 8 * 1000 * 1000) / sdd->cur_speed; 569 + ms = (time_us / 1000); 571 570 ms += 10; /* some tolerance */ 571 + 572 + /* sleep during signal transfer time */ 573 + status = readl(regs + S3C64XX_SPI_STATUS); 574 + if (RX_FIFO_LVL(status, sdd) < xfer->len) 575 + usleep_range(time_us / 2, time_us); 576 + 577 + if (use_irq) { 578 + val = msecs_to_jiffies(ms); 579 + if (!wait_for_completion_timeout(&sdd->xfer_completion, val)) 580 + return -EIO; 581 + } 572 582 573 583 val = msecs_to_loops(ms); 574 584 do { ··· 745 729 void *rx_buf = NULL; 746 730 int target_len = 0, origin_len = 0; 747 731 int use_dma = 0; 732 + bool use_irq = false; 748 733 int status; 749 734 u32 speed; 750 735 u8 bpw; 751 736 unsigned long flags; 737 + u32 rdy_lv; 738 + u32 val; 752 739 753 740 reinit_completion(&sdd->xfer_completion); 754 741 ··· 772 753 sdd->rx_dma.ch && sdd->tx_dma.ch) { 773 754 use_dma = 1; 774 755 775 - } else if (xfer->len > fifo_len) { 756 + } else if (xfer->len >= fifo_len) { 776 757 tx_buf = xfer->tx_buf; 777 758 rx_buf = xfer->rx_buf; 778 759 origin_len = xfer->len; 779 - 780 760 target_len = xfer->len; 781 - if (xfer->len > fifo_len) 782 - xfer->len = fifo_len; 761 + xfer->len = fifo_len - 1; 783 762 } 784 763 785 764 do { 765 + /* transfer size is greater than 32, change to IRQ mode */ 766 + if (!use_dma && xfer->len > S3C64XX_SPI_POLLING_SIZE) 767 + use_irq = true; 768 + 769 + if (use_irq) { 770 + reinit_completion(&sdd->xfer_completion); 771 + 772 + rdy_lv = xfer->len; 773 + /* Setup RDY_FIFO trigger Level 774 + * RDY_LVL = 775 + * fifo_lvl up to 64 byte -> N bytes 776 + * 128 byte -> RDY_LVL * 2 bytes 777 + * 256 byte -> RDY_LVL * 4 bytes 778 + */ 779 + if (fifo_len == 128) 780 + rdy_lv /= 2; 781 + else if (fifo_len == 256) 782 + rdy_lv /= 4; 783 + 784 + val = readl(sdd->regs + S3C64XX_SPI_MODE_CFG); 785 + val &= ~S3C64XX_SPI_MODE_RX_RDY_LVL; 786 + val |= (rdy_lv << S3C64XX_SPI_MODE_RX_RDY_LVL_SHIFT); 787 + writel(val, sdd->regs + S3C64XX_SPI_MODE_CFG); 788 + 789 + /* Enable FIFO_RDY_EN IRQ */ 790 + val = readl(sdd->regs + S3C64XX_SPI_INT_EN); 791 + writel((val | S3C64XX_SPI_INT_RX_FIFORDY_EN), 792 + sdd->regs + S3C64XX_SPI_INT_EN); 793 + 794 + } 795 + 786 796 spin_lock_irqsave(&sdd->lock, flags); 787 797 788 798 /* Pending only which is to be done */ ··· 833 785 if (use_dma) 834 786 status = s3c64xx_wait_for_dma(sdd, xfer); 835 787 else 836 - status = s3c64xx_wait_for_pio(sdd, xfer); 788 + status = s3c64xx_wait_for_pio(sdd, xfer, use_irq); 837 789 838 790 if (status) { 839 791 dev_err(&spi->dev, ··· 872 824 if (xfer->rx_buf) 873 825 xfer->rx_buf += xfer->len; 874 826 875 - if (target_len > fifo_len) 876 - xfer->len = fifo_len; 827 + if (target_len >= fifo_len) 828 + xfer->len = fifo_len - 1; 877 829 else 878 830 xfer->len = target_len; 879 831 } ··· 1043 995 dev_err(&spi->dev, "TX underrun\n"); 1044 996 } 1045 997 998 + if (val & S3C64XX_SPI_ST_RX_FIFORDY) { 999 + complete(&sdd->xfer_completion); 1000 + /* No pending clear irq, turn-off INT_EN_RX_FIFO_RDY */ 1001 + val = readl(sdd->regs + S3C64XX_SPI_INT_EN); 1002 + writel((val & ~S3C64XX_SPI_INT_RX_FIFORDY_EN), 1003 + sdd->regs + S3C64XX_SPI_INT_EN); 1004 + } 1005 + 1046 1006 /* Clear the pending irq by setting and then clearing it */ 1047 1007 writel(clr, sdd->regs + S3C64XX_SPI_PENDING_CLR); 1048 1008 writel(0, sdd->regs + S3C64XX_SPI_PENDING_CLR); ··· 1124 1068 } 1125 1069 1126 1070 sci->no_cs = of_property_read_bool(dev->of_node, "no-cs-readback"); 1071 + sci->polling = !of_property_present(dev->of_node, "dmas"); 1127 1072 1128 1073 return sci; 1129 1074 } ··· 1160 1103 return PTR_ERR(sci); 1161 1104 } 1162 1105 1163 - if (!sci) { 1164 - dev_err(&pdev->dev, "platform_data missing!\n"); 1165 - return -ENODEV; 1166 - } 1106 + if (!sci) 1107 + return dev_err_probe(&pdev->dev, -ENODEV, 1108 + "Platform_data missing!\n"); 1167 1109 1168 1110 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1169 - if (mem_res == NULL) { 1170 - dev_err(&pdev->dev, "Unable to get SPI MEM resource\n"); 1171 - return -ENXIO; 1172 - } 1111 + if (!mem_res) 1112 + return dev_err_probe(&pdev->dev, -ENXIO, 1113 + "Unable to get SPI MEM resource\n"); 1173 1114 1174 1115 irq = platform_get_irq(pdev, 0); 1175 - if (irq < 0) { 1176 - dev_warn(&pdev->dev, "Failed to get IRQ: %d\n", irq); 1177 - return irq; 1178 - } 1116 + if (irq < 0) 1117 + return dev_err_probe(&pdev->dev, irq, "Failed to get IRQ\n"); 1179 1118 1180 - master = spi_alloc_master(&pdev->dev, 1181 - sizeof(struct s3c64xx_spi_driver_data)); 1182 - if (master == NULL) { 1183 - dev_err(&pdev->dev, "Unable to allocate SPI Master\n"); 1184 - return -ENOMEM; 1185 - } 1119 + master = devm_spi_alloc_master(&pdev->dev, sizeof(*sdd)); 1120 + if (!master) 1121 + return dev_err_probe(&pdev->dev, -ENOMEM, 1122 + "Unable to allocate SPI Master\n"); 1186 1123 1187 1124 platform_set_drvdata(pdev, master); 1188 1125 ··· 1188 1137 sdd->sfr_start = mem_res->start; 1189 1138 if (pdev->dev.of_node) { 1190 1139 ret = of_alias_get_id(pdev->dev.of_node, "spi"); 1191 - if (ret < 0) { 1192 - dev_err(&pdev->dev, "failed to get alias id, errno %d\n", 1193 - ret); 1194 - goto err_deref_master; 1195 - } 1140 + if (ret < 0) 1141 + return dev_err_probe(&pdev->dev, ret, 1142 + "Failed to get alias id\n"); 1196 1143 sdd->port_id = ret; 1197 1144 } else { 1198 1145 sdd->port_id = pdev->id; ··· 1224 1175 master->can_dma = s3c64xx_spi_can_dma; 1225 1176 1226 1177 sdd->regs = devm_ioremap_resource(&pdev->dev, mem_res); 1227 - if (IS_ERR(sdd->regs)) { 1228 - ret = PTR_ERR(sdd->regs); 1229 - goto err_deref_master; 1230 - } 1178 + if (IS_ERR(sdd->regs)) 1179 + return PTR_ERR(sdd->regs); 1231 1180 1232 - if (sci->cfg_gpio && sci->cfg_gpio()) { 1233 - dev_err(&pdev->dev, "Unable to config gpio\n"); 1234 - ret = -EBUSY; 1235 - goto err_deref_master; 1236 - } 1181 + if (sci->cfg_gpio && sci->cfg_gpio()) 1182 + return dev_err_probe(&pdev->dev, -EBUSY, 1183 + "Unable to config gpio\n"); 1237 1184 1238 1185 /* Setup clocks */ 1239 - sdd->clk = devm_clk_get(&pdev->dev, "spi"); 1240 - if (IS_ERR(sdd->clk)) { 1241 - dev_err(&pdev->dev, "Unable to acquire clock 'spi'\n"); 1242 - ret = PTR_ERR(sdd->clk); 1243 - goto err_deref_master; 1244 - } 1245 - 1246 - ret = clk_prepare_enable(sdd->clk); 1247 - if (ret) { 1248 - dev_err(&pdev->dev, "Couldn't enable clock 'spi'\n"); 1249 - goto err_deref_master; 1250 - } 1186 + sdd->clk = devm_clk_get_enabled(&pdev->dev, "spi"); 1187 + if (IS_ERR(sdd->clk)) 1188 + return dev_err_probe(&pdev->dev, PTR_ERR(sdd->clk), 1189 + "Unable to acquire clock 'spi'\n"); 1251 1190 1252 1191 sprintf(clk_name, "spi_busclk%d", sci->src_clk_nr); 1253 - sdd->src_clk = devm_clk_get(&pdev->dev, clk_name); 1254 - if (IS_ERR(sdd->src_clk)) { 1255 - dev_err(&pdev->dev, 1256 - "Unable to acquire clock '%s'\n", clk_name); 1257 - ret = PTR_ERR(sdd->src_clk); 1258 - goto err_disable_clk; 1259 - } 1260 - 1261 - ret = clk_prepare_enable(sdd->src_clk); 1262 - if (ret) { 1263 - dev_err(&pdev->dev, "Couldn't enable clock '%s'\n", clk_name); 1264 - goto err_disable_clk; 1265 - } 1192 + sdd->src_clk = devm_clk_get_enabled(&pdev->dev, clk_name); 1193 + if (IS_ERR(sdd->src_clk)) 1194 + return dev_err_probe(&pdev->dev, PTR_ERR(sdd->src_clk), 1195 + "Unable to acquire clock '%s'\n", 1196 + clk_name); 1266 1197 1267 1198 if (sdd->port_conf->clk_ioclk) { 1268 - sdd->ioclk = devm_clk_get(&pdev->dev, "spi_ioclk"); 1269 - if (IS_ERR(sdd->ioclk)) { 1270 - dev_err(&pdev->dev, "Unable to acquire 'ioclk'\n"); 1271 - ret = PTR_ERR(sdd->ioclk); 1272 - goto err_disable_src_clk; 1273 - } 1274 - 1275 - ret = clk_prepare_enable(sdd->ioclk); 1276 - if (ret) { 1277 - dev_err(&pdev->dev, "Couldn't enable clock 'ioclk'\n"); 1278 - goto err_disable_src_clk; 1279 - } 1199 + sdd->ioclk = devm_clk_get_enabled(&pdev->dev, "spi_ioclk"); 1200 + if (IS_ERR(sdd->ioclk)) 1201 + return dev_err_probe(&pdev->dev, PTR_ERR(sdd->ioclk), 1202 + "Unable to acquire 'ioclk'\n"); 1280 1203 } 1281 1204 1282 1205 pm_runtime_set_autosuspend_delay(&pdev->dev, AUTOSUSPEND_TIMEOUT); ··· 1296 1275 pm_runtime_disable(&pdev->dev); 1297 1276 pm_runtime_set_suspended(&pdev->dev); 1298 1277 1299 - clk_disable_unprepare(sdd->ioclk); 1300 - err_disable_src_clk: 1301 - clk_disable_unprepare(sdd->src_clk); 1302 - err_disable_clk: 1303 - clk_disable_unprepare(sdd->clk); 1304 - err_deref_master: 1305 - spi_master_put(master); 1306 - 1307 1278 return ret; 1308 1279 } 1309 1280 ··· 1312 1299 dma_release_channel(sdd->rx_dma.ch); 1313 1300 dma_release_channel(sdd->tx_dma.ch); 1314 1301 } 1315 - 1316 - clk_disable_unprepare(sdd->ioclk); 1317 - 1318 - clk_disable_unprepare(sdd->src_clk); 1319 - 1320 - clk_disable_unprepare(sdd->clk); 1321 1302 1322 1303 pm_runtime_put_noidle(&pdev->dev); 1323 1304 pm_runtime_disable(&pdev->dev);
+1 -1
drivers/spi/spi-sc18is602.c
··· 337 337 .name = "sc18is602", 338 338 .of_match_table = of_match_ptr(sc18is602_of_match), 339 339 }, 340 - .probe_new = sc18is602_probe, 340 + .probe = sc18is602_probe, 341 341 .id_table = sc18is602_id, 342 342 }; 343 343
+3 -14
drivers/spi/spi-sn-f-ospi.c
··· 526 526 static bool f_ospi_supports_op_width(struct spi_mem *mem, 527 527 const struct spi_mem_op *op) 528 528 { 529 - u8 width_available[] = { 0, 1, 2, 4, 8 }; 529 + static const u8 width_available[] = { 0, 1, 2, 4, 8 }; 530 530 u8 width_op[] = { op->cmd.buswidth, op->addr.buswidth, 531 531 op->dummy.buswidth, op->data.buswidth }; 532 532 bool is_match_found; ··· 566 566 567 567 static int f_ospi_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op) 568 568 { 569 - op->data.nbytes = min((int)op->data.nbytes, (int)(OSPI_DAT_SIZE_MAX)); 569 + op->data.nbytes = min_t(int, op->data.nbytes, OSPI_DAT_SIZE_MAX); 570 570 571 571 return 0; 572 572 } ··· 634 634 goto err_put_ctlr; 635 635 } 636 636 637 - ospi->clk = devm_clk_get(dev, NULL); 637 + ospi->clk = devm_clk_get_enabled(dev, NULL); 638 638 if (IS_ERR(ospi->clk)) { 639 639 ret = PTR_ERR(ospi->clk); 640 640 goto err_put_ctlr; 641 - } 642 - 643 - ret = clk_prepare_enable(ospi->clk); 644 - if (ret) { 645 - dev_err(dev, "Failed to enable the clock\n"); 646 - goto err_disable_clk; 647 641 } 648 642 649 643 mutex_init(&ospi->mlock); ··· 655 661 err_destroy_mutex: 656 662 mutex_destroy(&ospi->mlock); 657 663 658 - err_disable_clk: 659 - clk_disable_unprepare(ospi->clk); 660 - 661 664 err_put_ctlr: 662 665 spi_controller_put(ctlr); 663 666 ··· 664 673 static void f_ospi_remove(struct platform_device *pdev) 665 674 { 666 675 struct f_ospi *ospi = platform_get_drvdata(pdev); 667 - 668 - clk_disable_unprepare(ospi->clk); 669 676 670 677 mutex_destroy(&ospi->mlock); 671 678 }
+159 -115
drivers/spi/spi-stm32.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 2 2 // 3 - // STMicroelectronics STM32 SPI Controller driver (master mode only) 3 + // STMicroelectronics STM32 SPI Controller driver 4 4 // 5 5 // Copyright (C) 2017, STMicroelectronics - All Rights Reserved 6 6 // Author(s): Amelie Delaunay <amelie.delaunay@st.com> for STMicroelectronics. ··· 117 117 #define STM32H7_SPI_CFG2_CPHA BIT(24) 118 118 #define STM32H7_SPI_CFG2_CPOL BIT(25) 119 119 #define STM32H7_SPI_CFG2_SSM BIT(26) 120 + #define STM32H7_SPI_CFG2_SSIOP BIT(28) 120 121 #define STM32H7_SPI_CFG2_AFCNTR BIT(31) 121 122 122 123 /* STM32H7_SPI_IER bit fields */ ··· 171 170 */ 172 171 #define SPI_DMA_MIN_BYTES 16 173 172 173 + /* STM32 SPI driver helpers */ 174 + #define STM32_SPI_MASTER_MODE(stm32_spi) (!(stm32_spi)->device_mode) 175 + #define STM32_SPI_DEVICE_MODE(stm32_spi) ((stm32_spi)->device_mode) 176 + 174 177 /** 175 178 * struct stm32_spi_reg - stm32 SPI register & bitfield desc 176 179 * @reg: register offset ··· 195 190 * @cpol: clock polarity register and polarity bit 196 191 * @cpha: clock phase register and phase bit 197 192 * @lsb_first: LSB transmitted first register and bit 193 + * @cs_high: chips select active value 198 194 * @br: baud rate register and bitfields 199 195 * @rx: SPI RX data register 200 196 * @tx: SPI TX data register ··· 207 201 const struct stm32_spi_reg cpol; 208 202 const struct stm32_spi_reg cpha; 209 203 const struct stm32_spi_reg lsb_first; 204 + const struct stm32_spi_reg cs_high; 210 205 const struct stm32_spi_reg br; 211 206 const struct stm32_spi_reg rx; 212 207 const struct stm32_spi_reg tx; ··· 265 258 /** 266 259 * struct stm32_spi - private data of the SPI controller 267 260 * @dev: driver model representation of the controller 268 - * @master: controller master interface 261 + * @ctrl: controller interface 269 262 * @cfg: compatible configuration data 270 263 * @base: virtual memory area 271 264 * @clk: hw kernel clock feeding the SPI clock generator ··· 287 280 * @dma_tx: dma channel for TX transfer 288 281 * @dma_rx: dma channel for RX transfer 289 282 * @phys_addr: SPI registers physical base address 283 + * @device_mode: the controller is configured as SPI device 290 284 */ 291 285 struct stm32_spi { 292 286 struct device *dev; 293 - struct spi_master *master; 287 + struct spi_controller *ctrl; 294 288 const struct stm32_spi_cfg *cfg; 295 289 void __iomem *base; 296 290 struct clk *clk; ··· 315 307 struct dma_chan *dma_tx; 316 308 struct dma_chan *dma_rx; 317 309 dma_addr_t phys_addr; 310 + 311 + bool device_mode; 318 312 }; 319 313 320 314 static const struct stm32_spi_regspec stm32f4_spi_regspec = { ··· 328 318 .cpol = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_CPOL }, 329 319 .cpha = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_CPHA }, 330 320 .lsb_first = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_LSBFRST }, 321 + .cs_high = {}, 331 322 .br = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_BR, STM32F4_SPI_CR1_BR_SHIFT }, 332 323 333 324 .rx = { STM32F4_SPI_DR }, ··· 347 336 .cpol = { STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_CPOL }, 348 337 .cpha = { STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_CPHA }, 349 338 .lsb_first = { STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_LSBFRST }, 339 + .cs_high = { STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_SSIOP }, 350 340 .br = { STM32H7_SPI_CFG1, STM32H7_SPI_CFG1_MBR, 351 341 STM32H7_SPI_CFG1_MBR_SHIFT }, 352 342 ··· 449 437 div = DIV_ROUND_CLOSEST(spi->clk_rate & ~0x1, speed_hz); 450 438 451 439 /* 452 - * SPI framework set xfer->speed_hz to master->max_speed_hz if 453 - * xfer->speed_hz is greater than master->max_speed_hz, and it returns 454 - * an error when xfer->speed_hz is lower than master->min_speed_hz, so 440 + * SPI framework set xfer->speed_hz to ctrl->max_speed_hz if 441 + * xfer->speed_hz is greater than ctrl->max_speed_hz, and it returns 442 + * an error when xfer->speed_hz is lower than ctrl->min_speed_hz, so 455 443 * no need to check it there. 456 444 * However, we need to ensure the following calculations. 457 445 */ ··· 669 657 } 670 658 671 659 if (spi->cur_usedma && spi->dma_tx) 672 - dmaengine_terminate_all(spi->dma_tx); 660 + dmaengine_terminate_async(spi->dma_tx); 673 661 if (spi->cur_usedma && spi->dma_rx) 674 - dmaengine_terminate_all(spi->dma_rx); 662 + dmaengine_terminate_async(spi->dma_rx); 675 663 676 664 stm32_spi_clr_bits(spi, STM32F4_SPI_CR1, STM32F4_SPI_CR1_SPE); 677 665 ··· 708 696 } 709 697 710 698 if (spi->cur_usedma && spi->dma_tx) 711 - dmaengine_terminate_all(spi->dma_tx); 699 + dmaengine_terminate_async(spi->dma_tx); 712 700 if (spi->cur_usedma && spi->dma_rx) 713 - dmaengine_terminate_all(spi->dma_rx); 701 + dmaengine_terminate_async(spi->dma_rx); 714 702 715 703 stm32_spi_clr_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_SPE); 716 704 ··· 726 714 727 715 /** 728 716 * stm32_spi_can_dma - Determine if the transfer is eligible for DMA use 729 - * @master: controller master interface 717 + * @ctrl: controller interface 730 718 * @spi_dev: pointer to the spi device 731 719 * @transfer: pointer to spi transfer 732 720 * 733 721 * If driver has fifo and the current transfer size is greater than fifo size, 734 722 * use DMA. Otherwise use DMA for transfer longer than defined DMA min bytes. 735 723 */ 736 - static bool stm32_spi_can_dma(struct spi_master *master, 724 + static bool stm32_spi_can_dma(struct spi_controller *ctrl, 737 725 struct spi_device *spi_dev, 738 726 struct spi_transfer *transfer) 739 727 { 740 728 unsigned int dma_size; 741 - struct stm32_spi *spi = spi_master_get_devdata(master); 729 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 742 730 743 731 if (spi->cfg->has_fifo) 744 732 dma_size = spi->fifo_size; ··· 754 742 /** 755 743 * stm32f4_spi_irq_event - Interrupt handler for SPI controller events 756 744 * @irq: interrupt line 757 - * @dev_id: SPI controller master interface 745 + * @dev_id: SPI controller ctrl interface 758 746 */ 759 747 static irqreturn_t stm32f4_spi_irq_event(int irq, void *dev_id) 760 748 { 761 - struct spi_master *master = dev_id; 762 - struct stm32_spi *spi = spi_master_get_devdata(master); 749 + struct spi_controller *ctrl = dev_id; 750 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 763 751 u32 sr, mask = 0; 764 752 bool end = false; 765 753 ··· 842 830 /** 843 831 * stm32f4_spi_irq_thread - Thread of interrupt handler for SPI controller 844 832 * @irq: interrupt line 845 - * @dev_id: SPI controller master interface 833 + * @dev_id: SPI controller interface 846 834 */ 847 835 static irqreturn_t stm32f4_spi_irq_thread(int irq, void *dev_id) 848 836 { 849 - struct spi_master *master = dev_id; 850 - struct stm32_spi *spi = spi_master_get_devdata(master); 837 + struct spi_controller *ctrl = dev_id; 838 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 851 839 852 - spi_finalize_current_transfer(master); 840 + spi_finalize_current_transfer(ctrl); 853 841 stm32f4_spi_disable(spi); 854 842 855 843 return IRQ_HANDLED; ··· 858 846 /** 859 847 * stm32h7_spi_irq_thread - Thread of interrupt handler for SPI controller 860 848 * @irq: interrupt line 861 - * @dev_id: SPI controller master interface 849 + * @dev_id: SPI controller interface 862 850 */ 863 851 static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id) 864 852 { 865 - struct spi_master *master = dev_id; 866 - struct stm32_spi *spi = spi_master_get_devdata(master); 853 + struct spi_controller *ctrl = dev_id; 854 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 867 855 u32 sr, ier, mask; 868 856 unsigned long flags; 869 857 bool end = false; ··· 943 931 944 932 if (end) { 945 933 stm32h7_spi_disable(spi); 946 - spi_finalize_current_transfer(master); 934 + spi_finalize_current_transfer(ctrl); 947 935 } 948 936 949 937 return IRQ_HANDLED; ··· 951 939 952 940 /** 953 941 * stm32_spi_prepare_msg - set up the controller to transfer a single message 954 - * @master: controller master interface 942 + * @ctrl: controller interface 955 943 * @msg: pointer to spi message 956 944 */ 957 - static int stm32_spi_prepare_msg(struct spi_master *master, 945 + static int stm32_spi_prepare_msg(struct spi_controller *ctrl, 958 946 struct spi_message *msg) 959 947 { 960 - struct stm32_spi *spi = spi_master_get_devdata(master); 948 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 961 949 struct spi_device *spi_dev = msg->spi; 962 950 struct device_node *np = spi_dev->dev.of_node; 963 951 unsigned long flags; ··· 983 971 else 984 972 clrb |= spi->cfg->regs->lsb_first.mask; 985 973 974 + if (STM32_SPI_DEVICE_MODE(spi) && spi_dev->mode & SPI_CS_HIGH) 975 + setb |= spi->cfg->regs->cs_high.mask; 976 + else 977 + clrb |= spi->cfg->regs->cs_high.mask; 978 + 986 979 dev_dbg(spi->dev, "cpol=%d cpha=%d lsb_first=%d cs_high=%d\n", 987 980 !!(spi_dev->mode & SPI_CPOL), 988 981 !!(spi_dev->mode & SPI_CPHA), ··· 1001 984 if (spi->cfg->set_number_of_data) { 1002 985 int ret; 1003 986 1004 - ret = spi_split_transfers_maxwords(master, msg, 1005 - STM32H7_SPI_TSIZE_MAX, 1006 - GFP_KERNEL | GFP_DMA); 987 + ret = spi_split_transfers_maxsize(ctrl, msg, 988 + STM32H7_SPI_TSIZE_MAX, 989 + GFP_KERNEL | GFP_DMA); 1007 990 if (ret) 1008 991 return ret; 1009 992 } ··· 1033 1016 struct stm32_spi *spi = data; 1034 1017 1035 1018 if (spi->cur_comm == SPI_SIMPLEX_TX || spi->cur_comm == SPI_3WIRE_TX) { 1036 - spi_finalize_current_transfer(spi->master); 1019 + spi_finalize_current_transfer(spi->ctrl); 1037 1020 stm32f4_spi_disable(spi); 1038 1021 } 1039 1022 } ··· 1048 1031 { 1049 1032 struct stm32_spi *spi = data; 1050 1033 1051 - spi_finalize_current_transfer(spi->master); 1034 + spi_finalize_current_transfer(spi->ctrl); 1052 1035 spi->cfg->disable(spi); 1053 1036 } 1054 1037 ··· 1178 1161 if (spi->tx_buf) 1179 1162 stm32h7_spi_write_txfifo(spi); 1180 1163 1181 - stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_CSTART); 1164 + if (STM32_SPI_MASTER_MODE(spi)) 1165 + stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_CSTART); 1182 1166 1183 1167 writel_relaxed(ier, spi->base + STM32H7_SPI_IER); 1184 1168 ··· 1226 1208 1227 1209 stm32_spi_enable(spi); 1228 1210 1229 - stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_CSTART); 1211 + if (STM32_SPI_MASTER_MODE(spi)) 1212 + stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_CSTART); 1230 1213 } 1231 1214 1232 1215 /** ··· 1321 1302 1322 1303 dma_submit_error: 1323 1304 if (spi->dma_rx) 1324 - dmaengine_terminate_all(spi->dma_rx); 1305 + dmaengine_terminate_sync(spi->dma_rx); 1325 1306 1326 1307 dma_desc_error: 1327 1308 stm32_spi_clr_bits(spi, spi->cfg->regs->dma_rx_en.reg, ··· 1555 1536 spi->cfg->set_bpw(spi); 1556 1537 1557 1538 /* Update spi->cur_speed with real clock speed */ 1558 - mbr = stm32_spi_prepare_mbr(spi, transfer->speed_hz, 1559 - spi->cfg->baud_rate_div_min, 1560 - spi->cfg->baud_rate_div_max); 1561 - if (mbr < 0) { 1562 - ret = mbr; 1563 - goto out; 1564 - } 1539 + if (STM32_SPI_MASTER_MODE(spi)) { 1540 + mbr = stm32_spi_prepare_mbr(spi, transfer->speed_hz, 1541 + spi->cfg->baud_rate_div_min, 1542 + spi->cfg->baud_rate_div_max); 1543 + if (mbr < 0) { 1544 + ret = mbr; 1545 + goto out; 1546 + } 1565 1547 1566 - transfer->speed_hz = spi->cur_speed; 1567 - stm32_spi_set_mbr(spi, mbr); 1548 + transfer->speed_hz = spi->cur_speed; 1549 + stm32_spi_set_mbr(spi, mbr); 1550 + } 1568 1551 1569 1552 comm_type = stm32_spi_communication_type(spi_dev, transfer); 1570 1553 ret = spi->cfg->set_mode(spi, comm_type); ··· 1575 1554 1576 1555 spi->cur_comm = comm_type; 1577 1556 1578 - if (spi->cfg->set_data_idleness) 1557 + if (STM32_SPI_MASTER_MODE(spi) && spi->cfg->set_data_idleness) 1579 1558 spi->cfg->set_data_idleness(spi, transfer->len); 1580 1559 1581 1560 if (spi->cur_bpw <= 8) ··· 1596 1575 dev_dbg(spi->dev, 1597 1576 "data frame of %d-bit, data packet of %d data frames\n", 1598 1577 spi->cur_bpw, spi->cur_fthlv); 1599 - dev_dbg(spi->dev, "speed set to %dHz\n", spi->cur_speed); 1578 + if (STM32_SPI_MASTER_MODE(spi)) 1579 + dev_dbg(spi->dev, "speed set to %dHz\n", spi->cur_speed); 1600 1580 dev_dbg(spi->dev, "transfer of %d bytes (%d data frames)\n", 1601 1581 spi->cur_xferlen, nb_words); 1602 1582 dev_dbg(spi->dev, "dma %s\n", ··· 1611 1589 1612 1590 /** 1613 1591 * stm32_spi_transfer_one - transfer a single spi_transfer 1614 - * @master: controller master interface 1592 + * @ctrl: controller interface 1615 1593 * @spi_dev: pointer to the spi device 1616 1594 * @transfer: pointer to spi transfer 1617 1595 * 1618 1596 * It must return 0 if the transfer is finished or 1 if the transfer is still 1619 1597 * in progress. 1620 1598 */ 1621 - static int stm32_spi_transfer_one(struct spi_master *master, 1599 + static int stm32_spi_transfer_one(struct spi_controller *ctrl, 1622 1600 struct spi_device *spi_dev, 1623 1601 struct spi_transfer *transfer) 1624 1602 { 1625 - struct stm32_spi *spi = spi_master_get_devdata(master); 1603 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 1626 1604 int ret; 1627 1605 1628 1606 spi->tx_buf = transfer->tx_buf; ··· 1630 1608 spi->tx_len = spi->tx_buf ? transfer->len : 0; 1631 1609 spi->rx_len = spi->rx_buf ? transfer->len : 0; 1632 1610 1633 - spi->cur_usedma = (master->can_dma && 1634 - master->can_dma(master, spi_dev, transfer)); 1611 + spi->cur_usedma = (ctrl->can_dma && 1612 + ctrl->can_dma(ctrl, spi_dev, transfer)); 1635 1613 1636 1614 ret = stm32_spi_transfer_one_setup(spi, spi_dev, transfer); 1637 1615 if (ret) { ··· 1647 1625 1648 1626 /** 1649 1627 * stm32_spi_unprepare_msg - relax the hardware 1650 - * @master: controller master interface 1628 + * @ctrl: controller interface 1651 1629 * @msg: pointer to the spi message 1652 1630 */ 1653 - static int stm32_spi_unprepare_msg(struct spi_master *master, 1631 + static int stm32_spi_unprepare_msg(struct spi_controller *ctrl, 1654 1632 struct spi_message *msg) 1655 1633 { 1656 - struct stm32_spi *spi = spi_master_get_devdata(master); 1634 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 1657 1635 1658 1636 spi->cfg->disable(spi); 1659 1637 ··· 1692 1670 } 1693 1671 1694 1672 /** 1695 - * stm32h7_spi_config - Configure SPI controller as SPI master 1673 + * stm32h7_spi_config - Configure SPI controller 1696 1674 * @spi: pointer to the spi controller data structure 1697 1675 */ 1698 1676 static int stm32h7_spi_config(struct stm32_spi *spi) 1699 1677 { 1700 1678 unsigned long flags; 1679 + u32 cr1 = 0, cfg2 = 0; 1701 1680 1702 1681 spin_lock_irqsave(&spi->lock, flags); 1703 1682 ··· 1706 1683 stm32_spi_clr_bits(spi, STM32H7_SPI_I2SCFGR, 1707 1684 STM32H7_SPI_I2SCFGR_I2SMOD); 1708 1685 1709 - /* 1710 - * - SS input value high 1711 - * - transmitter half duplex direction 1712 - * - automatic communication suspend when RX-Fifo is full 1713 - */ 1714 - stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_SSI | 1715 - STM32H7_SPI_CR1_HDDIR | 1716 - STM32H7_SPI_CR1_MASRX); 1686 + if (STM32_SPI_DEVICE_MODE(spi)) { 1687 + /* Use native device select */ 1688 + cfg2 &= ~STM32H7_SPI_CFG2_SSM; 1689 + } else { 1690 + /* 1691 + * - Transmitter half duplex direction 1692 + * - Automatic communication suspend when RX-Fifo is full 1693 + * - SS input value high 1694 + */ 1695 + cr1 |= STM32H7_SPI_CR1_HDDIR | STM32H7_SPI_CR1_MASRX | STM32H7_SPI_CR1_SSI; 1717 1696 1718 - /* 1719 - * - Set the master mode (default Motorola mode) 1720 - * - Consider 1 master/n slaves configuration and 1721 - * SS input value is determined by the SSI bit 1722 - * - keep control of all associated GPIOs 1723 - */ 1724 - stm32_spi_set_bits(spi, STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_MASTER | 1725 - STM32H7_SPI_CFG2_SSM | 1726 - STM32H7_SPI_CFG2_AFCNTR); 1697 + /* 1698 + * - Set the master mode (default Motorola mode) 1699 + * - Consider 1 master/n devices configuration and 1700 + * SS input value is determined by the SSI bit 1701 + * - keep control of all associated GPIOs 1702 + */ 1703 + cfg2 |= STM32H7_SPI_CFG2_MASTER | STM32H7_SPI_CFG2_SSM | STM32H7_SPI_CFG2_AFCNTR; 1704 + } 1705 + 1706 + stm32_spi_set_bits(spi, STM32H7_SPI_CR1, cr1); 1707 + stm32_spi_set_bits(spi, STM32H7_SPI_CFG2, cfg2); 1727 1708 1728 1709 spin_unlock_irqrestore(&spi->lock, flags); 1729 1710 ··· 1783 1756 }; 1784 1757 MODULE_DEVICE_TABLE(of, stm32_spi_of_match); 1785 1758 1759 + static int stm32h7_spi_device_abort(struct spi_controller *ctrl) 1760 + { 1761 + spi_finalize_current_transfer(ctrl); 1762 + return 0; 1763 + } 1764 + 1786 1765 static int stm32_spi_probe(struct platform_device *pdev) 1787 1766 { 1788 - struct spi_master *master; 1767 + struct spi_controller *ctrl; 1789 1768 struct stm32_spi *spi; 1790 1769 struct resource *res; 1791 1770 struct reset_control *rst; 1771 + struct device_node *np = pdev->dev.of_node; 1772 + bool device_mode; 1792 1773 int ret; 1793 1774 1794 - master = devm_spi_alloc_master(&pdev->dev, sizeof(struct stm32_spi)); 1795 - if (!master) { 1796 - dev_err(&pdev->dev, "spi master allocation failed\n"); 1775 + device_mode = of_property_read_bool(np, "spi-slave"); 1776 + 1777 + if (device_mode) 1778 + ctrl = devm_spi_alloc_slave(&pdev->dev, sizeof(struct stm32_spi)); 1779 + else 1780 + ctrl = devm_spi_alloc_master(&pdev->dev, sizeof(struct stm32_spi)); 1781 + if (!ctrl) { 1782 + dev_err(&pdev->dev, "spi controller allocation failed\n"); 1797 1783 return -ENOMEM; 1798 1784 } 1799 - platform_set_drvdata(pdev, master); 1785 + platform_set_drvdata(pdev, ctrl); 1800 1786 1801 - spi = spi_master_get_devdata(master); 1787 + spi = spi_controller_get_devdata(ctrl); 1802 1788 spi->dev = &pdev->dev; 1803 - spi->master = master; 1789 + spi->ctrl = ctrl; 1790 + spi->device_mode = device_mode; 1804 1791 spin_lock_init(&spi->lock); 1805 1792 1806 1793 spi->cfg = (const struct stm32_spi_cfg *) ··· 1835 1794 ret = devm_request_threaded_irq(&pdev->dev, spi->irq, 1836 1795 spi->cfg->irq_handler_event, 1837 1796 spi->cfg->irq_handler_thread, 1838 - IRQF_ONESHOT, pdev->name, master); 1797 + IRQF_ONESHOT, pdev->name, ctrl); 1839 1798 if (ret) { 1840 1799 dev_err(&pdev->dev, "irq%d request failed: %d\n", spi->irq, 1841 1800 ret); ··· 1884 1843 goto err_clk_disable; 1885 1844 } 1886 1845 1887 - master->dev.of_node = pdev->dev.of_node; 1888 - master->auto_runtime_pm = true; 1889 - master->bus_num = pdev->id; 1890 - master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_CS_HIGH | SPI_LSB_FIRST | 1891 - SPI_3WIRE; 1892 - master->bits_per_word_mask = spi->cfg->get_bpw_mask(spi); 1893 - master->max_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_min; 1894 - master->min_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_max; 1895 - master->use_gpio_descriptors = true; 1896 - master->prepare_message = stm32_spi_prepare_msg; 1897 - master->transfer_one = stm32_spi_transfer_one; 1898 - master->unprepare_message = stm32_spi_unprepare_msg; 1899 - master->flags = spi->cfg->flags; 1846 + ctrl->dev.of_node = pdev->dev.of_node; 1847 + ctrl->auto_runtime_pm = true; 1848 + ctrl->bus_num = pdev->id; 1849 + ctrl->mode_bits = SPI_CPHA | SPI_CPOL | SPI_CS_HIGH | SPI_LSB_FIRST | 1850 + SPI_3WIRE; 1851 + ctrl->bits_per_word_mask = spi->cfg->get_bpw_mask(spi); 1852 + ctrl->max_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_min; 1853 + ctrl->min_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_max; 1854 + ctrl->use_gpio_descriptors = true; 1855 + ctrl->prepare_message = stm32_spi_prepare_msg; 1856 + ctrl->transfer_one = stm32_spi_transfer_one; 1857 + ctrl->unprepare_message = stm32_spi_unprepare_msg; 1858 + ctrl->flags = spi->cfg->flags; 1859 + if (STM32_SPI_DEVICE_MODE(spi)) 1860 + ctrl->slave_abort = stm32h7_spi_device_abort; 1900 1861 1901 1862 spi->dma_tx = dma_request_chan(spi->dev, "tx"); 1902 1863 if (IS_ERR(spi->dma_tx)) { ··· 1909 1866 1910 1867 dev_warn(&pdev->dev, "failed to request tx dma channel\n"); 1911 1868 } else { 1912 - master->dma_tx = spi->dma_tx; 1869 + ctrl->dma_tx = spi->dma_tx; 1913 1870 } 1914 1871 1915 1872 spi->dma_rx = dma_request_chan(spi->dev, "rx"); ··· 1921 1878 1922 1879 dev_warn(&pdev->dev, "failed to request rx dma channel\n"); 1923 1880 } else { 1924 - master->dma_rx = spi->dma_rx; 1881 + ctrl->dma_rx = spi->dma_rx; 1925 1882 } 1926 1883 1927 1884 if (spi->dma_tx || spi->dma_rx) 1928 - master->can_dma = stm32_spi_can_dma; 1885 + ctrl->can_dma = stm32_spi_can_dma; 1929 1886 1930 1887 pm_runtime_set_autosuspend_delay(&pdev->dev, 1931 1888 STM32_SPI_AUTOSUSPEND_DELAY); ··· 1934 1891 pm_runtime_get_noresume(&pdev->dev); 1935 1892 pm_runtime_enable(&pdev->dev); 1936 1893 1937 - ret = spi_register_master(master); 1894 + ret = spi_register_controller(ctrl); 1938 1895 if (ret) { 1939 - dev_err(&pdev->dev, "spi master registration failed: %d\n", 1896 + dev_err(&pdev->dev, "spi controller registration failed: %d\n", 1940 1897 ret); 1941 1898 goto err_pm_disable; 1942 1899 } ··· 1944 1901 pm_runtime_mark_last_busy(&pdev->dev); 1945 1902 pm_runtime_put_autosuspend(&pdev->dev); 1946 1903 1947 - dev_info(&pdev->dev, "driver initialized\n"); 1904 + dev_info(&pdev->dev, "driver initialized (%s mode)\n", 1905 + STM32_SPI_MASTER_MODE(spi) ? "master" : "device"); 1948 1906 1949 1907 return 0; 1950 1908 ··· 1967 1923 1968 1924 static void stm32_spi_remove(struct platform_device *pdev) 1969 1925 { 1970 - struct spi_master *master = platform_get_drvdata(pdev); 1971 - struct stm32_spi *spi = spi_master_get_devdata(master); 1926 + struct spi_controller *ctrl = platform_get_drvdata(pdev); 1927 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 1972 1928 1973 1929 pm_runtime_get_sync(&pdev->dev); 1974 1930 1975 - spi_unregister_master(master); 1931 + spi_unregister_controller(ctrl); 1976 1932 spi->cfg->disable(spi); 1977 1933 1978 1934 pm_runtime_disable(&pdev->dev); ··· 1980 1936 pm_runtime_set_suspended(&pdev->dev); 1981 1937 pm_runtime_dont_use_autosuspend(&pdev->dev); 1982 1938 1983 - if (master->dma_tx) 1984 - dma_release_channel(master->dma_tx); 1985 - if (master->dma_rx) 1986 - dma_release_channel(master->dma_rx); 1939 + if (ctrl->dma_tx) 1940 + dma_release_channel(ctrl->dma_tx); 1941 + if (ctrl->dma_rx) 1942 + dma_release_channel(ctrl->dma_rx); 1987 1943 1988 1944 clk_disable_unprepare(spi->clk); 1989 1945 ··· 1993 1949 1994 1950 static int __maybe_unused stm32_spi_runtime_suspend(struct device *dev) 1995 1951 { 1996 - struct spi_master *master = dev_get_drvdata(dev); 1997 - struct stm32_spi *spi = spi_master_get_devdata(master); 1952 + struct spi_controller *ctrl = dev_get_drvdata(dev); 1953 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 1998 1954 1999 1955 clk_disable_unprepare(spi->clk); 2000 1956 ··· 2003 1959 2004 1960 static int __maybe_unused stm32_spi_runtime_resume(struct device *dev) 2005 1961 { 2006 - struct spi_master *master = dev_get_drvdata(dev); 2007 - struct stm32_spi *spi = spi_master_get_devdata(master); 1962 + struct spi_controller *ctrl = dev_get_drvdata(dev); 1963 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 2008 1964 int ret; 2009 1965 2010 1966 ret = pinctrl_pm_select_default_state(dev); ··· 2016 1972 2017 1973 static int __maybe_unused stm32_spi_suspend(struct device *dev) 2018 1974 { 2019 - struct spi_master *master = dev_get_drvdata(dev); 1975 + struct spi_controller *ctrl = dev_get_drvdata(dev); 2020 1976 int ret; 2021 1977 2022 - ret = spi_master_suspend(master); 1978 + ret = spi_controller_suspend(ctrl); 2023 1979 if (ret) 2024 1980 return ret; 2025 1981 ··· 2028 1984 2029 1985 static int __maybe_unused stm32_spi_resume(struct device *dev) 2030 1986 { 2031 - struct spi_master *master = dev_get_drvdata(dev); 2032 - struct stm32_spi *spi = spi_master_get_devdata(master); 1987 + struct spi_controller *ctrl = dev_get_drvdata(dev); 1988 + struct stm32_spi *spi = spi_controller_get_devdata(ctrl); 2033 1989 int ret; 2034 1990 2035 1991 ret = pm_runtime_force_resume(dev); 2036 1992 if (ret) 2037 1993 return ret; 2038 1994 2039 - ret = spi_master_resume(master); 1995 + ret = spi_controller_resume(ctrl); 2040 1996 if (ret) { 2041 1997 clk_disable_unprepare(spi->clk); 2042 1998 return ret;
+92 -41
drivers/spi/spi-sun6i.c
··· 42 42 #define SUN6I_TFR_CTL_CS_MANUAL BIT(6) 43 43 #define SUN6I_TFR_CTL_CS_LEVEL BIT(7) 44 44 #define SUN6I_TFR_CTL_DHB BIT(8) 45 + #define SUN6I_TFR_CTL_SDC BIT(11) 45 46 #define SUN6I_TFR_CTL_FBS BIT(12) 47 + #define SUN6I_TFR_CTL_SDM BIT(13) 46 48 #define SUN6I_TFR_CTL_XCH BIT(31) 47 49 48 50 #define SUN6I_INT_CTL_REG 0x10 ··· 87 85 #define SUN6I_TXDATA_REG 0x200 88 86 #define SUN6I_RXDATA_REG 0x300 89 87 88 + struct sun6i_spi_cfg { 89 + unsigned long fifo_depth; 90 + bool has_clk_ctl; 91 + }; 92 + 90 93 struct sun6i_spi { 91 94 struct spi_master *master; 92 95 void __iomem *base_addr; ··· 106 99 const u8 *tx_buf; 107 100 u8 *rx_buf; 108 101 int len; 109 - unsigned long fifo_depth; 102 + const struct sun6i_spi_cfg *cfg; 110 103 }; 111 104 112 105 static inline u32 sun6i_spi_read(struct sun6i_spi *sspi, u32 reg) ··· 163 156 u8 byte; 164 157 165 158 /* See how much data we can fit */ 166 - cnt = sspi->fifo_depth - sun6i_spi_get_tx_fifo_count(sspi); 159 + cnt = sspi->cfg->fifo_depth - sun6i_spi_get_tx_fifo_count(sspi); 167 160 168 161 len = min((int)cnt, sspi->len); 169 162 ··· 263 256 struct spi_transfer *tfr) 264 257 { 265 258 struct sun6i_spi *sspi = spi_master_get_devdata(master); 266 - unsigned int mclk_rate, div, div_cdr1, div_cdr2, timeout; 259 + unsigned int div, div_cdr1, div_cdr2, timeout; 267 260 unsigned int start, end, tx_time; 268 261 unsigned int trig_level; 269 262 unsigned int tx_len = 0, rx_len = 0; ··· 296 289 * the hardcoded value used in old generation of Allwinner 297 290 * SPI controller. (See spi-sun4i.c) 298 291 */ 299 - trig_level = sspi->fifo_depth / 4 * 3; 292 + trig_level = sspi->cfg->fifo_depth / 4 * 3; 300 293 } else { 301 294 /* 302 295 * Setup FIFO DMA request trigger level 303 296 * We choose 1/2 of the full fifo depth, that value will 304 297 * be used as DMA burst length. 305 298 */ 306 - trig_level = sspi->fifo_depth / 2; 299 + trig_level = sspi->cfg->fifo_depth / 2; 307 300 308 301 if (tfr->tx_buf) 309 302 reg |= SUN6I_FIFO_CTL_TF_DRQ_EN; ··· 353 346 354 347 sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg); 355 348 356 - /* Ensure that we have a parent clock fast enough */ 357 - mclk_rate = clk_get_rate(sspi->mclk); 358 - if (mclk_rate < (2 * tfr->speed_hz)) { 359 - clk_set_rate(sspi->mclk, 2 * tfr->speed_hz); 360 - mclk_rate = clk_get_rate(sspi->mclk); 361 - } 349 + if (sspi->cfg->has_clk_ctl) { 350 + unsigned int mclk_rate = clk_get_rate(sspi->mclk); 362 351 363 - /* 364 - * Setup clock divider. 365 - * 366 - * We have two choices there. Either we can use the clock 367 - * divide rate 1, which is calculated thanks to this formula: 368 - * SPI_CLK = MOD_CLK / (2 ^ cdr) 369 - * Or we can use CDR2, which is calculated with the formula: 370 - * SPI_CLK = MOD_CLK / (2 * (cdr + 1)) 371 - * Wether we use the former or the latter is set through the 372 - * DRS bit. 373 - * 374 - * First try CDR2, and if we can't reach the expected 375 - * frequency, fall back to CDR1. 376 - */ 377 - div_cdr1 = DIV_ROUND_UP(mclk_rate, tfr->speed_hz); 378 - div_cdr2 = DIV_ROUND_UP(div_cdr1, 2); 379 - if (div_cdr2 <= (SUN6I_CLK_CTL_CDR2_MASK + 1)) { 380 - reg = SUN6I_CLK_CTL_CDR2(div_cdr2 - 1) | SUN6I_CLK_CTL_DRS; 381 - tfr->effective_speed_hz = mclk_rate / (2 * div_cdr2); 352 + /* Ensure that we have a parent clock fast enough */ 353 + if (mclk_rate < (2 * tfr->speed_hz)) { 354 + clk_set_rate(sspi->mclk, 2 * tfr->speed_hz); 355 + mclk_rate = clk_get_rate(sspi->mclk); 356 + } 357 + 358 + /* 359 + * Setup clock divider. 360 + * 361 + * We have two choices there. Either we can use the clock 362 + * divide rate 1, which is calculated thanks to this formula: 363 + * SPI_CLK = MOD_CLK / (2 ^ cdr) 364 + * Or we can use CDR2, which is calculated with the formula: 365 + * SPI_CLK = MOD_CLK / (2 * (cdr + 1)) 366 + * Wether we use the former or the latter is set through the 367 + * DRS bit. 368 + * 369 + * First try CDR2, and if we can't reach the expected 370 + * frequency, fall back to CDR1. 371 + */ 372 + div_cdr1 = DIV_ROUND_UP(mclk_rate, tfr->speed_hz); 373 + div_cdr2 = DIV_ROUND_UP(div_cdr1, 2); 374 + if (div_cdr2 <= (SUN6I_CLK_CTL_CDR2_MASK + 1)) { 375 + reg = SUN6I_CLK_CTL_CDR2(div_cdr2 - 1) | SUN6I_CLK_CTL_DRS; 376 + tfr->effective_speed_hz = mclk_rate / (2 * div_cdr2); 377 + } else { 378 + div = min(SUN6I_CLK_CTL_CDR1_MASK, order_base_2(div_cdr1)); 379 + reg = SUN6I_CLK_CTL_CDR1(div); 380 + tfr->effective_speed_hz = mclk_rate / (1 << div); 381 + } 382 + 383 + sun6i_spi_write(sspi, SUN6I_CLK_CTL_REG, reg); 382 384 } else { 383 - div = min(SUN6I_CLK_CTL_CDR1_MASK, order_base_2(div_cdr1)); 384 - reg = SUN6I_CLK_CTL_CDR1(div); 385 - tfr->effective_speed_hz = mclk_rate / (1 << div); 385 + clk_set_rate(sspi->mclk, tfr->speed_hz); 386 + tfr->effective_speed_hz = clk_get_rate(sspi->mclk); 387 + 388 + /* 389 + * Configure work mode. 390 + * 391 + * There are three work modes depending on the controller clock 392 + * frequency: 393 + * - normal sample mode : CLK <= 24MHz SDM=1 SDC=0 394 + * - delay half-cycle sample mode : CLK <= 40MHz SDM=0 SDC=0 395 + * - delay one-cycle sample mode : CLK >= 80MHz SDM=0 SDC=1 396 + */ 397 + reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG); 398 + reg &= ~(SUN6I_TFR_CTL_SDM | SUN6I_TFR_CTL_SDC); 399 + 400 + if (tfr->effective_speed_hz <= 24000000) 401 + reg |= SUN6I_TFR_CTL_SDM; 402 + else if (tfr->effective_speed_hz >= 80000000) 403 + reg |= SUN6I_TFR_CTL_SDC; 404 + 405 + sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg); 386 406 } 387 407 388 - sun6i_spi_write(sspi, SUN6I_CLK_CTL_REG, reg); 389 408 /* Finally enable the bus - doing so before might raise SCK to HIGH */ 390 409 reg = sun6i_spi_read(sspi, SUN6I_GBL_CTL_REG); 391 410 reg |= SUN6I_GBL_CTL_BUS_ENABLE; ··· 443 410 reg = SUN6I_INT_CTL_TC; 444 411 445 412 if (!use_dma) { 446 - if (rx_len > sspi->fifo_depth) 413 + if (rx_len > sspi->cfg->fifo_depth) 447 414 reg |= SUN6I_INT_CTL_RF_RDY; 448 - if (tx_len > sspi->fifo_depth) 415 + if (tx_len > sspi->cfg->fifo_depth) 449 416 reg |= SUN6I_INT_CTL_TF_ERQ; 450 417 } 451 418 ··· 455 422 reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG); 456 423 sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg | SUN6I_TFR_CTL_XCH); 457 424 458 - tx_time = max(tfr->len * 8 * 2 / (tfr->speed_hz / 1000), 100U); 425 + tx_time = spi_controller_xfer_timeout(master, tfr); 459 426 start = jiffies; 460 427 timeout = wait_for_completion_timeout(&sspi->done, 461 428 msecs_to_jiffies(tx_time)); ··· 576 543 * the fifo length we can just fill the fifo and wait for a single 577 544 * irq, so don't bother setting up dma 578 545 */ 579 - return xfer->len > sspi->fifo_depth; 546 + return xfer->len > sspi->cfg->fifo_depth; 580 547 } 581 548 582 549 static int sun6i_spi_probe(struct platform_device *pdev) ··· 615 582 } 616 583 617 584 sspi->master = master; 618 - sspi->fifo_depth = (unsigned long)of_device_get_match_data(&pdev->dev); 585 + sspi->cfg = of_device_get_match_data(&pdev->dev); 619 586 620 587 master->max_speed_hz = 100 * 1000 * 1000; 621 588 master->min_speed_hz = 3 * 1000; ··· 728 695 dma_release_channel(master->dma_rx); 729 696 } 730 697 698 + static const struct sun6i_spi_cfg sun6i_a31_spi_cfg = { 699 + .fifo_depth = SUN6I_FIFO_DEPTH, 700 + .has_clk_ctl = true, 701 + }; 702 + 703 + static const struct sun6i_spi_cfg sun8i_h3_spi_cfg = { 704 + .fifo_depth = SUN8I_FIFO_DEPTH, 705 + .has_clk_ctl = true, 706 + }; 707 + 708 + static const struct sun6i_spi_cfg sun50i_r329_spi_cfg = { 709 + .fifo_depth = SUN8I_FIFO_DEPTH, 710 + }; 711 + 731 712 static const struct of_device_id sun6i_spi_match[] = { 732 - { .compatible = "allwinner,sun6i-a31-spi", .data = (void *)SUN6I_FIFO_DEPTH }, 733 - { .compatible = "allwinner,sun8i-h3-spi", .data = (void *)SUN8I_FIFO_DEPTH }, 713 + { .compatible = "allwinner,sun6i-a31-spi", .data = &sun6i_a31_spi_cfg }, 714 + { .compatible = "allwinner,sun8i-h3-spi", .data = &sun8i_h3_spi_cfg }, 715 + { 716 + .compatible = "allwinner,sun50i-r329-spi", 717 + .data = &sun50i_r329_spi_cfg 718 + }, 734 719 {} 735 720 }; 736 721 MODULE_DEVICE_TABLE(of, sun6i_spi_match);
+1 -1
drivers/spi/spi-xcomm.c
··· 241 241 .name = "spi-xcomm", 242 242 }, 243 243 .id_table = spi_xcomm_ids, 244 - .probe_new = spi_xcomm_probe, 244 + .probe = spi_xcomm_probe, 245 245 }; 246 246 module_i2c_driver(spi_xcomm_driver); 247 247
+2 -1
drivers/spi/spidev.c
··· 64 64 | SPI_NO_CS | SPI_READY | SPI_TX_DUAL \ 65 65 | SPI_TX_QUAD | SPI_TX_OCTAL | SPI_RX_DUAL \ 66 66 | SPI_RX_QUAD | SPI_RX_OCTAL \ 67 - | SPI_RX_CPHA_FLIP) 67 + | SPI_RX_CPHA_FLIP | SPI_3WIRE_HIZ \ 68 + | SPI_MOSI_IDLE_LOW) 68 69 69 70 struct spidev_data { 70 71 dev_t devt;
+1
include/linux/platform_data/spi-s3c64xx.h
··· 36 36 int src_clk_nr; 37 37 int num_cs; 38 38 bool no_cs; 39 + bool polling; 39 40 int (*cfg_gpio)(void); 40 41 }; 41 42
+17
include/linux/spi/spi.h
··· 1261 1261 return false; 1262 1262 } 1263 1263 1264 + /** 1265 + * spi_controller_xfer_timeout - Compute a suitable timeout value 1266 + * @ctlr: SPI device 1267 + * @xfer: Transfer descriptor 1268 + * 1269 + * Compute a relevant timeout value for the given transfer. We derive the time 1270 + * that it would take on a single data line and take twice this amount of time 1271 + * with a minimum of 500ms to avoid false positives on loaded systems. 1272 + * 1273 + * Returns: Transfer timeout value in milliseconds. 1274 + */ 1275 + static inline unsigned int spi_controller_xfer_timeout(struct spi_controller *ctlr, 1276 + struct spi_transfer *xfer) 1277 + { 1278 + return max(xfer->len * 8 * 2 / (xfer->speed_hz / 1000), 500U); 1279 + } 1280 + 1264 1281 /*---------------------------------------------------------------------------*/ 1265 1282 1266 1283 /* SPI transfer replacement methods which make use of spi_res */
+2 -1
include/uapi/linux/spi/spi.h
··· 28 28 #define SPI_RX_OCTAL _BITUL(14) /* receive with 8 wires */ 29 29 #define SPI_3WIRE_HIZ _BITUL(15) /* high impedance turnaround */ 30 30 #define SPI_RX_CPHA_FLIP _BITUL(16) /* flip CPHA on Rx only xfer */ 31 + #define SPI_MOSI_IDLE_LOW _BITUL(17) /* leave mosi line low when idle */ 31 32 32 33 /* 33 34 * All the bits defined above should be covered by SPI_MODE_USER_MASK. ··· 38 37 * These bits must not overlap. A static assert check should make sure of that. 39 38 * If adding extra bits, make sure to increase the bit index below as well. 40 39 */ 41 - #define SPI_MODE_USER_MASK (_BITUL(17) - 1) 40 + #define SPI_MODE_USER_MASK (_BITUL(18) - 1) 42 41 43 42 #endif /* _UAPI_SPI_H */
+64 -43
tools/spi/spidev_test.c
··· 172 172 173 173 static void print_usage(const char *prog) 174 174 { 175 - printf("Usage: %s [-DsbdlHOLC3vpNR24SI]\n", prog); 176 - puts(" -D --device device to use (default /dev/spidev1.1)\n" 177 - " -s --speed max speed (Hz)\n" 178 - " -d --delay delay (usec)\n" 179 - " -b --bpw bits per word\n" 180 - " -i --input input data from a file (e.g. \"test.bin\")\n" 181 - " -o --output output data to a file (e.g. \"results.bin\")\n" 182 - " -l --loop loopback\n" 183 - " -H --cpha clock phase\n" 184 - " -O --cpol clock polarity\n" 185 - " -L --lsb least significant bit first\n" 186 - " -C --cs-high chip select active high\n" 187 - " -3 --3wire SI/SO signals shared\n" 188 - " -v --verbose Verbose (show tx buffer)\n" 189 - " -p Send data (e.g. \"1234\\xde\\xad\")\n" 190 - " -N --no-cs no chip select\n" 191 - " -R --ready slave pulls low to pause\n" 192 - " -2 --dual dual transfer\n" 193 - " -4 --quad quad transfer\n" 194 - " -8 --octal octal transfer\n" 195 - " -S --size transfer size\n" 196 - " -I --iter iterations\n"); 175 + printf("Usage: %s [-2348CDFHILMNORSZbdilopsv]\n", prog); 176 + puts("general device settings:\n" 177 + " -D --device device to use (default /dev/spidev1.1)\n" 178 + " -s --speed max speed (Hz)\n" 179 + " -d --delay delay (usec)\n" 180 + " -l --loop loopback\n" 181 + "spi mode:\n" 182 + " -H --cpha clock phase\n" 183 + " -O --cpol clock polarity\n" 184 + " -F --rx-cpha-flip flip CPHA on Rx only xfer\n" 185 + "number of wires for transmission:\n" 186 + " -2 --dual dual transfer\n" 187 + " -4 --quad quad transfer\n" 188 + " -8 --octal octal transfer\n" 189 + " -3 --3wire SI/SO signals shared\n" 190 + " -Z --3wire-hiz high impedance turnaround\n" 191 + "data:\n" 192 + " -i --input input data from a file (e.g. \"test.bin\")\n" 193 + " -o --output output data to a file (e.g. \"results.bin\")\n" 194 + " -p Send data (e.g. \"1234\\xde\\xad\")\n" 195 + " -S --size transfer size\n" 196 + " -I --iter iterations\n" 197 + "additional parameters:\n" 198 + " -b --bpw bits per word\n" 199 + " -L --lsb least significant bit first\n" 200 + " -C --cs-high chip select active high\n" 201 + " -N --no-cs no chip select\n" 202 + " -R --ready slave pulls low to pause\n" 203 + " -M --mosi-idle-low leave mosi line low when idle\n" 204 + "misc:\n" 205 + " -v --verbose Verbose (show tx buffer)\n"); 197 206 exit(1); 198 207 } 199 208 ··· 210 201 { 211 202 while (1) { 212 203 static const struct option lopts[] = { 213 - { "device", 1, 0, 'D' }, 214 - { "speed", 1, 0, 's' }, 215 - { "delay", 1, 0, 'd' }, 216 - { "bpw", 1, 0, 'b' }, 217 - { "input", 1, 0, 'i' }, 218 - { "output", 1, 0, 'o' }, 219 - { "loop", 0, 0, 'l' }, 220 - { "cpha", 0, 0, 'H' }, 221 - { "cpol", 0, 0, 'O' }, 222 - { "lsb", 0, 0, 'L' }, 223 - { "cs-high", 0, 0, 'C' }, 224 - { "3wire", 0, 0, '3' }, 225 - { "no-cs", 0, 0, 'N' }, 226 - { "ready", 0, 0, 'R' }, 227 - { "dual", 0, 0, '2' }, 228 - { "verbose", 0, 0, 'v' }, 229 - { "quad", 0, 0, '4' }, 230 - { "octal", 0, 0, '8' }, 231 - { "size", 1, 0, 'S' }, 232 - { "iter", 1, 0, 'I' }, 204 + { "device", 1, 0, 'D' }, 205 + { "speed", 1, 0, 's' }, 206 + { "delay", 1, 0, 'd' }, 207 + { "loop", 0, 0, 'l' }, 208 + { "cpha", 0, 0, 'H' }, 209 + { "cpol", 0, 0, 'O' }, 210 + { "rx-cpha-flip", 0, 0, 'F' }, 211 + { "dual", 0, 0, '2' }, 212 + { "quad", 0, 0, '4' }, 213 + { "octal", 0, 0, '8' }, 214 + { "3wire", 0, 0, '3' }, 215 + { "3wire-hiz", 0, 0, 'Z' }, 216 + { "input", 1, 0, 'i' }, 217 + { "output", 1, 0, 'o' }, 218 + { "size", 1, 0, 'S' }, 219 + { "iter", 1, 0, 'I' }, 220 + { "bpw", 1, 0, 'b' }, 221 + { "lsb", 0, 0, 'L' }, 222 + { "cs-high", 0, 0, 'C' }, 223 + { "no-cs", 0, 0, 'N' }, 224 + { "ready", 0, 0, 'R' }, 225 + { "mosi-idle-low", 0, 0, 'M' }, 226 + { "verbose", 0, 0, 'v' }, 233 227 { NULL, 0, 0, 0 }, 234 228 }; 235 229 int c; 236 230 237 - c = getopt_long(argc, argv, "D:s:d:b:i:o:lHOLC3NR248p:vS:I:", 231 + c = getopt_long(argc, argv, "D:s:d:b:i:o:lHOLC3ZFMNR248p:vS:I:", 238 232 lopts, NULL); 239 233 240 234 if (c == -1) ··· 279 267 break; 280 268 case '3': 281 269 mode |= SPI_3WIRE; 270 + break; 271 + case 'Z': 272 + mode |= SPI_3WIRE_HIZ; 273 + break; 274 + case 'F': 275 + mode |= SPI_RX_CPHA_FLIP; 276 + break; 277 + case 'M': 278 + mode |= SPI_MOSI_IDLE_LOW; 282 279 break; 283 280 case 'N': 284 281 mode |= SPI_NO_CS;