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

Merge branch 'spi-5.3' into spi-next

+2284 -541
+15 -5
Documentation/devicetree/bindings/mfd/atmel-usart.txt
··· 17 17 - cs-gpios: chipselects (internal cs not supported) 18 18 - atmel,usart-mode : Must be <AT91_USART_MODE_SPI> (found in dt-bindings/mfd/at91-usart.h) 19 19 20 + Optional properties in serial and SPI mode: 21 + - dma bindings for dma transfer: 22 + - dmas: DMA specifier, consisting of a phandle to DMA controller node, 23 + memory peripheral interface and USART DMA channel ID, FIFO configuration. 24 + The order of DMA channels is fixed. The first DMA channel must be TX 25 + associated channel and the second one must be RX associated channel. 26 + Refer to dma.txt and atmel-dma.txt for details. 27 + - dma-names: "tx" for TX channel. 28 + "rx" for RX channel. 29 + The order of dma-names is also fixed. The first name must be "tx" 30 + and the second one must be "rx" as in the examples below. 31 + 20 32 Optional properties in serial mode: 21 33 - atmel,use-dma-rx: use of PDC or DMA for receiving data 22 34 - atmel,use-dma-tx: use of PDC or DMA for transmitting data 23 35 - {rts,cts,dtr,dsr,rng,dcd}-gpios: specify a GPIO for RTS/CTS/DTR/DSR/RI/DCD line respectively. 24 36 It will use specified PIO instead of the peripheral function pin for the USART feature. 25 37 If unsure, don't specify this property. 26 - - add dma bindings for dma transfer: 27 - - dmas: DMA specifier, consisting of a phandle to DMA controller node, 28 - memory peripheral interface and USART DMA channel ID, FIFO configuration. 29 - Refer to dma.txt and atmel-dma.txt for details. 30 - - dma-names: "rx" for RX channel, "tx" for TX channel. 31 38 - atmel,fifo-size: maximum number of data the RX and TX FIFOs can store for FIFO 32 39 capable USARTs. 33 40 - rs485-rts-delay, rs485-rx-during-tx, linux,rs485-enabled-at-boot-time: see rs485.txt ··· 88 81 interrupts = <12 IRQ_TYPE_LEVEL_HIGH 5>; 89 82 clocks = <&usart0_clk>; 90 83 clock-names = "usart"; 84 + dmas = <&dma0 2 AT91_DMA_CFG_PER_ID(3)>, 85 + <&dma0 2 (AT91_DMA_CFG_PER_ID(4) | AT91_DMA_CFG_FIFOCFG_ASAP)>; 86 + dma-names = "tx", "rx"; 91 87 cs-gpios = <&pioB 3 0>; 92 88 };
+86
Documentation/devicetree/bindings/spi/allwinner,sun4i-a10-spi.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/spi/allwinner,sun4i-a10-spi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Allwinner A10 SPI Controller Device Tree Bindings 8 + 9 + allOf: 10 + - $ref: "spi-controller.yaml" 11 + 12 + maintainers: 13 + - Chen-Yu Tsai <wens@csie.org> 14 + - Maxime Ripard <maxime.ripard@bootlin.com> 15 + 16 + properties: 17 + "#address-cells": true 18 + "#size-cells": true 19 + 20 + compatible: 21 + const: allwinner,sun4i-a10-spi 22 + 23 + reg: 24 + maxItems: 1 25 + 26 + interrupts: 27 + maxItems: 1 28 + 29 + clocks: 30 + items: 31 + - description: Bus Clock 32 + - description: Module Clock 33 + 34 + clock-names: 35 + items: 36 + - const: ahb 37 + - const: mod 38 + 39 + dmas: 40 + items: 41 + - description: RX DMA Channel 42 + - description: TX DMA Channel 43 + 44 + dma-names: 45 + items: 46 + - const: rx 47 + - const: tx 48 + 49 + num-cs: true 50 + 51 + patternProperties: 52 + "^.*@[0-9a-f]+": 53 + properties: 54 + reg: 55 + items: 56 + minimum: 0 57 + maximum: 4 58 + 59 + spi-rx-bus-width: 60 + const: 1 61 + 62 + spi-tx-bus-width: 63 + const: 1 64 + 65 + required: 66 + - compatible 67 + - reg 68 + - interrupts 69 + - clocks 70 + - clock-names 71 + 72 + additionalProperties: false 73 + 74 + examples: 75 + - | 76 + spi1: spi@1c06000 { 77 + compatible = "allwinner,sun4i-a10-spi"; 78 + reg = <0x01c06000 0x1000>; 79 + interrupts = <11>; 80 + clocks = <&ahb_gates 21>, <&spi1_clk>; 81 + clock-names = "ahb", "mod"; 82 + #address-cells = <1>; 83 + #size-cells = <0>; 84 + }; 85 + 86 + ...
+106
Documentation/devicetree/bindings/spi/allwinner,sun6i-a31-spi.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/spi/allwinner,sun6i-a31-spi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Allwinner A31 SPI Controller Device Tree Bindings 8 + 9 + allOf: 10 + - $ref: "spi-controller.yaml" 11 + 12 + maintainers: 13 + - Chen-Yu Tsai <wens@csie.org> 14 + - Maxime Ripard <maxime.ripard@bootlin.com> 15 + 16 + properties: 17 + "#address-cells": true 18 + "#size-cells": true 19 + 20 + compatible: 21 + enum: 22 + - allwinner,sun6i-a31-spi 23 + - allwinner,sun8i-h3-spi 24 + 25 + reg: 26 + maxItems: 1 27 + 28 + interrupts: 29 + maxItems: 1 30 + 31 + clocks: 32 + items: 33 + - description: Bus Clock 34 + - description: Module Clock 35 + 36 + clock-names: 37 + items: 38 + - const: ahb 39 + - const: mod 40 + 41 + resets: 42 + maxItems: 1 43 + 44 + dmas: 45 + items: 46 + - description: RX DMA Channel 47 + - description: TX DMA Channel 48 + 49 + dma-names: 50 + items: 51 + - const: rx 52 + - const: tx 53 + 54 + num-cs: true 55 + 56 + patternProperties: 57 + "^.*@[0-9a-f]+": 58 + properties: 59 + reg: 60 + items: 61 + minimum: 0 62 + maximum: 4 63 + 64 + spi-rx-bus-width: 65 + const: 1 66 + 67 + spi-tx-bus-width: 68 + const: 1 69 + 70 + required: 71 + - compatible 72 + - reg 73 + - interrupts 74 + - clocks 75 + - clock-names 76 + 77 + additionalProperties: false 78 + 79 + examples: 80 + - | 81 + spi1: spi@1c69000 { 82 + compatible = "allwinner,sun6i-a31-spi"; 83 + reg = <0x01c69000 0x1000>; 84 + interrupts = <0 66 4>; 85 + clocks = <&ahb1_gates 21>, <&spi1_clk>; 86 + clock-names = "ahb", "mod"; 87 + resets = <&ahb1_rst 21>; 88 + #address-cells = <1>; 89 + #size-cells = <0>; 90 + }; 91 + 92 + - | 93 + spi0: spi@1c68000 { 94 + compatible = "allwinner,sun8i-h3-spi"; 95 + reg = <0x01c68000 0x1000>; 96 + interrupts = <0 65 4>; 97 + clocks = <&ccu 30>, <&ccu 82>; 98 + clock-names = "ahb", "mod"; 99 + dmas = <&dma 23>, <&dma 23>; 100 + dma-names = "rx", "tx"; 101 + resets = <&ccu 15>; 102 + #address-cells = <1>; 103 + #size-cells = <0>; 104 + }; 105 + 106 + ...
+1 -111
Documentation/devicetree/bindings/spi/spi-bus.txt
··· 1 - SPI (Serial Peripheral Interface) busses 2 - 3 - SPI busses can be described with a node for the SPI controller device 4 - and a set of child nodes for each SPI slave on the bus. The system's SPI 5 - controller may be described for use in SPI master mode or in SPI slave mode, 6 - but not for both at the same time. 7 - 8 - The SPI controller node requires the following properties: 9 - - compatible - Name of SPI bus controller following generic names 10 - recommended practice. 11 - 12 - In master mode, the SPI controller node requires the following additional 13 - properties: 14 - - #address-cells - number of cells required to define a chip select 15 - address on the SPI bus. 16 - - #size-cells - should be zero. 17 - 18 - In slave mode, the SPI controller node requires one additional property: 19 - - spi-slave - Empty property. 20 - 21 - No other properties are required in the SPI bus node. It is assumed 22 - that a driver for an SPI bus device will understand that it is an SPI bus. 23 - However, the binding does not attempt to define the specific method for 24 - assigning chip select numbers. Since SPI chip select configuration is 25 - flexible and non-standardized, it is left out of this binding with the 26 - assumption that board specific platform code will be used to manage 27 - chip selects. Individual drivers can define additional properties to 28 - support describing the chip select layout. 29 - 30 - Optional properties (master mode only): 31 - - cs-gpios - gpios chip select. 32 - - num-cs - total number of chipselects. 33 - 34 - If cs-gpios is used the number of chip selects will be increased automatically 35 - with max(cs-gpios > hw cs). 36 - 37 - So if for example the controller has 2 CS lines, and the cs-gpios 38 - property looks like this: 39 - 40 - cs-gpios = <&gpio1 0 0>, <0>, <&gpio1 1 0>, <&gpio1 2 0>; 41 - 42 - Then it should be configured so that num_chipselect = 4 with the 43 - following mapping: 44 - 45 - cs0 : &gpio1 0 0 46 - cs1 : native 47 - cs2 : &gpio1 1 0 48 - cs3 : &gpio1 2 0 49 - 50 - 51 - SPI slave nodes must be children of the SPI controller node. 52 - 53 - In master mode, one or more slave nodes (up to the number of chip selects) can 54 - be present. Required properties are: 55 - - compatible - Name of SPI device following generic names recommended 56 - practice. 57 - - reg - Chip select address of device. 58 - - spi-max-frequency - Maximum SPI clocking speed of device in Hz. 59 - 60 - In slave mode, the (single) slave node is optional. 61 - If present, it must be called "slave". Required properties are: 62 - - compatible - Name of SPI device following generic names recommended 63 - practice. 64 - 65 - All slave nodes can contain the following optional properties: 66 - - spi-cpol - Empty property indicating device requires inverse clock 67 - polarity (CPOL) mode. 68 - - spi-cpha - Empty property indicating device requires shifted clock 69 - phase (CPHA) mode. 70 - - spi-cs-high - Empty property indicating device requires chip select 71 - active high. 72 - - spi-3wire - Empty property indicating device requires 3-wire mode. 73 - - spi-lsb-first - Empty property indicating device requires LSB first mode. 74 - - spi-tx-bus-width - The bus width (number of data wires) that is used for MOSI. 75 - Defaults to 1 if not present. 76 - - spi-rx-bus-width - The bus width (number of data wires) that is used for MISO. 77 - Defaults to 1 if not present. 78 - - spi-rx-delay-us - Microsecond delay after a read transfer. 79 - - spi-tx-delay-us - Microsecond delay after a write transfer. 80 - 81 - Some SPI controllers and devices support Dual and Quad SPI transfer mode. 82 - It allows data in the SPI system to be transferred using 2 wires (DUAL) or 4 83 - wires (QUAD). 84 - Now the value that spi-tx-bus-width and spi-rx-bus-width can receive is 85 - only 1 (SINGLE), 2 (DUAL) and 4 (QUAD). 86 - Dual/Quad mode is not allowed when 3-wire mode is used. 87 - 88 - If a gpio chipselect is used for the SPI slave the gpio number will be passed 89 - via the SPI master node cs-gpios property. 90 - 91 - SPI example for an MPC5200 SPI bus: 92 - spi@f00 { 93 - #address-cells = <1>; 94 - #size-cells = <0>; 95 - compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi"; 96 - reg = <0xf00 0x20>; 97 - interrupts = <2 13 0 2 14 0>; 98 - interrupt-parent = <&mpc5200_pic>; 99 - 100 - ethernet-switch@0 { 101 - compatible = "micrel,ks8995m"; 102 - spi-max-frequency = <1000000>; 103 - reg = <0>; 104 - }; 105 - 106 - codec@1 { 107 - compatible = "ti,tlv320aic26"; 108 - spi-max-frequency = <100000>; 109 - reg = <1>; 110 - }; 111 - }; 1 + This file has moved to spi-controller.yaml.
+161
Documentation/devicetree/bindings/spi/spi-controller.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/spi/spi-controller.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: SPI Controller Generic Binding 8 + 9 + maintainers: 10 + - Mark Brown <broonie@kernel.org> 11 + 12 + description: | 13 + SPI busses can be described with a node for the SPI controller device 14 + and a set of child nodes for each SPI slave on the bus. The system SPI 15 + controller may be described for use in SPI master mode or in SPI slave mode, 16 + but not for both at the same time. 17 + 18 + properties: 19 + $nodename: 20 + pattern: "^spi(@.*|-[0-9a-f])*$" 21 + 22 + "#address-cells": 23 + const: 1 24 + 25 + "#size-cells": 26 + const: 0 27 + 28 + cs-gpios: 29 + description: | 30 + GPIOs used as chip selects. 31 + If that property is used, the number of chip selects will be 32 + increased automatically with max(cs-gpios, hardware chip selects). 33 + 34 + So if, for example, the controller has 2 CS lines, and the 35 + cs-gpios looks like this 36 + cs-gpios = <&gpio1 0 0>, <0>, <&gpio1 1 0>, <&gpio1 2 0>; 37 + 38 + Then it should be configured so that num_chipselect = 4, with 39 + the following mapping 40 + cs0 : &gpio1 0 0 41 + cs1 : native 42 + cs2 : &gpio1 1 0 43 + cs3 : &gpio1 2 0 44 + 45 + num-cs: 46 + $ref: /schemas/types.yaml#/definitions/uint32 47 + description: 48 + Total number of chip selects. 49 + 50 + spi-slave: 51 + $ref: /schemas/types.yaml#/definitions/flag 52 + description: 53 + The SPI controller acts as a slave, instead of a master. 54 + 55 + patternProperties: 56 + "^slave$": 57 + type: object 58 + 59 + properties: 60 + compatible: 61 + description: 62 + Compatible of the SPI device. 63 + 64 + required: 65 + - compatible 66 + 67 + "^.*@[0-9a-f]+$": 68 + type: object 69 + 70 + properties: 71 + compatible: 72 + description: 73 + Compatible of the SPI device. 74 + 75 + reg: 76 + maxItems: 1 77 + minimum: 0 78 + maximum: 256 79 + description: 80 + Chip select used by the device. 81 + 82 + spi-3wire: 83 + $ref: /schemas/types.yaml#/definitions/flag 84 + description: 85 + The device requires 3-wire mode. 86 + 87 + spi-cpha: 88 + $ref: /schemas/types.yaml#/definitions/flag 89 + description: 90 + The device requires shifted clock phase (CPHA) mode. 91 + 92 + spi-cpol: 93 + $ref: /schemas/types.yaml#/definitions/flag 94 + description: 95 + The device requires inverse clock polarity (CPOL) mode. 96 + 97 + spi-cs-high: 98 + $ref: /schemas/types.yaml#/definitions/flag 99 + description: 100 + The device requires the chip select active high. 101 + 102 + spi-lsb-first: 103 + $ref: /schemas/types.yaml#/definitions/flag 104 + description: 105 + The device requires the LSB first mode. 106 + 107 + spi-max-frequency: 108 + $ref: /schemas/types.yaml#/definitions/uint32 109 + description: 110 + Maximum SPI clocking speed of the device in Hz. 111 + 112 + spi-rx-bus-width: 113 + allOf: 114 + - $ref: /schemas/types.yaml#/definitions/uint32 115 + - enum: [ 1, 2, 4 ] 116 + - default: 1 117 + description: 118 + Bus width to the SPI bus used for MISO. 119 + 120 + spi-rx-delay-us: 121 + description: 122 + Delay, in microseconds, after a read transfer. 123 + 124 + spi-tx-bus-width: 125 + allOf: 126 + - $ref: /schemas/types.yaml#/definitions/uint32 127 + - enum: [ 1, 2, 4 ] 128 + - default: 1 129 + description: 130 + Bus width to the SPI bus used for MOSI. 131 + 132 + spi-tx-delay-us: 133 + description: 134 + Delay, in microseconds, after a write transfer. 135 + 136 + required: 137 + - compatible 138 + - reg 139 + 140 + examples: 141 + - | 142 + spi@f00 { 143 + #address-cells = <1>; 144 + #size-cells = <0>; 145 + compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi"; 146 + reg = <0xf00 0x20>; 147 + interrupts = <2 13 0 2 14 0>; 148 + interrupt-parent = <&mpc5200_pic>; 149 + 150 + ethernet-switch@0 { 151 + compatible = "micrel,ks8995m"; 152 + spi-max-frequency = <1000000>; 153 + reg = <0>; 154 + }; 155 + 156 + codec@1 { 157 + compatible = "ti,tlv320aic26"; 158 + spi-max-frequency = <100000>; 159 + reg = <1>; 160 + }; 161 + };
-43
Documentation/devicetree/bindings/spi/spi-gpio.txt
··· 1 - SPI-GPIO devicetree bindings 2 - 3 - This represents a group of 3-n GPIO lines used for bit-banged SPI on dedicated 4 - GPIO lines. 5 - 6 - Required properties: 7 - 8 - - compatible: should be set to "spi-gpio" 9 - - #address-cells: should be set to <0x1> 10 - - ranges 11 - - sck-gpios: GPIO spec for the SCK line to use 12 - - miso-gpios: GPIO spec for the MISO line to use 13 - - mosi-gpios: GPIO spec for the MOSI line to use 14 - - cs-gpios: GPIOs to use for chipselect lines. 15 - Not needed if num-chipselects = <0>. 16 - - num-chipselects: Number of chipselect lines. Should be <0> if a single device 17 - with no chip select is connected. 18 - 19 - Deprecated bindings: 20 - 21 - These legacy GPIO line bindings can alternatively be used to define the 22 - GPIO lines used, they should not be used in new device trees. 23 - 24 - - gpio-sck: GPIO spec for the SCK line to use 25 - - gpio-miso: GPIO spec for the MISO line to use 26 - - gpio-mosi: GPIO spec for the MOSI line to use 27 - 28 - Example: 29 - 30 - spi { 31 - compatible = "spi-gpio"; 32 - #address-cells = <0x1>; 33 - ranges; 34 - 35 - sck-gpios = <&gpio 95 0>; 36 - miso-gpios = <&gpio 98 0>; 37 - mosi-gpios = <&gpio 97 0>; 38 - cs-gpios = <&gpio 125 0>; 39 - num-chipselects = <1>; 40 - 41 - /* clients */ 42 - }; 43 -
+72
Documentation/devicetree/bindings/spi/spi-gpio.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/spi/spi-gpio.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: SPI-GPIO devicetree bindings 8 + 9 + maintainers: 10 + - Rob Herring <robh@kernel.org> 11 + 12 + description: 13 + This represents a group of 3-n GPIO lines used for bit-banged SPI on 14 + dedicated GPIO lines. 15 + 16 + allOf: 17 + - $ref: "/schemas/spi/spi-controller.yaml#" 18 + 19 + properties: 20 + compatible: 21 + const: spi-gpio 22 + 23 + sck-gpios: 24 + description: GPIO spec for the SCK line to use 25 + maxItems: 1 26 + 27 + miso-gpios: 28 + description: GPIO spec for the MISO line to use 29 + maxItems: 1 30 + 31 + mosi-gpios: 32 + description: GPIO spec for the MOSI line to use 33 + maxItems: 1 34 + 35 + cs-gpios: 36 + description: GPIOs to use for chipselect lines. 37 + Not needed if num-chipselects = <0>. 38 + minItems: 1 39 + maxItems: 1024 40 + 41 + num-chipselects: 42 + description: Number of chipselect lines. Should be <0> if a single device 43 + with no chip select is connected. 44 + $ref: "/schemas/types.yaml#/definitions/uint32" 45 + 46 + # Deprecated properties 47 + gpio-sck: false 48 + gpio-miso: false 49 + gpio-mosi: false 50 + 51 + required: 52 + - compatible 53 + - num-chipselects 54 + - sck-gpios 55 + 56 + examples: 57 + - | 58 + spi { 59 + compatible = "spi-gpio"; 60 + #address-cells = <0x1>; 61 + #size-cells = <0x0>; 62 + 63 + sck-gpios = <&gpio 95 0>; 64 + miso-gpios = <&gpio 98 0>; 65 + mosi-gpios = <&gpio 97 0>; 66 + cs-gpios = <&gpio 125 0>; 67 + num-chipselects = <1>; 68 + 69 + /* clients */ 70 + }; 71 + 72 + ...
+165
Documentation/devicetree/bindings/spi/spi-pl022.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/spi/spi-pl022.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: ARM PL022 SPI controller 8 + 9 + maintainers: 10 + - Linus Walleij <linus.walleij@linaro.org> 11 + 12 + allOf: 13 + - $ref: "spi-controller.yaml#" 14 + 15 + # We need a select here so we don't match all nodes with 'arm,primecell' 16 + select: 17 + properties: 18 + compatible: 19 + contains: 20 + const: arm,pl022 21 + required: 22 + - compatible 23 + 24 + properties: 25 + compatible: 26 + items: 27 + - const: arm,pl022 28 + - const: arm,primecell 29 + 30 + reg: 31 + maxItems: 1 32 + 33 + interrupts: 34 + maxItems: 1 35 + 36 + clocks: 37 + maxItems: 2 38 + 39 + clock-names: 40 + items: 41 + - enum: 42 + - SSPCLK 43 + - sspclk 44 + - const: apb_pclk 45 + 46 + pl022,autosuspend-delay: 47 + description: delay in ms following transfer completion before the 48 + runtime power management system suspends the device. A setting of 0 49 + indicates no delay and the device will be suspended immediately. 50 + $ref: "/schemas/types.yaml#/definitions/uint32" 51 + 52 + pl022,rt: 53 + description: indicates the controller should run the message pump with realtime 54 + priority to minimise the transfer latency on the bus (boolean) 55 + type: boolean 56 + 57 + dmas: 58 + description: 59 + Two or more DMA channel specifiers following the convention outlined 60 + in bindings/dma/dma.txt 61 + minItems: 2 62 + maxItems: 32 63 + 64 + dma-names: 65 + description: 66 + There must be at least one channel named "tx" for transmit and named "rx" 67 + for receive. 68 + minItems: 2 69 + maxItems: 32 70 + additionalItems: true 71 + items: 72 + - const: rx 73 + - const: tx 74 + 75 + patternProperties: 76 + "^[a-zA-Z][a-zA-Z0-9,+\\-._]{0,63}@[0-9a-f]+$": 77 + type: object 78 + # SPI slave nodes must be children of the SPI master node and can 79 + # contain the following properties. 80 + properties: 81 + pl022,interface: 82 + description: SPI interface type 83 + allOf: 84 + - $ref: "/schemas/types.yaml#/definitions/uint32" 85 + - enum: 86 + - 0 # SPI 87 + - 1 # Texas Instruments Synchronous Serial Frame Format 88 + - 2 # Microwire (Half Duplex) 89 + 90 + pl022,com-mode: 91 + description: Specifies the transfer mode 92 + allOf: 93 + - $ref: "/schemas/types.yaml#/definitions/uint32" 94 + - enum: 95 + - 0 # interrupt mode 96 + - 1 # polling mode 97 + - 2 # DMA mode 98 + default: 1 99 + 100 + pl022,rx-level-trig: 101 + description: Rx FIFO watermark level 102 + allOf: 103 + - $ref: "/schemas/types.yaml#/definitions/uint32" 104 + - minimum: 0 105 + maximum: 4 106 + 107 + pl022,tx-level-trig: 108 + description: Tx FIFO watermark level 109 + allOf: 110 + - $ref: "/schemas/types.yaml#/definitions/uint32" 111 + - minimum: 0 112 + maximum: 4 113 + 114 + pl022,ctrl-len: 115 + description: Microwire interface - Control length 116 + allOf: 117 + - $ref: "/schemas/types.yaml#/definitions/uint32" 118 + - minimum: 0x03 119 + maximum: 0x1f 120 + 121 + pl022,wait-state: 122 + description: Microwire interface - Wait state 123 + allOf: 124 + - $ref: "/schemas/types.yaml#/definitions/uint32" 125 + - enum: [ 0, 1 ] 126 + 127 + pl022,duplex: 128 + description: Microwire interface - Full/Half duplex 129 + allOf: 130 + - $ref: "/schemas/types.yaml#/definitions/uint32" 131 + - enum: [ 0, 1 ] 132 + 133 + required: 134 + - compatible 135 + - reg 136 + - interrupts 137 + 138 + examples: 139 + - | 140 + spi@e0100000 { 141 + compatible = "arm,pl022", "arm,primecell"; 142 + reg = <0xe0100000 0x1000>; 143 + #address-cells = <1>; 144 + #size-cells = <0>; 145 + interrupts = <0 31 0x4>; 146 + dmas = <&dma_controller 23 1>, 147 + <&dma_controller 24 0>; 148 + dma-names = "rx", "tx"; 149 + 150 + m25p80@1 { 151 + compatible = "st,m25p80"; 152 + reg = <1>; 153 + spi-max-frequency = <12000000>; 154 + spi-cpol; 155 + spi-cpha; 156 + pl022,interface = <0>; 157 + pl022,com-mode = <0x2>; 158 + pl022,rx-level-trig = <0>; 159 + pl022,tx-level-trig = <0>; 160 + pl022,ctrl-len = <0x11>; 161 + pl022,wait-state = <0>; 162 + pl022,duplex = <0>; 163 + }; 164 + }; 165 + ...
+4 -1
Documentation/devicetree/bindings/spi/spi-stm32-qspi.txt
··· 19 19 - reg: chip-Select number (QSPI controller may connect 2 flashes) 20 20 - spi-max-frequency: max frequency of spi bus 21 21 22 - Optional property: 22 + Optional properties: 23 23 - spi-rx-bus-width: see ./spi-bus.txt for the description 24 + - dmas: DMA specifiers for tx and rx dma. See the DMA client binding, 25 + Documentation/devicetree/bindings/dma/dma.txt. 26 + - dma-names: DMA request names should include "tx" and "rx" if present. 24 27 25 28 Example: 26 29
-23
Documentation/devicetree/bindings/spi/spi-sun4i.txt
··· 1 - Allwinner A10 SPI controller 2 - 3 - Required properties: 4 - - compatible: Should be "allwinner,sun4-a10-spi". 5 - - reg: Should contain register location and length. 6 - - interrupts: Should contain interrupt. 7 - - clocks: phandle to the clocks feeding the SPI controller. Two are 8 - needed: 9 - - "ahb": the gated AHB parent clock 10 - - "mod": the parent module clock 11 - - clock-names: Must contain the clock names described just above 12 - 13 - Example: 14 - 15 - spi1: spi@1c06000 { 16 - compatible = "allwinner,sun4i-a10-spi"; 17 - reg = <0x01c06000 0x1000>; 18 - interrupts = <11>; 19 - clocks = <&ahb_gates 21>, <&spi1_clk>; 20 - clock-names = "ahb", "mod"; 21 - #address-cells = <1>; 22 - #size-cells = <0>; 23 - };
-44
Documentation/devicetree/bindings/spi/spi-sun6i.txt
··· 1 - Allwinner A31/H3 SPI controller 2 - 3 - Required properties: 4 - - compatible: Should be "allwinner,sun6i-a31-spi" or "allwinner,sun8i-h3-spi". 5 - - reg: Should contain register location and length. 6 - - interrupts: Should contain interrupt. 7 - - clocks: phandle to the clocks feeding the SPI controller. Two are 8 - needed: 9 - - "ahb": the gated AHB parent clock 10 - - "mod": the parent module clock 11 - - clock-names: Must contain the clock names described just above 12 - - resets: phandle to the reset controller asserting this device in 13 - reset 14 - 15 - Optional properties: 16 - - dmas: DMA specifiers for rx and tx dma. See the DMA client binding, 17 - Documentation/devicetree/bindings/dma/dma.txt 18 - - dma-names: DMA request names should include "rx" and "tx" if present. 19 - 20 - Example: 21 - 22 - spi1: spi@1c69000 { 23 - compatible = "allwinner,sun6i-a31-spi"; 24 - reg = <0x01c69000 0x1000>; 25 - interrupts = <0 66 4>; 26 - clocks = <&ahb1_gates 21>, <&spi1_clk>; 27 - clock-names = "ahb", "mod"; 28 - resets = <&ahb1_rst 21>; 29 - }; 30 - 31 - spi0: spi@1c68000 { 32 - compatible = "allwinner,sun8i-h3-spi"; 33 - reg = <0x01c68000 0x1000>; 34 - interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; 35 - clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>; 36 - clock-names = "ahb", "mod"; 37 - dmas = <&dma 23>, <&dma 23>; 38 - dma-names = "rx", "tx"; 39 - pinctrl-names = "default"; 40 - pinctrl-0 = <&spi0_pins>; 41 - resets = <&ccu RST_BUS_SPI0>; 42 - #address-cells = <1>; 43 - #size-cells = <0>; 44 - };
+27
Documentation/devicetree/bindings/spi/spi-synquacer.txt
··· 1 + * Socionext Synquacer HS-SPI bindings 2 + 3 + Required Properties: 4 + - compatible: should be "socionext,synquacer-spi" 5 + - reg: physical base address of the controller and length of memory mapped 6 + region. 7 + - interrupts: should contain the "spi_rx", "spi_tx" and "spi_fault" interrupts. 8 + - clocks: core clock iHCLK. Optional rate clock iPCLK (default is iHCLK) 9 + - clock-names: Shall be "iHCLK" and "iPCLK" respectively 10 + 11 + Optional Properties: 12 + - socionext,use-rtm: boolean, if required to use "retimed clock" for RX 13 + - socionext,set-aces: boolean, if same active clock edges field to be set. 14 + 15 + Example: 16 + 17 + spi0: spi@ff110000 { 18 + compatible = "socionext,synquacer-spi"; 19 + reg = <0xff110000 0x1000>; 20 + interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>, 21 + <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>, 22 + <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>; 23 + clocks = <&clk_hsspi>; 24 + clock-names = "iHCLK"; 25 + socionext,use-rtm; 26 + socionext,set-aces; 27 + };
-70
Documentation/devicetree/bindings/spi/spi_pl022.txt
··· 1 - ARM PL022 SPI controller 2 - 3 - Required properties: 4 - - compatible : "arm,pl022", "arm,primecell" 5 - - reg : Offset and length of the register set for the device 6 - - interrupts : Should contain SPI controller interrupt 7 - - num-cs : total number of chipselects 8 - 9 - Optional properties: 10 - - cs-gpios : should specify GPIOs used for chipselects. 11 - The gpios will be referred to as reg = <index> in the SPI child nodes. 12 - If unspecified, a single SPI device without a chip select can be used. 13 - - pl022,autosuspend-delay : delay in ms following transfer completion before 14 - the runtime power management system suspends the 15 - device. A setting of 0 indicates no delay and the 16 - device will be suspended immediately 17 - - pl022,rt : indicates the controller should run the message pump with realtime 18 - priority to minimise the transfer latency on the bus (boolean) 19 - - dmas : Two or more DMA channel specifiers following the convention outlined 20 - in bindings/dma/dma.txt 21 - - dma-names: Names for the dma channels, if present. There must be at 22 - least one channel named "tx" for transmit and named "rx" for 23 - receive. 24 - 25 - 26 - SPI slave nodes must be children of the SPI master node and can 27 - contain the following properties. 28 - 29 - - pl022,interface : interface type: 30 - 0: SPI 31 - 1: Texas Instruments Synchronous Serial Frame Format 32 - 2: Microwire (Half Duplex) 33 - - pl022,com-mode : specifies the transfer mode: 34 - 0: interrupt mode 35 - 1: polling mode (default mode if property not present) 36 - 2: DMA mode 37 - - pl022,rx-level-trig : Rx FIFO watermark level 38 - - pl022,tx-level-trig : Tx FIFO watermark level 39 - - pl022,ctrl-len : Microwire interface: Control length 40 - - pl022,wait-state : Microwire interface: Wait state 41 - - pl022,duplex : Microwire interface: Full/Half duplex 42 - 43 - 44 - Example: 45 - 46 - spi@e0100000 { 47 - compatible = "arm,pl022", "arm,primecell"; 48 - reg = <0xe0100000 0x1000>; 49 - #address-cells = <1>; 50 - #size-cells = <0>; 51 - interrupts = <0 31 0x4>; 52 - dmas = <&dma-controller 23 1>, 53 - <&dma-controller 24 0>; 54 - dma-names = "rx", "tx"; 55 - 56 - m25p80@1 { 57 - compatible = "st,m25p80"; 58 - reg = <1>; 59 - spi-max-frequency = <12000000>; 60 - spi-cpol; 61 - spi-cpha; 62 - pl022,interface = <0>; 63 - pl022,com-mode = <0x2>; 64 - pl022,rx-level-trig = <0>; 65 - pl022,tx-level-trig = <0>; 66 - pl022,ctrl-len = <0x11>; 67 - pl022,wait-state = <0>; 68 - pl022,duplex = <0>; 69 - }; 70 - };
+8
MAINTAINERS
··· 14630 14630 F: drivers/net/ethernet/socionext/netsec.c 14631 14631 F: Documentation/devicetree/bindings/net/socionext-netsec.txt 14632 14632 14633 + SOCIONEXT (SNI) Synquacer SPI DRIVER 14634 + M: Masahisa Kojima <masahisa.kojima@linaro.org> 14635 + M: Jassi Brar <jaswinder.singh@linaro.org> 14636 + L: linux-spi@vger.kernel.org 14637 + S: Maintained 14638 + F: drivers/spi/spi-synquacer.c 14639 + F: Documentation/devicetree/bindings/spi/spi-synquacer.txt 14640 + 14633 14641 SOLIDRUN CLEARFOG SUPPORT 14634 14642 M: Russell King <linux@armlinux.org.uk> 14635 14643 S: Maintained
+12 -2
drivers/spi/Kconfig
··· 120 120 config SPI_BCM2835 121 121 tristate "BCM2835 SPI controller" 122 122 depends on GPIOLIB 123 - depends on ARCH_BCM2835 || COMPILE_TEST 123 + depends on ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST 124 124 help 125 125 This selects a driver for the Broadcom BCM2835 SPI master. 126 126 ··· 131 131 132 132 config SPI_BCM2835AUX 133 133 tristate "BCM2835 SPI auxiliary controller" 134 - depends on (ARCH_BCM2835 && GPIOLIB) || COMPILE_TEST 134 + depends on ((ARCH_BCM2835 || ARCH_BRCMSTB) && GPIOLIB) || COMPILE_TEST 135 135 help 136 136 This selects a driver for the Broadcom BCM2835 SPI aux master. 137 137 ··· 732 732 depends on RESET_CONTROLLER 733 733 help 734 734 This enables using the SPI controller on the Allwinner A31 SoCs. 735 + 736 + config SPI_SYNQUACER 737 + tristate "Socionext's SynQuacer HighSpeed SPI controller" 738 + depends on ARCH_SYNQUACER || COMPILE_TEST 739 + help 740 + SPI driver for Socionext's High speed SPI controller which provides 741 + various operating modes for interfacing to serial peripheral devices 742 + that use the de-facto standard SPI protocol. 743 + 744 + It also supports the new dual-bit and quad-bit SPI protocol. 735 745 736 746 config SPI_MXIC 737 747 tristate "Macronix MX25F0A SPI controller"
+1
drivers/spi/Makefile
··· 106 106 obj-$(CONFIG_SPI_ST_SSC4) += spi-st-ssc4.o 107 107 obj-$(CONFIG_SPI_SUN4I) += spi-sun4i.o 108 108 obj-$(CONFIG_SPI_SUN6I) += spi-sun6i.o 109 + obj-$(CONFIG_SPI_SYNQUACER) += spi-synquacer.o 109 110 obj-$(CONFIG_SPI_TEGRA114) += spi-tegra114.o 110 111 obj-$(CONFIG_SPI_TEGRA20_SFLASH) += spi-tegra20-sflash.o 111 112 obj-$(CONFIG_SPI_TEGRA20_SLINK) += spi-tegra20-slink.o
+11 -10
drivers/spi/atmel-quadspi.c
··· 151 151 const struct atmel_qspi_caps *caps; 152 152 u32 pending; 153 153 u32 mr; 154 + u32 scr; 154 155 struct completion cmd_completion; 155 156 }; 156 157 ··· 383 382 struct spi_controller *ctrl = spi->master; 384 383 struct atmel_qspi *aq = spi_controller_get_devdata(ctrl); 385 384 unsigned long src_rate; 386 - u32 scr, scbr; 385 + u32 scbr; 387 386 388 387 if (ctrl->busy) 389 388 return -EBUSY; ··· 400 399 if (scbr > 0) 401 400 scbr--; 402 401 403 - scr = QSPI_SCR_SCBR(scbr); 404 - writel_relaxed(scr, aq->regs + QSPI_SCR); 402 + aq->scr = QSPI_SCR_SCBR(scbr); 403 + writel_relaxed(aq->scr, aq->regs + QSPI_SCR); 405 404 406 405 return 0; 407 406 } 408 407 409 - static int atmel_qspi_init(struct atmel_qspi *aq) 408 + static void atmel_qspi_init(struct atmel_qspi *aq) 410 409 { 411 410 /* Reset the QSPI controller */ 412 411 writel_relaxed(QSPI_CR_SWRST, aq->regs + QSPI_CR); ··· 417 416 418 417 /* Enable the QSPI controller */ 419 418 writel_relaxed(QSPI_CR_QSPIEN, aq->regs + QSPI_CR); 420 - 421 - return 0; 422 419 } 423 420 424 421 static irqreturn_t atmel_qspi_interrupt(int irq, void *dev_id) ··· 535 536 if (err) 536 537 goto disable_qspick; 537 538 538 - err = atmel_qspi_init(aq); 539 - if (err) 540 - goto disable_qspick; 539 + atmel_qspi_init(aq); 541 540 542 541 err = spi_register_controller(ctrl); 543 542 if (err) ··· 584 587 clk_prepare_enable(aq->pclk); 585 588 clk_prepare_enable(aq->qspick); 586 589 587 - return atmel_qspi_init(aq); 590 + atmel_qspi_init(aq); 591 + 592 + writel_relaxed(aq->scr, aq->regs + QSPI_SCR); 593 + 594 + return 0; 588 595 } 589 596 590 597 static SIMPLE_DEV_PM_OPS(atmel_qspi_pm_ops, atmel_qspi_suspend,
+219 -2
drivers/spi/spi-at91-usart.c
··· 8 8 9 9 #include <linux/clk.h> 10 10 #include <linux/delay.h> 11 + #include <linux/dmaengine.h> 12 + #include <linux/dma-direction.h> 11 13 #include <linux/interrupt.h> 12 14 #include <linux/kernel.h> 13 15 #include <linux/module.h> 16 + #include <linux/of_platform.h> 14 17 #include <linux/of_gpio.h> 15 18 #include <linux/pinctrl/consumer.h> 16 19 #include <linux/platform_device.h> ··· 62 59 63 60 #define US_INIT \ 64 61 (US_MR_SPI_MASTER | US_MR_CHRL | US_MR_CLKO | US_MR_WRDBT) 62 + #define US_DMA_MIN_BYTES 16 63 + #define US_DMA_TIMEOUT (msecs_to_jiffies(1000)) 65 64 66 65 /* Register access macros */ 67 66 #define at91_usart_spi_readl(port, reg) \ ··· 77 72 writeb_relaxed((value), (port)->regs + US_##reg) 78 73 79 74 struct at91_usart_spi { 75 + struct platform_device *mpdev; 80 76 struct spi_transfer *current_transfer; 81 77 void __iomem *regs; 82 78 struct device *dev; 83 79 struct clk *clk; 84 80 81 + struct completion xfer_completion; 82 + 85 83 /*used in interrupt to protect data reading*/ 86 84 spinlock_t lock; 85 + 86 + phys_addr_t phybase; 87 87 88 88 int irq; 89 89 unsigned int current_tx_remaining_bytes; ··· 98 88 u32 status; 99 89 100 90 bool xfer_failed; 91 + bool use_dma; 101 92 }; 93 + 94 + static void dma_callback(void *data) 95 + { 96 + struct spi_controller *ctlr = data; 97 + struct at91_usart_spi *aus = spi_master_get_devdata(ctlr); 98 + 99 + at91_usart_spi_writel(aus, IER, US_IR_RXRDY); 100 + aus->current_rx_remaining_bytes = 0; 101 + complete(&aus->xfer_completion); 102 + } 103 + 104 + static bool at91_usart_spi_can_dma(struct spi_controller *ctrl, 105 + struct spi_device *spi, 106 + struct spi_transfer *xfer) 107 + { 108 + struct at91_usart_spi *aus = spi_master_get_devdata(ctrl); 109 + 110 + return aus->use_dma && xfer->len >= US_DMA_MIN_BYTES; 111 + } 112 + 113 + static int at91_usart_spi_configure_dma(struct spi_controller *ctlr, 114 + struct at91_usart_spi *aus) 115 + { 116 + struct dma_slave_config slave_config; 117 + struct device *dev = &aus->mpdev->dev; 118 + phys_addr_t phybase = aus->phybase; 119 + dma_cap_mask_t mask; 120 + int err = 0; 121 + 122 + dma_cap_zero(mask); 123 + dma_cap_set(DMA_SLAVE, mask); 124 + 125 + ctlr->dma_tx = dma_request_slave_channel_reason(dev, "tx"); 126 + if (IS_ERR_OR_NULL(ctlr->dma_tx)) { 127 + if (IS_ERR(ctlr->dma_tx)) { 128 + err = PTR_ERR(ctlr->dma_tx); 129 + goto at91_usart_spi_error_clear; 130 + } 131 + 132 + dev_dbg(dev, 133 + "DMA TX channel not available, SPI unable to use DMA\n"); 134 + err = -EBUSY; 135 + goto at91_usart_spi_error_clear; 136 + } 137 + 138 + ctlr->dma_rx = dma_request_slave_channel_reason(dev, "rx"); 139 + if (IS_ERR_OR_NULL(ctlr->dma_rx)) { 140 + if (IS_ERR(ctlr->dma_rx)) { 141 + err = PTR_ERR(ctlr->dma_rx); 142 + goto at91_usart_spi_error; 143 + } 144 + 145 + dev_dbg(dev, 146 + "DMA RX channel not available, SPI unable to use DMA\n"); 147 + err = -EBUSY; 148 + goto at91_usart_spi_error; 149 + } 150 + 151 + slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; 152 + slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; 153 + slave_config.dst_addr = (dma_addr_t)phybase + US_THR; 154 + slave_config.src_addr = (dma_addr_t)phybase + US_RHR; 155 + slave_config.src_maxburst = 1; 156 + slave_config.dst_maxburst = 1; 157 + slave_config.device_fc = false; 158 + 159 + slave_config.direction = DMA_DEV_TO_MEM; 160 + if (dmaengine_slave_config(ctlr->dma_rx, &slave_config)) { 161 + dev_err(&ctlr->dev, 162 + "failed to configure rx dma channel\n"); 163 + err = -EINVAL; 164 + goto at91_usart_spi_error; 165 + } 166 + 167 + slave_config.direction = DMA_MEM_TO_DEV; 168 + if (dmaengine_slave_config(ctlr->dma_tx, &slave_config)) { 169 + dev_err(&ctlr->dev, 170 + "failed to configure tx dma channel\n"); 171 + err = -EINVAL; 172 + goto at91_usart_spi_error; 173 + } 174 + 175 + aus->use_dma = true; 176 + return 0; 177 + 178 + at91_usart_spi_error: 179 + if (!IS_ERR_OR_NULL(ctlr->dma_tx)) 180 + dma_release_channel(ctlr->dma_tx); 181 + if (!IS_ERR_OR_NULL(ctlr->dma_rx)) 182 + dma_release_channel(ctlr->dma_rx); 183 + ctlr->dma_tx = NULL; 184 + ctlr->dma_rx = NULL; 185 + 186 + at91_usart_spi_error_clear: 187 + return err; 188 + } 189 + 190 + static void at91_usart_spi_release_dma(struct spi_controller *ctlr) 191 + { 192 + if (ctlr->dma_rx) 193 + dma_release_channel(ctlr->dma_rx); 194 + if (ctlr->dma_tx) 195 + dma_release_channel(ctlr->dma_tx); 196 + } 197 + 198 + static void at91_usart_spi_stop_dma(struct spi_controller *ctlr) 199 + { 200 + if (ctlr->dma_rx) 201 + dmaengine_terminate_all(ctlr->dma_rx); 202 + if (ctlr->dma_tx) 203 + dmaengine_terminate_all(ctlr->dma_tx); 204 + } 205 + 206 + static int at91_usart_spi_dma_transfer(struct spi_controller *ctlr, 207 + struct spi_transfer *xfer) 208 + { 209 + struct at91_usart_spi *aus = spi_master_get_devdata(ctlr); 210 + struct dma_chan *rxchan = ctlr->dma_rx; 211 + struct dma_chan *txchan = ctlr->dma_tx; 212 + struct dma_async_tx_descriptor *rxdesc; 213 + struct dma_async_tx_descriptor *txdesc; 214 + dma_cookie_t cookie; 215 + 216 + /* Disable RX interrupt */ 217 + at91_usart_spi_writel(aus, IDR, US_IR_RXRDY); 218 + 219 + rxdesc = dmaengine_prep_slave_sg(rxchan, 220 + xfer->rx_sg.sgl, 221 + xfer->rx_sg.nents, 222 + DMA_DEV_TO_MEM, 223 + DMA_PREP_INTERRUPT | 224 + DMA_CTRL_ACK); 225 + if (!rxdesc) 226 + goto at91_usart_spi_err_dma; 227 + 228 + txdesc = dmaengine_prep_slave_sg(txchan, 229 + xfer->tx_sg.sgl, 230 + xfer->tx_sg.nents, 231 + DMA_MEM_TO_DEV, 232 + DMA_PREP_INTERRUPT | 233 + DMA_CTRL_ACK); 234 + if (!txdesc) 235 + goto at91_usart_spi_err_dma; 236 + 237 + rxdesc->callback = dma_callback; 238 + rxdesc->callback_param = ctlr; 239 + 240 + cookie = rxdesc->tx_submit(rxdesc); 241 + if (dma_submit_error(cookie)) 242 + goto at91_usart_spi_err_dma; 243 + 244 + cookie = txdesc->tx_submit(txdesc); 245 + if (dma_submit_error(cookie)) 246 + goto at91_usart_spi_err_dma; 247 + 248 + rxchan->device->device_issue_pending(rxchan); 249 + txchan->device->device_issue_pending(txchan); 250 + 251 + return 0; 252 + 253 + at91_usart_spi_err_dma: 254 + /* Enable RX interrupt if something fails and fallback to PIO */ 255 + at91_usart_spi_writel(aus, IER, US_IR_RXRDY); 256 + at91_usart_spi_stop_dma(ctlr); 257 + 258 + return -ENOMEM; 259 + } 260 + 261 + static unsigned long at91_usart_spi_dma_timeout(struct at91_usart_spi *aus) 262 + { 263 + return wait_for_completion_timeout(&aus->xfer_completion, 264 + US_DMA_TIMEOUT); 265 + } 102 266 103 267 static inline u32 at91_usart_spi_tx_ready(struct at91_usart_spi *aus) 104 268 { ··· 400 216 struct spi_transfer *xfer) 401 217 { 402 218 struct at91_usart_spi *aus = spi_master_get_devdata(ctlr); 219 + unsigned long dma_timeout = 0; 220 + int ret = 0; 403 221 404 222 at91_usart_spi_set_xfer_speed(aus, xfer); 405 223 aus->xfer_failed = false; ··· 411 225 412 226 while ((aus->current_tx_remaining_bytes || 413 227 aus->current_rx_remaining_bytes) && !aus->xfer_failed) { 414 - at91_usart_spi_read_status(aus); 415 - at91_usart_spi_tx(aus); 228 + reinit_completion(&aus->xfer_completion); 229 + if (at91_usart_spi_can_dma(ctlr, spi, xfer) && 230 + !ret) { 231 + ret = at91_usart_spi_dma_transfer(ctlr, xfer); 232 + if (ret) 233 + continue; 234 + 235 + dma_timeout = at91_usart_spi_dma_timeout(aus); 236 + 237 + if (WARN_ON(dma_timeout == 0)) { 238 + dev_err(&spi->dev, "DMA transfer timeout\n"); 239 + return -EIO; 240 + } 241 + aus->current_tx_remaining_bytes = 0; 242 + } else { 243 + at91_usart_spi_read_status(aus); 244 + at91_usart_spi_tx(aus); 245 + } 246 + 416 247 cpu_relax(); 417 248 } 418 249 ··· 548 345 controller->transfer_one = at91_usart_spi_transfer_one; 549 346 controller->prepare_message = at91_usart_spi_prepare_message; 550 347 controller->unprepare_message = at91_usart_spi_unprepare_message; 348 + controller->can_dma = at91_usart_spi_can_dma; 551 349 controller->cleanup = at91_usart_spi_cleanup; 552 350 controller->max_speed_hz = DIV_ROUND_UP(clk_get_rate(clk), 553 351 US_MIN_CLK_DIV); ··· 580 376 aus->spi_clk = clk_get_rate(clk); 581 377 at91_usart_spi_init(aus); 582 378 379 + aus->phybase = regs->start; 380 + 381 + aus->mpdev = to_platform_device(pdev->dev.parent); 382 + 383 + ret = at91_usart_spi_configure_dma(controller, aus); 384 + if (ret) 385 + goto at91_usart_fail_dma; 386 + 583 387 spin_lock_init(&aus->lock); 388 + init_completion(&aus->xfer_completion); 389 + 584 390 ret = devm_spi_register_master(&pdev->dev, controller); 585 391 if (ret) 586 392 goto at91_usart_fail_register_master; ··· 603 389 return 0; 604 390 605 391 at91_usart_fail_register_master: 392 + at91_usart_spi_release_dma(controller); 393 + at91_usart_fail_dma: 606 394 clk_disable_unprepare(clk); 607 395 at91_usart_spi_probe_fail: 608 396 spi_master_put(controller); ··· 669 453 struct spi_controller *ctlr = platform_get_drvdata(pdev); 670 454 struct at91_usart_spi *aus = spi_master_get_devdata(ctlr); 671 455 456 + at91_usart_spi_release_dma(ctlr); 672 457 clk_disable_unprepare(aus->clk); 673 458 674 459 return 0;
+204 -124
drivers/spi/spi-bcm2835.c
··· 13 13 14 14 #include <linux/clk.h> 15 15 #include <linux/completion.h> 16 + #include <linux/debugfs.h> 16 17 #include <linux/delay.h> 17 18 #include <linux/dma-mapping.h> 18 19 #include <linux/dmaengine.h> ··· 65 64 66 65 #define BCM2835_SPI_FIFO_SIZE 64 67 66 #define BCM2835_SPI_FIFO_SIZE_3_4 48 68 - #define BCM2835_SPI_POLLING_LIMIT_US 30 69 - #define BCM2835_SPI_POLLING_JIFFIES 2 70 67 #define BCM2835_SPI_DMA_MIN_LENGTH 96 71 68 #define BCM2835_SPI_MODE_BITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \ 72 69 | SPI_NO_CS | SPI_3WIRE) 73 70 74 71 #define DRV_NAME "spi-bcm2835" 72 + 73 + /* define polling limits */ 74 + unsigned int polling_limit_us = 30; 75 + module_param(polling_limit_us, uint, 0664); 76 + MODULE_PARM_DESC(polling_limit_us, 77 + "time in us to run a transfer in polling mode\n"); 75 78 76 79 /** 77 80 * struct bcm2835_spi - BCM2835 SPI controller ··· 93 88 * length is not a multiple of 4 (to overcome hardware limitation) 94 89 * @tx_spillover: whether @tx_prologue spills over to second TX sglist entry 95 90 * @dma_pending: whether a DMA transfer is in progress 91 + * @debugfs_dir: the debugfs directory - neede to remove debugfs when 92 + * unloading the module 93 + * @count_transfer_polling: count of how often polling mode is used 94 + * @count_transfer_irq: count of how often interrupt mode is used 95 + * @count_transfer_irq_after_polling: count of how often we fall back to 96 + * interrupt mode after starting in polling mode. 97 + * These are counted as well in @count_transfer_polling and 98 + * @count_transfer_irq 99 + * @count_transfer_dma: count how often dma mode is used 96 100 */ 97 101 struct bcm2835_spi { 98 102 void __iomem *regs; ··· 116 102 int rx_prologue; 117 103 unsigned int tx_spillover; 118 104 unsigned int dma_pending; 105 + 106 + struct dentry *debugfs_dir; 107 + u64 count_transfer_polling; 108 + u64 count_transfer_irq; 109 + u64 count_transfer_irq_after_polling; 110 + u64 count_transfer_dma; 119 111 }; 112 + 113 + #if defined(CONFIG_DEBUG_FS) 114 + static void bcm2835_debugfs_create(struct bcm2835_spi *bs, 115 + const char *dname) 116 + { 117 + char name[64]; 118 + struct dentry *dir; 119 + 120 + /* get full name */ 121 + snprintf(name, sizeof(name), "spi-bcm2835-%s", dname); 122 + 123 + /* the base directory */ 124 + dir = debugfs_create_dir(name, NULL); 125 + bs->debugfs_dir = dir; 126 + 127 + /* the counters */ 128 + debugfs_create_u64("count_transfer_polling", 0444, dir, 129 + &bs->count_transfer_polling); 130 + debugfs_create_u64("count_transfer_irq", 0444, dir, 131 + &bs->count_transfer_irq); 132 + debugfs_create_u64("count_transfer_irq_after_polling", 0444, dir, 133 + &bs->count_transfer_irq_after_polling); 134 + debugfs_create_u64("count_transfer_dma", 0444, dir, 135 + &bs->count_transfer_dma); 136 + } 137 + 138 + static void bcm2835_debugfs_remove(struct bcm2835_spi *bs) 139 + { 140 + debugfs_remove_recursive(bs->debugfs_dir); 141 + bs->debugfs_dir = NULL; 142 + } 143 + #else 144 + static void bcm2835_debugfs_create(struct bcm2835_spi *bs, 145 + const char *dname) 146 + { 147 + } 148 + 149 + static void bcm2835_debugfs_remove(struct bcm2835_spi *bs) 150 + { 151 + } 152 + #endif /* CONFIG_DEBUG_FS */ 120 153 121 154 static inline u32 bcm2835_rd(struct bcm2835_spi *bs, unsigned reg) 122 155 { ··· 309 248 } 310 249 } 311 250 312 - static void bcm2835_spi_reset_hw(struct spi_master *master) 251 + static void bcm2835_spi_reset_hw(struct spi_controller *ctlr) 313 252 { 314 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 253 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 315 254 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); 316 255 317 256 /* Disable SPI interrupts and transfer */ ··· 330 269 331 270 static irqreturn_t bcm2835_spi_interrupt(int irq, void *dev_id) 332 271 { 333 - struct spi_master *master = dev_id; 334 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 272 + struct spi_controller *ctlr = dev_id; 273 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 335 274 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); 336 275 337 276 /* ··· 353 292 354 293 if (!bs->rx_len) { 355 294 /* Transfer complete - reset SPI HW */ 356 - bcm2835_spi_reset_hw(master); 295 + bcm2835_spi_reset_hw(ctlr); 357 296 /* wake up the framework */ 358 - complete(&master->xfer_completion); 297 + complete(&ctlr->xfer_completion); 359 298 } 360 299 361 300 return IRQ_HANDLED; 362 301 } 363 302 364 - static int bcm2835_spi_transfer_one_irq(struct spi_master *master, 303 + static int bcm2835_spi_transfer_one_irq(struct spi_controller *ctlr, 365 304 struct spi_device *spi, 366 305 struct spi_transfer *tfr, 367 306 u32 cs, bool fifo_empty) 368 307 { 369 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 308 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 309 + 310 + /* update usage statistics */ 311 + bs->count_transfer_irq++; 370 312 371 313 /* 372 314 * Enable HW block, but with interrupts still disabled. ··· 392 328 393 329 /** 394 330 * bcm2835_spi_transfer_prologue() - transfer first few bytes without DMA 395 - * @master: SPI master 331 + * @ctlr: SPI master controller 396 332 * @tfr: SPI transfer 397 333 * @bs: BCM2835 SPI controller 398 334 * @cs: CS register ··· 436 372 * be transmitted in 32-bit width to ensure that the following DMA transfer can 437 373 * pick up the residue in the RX FIFO in ungarbled form. 438 374 */ 439 - static void bcm2835_spi_transfer_prologue(struct spi_master *master, 375 + static void bcm2835_spi_transfer_prologue(struct spi_controller *ctlr, 440 376 struct spi_transfer *tfr, 441 377 struct bcm2835_spi *bs, 442 378 u32 cs) ··· 477 413 bcm2835_wr_fifo_count(bs, bs->rx_prologue); 478 414 bcm2835_wait_tx_fifo_empty(bs); 479 415 bcm2835_rd_fifo_count(bs, bs->rx_prologue); 480 - bcm2835_spi_reset_hw(master); 416 + bcm2835_spi_reset_hw(ctlr); 481 417 482 - dma_sync_single_for_device(master->dma_rx->device->dev, 418 + dma_sync_single_for_device(ctlr->dma_rx->device->dev, 483 419 sg_dma_address(&tfr->rx_sg.sgl[0]), 484 420 bs->rx_prologue, DMA_FROM_DEVICE); 485 421 ··· 543 479 544 480 static void bcm2835_spi_dma_done(void *data) 545 481 { 546 - struct spi_master *master = data; 547 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 482 + struct spi_controller *ctlr = data; 483 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 548 484 549 485 /* reset fifo and HW */ 550 - bcm2835_spi_reset_hw(master); 486 + bcm2835_spi_reset_hw(ctlr); 551 487 552 488 /* and terminate tx-dma as we do not have an irq for it 553 489 * because when the rx dma will terminate and this callback ··· 555 491 * situation otherwise... 556 492 */ 557 493 if (cmpxchg(&bs->dma_pending, true, false)) { 558 - dmaengine_terminate_async(master->dma_tx); 494 + dmaengine_terminate_async(ctlr->dma_tx); 559 495 bcm2835_spi_undo_prologue(bs); 560 496 } 561 497 562 498 /* and mark as completed */; 563 - complete(&master->xfer_completion); 499 + complete(&ctlr->xfer_completion); 564 500 } 565 501 566 - static int bcm2835_spi_prepare_sg(struct spi_master *master, 502 + static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr, 567 503 struct spi_transfer *tfr, 568 504 bool is_tx) 569 505 { ··· 578 514 579 515 if (is_tx) { 580 516 dir = DMA_MEM_TO_DEV; 581 - chan = master->dma_tx; 517 + chan = ctlr->dma_tx; 582 518 nents = tfr->tx_sg.nents; 583 519 sgl = tfr->tx_sg.sgl; 584 520 flags = 0 /* no tx interrupt */; 585 521 586 522 } else { 587 523 dir = DMA_DEV_TO_MEM; 588 - chan = master->dma_rx; 524 + chan = ctlr->dma_rx; 589 525 nents = tfr->rx_sg.nents; 590 526 sgl = tfr->rx_sg.sgl; 591 527 flags = DMA_PREP_INTERRUPT; ··· 598 534 /* set callback for rx */ 599 535 if (!is_tx) { 600 536 desc->callback = bcm2835_spi_dma_done; 601 - desc->callback_param = master; 537 + desc->callback_param = ctlr; 602 538 } 603 539 604 540 /* submit it to DMA-engine */ ··· 607 543 return dma_submit_error(cookie); 608 544 } 609 545 610 - static int bcm2835_spi_transfer_one_dma(struct spi_master *master, 546 + static int bcm2835_spi_transfer_one_dma(struct spi_controller *ctlr, 611 547 struct spi_device *spi, 612 548 struct spi_transfer *tfr, 613 549 u32 cs) 614 550 { 615 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 551 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 616 552 int ret; 553 + 554 + /* update usage statistics */ 555 + bs->count_transfer_dma++; 617 556 618 557 /* 619 558 * Transfer first few bytes without DMA if length of first TX or RX 620 559 * sglist entry is not a multiple of 4 bytes (hardware limitation). 621 560 */ 622 - bcm2835_spi_transfer_prologue(master, tfr, bs, cs); 561 + bcm2835_spi_transfer_prologue(ctlr, tfr, bs, cs); 623 562 624 563 /* setup tx-DMA */ 625 - ret = bcm2835_spi_prepare_sg(master, tfr, true); 564 + ret = bcm2835_spi_prepare_sg(ctlr, tfr, true); 626 565 if (ret) 627 566 goto err_reset_hw; 628 567 629 568 /* start TX early */ 630 - dma_async_issue_pending(master->dma_tx); 569 + dma_async_issue_pending(ctlr->dma_tx); 631 570 632 571 /* mark as dma pending */ 633 572 bs->dma_pending = 1; ··· 646 579 * mapping of the rx buffers still takes place 647 580 * this saves 10us or more. 648 581 */ 649 - ret = bcm2835_spi_prepare_sg(master, tfr, false); 582 + ret = bcm2835_spi_prepare_sg(ctlr, tfr, false); 650 583 if (ret) { 651 584 /* need to reset on errors */ 652 - dmaengine_terminate_sync(master->dma_tx); 585 + dmaengine_terminate_sync(ctlr->dma_tx); 653 586 bs->dma_pending = false; 654 587 goto err_reset_hw; 655 588 } 656 589 657 590 /* start rx dma late */ 658 - dma_async_issue_pending(master->dma_rx); 591 + dma_async_issue_pending(ctlr->dma_rx); 659 592 660 593 /* wait for wakeup in framework */ 661 594 return 1; 662 595 663 596 err_reset_hw: 664 - bcm2835_spi_reset_hw(master); 597 + bcm2835_spi_reset_hw(ctlr); 665 598 bcm2835_spi_undo_prologue(bs); 666 599 return ret; 667 600 } 668 601 669 - static bool bcm2835_spi_can_dma(struct spi_master *master, 602 + static bool bcm2835_spi_can_dma(struct spi_controller *ctlr, 670 603 struct spi_device *spi, 671 604 struct spi_transfer *tfr) 672 605 { ··· 678 611 return true; 679 612 } 680 613 681 - static void bcm2835_dma_release(struct spi_master *master) 614 + static void bcm2835_dma_release(struct spi_controller *ctlr) 682 615 { 683 - if (master->dma_tx) { 684 - dmaengine_terminate_sync(master->dma_tx); 685 - dma_release_channel(master->dma_tx); 686 - master->dma_tx = NULL; 616 + if (ctlr->dma_tx) { 617 + dmaengine_terminate_sync(ctlr->dma_tx); 618 + dma_release_channel(ctlr->dma_tx); 619 + ctlr->dma_tx = NULL; 687 620 } 688 - if (master->dma_rx) { 689 - dmaengine_terminate_sync(master->dma_rx); 690 - dma_release_channel(master->dma_rx); 691 - master->dma_rx = NULL; 621 + if (ctlr->dma_rx) { 622 + dmaengine_terminate_sync(ctlr->dma_rx); 623 + dma_release_channel(ctlr->dma_rx); 624 + ctlr->dma_rx = NULL; 692 625 } 693 626 } 694 627 695 - static void bcm2835_dma_init(struct spi_master *master, struct device *dev) 628 + static void bcm2835_dma_init(struct spi_controller *ctlr, struct device *dev) 696 629 { 697 630 struct dma_slave_config slave_config; 698 631 const __be32 *addr; ··· 700 633 int ret; 701 634 702 635 /* base address in dma-space */ 703 - addr = of_get_address(master->dev.of_node, 0, NULL, NULL); 636 + addr = of_get_address(ctlr->dev.of_node, 0, NULL, NULL); 704 637 if (!addr) { 705 638 dev_err(dev, "could not get DMA-register address - not using dma mode\n"); 706 639 goto err; ··· 708 641 dma_reg_base = be32_to_cpup(addr); 709 642 710 643 /* get tx/rx dma */ 711 - master->dma_tx = dma_request_slave_channel(dev, "tx"); 712 - if (!master->dma_tx) { 644 + ctlr->dma_tx = dma_request_slave_channel(dev, "tx"); 645 + if (!ctlr->dma_tx) { 713 646 dev_err(dev, "no tx-dma configuration found - not using dma mode\n"); 714 647 goto err; 715 648 } 716 - master->dma_rx = dma_request_slave_channel(dev, "rx"); 717 - if (!master->dma_rx) { 649 + ctlr->dma_rx = dma_request_slave_channel(dev, "rx"); 650 + if (!ctlr->dma_rx) { 718 651 dev_err(dev, "no rx-dma configuration found - not using dma mode\n"); 719 652 goto err_release; 720 653 } 721 654 722 655 /* configure DMAs */ 723 - slave_config.direction = DMA_MEM_TO_DEV; 724 656 slave_config.dst_addr = (u32)(dma_reg_base + BCM2835_SPI_FIFO); 725 657 slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 726 658 727 - ret = dmaengine_slave_config(master->dma_tx, &slave_config); 659 + ret = dmaengine_slave_config(ctlr->dma_tx, &slave_config); 728 660 if (ret) 729 661 goto err_config; 730 662 731 - slave_config.direction = DMA_DEV_TO_MEM; 732 663 slave_config.src_addr = (u32)(dma_reg_base + BCM2835_SPI_FIFO); 733 664 slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 734 665 735 - ret = dmaengine_slave_config(master->dma_rx, &slave_config); 666 + ret = dmaengine_slave_config(ctlr->dma_rx, &slave_config); 736 667 if (ret) 737 668 goto err_config; 738 669 739 670 /* all went well, so set can_dma */ 740 - master->can_dma = bcm2835_spi_can_dma; 671 + ctlr->can_dma = bcm2835_spi_can_dma; 741 672 /* need to do TX AND RX DMA, so we need dummy buffers */ 742 - master->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX; 673 + ctlr->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX; 743 674 744 675 return; 745 676 ··· 745 680 dev_err(dev, "issue configuring dma: %d - not using DMA mode\n", 746 681 ret); 747 682 err_release: 748 - bcm2835_dma_release(master); 683 + bcm2835_dma_release(ctlr); 749 684 err: 750 685 return; 751 686 } 752 687 753 - static int bcm2835_spi_transfer_one_poll(struct spi_master *master, 688 + static int bcm2835_spi_transfer_one_poll(struct spi_controller *ctlr, 754 689 struct spi_device *spi, 755 690 struct spi_transfer *tfr, 756 - u32 cs, 757 - unsigned long long xfer_time_us) 691 + u32 cs) 758 692 { 759 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 693 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 760 694 unsigned long timeout; 695 + 696 + /* update usage statistics */ 697 + bs->count_transfer_polling++; 761 698 762 699 /* enable HW block without interrupts */ 763 700 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA); ··· 770 703 */ 771 704 bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE); 772 705 773 - /* set the timeout */ 774 - timeout = jiffies + BCM2835_SPI_POLLING_JIFFIES; 706 + /* set the timeout to at least 2 jiffies */ 707 + timeout = jiffies + 2 + HZ * polling_limit_us / 1000000; 775 708 776 709 /* loop until finished the transfer */ 777 710 while (bs->rx_len) { ··· 790 723 jiffies - timeout, 791 724 bs->tx_len, bs->rx_len); 792 725 /* fall back to interrupt mode */ 793 - return bcm2835_spi_transfer_one_irq(master, spi, 726 + 727 + /* update usage statistics */ 728 + bs->count_transfer_irq_after_polling++; 729 + 730 + return bcm2835_spi_transfer_one_irq(ctlr, spi, 794 731 tfr, cs, false); 795 732 } 796 733 } 797 734 798 735 /* Transfer complete - reset SPI HW */ 799 - bcm2835_spi_reset_hw(master); 736 + bcm2835_spi_reset_hw(ctlr); 800 737 /* and return without waiting for completion */ 801 738 return 0; 802 739 } 803 740 804 - static int bcm2835_spi_transfer_one(struct spi_master *master, 741 + static int bcm2835_spi_transfer_one(struct spi_controller *ctlr, 805 742 struct spi_device *spi, 806 743 struct spi_transfer *tfr) 807 744 { 808 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 809 - unsigned long spi_hz, clk_hz, cdiv; 810 - unsigned long spi_used_hz; 811 - unsigned long long xfer_time_us; 745 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 746 + unsigned long spi_hz, clk_hz, cdiv, spi_used_hz; 747 + unsigned long hz_per_byte, byte_limit; 812 748 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); 813 749 814 750 /* set clock */ ··· 852 782 bs->tx_len = tfr->len; 853 783 bs->rx_len = tfr->len; 854 784 855 - /* calculate the estimated time in us the transfer runs */ 856 - xfer_time_us = (unsigned long long)tfr->len 857 - * 9 /* clocks/byte - SPI-HW waits 1 clock after each byte */ 858 - * 1000000; 859 - do_div(xfer_time_us, spi_used_hz); 785 + /* Calculate the estimated time in us the transfer runs. Note that 786 + * there is 1 idle clocks cycles after each byte getting transferred 787 + * so we have 9 cycles/byte. This is used to find the number of Hz 788 + * per byte per polling limit. E.g., we can transfer 1 byte in 30 us 789 + * per 300,000 Hz of bus clock. 790 + */ 791 + hz_per_byte = polling_limit_us ? (9 * 1000000) / polling_limit_us : 0; 792 + byte_limit = hz_per_byte ? spi_used_hz / hz_per_byte : 1; 860 793 861 - /* for short requests run polling*/ 862 - if (xfer_time_us <= BCM2835_SPI_POLLING_LIMIT_US) 863 - return bcm2835_spi_transfer_one_poll(master, spi, tfr, 864 - cs, xfer_time_us); 794 + /* run in polling mode for short transfers */ 795 + if (tfr->len < byte_limit) 796 + return bcm2835_spi_transfer_one_poll(ctlr, spi, tfr, cs); 865 797 866 - /* run in dma mode if conditions are right */ 867 - if (master->can_dma && bcm2835_spi_can_dma(master, spi, tfr)) 868 - return bcm2835_spi_transfer_one_dma(master, spi, tfr, cs); 798 + /* run in dma mode if conditions are right 799 + * Note that unlike poll or interrupt mode DMA mode does not have 800 + * this 1 idle clock cycle pattern but runs the spi clock without gaps 801 + */ 802 + if (ctlr->can_dma && bcm2835_spi_can_dma(ctlr, spi, tfr)) 803 + return bcm2835_spi_transfer_one_dma(ctlr, spi, tfr, cs); 869 804 870 805 /* run in interrupt-mode */ 871 - return bcm2835_spi_transfer_one_irq(master, spi, tfr, cs, true); 806 + return bcm2835_spi_transfer_one_irq(ctlr, spi, tfr, cs, true); 872 807 } 873 808 874 - static int bcm2835_spi_prepare_message(struct spi_master *master, 809 + static int bcm2835_spi_prepare_message(struct spi_controller *ctlr, 875 810 struct spi_message *msg) 876 811 { 877 812 struct spi_device *spi = msg->spi; 878 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 813 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 879 814 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS); 880 815 int ret; 881 816 882 - /* 883 - * DMA transfers are limited to 16 bit (0 to 65535 bytes) by the SPI HW 884 - * due to DLEN. Split up transfers (32-bit FIFO aligned) if the limit is 885 - * exceeded. 886 - */ 887 - ret = spi_split_transfers_maxsize(master, msg, 65532, 888 - GFP_KERNEL | GFP_DMA); 889 - if (ret) 890 - return ret; 817 + if (ctlr->can_dma) { 818 + /* 819 + * DMA transfers are limited to 16 bit (0 to 65535 bytes) by 820 + * the SPI HW due to DLEN. Split up transfers (32-bit FIFO 821 + * aligned) if the limit is exceeded. 822 + */ 823 + ret = spi_split_transfers_maxsize(ctlr, msg, 65532, 824 + GFP_KERNEL | GFP_DMA); 825 + if (ret) 826 + return ret; 827 + } 891 828 892 829 cs &= ~(BCM2835_SPI_CS_CPOL | BCM2835_SPI_CS_CPHA); 893 830 ··· 908 831 return 0; 909 832 } 910 833 911 - static void bcm2835_spi_handle_err(struct spi_master *master, 834 + static void bcm2835_spi_handle_err(struct spi_controller *ctlr, 912 835 struct spi_message *msg) 913 836 { 914 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 837 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 915 838 916 839 /* if an error occurred and we have an active dma, then terminate */ 917 840 if (cmpxchg(&bs->dma_pending, true, false)) { 918 - dmaengine_terminate_sync(master->dma_tx); 919 - dmaengine_terminate_sync(master->dma_rx); 841 + dmaengine_terminate_sync(ctlr->dma_tx); 842 + dmaengine_terminate_sync(ctlr->dma_rx); 920 843 bcm2835_spi_undo_prologue(bs); 921 844 } 922 845 /* and reset */ 923 - bcm2835_spi_reset_hw(master); 846 + bcm2835_spi_reset_hw(ctlr); 924 847 } 925 848 926 849 static int chip_match_name(struct gpio_chip *chip, void *data) ··· 977 900 978 901 static int bcm2835_spi_probe(struct platform_device *pdev) 979 902 { 980 - struct spi_master *master; 903 + struct spi_controller *ctlr; 981 904 struct bcm2835_spi *bs; 982 905 struct resource *res; 983 906 int err; 984 907 985 - master = spi_alloc_master(&pdev->dev, sizeof(*bs)); 986 - if (!master) { 987 - dev_err(&pdev->dev, "spi_alloc_master() failed\n"); 908 + ctlr = spi_alloc_master(&pdev->dev, sizeof(*bs)); 909 + if (!ctlr) 988 910 return -ENOMEM; 989 - } 990 911 991 - platform_set_drvdata(pdev, master); 912 + platform_set_drvdata(pdev, ctlr); 992 913 993 - master->mode_bits = BCM2835_SPI_MODE_BITS; 994 - master->bits_per_word_mask = SPI_BPW_MASK(8); 995 - master->num_chipselect = 3; 996 - master->setup = bcm2835_spi_setup; 997 - master->transfer_one = bcm2835_spi_transfer_one; 998 - master->handle_err = bcm2835_spi_handle_err; 999 - master->prepare_message = bcm2835_spi_prepare_message; 1000 - master->dev.of_node = pdev->dev.of_node; 914 + ctlr->mode_bits = BCM2835_SPI_MODE_BITS; 915 + ctlr->bits_per_word_mask = SPI_BPW_MASK(8); 916 + ctlr->num_chipselect = 3; 917 + ctlr->setup = bcm2835_spi_setup; 918 + ctlr->transfer_one = bcm2835_spi_transfer_one; 919 + ctlr->handle_err = bcm2835_spi_handle_err; 920 + ctlr->prepare_message = bcm2835_spi_prepare_message; 921 + ctlr->dev.of_node = pdev->dev.of_node; 1001 922 1002 - bs = spi_master_get_devdata(master); 923 + bs = spi_controller_get_devdata(ctlr); 1003 924 1004 925 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1005 926 bs->regs = devm_ioremap_resource(&pdev->dev, res); 1006 927 if (IS_ERR(bs->regs)) { 1007 928 err = PTR_ERR(bs->regs); 1008 - goto out_master_put; 929 + goto out_controller_put; 1009 930 } 1010 931 1011 932 bs->clk = devm_clk_get(&pdev->dev, NULL); 1012 933 if (IS_ERR(bs->clk)) { 1013 934 err = PTR_ERR(bs->clk); 1014 935 dev_err(&pdev->dev, "could not get clk: %d\n", err); 1015 - goto out_master_put; 936 + goto out_controller_put; 1016 937 } 1017 938 1018 939 bs->irq = platform_get_irq(pdev, 0); 1019 940 if (bs->irq <= 0) { 1020 941 dev_err(&pdev->dev, "could not get IRQ: %d\n", bs->irq); 1021 942 err = bs->irq ? bs->irq : -ENODEV; 1022 - goto out_master_put; 943 + goto out_controller_put; 1023 944 } 1024 945 1025 946 clk_prepare_enable(bs->clk); 1026 947 1027 - bcm2835_dma_init(master, &pdev->dev); 948 + bcm2835_dma_init(ctlr, &pdev->dev); 1028 949 1029 950 /* initialise the hardware with the default polarities */ 1030 951 bcm2835_wr(bs, BCM2835_SPI_CS, 1031 952 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX); 1032 953 1033 954 err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt, 0, 1034 - dev_name(&pdev->dev), master); 955 + dev_name(&pdev->dev), ctlr); 1035 956 if (err) { 1036 957 dev_err(&pdev->dev, "could not request IRQ: %d\n", err); 1037 958 goto out_clk_disable; 1038 959 } 1039 960 1040 - err = devm_spi_register_master(&pdev->dev, master); 961 + err = devm_spi_register_controller(&pdev->dev, ctlr); 1041 962 if (err) { 1042 - dev_err(&pdev->dev, "could not register SPI master: %d\n", err); 963 + dev_err(&pdev->dev, "could not register SPI controller: %d\n", 964 + err); 1043 965 goto out_clk_disable; 1044 966 } 967 + 968 + bcm2835_debugfs_create(bs, dev_name(&pdev->dev)); 1045 969 1046 970 return 0; 1047 971 1048 972 out_clk_disable: 1049 973 clk_disable_unprepare(bs->clk); 1050 - out_master_put: 1051 - spi_master_put(master); 974 + out_controller_put: 975 + spi_controller_put(ctlr); 1052 976 return err; 1053 977 } 1054 978 1055 979 static int bcm2835_spi_remove(struct platform_device *pdev) 1056 980 { 1057 - struct spi_master *master = platform_get_drvdata(pdev); 1058 - struct bcm2835_spi *bs = spi_master_get_devdata(master); 981 + struct spi_controller *ctlr = platform_get_drvdata(pdev); 982 + struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr); 983 + 984 + bcm2835_debugfs_remove(bs); 1059 985 1060 986 /* Clear FIFOs, and disable the HW block */ 1061 987 bcm2835_wr(bs, BCM2835_SPI_CS, ··· 1066 986 1067 987 clk_disable_unprepare(bs->clk); 1068 988 1069 - bcm2835_dma_release(master); 989 + bcm2835_dma_release(ctlr); 1070 990 1071 991 return 0; 1072 992 }
+1 -3
drivers/spi/spi-bcm2835aux.c
··· 496 496 int err; 497 497 498 498 master = spi_alloc_master(&pdev->dev, sizeof(*bs)); 499 - if (!master) { 500 - dev_err(&pdev->dev, "spi_alloc_master() failed\n"); 499 + if (!master) 501 500 return -ENOMEM; 502 - } 503 501 504 502 platform_set_drvdata(pdev, master); 505 503 master->mode_bits = (SPI_CPOL | SPI_CS_HIGH | SPI_NO_CS);
+6 -6
drivers/spi/spi-meson-spifc.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * Driver for Amlogic Meson SPI flash controller (SPIFC) 4 - * 5 - * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com> 6 - */ 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + // 3 + // Driver for Amlogic Meson SPI flash controller (SPIFC) 4 + // 5 + // Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com> 6 + // 7 7 8 8 #include <linux/clk.h> 9 9 #include <linux/delay.h>
+6 -9
drivers/spi/spi-mt65xx.c
··· 123 123 * supplies it. 124 124 */ 125 125 static const struct mtk_chip_config mtk_default_chip_info = { 126 - .rx_mlsb = 1, 127 - .tx_mlsb = 1, 128 126 .cs_pol = 0, 129 127 .sample_sel = 0, 130 128 }; ··· 193 195 reg_val &= ~SPI_CMD_CPOL; 194 196 195 197 /* set the mlsbx and mlsbtx */ 196 - if (chip_config->tx_mlsb) 197 - reg_val |= SPI_CMD_TXMSBF; 198 - else 198 + if (spi->mode & SPI_LSB_FIRST) { 199 199 reg_val &= ~SPI_CMD_TXMSBF; 200 - if (chip_config->rx_mlsb) 201 - reg_val |= SPI_CMD_RXMSBF; 202 - else 203 200 reg_val &= ~SPI_CMD_RXMSBF; 201 + } else { 202 + reg_val |= SPI_CMD_TXMSBF; 203 + reg_val |= SPI_CMD_RXMSBF; 204 + } 204 205 205 206 /* set the tx/rx endian */ 206 207 #ifdef __LITTLE_ENDIAN ··· 596 599 597 600 master->auto_runtime_pm = true; 598 601 master->dev.of_node = pdev->dev.of_node; 599 - master->mode_bits = SPI_CPOL | SPI_CPHA; 602 + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST; 600 603 601 604 master->set_cs = mtk_spi_set_cs; 602 605 master->prepare_message = mtk_spi_prepare_message;
+14
drivers/spi/spi-pxa2xx.c
··· 1437 1437 { PCI_VDEVICE(INTEL, 0x34aa), LPSS_CNL_SSP }, 1438 1438 { PCI_VDEVICE(INTEL, 0x34ab), LPSS_CNL_SSP }, 1439 1439 { PCI_VDEVICE(INTEL, 0x34fb), LPSS_CNL_SSP }, 1440 + /* EHL */ 1441 + { PCI_VDEVICE(INTEL, 0x4b2a), LPSS_BXT_SSP }, 1442 + { PCI_VDEVICE(INTEL, 0x4b2b), LPSS_BXT_SSP }, 1443 + { PCI_VDEVICE(INTEL, 0x4b37), LPSS_BXT_SSP }, 1440 1444 /* APL */ 1441 1445 { PCI_VDEVICE(INTEL, 0x5ac2), LPSS_BXT_SSP }, 1442 1446 { PCI_VDEVICE(INTEL, 0x5ac4), LPSS_BXT_SSP }, ··· 1708 1704 goto out_error_dma_irq_alloc; 1709 1705 1710 1706 controller->max_speed_hz = clk_get_rate(ssp->clk); 1707 + /* 1708 + * Set minimum speed for all other platforms than Intel Quark which is 1709 + * able do under 1 Hz transfers. 1710 + */ 1711 + if (!pxa25x_ssp_comp(drv_data)) 1712 + controller->min_speed_hz = 1713 + DIV_ROUND_UP(controller->max_speed_hz, 4096); 1714 + else if (!is_quark_x1000_ssp(drv_data)) 1715 + controller->min_speed_hz = 1716 + DIV_ROUND_UP(controller->max_speed_hz, 512); 1711 1717 1712 1718 /* Load default SSP configuration */ 1713 1719 pxa2xx_spi_write(drv_data, SSCR0, 0);
-4
drivers/spi/spi-qup.c
··· 873 873 else 874 874 ret = spi_qup_do_pio(spi, xfer, timeout); 875 875 876 - if (ret) 877 - goto exit; 878 - 879 - exit: 880 876 spi_qup_set_state(controller, QUP_STATE_RESET); 881 877 spin_lock_irqsave(&controller->lock, flags); 882 878 if (!ret)
+2 -2
drivers/spi/spi-rockchip.c
··· 417 417 .direction = DMA_MEM_TO_DEV, 418 418 .dst_addr = rs->dma_addr_tx, 419 419 .dst_addr_width = rs->n_bytes, 420 - .dst_maxburst = rs->fifo_len / 2, 420 + .dst_maxburst = rs->fifo_len / 4, 421 421 }; 422 422 423 423 dmaengine_slave_config(master->dma_tx, &txconf); ··· 518 518 else 519 519 writel_relaxed(rs->fifo_len / 2 - 1, rs->regs + ROCKCHIP_SPI_RXFTLR); 520 520 521 - writel_relaxed(rs->fifo_len / 2 - 1, rs->regs + ROCKCHIP_SPI_DMATDLR); 521 + writel_relaxed(rs->fifo_len / 2, rs->regs + ROCKCHIP_SPI_DMATDLR); 522 522 writel_relaxed(0, rs->regs + ROCKCHIP_SPI_DMARDLR); 523 523 writel_relaxed(dmacr, rs->regs + ROCKCHIP_SPI_DMACR); 524 524
+1 -1
drivers/spi/spi-sh-msiof.c
··· 229 229 sh_msiof_write(p, CTR, data); 230 230 231 231 return readl_poll_timeout_atomic(p->mapbase + CTR, data, 232 - (data & mask) == set, 10, 1000); 232 + (data & mask) == set, 1, 100); 233 233 } 234 234 235 235 static irqreturn_t sh_msiof_spi_irq(int irq, void *data)
+3 -7
drivers/spi/spi-stm32-qspi.c
··· 245 245 writel_relaxed(cr | CR_DMAEN, qspi->io_base + QSPI_CR); 246 246 247 247 t_out = sgt.nents * STM32_COMP_TIMEOUT_MS; 248 - if (!wait_for_completion_interruptible_timeout(&qspi->dma_completion, 249 - msecs_to_jiffies(t_out))) 250 - err = -ETIMEDOUT; 251 - 252 - if (dma_async_is_tx_complete(dma_ch, cookie, 253 - NULL, NULL) != DMA_COMPLETE) 248 + if (!wait_for_completion_timeout(&qspi->dma_completion, 249 + msecs_to_jiffies(t_out))) 254 250 err = -ETIMEDOUT; 255 251 256 252 if (err) ··· 300 304 cr = readl_relaxed(qspi->io_base + QSPI_CR); 301 305 writel_relaxed(cr | CR_TCIE | CR_TEIE, qspi->io_base + QSPI_CR); 302 306 303 - if (!wait_for_completion_interruptible_timeout(&qspi->data_completion, 307 + if (!wait_for_completion_timeout(&qspi->data_completion, 304 308 msecs_to_jiffies(STM32_COMP_TIMEOUT_MS))) { 305 309 err = -ETIMEDOUT; 306 310 } else {
+828
drivers/spi/spi-synquacer.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + // 3 + // Synquacer HSSPI controller driver 4 + // 5 + // Copyright (c) 2015-2018 Socionext Inc. 6 + // Copyright (c) 2018-2019 Linaro Ltd. 7 + // 8 + 9 + #include <linux/acpi.h> 10 + #include <linux/delay.h> 11 + #include <linux/interrupt.h> 12 + #include <linux/io.h> 13 + #include <linux/module.h> 14 + #include <linux/of.h> 15 + #include <linux/platform_device.h> 16 + #include <linux/pm_runtime.h> 17 + #include <linux/scatterlist.h> 18 + #include <linux/slab.h> 19 + #include <linux/spi/spi.h> 20 + #include <linux/spinlock.h> 21 + #include <linux/clk.h> 22 + 23 + /* HSSPI register address definitions */ 24 + #define SYNQUACER_HSSPI_REG_MCTRL 0x00 25 + #define SYNQUACER_HSSPI_REG_PCC0 0x04 26 + #define SYNQUACER_HSSPI_REG_PCC(n) (SYNQUACER_HSSPI_REG_PCC0 + (n) * 4) 27 + #define SYNQUACER_HSSPI_REG_TXF 0x14 28 + #define SYNQUACER_HSSPI_REG_TXE 0x18 29 + #define SYNQUACER_HSSPI_REG_TXC 0x1C 30 + #define SYNQUACER_HSSPI_REG_RXF 0x20 31 + #define SYNQUACER_HSSPI_REG_RXE 0x24 32 + #define SYNQUACER_HSSPI_REG_RXC 0x28 33 + #define SYNQUACER_HSSPI_REG_FAULTF 0x2C 34 + #define SYNQUACER_HSSPI_REG_FAULTC 0x30 35 + #define SYNQUACER_HSSPI_REG_DMCFG 0x34 36 + #define SYNQUACER_HSSPI_REG_DMSTART 0x38 37 + #define SYNQUACER_HSSPI_REG_DMBCC 0x3C 38 + #define SYNQUACER_HSSPI_REG_DMSTATUS 0x40 39 + #define SYNQUACER_HSSPI_REG_FIFOCFG 0x4C 40 + #define SYNQUACER_HSSPI_REG_TX_FIFO 0x50 41 + #define SYNQUACER_HSSPI_REG_RX_FIFO 0x90 42 + #define SYNQUACER_HSSPI_REG_MID 0xFC 43 + 44 + /* HSSPI register bit definitions */ 45 + #define SYNQUACER_HSSPI_MCTRL_MEN BIT(0) 46 + #define SYNQUACER_HSSPI_MCTRL_COMMAND_SEQUENCE_EN BIT(1) 47 + #define SYNQUACER_HSSPI_MCTRL_CDSS BIT(3) 48 + #define SYNQUACER_HSSPI_MCTRL_MES BIT(4) 49 + #define SYNQUACER_HSSPI_MCTRL_SYNCON BIT(5) 50 + 51 + #define SYNQUACER_HSSPI_PCC_CPHA BIT(0) 52 + #define SYNQUACER_HSSPI_PCC_CPOL BIT(1) 53 + #define SYNQUACER_HSSPI_PCC_ACES BIT(2) 54 + #define SYNQUACER_HSSPI_PCC_RTM BIT(3) 55 + #define SYNQUACER_HSSPI_PCC_SSPOL BIT(4) 56 + #define SYNQUACER_HSSPI_PCC_SDIR BIT(7) 57 + #define SYNQUACER_HSSPI_PCC_SENDIAN BIT(8) 58 + #define SYNQUACER_HSSPI_PCC_SAFESYNC BIT(16) 59 + #define SYNQUACER_HSSPI_PCC_SS2CD_SHIFT 5U 60 + #define SYNQUACER_HSSPI_PCC_CDRS_MASK 0x7f 61 + #define SYNQUACER_HSSPI_PCC_CDRS_SHIFT 9U 62 + 63 + #define SYNQUACER_HSSPI_TXF_FIFO_FULL BIT(0) 64 + #define SYNQUACER_HSSPI_TXF_FIFO_EMPTY BIT(1) 65 + #define SYNQUACER_HSSPI_TXF_SLAVE_RELEASED BIT(6) 66 + 67 + #define SYNQUACER_HSSPI_TXE_FIFO_FULL BIT(0) 68 + #define SYNQUACER_HSSPI_TXE_FIFO_EMPTY BIT(1) 69 + #define SYNQUACER_HSSPI_TXE_SLAVE_RELEASED BIT(6) 70 + 71 + #define SYNQUACER_HSSPI_RXF_FIFO_MORE_THAN_THRESHOLD BIT(5) 72 + #define SYNQUACER_HSSPI_RXF_SLAVE_RELEASED BIT(6) 73 + 74 + #define SYNQUACER_HSSPI_RXE_FIFO_MORE_THAN_THRESHOLD BIT(5) 75 + #define SYNQUACER_HSSPI_RXE_SLAVE_RELEASED BIT(6) 76 + 77 + #define SYNQUACER_HSSPI_DMCFG_SSDC BIT(1) 78 + #define SYNQUACER_HSSPI_DMCFG_MSTARTEN BIT(2) 79 + 80 + #define SYNQUACER_HSSPI_DMSTART_START BIT(0) 81 + #define SYNQUACER_HSSPI_DMSTOP_STOP BIT(8) 82 + #define SYNQUACER_HSSPI_DMPSEL_CS_MASK 0x3 83 + #define SYNQUACER_HSSPI_DMPSEL_CS_SHIFT 16U 84 + #define SYNQUACER_HSSPI_DMTRP_BUS_WIDTH_SHIFT 24U 85 + #define SYNQUACER_HSSPI_DMTRP_DATA_MASK 0x3 86 + #define SYNQUACER_HSSPI_DMTRP_DATA_SHIFT 26U 87 + #define SYNQUACER_HSSPI_DMTRP_DATA_TXRX 0 88 + #define SYNQUACER_HSSPI_DMTRP_DATA_RX 1 89 + #define SYNQUACER_HSSPI_DMTRP_DATA_TX 2 90 + 91 + #define SYNQUACER_HSSPI_DMSTATUS_RX_DATA_MASK 0x1f 92 + #define SYNQUACER_HSSPI_DMSTATUS_RX_DATA_SHIFT 8U 93 + #define SYNQUACER_HSSPI_DMSTATUS_TX_DATA_MASK 0x1f 94 + #define SYNQUACER_HSSPI_DMSTATUS_TX_DATA_SHIFT 16U 95 + 96 + #define SYNQUACER_HSSPI_FIFOCFG_RX_THRESHOLD_MASK 0xf 97 + #define SYNQUACER_HSSPI_FIFOCFG_RX_THRESHOLD_SHIFT 0U 98 + #define SYNQUACER_HSSPI_FIFOCFG_TX_THRESHOLD_MASK 0xf 99 + #define SYNQUACER_HSSPI_FIFOCFG_TX_THRESHOLD_SHIFT 4U 100 + #define SYNQUACER_HSSPI_FIFOCFG_FIFO_WIDTH_MASK 0x3 101 + #define SYNQUACER_HSSPI_FIFOCFG_FIFO_WIDTH_SHIFT 8U 102 + #define SYNQUACER_HSSPI_FIFOCFG_RX_FLUSH BIT(11) 103 + #define SYNQUACER_HSSPI_FIFOCFG_TX_FLUSH BIT(12) 104 + 105 + #define SYNQUACER_HSSPI_FIFO_DEPTH 16U 106 + #define SYNQUACER_HSSPI_FIFO_TX_THRESHOLD 4U 107 + #define SYNQUACER_HSSPI_FIFO_RX_THRESHOLD \ 108 + (SYNQUACER_HSSPI_FIFO_DEPTH - SYNQUACER_HSSPI_FIFO_TX_THRESHOLD) 109 + 110 + #define SYNQUACER_HSSPI_TRANSFER_MODE_TX BIT(1) 111 + #define SYNQUACER_HSSPI_TRANSFER_MODE_RX BIT(2) 112 + #define SYNQUACER_HSSPI_TRANSFER_TMOUT_MSEC 2000U 113 + #define SYNQUACER_HSSPI_ENABLE_TMOUT_MSEC 1000U 114 + 115 + #define SYNQUACER_HSSPI_CLOCK_SRC_IHCLK 0 116 + #define SYNQUACER_HSSPI_CLOCK_SRC_IPCLK 1 117 + 118 + #define SYNQUACER_HSSPI_NUM_CHIP_SELECT 4U 119 + #define SYNQUACER_HSSPI_IRQ_NAME_MAX 32U 120 + 121 + struct synquacer_spi { 122 + struct device *dev; 123 + struct completion transfer_done; 124 + unsigned int cs; 125 + unsigned int bpw; 126 + unsigned int mode; 127 + unsigned int speed; 128 + bool aces, rtm; 129 + void *rx_buf; 130 + const void *tx_buf; 131 + struct clk *clk; 132 + int clk_src_type; 133 + void __iomem *regs; 134 + u32 tx_words, rx_words; 135 + unsigned int bus_width; 136 + unsigned int transfer_mode; 137 + char rx_irq_name[SYNQUACER_HSSPI_IRQ_NAME_MAX]; 138 + char tx_irq_name[SYNQUACER_HSSPI_IRQ_NAME_MAX]; 139 + }; 140 + 141 + static int read_fifo(struct synquacer_spi *sspi) 142 + { 143 + u32 len = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTATUS); 144 + 145 + len = (len >> SYNQUACER_HSSPI_DMSTATUS_RX_DATA_SHIFT) & 146 + SYNQUACER_HSSPI_DMSTATUS_RX_DATA_MASK; 147 + len = min(len, sspi->rx_words); 148 + 149 + switch (sspi->bpw) { 150 + case 8: { 151 + u8 *buf = sspi->rx_buf; 152 + 153 + ioread8_rep(sspi->regs + SYNQUACER_HSSPI_REG_RX_FIFO, 154 + buf, len); 155 + sspi->rx_buf = buf + len; 156 + break; 157 + } 158 + case 16: { 159 + u16 *buf = sspi->rx_buf; 160 + 161 + ioread16_rep(sspi->regs + SYNQUACER_HSSPI_REG_RX_FIFO, 162 + buf, len); 163 + sspi->rx_buf = buf + len; 164 + break; 165 + } 166 + case 24: 167 + /* fallthrough, should use 32-bits access */ 168 + case 32: { 169 + u32 *buf = sspi->rx_buf; 170 + 171 + ioread32_rep(sspi->regs + SYNQUACER_HSSPI_REG_RX_FIFO, 172 + buf, len); 173 + sspi->rx_buf = buf + len; 174 + break; 175 + } 176 + default: 177 + return -EINVAL; 178 + } 179 + 180 + sspi->rx_words -= len; 181 + return 0; 182 + } 183 + 184 + static int write_fifo(struct synquacer_spi *sspi) 185 + { 186 + u32 len = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTATUS); 187 + 188 + len = (len >> SYNQUACER_HSSPI_DMSTATUS_TX_DATA_SHIFT) & 189 + SYNQUACER_HSSPI_DMSTATUS_TX_DATA_MASK; 190 + len = min(SYNQUACER_HSSPI_FIFO_DEPTH - len, 191 + sspi->tx_words); 192 + 193 + switch (sspi->bpw) { 194 + case 8: { 195 + const u8 *buf = sspi->tx_buf; 196 + 197 + iowrite8_rep(sspi->regs + SYNQUACER_HSSPI_REG_TX_FIFO, 198 + buf, len); 199 + sspi->tx_buf = buf + len; 200 + break; 201 + } 202 + case 16: { 203 + const u16 *buf = sspi->tx_buf; 204 + 205 + iowrite16_rep(sspi->regs + SYNQUACER_HSSPI_REG_TX_FIFO, 206 + buf, len); 207 + sspi->tx_buf = buf + len; 208 + break; 209 + } 210 + case 24: 211 + /* fallthrough, should use 32-bits access */ 212 + case 32: { 213 + const u32 *buf = sspi->tx_buf; 214 + 215 + iowrite32_rep(sspi->regs + SYNQUACER_HSSPI_REG_TX_FIFO, 216 + buf, len); 217 + sspi->tx_buf = buf + len; 218 + break; 219 + } 220 + default: 221 + return -EINVAL; 222 + } 223 + 224 + sspi->tx_words -= len; 225 + return 0; 226 + } 227 + 228 + static int synquacer_spi_config(struct spi_master *master, 229 + struct spi_device *spi, 230 + struct spi_transfer *xfer) 231 + { 232 + struct synquacer_spi *sspi = spi_master_get_devdata(master); 233 + unsigned int speed, mode, bpw, cs, bus_width, transfer_mode; 234 + u32 rate, val, div; 235 + 236 + /* Full Duplex only on 1-bit wide bus */ 237 + if (xfer->rx_buf && xfer->tx_buf && 238 + (xfer->rx_nbits != 1 || xfer->tx_nbits != 1)) { 239 + dev_err(sspi->dev, 240 + "RX and TX bus widths must be 1-bit for Full-Duplex!\n"); 241 + return -EINVAL; 242 + } 243 + 244 + if (xfer->tx_buf) { 245 + bus_width = xfer->tx_nbits; 246 + transfer_mode = SYNQUACER_HSSPI_TRANSFER_MODE_TX; 247 + } else { 248 + bus_width = xfer->rx_nbits; 249 + transfer_mode = SYNQUACER_HSSPI_TRANSFER_MODE_RX; 250 + } 251 + 252 + mode = spi->mode; 253 + cs = spi->chip_select; 254 + speed = xfer->speed_hz; 255 + bpw = xfer->bits_per_word; 256 + 257 + /* return if nothing to change */ 258 + if (speed == sspi->speed && 259 + bus_width == sspi->bus_width && bpw == sspi->bpw && 260 + mode == sspi->mode && cs == sspi->cs && 261 + transfer_mode == sspi->transfer_mode) { 262 + return 0; 263 + } 264 + 265 + sspi->transfer_mode = transfer_mode; 266 + rate = master->max_speed_hz; 267 + 268 + div = DIV_ROUND_UP(rate, speed); 269 + if (div > 254) { 270 + dev_err(sspi->dev, "Requested rate too low (%u)\n", 271 + sspi->speed); 272 + return -EINVAL; 273 + } 274 + 275 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_PCC(cs)); 276 + val &= ~SYNQUACER_HSSPI_PCC_SAFESYNC; 277 + if (bpw == 8 && (mode & (SPI_TX_DUAL | SPI_RX_DUAL)) && div < 3) 278 + val |= SYNQUACER_HSSPI_PCC_SAFESYNC; 279 + if (bpw == 8 && (mode & (SPI_TX_QUAD | SPI_RX_QUAD)) && div < 6) 280 + val |= SYNQUACER_HSSPI_PCC_SAFESYNC; 281 + if (bpw == 16 && (mode & (SPI_TX_QUAD | SPI_RX_QUAD)) && div < 3) 282 + val |= SYNQUACER_HSSPI_PCC_SAFESYNC; 283 + 284 + if (mode & SPI_CPHA) 285 + val |= SYNQUACER_HSSPI_PCC_CPHA; 286 + else 287 + val &= ~SYNQUACER_HSSPI_PCC_CPHA; 288 + 289 + if (mode & SPI_CPOL) 290 + val |= SYNQUACER_HSSPI_PCC_CPOL; 291 + else 292 + val &= ~SYNQUACER_HSSPI_PCC_CPOL; 293 + 294 + if (mode & SPI_CS_HIGH) 295 + val |= SYNQUACER_HSSPI_PCC_SSPOL; 296 + else 297 + val &= ~SYNQUACER_HSSPI_PCC_SSPOL; 298 + 299 + if (mode & SPI_LSB_FIRST) 300 + val |= SYNQUACER_HSSPI_PCC_SDIR; 301 + else 302 + val &= ~SYNQUACER_HSSPI_PCC_SDIR; 303 + 304 + if (sspi->aces) 305 + val |= SYNQUACER_HSSPI_PCC_ACES; 306 + else 307 + val &= ~SYNQUACER_HSSPI_PCC_ACES; 308 + 309 + if (sspi->rtm) 310 + val |= SYNQUACER_HSSPI_PCC_RTM; 311 + else 312 + val &= ~SYNQUACER_HSSPI_PCC_RTM; 313 + 314 + val |= (3 << SYNQUACER_HSSPI_PCC_SS2CD_SHIFT); 315 + val |= SYNQUACER_HSSPI_PCC_SENDIAN; 316 + 317 + val &= ~(SYNQUACER_HSSPI_PCC_CDRS_MASK << 318 + SYNQUACER_HSSPI_PCC_CDRS_SHIFT); 319 + val |= ((div >> 1) << SYNQUACER_HSSPI_PCC_CDRS_SHIFT); 320 + 321 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_PCC(cs)); 322 + 323 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); 324 + val &= ~(SYNQUACER_HSSPI_FIFOCFG_FIFO_WIDTH_MASK << 325 + SYNQUACER_HSSPI_FIFOCFG_FIFO_WIDTH_SHIFT); 326 + val |= ((bpw / 8 - 1) << SYNQUACER_HSSPI_FIFOCFG_FIFO_WIDTH_SHIFT); 327 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); 328 + 329 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 330 + val &= ~(SYNQUACER_HSSPI_DMTRP_DATA_MASK << 331 + SYNQUACER_HSSPI_DMTRP_DATA_SHIFT); 332 + 333 + if (xfer->rx_buf) 334 + val |= (SYNQUACER_HSSPI_DMTRP_DATA_RX << 335 + SYNQUACER_HSSPI_DMTRP_DATA_SHIFT); 336 + else 337 + val |= (SYNQUACER_HSSPI_DMTRP_DATA_TX << 338 + SYNQUACER_HSSPI_DMTRP_DATA_SHIFT); 339 + 340 + val &= ~(3 << SYNQUACER_HSSPI_DMTRP_BUS_WIDTH_SHIFT); 341 + val |= ((bus_width >> 1) << SYNQUACER_HSSPI_DMTRP_BUS_WIDTH_SHIFT); 342 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 343 + 344 + sspi->bpw = bpw; 345 + sspi->mode = mode; 346 + sspi->speed = speed; 347 + sspi->cs = spi->chip_select; 348 + sspi->bus_width = bus_width; 349 + 350 + return 0; 351 + } 352 + 353 + static int synquacer_spi_transfer_one(struct spi_master *master, 354 + struct spi_device *spi, 355 + struct spi_transfer *xfer) 356 + { 357 + struct synquacer_spi *sspi = spi_master_get_devdata(master); 358 + int ret; 359 + int status = 0; 360 + u32 words; 361 + u8 bpw; 362 + u32 val; 363 + 364 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 365 + val &= ~SYNQUACER_HSSPI_DMSTOP_STOP; 366 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 367 + 368 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); 369 + val |= SYNQUACER_HSSPI_FIFOCFG_RX_FLUSH; 370 + val |= SYNQUACER_HSSPI_FIFOCFG_TX_FLUSH; 371 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); 372 + 373 + /* 374 + * See if we can transfer 4-bytes as 1 word 375 + * to maximize the FIFO buffer efficiency. 376 + */ 377 + bpw = xfer->bits_per_word; 378 + if (bpw == 8 && !(xfer->len % 4) && !(spi->mode & SPI_LSB_FIRST)) 379 + xfer->bits_per_word = 32; 380 + 381 + ret = synquacer_spi_config(master, spi, xfer); 382 + 383 + /* restore */ 384 + xfer->bits_per_word = bpw; 385 + 386 + if (ret) 387 + return ret; 388 + 389 + reinit_completion(&sspi->transfer_done); 390 + 391 + sspi->tx_buf = xfer->tx_buf; 392 + sspi->rx_buf = xfer->rx_buf; 393 + 394 + switch (sspi->bpw) { 395 + case 8: 396 + words = xfer->len; 397 + break; 398 + case 16: 399 + words = xfer->len / 2; 400 + break; 401 + case 24: 402 + /* fallthrough, should use 32-bits access */ 403 + case 32: 404 + words = xfer->len / 4; 405 + break; 406 + default: 407 + dev_err(sspi->dev, "unsupported bpw: %d\n", sspi->bpw); 408 + return -EINVAL; 409 + } 410 + 411 + if (xfer->tx_buf) 412 + sspi->tx_words = words; 413 + else 414 + sspi->tx_words = 0; 415 + 416 + if (xfer->rx_buf) 417 + sspi->rx_words = words; 418 + else 419 + sspi->rx_words = 0; 420 + 421 + if (xfer->tx_buf) { 422 + status = write_fifo(sspi); 423 + if (status < 0) { 424 + dev_err(sspi->dev, "failed write_fifo. status: 0x%x\n", 425 + status); 426 + return status; 427 + } 428 + } 429 + 430 + if (xfer->rx_buf) { 431 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); 432 + val &= ~(SYNQUACER_HSSPI_FIFOCFG_RX_THRESHOLD_MASK << 433 + SYNQUACER_HSSPI_FIFOCFG_RX_THRESHOLD_SHIFT); 434 + val |= ((sspi->rx_words > SYNQUACER_HSSPI_FIFO_DEPTH ? 435 + SYNQUACER_HSSPI_FIFO_RX_THRESHOLD : sspi->rx_words) << 436 + SYNQUACER_HSSPI_FIFOCFG_RX_THRESHOLD_SHIFT); 437 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_FIFOCFG); 438 + } 439 + 440 + writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_TXC); 441 + writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_RXC); 442 + 443 + /* Trigger */ 444 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 445 + val |= SYNQUACER_HSSPI_DMSTART_START; 446 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 447 + 448 + if (xfer->tx_buf) { 449 + val = SYNQUACER_HSSPI_TXE_FIFO_EMPTY; 450 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_TXE); 451 + status = wait_for_completion_timeout(&sspi->transfer_done, 452 + msecs_to_jiffies(SYNQUACER_HSSPI_TRANSFER_TMOUT_MSEC)); 453 + writel(0, sspi->regs + SYNQUACER_HSSPI_REG_TXE); 454 + } 455 + 456 + if (xfer->rx_buf) { 457 + u32 buf[SYNQUACER_HSSPI_FIFO_DEPTH]; 458 + 459 + val = SYNQUACER_HSSPI_RXE_FIFO_MORE_THAN_THRESHOLD | 460 + SYNQUACER_HSSPI_RXE_SLAVE_RELEASED; 461 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_RXE); 462 + status = wait_for_completion_timeout(&sspi->transfer_done, 463 + msecs_to_jiffies(SYNQUACER_HSSPI_TRANSFER_TMOUT_MSEC)); 464 + writel(0, sspi->regs + SYNQUACER_HSSPI_REG_RXE); 465 + 466 + /* stop RX and clean RXFIFO */ 467 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 468 + val |= SYNQUACER_HSSPI_DMSTOP_STOP; 469 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 470 + sspi->rx_buf = buf; 471 + sspi->rx_words = SYNQUACER_HSSPI_FIFO_DEPTH; 472 + read_fifo(sspi); 473 + } 474 + 475 + if (status < 0) { 476 + dev_err(sspi->dev, "failed to transfer. status: 0x%x\n", 477 + status); 478 + return status; 479 + } 480 + 481 + return 0; 482 + } 483 + 484 + static void synquacer_spi_set_cs(struct spi_device *spi, bool enable) 485 + { 486 + struct synquacer_spi *sspi = spi_master_get_devdata(spi->master); 487 + u32 val; 488 + 489 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 490 + val &= ~(SYNQUACER_HSSPI_DMPSEL_CS_MASK << 491 + SYNQUACER_HSSPI_DMPSEL_CS_SHIFT); 492 + val |= spi->chip_select << SYNQUACER_HSSPI_DMPSEL_CS_SHIFT; 493 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMSTART); 494 + } 495 + 496 + static int synquacer_spi_wait_status_update(struct synquacer_spi *sspi, 497 + bool enable) 498 + { 499 + u32 val; 500 + unsigned long timeout = jiffies + 501 + msecs_to_jiffies(SYNQUACER_HSSPI_ENABLE_TMOUT_MSEC); 502 + 503 + /* wait MES(Module Enable Status) is updated */ 504 + do { 505 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_MCTRL) & 506 + SYNQUACER_HSSPI_MCTRL_MES; 507 + if (enable && val) 508 + return 0; 509 + if (!enable && !val) 510 + return 0; 511 + } while (time_before(jiffies, timeout)); 512 + 513 + dev_err(sspi->dev, "timeout occurs in updating Module Enable Status\n"); 514 + return -EBUSY; 515 + } 516 + 517 + static int synquacer_spi_enable(struct spi_master *master) 518 + { 519 + u32 val; 520 + int status; 521 + struct synquacer_spi *sspi = spi_master_get_devdata(master); 522 + 523 + /* Disable module */ 524 + writel(0, sspi->regs + SYNQUACER_HSSPI_REG_MCTRL); 525 + status = synquacer_spi_wait_status_update(sspi, false); 526 + if (status < 0) 527 + return status; 528 + 529 + writel(0, sspi->regs + SYNQUACER_HSSPI_REG_TXE); 530 + writel(0, sspi->regs + SYNQUACER_HSSPI_REG_RXE); 531 + writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_TXC); 532 + writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_RXC); 533 + writel(~0, sspi->regs + SYNQUACER_HSSPI_REG_FAULTC); 534 + 535 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_DMCFG); 536 + val &= ~SYNQUACER_HSSPI_DMCFG_SSDC; 537 + val &= ~SYNQUACER_HSSPI_DMCFG_MSTARTEN; 538 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_DMCFG); 539 + 540 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_MCTRL); 541 + if (sspi->clk_src_type == SYNQUACER_HSSPI_CLOCK_SRC_IPCLK) 542 + val |= SYNQUACER_HSSPI_MCTRL_CDSS; 543 + else 544 + val &= ~SYNQUACER_HSSPI_MCTRL_CDSS; 545 + 546 + val &= ~SYNQUACER_HSSPI_MCTRL_COMMAND_SEQUENCE_EN; 547 + val |= SYNQUACER_HSSPI_MCTRL_MEN; 548 + val |= SYNQUACER_HSSPI_MCTRL_SYNCON; 549 + 550 + /* Enable module */ 551 + writel(val, sspi->regs + SYNQUACER_HSSPI_REG_MCTRL); 552 + status = synquacer_spi_wait_status_update(sspi, true); 553 + if (status < 0) 554 + return status; 555 + 556 + return 0; 557 + } 558 + 559 + static irqreturn_t sq_spi_rx_handler(int irq, void *priv) 560 + { 561 + uint32_t val; 562 + struct synquacer_spi *sspi = priv; 563 + 564 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_RXF); 565 + if ((val & SYNQUACER_HSSPI_RXF_SLAVE_RELEASED) || 566 + (val & SYNQUACER_HSSPI_RXF_FIFO_MORE_THAN_THRESHOLD)) { 567 + read_fifo(sspi); 568 + 569 + if (sspi->rx_words == 0) { 570 + writel(0, sspi->regs + SYNQUACER_HSSPI_REG_RXE); 571 + complete(&sspi->transfer_done); 572 + } 573 + return IRQ_HANDLED; 574 + } 575 + 576 + return IRQ_NONE; 577 + } 578 + 579 + static irqreturn_t sq_spi_tx_handler(int irq, void *priv) 580 + { 581 + uint32_t val; 582 + struct synquacer_spi *sspi = priv; 583 + 584 + val = readl(sspi->regs + SYNQUACER_HSSPI_REG_TXF); 585 + if (val & SYNQUACER_HSSPI_TXF_FIFO_EMPTY) { 586 + if (sspi->tx_words == 0) { 587 + writel(0, sspi->regs + SYNQUACER_HSSPI_REG_TXE); 588 + complete(&sspi->transfer_done); 589 + } else { 590 + write_fifo(sspi); 591 + } 592 + return IRQ_HANDLED; 593 + } 594 + 595 + return IRQ_NONE; 596 + } 597 + 598 + static int synquacer_spi_probe(struct platform_device *pdev) 599 + { 600 + struct device_node *np = pdev->dev.of_node; 601 + struct spi_master *master; 602 + struct synquacer_spi *sspi; 603 + int ret; 604 + int rx_irq, tx_irq; 605 + 606 + master = spi_alloc_master(&pdev->dev, sizeof(*sspi)); 607 + if (!master) 608 + return -ENOMEM; 609 + 610 + platform_set_drvdata(pdev, master); 611 + 612 + sspi = spi_master_get_devdata(master); 613 + sspi->dev = &pdev->dev; 614 + 615 + init_completion(&sspi->transfer_done); 616 + 617 + sspi->regs = devm_platform_ioremap_resource(pdev, 0); 618 + if (IS_ERR(sspi->regs)) { 619 + ret = PTR_ERR(sspi->regs); 620 + goto put_spi; 621 + } 622 + 623 + sspi->clk_src_type = SYNQUACER_HSSPI_CLOCK_SRC_IHCLK; /* Default */ 624 + device_property_read_u32(&pdev->dev, "socionext,ihclk-rate", 625 + &master->max_speed_hz); /* for ACPI */ 626 + 627 + if (dev_of_node(&pdev->dev)) { 628 + if (device_property_match_string(&pdev->dev, 629 + "clock-names", "iHCLK") >= 0) { 630 + sspi->clk_src_type = SYNQUACER_HSSPI_CLOCK_SRC_IHCLK; 631 + sspi->clk = devm_clk_get(sspi->dev, "iHCLK"); 632 + } else if (device_property_match_string(&pdev->dev, 633 + "clock-names", "iPCLK") >= 0) { 634 + sspi->clk_src_type = SYNQUACER_HSSPI_CLOCK_SRC_IPCLK; 635 + sspi->clk = devm_clk_get(sspi->dev, "iPCLK"); 636 + } else { 637 + dev_err(&pdev->dev, "specified wrong clock source\n"); 638 + ret = -EINVAL; 639 + goto put_spi; 640 + } 641 + 642 + if (IS_ERR(sspi->clk)) { 643 + if (!(PTR_ERR(sspi->clk) == -EPROBE_DEFER)) 644 + dev_err(&pdev->dev, "clock not found\n"); 645 + ret = PTR_ERR(sspi->clk); 646 + goto put_spi; 647 + } 648 + 649 + ret = clk_prepare_enable(sspi->clk); 650 + if (ret) { 651 + dev_err(&pdev->dev, "failed to enable clock (%d)\n", 652 + ret); 653 + goto put_spi; 654 + } 655 + 656 + master->max_speed_hz = clk_get_rate(sspi->clk); 657 + } 658 + 659 + if (!master->max_speed_hz) { 660 + dev_err(&pdev->dev, "missing clock source\n"); 661 + return -EINVAL; 662 + } 663 + master->min_speed_hz = master->max_speed_hz / 254; 664 + 665 + sspi->aces = device_property_read_bool(&pdev->dev, 666 + "socionext,set-aces"); 667 + sspi->rtm = device_property_read_bool(&pdev->dev, "socionext,use-rtm"); 668 + 669 + master->num_chipselect = SYNQUACER_HSSPI_NUM_CHIP_SELECT; 670 + 671 + rx_irq = platform_get_irq(pdev, 0); 672 + if (rx_irq <= 0) { 673 + dev_err(&pdev->dev, "get rx_irq failed (%d)\n", rx_irq); 674 + ret = rx_irq; 675 + goto put_spi; 676 + } 677 + snprintf(sspi->rx_irq_name, SYNQUACER_HSSPI_IRQ_NAME_MAX, "%s-rx", 678 + dev_name(&pdev->dev)); 679 + ret = devm_request_irq(&pdev->dev, rx_irq, sq_spi_rx_handler, 680 + 0, sspi->rx_irq_name, sspi); 681 + if (ret) { 682 + dev_err(&pdev->dev, "request rx_irq failed (%d)\n", ret); 683 + goto put_spi; 684 + } 685 + 686 + tx_irq = platform_get_irq(pdev, 1); 687 + if (tx_irq <= 0) { 688 + dev_err(&pdev->dev, "get tx_irq failed (%d)\n", tx_irq); 689 + ret = tx_irq; 690 + goto put_spi; 691 + } 692 + snprintf(sspi->tx_irq_name, SYNQUACER_HSSPI_IRQ_NAME_MAX, "%s-tx", 693 + dev_name(&pdev->dev)); 694 + ret = devm_request_irq(&pdev->dev, tx_irq, sq_spi_tx_handler, 695 + 0, sspi->tx_irq_name, sspi); 696 + if (ret) { 697 + dev_err(&pdev->dev, "request tx_irq failed (%d)\n", ret); 698 + goto put_spi; 699 + } 700 + 701 + master->dev.of_node = np; 702 + master->dev.fwnode = pdev->dev.fwnode; 703 + master->auto_runtime_pm = true; 704 + master->bus_num = pdev->id; 705 + 706 + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_TX_DUAL | SPI_RX_DUAL | 707 + SPI_TX_QUAD | SPI_RX_QUAD; 708 + master->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(24) | 709 + SPI_BPW_MASK(16) | SPI_BPW_MASK(8); 710 + 711 + master->set_cs = synquacer_spi_set_cs; 712 + master->transfer_one = synquacer_spi_transfer_one; 713 + 714 + ret = synquacer_spi_enable(master); 715 + if (ret) 716 + goto fail_enable; 717 + 718 + pm_runtime_set_active(sspi->dev); 719 + pm_runtime_enable(sspi->dev); 720 + 721 + ret = devm_spi_register_master(sspi->dev, master); 722 + if (ret) 723 + goto disable_pm; 724 + 725 + return 0; 726 + 727 + disable_pm: 728 + pm_runtime_disable(sspi->dev); 729 + fail_enable: 730 + clk_disable_unprepare(sspi->clk); 731 + put_spi: 732 + spi_master_put(master); 733 + 734 + return ret; 735 + } 736 + 737 + static int synquacer_spi_remove(struct platform_device *pdev) 738 + { 739 + struct spi_master *master = platform_get_drvdata(pdev); 740 + struct synquacer_spi *sspi = spi_master_get_devdata(master); 741 + 742 + pm_runtime_disable(sspi->dev); 743 + 744 + clk_disable_unprepare(sspi->clk); 745 + 746 + return 0; 747 + } 748 + 749 + static int __maybe_unused synquacer_spi_suspend(struct device *dev) 750 + { 751 + struct spi_master *master = dev_get_drvdata(dev); 752 + struct synquacer_spi *sspi = spi_master_get_devdata(master); 753 + int ret; 754 + 755 + ret = spi_master_suspend(master); 756 + if (ret) 757 + return ret; 758 + 759 + if (!pm_runtime_suspended(dev)) 760 + clk_disable_unprepare(sspi->clk); 761 + 762 + return ret; 763 + } 764 + 765 + static int __maybe_unused synquacer_spi_resume(struct device *dev) 766 + { 767 + struct spi_master *master = dev_get_drvdata(dev); 768 + struct synquacer_spi *sspi = spi_master_get_devdata(master); 769 + int ret; 770 + 771 + if (!pm_runtime_suspended(dev)) { 772 + /* Ensure reconfigure during next xfer */ 773 + sspi->speed = 0; 774 + 775 + ret = clk_prepare_enable(sspi->clk); 776 + if (ret < 0) { 777 + dev_err(dev, "failed to enable clk (%d)\n", 778 + ret); 779 + return ret; 780 + } 781 + 782 + ret = synquacer_spi_enable(master); 783 + if (ret) { 784 + dev_err(dev, "failed to enable spi (%d)\n", ret); 785 + return ret; 786 + } 787 + } 788 + 789 + ret = spi_master_resume(master); 790 + if (ret < 0) 791 + clk_disable_unprepare(sspi->clk); 792 + 793 + return ret; 794 + } 795 + 796 + static SIMPLE_DEV_PM_OPS(synquacer_spi_pm_ops, synquacer_spi_suspend, 797 + synquacer_spi_resume); 798 + 799 + static const struct of_device_id synquacer_spi_of_match[] = { 800 + {.compatible = "socionext,synquacer-spi"}, 801 + {} 802 + }; 803 + MODULE_DEVICE_TABLE(of, synquacer_spi_of_match); 804 + 805 + #ifdef CONFIG_ACPI 806 + static const struct acpi_device_id synquacer_hsspi_acpi_ids[] = { 807 + { "SCX0004" }, 808 + { /* sentinel */ } 809 + }; 810 + MODULE_DEVICE_TABLE(acpi, synquacer_hsspi_acpi_ids); 811 + #endif 812 + 813 + static struct platform_driver synquacer_spi_driver = { 814 + .driver = { 815 + .name = "synquacer-spi", 816 + .pm = &synquacer_spi_pm_ops, 817 + .of_match_table = synquacer_spi_of_match, 818 + .acpi_match_table = ACPI_PTR(synquacer_hsspi_acpi_ids), 819 + }, 820 + .probe = synquacer_spi_probe, 821 + .remove = synquacer_spi_remove, 822 + }; 823 + module_platform_driver(synquacer_spi_driver); 824 + 825 + MODULE_DESCRIPTION("Socionext Synquacer HS-SPI controller driver"); 826 + MODULE_AUTHOR("Masahisa Kojima <masahisa.kojima@linaro.org>"); 827 + MODULE_AUTHOR("Jassi Brar <jaswinder.singh@linaro.org>"); 828 + MODULE_LICENSE("GPL v2");
+155 -17
drivers/spi/spi-tegra114.c
··· 84 84 (reg = (((val) & 0x1) << ((cs) * 8 + 5)) | \ 85 85 ((reg) & ~(1 << ((cs) * 8 + 5)))) 86 86 #define SPI_SET_CYCLES_BETWEEN_PACKETS(reg, cs, val) \ 87 - (reg = (((val) & 0xF) << ((cs) * 8)) | \ 88 - ((reg) & ~(0xF << ((cs) * 8)))) 87 + (reg = (((val) & 0x1F) << ((cs) * 8)) | \ 88 + ((reg) & ~(0x1F << ((cs) * 8)))) 89 + #define MAX_SETUP_HOLD_CYCLES 16 90 + #define MAX_INACTIVE_CYCLES 32 89 91 90 92 #define SPI_TRANS_STATUS 0x010 91 93 #define SPI_BLK_CNT(val) (((val) >> 0) & 0xFFFF) ··· 158 156 bool has_intr_mask_reg; 159 157 }; 160 158 159 + struct tegra_spi_client_data { 160 + int tx_clk_tap_delay; 161 + int rx_clk_tap_delay; 162 + }; 163 + 161 164 struct tegra_spi_data { 162 165 struct device *dev; 163 166 struct spi_master *master; ··· 189 182 unsigned dma_buf_size; 190 183 unsigned max_buf_size; 191 184 bool is_curr_dma_xfer; 185 + bool use_hw_based_cs; 192 186 193 187 struct completion rx_dma_complete; 194 188 struct completion tx_dma_complete; ··· 202 194 u32 command1_reg; 203 195 u32 dma_control_reg; 204 196 u32 def_command1_reg; 197 + u32 def_command2_reg; 198 + u32 spi_cs_timing1; 199 + u32 spi_cs_timing2; 200 + u8 last_used_cs; 205 201 206 202 struct completion xfer_completion; 207 203 struct spi_transfer *curr_xfer; ··· 723 711 dma_release_channel(dma_chan); 724 712 } 725 713 726 - static u32 tegra_spi_setup_transfer_one(struct spi_device *spi, 727 - struct spi_transfer *t, bool is_first_of_msg) 714 + static void tegra_spi_set_hw_cs_timing(struct spi_device *spi, u8 setup_dly, 715 + u8 hold_dly, u8 inactive_dly) 728 716 { 729 717 struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master); 718 + u32 setup_hold; 719 + u32 spi_cs_timing; 720 + u32 inactive_cycles; 721 + u8 cs_state; 722 + 723 + setup_dly = min_t(u8, setup_dly, MAX_SETUP_HOLD_CYCLES); 724 + hold_dly = min_t(u8, hold_dly, MAX_SETUP_HOLD_CYCLES); 725 + if (setup_dly && hold_dly) { 726 + setup_hold = SPI_SETUP_HOLD(setup_dly - 1, hold_dly - 1); 727 + spi_cs_timing = SPI_CS_SETUP_HOLD(tspi->spi_cs_timing1, 728 + spi->chip_select, 729 + setup_hold); 730 + if (tspi->spi_cs_timing1 != spi_cs_timing) { 731 + tspi->spi_cs_timing1 = spi_cs_timing; 732 + tegra_spi_writel(tspi, spi_cs_timing, SPI_CS_TIMING1); 733 + } 734 + } 735 + 736 + inactive_cycles = min_t(u8, inactive_dly, MAX_INACTIVE_CYCLES); 737 + if (inactive_cycles) 738 + inactive_cycles--; 739 + cs_state = inactive_cycles ? 0 : 1; 740 + spi_cs_timing = tspi->spi_cs_timing2; 741 + SPI_SET_CS_ACTIVE_BETWEEN_PACKETS(spi_cs_timing, spi->chip_select, 742 + cs_state); 743 + SPI_SET_CYCLES_BETWEEN_PACKETS(spi_cs_timing, spi->chip_select, 744 + inactive_cycles); 745 + if (tspi->spi_cs_timing2 != spi_cs_timing) { 746 + tspi->spi_cs_timing2 = spi_cs_timing; 747 + tegra_spi_writel(tspi, spi_cs_timing, SPI_CS_TIMING2); 748 + } 749 + } 750 + 751 + static u32 tegra_spi_setup_transfer_one(struct spi_device *spi, 752 + struct spi_transfer *t, 753 + bool is_first_of_msg, 754 + bool is_single_xfer) 755 + { 756 + struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master); 757 + struct tegra_spi_client_data *cdata = spi->controller_data; 730 758 u32 speed = t->speed_hz; 731 759 u8 bits_per_word = t->bits_per_word; 732 - u32 command1; 760 + u32 command1, command2; 733 761 int req_mode; 762 + u32 tx_tap = 0, rx_tap = 0; 734 763 735 764 if (speed != tspi->cur_speed) { 736 765 clk_set_rate(tspi->clk, speed); ··· 818 765 } else 819 766 tegra_spi_writel(tspi, command1, SPI_COMMAND1); 820 767 821 - command1 |= SPI_CS_SW_HW; 822 - if (spi->mode & SPI_CS_HIGH) 823 - command1 |= SPI_CS_SW_VAL; 824 - else 825 - command1 &= ~SPI_CS_SW_VAL; 768 + /* GPIO based chip select control */ 769 + if (spi->cs_gpiod) 770 + gpiod_set_value(spi->cs_gpiod, 1); 826 771 827 - tegra_spi_writel(tspi, 0, SPI_COMMAND2); 772 + if (is_single_xfer && !(t->cs_change)) { 773 + tspi->use_hw_based_cs = true; 774 + command1 &= ~(SPI_CS_SW_HW | SPI_CS_SW_VAL); 775 + } else { 776 + tspi->use_hw_based_cs = false; 777 + command1 |= SPI_CS_SW_HW; 778 + if (spi->mode & SPI_CS_HIGH) 779 + command1 |= SPI_CS_SW_VAL; 780 + else 781 + command1 &= ~SPI_CS_SW_VAL; 782 + } 783 + 784 + if (tspi->last_used_cs != spi->chip_select) { 785 + if (cdata && cdata->tx_clk_tap_delay) 786 + tx_tap = cdata->tx_clk_tap_delay; 787 + if (cdata && cdata->rx_clk_tap_delay) 788 + rx_tap = cdata->rx_clk_tap_delay; 789 + command2 = SPI_TX_TAP_DELAY(tx_tap) | 790 + SPI_RX_TAP_DELAY(rx_tap); 791 + if (command2 != tspi->def_command2_reg) 792 + tegra_spi_writel(tspi, command2, SPI_COMMAND2); 793 + tspi->last_used_cs = spi->chip_select; 794 + } 795 + 828 796 } else { 829 797 command1 = tspi->command1_reg; 830 798 command1 &= ~SPI_BIT_LENGTH(~0); ··· 901 827 return ret; 902 828 } 903 829 830 + static struct tegra_spi_client_data 831 + *tegra_spi_parse_cdata_dt(struct spi_device *spi) 832 + { 833 + struct tegra_spi_client_data *cdata; 834 + struct device_node *slave_np; 835 + 836 + slave_np = spi->dev.of_node; 837 + if (!slave_np) { 838 + dev_dbg(&spi->dev, "device node not found\n"); 839 + return NULL; 840 + } 841 + 842 + cdata = kzalloc(sizeof(*cdata), GFP_KERNEL); 843 + if (!cdata) 844 + return NULL; 845 + 846 + of_property_read_u32(slave_np, "nvidia,tx-clk-tap-delay", 847 + &cdata->tx_clk_tap_delay); 848 + of_property_read_u32(slave_np, "nvidia,rx-clk-tap-delay", 849 + &cdata->rx_clk_tap_delay); 850 + return cdata; 851 + } 852 + 853 + static void tegra_spi_cleanup(struct spi_device *spi) 854 + { 855 + struct tegra_spi_client_data *cdata = spi->controller_data; 856 + 857 + spi->controller_data = NULL; 858 + if (spi->dev.of_node) 859 + kfree(cdata); 860 + } 861 + 904 862 static int tegra_spi_setup(struct spi_device *spi) 905 863 { 906 864 struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master); 865 + struct tegra_spi_client_data *cdata = spi->controller_data; 907 866 u32 val; 908 867 unsigned long flags; 909 868 int ret; ··· 947 840 spi->mode & SPI_CPHA ? "" : "~", 948 841 spi->max_speed_hz); 949 842 843 + if (!cdata) { 844 + cdata = tegra_spi_parse_cdata_dt(spi); 845 + spi->controller_data = cdata; 846 + } 847 + 950 848 ret = pm_runtime_get_sync(tspi->dev); 951 849 if (ret < 0) { 952 850 dev_err(tspi->dev, "pm runtime failed, e = %d\n", ret); 851 + if (cdata) 852 + tegra_spi_cleanup(spi); 953 853 return ret; 954 854 } 955 855 ··· 967 853 } 968 854 969 855 spin_lock_irqsave(&tspi->lock, flags); 856 + /* GPIO based chip select control */ 857 + if (spi->cs_gpiod) 858 + gpiod_set_value(spi->cs_gpiod, 0); 859 + 970 860 val = tspi->def_command1_reg; 971 861 if (spi->mode & SPI_CS_HIGH) 972 862 val &= ~SPI_CS_POL_INACTIVE(spi->chip_select); ··· 1000 882 struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master); 1001 883 int cs_val = (spi->mode & SPI_CS_HIGH) ? 0 : 1; 1002 884 1003 - if (cs_val) 1004 - tspi->command1_reg |= SPI_CS_SW_VAL; 1005 - else 1006 - tspi->command1_reg &= ~SPI_CS_SW_VAL; 1007 - tegra_spi_writel(tspi, tspi->command1_reg, SPI_COMMAND1); 885 + /* GPIO based chip select control */ 886 + if (spi->cs_gpiod) 887 + gpiod_set_value(spi->cs_gpiod, 0); 888 + 889 + if (!tspi->use_hw_based_cs) { 890 + if (cs_val) 891 + tspi->command1_reg |= SPI_CS_SW_VAL; 892 + else 893 + tspi->command1_reg &= ~SPI_CS_SW_VAL; 894 + tegra_spi_writel(tspi, tspi->command1_reg, SPI_COMMAND1); 895 + } 896 + 1008 897 tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1); 1009 898 } 1010 899 ··· 1038 913 struct spi_device *spi = msg->spi; 1039 914 int ret; 1040 915 bool skip = false; 916 + int single_xfer; 1041 917 1042 918 msg->status = 0; 1043 919 msg->actual_length = 0; 1044 920 921 + single_xfer = list_is_singular(&msg->transfers); 1045 922 list_for_each_entry(xfer, &msg->transfers, transfer_list) { 1046 923 u32 cmd1; 1047 924 1048 925 reinit_completion(&tspi->xfer_completion); 1049 926 1050 - cmd1 = tegra_spi_setup_transfer_one(spi, xfer, is_first_msg); 927 + cmd1 = tegra_spi_setup_transfer_one(spi, xfer, is_first_msg, 928 + single_xfer); 1051 929 1052 930 if (!xfer->len) { 1053 931 ret = 0; ··· 1083 955 reset_control_assert(tspi->rst); 1084 956 udelay(2); 1085 957 reset_control_deassert(tspi->rst); 958 + tspi->last_used_cs = master->num_chipselect + 1; 1086 959 goto complete_xfer; 1087 960 } 1088 961 ··· 1317 1188 master->max_speed_hz = 25000000; /* 25MHz */ 1318 1189 1319 1190 /* the spi->mode bits understood by this driver: */ 1191 + master->use_gpio_descriptors = true; 1320 1192 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST | 1321 1193 SPI_TX_DUAL | SPI_RX_DUAL | SPI_3WIRE; 1322 1194 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); 1323 1195 master->setup = tegra_spi_setup; 1196 + master->cleanup = tegra_spi_cleanup; 1324 1197 master->transfer_one_message = tegra_spi_transfer_one_message; 1198 + master->set_cs_timing = tegra_spi_set_hw_cs_timing; 1325 1199 master->num_chipselect = MAX_CHIP_SELECT; 1326 1200 master->auto_runtime_pm = true; 1327 1201 bus_num = of_alias_get_id(pdev->dev.of_node, "spi"); ··· 1400 1268 reset_control_deassert(tspi->rst); 1401 1269 tspi->def_command1_reg = SPI_M_S; 1402 1270 tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1); 1271 + tspi->spi_cs_timing1 = tegra_spi_readl(tspi, SPI_CS_TIMING1); 1272 + tspi->spi_cs_timing2 = tegra_spi_readl(tspi, SPI_CS_TIMING2); 1273 + tspi->def_command2_reg = tegra_spi_readl(tspi, SPI_COMMAND2); 1274 + tspi->last_used_cs = master->num_chipselect + 1; 1403 1275 pm_runtime_put(&pdev->dev); 1404 1276 ret = request_threaded_irq(tspi->irq, tegra_spi_isr, 1405 1277 tegra_spi_isr_thread, IRQF_ONESHOT, ··· 1476 1340 return ret; 1477 1341 } 1478 1342 tegra_spi_writel(tspi, tspi->command1_reg, SPI_COMMAND1); 1343 + tegra_spi_writel(tspi, tspi->def_command2_reg, SPI_COMMAND2); 1344 + tspi->last_used_cs = master->num_chipselect + 1; 1479 1345 pm_runtime_put(dev); 1480 1346 1481 1347 return spi_master_resume(master);
+139 -55
drivers/spi/spi.c
··· 1090 1090 return 0; 1091 1091 } 1092 1092 1093 + static void _spi_transfer_delay_ns(u32 ns) 1094 + { 1095 + if (!ns) 1096 + return; 1097 + if (ns <= 1000) { 1098 + ndelay(ns); 1099 + } else { 1100 + u32 us = DIV_ROUND_UP(ns, 1000); 1101 + 1102 + if (us <= 10) 1103 + udelay(us); 1104 + else 1105 + usleep_range(us, us + DIV_ROUND_UP(us, 10)); 1106 + } 1107 + } 1108 + 1109 + static void _spi_transfer_cs_change_delay(struct spi_message *msg, 1110 + struct spi_transfer *xfer) 1111 + { 1112 + u32 delay = xfer->cs_change_delay; 1113 + u32 unit = xfer->cs_change_delay_unit; 1114 + u32 hz; 1115 + 1116 + /* return early on "fast" mode - for everything but USECS */ 1117 + if (!delay && unit != SPI_DELAY_UNIT_USECS) 1118 + return; 1119 + 1120 + switch (unit) { 1121 + case SPI_DELAY_UNIT_USECS: 1122 + /* for compatibility use default of 10us */ 1123 + if (!delay) 1124 + delay = 10000; 1125 + else 1126 + delay *= 1000; 1127 + break; 1128 + case SPI_DELAY_UNIT_NSECS: /* nothing to do here */ 1129 + break; 1130 + case SPI_DELAY_UNIT_SCK: 1131 + /* if there is no effective speed know, then approximate 1132 + * by underestimating with half the requested hz 1133 + */ 1134 + hz = xfer->effective_speed_hz ?: xfer->speed_hz / 2; 1135 + delay *= DIV_ROUND_UP(1000000000, hz); 1136 + break; 1137 + default: 1138 + dev_err_once(&msg->spi->dev, 1139 + "Use of unsupported delay unit %i, using default of 10us\n", 1140 + xfer->cs_change_delay_unit); 1141 + delay = 10000; 1142 + } 1143 + /* now sleep for the requested amount of time */ 1144 + _spi_transfer_delay_ns(delay); 1145 + } 1146 + 1093 1147 /* 1094 1148 * spi_transfer_one_message - Default implementation of transfer_one_message() 1095 1149 * ··· 1202 1148 if (msg->status != -EINPROGRESS) 1203 1149 goto out; 1204 1150 1205 - if (xfer->delay_usecs) { 1206 - u16 us = xfer->delay_usecs; 1207 - 1208 - if (us <= 10) 1209 - udelay(us); 1210 - else 1211 - usleep_range(us, us + DIV_ROUND_UP(us, 10)); 1212 - } 1151 + if (xfer->delay_usecs) 1152 + _spi_transfer_delay_ns(xfer->delay_usecs * 1000); 1213 1153 1214 1154 if (xfer->cs_change) { 1215 1155 if (list_is_last(&xfer->transfer_list, ··· 1211 1163 keep_cs = true; 1212 1164 } else { 1213 1165 spi_set_cs(msg->spi, false); 1214 - udelay(10); 1166 + _spi_transfer_cs_change_delay(msg, xfer); 1215 1167 spi_set_cs(msg->spi, true); 1216 1168 } 1217 1169 } ··· 1852 1804 #endif 1853 1805 1854 1806 #ifdef CONFIG_ACPI 1855 - static void acpi_spi_parse_apple_properties(struct spi_device *spi) 1807 + struct acpi_spi_lookup { 1808 + struct spi_controller *ctlr; 1809 + u32 max_speed_hz; 1810 + u32 mode; 1811 + int irq; 1812 + u8 bits_per_word; 1813 + u8 chip_select; 1814 + }; 1815 + 1816 + static void acpi_spi_parse_apple_properties(struct acpi_device *dev, 1817 + struct acpi_spi_lookup *lookup) 1856 1818 { 1857 - struct acpi_device *dev = ACPI_COMPANION(&spi->dev); 1858 1819 const union acpi_object *obj; 1859 1820 1860 1821 if (!x86_apple_machine) ··· 1871 1814 1872 1815 if (!acpi_dev_get_property(dev, "spiSclkPeriod", ACPI_TYPE_BUFFER, &obj) 1873 1816 && obj->buffer.length >= 4) 1874 - spi->max_speed_hz = NSEC_PER_SEC / *(u32 *)obj->buffer.pointer; 1817 + lookup->max_speed_hz = NSEC_PER_SEC / *(u32 *)obj->buffer.pointer; 1875 1818 1876 1819 if (!acpi_dev_get_property(dev, "spiWordSize", ACPI_TYPE_BUFFER, &obj) 1877 1820 && obj->buffer.length == 8) 1878 - spi->bits_per_word = *(u64 *)obj->buffer.pointer; 1821 + lookup->bits_per_word = *(u64 *)obj->buffer.pointer; 1879 1822 1880 1823 if (!acpi_dev_get_property(dev, "spiBitOrder", ACPI_TYPE_BUFFER, &obj) 1881 1824 && obj->buffer.length == 8 && !*(u64 *)obj->buffer.pointer) 1882 - spi->mode |= SPI_LSB_FIRST; 1825 + lookup->mode |= SPI_LSB_FIRST; 1883 1826 1884 1827 if (!acpi_dev_get_property(dev, "spiSPO", ACPI_TYPE_BUFFER, &obj) 1885 1828 && obj->buffer.length == 8 && *(u64 *)obj->buffer.pointer) 1886 - spi->mode |= SPI_CPOL; 1829 + lookup->mode |= SPI_CPOL; 1887 1830 1888 1831 if (!acpi_dev_get_property(dev, "spiSPH", ACPI_TYPE_BUFFER, &obj) 1889 1832 && obj->buffer.length == 8 && *(u64 *)obj->buffer.pointer) 1890 - spi->mode |= SPI_CPHA; 1833 + lookup->mode |= SPI_CPHA; 1891 1834 } 1892 1835 1893 1836 static int acpi_spi_add_resource(struct acpi_resource *ares, void *data) 1894 1837 { 1895 - struct spi_device *spi = data; 1896 - struct spi_controller *ctlr = spi->controller; 1838 + struct acpi_spi_lookup *lookup = data; 1839 + struct spi_controller *ctlr = lookup->ctlr; 1897 1840 1898 1841 if (ares->type == ACPI_RESOURCE_TYPE_SERIAL_BUS) { 1899 1842 struct acpi_resource_spi_serialbus *sb; 1843 + acpi_handle parent_handle; 1844 + acpi_status status; 1900 1845 1901 1846 sb = &ares->data.spi_serial_bus; 1902 1847 if (sb->type == ACPI_RESOURCE_SERIAL_TYPE_SPI) { 1848 + 1849 + status = acpi_get_handle(NULL, 1850 + sb->resource_source.string_ptr, 1851 + &parent_handle); 1852 + 1853 + if (ACPI_FAILURE(status) || 1854 + ACPI_HANDLE(ctlr->dev.parent) != parent_handle) 1855 + return -ENODEV; 1856 + 1903 1857 /* 1904 1858 * ACPI DeviceSelection numbering is handled by the 1905 1859 * host controller driver in Windows and can vary ··· 1923 1855 sb->device_selection); 1924 1856 if (cs < 0) 1925 1857 return cs; 1926 - spi->chip_select = cs; 1858 + lookup->chip_select = cs; 1927 1859 } else { 1928 - spi->chip_select = sb->device_selection; 1860 + lookup->chip_select = sb->device_selection; 1929 1861 } 1930 1862 1931 - spi->max_speed_hz = sb->connection_speed; 1863 + lookup->max_speed_hz = sb->connection_speed; 1932 1864 1933 1865 if (sb->clock_phase == ACPI_SPI_SECOND_PHASE) 1934 - spi->mode |= SPI_CPHA; 1866 + lookup->mode |= SPI_CPHA; 1935 1867 if (sb->clock_polarity == ACPI_SPI_START_HIGH) 1936 - spi->mode |= SPI_CPOL; 1868 + lookup->mode |= SPI_CPOL; 1937 1869 if (sb->device_polarity == ACPI_SPI_ACTIVE_HIGH) 1938 - spi->mode |= SPI_CS_HIGH; 1870 + lookup->mode |= SPI_CS_HIGH; 1939 1871 } 1940 - } else if (spi->irq < 0) { 1872 + } else if (lookup->irq < 0) { 1941 1873 struct resource r; 1942 1874 1943 1875 if (acpi_dev_resource_interrupt(ares, 0, &r)) 1944 - spi->irq = r.start; 1876 + lookup->irq = r.start; 1945 1877 } 1946 1878 1947 1879 /* Always tell the ACPI core to skip this resource */ ··· 1951 1883 static acpi_status acpi_register_spi_device(struct spi_controller *ctlr, 1952 1884 struct acpi_device *adev) 1953 1885 { 1886 + acpi_handle parent_handle = NULL; 1954 1887 struct list_head resource_list; 1888 + struct acpi_spi_lookup lookup = {}; 1955 1889 struct spi_device *spi; 1956 1890 int ret; 1957 1891 1958 1892 if (acpi_bus_get_status(adev) || !adev->status.present || 1959 1893 acpi_device_enumerated(adev)) 1894 + return AE_OK; 1895 + 1896 + lookup.ctlr = ctlr; 1897 + lookup.irq = -1; 1898 + 1899 + INIT_LIST_HEAD(&resource_list); 1900 + ret = acpi_dev_get_resources(adev, &resource_list, 1901 + acpi_spi_add_resource, &lookup); 1902 + acpi_dev_free_resource_list(&resource_list); 1903 + 1904 + if (ret < 0) 1905 + /* found SPI in _CRS but it points to another controller */ 1906 + return AE_OK; 1907 + 1908 + if (!lookup.max_speed_hz && 1909 + !ACPI_FAILURE(acpi_get_parent(adev->handle, &parent_handle)) && 1910 + ACPI_HANDLE(ctlr->dev.parent) == parent_handle) { 1911 + /* Apple does not use _CRS but nested devices for SPI slaves */ 1912 + acpi_spi_parse_apple_properties(adev, &lookup); 1913 + } 1914 + 1915 + if (!lookup.max_speed_hz) 1960 1916 return AE_OK; 1961 1917 1962 1918 spi = spi_alloc_device(ctlr); ··· 1991 1899 } 1992 1900 1993 1901 ACPI_COMPANION_SET(&spi->dev, adev); 1994 - spi->irq = -1; 1995 - 1996 - INIT_LIST_HEAD(&resource_list); 1997 - ret = acpi_dev_get_resources(adev, &resource_list, 1998 - acpi_spi_add_resource, spi); 1999 - acpi_dev_free_resource_list(&resource_list); 2000 - 2001 - acpi_spi_parse_apple_properties(spi); 2002 - 2003 - if (ret < 0 || !spi->max_speed_hz) { 2004 - spi_dev_put(spi); 2005 - return AE_OK; 2006 - } 1902 + spi->max_speed_hz = lookup.max_speed_hz; 1903 + spi->mode = lookup.mode; 1904 + spi->irq = lookup.irq; 1905 + spi->bits_per_word = lookup.bits_per_word; 1906 + spi->chip_select = lookup.chip_select; 2007 1907 2008 1908 acpi_set_modalias(adev, acpi_device_hid(adev), spi->modalias, 2009 1909 sizeof(spi->modalias)); ··· 2028 1944 return acpi_register_spi_device(ctlr, adev); 2029 1945 } 2030 1946 1947 + #define SPI_ACPI_ENUMERATE_MAX_DEPTH 32 1948 + 2031 1949 static void acpi_register_spi_devices(struct spi_controller *ctlr) 2032 1950 { 2033 1951 acpi_status status; ··· 2039 1953 if (!handle) 2040 1954 return; 2041 1955 2042 - status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1, 1956 + status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, 1957 + SPI_ACPI_ENUMERATE_MAX_DEPTH, 2043 1958 acpi_spi_add_device, NULL, ctlr, NULL); 2044 1959 if (ACPI_FAILURE(status)) 2045 1960 dev_warn(&ctlr->dev, "failed to enumerate SPI slaves\n"); ··· 2373 2286 if (status) 2374 2287 return status; 2375 2288 2376 - /* even if it's just one always-selected device, there must 2377 - * be at least one chipselect 2378 - */ 2379 - if (ctlr->num_chipselect == 0) 2380 - return -EINVAL; 2381 2289 if (ctlr->bus_num >= 0) { 2382 2290 /* devices with a fixed bus num must check-in with the num */ 2383 2291 mutex_lock(&board_lock); ··· 2442 2360 return status; 2443 2361 } 2444 2362 } 2363 + 2364 + /* 2365 + * Even if it's just one always-selected device, there must 2366 + * be at least one chipselect. 2367 + */ 2368 + if (!ctlr->num_chipselect) 2369 + return -EINVAL; 2445 2370 2446 2371 status = device_add(&ctlr->dev); 2447 2372 if (status < 0) { ··· 2559 2470 { 2560 2471 struct spi_controller *found; 2561 2472 int id = ctlr->bus_num; 2562 - int dummy; 2563 2473 2564 2474 /* First make sure that this controller was ever added */ 2565 2475 mutex_lock(&board_lock); ··· 2572 2484 list_del(&ctlr->list); 2573 2485 mutex_unlock(&board_lock); 2574 2486 2575 - dummy = device_for_each_child(&ctlr->dev, NULL, __unregister); 2487 + device_for_each_child(&ctlr->dev, NULL, __unregister); 2576 2488 device_unregister(&ctlr->dev); 2577 2489 /* free bus id */ 2578 2490 mutex_lock(&board_lock); ··· 2721 2633 */ 2722 2634 void spi_res_release(struct spi_controller *ctlr, struct spi_message *message) 2723 2635 { 2724 - struct spi_res *res; 2636 + struct spi_res *res, *tmp; 2725 2637 2726 - while (!list_empty(&message->resources)) { 2727 - res = list_last_entry(&message->resources, 2728 - struct spi_res, entry); 2729 - 2638 + list_for_each_entry_safe_reverse(res, tmp, &message->resources, entry) { 2730 2639 if (res->release) 2731 2640 res->release(ctlr, message, res->data); 2732 2641 ··· 2787 2702 2788 2703 /* allocate the structure using spi_res */ 2789 2704 rxfer = spi_res_alloc(msg->spi, __spi_replace_transfers_release, 2790 - insert * sizeof(struct spi_transfer) 2791 - + sizeof(struct spi_replaced_transfers) 2705 + struct_size(rxfer, inserted_transfers, insert) 2792 2706 + extradatasize, 2793 2707 gfp); 2794 2708 if (!rxfer) ··· 3167 3083 */ 3168 3084 message->frame_length = 0; 3169 3085 list_for_each_entry(xfer, &message->transfers, transfer_list) { 3086 + xfer->effective_speed_hz = 0; 3170 3087 message->frame_length += xfer->len; 3171 3088 if (!xfer->bits_per_word) 3172 3089 xfer->bits_per_word = spi->bits_per_word; ··· 3847 3762 * include needing to have boardinfo data structures be much more public. 3848 3763 */ 3849 3764 postcore_initcall(spi_init); 3850 -
+2
drivers/spi/spidev.c
··· 663 663 { .compatible = "ge,achc" }, 664 664 { .compatible = "semtech,sx1301" }, 665 665 { .compatible = "lwn,bk4" }, 666 + { .compatible = "dh,dhcom-board" }, 667 + { .compatible = "menlo,m53cpld" }, 666 668 {}, 667 669 }; 668 670 MODULE_DEVICE_TABLE(of, spidev_dt_ids);
-2
include/linux/platform_data/spi-mt65xx.h
··· 11 11 12 12 /* Board specific platform_data */ 13 13 struct mtk_chip_config { 14 - u32 tx_mlsb; 15 - u32 rx_mlsb; 16 14 u32 cs_pol; 17 15 u32 sample_sel; 18 16 };
+35
include/linux/spi/spi.h
··· 735 735 * @bits_per_word: select a bits_per_word other than the device default 736 736 * for this transfer. If 0 the default (from @spi_device) is used. 737 737 * @cs_change: affects chipselect after this transfer completes 738 + * @cs_change_delay: delay between cs deassert and assert when 739 + * @cs_change is set and @spi_transfer is not the last in @spi_message 740 + * @cs_change_delay_unit: unit of cs_change_delay 738 741 * @delay_usecs: microseconds to delay after this transfer before 739 742 * (optionally) changing the chipselect status, then starting 740 743 * the next transfer or completing this @spi_message. ··· 745 742 * (set by bits_per_word) transmission. 746 743 * @word_delay: clock cycles to inter word delay after each word size 747 744 * (set by bits_per_word) transmission. 745 + * @effective_speed_hz: the effective SCK-speed that was used to 746 + * transfer this transfer. Set to 0 if the spi bus driver does 747 + * not support it. 748 748 * @transfer_list: transfers are sequenced through @spi_message.transfers 749 749 * @tx_sg: Scatterlist for transmit, currently not for client use 750 750 * @rx_sg: Scatterlist for receive, currently not for client use ··· 830 824 u8 bits_per_word; 831 825 u8 word_delay_usecs; 832 826 u16 delay_usecs; 827 + u16 cs_change_delay; 828 + u8 cs_change_delay_unit; 829 + #define SPI_DELAY_UNIT_USECS 0 830 + #define SPI_DELAY_UNIT_NSECS 1 831 + #define SPI_DELAY_UNIT_SCK 2 833 832 u32 speed_hz; 834 833 u16 word_delay; 834 + 835 + u32 effective_speed_hz; 835 836 836 837 struct list_head transfer_list; 837 838 }; ··· 980 967 kfree(m); 981 968 } 982 969 970 + extern void spi_set_cs_timing(struct spi_device *spi, u8 setup, u8 hold, u8 inactive_dly); 971 + 983 972 extern int spi_setup(struct spi_device *spi); 984 973 extern int spi_async(struct spi_device *spi, struct spi_message *message); 985 974 extern int spi_async_locked(struct spi_device *spi, ··· 1010 995 1011 996 /* transfer size limit must not be greater than messsage size limit */ 1012 997 return min(tr_max, msg_max); 998 + } 999 + 1000 + /** 1001 + * spi_is_bpw_supported - Check if bits per word is supported 1002 + * @spi: SPI device 1003 + * @bpw: Bits per word 1004 + * 1005 + * This function checks to see if the SPI controller supports @bpw. 1006 + * 1007 + * Returns: 1008 + * True if @bpw is supported, false otherwise. 1009 + */ 1010 + static inline bool spi_is_bpw_supported(struct spi_device *spi, u32 bpw) 1011 + { 1012 + u32 bpw_mask = spi->master->bits_per_word_mask; 1013 + 1014 + if (bpw == 8 || (bpw <= 32 && bpw_mask & SPI_BPW_MASK(bpw))) 1015 + return true; 1016 + 1017 + return false; 1013 1018 } 1014 1019 1015 1020 /*---------------------------------------------------------------------------*/