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

Merge remote-tracking branch 'spi/for-5.8' into spi-next

+2014 -889
+10
Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.txt
··· 26 26 "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-qspi" : MSPI+BSPI on BRCMSTB SoCs 27 27 "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI 28 28 BRCMSTB SoCs 29 + "brcm,spi-bcm7425-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI 30 + BRCMSTB SoCs 31 + "brcm,spi-bcm7429-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI 32 + BRCMSTB SoCs 33 + "brcm,spi-bcm7435-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI 34 + BRCMSTB SoCs 35 + "brcm,spi-bcm7216-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI 36 + BRCMSTB SoCs 37 + "brcm,spi-bcm7278-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI 38 + BRCMSTB SoCs 29 39 "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi" : MSPI+BSPI on Cygnus, NSP 30 40 "brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi" : NS2 SoCs 31 41
+36
Documentation/devicetree/bindings/spi/mikrotik,rb4xx-spi.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/mikrotik,rb4xx-spi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: MikroTik RB4xx series SPI master 8 + 9 + maintainers: 10 + - Gabor Juhos <juhosg@openwrt.org> 11 + - Bert Vermeulen <bert@biot.com> 12 + 13 + allOf: 14 + - $ref: "spi-controller.yaml#" 15 + 16 + properties: 17 + compatible: 18 + const: mikrotik,rb4xx-spi 19 + 20 + reg: 21 + maxItems: 1 22 + 23 + required: 24 + - compatible 25 + - reg 26 + 27 + examples: 28 + - | 29 + spi: spi@1f000000 { 30 + #address-cells = <1>; 31 + #size-cells = <0>; 32 + compatible = "mikrotik,rb4xx-spi"; 33 + reg = <0x1f000000 0x10>; 34 + }; 35 + 36 + ...
+144
Documentation/devicetree/bindings/spi/renesas,rspi.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,rspi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Renesas (Quad) Serial Peripheral Interface (RSPI/QSPI) 8 + 9 + maintainers: 10 + - Geert Uytterhoeven <geert+renesas@glider.be> 11 + 12 + properties: 13 + compatible: 14 + oneOf: 15 + - items: 16 + - enum: 17 + - renesas,rspi-sh7757 # SH7757 18 + - const: renesas,rspi # Legacy SH 19 + 20 + - items: 21 + - enum: 22 + - renesas,rspi-r7s72100 # RZ/A1H 23 + - renesas,rspi-r7s9210 # RZ/A2 24 + - const: renesas,rspi-rz # RZ/A 25 + 26 + - items: 27 + - enum: 28 + - renesas,qspi-r8a7743 # RZ/G1M 29 + - renesas,qspi-r8a7744 # RZ/G1N 30 + - renesas,qspi-r8a7745 # RZ/G1E 31 + - renesas,qspi-r8a77470 # RZ/G1C 32 + - renesas,qspi-r8a7790 # R-Car H2 33 + - renesas,qspi-r8a7791 # R-Car M2-W 34 + - renesas,qspi-r8a7792 # R-Car V2H 35 + - renesas,qspi-r8a7793 # R-Car M2-N 36 + - renesas,qspi-r8a7794 # R-Car E2 37 + - const: renesas,qspi # R-Car Gen2 and RZ/G1 38 + 39 + reg: 40 + maxItems: 1 41 + 42 + interrupts: 43 + oneOf: 44 + - items: 45 + - description: A combined interrupt 46 + - items: 47 + - description: Error interrupt (SPEI) 48 + - description: Receive Interrupt (SPRI) 49 + - description: Transmit Interrupt (SPTI) 50 + 51 + interrupt-names: 52 + oneOf: 53 + - items: 54 + - const: mux 55 + - items: 56 + - const: error 57 + - const: rx 58 + - const: tx 59 + 60 + clocks: 61 + maxItems: 1 62 + 63 + power-domains: 64 + maxItems: 1 65 + 66 + resets: 67 + maxItems: 1 68 + 69 + dmas: 70 + description: 71 + Must contain a list of pairs of references to DMA specifiers, one for 72 + transmission, and one for reception. 73 + 74 + dma-names: 75 + minItems: 2 76 + maxItems: 4 77 + items: 78 + enum: 79 + - tx 80 + - rx 81 + 82 + num-cs: 83 + description: | 84 + Total number of native chip selects. 85 + Hardware limitations related to chip selects: 86 + - When using GPIO chip selects, at least one native chip select must 87 + be left unused, as it will be driven anyway. 88 + minimum: 1 89 + maximum: 2 90 + default: 1 91 + 92 + required: 93 + - compatible 94 + - reg 95 + - interrupts 96 + - clocks 97 + - power-domains 98 + - '#address-cells' 99 + - '#size-cells' 100 + 101 + allOf: 102 + - $ref: spi-controller.yaml# 103 + - if: 104 + properties: 105 + compatible: 106 + contains: 107 + enum: 108 + - renesas,rspi-rz 109 + then: 110 + properties: 111 + interrupts: 112 + minItems: 3 113 + required: 114 + - interrupt-names 115 + 116 + - if: 117 + properties: 118 + compatible: 119 + contains: 120 + enum: 121 + - renesas,qspi 122 + then: 123 + required: 124 + - resets 125 + 126 + examples: 127 + - | 128 + #include <dt-bindings/clock/r8a7791-cpg-mssr.h> 129 + #include <dt-bindings/interrupt-controller/arm-gic.h> 130 + #include <dt-bindings/power/r8a7791-sysc.h> 131 + 132 + qspi: spi@e6b10000 { 133 + compatible = "renesas,qspi-r8a7791", "renesas,qspi"; 134 + reg = <0xe6b10000 0x2c>; 135 + interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; 136 + clocks = <&cpg CPG_MOD 917>; 137 + dmas = <&dmac0 0x17>, <&dmac0 0x18>, <&dmac1 0x17>, <&dmac1 0x18>; 138 + dma-names = "tx", "rx", "tx", "rx"; 139 + power-domains = <&sysc R8A7791_PD_ALWAYS_ON>; 140 + resets = <&cpg 917>; 141 + num-cs = <1>; 142 + #address-cells = <1>; 143 + #size-cells = <0>; 144 + };
-41
Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt
··· 1 - Synopsys DesignWare AMBA 2.0 Synchronous Serial Interface. 2 - 3 - Required properties: 4 - - compatible : "snps,dw-apb-ssi" or "mscc,<soc>-spi", where soc is "ocelot" or 5 - "jaguar2", or "amazon,alpine-dw-apb-ssi" 6 - - reg : The register base for the controller. For "mscc,<soc>-spi", a second 7 - register set is required (named ICPU_CFG:SPI_MST) 8 - - interrupts : One interrupt, used by the controller. 9 - - #address-cells : <1>, as required by generic SPI binding. 10 - - #size-cells : <0>, also as required by generic SPI binding. 11 - - clocks : phandles for the clocks, see the description of clock-names below. 12 - The phandle for the "ssi_clk" is required. The phandle for the "pclk" clock 13 - is optional. If a single clock is specified but no clock-name, it is the 14 - "ssi_clk" clock. If both clocks are listed, the "ssi_clk" must be first. 15 - 16 - Optional properties: 17 - - clock-names : Contains the names of the clocks: 18 - "ssi_clk", for the core clock used to generate the external SPI clock. 19 - "pclk", the interface clock, required for register access. If a clock domain 20 - used to enable this clock then it should be named "pclk_clkdomain". 21 - - cs-gpios : Specifies the gpio pins to be used for chipselects. 22 - - num-cs : The number of chipselects. If omitted, this will default to 4. 23 - - reg-io-width : The I/O register width (in bytes) implemented by this 24 - device. Supported values are 2 or 4 (the default). 25 - 26 - Child nodes as per the generic SPI binding. 27 - 28 - Example: 29 - 30 - spi@fff00000 { 31 - compatible = "snps,dw-apb-ssi"; 32 - reg = <0xfff00000 0x1000>; 33 - interrupts = <0 154 4>; 34 - #address-cells = <1>; 35 - #size-cells = <0>; 36 - clocks = <&spi_m_clk>; 37 - num-cs = <2>; 38 - cs-gpios = <&gpio0 13 0>, 39 - <&gpio0 14 0>; 40 - }; 41 -
+133
Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/spi/snps,dw-apb-ssi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Synopsys DesignWare AMBA 2.0 Synchronous Serial Interface 8 + 9 + maintainers: 10 + - Mark Brown <broonie@kernel.org> 11 + 12 + allOf: 13 + - $ref: "spi-controller.yaml#" 14 + - if: 15 + properties: 16 + compatible: 17 + contains: 18 + enum: 19 + - mscc,ocelot-spi 20 + - mscc,jaguar2-spi 21 + then: 22 + properties: 23 + reg: 24 + minItems: 2 25 + 26 + properties: 27 + compatible: 28 + oneOf: 29 + - description: Generic DW SPI Controller 30 + enum: 31 + - snps,dw-apb-ssi 32 + - snps,dwc-ssi-1.01a 33 + - description: Microsemi Ocelot/Jaguar2 SoC SPI Controller 34 + items: 35 + - enum: 36 + - mscc,ocelot-spi 37 + - mscc,jaguar2-spi 38 + - const: snps,dw-apb-ssi 39 + - description: Amazon Alpine SPI Controller 40 + const: amazon,alpine-dw-apb-ssi 41 + - description: Renesas RZ/N1 SPI Controller 42 + items: 43 + - const: renesas,rzn1-spi 44 + - const: snps,dw-apb-ssi 45 + - description: Intel Keem Bay SPI Controller 46 + const: intel,keembay-ssi 47 + 48 + reg: 49 + minItems: 1 50 + items: 51 + - description: DW APB SSI controller memory mapped registers 52 + - description: SPI MST region map 53 + 54 + interrupts: 55 + maxItems: 1 56 + 57 + clocks: 58 + minItems: 1 59 + items: 60 + - description: SPI Controller reference clock source 61 + - description: APB interface clock source 62 + 63 + clock-names: 64 + minItems: 1 65 + items: 66 + - const: ssi_clk 67 + - const: pclk 68 + 69 + resets: 70 + maxItems: 1 71 + 72 + reset-names: 73 + const: spi 74 + 75 + reg-io-width: 76 + $ref: /schemas/types.yaml#/definitions/uint32 77 + description: I/O register width (in bytes) implemented by this device 78 + default: 4 79 + enum: [ 2, 4 ] 80 + 81 + num-cs: 82 + default: 4 83 + minimum: 1 84 + maximum: 4 85 + 86 + dmas: 87 + items: 88 + - description: TX DMA Channel 89 + - description: RX DMA Channel 90 + 91 + dma-names: 92 + items: 93 + - const: tx 94 + - const: rx 95 + 96 + patternProperties: 97 + "^.*@[0-9a-f]+$": 98 + type: object 99 + properties: 100 + reg: 101 + minimum: 0 102 + maximum: 3 103 + 104 + spi-rx-bus-width: 105 + const: 1 106 + 107 + spi-tx-bus-width: 108 + const: 1 109 + 110 + unevaluatedProperties: false 111 + 112 + required: 113 + - compatible 114 + - reg 115 + - "#address-cells" 116 + - "#size-cells" 117 + - interrupts 118 + - clocks 119 + 120 + examples: 121 + - | 122 + spi@fff00000 { 123 + compatible = "snps,dw-apb-ssi"; 124 + reg = <0xfff00000 0x1000>; 125 + #address-cells = <1>; 126 + #size-cells = <0>; 127 + interrupts = <0 154 4>; 128 + clocks = <&spi_m_clk>; 129 + num-cs = <2>; 130 + cs-gpios = <&gpio0 13 0>, 131 + <&gpio0 14 0>; 132 + }; 133 + ...
+57
Documentation/devicetree/bindings/spi/socionext,uniphier-spi.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/socionext,uniphier-spi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Socionext UniPhier SPI controller 8 + 9 + description: | 10 + UniPhier SoCs have SCSSI which supports SPI single channel. 11 + 12 + maintainers: 13 + - Kunihiko Hayashi <hayashi.kunihiko@socionext.com> 14 + - Keiji Hayashibara <hayashibara.keiji@socionext.com> 15 + 16 + allOf: 17 + - $ref: spi-controller.yaml# 18 + 19 + properties: 20 + "#address-cells": true 21 + "#size-cells": true 22 + 23 + compatible: 24 + const: socionext,uniphier-scssi 25 + 26 + reg: 27 + maxItems: 1 28 + 29 + interrupts: 30 + maxItems: 1 31 + 32 + clocks: 33 + maxItems: 1 34 + 35 + resets: 36 + maxItems: 1 37 + 38 + required: 39 + - compatible 40 + - reg 41 + - interrupts 42 + - clocks 43 + - resets 44 + - "#address-cells" 45 + - "#size-cells" 46 + 47 + examples: 48 + - | 49 + spi0: spi@54006000 { 50 + compatible = "socionext,uniphier-scssi"; 51 + reg = <0x54006000 0x100>; 52 + #address-cells = <1>; 53 + #size-cells = <0>; 54 + interrupts = <0 39 4>; 55 + clocks = <&peri_clk 11>; 56 + resets = <&peri_rst 11>; 57 + };
-24
Documentation/devicetree/bindings/spi/spi-dw.txt
··· 1 - Synopsys DesignWare SPI master 2 - 3 - Required properties: 4 - - compatible: should be "snps,designware-spi" 5 - - #address-cells: see spi-bus.txt 6 - - #size-cells: see spi-bus.txt 7 - - reg: address and length of the spi master registers 8 - - interrupts: should contain one interrupt 9 - - clocks: spi clock phandle 10 - - num-cs: see spi-bus.txt 11 - 12 - Optional properties: 13 - - cs-gpios: see spi-bus.txt 14 - 15 - Example: 16 - 17 - spi: spi@4020a000 { 18 - compatible = "snps,designware-spi"; 19 - interrupts = <11 1>; 20 - reg = <0x4020a000 0x1000>; 21 - clocks = <&pclk>; 22 - num-cs = <2>; 23 - cs-gpios = <&banka 0 0>; 24 - };
-73
Documentation/devicetree/bindings/spi/spi-rspi.txt
··· 1 - Device tree configuration for Renesas RSPI/QSPI driver 2 - 3 - Required properties: 4 - - compatible : For Renesas Serial Peripheral Interface on legacy SH: 5 - "renesas,rspi-<soctype>", "renesas,rspi" as fallback. 6 - For Renesas Serial Peripheral Interface on RZ/A: 7 - "renesas,rspi-<soctype>", "renesas,rspi-rz" as fallback. 8 - For Quad Serial Peripheral Interface on R-Car Gen2 and 9 - RZ/G1 devices: 10 - "renesas,qspi-<soctype>", "renesas,qspi" as fallback. 11 - Examples with soctypes are: 12 - - "renesas,rspi-sh7757" (SH) 13 - - "renesas,rspi-r7s72100" (RZ/A1H) 14 - - "renesas,rspi-r7s9210" (RZ/A2) 15 - - "renesas,qspi-r8a7743" (RZ/G1M) 16 - - "renesas,qspi-r8a7744" (RZ/G1N) 17 - - "renesas,qspi-r8a7745" (RZ/G1E) 18 - - "renesas,qspi-r8a77470" (RZ/G1C) 19 - - "renesas,qspi-r8a7790" (R-Car H2) 20 - - "renesas,qspi-r8a7791" (R-Car M2-W) 21 - - "renesas,qspi-r8a7792" (R-Car V2H) 22 - - "renesas,qspi-r8a7793" (R-Car M2-N) 23 - - "renesas,qspi-r8a7794" (R-Car E2) 24 - - reg : Address start and address range size of the device 25 - - interrupts : A list of interrupt-specifiers, one for each entry in 26 - interrupt-names. 27 - If interrupt-names is not present, an interrupt specifier 28 - for a single muxed interrupt. 29 - - interrupt-names : A list of interrupt names. Should contain (if present): 30 - - "error" for SPEI, 31 - - "rx" for SPRI, 32 - - "tx" to SPTI, 33 - - "mux" for a single muxed interrupt. 34 - - num-cs : Number of chip selects. Some RSPI cores have more than 1. 35 - - #address-cells : Must be <1> 36 - - #size-cells : Must be <0> 37 - 38 - Optional properties: 39 - - clocks : Must contain a reference to the functional clock. 40 - - dmas : Must contain a list of two references to DMA specifiers, 41 - one for transmission, and one for reception. 42 - - dma-names : Must contain a list of two DMA names, "tx" and "rx". 43 - 44 - Pinctrl properties might be needed, too. See 45 - Documentation/devicetree/bindings/pinctrl/renesas,*. 46 - 47 - Examples: 48 - 49 - spi0: spi@e800c800 { 50 - compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz"; 51 - reg = <0xe800c800 0x24>; 52 - interrupts = <0 238 IRQ_TYPE_LEVEL_HIGH>, 53 - <0 239 IRQ_TYPE_LEVEL_HIGH>, 54 - <0 240 IRQ_TYPE_LEVEL_HIGH>; 55 - interrupt-names = "error", "rx", "tx"; 56 - interrupt-parent = <&gic>; 57 - num-cs = <1>; 58 - #address-cells = <1>; 59 - #size-cells = <0>; 60 - }; 61 - 62 - spi: spi@e6b10000 { 63 - compatible = "renesas,qspi-r8a7791", "renesas,qspi"; 64 - reg = <0 0xe6b10000 0 0x2c>; 65 - interrupt-parent = <&gic>; 66 - interrupts = <0 184 IRQ_TYPE_LEVEL_HIGH>; 67 - clocks = <&mstp9_clks R8A7791_CLK_QSPI_MOD>; 68 - num-cs = <1>; 69 - #address-cells = <1>; 70 - #size-cells = <0>; 71 - dmas = <&dmac0 0x17>, <&dmac0 0x18>; 72 - dma-names = "tx", "rx"; 73 - };
-28
Documentation/devicetree/bindings/spi/spi-uniphier.txt
··· 1 - Socionext UniPhier SPI controller driver 2 - 3 - UniPhier SoCs have SCSSI which supports SPI single channel. 4 - 5 - Required properties: 6 - - compatible: should be "socionext,uniphier-scssi" 7 - - reg: address and length of the spi master registers 8 - - #address-cells: must be <1>, see spi-bus.txt 9 - - #size-cells: must be <0>, see spi-bus.txt 10 - - interrupts: a single interrupt specifier 11 - - pinctrl-names: should be "default" 12 - - pinctrl-0: pin control state for the default mode 13 - - clocks: a phandle to the clock for the device 14 - - resets: a phandle to the reset control for the device 15 - 16 - Example: 17 - 18 - spi0: spi@54006000 { 19 - compatible = "socionext,uniphier-scssi"; 20 - reg = <0x54006000 0x100>; 21 - #address-cells = <1>; 22 - #size-cells = <0>; 23 - interrupts = <0 39 4>; 24 - pinctrl-names = "default"; 25 - pinctrl-0 = <&pinctrl_spi0>; 26 - clocks = <&peri_clk 11>; 27 - resets = <&peri_rst 11>; 28 - };
+1 -1
Documentation/devicetree/bindings/spi/ti_qspi.txt
··· 29 29 Example: 30 30 31 31 For am4372: 32 - qspi: qspi@4b300000 { 32 + qspi: qspi@47900000 { 33 33 compatible = "ti,am4372-qspi"; 34 34 reg = <0x47900000 0x100>, <0x30000000 0x4000000>; 35 35 reg-names = "qspi_base", "qspi_mmap";
+2
Documentation/devicetree/bindings/vendor-prefixes.yaml
··· 633 633 description: Microsoft Corporation 634 634 "^mikroe,.*": 635 635 description: MikroElektronika d.o.o. 636 + "^mikrotik,.*": 637 + description: MikroTik 636 638 "^miniand,.*": 637 639 description: Miniand Tech 638 640 "^minix,.*":
+5
MAINTAINERS
··· 892 892 F: drivers/gpu/drm/amd/include/vi_structs.h 893 893 F: include/uapi/linux/kfd_ioctl.h 894 894 895 + AMD SPI DRIVER 896 + M: Sanjay R Mehta <sanju.mehta@amd.com> 897 + S: Maintained 898 + F: drivers/spi/spi-amd.c 899 + 895 900 AMD MP2 I2C DRIVER 896 901 M: Elie Morisse <syniurge@gmail.com> 897 902 M: Nehal Shah <nehal-bakulchandra.shah@amd.com>
+16 -6
drivers/spi/Kconfig
··· 226 226 help 227 227 general driver for SPI controller core from DesignWare 228 228 229 + if SPI_DESIGNWARE 230 + 231 + config SPI_DW_DMA 232 + bool "DMA support for DW SPI controller" 233 + 229 234 config SPI_DW_PCI 230 235 tristate "PCI interface driver for DW SPI core" 231 - depends on SPI_DESIGNWARE && PCI 232 - 233 - config SPI_DW_MID_DMA 234 - bool "DMA support for DW SPI controller on Intel MID platform" 235 - depends on SPI_DW_PCI && DW_DMAC_PCI 236 + depends on PCI 236 237 237 238 config SPI_DW_MMIO 238 239 tristate "Memory-mapped io interface driver for DW SPI core" 239 - depends on SPI_DESIGNWARE 240 + depends on HAS_IOMEM 241 + 242 + endif 240 243 241 244 config SPI_DLN2 242 245 tristate "Diolan DLN-2 USB SPI adapter" ··· 847 844 config SPI_UNIPHIER 848 845 tristate "Socionext UniPhier SPI Controller" 849 846 depends on (ARCH_UNIPHIER || COMPILE_TEST) && OF 847 + depends on HAS_IOMEM 850 848 help 851 849 This enables a driver for the Socionext UniPhier SoC SCSSI SPI controller. 852 850 ··· 913 909 depends on (SPI_MASTER && HAS_DMA) || COMPILE_TEST 914 910 help 915 911 Enables Xilinx GQSPI controller driver for Zynq UltraScale+ MPSoC. 912 + 913 + config SPI_AMD 914 + tristate "AMD SPI controller" 915 + depends on SPI_MASTER || COMPILE_TEST 916 + help 917 + Enables SPI controller driver for AMD SoC. 916 918 917 919 # 918 920 # Add new SPI master controllers in alphabetical order above this line
+4 -2
drivers/spi/Makefile
··· 36 36 obj-$(CONFIG_SPI_DAVINCI) += spi-davinci.o 37 37 obj-$(CONFIG_SPI_DLN2) += spi-dln2.o 38 38 obj-$(CONFIG_SPI_DESIGNWARE) += spi-dw.o 39 + spi-dw-y := spi-dw-core.o 40 + spi-dw-$(CONFIG_SPI_DW_DMA) += spi-dw-dma.o 39 41 obj-$(CONFIG_SPI_DW_MMIO) += spi-dw-mmio.o 40 - obj-$(CONFIG_SPI_DW_PCI) += spi-dw-midpci.o 41 - spi-dw-midpci-objs := spi-dw-pci.o spi-dw-mid.o 42 + obj-$(CONFIG_SPI_DW_PCI) += spi-dw-pci.o 42 43 obj-$(CONFIG_SPI_EFM32) += spi-efm32.o 43 44 obj-$(CONFIG_SPI_EP93XX) += spi-ep93xx.o 44 45 obj-$(CONFIG_SPI_FALCON) += spi-falcon.o ··· 128 127 obj-$(CONFIG_SPI_XTENSA_XTFPGA) += spi-xtensa-xtfpga.o 129 128 obj-$(CONFIG_SPI_ZYNQ_QSPI) += spi-zynq-qspi.o 130 129 obj-$(CONFIG_SPI_ZYNQMP_GQSPI) += spi-zynqmp-gqspi.o 130 + obj-$(CONFIG_SPI_AMD) += spi-amd.o 131 131 132 132 # SPI slave protocol handlers 133 133 obj-$(CONFIG_SPI_SLAVE_TIME) += spi-slave-time.o
+315
drivers/spi/spi-amd.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2 + // 3 + // AMD SPI controller driver 4 + // 5 + // Copyright (c) 2020, Advanced Micro Devices, Inc. 6 + // 7 + // Author: Sanjay R Mehta <sanju.mehta@amd.com> 8 + 9 + #include <linux/acpi.h> 10 + #include <linux/init.h> 11 + #include <linux/module.h> 12 + #include <linux/platform_device.h> 13 + #include <linux/delay.h> 14 + #include <linux/spi/spi.h> 15 + 16 + #define AMD_SPI_CTRL0_REG 0x00 17 + #define AMD_SPI_EXEC_CMD BIT(16) 18 + #define AMD_SPI_FIFO_CLEAR BIT(20) 19 + #define AMD_SPI_BUSY BIT(31) 20 + 21 + #define AMD_SPI_OPCODE_MASK 0xFF 22 + 23 + #define AMD_SPI_ALT_CS_REG 0x1D 24 + #define AMD_SPI_ALT_CS_MASK 0x3 25 + 26 + #define AMD_SPI_FIFO_BASE 0x80 27 + #define AMD_SPI_TX_COUNT_REG 0x48 28 + #define AMD_SPI_RX_COUNT_REG 0x4B 29 + #define AMD_SPI_STATUS_REG 0x4C 30 + 31 + #define AMD_SPI_MEM_SIZE 200 32 + 33 + /* M_CMD OP codes for SPI */ 34 + #define AMD_SPI_XFER_TX 1 35 + #define AMD_SPI_XFER_RX 2 36 + 37 + struct amd_spi { 38 + void __iomem *io_remap_addr; 39 + unsigned long io_base_addr; 40 + u32 rom_addr; 41 + u8 chip_select; 42 + }; 43 + 44 + static inline u8 amd_spi_readreg8(struct spi_master *master, int idx) 45 + { 46 + struct amd_spi *amd_spi = spi_master_get_devdata(master); 47 + 48 + return ioread8((u8 __iomem *)amd_spi->io_remap_addr + idx); 49 + } 50 + 51 + static inline void amd_spi_writereg8(struct spi_master *master, int idx, 52 + u8 val) 53 + { 54 + struct amd_spi *amd_spi = spi_master_get_devdata(master); 55 + 56 + iowrite8(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx)); 57 + } 58 + 59 + static inline void amd_spi_setclear_reg8(struct spi_master *master, int idx, 60 + u8 set, u8 clear) 61 + { 62 + u8 tmp = amd_spi_readreg8(master, idx); 63 + 64 + tmp = (tmp & ~clear) | set; 65 + amd_spi_writereg8(master, idx, tmp); 66 + } 67 + 68 + static inline u32 amd_spi_readreg32(struct spi_master *master, int idx) 69 + { 70 + struct amd_spi *amd_spi = spi_master_get_devdata(master); 71 + 72 + return ioread32((u8 __iomem *)amd_spi->io_remap_addr + idx); 73 + } 74 + 75 + static inline void amd_spi_writereg32(struct spi_master *master, int idx, 76 + u32 val) 77 + { 78 + struct amd_spi *amd_spi = spi_master_get_devdata(master); 79 + 80 + iowrite32(val, ((u8 __iomem *)amd_spi->io_remap_addr + idx)); 81 + } 82 + 83 + static inline void amd_spi_setclear_reg32(struct spi_master *master, int idx, 84 + u32 set, u32 clear) 85 + { 86 + u32 tmp = amd_spi_readreg32(master, idx); 87 + 88 + tmp = (tmp & ~clear) | set; 89 + amd_spi_writereg32(master, idx, tmp); 90 + } 91 + 92 + static void amd_spi_select_chip(struct spi_master *master) 93 + { 94 + struct amd_spi *amd_spi = spi_master_get_devdata(master); 95 + u8 chip_select = amd_spi->chip_select; 96 + 97 + amd_spi_setclear_reg8(master, AMD_SPI_ALT_CS_REG, chip_select, 98 + AMD_SPI_ALT_CS_MASK); 99 + } 100 + 101 + static void amd_spi_clear_fifo_ptr(struct spi_master *master) 102 + { 103 + amd_spi_setclear_reg32(master, AMD_SPI_CTRL0_REG, AMD_SPI_FIFO_CLEAR, 104 + AMD_SPI_FIFO_CLEAR); 105 + } 106 + 107 + static void amd_spi_set_opcode(struct spi_master *master, u8 cmd_opcode) 108 + { 109 + amd_spi_setclear_reg32(master, AMD_SPI_CTRL0_REG, cmd_opcode, 110 + AMD_SPI_OPCODE_MASK); 111 + } 112 + 113 + static inline void amd_spi_set_rx_count(struct spi_master *master, 114 + u8 rx_count) 115 + { 116 + amd_spi_setclear_reg8(master, AMD_SPI_RX_COUNT_REG, rx_count, 0xff); 117 + } 118 + 119 + static inline void amd_spi_set_tx_count(struct spi_master *master, 120 + u8 tx_count) 121 + { 122 + amd_spi_setclear_reg8(master, AMD_SPI_TX_COUNT_REG, tx_count, 0xff); 123 + } 124 + 125 + static inline int amd_spi_busy_wait(struct amd_spi *amd_spi) 126 + { 127 + bool spi_busy; 128 + int timeout = 100000; 129 + 130 + /* poll for SPI bus to become idle */ 131 + spi_busy = (ioread32((u8 __iomem *)amd_spi->io_remap_addr + 132 + AMD_SPI_CTRL0_REG) & AMD_SPI_BUSY) == AMD_SPI_BUSY; 133 + while (spi_busy) { 134 + usleep_range(10, 20); 135 + if (timeout-- < 0) 136 + return -ETIMEDOUT; 137 + 138 + spi_busy = (ioread32((u8 __iomem *)amd_spi->io_remap_addr + 139 + AMD_SPI_CTRL0_REG) & AMD_SPI_BUSY) == AMD_SPI_BUSY; 140 + } 141 + 142 + return 0; 143 + } 144 + 145 + static void amd_spi_execute_opcode(struct spi_master *master) 146 + { 147 + struct amd_spi *amd_spi = spi_master_get_devdata(master); 148 + 149 + /* Set ExecuteOpCode bit in the CTRL0 register */ 150 + amd_spi_setclear_reg32(master, AMD_SPI_CTRL0_REG, AMD_SPI_EXEC_CMD, 151 + AMD_SPI_EXEC_CMD); 152 + 153 + amd_spi_busy_wait(amd_spi); 154 + } 155 + 156 + static int amd_spi_master_setup(struct spi_device *spi) 157 + { 158 + struct spi_master *master = spi->master; 159 + 160 + amd_spi_clear_fifo_ptr(master); 161 + 162 + return 0; 163 + } 164 + 165 + static inline int amd_spi_fifo_xfer(struct amd_spi *amd_spi, 166 + struct spi_master *master, 167 + struct spi_message *message) 168 + { 169 + struct spi_transfer *xfer = NULL; 170 + u8 cmd_opcode; 171 + u8 *buf = NULL; 172 + u32 m_cmd = 0; 173 + u32 i = 0; 174 + u32 tx_len = 0, rx_len = 0; 175 + 176 + list_for_each_entry(xfer, &message->transfers, 177 + transfer_list) { 178 + if (xfer->rx_buf) 179 + m_cmd = AMD_SPI_XFER_RX; 180 + if (xfer->tx_buf) 181 + m_cmd = AMD_SPI_XFER_TX; 182 + 183 + if (m_cmd & AMD_SPI_XFER_TX) { 184 + buf = (u8 *)xfer->tx_buf; 185 + tx_len = xfer->len - 1; 186 + cmd_opcode = *(u8 *)xfer->tx_buf; 187 + buf++; 188 + amd_spi_set_opcode(master, cmd_opcode); 189 + 190 + /* Write data into the FIFO. */ 191 + for (i = 0; i < tx_len; i++) { 192 + iowrite8(buf[i], 193 + ((u8 __iomem *)amd_spi->io_remap_addr + 194 + AMD_SPI_FIFO_BASE + i)); 195 + } 196 + 197 + amd_spi_set_tx_count(master, tx_len); 198 + amd_spi_clear_fifo_ptr(master); 199 + /* Execute command */ 200 + amd_spi_execute_opcode(master); 201 + } 202 + if (m_cmd & AMD_SPI_XFER_RX) { 203 + /* 204 + * Store no. of bytes to be received from 205 + * FIFO 206 + */ 207 + rx_len = xfer->len; 208 + buf = (u8 *)xfer->rx_buf; 209 + amd_spi_set_rx_count(master, rx_len); 210 + amd_spi_clear_fifo_ptr(master); 211 + /* Execute command */ 212 + amd_spi_execute_opcode(master); 213 + /* Read data from FIFO to receive buffer */ 214 + for (i = 0; i < rx_len; i++) 215 + buf[i] = amd_spi_readreg8(master, 216 + AMD_SPI_FIFO_BASE + 217 + tx_len + i); 218 + } 219 + } 220 + 221 + /* Update statistics */ 222 + message->actual_length = tx_len + rx_len + 1; 223 + /* complete the transaction */ 224 + message->status = 0; 225 + spi_finalize_current_message(master); 226 + 227 + return 0; 228 + } 229 + 230 + static int amd_spi_master_transfer(struct spi_master *master, 231 + struct spi_message *msg) 232 + { 233 + struct amd_spi *amd_spi = spi_master_get_devdata(master); 234 + struct spi_device *spi = msg->spi; 235 + 236 + amd_spi->chip_select = spi->chip_select; 237 + amd_spi_select_chip(master); 238 + 239 + /* 240 + * Extract spi_transfers from the spi message and 241 + * program the controller. 242 + */ 243 + amd_spi_fifo_xfer(amd_spi, master, msg); 244 + 245 + return 0; 246 + } 247 + 248 + static int amd_spi_probe(struct platform_device *pdev) 249 + { 250 + struct device *dev = &pdev->dev; 251 + struct spi_master *master; 252 + struct amd_spi *amd_spi; 253 + struct resource *res; 254 + int err = 0; 255 + 256 + /* Allocate storage for spi_master and driver private data */ 257 + master = spi_alloc_master(dev, sizeof(struct amd_spi)); 258 + if (!master) { 259 + dev_err(dev, "Error allocating SPI master\n"); 260 + return -ENOMEM; 261 + } 262 + 263 + amd_spi = spi_master_get_devdata(master); 264 + 265 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 266 + amd_spi->io_remap_addr = devm_ioremap_resource(&pdev->dev, res); 267 + if (IS_ERR(amd_spi->io_remap_addr)) { 268 + err = PTR_ERR(amd_spi->io_remap_addr); 269 + dev_err(dev, "error %d ioremap of SPI registers failed\n", err); 270 + goto err_free_master; 271 + } 272 + dev_dbg(dev, "io_remap_address: %p\n", amd_spi->io_remap_addr); 273 + 274 + /* Initialize the spi_master fields */ 275 + master->bus_num = 0; 276 + master->num_chipselect = 4; 277 + master->mode_bits = 0; 278 + master->flags = SPI_MASTER_HALF_DUPLEX; 279 + master->setup = amd_spi_master_setup; 280 + master->transfer_one_message = amd_spi_master_transfer; 281 + 282 + /* Register the controller with SPI framework */ 283 + err = devm_spi_register_master(dev, master); 284 + if (err) { 285 + dev_err(dev, "error %d registering SPI controller\n", err); 286 + goto err_free_master; 287 + } 288 + 289 + return 0; 290 + 291 + err_free_master: 292 + spi_master_put(master); 293 + 294 + return err; 295 + } 296 + 297 + static const struct acpi_device_id spi_acpi_match[] = { 298 + { "AMDI0061", 0 }, 299 + {}, 300 + }; 301 + MODULE_DEVICE_TABLE(acpi, spi_acpi_match); 302 + 303 + static struct platform_driver amd_spi_driver = { 304 + .driver = { 305 + .name = "amd_spi", 306 + .acpi_match_table = ACPI_PTR(spi_acpi_match), 307 + }, 308 + .probe = amd_spi_probe, 309 + }; 310 + 311 + module_platform_driver(amd_spi_driver); 312 + 313 + MODULE_LICENSE("Dual BSD/GPL"); 314 + MODULE_AUTHOR("Sanjay Mehta <sanju.mehta@amd.com>"); 315 + MODULE_DESCRIPTION("AMD SPI Master Controller Driver");
+3 -7
drivers/spi/spi-armada-3700.c
··· 276 276 return -ETIMEDOUT; 277 277 } 278 278 279 - static int a3700_spi_init(struct a3700_spi *a3700_spi) 279 + static void a3700_spi_init(struct a3700_spi *a3700_spi) 280 280 { 281 281 struct spi_master *master = a3700_spi->master; 282 282 u32 val; 283 - int i, ret = 0; 283 + int i; 284 284 285 285 /* Reset SPI unit */ 286 286 val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG); ··· 311 311 /* Mask the interrupts and clear cause bits */ 312 312 spireg_write(a3700_spi, A3700_SPI_INT_MASK_REG, 0); 313 313 spireg_write(a3700_spi, A3700_SPI_INT_STAT_REG, ~0U); 314 - 315 - return ret; 316 314 } 317 315 318 316 static irqreturn_t a3700_spi_interrupt(int irq, void *dev_id) ··· 884 886 master->min_speed_hz = DIV_ROUND_UP(clk_get_rate(spi->clk), 885 887 A3700_SPI_MAX_PRESCALE); 886 888 887 - ret = a3700_spi_init(spi); 888 - if (ret) 889 - goto error_clk; 889 + a3700_spi_init(spi); 890 890 891 891 ret = devm_request_irq(dev, spi->irq, a3700_spi_interrupt, 0, 892 892 dev_name(dev), master);
+1
drivers/spi/spi-atmel.c
··· 706 706 static int atmel_spi_next_xfer_dma_submit(struct spi_master *master, 707 707 struct spi_transfer *xfer, 708 708 u32 *plen) 709 + __must_hold(&as->lock) 709 710 { 710 711 struct atmel_spi *as = spi_master_get_devdata(master); 711 712 struct dma_chan *rxchan = master->dma_rx;
+132 -6
drivers/spi/spi-bcm-qspi.c
··· 91 91 #define MSPI_MSPI_STATUS 0x020 92 92 #define MSPI_CPTQP 0x024 93 93 #define MSPI_SPCR3 0x028 94 + #define MSPI_REV 0x02c 94 95 #define MSPI_TXRAM 0x040 95 96 #define MSPI_RXRAM 0x0c0 96 97 #define MSPI_CDRAM 0x140 ··· 107 106 #define MSPI_SPCR2_SPE BIT(6) 108 107 #define MSPI_SPCR2_CONT_AFTER_CMD BIT(7) 109 108 109 + #define MSPI_SPCR3_FASTBR BIT(0) 110 + #define MSPI_SPCR3_FASTDT BIT(1) 111 + #define MSPI_SPCR3_SYSCLKSEL_MASK GENMASK(11, 10) 112 + #define MSPI_SPCR3_SYSCLKSEL_27 (MSPI_SPCR3_SYSCLKSEL_MASK & \ 113 + ~(BIT(10) | BIT(11))) 114 + #define MSPI_SPCR3_SYSCLKSEL_108 (MSPI_SPCR3_SYSCLKSEL_MASK & \ 115 + BIT(11)) 116 + 110 117 #define MSPI_MSPI_STATUS_SPIF BIT(0) 111 118 112 119 #define INTR_BASE_BIT_SHIFT 0x02 113 120 #define INTR_COUNT 0x07 114 121 115 122 #define NUM_CHIPSELECT 4 116 - #define QSPI_SPBR_MIN 8U 117 123 #define QSPI_SPBR_MAX 255U 124 + #define MSPI_BASE_FREQ 27000000UL 118 125 119 126 #define OPCODE_DIOR 0xBB 120 127 #define OPCODE_QIOR 0xEB ··· 226 217 struct bcm_qspi_dev_id *dev_ids; 227 218 struct completion mspi_done; 228 219 struct completion bspi_done; 220 + u8 mspi_maj_rev; 221 + u8 mspi_min_rev; 222 + bool mspi_spcr3_sysclk; 229 223 }; 230 224 231 225 static inline bool has_bspi(struct bcm_qspi *qspi) 232 226 { 233 227 return qspi->bspi_mode; 228 + } 229 + 230 + /* hardware supports spcr3 and fast baud-rate */ 231 + static inline bool bcm_qspi_has_fastbr(struct bcm_qspi *qspi) 232 + { 233 + if (!has_bspi(qspi) && 234 + ((qspi->mspi_maj_rev >= 1) && 235 + (qspi->mspi_min_rev >= 5))) 236 + return true; 237 + 238 + return false; 239 + } 240 + 241 + /* hardware supports sys clk 108Mhz */ 242 + static inline bool bcm_qspi_has_sysclk_108(struct bcm_qspi *qspi) 243 + { 244 + if (!has_bspi(qspi) && (qspi->mspi_spcr3_sysclk || 245 + ((qspi->mspi_maj_rev >= 1) && 246 + (qspi->mspi_min_rev >= 6)))) 247 + return true; 248 + 249 + return false; 250 + } 251 + 252 + static inline int bcm_qspi_spbr_min(struct bcm_qspi *qspi) 253 + { 254 + if (bcm_qspi_has_fastbr(qspi)) 255 + return 1; 256 + else 257 + return 8; 234 258 } 235 259 236 260 /* Read qspi controller register*/ ··· 573 531 if (xp->speed_hz) 574 532 spbr = qspi->base_clk / (2 * xp->speed_hz); 575 533 576 - spcr = clamp_val(spbr, QSPI_SPBR_MIN, QSPI_SPBR_MAX); 534 + spcr = clamp_val(spbr, bcm_qspi_spbr_min(qspi), QSPI_SPBR_MAX); 577 535 bcm_qspi_write(qspi, MSPI, MSPI_SPCR0_LSB, spcr); 578 536 579 - spcr = MSPI_MASTER_BIT; 537 + if (!qspi->mspi_maj_rev) 538 + /* legacy controller */ 539 + spcr = MSPI_MASTER_BIT; 540 + else 541 + spcr = 0; 542 + 580 543 /* for 16 bit the data should be zero */ 581 544 if (xp->bits_per_word != 16) 582 545 spcr |= xp->bits_per_word << 2; 583 546 spcr |= xp->mode & 3; 547 + 584 548 bcm_qspi_write(qspi, MSPI, MSPI_SPCR0_MSB, spcr); 549 + 550 + if (bcm_qspi_has_fastbr(qspi)) { 551 + spcr = 0; 552 + 553 + /* enable fastbr */ 554 + spcr |= MSPI_SPCR3_FASTBR; 555 + 556 + if (bcm_qspi_has_sysclk_108(qspi)) { 557 + /* SYSCLK_108 */ 558 + spcr |= MSPI_SPCR3_SYSCLKSEL_108; 559 + qspi->base_clk = MSPI_BASE_FREQ * 4; 560 + /* Change spbr as we changed sysclk */ 561 + bcm_qspi_write(qspi, MSPI, MSPI_SPCR0_LSB, 4); 562 + } 563 + 564 + bcm_qspi_write(qspi, MSPI, MSPI_SPCR3, spcr); 565 + } 585 566 586 567 qspi->last_parms = *xp; 587 568 } ··· 1260 1195 .exec_op = bcm_qspi_exec_mem_op, 1261 1196 }; 1262 1197 1198 + struct bcm_qspi_data { 1199 + bool has_mspi_rev; 1200 + bool has_spcr3_sysclk; 1201 + }; 1202 + 1203 + static const struct bcm_qspi_data bcm_qspi_no_rev_data = { 1204 + .has_mspi_rev = false, 1205 + .has_spcr3_sysclk = false, 1206 + }; 1207 + 1208 + static const struct bcm_qspi_data bcm_qspi_rev_data = { 1209 + .has_mspi_rev = true, 1210 + .has_spcr3_sysclk = false, 1211 + }; 1212 + 1213 + static const struct bcm_qspi_data bcm_qspi_spcr3_data = { 1214 + .has_mspi_rev = true, 1215 + .has_spcr3_sysclk = true, 1216 + }; 1217 + 1263 1218 static const struct of_device_id bcm_qspi_of_match[] = { 1264 - { .compatible = "brcm,spi-bcm-qspi" }, 1219 + { 1220 + .compatible = "brcm,spi-bcm7425-qspi", 1221 + .data = &bcm_qspi_no_rev_data, 1222 + }, 1223 + { 1224 + .compatible = "brcm,spi-bcm7429-qspi", 1225 + .data = &bcm_qspi_no_rev_data, 1226 + }, 1227 + { 1228 + .compatible = "brcm,spi-bcm7435-qspi", 1229 + .data = &bcm_qspi_no_rev_data, 1230 + }, 1231 + { 1232 + .compatible = "brcm,spi-bcm-qspi", 1233 + .data = &bcm_qspi_rev_data, 1234 + }, 1235 + { 1236 + .compatible = "brcm,spi-bcm7216-qspi", 1237 + .data = &bcm_qspi_spcr3_data, 1238 + }, 1239 + { 1240 + .compatible = "brcm,spi-bcm7278-qspi", 1241 + .data = &bcm_qspi_spcr3_data, 1242 + }, 1265 1243 {}, 1266 1244 }; 1267 1245 MODULE_DEVICE_TABLE(of, bcm_qspi_of_match); ··· 1312 1204 int bcm_qspi_probe(struct platform_device *pdev, 1313 1205 struct bcm_qspi_soc_intc *soc_intc) 1314 1206 { 1207 + const struct of_device_id *of_id = NULL; 1208 + const struct bcm_qspi_data *data; 1315 1209 struct device *dev = &pdev->dev; 1316 1210 struct bcm_qspi *qspi; 1317 1211 struct spi_master *master; 1318 1212 struct resource *res; 1319 1213 int irq, ret = 0, num_ints = 0; 1320 1214 u32 val; 1215 + u32 rev = 0; 1321 1216 const char *name = NULL; 1322 1217 int num_irqs = ARRAY_SIZE(qspi_irq_tab); 1323 1218 ··· 1328 1217 if (!dev->of_node) 1329 1218 return -ENODEV; 1330 1219 1331 - if (!of_match_node(bcm_qspi_of_match, dev->of_node)) 1220 + of_id = of_match_node(bcm_qspi_of_match, dev->of_node); 1221 + if (!of_id) 1332 1222 return -ENODEV; 1223 + 1224 + data = of_id->data; 1333 1225 1334 1226 master = spi_alloc_master(dev, sizeof(struct bcm_qspi)); 1335 1227 if (!master) { ··· 1466 1352 } 1467 1353 1468 1354 qspi->base_clk = clk_get_rate(qspi->clk); 1469 - qspi->max_speed_hz = qspi->base_clk / (QSPI_SPBR_MIN * 2); 1355 + 1356 + if (data->has_mspi_rev) { 1357 + rev = bcm_qspi_read(qspi, MSPI, MSPI_REV); 1358 + /* some older revs do not have a MSPI_REV register */ 1359 + if ((rev & 0xff) == 0xff) 1360 + rev = 0; 1361 + } 1362 + 1363 + qspi->mspi_maj_rev = (rev >> 4) & 0xf; 1364 + qspi->mspi_min_rev = rev & 0xf; 1365 + qspi->mspi_spcr3_sysclk = data->has_spcr3_sysclk; 1366 + 1367 + qspi->max_speed_hz = qspi->base_clk / (bcm_qspi_spbr_min(qspi) * 2); 1470 1368 1471 1369 bcm_qspi_hw_init(qspi); 1472 1370 init_completion(&qspi->mspi_done);
+18 -4
drivers/spi/spi-bcm2835.c
··· 191 191 } 192 192 #endif /* CONFIG_DEBUG_FS */ 193 193 194 - static inline u32 bcm2835_rd(struct bcm2835_spi *bs, unsigned reg) 194 + static inline u32 bcm2835_rd(struct bcm2835_spi *bs, unsigned int reg) 195 195 { 196 196 return readl(bs->regs + reg); 197 197 } 198 198 199 - static inline void bcm2835_wr(struct bcm2835_spi *bs, unsigned reg, u32 val) 199 + static inline void bcm2835_wr(struct bcm2835_spi *bs, unsigned int reg, u32 val) 200 200 { 201 201 writel(val, bs->regs + reg); 202 202 } ··· 940 940 if (dma_mapping_error(ctlr->dma_tx->device->dev, bs->fill_tx_addr)) { 941 941 dev_err(dev, "cannot map zero page - not using DMA mode\n"); 942 942 bs->fill_tx_addr = 0; 943 + ret = -ENOMEM; 943 944 goto err_release; 944 945 } 945 946 ··· 950 949 DMA_MEM_TO_DEV, 0); 951 950 if (!bs->fill_tx_desc) { 952 951 dev_err(dev, "cannot prepare fill_tx_desc - not using DMA mode\n"); 952 + ret = -ENOMEM; 953 953 goto err_release; 954 954 } 955 955 ··· 981 979 if (dma_mapping_error(ctlr->dma_rx->device->dev, bs->clear_rx_addr)) { 982 980 dev_err(dev, "cannot map clear_rx_cs - not using DMA mode\n"); 983 981 bs->clear_rx_addr = 0; 982 + ret = -ENOMEM; 984 983 goto err_release; 985 984 } 986 985 ··· 992 989 DMA_MEM_TO_DEV, 0); 993 990 if (!bs->clear_rx_desc[i]) { 994 991 dev_err(dev, "cannot prepare clear_rx_desc - not using DMA mode\n"); 992 + ret = -ENOMEM; 995 993 goto err_release; 996 994 } 997 995 ··· 1380 1376 1381 1377 spi_unregister_controller(ctlr); 1382 1378 1379 + bcm2835_dma_release(ctlr, bs); 1380 + 1383 1381 /* Clear FIFOs, and disable the HW block */ 1384 1382 bcm2835_wr(bs, BCM2835_SPI_CS, 1385 1383 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX); 1386 1384 1387 1385 clk_disable_unprepare(bs->clk); 1388 1386 1389 - bcm2835_dma_release(ctlr, bs); 1390 - 1391 1387 return 0; 1388 + } 1389 + 1390 + static void bcm2835_spi_shutdown(struct platform_device *pdev) 1391 + { 1392 + int ret; 1393 + 1394 + ret = bcm2835_spi_remove(pdev); 1395 + if (ret) 1396 + dev_err(&pdev->dev, "failed to shutdown\n"); 1392 1397 } 1393 1398 1394 1399 static const struct of_device_id bcm2835_spi_match[] = { ··· 1413 1400 }, 1414 1401 .probe = bcm2835_spi_probe, 1415 1402 .remove = bcm2835_spi_remove, 1403 + .shutdown = bcm2835_spi_shutdown, 1416 1404 }; 1417 1405 module_platform_driver(bcm2835_spi_driver); 1418 1406
+480
drivers/spi/spi-dw-dma.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Special handling for DW DMA core 4 + * 5 + * Copyright (c) 2009, 2014 Intel Corporation. 6 + */ 7 + 8 + #include <linux/completion.h> 9 + #include <linux/dma-mapping.h> 10 + #include <linux/dmaengine.h> 11 + #include <linux/irqreturn.h> 12 + #include <linux/jiffies.h> 13 + #include <linux/pci.h> 14 + #include <linux/platform_data/dma-dw.h> 15 + #include <linux/spi/spi.h> 16 + #include <linux/types.h> 17 + 18 + #include "spi-dw.h" 19 + 20 + #define WAIT_RETRIES 5 21 + #define RX_BUSY 0 22 + #define RX_BURST_LEVEL 16 23 + #define TX_BUSY 1 24 + #define TX_BURST_LEVEL 16 25 + 26 + static bool dw_spi_dma_chan_filter(struct dma_chan *chan, void *param) 27 + { 28 + struct dw_dma_slave *s = param; 29 + 30 + if (s->dma_dev != chan->device->dev) 31 + return false; 32 + 33 + chan->private = s; 34 + return true; 35 + } 36 + 37 + static void dw_spi_dma_maxburst_init(struct dw_spi *dws) 38 + { 39 + struct dma_slave_caps caps; 40 + u32 max_burst, def_burst; 41 + int ret; 42 + 43 + def_burst = dws->fifo_len / 2; 44 + 45 + ret = dma_get_slave_caps(dws->rxchan, &caps); 46 + if (!ret && caps.max_burst) 47 + max_burst = caps.max_burst; 48 + else 49 + max_burst = RX_BURST_LEVEL; 50 + 51 + dws->rxburst = min(max_burst, def_burst); 52 + 53 + ret = dma_get_slave_caps(dws->txchan, &caps); 54 + if (!ret && caps.max_burst) 55 + max_burst = caps.max_burst; 56 + else 57 + max_burst = TX_BURST_LEVEL; 58 + 59 + dws->txburst = min(max_burst, def_burst); 60 + } 61 + 62 + static int dw_spi_dma_init_mfld(struct device *dev, struct dw_spi *dws) 63 + { 64 + struct dw_dma_slave dma_tx = { .dst_id = 1 }, *tx = &dma_tx; 65 + struct dw_dma_slave dma_rx = { .src_id = 0 }, *rx = &dma_rx; 66 + struct pci_dev *dma_dev; 67 + dma_cap_mask_t mask; 68 + 69 + /* 70 + * Get pci device for DMA controller, currently it could only 71 + * be the DMA controller of Medfield 72 + */ 73 + dma_dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x0827, NULL); 74 + if (!dma_dev) 75 + return -ENODEV; 76 + 77 + dma_cap_zero(mask); 78 + dma_cap_set(DMA_SLAVE, mask); 79 + 80 + /* 1. Init rx channel */ 81 + rx->dma_dev = &dma_dev->dev; 82 + dws->rxchan = dma_request_channel(mask, dw_spi_dma_chan_filter, rx); 83 + if (!dws->rxchan) 84 + goto err_exit; 85 + 86 + /* 2. Init tx channel */ 87 + tx->dma_dev = &dma_dev->dev; 88 + dws->txchan = dma_request_channel(mask, dw_spi_dma_chan_filter, tx); 89 + if (!dws->txchan) 90 + goto free_rxchan; 91 + 92 + dws->master->dma_rx = dws->rxchan; 93 + dws->master->dma_tx = dws->txchan; 94 + 95 + init_completion(&dws->dma_completion); 96 + 97 + dw_spi_dma_maxburst_init(dws); 98 + 99 + return 0; 100 + 101 + free_rxchan: 102 + dma_release_channel(dws->rxchan); 103 + dws->rxchan = NULL; 104 + err_exit: 105 + return -EBUSY; 106 + } 107 + 108 + static int dw_spi_dma_init_generic(struct device *dev, struct dw_spi *dws) 109 + { 110 + dws->rxchan = dma_request_slave_channel(dev, "rx"); 111 + if (!dws->rxchan) 112 + return -ENODEV; 113 + 114 + dws->txchan = dma_request_slave_channel(dev, "tx"); 115 + if (!dws->txchan) { 116 + dma_release_channel(dws->rxchan); 117 + dws->rxchan = NULL; 118 + return -ENODEV; 119 + } 120 + 121 + dws->master->dma_rx = dws->rxchan; 122 + dws->master->dma_tx = dws->txchan; 123 + 124 + init_completion(&dws->dma_completion); 125 + 126 + dw_spi_dma_maxburst_init(dws); 127 + 128 + return 0; 129 + } 130 + 131 + static void dw_spi_dma_exit(struct dw_spi *dws) 132 + { 133 + if (dws->txchan) { 134 + dmaengine_terminate_sync(dws->txchan); 135 + dma_release_channel(dws->txchan); 136 + } 137 + 138 + if (dws->rxchan) { 139 + dmaengine_terminate_sync(dws->rxchan); 140 + dma_release_channel(dws->rxchan); 141 + } 142 + 143 + dw_writel(dws, DW_SPI_DMACR, 0); 144 + } 145 + 146 + static irqreturn_t dw_spi_dma_transfer_handler(struct dw_spi *dws) 147 + { 148 + u16 irq_status = dw_readl(dws, DW_SPI_ISR); 149 + 150 + if (!irq_status) 151 + return IRQ_NONE; 152 + 153 + dw_readl(dws, DW_SPI_ICR); 154 + spi_reset_chip(dws); 155 + 156 + dev_err(&dws->master->dev, "%s: FIFO overrun/underrun\n", __func__); 157 + dws->master->cur_msg->status = -EIO; 158 + complete(&dws->dma_completion); 159 + return IRQ_HANDLED; 160 + } 161 + 162 + static bool dw_spi_can_dma(struct spi_controller *master, 163 + struct spi_device *spi, struct spi_transfer *xfer) 164 + { 165 + struct dw_spi *dws = spi_controller_get_devdata(master); 166 + 167 + return xfer->len > dws->fifo_len; 168 + } 169 + 170 + static enum dma_slave_buswidth dw_spi_dma_convert_width(u8 n_bytes) 171 + { 172 + if (n_bytes == 1) 173 + return DMA_SLAVE_BUSWIDTH_1_BYTE; 174 + else if (n_bytes == 2) 175 + return DMA_SLAVE_BUSWIDTH_2_BYTES; 176 + 177 + return DMA_SLAVE_BUSWIDTH_UNDEFINED; 178 + } 179 + 180 + static int dw_spi_dma_wait(struct dw_spi *dws, struct spi_transfer *xfer) 181 + { 182 + unsigned long long ms; 183 + 184 + ms = xfer->len * MSEC_PER_SEC * BITS_PER_BYTE; 185 + do_div(ms, xfer->effective_speed_hz); 186 + ms += ms + 200; 187 + 188 + if (ms > UINT_MAX) 189 + ms = UINT_MAX; 190 + 191 + ms = wait_for_completion_timeout(&dws->dma_completion, 192 + msecs_to_jiffies(ms)); 193 + 194 + if (ms == 0) { 195 + dev_err(&dws->master->cur_msg->spi->dev, 196 + "DMA transaction timed out\n"); 197 + return -ETIMEDOUT; 198 + } 199 + 200 + return 0; 201 + } 202 + 203 + static inline bool dw_spi_dma_tx_busy(struct dw_spi *dws) 204 + { 205 + return !(dw_readl(dws, DW_SPI_SR) & SR_TF_EMPT); 206 + } 207 + 208 + static int dw_spi_dma_wait_tx_done(struct dw_spi *dws, 209 + struct spi_transfer *xfer) 210 + { 211 + int retry = WAIT_RETRIES; 212 + struct spi_delay delay; 213 + u32 nents; 214 + 215 + nents = dw_readl(dws, DW_SPI_TXFLR); 216 + delay.unit = SPI_DELAY_UNIT_SCK; 217 + delay.value = nents * dws->n_bytes * BITS_PER_BYTE; 218 + 219 + while (dw_spi_dma_tx_busy(dws) && retry--) 220 + spi_delay_exec(&delay, xfer); 221 + 222 + if (retry < 0) { 223 + dev_err(&dws->master->dev, "Tx hanged up\n"); 224 + return -EIO; 225 + } 226 + 227 + return 0; 228 + } 229 + 230 + /* 231 + * dws->dma_chan_busy is set before the dma transfer starts, callback for tx 232 + * channel will clear a corresponding bit. 233 + */ 234 + static void dw_spi_dma_tx_done(void *arg) 235 + { 236 + struct dw_spi *dws = arg; 237 + 238 + clear_bit(TX_BUSY, &dws->dma_chan_busy); 239 + if (test_bit(RX_BUSY, &dws->dma_chan_busy)) 240 + return; 241 + 242 + dw_writel(dws, DW_SPI_DMACR, 0); 243 + complete(&dws->dma_completion); 244 + } 245 + 246 + static struct dma_async_tx_descriptor * 247 + dw_spi_dma_prepare_tx(struct dw_spi *dws, struct spi_transfer *xfer) 248 + { 249 + struct dma_slave_config txconf; 250 + struct dma_async_tx_descriptor *txdesc; 251 + 252 + if (!xfer->tx_buf) 253 + return NULL; 254 + 255 + memset(&txconf, 0, sizeof(txconf)); 256 + txconf.direction = DMA_MEM_TO_DEV; 257 + txconf.dst_addr = dws->dma_addr; 258 + txconf.dst_maxburst = dws->txburst; 259 + txconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 260 + txconf.dst_addr_width = dw_spi_dma_convert_width(dws->n_bytes); 261 + txconf.device_fc = false; 262 + 263 + dmaengine_slave_config(dws->txchan, &txconf); 264 + 265 + txdesc = dmaengine_prep_slave_sg(dws->txchan, 266 + xfer->tx_sg.sgl, 267 + xfer->tx_sg.nents, 268 + DMA_MEM_TO_DEV, 269 + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 270 + if (!txdesc) 271 + return NULL; 272 + 273 + txdesc->callback = dw_spi_dma_tx_done; 274 + txdesc->callback_param = dws; 275 + 276 + return txdesc; 277 + } 278 + 279 + static inline bool dw_spi_dma_rx_busy(struct dw_spi *dws) 280 + { 281 + return !!(dw_readl(dws, DW_SPI_SR) & SR_RF_NOT_EMPT); 282 + } 283 + 284 + static int dw_spi_dma_wait_rx_done(struct dw_spi *dws) 285 + { 286 + int retry = WAIT_RETRIES; 287 + struct spi_delay delay; 288 + unsigned long ns, us; 289 + u32 nents; 290 + 291 + /* 292 + * It's unlikely that DMA engine is still doing the data fetching, but 293 + * if it's let's give it some reasonable time. The timeout calculation 294 + * is based on the synchronous APB/SSI reference clock rate, on a 295 + * number of data entries left in the Rx FIFO, times a number of clock 296 + * periods normally needed for a single APB read/write transaction 297 + * without PREADY signal utilized (which is true for the DW APB SSI 298 + * controller). 299 + */ 300 + nents = dw_readl(dws, DW_SPI_RXFLR); 301 + ns = 4U * NSEC_PER_SEC / dws->max_freq * nents; 302 + if (ns <= NSEC_PER_USEC) { 303 + delay.unit = SPI_DELAY_UNIT_NSECS; 304 + delay.value = ns; 305 + } else { 306 + us = DIV_ROUND_UP(ns, NSEC_PER_USEC); 307 + delay.unit = SPI_DELAY_UNIT_USECS; 308 + delay.value = clamp_val(us, 0, USHRT_MAX); 309 + } 310 + 311 + while (dw_spi_dma_rx_busy(dws) && retry--) 312 + spi_delay_exec(&delay, NULL); 313 + 314 + if (retry < 0) { 315 + dev_err(&dws->master->dev, "Rx hanged up\n"); 316 + return -EIO; 317 + } 318 + 319 + return 0; 320 + } 321 + 322 + /* 323 + * dws->dma_chan_busy is set before the dma transfer starts, callback for rx 324 + * channel will clear a corresponding bit. 325 + */ 326 + static void dw_spi_dma_rx_done(void *arg) 327 + { 328 + struct dw_spi *dws = arg; 329 + 330 + clear_bit(RX_BUSY, &dws->dma_chan_busy); 331 + if (test_bit(TX_BUSY, &dws->dma_chan_busy)) 332 + return; 333 + 334 + dw_writel(dws, DW_SPI_DMACR, 0); 335 + complete(&dws->dma_completion); 336 + } 337 + 338 + static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws, 339 + struct spi_transfer *xfer) 340 + { 341 + struct dma_slave_config rxconf; 342 + struct dma_async_tx_descriptor *rxdesc; 343 + 344 + if (!xfer->rx_buf) 345 + return NULL; 346 + 347 + memset(&rxconf, 0, sizeof(rxconf)); 348 + rxconf.direction = DMA_DEV_TO_MEM; 349 + rxconf.src_addr = dws->dma_addr; 350 + rxconf.src_maxburst = dws->rxburst; 351 + rxconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 352 + rxconf.src_addr_width = dw_spi_dma_convert_width(dws->n_bytes); 353 + rxconf.device_fc = false; 354 + 355 + dmaengine_slave_config(dws->rxchan, &rxconf); 356 + 357 + rxdesc = dmaengine_prep_slave_sg(dws->rxchan, 358 + xfer->rx_sg.sgl, 359 + xfer->rx_sg.nents, 360 + DMA_DEV_TO_MEM, 361 + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 362 + if (!rxdesc) 363 + return NULL; 364 + 365 + rxdesc->callback = dw_spi_dma_rx_done; 366 + rxdesc->callback_param = dws; 367 + 368 + return rxdesc; 369 + } 370 + 371 + static int dw_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer) 372 + { 373 + u16 imr = 0, dma_ctrl = 0; 374 + 375 + dw_writel(dws, DW_SPI_DMARDLR, dws->rxburst - 1); 376 + dw_writel(dws, DW_SPI_DMATDLR, dws->fifo_len - dws->txburst); 377 + 378 + if (xfer->tx_buf) 379 + dma_ctrl |= SPI_DMA_TDMAE; 380 + if (xfer->rx_buf) 381 + dma_ctrl |= SPI_DMA_RDMAE; 382 + dw_writel(dws, DW_SPI_DMACR, dma_ctrl); 383 + 384 + /* Set the interrupt mask */ 385 + if (xfer->tx_buf) 386 + imr |= SPI_INT_TXOI; 387 + if (xfer->rx_buf) 388 + imr |= SPI_INT_RXUI | SPI_INT_RXOI; 389 + spi_umask_intr(dws, imr); 390 + 391 + reinit_completion(&dws->dma_completion); 392 + 393 + dws->transfer_handler = dw_spi_dma_transfer_handler; 394 + 395 + return 0; 396 + } 397 + 398 + static int dw_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer) 399 + { 400 + struct dma_async_tx_descriptor *txdesc, *rxdesc; 401 + int ret; 402 + 403 + /* Prepare the TX dma transfer */ 404 + txdesc = dw_spi_dma_prepare_tx(dws, xfer); 405 + 406 + /* Prepare the RX dma transfer */ 407 + rxdesc = dw_spi_dma_prepare_rx(dws, xfer); 408 + 409 + /* rx must be started before tx due to spi instinct */ 410 + if (rxdesc) { 411 + set_bit(RX_BUSY, &dws->dma_chan_busy); 412 + dmaengine_submit(rxdesc); 413 + dma_async_issue_pending(dws->rxchan); 414 + } 415 + 416 + if (txdesc) { 417 + set_bit(TX_BUSY, &dws->dma_chan_busy); 418 + dmaengine_submit(txdesc); 419 + dma_async_issue_pending(dws->txchan); 420 + } 421 + 422 + ret = dw_spi_dma_wait(dws, xfer); 423 + if (ret) 424 + return ret; 425 + 426 + if (txdesc && dws->master->cur_msg->status == -EINPROGRESS) { 427 + ret = dw_spi_dma_wait_tx_done(dws, xfer); 428 + if (ret) 429 + return ret; 430 + } 431 + 432 + if (rxdesc && dws->master->cur_msg->status == -EINPROGRESS) 433 + ret = dw_spi_dma_wait_rx_done(dws); 434 + 435 + return ret; 436 + } 437 + 438 + static void dw_spi_dma_stop(struct dw_spi *dws) 439 + { 440 + if (test_bit(TX_BUSY, &dws->dma_chan_busy)) { 441 + dmaengine_terminate_sync(dws->txchan); 442 + clear_bit(TX_BUSY, &dws->dma_chan_busy); 443 + } 444 + if (test_bit(RX_BUSY, &dws->dma_chan_busy)) { 445 + dmaengine_terminate_sync(dws->rxchan); 446 + clear_bit(RX_BUSY, &dws->dma_chan_busy); 447 + } 448 + 449 + dw_writel(dws, DW_SPI_DMACR, 0); 450 + } 451 + 452 + static const struct dw_spi_dma_ops dw_spi_dma_mfld_ops = { 453 + .dma_init = dw_spi_dma_init_mfld, 454 + .dma_exit = dw_spi_dma_exit, 455 + .dma_setup = dw_spi_dma_setup, 456 + .can_dma = dw_spi_can_dma, 457 + .dma_transfer = dw_spi_dma_transfer, 458 + .dma_stop = dw_spi_dma_stop, 459 + }; 460 + 461 + void dw_spi_dma_setup_mfld(struct dw_spi *dws) 462 + { 463 + dws->dma_ops = &dw_spi_dma_mfld_ops; 464 + } 465 + EXPORT_SYMBOL_GPL(dw_spi_dma_setup_mfld); 466 + 467 + static const struct dw_spi_dma_ops dw_spi_dma_generic_ops = { 468 + .dma_init = dw_spi_dma_init_generic, 469 + .dma_exit = dw_spi_dma_exit, 470 + .dma_setup = dw_spi_dma_setup, 471 + .can_dma = dw_spi_can_dma, 472 + .dma_transfer = dw_spi_dma_transfer, 473 + .dma_stop = dw_spi_dma_stop, 474 + }; 475 + 476 + void dw_spi_dma_setup_generic(struct dw_spi *dws) 477 + { 478 + dws->dma_ops = &dw_spi_dma_generic_ops; 479 + } 480 + EXPORT_SYMBOL_GPL(dw_spi_dma_setup_generic);
-322
drivers/spi/spi-dw-mid.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * Special handling for DW core on Intel MID platform 4 - * 5 - * Copyright (c) 2009, 2014 Intel Corporation. 6 - */ 7 - 8 - #include <linux/dma-mapping.h> 9 - #include <linux/dmaengine.h> 10 - #include <linux/interrupt.h> 11 - #include <linux/slab.h> 12 - #include <linux/spi/spi.h> 13 - #include <linux/types.h> 14 - 15 - #include "spi-dw.h" 16 - 17 - #ifdef CONFIG_SPI_DW_MID_DMA 18 - #include <linux/pci.h> 19 - #include <linux/platform_data/dma-dw.h> 20 - 21 - #define RX_BUSY 0 22 - #define TX_BUSY 1 23 - 24 - static struct dw_dma_slave mid_dma_tx = { .dst_id = 1 }; 25 - static struct dw_dma_slave mid_dma_rx = { .src_id = 0 }; 26 - 27 - static bool mid_spi_dma_chan_filter(struct dma_chan *chan, void *param) 28 - { 29 - struct dw_dma_slave *s = param; 30 - 31 - if (s->dma_dev != chan->device->dev) 32 - return false; 33 - 34 - chan->private = s; 35 - return true; 36 - } 37 - 38 - static int mid_spi_dma_init(struct dw_spi *dws) 39 - { 40 - struct pci_dev *dma_dev; 41 - struct dw_dma_slave *tx = dws->dma_tx; 42 - struct dw_dma_slave *rx = dws->dma_rx; 43 - dma_cap_mask_t mask; 44 - 45 - /* 46 - * Get pci device for DMA controller, currently it could only 47 - * be the DMA controller of Medfield 48 - */ 49 - dma_dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x0827, NULL); 50 - if (!dma_dev) 51 - return -ENODEV; 52 - 53 - dma_cap_zero(mask); 54 - dma_cap_set(DMA_SLAVE, mask); 55 - 56 - /* 1. Init rx channel */ 57 - rx->dma_dev = &dma_dev->dev; 58 - dws->rxchan = dma_request_channel(mask, mid_spi_dma_chan_filter, rx); 59 - if (!dws->rxchan) 60 - goto err_exit; 61 - dws->master->dma_rx = dws->rxchan; 62 - 63 - /* 2. Init tx channel */ 64 - tx->dma_dev = &dma_dev->dev; 65 - dws->txchan = dma_request_channel(mask, mid_spi_dma_chan_filter, tx); 66 - if (!dws->txchan) 67 - goto free_rxchan; 68 - dws->master->dma_tx = dws->txchan; 69 - 70 - dws->dma_inited = 1; 71 - return 0; 72 - 73 - free_rxchan: 74 - dma_release_channel(dws->rxchan); 75 - err_exit: 76 - return -EBUSY; 77 - } 78 - 79 - static void mid_spi_dma_exit(struct dw_spi *dws) 80 - { 81 - if (!dws->dma_inited) 82 - return; 83 - 84 - dmaengine_terminate_sync(dws->txchan); 85 - dma_release_channel(dws->txchan); 86 - 87 - dmaengine_terminate_sync(dws->rxchan); 88 - dma_release_channel(dws->rxchan); 89 - } 90 - 91 - static irqreturn_t dma_transfer(struct dw_spi *dws) 92 - { 93 - u16 irq_status = dw_readl(dws, DW_SPI_ISR); 94 - 95 - if (!irq_status) 96 - return IRQ_NONE; 97 - 98 - dw_readl(dws, DW_SPI_ICR); 99 - spi_reset_chip(dws); 100 - 101 - dev_err(&dws->master->dev, "%s: FIFO overrun/underrun\n", __func__); 102 - dws->master->cur_msg->status = -EIO; 103 - spi_finalize_current_transfer(dws->master); 104 - return IRQ_HANDLED; 105 - } 106 - 107 - static bool mid_spi_can_dma(struct spi_controller *master, 108 - struct spi_device *spi, struct spi_transfer *xfer) 109 - { 110 - struct dw_spi *dws = spi_controller_get_devdata(master); 111 - 112 - if (!dws->dma_inited) 113 - return false; 114 - 115 - return xfer->len > dws->fifo_len; 116 - } 117 - 118 - static enum dma_slave_buswidth convert_dma_width(u32 dma_width) { 119 - if (dma_width == 1) 120 - return DMA_SLAVE_BUSWIDTH_1_BYTE; 121 - else if (dma_width == 2) 122 - return DMA_SLAVE_BUSWIDTH_2_BYTES; 123 - 124 - return DMA_SLAVE_BUSWIDTH_UNDEFINED; 125 - } 126 - 127 - /* 128 - * dws->dma_chan_busy is set before the dma transfer starts, callback for tx 129 - * channel will clear a corresponding bit. 130 - */ 131 - static void dw_spi_dma_tx_done(void *arg) 132 - { 133 - struct dw_spi *dws = arg; 134 - 135 - clear_bit(TX_BUSY, &dws->dma_chan_busy); 136 - if (test_bit(RX_BUSY, &dws->dma_chan_busy)) 137 - return; 138 - spi_finalize_current_transfer(dws->master); 139 - } 140 - 141 - static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws, 142 - struct spi_transfer *xfer) 143 - { 144 - struct dma_slave_config txconf; 145 - struct dma_async_tx_descriptor *txdesc; 146 - 147 - if (!xfer->tx_buf) 148 - return NULL; 149 - 150 - txconf.direction = DMA_MEM_TO_DEV; 151 - txconf.dst_addr = dws->dma_addr; 152 - txconf.dst_maxburst = 16; 153 - txconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 154 - txconf.dst_addr_width = convert_dma_width(dws->dma_width); 155 - txconf.device_fc = false; 156 - 157 - dmaengine_slave_config(dws->txchan, &txconf); 158 - 159 - txdesc = dmaengine_prep_slave_sg(dws->txchan, 160 - xfer->tx_sg.sgl, 161 - xfer->tx_sg.nents, 162 - DMA_MEM_TO_DEV, 163 - DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 164 - if (!txdesc) 165 - return NULL; 166 - 167 - txdesc->callback = dw_spi_dma_tx_done; 168 - txdesc->callback_param = dws; 169 - 170 - return txdesc; 171 - } 172 - 173 - /* 174 - * dws->dma_chan_busy is set before the dma transfer starts, callback for rx 175 - * channel will clear a corresponding bit. 176 - */ 177 - static void dw_spi_dma_rx_done(void *arg) 178 - { 179 - struct dw_spi *dws = arg; 180 - 181 - clear_bit(RX_BUSY, &dws->dma_chan_busy); 182 - if (test_bit(TX_BUSY, &dws->dma_chan_busy)) 183 - return; 184 - spi_finalize_current_transfer(dws->master); 185 - } 186 - 187 - static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws, 188 - struct spi_transfer *xfer) 189 - { 190 - struct dma_slave_config rxconf; 191 - struct dma_async_tx_descriptor *rxdesc; 192 - 193 - if (!xfer->rx_buf) 194 - return NULL; 195 - 196 - rxconf.direction = DMA_DEV_TO_MEM; 197 - rxconf.src_addr = dws->dma_addr; 198 - rxconf.src_maxburst = 16; 199 - rxconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 200 - rxconf.src_addr_width = convert_dma_width(dws->dma_width); 201 - rxconf.device_fc = false; 202 - 203 - dmaengine_slave_config(dws->rxchan, &rxconf); 204 - 205 - rxdesc = dmaengine_prep_slave_sg(dws->rxchan, 206 - xfer->rx_sg.sgl, 207 - xfer->rx_sg.nents, 208 - DMA_DEV_TO_MEM, 209 - DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 210 - if (!rxdesc) 211 - return NULL; 212 - 213 - rxdesc->callback = dw_spi_dma_rx_done; 214 - rxdesc->callback_param = dws; 215 - 216 - return rxdesc; 217 - } 218 - 219 - static int mid_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer) 220 - { 221 - u16 dma_ctrl = 0; 222 - 223 - dw_writel(dws, DW_SPI_DMARDLR, 0xf); 224 - dw_writel(dws, DW_SPI_DMATDLR, 0x10); 225 - 226 - if (xfer->tx_buf) 227 - dma_ctrl |= SPI_DMA_TDMAE; 228 - if (xfer->rx_buf) 229 - dma_ctrl |= SPI_DMA_RDMAE; 230 - dw_writel(dws, DW_SPI_DMACR, dma_ctrl); 231 - 232 - /* Set the interrupt mask */ 233 - spi_umask_intr(dws, SPI_INT_TXOI | SPI_INT_RXUI | SPI_INT_RXOI); 234 - 235 - dws->transfer_handler = dma_transfer; 236 - 237 - return 0; 238 - } 239 - 240 - static int mid_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer) 241 - { 242 - struct dma_async_tx_descriptor *txdesc, *rxdesc; 243 - 244 - /* Prepare the TX dma transfer */ 245 - txdesc = dw_spi_dma_prepare_tx(dws, xfer); 246 - 247 - /* Prepare the RX dma transfer */ 248 - rxdesc = dw_spi_dma_prepare_rx(dws, xfer); 249 - 250 - /* rx must be started before tx due to spi instinct */ 251 - if (rxdesc) { 252 - set_bit(RX_BUSY, &dws->dma_chan_busy); 253 - dmaengine_submit(rxdesc); 254 - dma_async_issue_pending(dws->rxchan); 255 - } 256 - 257 - if (txdesc) { 258 - set_bit(TX_BUSY, &dws->dma_chan_busy); 259 - dmaengine_submit(txdesc); 260 - dma_async_issue_pending(dws->txchan); 261 - } 262 - 263 - return 0; 264 - } 265 - 266 - static void mid_spi_dma_stop(struct dw_spi *dws) 267 - { 268 - if (test_bit(TX_BUSY, &dws->dma_chan_busy)) { 269 - dmaengine_terminate_sync(dws->txchan); 270 - clear_bit(TX_BUSY, &dws->dma_chan_busy); 271 - } 272 - if (test_bit(RX_BUSY, &dws->dma_chan_busy)) { 273 - dmaengine_terminate_sync(dws->rxchan); 274 - clear_bit(RX_BUSY, &dws->dma_chan_busy); 275 - } 276 - } 277 - 278 - static const struct dw_spi_dma_ops mid_dma_ops = { 279 - .dma_init = mid_spi_dma_init, 280 - .dma_exit = mid_spi_dma_exit, 281 - .dma_setup = mid_spi_dma_setup, 282 - .can_dma = mid_spi_can_dma, 283 - .dma_transfer = mid_spi_dma_transfer, 284 - .dma_stop = mid_spi_dma_stop, 285 - }; 286 - #endif 287 - 288 - /* Some specific info for SPI0 controller on Intel MID */ 289 - 290 - /* HW info for MRST Clk Control Unit, 32b reg per controller */ 291 - #define MRST_SPI_CLK_BASE 100000000 /* 100m */ 292 - #define MRST_CLK_SPI_REG 0xff11d86c 293 - #define CLK_SPI_BDIV_OFFSET 0 294 - #define CLK_SPI_BDIV_MASK 0x00000007 295 - #define CLK_SPI_CDIV_OFFSET 9 296 - #define CLK_SPI_CDIV_MASK 0x00000e00 297 - #define CLK_SPI_DISABLE_OFFSET 8 298 - 299 - int dw_spi_mid_init(struct dw_spi *dws) 300 - { 301 - void __iomem *clk_reg; 302 - u32 clk_cdiv; 303 - 304 - clk_reg = ioremap(MRST_CLK_SPI_REG, 16); 305 - if (!clk_reg) 306 - return -ENOMEM; 307 - 308 - /* Get SPI controller operating freq info */ 309 - clk_cdiv = readl(clk_reg + dws->bus_num * sizeof(u32)); 310 - clk_cdiv &= CLK_SPI_CDIV_MASK; 311 - clk_cdiv >>= CLK_SPI_CDIV_OFFSET; 312 - dws->max_freq = MRST_SPI_CLK_BASE / (clk_cdiv + 1); 313 - 314 - iounmap(clk_reg); 315 - 316 - #ifdef CONFIG_SPI_DW_MID_DMA 317 - dws->dma_tx = &mid_dma_tx; 318 - dws->dma_rx = &mid_dma_rx; 319 - dws->dma_ops = &mid_dma_ops; 320 - #endif 321 - return 0; 322 - }
+78 -8
drivers/spi/spi-dw-mmio.c
··· 7 7 8 8 #include <linux/clk.h> 9 9 #include <linux/err.h> 10 - #include <linux/interrupt.h> 11 10 #include <linux/platform_device.h> 12 11 #include <linux/pm_runtime.h> 13 12 #include <linux/slab.h> ··· 19 20 #include <linux/acpi.h> 20 21 #include <linux/property.h> 21 22 #include <linux/regmap.h> 23 + #include <linux/reset.h> 22 24 23 25 #include "spi-dw.h" 24 26 ··· 30 30 struct clk *clk; 31 31 struct clk *pclk; 32 32 void *priv; 33 + struct reset_control *rstc; 33 34 }; 34 35 35 36 #define MSCC_CPU_SYSTEM_CTRL_GENERAL_CTRL 0x24 ··· 44 43 #define MSCC_SPI_MST_SW_MODE 0x14 45 44 #define MSCC_SPI_MST_SW_MODE_SW_PIN_CTRL_MODE BIT(13) 46 45 #define MSCC_SPI_MST_SW_MODE_SW_SPI_CS(x) (x << 5) 46 + 47 + /* 48 + * For Keem Bay, CTRLR0[31] is used to select controller mode. 49 + * 0: SSI is slave 50 + * 1: SSI is master 51 + */ 52 + #define KEEMBAY_CTRLR0_SSIC_IS_MST BIT(31) 47 53 48 54 struct dw_spi_mscc { 49 55 struct regmap *syscon; ··· 114 106 dwsmmio->dws.set_cs = dw_spi_mscc_set_cs; 115 107 dwsmmio->priv = dwsmscc; 116 108 109 + /* Register hook to configure CTRLR0 */ 110 + dwsmmio->dws.update_cr0 = dw_spi_update_cr0; 111 + 117 112 return 0; 118 113 } 119 114 ··· 139 128 { 140 129 dwsmmio->dws.cs_override = 1; 141 130 131 + /* Register hook to configure CTRLR0 */ 132 + dwsmmio->dws.update_cr0 = dw_spi_update_cr0; 133 + 134 + return 0; 135 + } 136 + 137 + static int dw_spi_dw_apb_init(struct platform_device *pdev, 138 + struct dw_spi_mmio *dwsmmio) 139 + { 140 + /* Register hook to configure CTRLR0 */ 141 + dwsmmio->dws.update_cr0 = dw_spi_update_cr0; 142 + 143 + dw_spi_dma_setup_generic(&dwsmmio->dws); 144 + 145 + return 0; 146 + } 147 + 148 + static int dw_spi_dwc_ssi_init(struct platform_device *pdev, 149 + struct dw_spi_mmio *dwsmmio) 150 + { 151 + /* Register hook to configure CTRLR0 */ 152 + dwsmmio->dws.update_cr0 = dw_spi_update_cr0_v1_01a; 153 + 154 + dw_spi_dma_setup_generic(&dwsmmio->dws); 155 + 156 + return 0; 157 + } 158 + 159 + static u32 dw_spi_update_cr0_keembay(struct spi_controller *master, 160 + struct spi_device *spi, 161 + struct spi_transfer *transfer) 162 + { 163 + u32 cr0 = dw_spi_update_cr0_v1_01a(master, spi, transfer); 164 + 165 + return cr0 | KEEMBAY_CTRLR0_SSIC_IS_MST; 166 + } 167 + 168 + static int dw_spi_keembay_init(struct platform_device *pdev, 169 + struct dw_spi_mmio *dwsmmio) 170 + { 171 + /* Register hook to configure CTRLR0 */ 172 + dwsmmio->dws.update_cr0 = dw_spi_update_cr0_keembay; 173 + 142 174 return 0; 143 175 } 144 176 ··· 190 136 int (*init_func)(struct platform_device *pdev, 191 137 struct dw_spi_mmio *dwsmmio); 192 138 struct dw_spi_mmio *dwsmmio; 139 + struct resource *mem; 193 140 struct dw_spi *dws; 194 141 int ret; 195 142 int num_cs; ··· 203 148 dws = &dwsmmio->dws; 204 149 205 150 /* Get basic io resource and map it */ 206 - dws->regs = devm_platform_ioremap_resource(pdev, 0); 207 - if (IS_ERR(dws->regs)) { 208 - dev_err(&pdev->dev, "SPI region map failed\n"); 151 + dws->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &mem); 152 + if (IS_ERR(dws->regs)) 209 153 return PTR_ERR(dws->regs); 210 - } 154 + 155 + dws->paddr = mem->start; 211 156 212 157 dws->irq = platform_get_irq(pdev, 0); 213 158 if (dws->irq < 0) ··· 229 174 ret = clk_prepare_enable(dwsmmio->pclk); 230 175 if (ret) 231 176 goto out_clk; 177 + 178 + /* find an optional reset controller */ 179 + dwsmmio->rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, "spi"); 180 + if (IS_ERR(dwsmmio->rstc)) { 181 + ret = PTR_ERR(dwsmmio->rstc); 182 + goto out_clk; 183 + } 184 + reset_control_deassert(dwsmmio->rstc); 232 185 233 186 dws->bus_num = pdev->id; 234 187 ··· 271 208 clk_disable_unprepare(dwsmmio->pclk); 272 209 out_clk: 273 210 clk_disable_unprepare(dwsmmio->clk); 211 + reset_control_assert(dwsmmio->rstc); 212 + 274 213 return ret; 275 214 } 276 215 ··· 284 219 pm_runtime_disable(&pdev->dev); 285 220 clk_disable_unprepare(dwsmmio->pclk); 286 221 clk_disable_unprepare(dwsmmio->clk); 222 + reset_control_assert(dwsmmio->rstc); 287 223 288 224 return 0; 289 225 } 290 226 291 227 static const struct of_device_id dw_spi_mmio_of_match[] = { 292 - { .compatible = "snps,dw-apb-ssi", }, 228 + { .compatible = "snps,dw-apb-ssi", .data = dw_spi_dw_apb_init}, 293 229 { .compatible = "mscc,ocelot-spi", .data = dw_spi_mscc_ocelot_init}, 294 230 { .compatible = "mscc,jaguar2-spi", .data = dw_spi_mscc_jaguar2_init}, 295 231 { .compatible = "amazon,alpine-dw-apb-ssi", .data = dw_spi_alpine_init}, 296 - { .compatible = "renesas,rzn1-spi", }, 232 + { .compatible = "renesas,rzn1-spi", .data = dw_spi_dw_apb_init}, 233 + { .compatible = "snps,dwc-ssi-1.01a", .data = dw_spi_dwc_ssi_init}, 234 + { .compatible = "intel,keembay-ssi", .data = dw_spi_keembay_init}, 297 235 { /* end of table */} 298 236 }; 299 237 MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match); 300 238 239 + #ifdef CONFIG_ACPI 301 240 static const struct acpi_device_id dw_spi_mmio_acpi_match[] = { 302 - {"HISI0173", 0}, 241 + {"HISI0173", (kernel_ulong_t)dw_spi_dw_apb_init}, 303 242 {}, 304 243 }; 305 244 MODULE_DEVICE_TABLE(acpi, dw_spi_mmio_acpi_match); 245 + #endif 306 246 307 247 static struct platform_driver dw_spi_mmio_driver = { 308 248 .probe = dw_spi_mmio_probe,
+47 -3
drivers/spi/spi-dw-pci.c
··· 5 5 * Copyright (c) 2009, 2014 Intel Corporation. 6 6 */ 7 7 8 - #include <linux/interrupt.h> 9 8 #include <linux/pci.h> 10 9 #include <linux/pm_runtime.h> 11 10 #include <linux/slab.h> ··· 15 16 16 17 #define DRIVER_NAME "dw_spi_pci" 17 18 19 + /* HW info for MRST Clk Control Unit, 32b reg per controller */ 20 + #define MRST_SPI_CLK_BASE 100000000 /* 100m */ 21 + #define MRST_CLK_SPI_REG 0xff11d86c 22 + #define CLK_SPI_BDIV_OFFSET 0 23 + #define CLK_SPI_BDIV_MASK 0x00000007 24 + #define CLK_SPI_CDIV_OFFSET 9 25 + #define CLK_SPI_CDIV_MASK 0x00000e00 26 + #define CLK_SPI_DISABLE_OFFSET 8 27 + 18 28 struct spi_pci_desc { 19 29 int (*setup)(struct dw_spi *); 20 30 u16 num_cs; ··· 31 23 u32 max_freq; 32 24 }; 33 25 26 + static int spi_mid_init(struct dw_spi *dws) 27 + { 28 + void __iomem *clk_reg; 29 + u32 clk_cdiv; 30 + 31 + clk_reg = ioremap(MRST_CLK_SPI_REG, 16); 32 + if (!clk_reg) 33 + return -ENOMEM; 34 + 35 + /* Get SPI controller operating freq info */ 36 + clk_cdiv = readl(clk_reg + dws->bus_num * sizeof(u32)); 37 + clk_cdiv &= CLK_SPI_CDIV_MASK; 38 + clk_cdiv >>= CLK_SPI_CDIV_OFFSET; 39 + dws->max_freq = MRST_SPI_CLK_BASE / (clk_cdiv + 1); 40 + 41 + iounmap(clk_reg); 42 + 43 + /* Register hook to configure CTRLR0 */ 44 + dws->update_cr0 = dw_spi_update_cr0; 45 + 46 + dw_spi_dma_setup_mfld(dws); 47 + 48 + return 0; 49 + } 50 + 51 + static int spi_generic_init(struct dw_spi *dws) 52 + { 53 + /* Register hook to configure CTRLR0 */ 54 + dws->update_cr0 = dw_spi_update_cr0; 55 + 56 + dw_spi_dma_setup_generic(dws); 57 + 58 + return 0; 59 + } 60 + 34 61 static struct spi_pci_desc spi_pci_mid_desc_1 = { 35 - .setup = dw_spi_mid_init, 62 + .setup = spi_mid_init, 36 63 .num_cs = 5, 37 64 .bus_num = 0, 38 65 }; 39 66 40 67 static struct spi_pci_desc spi_pci_mid_desc_2 = { 41 - .setup = dw_spi_mid_init, 68 + .setup = spi_mid_init, 42 69 .num_cs = 2, 43 70 .bus_num = 1, 44 71 }; 45 72 46 73 static struct spi_pci_desc spi_pci_ehl_desc = { 74 + .setup = spi_generic_init, 47 75 .num_cs = 2, 48 76 .bus_num = -1, 49 77 .max_freq = 100000000,
+93 -134
drivers/spi/spi-dw.c drivers/spi/spi-dw-core.c
··· 24 24 u8 tmode; /* TR/TO/RO/EEPROM */ 25 25 u8 type; /* SPI/SSP/MicroWire */ 26 26 27 - u8 poll_mode; /* 1 means use poll mode */ 28 - 29 27 u16 clk_div; /* baud rate divider */ 30 28 u32 speed_hz; /* baud rate */ 31 - void (*cs_control)(u32 command); 32 29 }; 33 30 34 31 #ifdef CONFIG_DEBUG_FS 35 - #define SPI_REGS_BUFSIZE 1024 36 - static ssize_t dw_spi_show_regs(struct file *file, char __user *user_buf, 37 - size_t count, loff_t *ppos) 38 - { 39 - struct dw_spi *dws = file->private_data; 40 - char *buf; 41 - u32 len = 0; 42 - ssize_t ret; 43 32 44 - buf = kzalloc(SPI_REGS_BUFSIZE, GFP_KERNEL); 45 - if (!buf) 46 - return 0; 47 - 48 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 49 - "%s registers:\n", dev_name(&dws->master->dev)); 50 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 51 - "=================================\n"); 52 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 53 - "CTRL0: \t\t0x%08x\n", dw_readl(dws, DW_SPI_CTRL0)); 54 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 55 - "CTRL1: \t\t0x%08x\n", dw_readl(dws, DW_SPI_CTRL1)); 56 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 57 - "SSIENR: \t0x%08x\n", dw_readl(dws, DW_SPI_SSIENR)); 58 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 59 - "SER: \t\t0x%08x\n", dw_readl(dws, DW_SPI_SER)); 60 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 61 - "BAUDR: \t\t0x%08x\n", dw_readl(dws, DW_SPI_BAUDR)); 62 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 63 - "TXFTLR: \t0x%08x\n", dw_readl(dws, DW_SPI_TXFLTR)); 64 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 65 - "RXFTLR: \t0x%08x\n", dw_readl(dws, DW_SPI_RXFLTR)); 66 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 67 - "TXFLR: \t\t0x%08x\n", dw_readl(dws, DW_SPI_TXFLR)); 68 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 69 - "RXFLR: \t\t0x%08x\n", dw_readl(dws, DW_SPI_RXFLR)); 70 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 71 - "SR: \t\t0x%08x\n", dw_readl(dws, DW_SPI_SR)); 72 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 73 - "IMR: \t\t0x%08x\n", dw_readl(dws, DW_SPI_IMR)); 74 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 75 - "ISR: \t\t0x%08x\n", dw_readl(dws, DW_SPI_ISR)); 76 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 77 - "DMACR: \t\t0x%08x\n", dw_readl(dws, DW_SPI_DMACR)); 78 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 79 - "DMATDLR: \t0x%08x\n", dw_readl(dws, DW_SPI_DMATDLR)); 80 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 81 - "DMARDLR: \t0x%08x\n", dw_readl(dws, DW_SPI_DMARDLR)); 82 - len += scnprintf(buf + len, SPI_REGS_BUFSIZE - len, 83 - "=================================\n"); 84 - 85 - ret = simple_read_from_buffer(user_buf, count, ppos, buf, len); 86 - kfree(buf); 87 - return ret; 33 + #define DW_SPI_DBGFS_REG(_name, _off) \ 34 + { \ 35 + .name = _name, \ 36 + .offset = _off, \ 88 37 } 89 38 90 - static const struct file_operations dw_spi_regs_ops = { 91 - .owner = THIS_MODULE, 92 - .open = simple_open, 93 - .read = dw_spi_show_regs, 94 - .llseek = default_llseek, 39 + static const struct debugfs_reg32 dw_spi_dbgfs_regs[] = { 40 + DW_SPI_DBGFS_REG("CTRLR0", DW_SPI_CTRLR0), 41 + DW_SPI_DBGFS_REG("CTRLR1", DW_SPI_CTRLR1), 42 + DW_SPI_DBGFS_REG("SSIENR", DW_SPI_SSIENR), 43 + DW_SPI_DBGFS_REG("SER", DW_SPI_SER), 44 + DW_SPI_DBGFS_REG("BAUDR", DW_SPI_BAUDR), 45 + DW_SPI_DBGFS_REG("TXFTLR", DW_SPI_TXFTLR), 46 + DW_SPI_DBGFS_REG("RXFTLR", DW_SPI_RXFTLR), 47 + DW_SPI_DBGFS_REG("TXFLR", DW_SPI_TXFLR), 48 + DW_SPI_DBGFS_REG("RXFLR", DW_SPI_RXFLR), 49 + DW_SPI_DBGFS_REG("SR", DW_SPI_SR), 50 + DW_SPI_DBGFS_REG("IMR", DW_SPI_IMR), 51 + DW_SPI_DBGFS_REG("ISR", DW_SPI_ISR), 52 + DW_SPI_DBGFS_REG("DMACR", DW_SPI_DMACR), 53 + DW_SPI_DBGFS_REG("DMATDLR", DW_SPI_DMATDLR), 54 + DW_SPI_DBGFS_REG("DMARDLR", DW_SPI_DMARDLR), 95 55 }; 96 56 97 57 static int dw_spi_debugfs_init(struct dw_spi *dws) ··· 63 103 if (!dws->debugfs) 64 104 return -ENOMEM; 65 105 66 - debugfs_create_file("registers", S_IFREG | S_IRUGO, 67 - dws->debugfs, (void *)dws, &dw_spi_regs_ops); 106 + dws->regset.regs = dw_spi_dbgfs_regs; 107 + dws->regset.nregs = ARRAY_SIZE(dw_spi_dbgfs_regs); 108 + dws->regset.base = dws->regs; 109 + debugfs_create_regset32("registers", 0400, dws->debugfs, &dws->regset); 110 + 68 111 return 0; 69 112 } 70 113 ··· 90 127 void dw_spi_set_cs(struct spi_device *spi, bool enable) 91 128 { 92 129 struct dw_spi *dws = spi_controller_get_devdata(spi->controller); 93 - struct chip_data *chip = spi_get_ctldata(spi); 130 + bool cs_high = !!(spi->mode & SPI_CS_HIGH); 94 131 95 - /* Chip select logic is inverted from spi_set_cs() */ 96 - if (chip && chip->cs_control) 97 - chip->cs_control(!enable); 98 - 99 - if (!enable) 132 + /* 133 + * DW SPI controller demands any native CS being set in order to 134 + * proceed with data transfer. So in order to activate the SPI 135 + * communications we must set a corresponding bit in the Slave 136 + * Enable register no matter whether the SPI core is configured to 137 + * support active-high or active-low CS level. 138 + */ 139 + if (cs_high == enable) 100 140 dw_writel(dws, DW_SPI_SER, BIT(spi->chip_select)); 101 141 else if (dws->cs_override) 102 142 dw_writel(dws, DW_SPI_SER, 0); ··· 231 265 return dws->transfer_handler(dws); 232 266 } 233 267 234 - /* Must be called inside pump_transfers() */ 235 - static int poll_transfer(struct dw_spi *dws) 268 + /* Configure CTRLR0 for DW_apb_ssi */ 269 + u32 dw_spi_update_cr0(struct spi_controller *master, struct spi_device *spi, 270 + struct spi_transfer *transfer) 236 271 { 237 - do { 238 - dw_writer(dws); 239 - dw_reader(dws); 240 - cpu_relax(); 241 - } while (dws->rx_end > dws->rx); 272 + struct chip_data *chip = spi_get_ctldata(spi); 273 + u32 cr0; 242 274 243 - return 0; 275 + /* Default SPI mode is SCPOL = 0, SCPH = 0 */ 276 + cr0 = (transfer->bits_per_word - 1) 277 + | (chip->type << SPI_FRF_OFFSET) 278 + | ((((spi->mode & SPI_CPOL) ? 1 : 0) << SPI_SCOL_OFFSET) | 279 + (((spi->mode & SPI_CPHA) ? 1 : 0) << SPI_SCPH_OFFSET) | 280 + (((spi->mode & SPI_LOOP) ? 1 : 0) << SPI_SRL_OFFSET)) 281 + | (chip->tmode << SPI_TMOD_OFFSET); 282 + 283 + return cr0; 244 284 } 285 + EXPORT_SYMBOL_GPL(dw_spi_update_cr0); 286 + 287 + /* Configure CTRLR0 for DWC_ssi */ 288 + u32 dw_spi_update_cr0_v1_01a(struct spi_controller *master, 289 + struct spi_device *spi, 290 + struct spi_transfer *transfer) 291 + { 292 + struct chip_data *chip = spi_get_ctldata(spi); 293 + u32 cr0; 294 + 295 + /* CTRLR0[ 4: 0] Data Frame Size */ 296 + cr0 = (transfer->bits_per_word - 1); 297 + 298 + /* CTRLR0[ 7: 6] Frame Format */ 299 + cr0 |= chip->type << DWC_SSI_CTRLR0_FRF_OFFSET; 300 + 301 + /* 302 + * SPI mode (SCPOL|SCPH) 303 + * CTRLR0[ 8] Serial Clock Phase 304 + * CTRLR0[ 9] Serial Clock Polarity 305 + */ 306 + cr0 |= ((spi->mode & SPI_CPOL) ? 1 : 0) << DWC_SSI_CTRLR0_SCPOL_OFFSET; 307 + cr0 |= ((spi->mode & SPI_CPHA) ? 1 : 0) << DWC_SSI_CTRLR0_SCPH_OFFSET; 308 + 309 + /* CTRLR0[11:10] Transfer Mode */ 310 + cr0 |= chip->tmode << DWC_SSI_CTRLR0_TMOD_OFFSET; 311 + 312 + /* CTRLR0[13] Shift Register Loop */ 313 + cr0 |= ((spi->mode & SPI_LOOP) ? 1 : 0) << DWC_SSI_CTRLR0_SRL_OFFSET; 314 + 315 + return cr0; 316 + } 317 + EXPORT_SYMBOL_GPL(dw_spi_update_cr0_v1_01a); 245 318 246 319 static int dw_spi_transfer_one(struct spi_controller *master, 247 320 struct spi_device *spi, struct spi_transfer *transfer) ··· 318 313 spi_set_clk(dws, chip->clk_div); 319 314 } 320 315 316 + transfer->effective_speed_hz = dws->max_freq / chip->clk_div; 321 317 dws->n_bytes = DIV_ROUND_UP(transfer->bits_per_word, BITS_PER_BYTE); 322 - dws->dma_width = DIV_ROUND_UP(transfer->bits_per_word, BITS_PER_BYTE); 323 318 324 - /* Default SPI mode is SCPOL = 0, SCPH = 0 */ 325 - cr0 = (transfer->bits_per_word - 1) 326 - | (chip->type << SPI_FRF_OFFSET) 327 - | ((((spi->mode & SPI_CPOL) ? 1 : 0) << SPI_SCOL_OFFSET) | 328 - (((spi->mode & SPI_CPHA) ? 1 : 0) << SPI_SCPH_OFFSET) | 329 - (((spi->mode & SPI_LOOP) ? 1 : 0) << SPI_SRL_OFFSET)) 330 - | (chip->tmode << SPI_TMOD_OFFSET); 331 - 332 - /* 333 - * Adjust transfer mode if necessary. Requires platform dependent 334 - * chipselect mechanism. 335 - */ 336 - if (chip->cs_control) { 337 - if (dws->rx && dws->tx) 338 - chip->tmode = SPI_TMOD_TR; 339 - else if (dws->rx) 340 - chip->tmode = SPI_TMOD_RO; 341 - else 342 - chip->tmode = SPI_TMOD_TO; 343 - 344 - cr0 &= ~SPI_TMOD_MASK; 345 - cr0 |= (chip->tmode << SPI_TMOD_OFFSET); 346 - } 347 - 348 - dw_writel(dws, DW_SPI_CTRL0, cr0); 319 + cr0 = dws->update_cr0(master, spi, transfer); 320 + dw_writel(dws, DW_SPI_CTRLR0, cr0); 349 321 350 322 /* Check if current transfer is a DMA transaction */ 351 323 if (master->can_dma && master->can_dma(master, spi, transfer)) ··· 341 359 spi_enable_chip(dws, 1); 342 360 return ret; 343 361 } 344 - } else if (!chip->poll_mode) { 362 + } else { 345 363 txlevel = min_t(u16, dws->fifo_len / 2, dws->len / dws->n_bytes); 346 - dw_writel(dws, DW_SPI_TXFLTR, txlevel); 364 + dw_writel(dws, DW_SPI_TXFTLR, txlevel); 347 365 348 366 /* Set the interrupt mask */ 349 367 imask |= SPI_INT_TXEI | SPI_INT_TXOI | ··· 355 373 356 374 spi_enable_chip(dws, 1); 357 375 358 - if (dws->dma_mapped) { 359 - ret = dws->dma_ops->dma_transfer(dws, transfer); 360 - if (ret < 0) 361 - return ret; 362 - } 363 - 364 - if (chip->poll_mode) 365 - return poll_transfer(dws); 376 + if (dws->dma_mapped) 377 + return dws->dma_ops->dma_transfer(dws, transfer); 366 378 367 379 return 1; 368 380 } ··· 375 399 /* This may be called twice for each spi dev */ 376 400 static int dw_spi_setup(struct spi_device *spi) 377 401 { 378 - struct dw_spi_chip *chip_info = NULL; 379 402 struct chip_data *chip; 380 403 381 404 /* Only alloc on first setup */ ··· 384 409 if (!chip) 385 410 return -ENOMEM; 386 411 spi_set_ctldata(spi, chip); 387 - } 388 - 389 - /* 390 - * Protocol drivers may change the chip settings, so... 391 - * if chip_info exists, use it 392 - */ 393 - chip_info = spi->controller_data; 394 - 395 - /* chip_info doesn't always exist */ 396 - if (chip_info) { 397 - if (chip_info->cs_control) 398 - chip->cs_control = chip_info->cs_control; 399 - 400 - chip->poll_mode = chip_info->poll_mode; 401 - chip->type = chip_info->type; 402 412 } 403 413 404 414 chip->tmode = SPI_TMOD_TR; ··· 412 452 u32 fifo; 413 453 414 454 for (fifo = 1; fifo < 256; fifo++) { 415 - dw_writel(dws, DW_SPI_TXFLTR, fifo); 416 - if (fifo != dw_readl(dws, DW_SPI_TXFLTR)) 455 + dw_writel(dws, DW_SPI_TXFTLR, fifo); 456 + if (fifo != dw_readl(dws, DW_SPI_TXFTLR)) 417 457 break; 418 458 } 419 - dw_writel(dws, DW_SPI_TXFLTR, 0); 459 + dw_writel(dws, DW_SPI_TXFTLR, 0); 420 460 421 461 dws->fifo_len = (fifo == 1) ? 0 : fifo; 422 462 dev_dbg(dev, "Detected FIFO size: %u bytes\n", dws->fifo_len); ··· 441 481 442 482 dws->master = master; 443 483 dws->type = SSI_MOTO_SPI; 444 - dws->dma_inited = 0; 445 484 dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR); 446 485 spin_lock_init(&dws->buf_lock); 447 486 ··· 476 517 spi_hw_init(dev, dws); 477 518 478 519 if (dws->dma_ops && dws->dma_ops->dma_init) { 479 - ret = dws->dma_ops->dma_init(dws); 520 + ret = dws->dma_ops->dma_init(dev, dws); 480 521 if (ret) { 481 522 dev_warn(dev, "DMA init failed\n"); 482 - dws->dma_inited = 0; 483 523 } else { 484 524 master->can_dma = dws->dma_ops->can_dma; 525 + master->flags |= SPI_CONTROLLER_MUST_TX; 485 526 } 486 527 } 487 528
+41 -25
drivers/spi/spi-dw.h
··· 2 2 #ifndef DW_SPI_HEADER_H 3 3 #define DW_SPI_HEADER_H 4 4 5 + #include <linux/completion.h> 6 + #include <linux/debugfs.h> 7 + #include <linux/irqreturn.h> 5 8 #include <linux/io.h> 6 9 #include <linux/scatterlist.h> 7 10 8 11 /* Register offsets */ 9 - #define DW_SPI_CTRL0 0x00 10 - #define DW_SPI_CTRL1 0x04 12 + #define DW_SPI_CTRLR0 0x00 13 + #define DW_SPI_CTRLR1 0x04 11 14 #define DW_SPI_SSIENR 0x08 12 15 #define DW_SPI_MWCR 0x0c 13 16 #define DW_SPI_SER 0x10 14 17 #define DW_SPI_BAUDR 0x14 15 - #define DW_SPI_TXFLTR 0x18 16 - #define DW_SPI_RXFLTR 0x1c 18 + #define DW_SPI_TXFTLR 0x18 19 + #define DW_SPI_RXFTLR 0x1c 17 20 #define DW_SPI_TXFLR 0x20 18 21 #define DW_SPI_RXFLR 0x24 19 22 #define DW_SPI_SR 0x28 ··· 60 57 #define SPI_SRL_OFFSET 11 61 58 #define SPI_CFS_OFFSET 12 62 59 60 + /* Bit fields in CTRLR0 based on DWC_ssi_databook.pdf v1.01a */ 61 + #define DWC_SSI_CTRLR0_SRL_OFFSET 13 62 + #define DWC_SSI_CTRLR0_TMOD_OFFSET 10 63 + #define DWC_SSI_CTRLR0_TMOD_MASK GENMASK(11, 10) 64 + #define DWC_SSI_CTRLR0_SCPOL_OFFSET 9 65 + #define DWC_SSI_CTRLR0_SCPH_OFFSET 8 66 + #define DWC_SSI_CTRLR0_FRF_OFFSET 6 67 + #define DWC_SSI_CTRLR0_DFS_OFFSET 0 68 + 63 69 /* Bit fields in SR, 7 bits */ 64 70 #define SR_MASK 0x7f /* cover 7 bits */ 65 71 #define SR_BUSY (1 << 0) ··· 102 90 103 91 struct dw_spi; 104 92 struct dw_spi_dma_ops { 105 - int (*dma_init)(struct dw_spi *dws); 93 + int (*dma_init)(struct device *dev, struct dw_spi *dws); 106 94 void (*dma_exit)(struct dw_spi *dws); 107 95 int (*dma_setup)(struct dw_spi *dws, struct spi_transfer *xfer); 108 96 bool (*can_dma)(struct spi_controller *master, struct spi_device *spi, ··· 126 114 u16 bus_num; 127 115 u16 num_cs; /* supported slave numbers */ 128 116 void (*set_cs)(struct spi_device *spi, bool enable); 117 + u32 (*update_cr0)(struct spi_controller *master, struct spi_device *spi, 118 + struct spi_transfer *transfer); 129 119 130 120 /* Current message transfer state info */ 131 121 size_t len; ··· 138 124 void *rx_end; 139 125 int dma_mapped; 140 126 u8 n_bytes; /* current is a 1/2 bytes op */ 141 - u32 dma_width; 142 127 irqreturn_t (*transfer_handler)(struct dw_spi *dws); 143 128 u32 current_freq; /* frequency in hz */ 144 129 145 130 /* DMA info */ 146 - int dma_inited; 147 131 struct dma_chan *txchan; 132 + u32 txburst; 148 133 struct dma_chan *rxchan; 134 + u32 rxburst; 149 135 unsigned long dma_chan_busy; 150 136 dma_addr_t dma_addr; /* phy address of the Data register */ 151 137 const struct dw_spi_dma_ops *dma_ops; 152 - void *dma_tx; 153 - void *dma_rx; 138 + struct completion dma_completion; 154 139 155 - /* Bus interface info */ 156 - void *priv; 157 140 #ifdef CONFIG_DEBUG_FS 158 141 struct dentry *debugfs; 142 + struct debugfs_regset32 regset; 159 143 #endif 160 144 }; 161 145 ··· 247 235 spi_set_clk(dws, 0); 248 236 } 249 237 250 - /* 251 - * Each SPI slave device to work with dw_api controller should 252 - * has such a structure claiming its working mode (poll or PIO/DMA), 253 - * which can be save in the "controller_data" member of the 254 - * struct spi_device. 255 - */ 256 - struct dw_spi_chip { 257 - u8 poll_mode; /* 1 for controller polling mode */ 258 - u8 type; /* SPI/SSP/MicroWire */ 259 - void (*cs_control)(u32 command); 260 - }; 261 - 262 238 extern void dw_spi_set_cs(struct spi_device *spi, bool enable); 263 239 extern int dw_spi_add_host(struct device *dev, struct dw_spi *dws); 264 240 extern void dw_spi_remove_host(struct dw_spi *dws); 265 241 extern int dw_spi_suspend_host(struct dw_spi *dws); 266 242 extern int dw_spi_resume_host(struct dw_spi *dws); 243 + extern u32 dw_spi_update_cr0(struct spi_controller *master, 244 + struct spi_device *spi, 245 + struct spi_transfer *transfer); 246 + extern u32 dw_spi_update_cr0_v1_01a(struct spi_controller *master, 247 + struct spi_device *spi, 248 + struct spi_transfer *transfer); 267 249 268 - /* platform related setup */ 269 - extern int dw_spi_mid_init(struct dw_spi *dws); /* Intel MID platforms */ 250 + #ifdef CONFIG_SPI_DW_DMA 251 + 252 + extern void dw_spi_dma_setup_mfld(struct dw_spi *dws); 253 + extern void dw_spi_dma_setup_generic(struct dw_spi *dws); 254 + 255 + #else 256 + 257 + static inline void dw_spi_dma_setup_mfld(struct dw_spi *dws) {} 258 + static inline void dw_spi_dma_setup_generic(struct dw_spi *dws) {} 259 + 260 + #endif /* !CONFIG_SPI_DW_DMA */ 261 + 270 262 #endif /* DW_SPI_HEADER_H */
+45 -2
drivers/spi/spi-fsl-dspi.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0+ 2 2 // 3 3 // Copyright 2013 Freescale Semiconductor, Inc. 4 + // Copyright 2020 NXP 4 5 // 5 6 // Freescale DSPI driver 6 7 // This file contains a driver for the Freescale DSPI ··· 27 26 #define SPI_MCR_CLR_TXF BIT(11) 28 27 #define SPI_MCR_CLR_RXF BIT(10) 29 28 #define SPI_MCR_XSPI BIT(3) 29 + #define SPI_MCR_DIS_TXF BIT(13) 30 + #define SPI_MCR_DIS_RXF BIT(12) 31 + #define SPI_MCR_HALT BIT(0) 30 32 31 33 #define SPI_TCR 0x08 32 34 #define SPI_TCR_GET_TCNT(x) (((x) & GENMASK(31, 16)) >> 16) ··· 250 246 251 247 static void dspi_native_host_to_dev(struct fsl_dspi *dspi, u32 *txdata) 252 248 { 253 - memcpy(txdata, dspi->tx, dspi->oper_word_size); 249 + switch (dspi->oper_word_size) { 250 + case 1: 251 + *txdata = *(u8 *)dspi->tx; 252 + break; 253 + case 2: 254 + *txdata = *(u16 *)dspi->tx; 255 + break; 256 + case 4: 257 + *txdata = *(u32 *)dspi->tx; 258 + break; 259 + } 254 260 dspi->tx += dspi->oper_word_size; 255 261 } 256 262 257 263 static void dspi_native_dev_to_host(struct fsl_dspi *dspi, u32 rxdata) 258 264 { 259 - memcpy(dspi->rx, &rxdata, dspi->oper_word_size); 265 + switch (dspi->oper_word_size) { 266 + case 1: 267 + *(u8 *)dspi->rx = rxdata; 268 + break; 269 + case 2: 270 + *(u16 *)dspi->rx = rxdata; 271 + break; 272 + case 4: 273 + *(u32 *)dspi->rx = rxdata; 274 + break; 275 + } 260 276 dspi->rx += dspi->oper_word_size; 261 277 } 262 278 ··· 1441 1417 return 0; 1442 1418 } 1443 1419 1420 + static void dspi_shutdown(struct platform_device *pdev) 1421 + { 1422 + struct spi_controller *ctlr = platform_get_drvdata(pdev); 1423 + struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); 1424 + 1425 + /* Disable RX and TX */ 1426 + regmap_update_bits(dspi->regmap, SPI_MCR, 1427 + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF, 1428 + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF); 1429 + 1430 + /* Stop Running */ 1431 + regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_HALT, SPI_MCR_HALT); 1432 + 1433 + dspi_release_dma(dspi); 1434 + clk_disable_unprepare(dspi->clk); 1435 + spi_unregister_controller(dspi->ctlr); 1436 + } 1437 + 1444 1438 static struct platform_driver fsl_dspi_driver = { 1445 1439 .driver.name = DRIVER_NAME, 1446 1440 .driver.of_match_table = fsl_dspi_dt_ids, ··· 1466 1424 .driver.pm = &dspi_pm, 1467 1425 .probe = dspi_probe, 1468 1426 .remove = dspi_remove, 1427 + .shutdown = dspi_shutdown, 1469 1428 }; 1470 1429 module_platform_driver(fsl_dspi_driver); 1471 1430
+11 -10
drivers/spi/spi-fsl-lpspi.c
··· 186 186 187 187 bytes_per_word = fsl_lpspi_bytes_per_word(transfer->bits_per_word); 188 188 189 - switch (bytes_per_word) 190 - { 191 - case 1: 192 - case 2: 193 - case 4: 194 - break; 195 - default: 196 - return false; 189 + switch (bytes_per_word) { 190 + case 1: 191 + case 2: 192 + case 4: 193 + break; 194 + default: 195 + return false; 197 196 } 198 197 199 198 return true; ··· 940 941 ret = pm_runtime_get_sync(fsl_lpspi->dev); 941 942 if (ret < 0) { 942 943 dev_err(fsl_lpspi->dev, "failed to enable clock\n"); 943 - goto out_controller_put; 944 + goto out_pm_get; 944 945 } 945 946 946 947 temp = readl(fsl_lpspi->base + IMX7ULP_PARAM); ··· 949 950 950 951 ret = fsl_lpspi_dma_init(&pdev->dev, fsl_lpspi, controller); 951 952 if (ret == -EPROBE_DEFER) 952 - goto out_controller_put; 953 + goto out_pm_get; 953 954 954 955 if (ret < 0) 955 956 dev_err(&pdev->dev, "dma setup error %d, use pio\n", ret); 956 957 957 958 return 0; 958 959 960 + out_pm_get: 961 + pm_runtime_put_noidle(fsl_lpspi->dev); 959 962 out_controller_put: 960 963 spi_controller_put(controller); 961 964
+6 -5
drivers/spi/spi-fsl-qspi.c
··· 876 876 877 877 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, 878 878 "QuadSPI-memory"); 879 - q->ahb_addr = devm_ioremap_resource(dev, res); 880 - if (IS_ERR(q->ahb_addr)) { 881 - ret = PTR_ERR(q->ahb_addr); 879 + q->memmap_phy = res->start; 880 + /* Since there are 4 cs, map size required is 4 times ahb_buf_size */ 881 + q->ahb_addr = devm_ioremap(dev, q->memmap_phy, 882 + (q->devtype_data->ahb_buf_size * 4)); 883 + if (!q->ahb_addr) { 884 + ret = -ENOMEM; 882 885 goto err_put_ctrl; 883 886 } 884 - 885 - q->memmap_phy = res->start; 886 887 887 888 /* find the clocks */ 888 889 q->clk_en = devm_clk_get(dev, "qspi_en");
+1 -1
drivers/spi/spi-fsl-spi.c
··· 588 588 pdata->cs_control = fsl_spi_grlib_cs_control; 589 589 } 590 590 591 - static struct spi_master * fsl_spi_probe(struct device *dev, 591 + static struct spi_master *fsl_spi_probe(struct device *dev, 592 592 struct resource *mem, unsigned int irq) 593 593 { 594 594 struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
+25 -1
drivers/spi/spi-hisi-sfc-v3xx.c
··· 17 17 18 18 #define HISI_SFC_V3XX_VERSION (0x1f8) 19 19 20 + #define HISI_SFC_V3XX_INT_STAT (0x120) 21 + #define HISI_SFC_V3XX_INT_STAT_PP_ERR BIT(2) 22 + #define HISI_SFC_V3XX_INT_STAT_ADDR_IACCES BIT(5) 23 + #define HISI_SFC_V3XX_INT_CLR (0x12c) 24 + #define HISI_SFC_V3XX_INT_CLR_CLEAR (0xff) 20 25 #define HISI_SFC_V3XX_CMD_CFG (0x300) 21 26 #define HISI_SFC_V3XX_CMD_CFG_DUAL_IN_DUAL_OUT (1 << 17) 22 27 #define HISI_SFC_V3XX_CMD_CFG_DUAL_IO (2 << 17) ··· 168 163 u8 chip_select) 169 164 { 170 165 int ret, len = op->data.nbytes; 171 - u32 config = 0; 166 + u32 int_stat, config = 0; 172 167 173 168 if (op->addr.nbytes) 174 169 config |= HISI_SFC_V3XX_CMD_CFG_ADDR_EN_MSK; ··· 232 227 ret = hisi_sfc_v3xx_wait_cmd_idle(host); 233 228 if (ret) 234 229 return ret; 230 + 231 + /* 232 + * The interrupt status register indicates whether an error occurs 233 + * after per operation. Check it, and clear the interrupts for 234 + * next time judgement. 235 + */ 236 + int_stat = readl(host->regbase + HISI_SFC_V3XX_INT_STAT); 237 + writel(HISI_SFC_V3XX_INT_CLR_CLEAR, 238 + host->regbase + HISI_SFC_V3XX_INT_CLR); 239 + 240 + if (int_stat & HISI_SFC_V3XX_INT_STAT_ADDR_IACCES) { 241 + dev_err(host->dev, "fail to access protected address\n"); 242 + return -EIO; 243 + } 244 + 245 + if (int_stat & HISI_SFC_V3XX_INT_STAT_PP_ERR) { 246 + dev_err(host->dev, "page program operation failed\n"); 247 + return -EIO; 248 + } 235 249 236 250 if (op->data.dir == SPI_MEM_DATA_IN) 237 251 hisi_sfc_v3xx_read_databuf(host, op->data.buf.in, len);
+27 -4
drivers/spi/spi-imx.c
··· 71 71 void (*reset)(struct spi_imx_data *); 72 72 void (*setup_wml)(struct spi_imx_data *); 73 73 void (*disable)(struct spi_imx_data *); 74 + void (*disable_dma)(struct spi_imx_data *); 74 75 bool has_dmamode; 75 76 bool has_slavemode; 76 77 unsigned int fifo_size; ··· 484 483 reg = readl(spi_imx->base + MX51_ECSPI_CTRL); 485 484 reg |= MX51_ECSPI_CTRL_XCH; 486 485 writel(reg, spi_imx->base + MX51_ECSPI_CTRL); 486 + } 487 + 488 + static void mx51_disable_dma(struct spi_imx_data *spi_imx) 489 + { 490 + writel(0, spi_imx->base + MX51_ECSPI_DMA); 487 491 } 488 492 489 493 static void mx51_ecspi_disable(struct spi_imx_data *spi_imx) ··· 993 987 .rx_available = mx51_ecspi_rx_available, 994 988 .reset = mx51_ecspi_reset, 995 989 .setup_wml = mx51_setup_wml, 990 + .disable_dma = mx51_disable_dma, 996 991 .fifo_size = 64, 997 992 .has_dmamode = true, 998 993 .dynamic_burst = true, ··· 1008 1001 .prepare_transfer = mx51_ecspi_prepare_transfer, 1009 1002 .trigger = mx51_ecspi_trigger, 1010 1003 .rx_available = mx51_ecspi_rx_available, 1004 + .disable_dma = mx51_disable_dma, 1011 1005 .reset = mx51_ecspi_reset, 1012 1006 .fifo_size = 64, 1013 1007 .has_dmamode = true, ··· 1393 1385 DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 1394 1386 if (!desc_tx) { 1395 1387 dmaengine_terminate_all(master->dma_tx); 1388 + dmaengine_terminate_all(master->dma_rx); 1396 1389 return -EINVAL; 1397 1390 } 1398 1391 ··· 1507 1498 struct spi_transfer *transfer) 1508 1499 { 1509 1500 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); 1501 + int ret; 1510 1502 1511 1503 /* flush rxfifo before transfer */ 1512 1504 while (spi_imx->devtype_data->rx_available(spi_imx)) ··· 1516 1506 if (spi_imx->slave_mode) 1517 1507 return spi_imx_pio_transfer_slave(spi, transfer); 1518 1508 1519 - if (spi_imx->usedma) 1520 - return spi_imx_dma_transfer(spi_imx, transfer); 1521 - else 1522 - return spi_imx_pio_transfer(spi, transfer); 1509 + /* 1510 + * fallback PIO mode if dma setup error happen, for example sdma 1511 + * firmware may not be updated as ERR009165 required. 1512 + */ 1513 + if (spi_imx->usedma) { 1514 + ret = spi_imx_dma_transfer(spi_imx, transfer); 1515 + if (ret != -EINVAL) 1516 + return ret; 1517 + 1518 + spi_imx->devtype_data->disable_dma(spi_imx); 1519 + 1520 + spi_imx->usedma = false; 1521 + spi_imx->dynamic_burst = spi_imx->devtype_data->dynamic_burst; 1522 + dev_dbg(&spi->dev, "Fallback to PIO mode\n"); 1523 + } 1524 + 1525 + return spi_imx_pio_transfer(spi, transfer); 1523 1526 } 1524 1527 1525 1528 static int spi_imx_setup(struct spi_device *spi)
+6 -4
drivers/spi/spi-mem.c
··· 108 108 return 0; 109 109 110 110 case 2: 111 - if ((tx && (mode & (SPI_TX_DUAL | SPI_TX_QUAD))) || 112 - (!tx && (mode & (SPI_RX_DUAL | SPI_RX_QUAD)))) 111 + if ((tx && 112 + (mode & (SPI_TX_DUAL | SPI_TX_QUAD | SPI_TX_OCTAL))) || 113 + (!tx && 114 + (mode & (SPI_RX_DUAL | SPI_RX_QUAD | SPI_RX_OCTAL)))) 113 115 return 0; 114 116 115 117 break; 116 118 117 119 case 4: 118 - if ((tx && (mode & SPI_TX_QUAD)) || 119 - (!tx && (mode & SPI_RX_QUAD))) 120 + if ((tx && (mode & (SPI_TX_QUAD | SPI_TX_OCTAL))) || 121 + (!tx && (mode & (SPI_RX_QUAD | SPI_RX_OCTAL)))) 120 122 return 0; 121 123 122 124 break;
+1 -1
drivers/spi/spi-mtk-nor.c
··· 391 391 return mtk_nor_cmd_exec(sp, MTK_NOR_CMD_WRITE, 6 * BITS_PER_BYTE); 392 392 } 393 393 394 - int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) 394 + static int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op) 395 395 { 396 396 struct mtk_nor *sp = spi_controller_get_devdata(mem->spi->master); 397 397 int ret;
+16 -54
drivers/spi/spi-orion.c
··· 17 17 #include <linux/of.h> 18 18 #include <linux/of_address.h> 19 19 #include <linux/of_device.h> 20 - #include <linux/of_gpio.h> 21 20 #include <linux/clk.h> 22 21 #include <linux/sizes.h> 23 - #include <linux/gpio.h> 24 22 #include <asm/unaligned.h> 25 23 26 24 #define DRIVER_NAME "orion_spi" ··· 96 98 struct clk *clk; 97 99 struct clk *axi_clk; 98 100 const struct orion_spi_dev *devdata; 99 - int unused_hw_gpio; 100 101 101 102 struct orion_child_options child[ORION_NUM_CHIPSELECTS]; 102 103 }; ··· 322 325 static void orion_spi_set_cs(struct spi_device *spi, bool enable) 323 326 { 324 327 struct orion_spi *orion_spi; 325 - int cs; 326 328 327 329 orion_spi = spi_master_get_devdata(spi->master); 328 330 329 - if (gpio_is_valid(spi->cs_gpio)) 330 - cs = orion_spi->unused_hw_gpio; 331 - else 332 - cs = spi->chip_select; 333 - 331 + /* 332 + * If this line is using a GPIO to control chip select, this internal 333 + * .set_cs() function will still be called, so we clear any previous 334 + * chip select. The CS we activate will not have any elecrical effect, 335 + * as it is handled by a GPIO, but that doesn't matter. What we need 336 + * is to deassert the old chip select and assert some other chip select. 337 + */ 334 338 orion_spi_clrbits(orion_spi, ORION_SPI_IF_CTRL_REG, ORION_SPI_CS_MASK); 335 339 orion_spi_setbits(orion_spi, ORION_SPI_IF_CTRL_REG, 336 - ORION_SPI_CS(cs)); 340 + ORION_SPI_CS(spi->chip_select)); 337 341 338 - /* Chip select logic is inverted from spi_set_cs */ 342 + /* 343 + * Chip select logic is inverted from spi_set_cs(). For lines using a 344 + * GPIO to do chip select SPI_CS_HIGH is enforced and inversion happens 345 + * in the GPIO library, but we don't care about that, because in those 346 + * cases we are dealing with an unused native CS anyways so the polarity 347 + * doesn't matter. 348 + */ 339 349 if (!enable) 340 350 orion_spi_setbits(orion_spi, ORION_SPI_IF_CTRL_REG, 0x1); 341 351 else ··· 507 503 508 504 static int orion_spi_setup(struct spi_device *spi) 509 505 { 510 - if (gpio_is_valid(spi->cs_gpio)) { 511 - gpio_direction_output(spi->cs_gpio, !(spi->mode & SPI_CS_HIGH)); 512 - } 513 506 return orion_spi_setup_transfer(spi, NULL); 514 507 } 515 508 ··· 623 622 master->setup = orion_spi_setup; 624 623 master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16); 625 624 master->auto_runtime_pm = true; 625 + master->use_gpio_descriptors = true; 626 626 master->flags = SPI_MASTER_GPIO_SS; 627 627 628 628 platform_set_drvdata(pdev, master); 629 629 630 630 spi = spi_master_get_devdata(master); 631 631 spi->master = master; 632 - spi->unused_hw_gpio = -1; 633 632 634 633 of_id = of_match_device(orion_spi_of_match_table, &pdev->dev); 635 634 devdata = (of_id) ? of_id->data : &orion_spi_dev_data; ··· 684 683 for_each_available_child_of_node(pdev->dev.of_node, np) { 685 684 struct orion_direct_acc *dir_acc; 686 685 u32 cs; 687 - int cs_gpio; 688 686 689 687 /* Get chip-select number from the "reg" property */ 690 688 status = of_property_read_u32(np, "reg", &cs); ··· 692 692 "%pOF has no valid 'reg' property (%d)\n", 693 693 np, status); 694 694 continue; 695 - } 696 - 697 - /* 698 - * Initialize the CS GPIO: 699 - * - properly request the actual GPIO signal 700 - * - de-assert the logical signal so that all GPIO CS lines 701 - * are inactive when probing for slaves 702 - * - find an unused physical CS which will be driven for any 703 - * slave which uses a CS GPIO 704 - */ 705 - cs_gpio = of_get_named_gpio(pdev->dev.of_node, "cs-gpios", cs); 706 - if (cs_gpio > 0) { 707 - char *gpio_name; 708 - int cs_flags; 709 - 710 - if (spi->unused_hw_gpio == -1) { 711 - dev_info(&pdev->dev, 712 - "Selected unused HW CS#%d for any GPIO CSes\n", 713 - cs); 714 - spi->unused_hw_gpio = cs; 715 - } 716 - 717 - gpio_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, 718 - "%s-CS%d", dev_name(&pdev->dev), cs); 719 - if (!gpio_name) { 720 - status = -ENOMEM; 721 - goto out_rel_axi_clk; 722 - } 723 - 724 - cs_flags = of_property_read_bool(np, "spi-cs-high") ? 725 - GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH; 726 - status = devm_gpio_request_one(&pdev->dev, cs_gpio, 727 - cs_flags, gpio_name); 728 - if (status) { 729 - dev_err(&pdev->dev, 730 - "Can't request GPIO for CS %d\n", cs); 731 - goto out_rel_axi_clk; 732 - } 733 695 } 734 696 735 697 /*
+1
drivers/spi/spi-pxa2xx.c
··· 150 150 .tx_threshold_hi = 48, 151 151 .cs_sel_shift = 8, 152 152 .cs_sel_mask = 3 << 8, 153 + .cs_clk_stays_gated = true, 153 154 }, 154 155 { /* LPSS_CNL_SSP */ 155 156 .offset = 0x200,
+14 -5
drivers/spi/spi-rb4xx.c
··· 14 14 #include <linux/platform_device.h> 15 15 #include <linux/clk.h> 16 16 #include <linux/spi/spi.h> 17 + #include <linux/of.h> 17 18 18 19 #include <asm/mach-ath79/ar71xx_regs.h> 19 20 ··· 151 150 if (IS_ERR(ahb_clk)) 152 151 return PTR_ERR(ahb_clk); 153 152 153 + master->dev.of_node = pdev->dev.of_node; 154 154 master->bus_num = 0; 155 155 master->num_chipselect = 3; 156 156 master->mode_bits = SPI_TX_DUAL; ··· 159 157 master->flags = SPI_MASTER_MUST_TX; 160 158 master->transfer_one = rb4xx_transfer_one; 161 159 master->set_cs = rb4xx_set_cs; 160 + 161 + rbspi = spi_master_get_devdata(master); 162 + rbspi->base = spi_base; 163 + rbspi->clk = ahb_clk; 164 + platform_set_drvdata(pdev, rbspi); 162 165 163 166 err = devm_spi_register_master(&pdev->dev, master); 164 167 if (err) { ··· 174 167 err = clk_prepare_enable(ahb_clk); 175 168 if (err) 176 169 return err; 177 - 178 - rbspi = spi_master_get_devdata(master); 179 - rbspi->base = spi_base; 180 - rbspi->clk = ahb_clk; 181 - platform_set_drvdata(pdev, rbspi); 182 170 183 171 /* Enable SPI */ 184 172 rb4xx_write(rbspi, AR71XX_SPI_REG_FS, AR71XX_SPI_FS_GPIO); ··· 190 188 return 0; 191 189 } 192 190 191 + static const struct of_device_id rb4xx_spi_dt_match[] = { 192 + { .compatible = "mikrotik,rb4xx-spi" }, 193 + { }, 194 + }; 195 + MODULE_DEVICE_TABLE(of, rb4xx_spi_dt_match); 196 + 193 197 static struct platform_driver rb4xx_spi_drv = { 194 198 .probe = rb4xx_spi_probe, 195 199 .remove = rb4xx_spi_remove, 196 200 .driver = { 197 201 .name = "rb4xx-spi", 202 + .of_match_table = of_match_ptr(rb4xx_spi_dt_match), 198 203 }, 199 204 }; 200 205
+132 -93
drivers/spi/spi-rockchip.c
··· 183 183 u8 rsd; 184 184 185 185 bool cs_asserted[ROCKCHIP_SPI_MAX_CS_NUM]; 186 + 187 + bool slave_abort; 186 188 }; 187 189 188 190 static inline void spi_enable_chip(struct rockchip_spi *rs, bool enable) ··· 221 219 222 220 static void rockchip_spi_set_cs(struct spi_device *spi, bool enable) 223 221 { 224 - struct spi_master *master = spi->master; 225 - struct rockchip_spi *rs = spi_master_get_devdata(master); 222 + struct spi_controller *ctlr = spi->controller; 223 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 226 224 bool cs_asserted = !enable; 227 225 228 226 /* Return immediately for no-op */ ··· 246 244 rs->cs_asserted[spi->chip_select] = cs_asserted; 247 245 } 248 246 249 - static void rockchip_spi_handle_err(struct spi_master *master, 247 + static void rockchip_spi_handle_err(struct spi_controller *ctlr, 250 248 struct spi_message *msg) 251 249 { 252 - struct rockchip_spi *rs = spi_master_get_devdata(master); 250 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 253 251 254 252 /* stop running spi transfer 255 253 * this also flushes both rx and tx fifos ··· 260 258 writel_relaxed(0, rs->regs + ROCKCHIP_SPI_IMR); 261 259 262 260 if (atomic_read(&rs->state) & TXDMA) 263 - dmaengine_terminate_async(master->dma_tx); 261 + dmaengine_terminate_async(ctlr->dma_tx); 264 262 265 263 if (atomic_read(&rs->state) & RXDMA) 266 - dmaengine_terminate_async(master->dma_rx); 264 + dmaengine_terminate_async(ctlr->dma_rx); 267 265 } 268 266 269 267 static void rockchip_spi_pio_writer(struct rockchip_spi *rs) ··· 321 319 322 320 static irqreturn_t rockchip_spi_isr(int irq, void *dev_id) 323 321 { 324 - struct spi_master *master = dev_id; 325 - struct rockchip_spi *rs = spi_master_get_devdata(master); 322 + struct spi_controller *ctlr = dev_id; 323 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 326 324 327 325 if (rs->tx_left) 328 326 rockchip_spi_pio_writer(rs); ··· 331 329 if (!rs->rx_left) { 332 330 spi_enable_chip(rs, false); 333 331 writel_relaxed(0, rs->regs + ROCKCHIP_SPI_IMR); 334 - spi_finalize_current_transfer(master); 332 + spi_finalize_current_transfer(ctlr); 335 333 } 336 334 337 335 return IRQ_HANDLED; ··· 357 355 358 356 static void rockchip_spi_dma_rxcb(void *data) 359 357 { 360 - struct spi_master *master = data; 361 - struct rockchip_spi *rs = spi_master_get_devdata(master); 358 + struct spi_controller *ctlr = data; 359 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 362 360 int state = atomic_fetch_andnot(RXDMA, &rs->state); 363 361 364 - if (state & TXDMA) 362 + if (state & TXDMA && !rs->slave_abort) 365 363 return; 366 364 367 365 spi_enable_chip(rs, false); 368 - spi_finalize_current_transfer(master); 366 + spi_finalize_current_transfer(ctlr); 369 367 } 370 368 371 369 static void rockchip_spi_dma_txcb(void *data) 372 370 { 373 - struct spi_master *master = data; 374 - struct rockchip_spi *rs = spi_master_get_devdata(master); 371 + struct spi_controller *ctlr = data; 372 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 375 373 int state = atomic_fetch_andnot(TXDMA, &rs->state); 376 374 377 - if (state & RXDMA) 375 + if (state & RXDMA && !rs->slave_abort) 378 376 return; 379 377 380 378 /* Wait until the FIFO data completely. */ 381 379 wait_for_idle(rs); 382 380 383 381 spi_enable_chip(rs, false); 384 - spi_finalize_current_transfer(master); 382 + spi_finalize_current_transfer(ctlr); 385 383 } 386 384 387 385 static int rockchip_spi_prepare_dma(struct rockchip_spi *rs, 388 - struct spi_master *master, struct spi_transfer *xfer) 386 + struct spi_controller *ctlr, struct spi_transfer *xfer) 389 387 { 390 388 struct dma_async_tx_descriptor *rxdesc, *txdesc; 391 389 ··· 400 398 .src_maxburst = 1, 401 399 }; 402 400 403 - dmaengine_slave_config(master->dma_rx, &rxconf); 401 + dmaengine_slave_config(ctlr->dma_rx, &rxconf); 404 402 405 403 rxdesc = dmaengine_prep_slave_sg( 406 - master->dma_rx, 404 + ctlr->dma_rx, 407 405 xfer->rx_sg.sgl, xfer->rx_sg.nents, 408 406 DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT); 409 407 if (!rxdesc) 410 408 return -EINVAL; 411 409 412 410 rxdesc->callback = rockchip_spi_dma_rxcb; 413 - rxdesc->callback_param = master; 411 + rxdesc->callback_param = ctlr; 414 412 } 415 413 416 414 txdesc = NULL; ··· 422 420 .dst_maxburst = rs->fifo_len / 4, 423 421 }; 424 422 425 - dmaengine_slave_config(master->dma_tx, &txconf); 423 + dmaengine_slave_config(ctlr->dma_tx, &txconf); 426 424 427 425 txdesc = dmaengine_prep_slave_sg( 428 - master->dma_tx, 426 + ctlr->dma_tx, 429 427 xfer->tx_sg.sgl, xfer->tx_sg.nents, 430 428 DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); 431 429 if (!txdesc) { 432 430 if (rxdesc) 433 - dmaengine_terminate_sync(master->dma_rx); 431 + dmaengine_terminate_sync(ctlr->dma_rx); 434 432 return -EINVAL; 435 433 } 436 434 437 435 txdesc->callback = rockchip_spi_dma_txcb; 438 - txdesc->callback_param = master; 436 + txdesc->callback_param = ctlr; 439 437 } 440 438 441 439 /* rx must be started before tx due to spi instinct */ 442 440 if (rxdesc) { 443 441 atomic_or(RXDMA, &rs->state); 444 442 dmaengine_submit(rxdesc); 445 - dma_async_issue_pending(master->dma_rx); 443 + dma_async_issue_pending(ctlr->dma_rx); 446 444 } 447 445 448 446 spi_enable_chip(rs, true); ··· 450 448 if (txdesc) { 451 449 atomic_or(TXDMA, &rs->state); 452 450 dmaengine_submit(txdesc); 453 - dma_async_issue_pending(master->dma_tx); 451 + dma_async_issue_pending(ctlr->dma_tx); 454 452 } 455 453 456 454 /* 1 means the transfer is in progress */ ··· 459 457 460 458 static void rockchip_spi_config(struct rockchip_spi *rs, 461 459 struct spi_device *spi, struct spi_transfer *xfer, 462 - bool use_dma) 460 + bool use_dma, bool slave_mode) 463 461 { 464 462 u32 cr0 = CR0_FRF_SPI << CR0_FRF_OFFSET 465 463 | CR0_BHT_8BIT << CR0_BHT_OFFSET ··· 467 465 | CR0_EM_BIG << CR0_EM_OFFSET; 468 466 u32 cr1; 469 467 u32 dmacr = 0; 468 + 469 + if (slave_mode) 470 + cr0 |= CR0_OPM_SLAVE << CR0_OPM_OFFSET; 471 + rs->slave_abort = false; 470 472 471 473 cr0 |= rs->rsd << CR0_RSD_OFFSET; 472 474 cr0 |= (spi->mode & 0x3U) << CR0_SCPH_OFFSET; ··· 499 493 break; 500 494 default: 501 495 /* we only whitelist 4, 8 and 16 bit words in 502 - * master->bits_per_word_mask, so this shouldn't 496 + * ctlr->bits_per_word_mask, so this shouldn't 503 497 * happen 504 498 */ 505 499 unreachable(); ··· 541 535 return ROCKCHIP_SPI_MAX_TRANLEN; 542 536 } 543 537 538 + static int rockchip_spi_slave_abort(struct spi_controller *ctlr) 539 + { 540 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 541 + 542 + rs->slave_abort = true; 543 + complete(&ctlr->xfer_completion); 544 + 545 + return 0; 546 + } 547 + 544 548 static int rockchip_spi_transfer_one( 545 - struct spi_master *master, 549 + struct spi_controller *ctlr, 546 550 struct spi_device *spi, 547 551 struct spi_transfer *xfer) 548 552 { 549 - struct rockchip_spi *rs = spi_master_get_devdata(master); 553 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 550 554 bool use_dma; 551 555 552 556 WARN_ON(readl_relaxed(rs->regs + ROCKCHIP_SPI_SSIENR) && ··· 574 558 575 559 rs->n_bytes = xfer->bits_per_word <= 8 ? 1 : 2; 576 560 577 - use_dma = master->can_dma ? master->can_dma(master, spi, xfer) : false; 561 + use_dma = ctlr->can_dma ? ctlr->can_dma(ctlr, spi, xfer) : false; 578 562 579 - rockchip_spi_config(rs, spi, xfer, use_dma); 563 + rockchip_spi_config(rs, spi, xfer, use_dma, ctlr->slave); 580 564 581 565 if (use_dma) 582 - return rockchip_spi_prepare_dma(rs, master, xfer); 566 + return rockchip_spi_prepare_dma(rs, ctlr, xfer); 583 567 584 568 return rockchip_spi_prepare_irq(rs, xfer); 585 569 } 586 570 587 - static bool rockchip_spi_can_dma(struct spi_master *master, 571 + static bool rockchip_spi_can_dma(struct spi_controller *ctlr, 588 572 struct spi_device *spi, 589 573 struct spi_transfer *xfer) 590 574 { 591 - struct rockchip_spi *rs = spi_master_get_devdata(master); 575 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 592 576 unsigned int bytes_per_word = xfer->bits_per_word <= 8 ? 1 : 2; 593 577 594 578 /* if the numbor of spi words to transfer is less than the fifo ··· 602 586 { 603 587 int ret; 604 588 struct rockchip_spi *rs; 605 - struct spi_master *master; 589 + struct spi_controller *ctlr; 606 590 struct resource *mem; 591 + struct device_node *np = pdev->dev.of_node; 607 592 u32 rsd_nsecs; 593 + bool slave_mode; 608 594 609 - master = spi_alloc_master(&pdev->dev, sizeof(struct rockchip_spi)); 610 - if (!master) 595 + slave_mode = of_property_read_bool(np, "spi-slave"); 596 + 597 + if (slave_mode) 598 + ctlr = spi_alloc_slave(&pdev->dev, 599 + sizeof(struct rockchip_spi)); 600 + else 601 + ctlr = spi_alloc_master(&pdev->dev, 602 + sizeof(struct rockchip_spi)); 603 + 604 + if (!ctlr) 611 605 return -ENOMEM; 612 606 613 - platform_set_drvdata(pdev, master); 607 + platform_set_drvdata(pdev, ctlr); 614 608 615 - rs = spi_master_get_devdata(master); 609 + rs = spi_controller_get_devdata(ctlr); 610 + ctlr->slave = slave_mode; 616 611 617 612 /* Get basic io resource and map it */ 618 613 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 619 614 rs->regs = devm_ioremap_resource(&pdev->dev, mem); 620 615 if (IS_ERR(rs->regs)) { 621 616 ret = PTR_ERR(rs->regs); 622 - goto err_put_master; 617 + goto err_put_ctlr; 623 618 } 624 619 625 620 rs->apb_pclk = devm_clk_get(&pdev->dev, "apb_pclk"); 626 621 if (IS_ERR(rs->apb_pclk)) { 627 622 dev_err(&pdev->dev, "Failed to get apb_pclk\n"); 628 623 ret = PTR_ERR(rs->apb_pclk); 629 - goto err_put_master; 624 + goto err_put_ctlr; 630 625 } 631 626 632 627 rs->spiclk = devm_clk_get(&pdev->dev, "spiclk"); 633 628 if (IS_ERR(rs->spiclk)) { 634 629 dev_err(&pdev->dev, "Failed to get spi_pclk\n"); 635 630 ret = PTR_ERR(rs->spiclk); 636 - goto err_put_master; 631 + goto err_put_ctlr; 637 632 } 638 633 639 634 ret = clk_prepare_enable(rs->apb_pclk); 640 635 if (ret < 0) { 641 636 dev_err(&pdev->dev, "Failed to enable apb_pclk\n"); 642 - goto err_put_master; 637 + goto err_put_ctlr; 643 638 } 644 639 645 640 ret = clk_prepare_enable(rs->spiclk); ··· 666 639 goto err_disable_spiclk; 667 640 668 641 ret = devm_request_threaded_irq(&pdev->dev, ret, rockchip_spi_isr, NULL, 669 - IRQF_ONESHOT, dev_name(&pdev->dev), master); 642 + IRQF_ONESHOT, dev_name(&pdev->dev), ctlr); 670 643 if (ret) 671 644 goto err_disable_spiclk; 672 645 ··· 700 673 pm_runtime_set_active(&pdev->dev); 701 674 pm_runtime_enable(&pdev->dev); 702 675 703 - master->auto_runtime_pm = true; 704 - master->bus_num = pdev->id; 705 - master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_LSB_FIRST; 706 - master->num_chipselect = ROCKCHIP_SPI_MAX_CS_NUM; 707 - master->dev.of_node = pdev->dev.of_node; 708 - master->bits_per_word_mask = SPI_BPW_MASK(16) | SPI_BPW_MASK(8) | SPI_BPW_MASK(4); 709 - master->min_speed_hz = rs->freq / BAUDR_SCKDV_MAX; 710 - master->max_speed_hz = min(rs->freq / BAUDR_SCKDV_MIN, MAX_SCLK_OUT); 676 + ctlr->auto_runtime_pm = true; 677 + ctlr->bus_num = pdev->id; 678 + ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_LSB_FIRST; 679 + if (slave_mode) { 680 + ctlr->mode_bits |= SPI_NO_CS; 681 + ctlr->slave_abort = rockchip_spi_slave_abort; 682 + } else { 683 + ctlr->flags = SPI_MASTER_GPIO_SS; 684 + ctlr->max_native_cs = ROCKCHIP_SPI_MAX_CS_NUM; 685 + /* 686 + * rk spi0 has two native cs, spi1..5 one cs only 687 + * if num-cs is missing in the dts, default to 1 688 + */ 689 + if (of_property_read_u16(np, "num-cs", &ctlr->num_chipselect)) 690 + ctlr->num_chipselect = 1; 691 + ctlr->use_gpio_descriptors = true; 692 + } 693 + ctlr->dev.of_node = pdev->dev.of_node; 694 + ctlr->bits_per_word_mask = SPI_BPW_MASK(16) | SPI_BPW_MASK(8) | SPI_BPW_MASK(4); 695 + ctlr->min_speed_hz = rs->freq / BAUDR_SCKDV_MAX; 696 + ctlr->max_speed_hz = min(rs->freq / BAUDR_SCKDV_MIN, MAX_SCLK_OUT); 711 697 712 - master->set_cs = rockchip_spi_set_cs; 713 - master->transfer_one = rockchip_spi_transfer_one; 714 - master->max_transfer_size = rockchip_spi_max_transfer_size; 715 - master->handle_err = rockchip_spi_handle_err; 716 - master->flags = SPI_MASTER_GPIO_SS; 698 + ctlr->set_cs = rockchip_spi_set_cs; 699 + ctlr->transfer_one = rockchip_spi_transfer_one; 700 + ctlr->max_transfer_size = rockchip_spi_max_transfer_size; 701 + ctlr->handle_err = rockchip_spi_handle_err; 717 702 718 - master->dma_tx = dma_request_chan(rs->dev, "tx"); 719 - if (IS_ERR(master->dma_tx)) { 703 + ctlr->dma_tx = dma_request_chan(rs->dev, "tx"); 704 + if (IS_ERR(ctlr->dma_tx)) { 720 705 /* Check tx to see if we need defer probing driver */ 721 - if (PTR_ERR(master->dma_tx) == -EPROBE_DEFER) { 706 + if (PTR_ERR(ctlr->dma_tx) == -EPROBE_DEFER) { 722 707 ret = -EPROBE_DEFER; 723 708 goto err_disable_pm_runtime; 724 709 } 725 710 dev_warn(rs->dev, "Failed to request TX DMA channel\n"); 726 - master->dma_tx = NULL; 711 + ctlr->dma_tx = NULL; 727 712 } 728 713 729 - master->dma_rx = dma_request_chan(rs->dev, "rx"); 730 - if (IS_ERR(master->dma_rx)) { 731 - if (PTR_ERR(master->dma_rx) == -EPROBE_DEFER) { 714 + ctlr->dma_rx = dma_request_chan(rs->dev, "rx"); 715 + if (IS_ERR(ctlr->dma_rx)) { 716 + if (PTR_ERR(ctlr->dma_rx) == -EPROBE_DEFER) { 732 717 ret = -EPROBE_DEFER; 733 718 goto err_free_dma_tx; 734 719 } 735 720 dev_warn(rs->dev, "Failed to request RX DMA channel\n"); 736 - master->dma_rx = NULL; 721 + ctlr->dma_rx = NULL; 737 722 } 738 723 739 - if (master->dma_tx && master->dma_rx) { 724 + if (ctlr->dma_tx && ctlr->dma_rx) { 740 725 rs->dma_addr_tx = mem->start + ROCKCHIP_SPI_TXDR; 741 726 rs->dma_addr_rx = mem->start + ROCKCHIP_SPI_RXDR; 742 - master->can_dma = rockchip_spi_can_dma; 727 + ctlr->can_dma = rockchip_spi_can_dma; 743 728 } 744 729 745 - ret = devm_spi_register_master(&pdev->dev, master); 730 + ret = devm_spi_register_controller(&pdev->dev, ctlr); 746 731 if (ret < 0) { 747 - dev_err(&pdev->dev, "Failed to register master\n"); 732 + dev_err(&pdev->dev, "Failed to register controller\n"); 748 733 goto err_free_dma_rx; 749 734 } 750 735 751 736 return 0; 752 737 753 738 err_free_dma_rx: 754 - if (master->dma_rx) 755 - dma_release_channel(master->dma_rx); 739 + if (ctlr->dma_rx) 740 + dma_release_channel(ctlr->dma_rx); 756 741 err_free_dma_tx: 757 - if (master->dma_tx) 758 - dma_release_channel(master->dma_tx); 742 + if (ctlr->dma_tx) 743 + dma_release_channel(ctlr->dma_tx); 759 744 err_disable_pm_runtime: 760 745 pm_runtime_disable(&pdev->dev); 761 746 err_disable_spiclk: 762 747 clk_disable_unprepare(rs->spiclk); 763 748 err_disable_apbclk: 764 749 clk_disable_unprepare(rs->apb_pclk); 765 - err_put_master: 766 - spi_master_put(master); 750 + err_put_ctlr: 751 + spi_controller_put(ctlr); 767 752 768 753 return ret; 769 754 } 770 755 771 756 static int rockchip_spi_remove(struct platform_device *pdev) 772 757 { 773 - struct spi_master *master = spi_master_get(platform_get_drvdata(pdev)); 774 - struct rockchip_spi *rs = spi_master_get_devdata(master); 758 + struct spi_controller *ctlr = spi_controller_get(platform_get_drvdata(pdev)); 759 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 775 760 776 761 pm_runtime_get_sync(&pdev->dev); 777 762 ··· 794 755 pm_runtime_disable(&pdev->dev); 795 756 pm_runtime_set_suspended(&pdev->dev); 796 757 797 - if (master->dma_tx) 798 - dma_release_channel(master->dma_tx); 799 - if (master->dma_rx) 800 - dma_release_channel(master->dma_rx); 758 + if (ctlr->dma_tx) 759 + dma_release_channel(ctlr->dma_tx); 760 + if (ctlr->dma_rx) 761 + dma_release_channel(ctlr->dma_rx); 801 762 802 - spi_master_put(master); 763 + spi_controller_put(ctlr); 803 764 804 765 return 0; 805 766 } ··· 808 769 static int rockchip_spi_suspend(struct device *dev) 809 770 { 810 771 int ret; 811 - struct spi_master *master = dev_get_drvdata(dev); 772 + struct spi_controller *ctlr = dev_get_drvdata(dev); 812 773 813 - ret = spi_master_suspend(master); 774 + ret = spi_controller_suspend(ctlr); 814 775 if (ret < 0) 815 776 return ret; 816 777 ··· 826 787 static int rockchip_spi_resume(struct device *dev) 827 788 { 828 789 int ret; 829 - struct spi_master *master = dev_get_drvdata(dev); 830 - struct rockchip_spi *rs = spi_master_get_devdata(master); 790 + struct spi_controller *ctlr = dev_get_drvdata(dev); 791 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 831 792 832 793 pinctrl_pm_select_default_state(dev); 833 794 ··· 835 796 if (ret < 0) 836 797 return ret; 837 798 838 - ret = spi_master_resume(master); 799 + ret = spi_controller_resume(ctlr); 839 800 if (ret < 0) { 840 801 clk_disable_unprepare(rs->spiclk); 841 802 clk_disable_unprepare(rs->apb_pclk); ··· 848 809 #ifdef CONFIG_PM 849 810 static int rockchip_spi_runtime_suspend(struct device *dev) 850 811 { 851 - struct spi_master *master = dev_get_drvdata(dev); 852 - struct rockchip_spi *rs = spi_master_get_devdata(master); 812 + struct spi_controller *ctlr = dev_get_drvdata(dev); 813 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 853 814 854 815 clk_disable_unprepare(rs->spiclk); 855 816 clk_disable_unprepare(rs->apb_pclk); ··· 860 821 static int rockchip_spi_runtime_resume(struct device *dev) 861 822 { 862 823 int ret; 863 - struct spi_master *master = dev_get_drvdata(dev); 864 - struct rockchip_spi *rs = spi_master_get_devdata(master); 824 + struct spi_controller *ctlr = dev_get_drvdata(dev); 825 + struct rockchip_spi *rs = spi_controller_get_devdata(ctlr); 865 826 866 827 ret = clk_prepare_enable(rs->apb_pclk); 867 828 if (ret < 0)
+1 -1
drivers/spi/spi-sh-msiof.c
··· 1398 1398 1399 1399 static SIMPLE_DEV_PM_OPS(sh_msiof_spi_pm_ops, sh_msiof_spi_suspend, 1400 1400 sh_msiof_spi_resume); 1401 - #define DEV_PM_OPS &sh_msiof_spi_pm_ops 1401 + #define DEV_PM_OPS (&sh_msiof_spi_pm_ops) 1402 1402 #else 1403 1403 #define DEV_PM_OPS NULL 1404 1404 #endif /* CONFIG_PM_SLEEP */
+1 -1
drivers/spi/spi-sprd-adi.c
··· 319 319 320 320 static void sprd_adi_set_wdt_rst_mode(struct sprd_adi *sadi) 321 321 { 322 - #ifdef CONFIG_SPRD_WATCHDOG 322 + #if IS_ENABLED(CONFIG_SPRD_WATCHDOG) 323 323 u32 val; 324 324 325 325 /* Set default watchdog reboot mode */
+58 -4
drivers/spi/spi-stm32-qspi.c
··· 16 16 #include <linux/of.h> 17 17 #include <linux/of_device.h> 18 18 #include <linux/pinctrl/consumer.h> 19 + #include <linux/pm_runtime.h> 19 20 #include <linux/platform_device.h> 20 21 #include <linux/reset.h> 21 22 #include <linux/sizes.h> ··· 88 87 #define STM32_BUSY_TIMEOUT_US 100000 89 88 #define STM32_ABT_TIMEOUT_US 100000 90 89 #define STM32_COMP_TIMEOUT_MS 1000 90 + #define STM32_AUTOSUSPEND_DELAY -1 91 91 92 92 struct stm32_qspi_flash { 93 93 struct stm32_qspi *qspi; ··· 433 431 struct stm32_qspi *qspi = spi_controller_get_devdata(mem->spi->master); 434 432 int ret; 435 433 434 + ret = pm_runtime_get_sync(qspi->dev); 435 + if (ret < 0) 436 + return ret; 437 + 436 438 mutex_lock(&qspi->lock); 437 439 ret = stm32_qspi_send(mem, op); 438 440 mutex_unlock(&qspi->lock); 441 + 442 + pm_runtime_mark_last_busy(qspi->dev); 443 + pm_runtime_put_autosuspend(qspi->dev); 439 444 440 445 return ret; 441 446 } ··· 453 444 struct stm32_qspi *qspi = spi_controller_get_devdata(ctrl); 454 445 struct stm32_qspi_flash *flash; 455 446 u32 presc; 447 + int ret; 456 448 457 449 if (ctrl->busy) 458 450 return -EBUSY; 459 451 460 452 if (!spi->max_speed_hz) 461 453 return -EINVAL; 454 + 455 + ret = pm_runtime_get_sync(qspi->dev); 456 + if (ret < 0) 457 + return ret; 462 458 463 459 presc = DIV_ROUND_UP(qspi->clk_rate, spi->max_speed_hz) - 1; 464 460 ··· 480 466 qspi->dcr_reg = DCR_FSIZE_MASK; 481 467 writel_relaxed(qspi->dcr_reg, qspi->io_base + QSPI_DCR); 482 468 mutex_unlock(&qspi->lock); 469 + 470 + pm_runtime_mark_last_busy(qspi->dev); 471 + pm_runtime_put_autosuspend(qspi->dev); 483 472 484 473 return 0; 485 474 } ··· 555 538 556 539 static void stm32_qspi_release(struct stm32_qspi *qspi) 557 540 { 541 + pm_runtime_get_sync(qspi->dev); 558 542 /* disable qspi */ 559 543 writel_relaxed(0, qspi->io_base + QSPI_CR); 560 544 stm32_qspi_dma_free(qspi); 561 545 mutex_destroy(&qspi->lock); 546 + pm_runtime_put_noidle(qspi->dev); 547 + pm_runtime_disable(qspi->dev); 548 + pm_runtime_set_suspended(qspi->dev); 549 + pm_runtime_dont_use_autosuspend(qspi->dev); 562 550 clk_disable_unprepare(qspi->clk); 563 551 } 564 552 ··· 665 643 ctrl->num_chipselect = STM32_QSPI_MAX_NORCHIP; 666 644 ctrl->dev.of_node = dev->of_node; 667 645 646 + pm_runtime_set_autosuspend_delay(dev, STM32_AUTOSUSPEND_DELAY); 647 + pm_runtime_use_autosuspend(dev); 648 + pm_runtime_set_active(dev); 649 + pm_runtime_enable(dev); 650 + pm_runtime_get_noresume(dev); 651 + 668 652 ret = devm_spi_register_master(dev, ctrl); 669 - if (!ret) 670 - return 0; 653 + if (ret) 654 + goto err_qspi_release; 655 + 656 + pm_runtime_mark_last_busy(dev); 657 + pm_runtime_put_autosuspend(dev); 658 + 659 + return 0; 671 660 672 661 err_qspi_release: 673 662 stm32_qspi_release(qspi); ··· 693 660 struct stm32_qspi *qspi = platform_get_drvdata(pdev); 694 661 695 662 stm32_qspi_release(qspi); 663 + 696 664 return 0; 697 665 } 698 666 699 - static int __maybe_unused stm32_qspi_suspend(struct device *dev) 667 + static int __maybe_unused stm32_qspi_runtime_suspend(struct device *dev) 700 668 { 701 669 struct stm32_qspi *qspi = dev_get_drvdata(dev); 702 670 703 671 clk_disable_unprepare(qspi->clk); 672 + 673 + return 0; 674 + } 675 + 676 + static int __maybe_unused stm32_qspi_runtime_resume(struct device *dev) 677 + { 678 + struct stm32_qspi *qspi = dev_get_drvdata(dev); 679 + 680 + return clk_prepare_enable(qspi->clk); 681 + } 682 + 683 + static int __maybe_unused stm32_qspi_suspend(struct device *dev) 684 + { 704 685 pinctrl_pm_select_sleep_state(dev); 705 686 706 687 return 0; ··· 730 683 writel_relaxed(qspi->cr_reg, qspi->io_base + QSPI_CR); 731 684 writel_relaxed(qspi->dcr_reg, qspi->io_base + QSPI_DCR); 732 685 686 + pm_runtime_mark_last_busy(qspi->dev); 687 + pm_runtime_put_autosuspend(qspi->dev); 688 + 733 689 return 0; 734 690 } 735 691 736 - static SIMPLE_DEV_PM_OPS(stm32_qspi_pm_ops, stm32_qspi_suspend, stm32_qspi_resume); 692 + static const struct dev_pm_ops stm32_qspi_pm_ops = { 693 + SET_RUNTIME_PM_OPS(stm32_qspi_runtime_suspend, 694 + stm32_qspi_runtime_resume, NULL) 695 + SET_SYSTEM_SLEEP_PM_OPS(stm32_qspi_suspend, stm32_qspi_resume) 696 + }; 737 697 738 698 static const struct of_device_id stm32_qspi_match[] = { 739 699 {.compatible = "st,stm32f469-qspi"},
+15 -4
drivers/spi/spi-stm32.c
··· 811 811 mask |= STM32F4_SPI_SR_TXE; 812 812 } 813 813 814 - if (!spi->cur_usedma && spi->cur_comm == SPI_FULL_DUPLEX) { 814 + if (!spi->cur_usedma && (spi->cur_comm == SPI_FULL_DUPLEX || 815 + spi->cur_comm == SPI_SIMPLEX_RX || 816 + spi->cur_comm == SPI_3WIRE_RX)) { 815 817 /* TXE flag is set and is handled when RXNE flag occurs */ 816 818 sr &= ~STM32F4_SPI_SR_TXE; 817 819 mask |= STM32F4_SPI_SR_RXNE | STM32F4_SPI_SR_OVR; ··· 852 850 stm32f4_spi_read_rx(spi); 853 851 if (spi->rx_len == 0) 854 852 end = true; 855 - else /* Load data for discontinuous mode */ 853 + else if (spi->tx_buf)/* Load data for discontinuous mode */ 856 854 stm32f4_spi_write_tx(spi); 857 855 } 858 856 ··· 1153 1151 /* Enable the interrupts relative to the current communication mode */ 1154 1152 if (spi->cur_comm == SPI_SIMPLEX_TX || spi->cur_comm == SPI_3WIRE_TX) { 1155 1153 cr2 |= STM32F4_SPI_CR2_TXEIE; 1156 - } else if (spi->cur_comm == SPI_FULL_DUPLEX) { 1154 + } else if (spi->cur_comm == SPI_FULL_DUPLEX || 1155 + spi->cur_comm == SPI_SIMPLEX_RX || 1156 + spi->cur_comm == SPI_3WIRE_RX) { 1157 1157 /* In transmit-only mode, the OVR flag is set in the SR register 1158 1158 * since the received data are never read. Therefore set OVR 1159 1159 * interrupt only when rx buffer is available. ··· 1466 1462 stm32_spi_set_bits(spi, STM32F4_SPI_CR1, 1467 1463 STM32F4_SPI_CR1_BIDIMODE | 1468 1464 STM32F4_SPI_CR1_BIDIOE); 1469 - } else if (comm_type == SPI_FULL_DUPLEX) { 1465 + } else if (comm_type == SPI_FULL_DUPLEX || 1466 + comm_type == SPI_SIMPLEX_RX) { 1470 1467 stm32_spi_clr_bits(spi, STM32F4_SPI_CR1, 1471 1468 STM32F4_SPI_CR1_BIDIMODE | 1469 + STM32F4_SPI_CR1_BIDIOE); 1470 + } else if (comm_type == SPI_3WIRE_RX) { 1471 + stm32_spi_set_bits(spi, STM32F4_SPI_CR1, 1472 + STM32F4_SPI_CR1_BIDIMODE); 1473 + stm32_spi_clr_bits(spi, STM32F4_SPI_CR1, 1472 1474 STM32F4_SPI_CR1_BIDIOE); 1473 1475 } else { 1474 1476 return -EINVAL; ··· 1916 1906 master->prepare_message = stm32_spi_prepare_msg; 1917 1907 master->transfer_one = stm32_spi_transfer_one; 1918 1908 master->unprepare_message = stm32_spi_unprepare_msg; 1909 + master->flags = SPI_MASTER_MUST_TX; 1919 1910 1920 1911 spi->dma_tx = dma_request_chan(spi->dev, "tx"); 1921 1912 if (IS_ERR(spi->dma_tx)) {
+1
drivers/spi/spi-sun6i.c
··· 470 470 471 471 master->max_speed_hz = 100 * 1000 * 1000; 472 472 master->min_speed_hz = 3 * 1000; 473 + master->use_gpio_descriptors = true; 473 474 master->set_cs = sun6i_spi_set_cs; 474 475 master->transfer_one = sun6i_spi_transfer_one; 475 476 master->num_chipselect = 4;
+1
drivers/spi/spi-tegra114.c
··· 1398 1398 ret = pm_runtime_get_sync(&pdev->dev); 1399 1399 if (ret < 0) { 1400 1400 dev_err(&pdev->dev, "pm runtime get failed, e = %d\n", ret); 1401 + pm_runtime_put_noidle(&pdev->dev); 1401 1402 goto exit_pm_disable; 1402 1403 } 1403 1404
+1
drivers/spi/spi-tegra20-sflash.c
··· 491 491 ret = pm_runtime_get_sync(&pdev->dev); 492 492 if (ret < 0) { 493 493 dev_err(&pdev->dev, "pm runtime get failed, e = %d\n", ret); 494 + pm_runtime_put_noidle(&pdev->dev); 494 495 goto exit_pm_disable; 495 496 } 496 497
+1
drivers/spi/spi-tegra20-slink.c
··· 1118 1118 ret = pm_runtime_get_sync(&pdev->dev); 1119 1119 if (ret < 0) { 1120 1120 dev_err(&pdev->dev, "pm runtime get failed, e = %d\n", ret); 1121 + pm_runtime_put_noidle(&pdev->dev); 1121 1122 goto exit_pm_disable; 1122 1123 } 1123 1124 tspi->def_command_reg = SLINK_M_S;
+7 -4
drivers/spi/spi-uniphier.c
··· 659 659 priv->master = master; 660 660 priv->is_save_param = false; 661 661 662 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 663 - priv->base = devm_ioremap_resource(&pdev->dev, res); 662 + priv->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); 664 663 if (IS_ERR(priv->base)) { 665 664 ret = PTR_ERR(priv->base); 666 665 goto out_master_put; ··· 715 716 716 717 master->dma_tx = dma_request_chan(&pdev->dev, "tx"); 717 718 if (IS_ERR_OR_NULL(master->dma_tx)) { 718 - if (PTR_ERR(master->dma_tx) == -EPROBE_DEFER) 719 + if (PTR_ERR(master->dma_tx) == -EPROBE_DEFER) { 720 + ret = -EPROBE_DEFER; 719 721 goto out_disable_clk; 722 + } 720 723 master->dma_tx = NULL; 721 724 dma_tx_burst = INT_MAX; 722 725 } else { ··· 733 732 734 733 master->dma_rx = dma_request_chan(&pdev->dev, "rx"); 735 734 if (IS_ERR_OR_NULL(master->dma_rx)) { 736 - if (PTR_ERR(master->dma_rx) == -EPROBE_DEFER) 735 + if (PTR_ERR(master->dma_rx) == -EPROBE_DEFER) { 736 + ret = -EPROBE_DEFER; 737 737 goto out_disable_clk; 738 + } 738 739 master->dma_rx = NULL; 739 740 dma_rx_burst = INT_MAX; 740 741 } else {
+6 -4
drivers/spi/spi.c
··· 1023 1023 void *tmp; 1024 1024 unsigned int max_tx, max_rx; 1025 1025 1026 - if (ctlr->flags & (SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX)) { 1026 + if ((ctlr->flags & (SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX)) 1027 + && !(msg->spi->mode & SPI_3WIRE)) { 1027 1028 max_tx = 0; 1028 1029 max_rx = 0; 1029 1030 ··· 1076 1075 { 1077 1076 struct spi_statistics *statm = &ctlr->statistics; 1078 1077 struct spi_statistics *stats = &msg->spi->statistics; 1079 - unsigned long long ms = 1; 1078 + unsigned long long ms; 1080 1079 1081 1080 if (spi_controller_is_slave(ctlr)) { 1082 1081 if (wait_for_completion_interruptible(&ctlr->xfer_completion)) { ··· 1160 1159 int spi_delay_exec(struct spi_delay *_delay, struct spi_transfer *xfer) 1161 1160 { 1162 1161 int delay; 1162 + 1163 + might_sleep(); 1163 1164 1164 1165 if (!_delay) 1165 1166 return -EINVAL; ··· 3858 3855 * is zero for success, else a negative errno status code. 3859 3856 * This call may only be used from a context that may sleep. 3860 3857 * 3861 - * Parameters to this routine are always copied using a small buffer; 3862 - * portable code should never use this for more than 32 bytes. 3858 + * Parameters to this routine are always copied using a small buffer. 3863 3859 * Performance-sensitive or bulk transfer code should instead use 3864 3860 * spi_{async,sync}() calls with dma-safe buffers. 3865 3861 *
+2 -1
drivers/spi/spidev.c
··· 62 62 #define SPI_MODE_MASK (SPI_CPHA | SPI_CPOL | SPI_CS_HIGH \ 63 63 | SPI_LSB_FIRST | SPI_3WIRE | SPI_LOOP \ 64 64 | SPI_NO_CS | SPI_READY | SPI_TX_DUAL \ 65 - | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD) 65 + | SPI_TX_QUAD | SPI_TX_OCTAL | SPI_RX_DUAL \ 66 + | SPI_RX_QUAD | SPI_RX_OCTAL) 66 67 67 68 struct spidev_data { 68 69 dev_t devt;
+3 -1
tools/spi/Makefile
··· 52 52 clean: 53 53 rm -f $(ALL_PROGRAMS) 54 54 rm -rf $(OUTPUT)include/ 55 - find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete 55 + find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete 56 + find $(if $(OUTPUT),$(OUTPUT),.) -name '\.*.o.d' -delete 57 + find $(if $(OUTPUT),$(OUTPUT),.) -name '\.*.o.cmd' -delete 56 58 57 59 install: $(ALL_PROGRAMS) 58 60 install -d -m 755 $(DESTDIR)$(bindir); \
+16 -5
tools/spi/spidev_test.c
··· 128 128 .bits_per_word = bits, 129 129 }; 130 130 131 - if (mode & SPI_TX_QUAD) 131 + if (mode & SPI_TX_OCTAL) 132 + tr.tx_nbits = 8; 133 + else if (mode & SPI_TX_QUAD) 132 134 tr.tx_nbits = 4; 133 135 else if (mode & SPI_TX_DUAL) 134 136 tr.tx_nbits = 2; 135 - if (mode & SPI_RX_QUAD) 137 + if (mode & SPI_RX_OCTAL) 138 + tr.rx_nbits = 8; 139 + else if (mode & SPI_RX_QUAD) 136 140 tr.rx_nbits = 4; 137 141 else if (mode & SPI_RX_DUAL) 138 142 tr.rx_nbits = 2; 139 143 if (!(mode & SPI_LOOP)) { 140 - if (mode & (SPI_TX_QUAD | SPI_TX_DUAL)) 144 + if (mode & (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL)) 141 145 tr.rx_buf = 0; 142 - else if (mode & (SPI_RX_QUAD | SPI_RX_DUAL)) 146 + else if (mode & (SPI_RX_OCTAL | SPI_RX_QUAD | SPI_RX_DUAL)) 143 147 tr.tx_buf = 0; 144 148 } 145 149 ··· 191 187 " -R --ready slave pulls low to pause\n" 192 188 " -2 --dual dual transfer\n" 193 189 " -4 --quad quad transfer\n" 190 + " -8 --octal octal transfer\n" 194 191 " -S --size transfer size\n" 195 192 " -I --iter iterations\n"); 196 193 exit(1); ··· 218 213 { "dual", 0, 0, '2' }, 219 214 { "verbose", 0, 0, 'v' }, 220 215 { "quad", 0, 0, '4' }, 216 + { "octal", 0, 0, '8' }, 221 217 { "size", 1, 0, 'S' }, 222 218 { "iter", 1, 0, 'I' }, 223 219 { NULL, 0, 0, 0 }, 224 220 }; 225 221 int c; 226 222 227 - c = getopt_long(argc, argv, "D:s:d:b:i:o:lHOLC3NR24p:vS:I:", 223 + c = getopt_long(argc, argv, "D:s:d:b:i:o:lHOLC3NR248p:vS:I:", 228 224 lopts, NULL); 229 225 230 226 if (c == -1) ··· 286 280 case '4': 287 281 mode |= SPI_TX_QUAD; 288 282 break; 283 + case '8': 284 + mode |= SPI_TX_OCTAL; 285 + break; 289 286 case 'S': 290 287 transfer_size = atoi(optarg); 291 288 break; ··· 304 295 mode |= SPI_RX_DUAL; 305 296 if (mode & SPI_TX_QUAD) 306 297 mode |= SPI_RX_QUAD; 298 + if (mode & SPI_TX_OCTAL) 299 + mode |= SPI_RX_OCTAL; 307 300 } 308 301 } 309 302