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

Merge remote-tracking branches 'spi/topic/sirf', 'spi/topic/spidev' and 'spi/topic/zynq' into spi-next

+1804 -260
+2 -1
Documentation/devicetree/bindings/spi/spi-sirf.txt
··· 1 1 * CSR SiRFprimaII Serial Peripheral Interface 2 2 3 3 Required properties: 4 - - compatible : Should be "sirf,prima2-spi" 4 + - compatible : Should be "sirf,prima2-spi", "sirf,prima2-usp" 5 + or "sirf,atlas7-usp" 5 6 - reg : Offset and length of the register set for the device 6 7 - interrupts : Should contain SPI interrupt 7 8 - resets: phandle to the reset controller asserting this device in
+26
Documentation/devicetree/bindings/spi/spi-zynqmp-qspi.txt
··· 1 + Xilinx Zynq UltraScale+ MPSoC GQSPI controller Device Tree Bindings 2 + ------------------------------------------------------------------- 3 + 4 + Required properties: 5 + - compatible : Should be "xlnx,zynqmp-qspi-1.0". 6 + - reg : Physical base address and size of GQSPI registers map. 7 + - interrupts : Property with a value describing the interrupt 8 + number. 9 + - interrupt-parent : Must be core interrupt controller. 10 + - clock-names : List of input clock names - "ref_clk", "pclk" 11 + (See clock bindings for details). 12 + - clocks : Clock phandles (see clock bindings for details). 13 + 14 + Optional properties: 15 + - num-cs : Number of chip selects used. 16 + 17 + Example: 18 + qspi: spi@ff0f0000 { 19 + compatible = "xlnx,zynqmp-qspi-1.0"; 20 + clock-names = "ref_clk", "pclk"; 21 + clocks = <&misc_clk &misc_clk>; 22 + interrupts = <0 15 4>; 23 + interrupt-parent = <&gic>; 24 + num-cs = <1>; 25 + reg = <0x0 0xff0f0000 0x1000>,<0x0 0xc0000000 0x8000000>; 26 + };
+6
drivers/spi/Kconfig
··· 610 610 16 bit words in SPI mode 0, automatically asserting CS on transfer 611 611 start and deasserting on end. 612 612 613 + config SPI_ZYNQMP_GQSPI 614 + tristate "Xilinx ZynqMP GQSPI controller" 615 + depends on SPI_MASTER 616 + help 617 + Enables Xilinx GQSPI controller driver for Zynq UltraScale+ MPSoC. 618 + 613 619 config SPI_NUC900 614 620 tristate "Nuvoton NUC900 series SPI" 615 621 depends on ARCH_W90X900
+1
drivers/spi/Makefile
··· 89 89 obj-$(CONFIG_SPI_XCOMM) += spi-xcomm.o 90 90 obj-$(CONFIG_SPI_XILINX) += spi-xilinx.o 91 91 obj-$(CONFIG_SPI_XTENSA_XTFPGA) += spi-xtensa-xtfpga.o 92 + obj-$(CONFIG_SPI_ZYNQMP_GQSPI) += spi-zynqmp-gqspi.o
+636 -235
drivers/spi/spi-sirf.c
··· 26 26 #include <linux/reset.h> 27 27 28 28 #define DRIVER_NAME "sirfsoc_spi" 29 - 30 - #define SIRFSOC_SPI_CTRL 0x0000 31 - #define SIRFSOC_SPI_CMD 0x0004 32 - #define SIRFSOC_SPI_TX_RX_EN 0x0008 33 - #define SIRFSOC_SPI_INT_EN 0x000C 34 - #define SIRFSOC_SPI_INT_STATUS 0x0010 35 - #define SIRFSOC_SPI_TX_DMA_IO_CTRL 0x0100 36 - #define SIRFSOC_SPI_TX_DMA_IO_LEN 0x0104 37 - #define SIRFSOC_SPI_TXFIFO_CTRL 0x0108 38 - #define SIRFSOC_SPI_TXFIFO_LEVEL_CHK 0x010C 39 - #define SIRFSOC_SPI_TXFIFO_OP 0x0110 40 - #define SIRFSOC_SPI_TXFIFO_STATUS 0x0114 41 - #define SIRFSOC_SPI_TXFIFO_DATA 0x0118 42 - #define SIRFSOC_SPI_RX_DMA_IO_CTRL 0x0120 43 - #define SIRFSOC_SPI_RX_DMA_IO_LEN 0x0124 44 - #define SIRFSOC_SPI_RXFIFO_CTRL 0x0128 45 - #define SIRFSOC_SPI_RXFIFO_LEVEL_CHK 0x012C 46 - #define SIRFSOC_SPI_RXFIFO_OP 0x0130 47 - #define SIRFSOC_SPI_RXFIFO_STATUS 0x0134 48 - #define SIRFSOC_SPI_RXFIFO_DATA 0x0138 49 - #define SIRFSOC_SPI_DUMMY_DELAY_CTL 0x0144 50 - 51 29 /* SPI CTRL register defines */ 52 30 #define SIRFSOC_SPI_SLV_MODE BIT(16) 53 31 #define SIRFSOC_SPI_CMD_MODE BIT(17) ··· 58 80 #define SIRFSOC_SPI_TXFIFO_THD_INT_EN BIT(9) 59 81 #define SIRFSOC_SPI_FRM_END_INT_EN BIT(10) 60 82 61 - #define SIRFSOC_SPI_INT_MASK_ALL 0x1FFF 62 - 63 83 /* Interrupt status */ 64 84 #define SIRFSOC_SPI_RX_DONE BIT(0) 65 85 #define SIRFSOC_SPI_TX_DONE BIT(1) ··· 86 110 #define SIRFSOC_SPI_FIFO_WIDTH_BYTE (0 << 0) 87 111 #define SIRFSOC_SPI_FIFO_WIDTH_WORD (1 << 0) 88 112 #define SIRFSOC_SPI_FIFO_WIDTH_DWORD (2 << 0) 113 + /* USP related */ 114 + #define SIRFSOC_USP_SYNC_MODE BIT(0) 115 + #define SIRFSOC_USP_SLV_MODE BIT(1) 116 + #define SIRFSOC_USP_LSB BIT(4) 117 + #define SIRFSOC_USP_EN BIT(5) 118 + #define SIRFSOC_USP_RXD_FALLING_EDGE BIT(6) 119 + #define SIRFSOC_USP_TXD_FALLING_EDGE BIT(7) 120 + #define SIRFSOC_USP_CS_HIGH_VALID BIT(9) 121 + #define SIRFSOC_USP_SCLK_IDLE_STAT BIT(11) 122 + #define SIRFSOC_USP_TFS_IO_MODE BIT(14) 123 + #define SIRFSOC_USP_TFS_IO_INPUT BIT(19) 89 124 90 - /* FIFO Status */ 91 - #define SIRFSOC_SPI_FIFO_LEVEL_MASK 0xFF 92 - #define SIRFSOC_SPI_FIFO_FULL BIT(8) 93 - #define SIRFSOC_SPI_FIFO_EMPTY BIT(9) 125 + #define SIRFSOC_USP_RXD_DELAY_LEN_MASK 0xFF 126 + #define SIRFSOC_USP_TXD_DELAY_LEN_MASK 0xFF 127 + #define SIRFSOC_USP_RXD_DELAY_OFFSET 0 128 + #define SIRFSOC_USP_TXD_DELAY_OFFSET 8 129 + #define SIRFSOC_USP_RXD_DELAY_LEN 1 130 + #define SIRFSOC_USP_TXD_DELAY_LEN 1 131 + #define SIRFSOC_USP_CLK_DIVISOR_OFFSET 21 132 + #define SIRFSOC_USP_CLK_DIVISOR_MASK 0x3FF 133 + #define SIRFSOC_USP_CLK_10_11_MASK 0x3 134 + #define SIRFSOC_USP_CLK_10_11_OFFSET 30 135 + #define SIRFSOC_USP_CLK_12_15_MASK 0xF 136 + #define SIRFSOC_USP_CLK_12_15_OFFSET 24 94 137 95 - /* 256 bytes rx/tx FIFO */ 96 - #define SIRFSOC_SPI_FIFO_SIZE 256 97 - #define SIRFSOC_SPI_DAT_FRM_LEN_MAX (64 * 1024) 138 + #define SIRFSOC_USP_TX_DATA_OFFSET 0 139 + #define SIRFSOC_USP_TX_SYNC_OFFSET 8 140 + #define SIRFSOC_USP_TX_FRAME_OFFSET 16 141 + #define SIRFSOC_USP_TX_SHIFTER_OFFSET 24 98 142 99 - #define SIRFSOC_SPI_FIFO_SC(x) ((x) & 0x3F) 100 - #define SIRFSOC_SPI_FIFO_LC(x) (((x) & 0x3F) << 10) 101 - #define SIRFSOC_SPI_FIFO_HC(x) (((x) & 0x3F) << 20) 102 - #define SIRFSOC_SPI_FIFO_THD(x) (((x) & 0xFF) << 2) 143 + #define SIRFSOC_USP_TX_DATA_MASK 0xFF 144 + #define SIRFSOC_USP_TX_SYNC_MASK 0xFF 145 + #define SIRFSOC_USP_TX_FRAME_MASK 0xFF 146 + #define SIRFSOC_USP_TX_SHIFTER_MASK 0x1F 147 + 148 + #define SIRFSOC_USP_RX_DATA_OFFSET 0 149 + #define SIRFSOC_USP_RX_FRAME_OFFSET 8 150 + #define SIRFSOC_USP_RX_SHIFTER_OFFSET 16 151 + 152 + #define SIRFSOC_USP_RX_DATA_MASK 0xFF 153 + #define SIRFSOC_USP_RX_FRAME_MASK 0xFF 154 + #define SIRFSOC_USP_RX_SHIFTER_MASK 0x1F 155 + #define SIRFSOC_USP_CS_HIGH_VALUE BIT(1) 156 + 157 + #define SIRFSOC_SPI_FIFO_SC_OFFSET 0 158 + #define SIRFSOC_SPI_FIFO_LC_OFFSET 10 159 + #define SIRFSOC_SPI_FIFO_HC_OFFSET 20 160 + 161 + #define SIRFSOC_SPI_FIFO_FULL_MASK(s) (1 << ((s)->fifo_full_offset)) 162 + #define SIRFSOC_SPI_FIFO_EMPTY_MASK(s) (1 << ((s)->fifo_full_offset + 1)) 163 + #define SIRFSOC_SPI_FIFO_THD_MASK(s) ((s)->fifo_size - 1) 164 + #define SIRFSOC_SPI_FIFO_THD_OFFSET 2 165 + #define SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(s, val) \ 166 + ((val) & (s)->fifo_level_chk_mask) 167 + 168 + enum sirf_spi_type { 169 + SIRF_REAL_SPI, 170 + SIRF_USP_SPI_P2, 171 + SIRF_USP_SPI_A7, 172 + }; 103 173 104 174 /* 105 175 * only if the rx/tx buffer and transfer size are 4-bytes aligned, we use dma ··· 158 136 159 137 #define SIRFSOC_MAX_CMD_BYTES 4 160 138 #define SIRFSOC_SPI_DEFAULT_FRQ 1000000 139 + 140 + struct sirf_spi_register { 141 + /*SPI and USP-SPI common*/ 142 + u32 tx_rx_en; 143 + u32 int_en; 144 + u32 int_st; 145 + u32 tx_dma_io_ctrl; 146 + u32 tx_dma_io_len; 147 + u32 txfifo_ctrl; 148 + u32 txfifo_level_chk; 149 + u32 txfifo_op; 150 + u32 txfifo_st; 151 + u32 txfifo_data; 152 + u32 rx_dma_io_ctrl; 153 + u32 rx_dma_io_len; 154 + u32 rxfifo_ctrl; 155 + u32 rxfifo_level_chk; 156 + u32 rxfifo_op; 157 + u32 rxfifo_st; 158 + u32 rxfifo_data; 159 + /*SPI self*/ 160 + u32 spi_ctrl; 161 + u32 spi_cmd; 162 + u32 spi_dummy_delay_ctrl; 163 + /*USP-SPI self*/ 164 + u32 usp_mode1; 165 + u32 usp_mode2; 166 + u32 usp_tx_frame_ctrl; 167 + u32 usp_rx_frame_ctrl; 168 + u32 usp_pin_io_data; 169 + u32 usp_risc_dsp_mode; 170 + u32 usp_async_param_reg; 171 + u32 usp_irda_x_mode_div; 172 + u32 usp_sm_cfg; 173 + u32 usp_int_en_clr; 174 + }; 175 + 176 + static const struct sirf_spi_register real_spi_register = { 177 + .tx_rx_en = 0x8, 178 + .int_en = 0xc, 179 + .int_st = 0x10, 180 + .tx_dma_io_ctrl = 0x100, 181 + .tx_dma_io_len = 0x104, 182 + .txfifo_ctrl = 0x108, 183 + .txfifo_level_chk = 0x10c, 184 + .txfifo_op = 0x110, 185 + .txfifo_st = 0x114, 186 + .txfifo_data = 0x118, 187 + .rx_dma_io_ctrl = 0x120, 188 + .rx_dma_io_len = 0x124, 189 + .rxfifo_ctrl = 0x128, 190 + .rxfifo_level_chk = 0x12c, 191 + .rxfifo_op = 0x130, 192 + .rxfifo_st = 0x134, 193 + .rxfifo_data = 0x138, 194 + .spi_ctrl = 0x0, 195 + .spi_cmd = 0x4, 196 + .spi_dummy_delay_ctrl = 0x144, 197 + }; 198 + 199 + static const struct sirf_spi_register usp_spi_register = { 200 + .tx_rx_en = 0x10, 201 + .int_en = 0x14, 202 + .int_st = 0x18, 203 + .tx_dma_io_ctrl = 0x100, 204 + .tx_dma_io_len = 0x104, 205 + .txfifo_ctrl = 0x108, 206 + .txfifo_level_chk = 0x10c, 207 + .txfifo_op = 0x110, 208 + .txfifo_st = 0x114, 209 + .txfifo_data = 0x118, 210 + .rx_dma_io_ctrl = 0x120, 211 + .rx_dma_io_len = 0x124, 212 + .rxfifo_ctrl = 0x128, 213 + .rxfifo_level_chk = 0x12c, 214 + .rxfifo_op = 0x130, 215 + .rxfifo_st = 0x134, 216 + .rxfifo_data = 0x138, 217 + .usp_mode1 = 0x0, 218 + .usp_mode2 = 0x4, 219 + .usp_tx_frame_ctrl = 0x8, 220 + .usp_rx_frame_ctrl = 0xc, 221 + .usp_pin_io_data = 0x1c, 222 + .usp_risc_dsp_mode = 0x20, 223 + .usp_async_param_reg = 0x24, 224 + .usp_irda_x_mode_div = 0x28, 225 + .usp_sm_cfg = 0x2c, 226 + .usp_int_en_clr = 0x140, 227 + }; 161 228 162 229 struct sirfsoc_spi { 163 230 struct spi_bitbang bitbang; ··· 275 164 struct dma_chan *tx_chan; 276 165 dma_addr_t src_start; 277 166 dma_addr_t dst_start; 278 - void *dummypage; 279 167 int word_width; /* in bytes */ 280 168 281 169 /* ··· 283 173 */ 284 174 bool tx_by_cmd; 285 175 bool hw_cs; 176 + enum sirf_spi_type type; 177 + const struct sirf_spi_register *regs; 178 + unsigned int fifo_size; 179 + /* fifo empty offset is (fifo full offset + 1)*/ 180 + unsigned int fifo_full_offset; 181 + /* fifo_level_chk_mask is (fifo_size/4 - 1) */ 182 + unsigned int fifo_level_chk_mask; 183 + unsigned int dat_max_frm_len; 286 184 }; 185 + 186 + struct sirf_spi_comp_data { 187 + const struct sirf_spi_register *regs; 188 + enum sirf_spi_type type; 189 + unsigned int dat_max_frm_len; 190 + unsigned int fifo_size; 191 + void (*hwinit)(struct sirfsoc_spi *sspi); 192 + }; 193 + 194 + static void sirfsoc_usp_hwinit(struct sirfsoc_spi *sspi) 195 + { 196 + /* reset USP and let USP can operate */ 197 + writel(readl(sspi->base + sspi->regs->usp_mode1) & 198 + ~SIRFSOC_USP_EN, sspi->base + sspi->regs->usp_mode1); 199 + writel(readl(sspi->base + sspi->regs->usp_mode1) | 200 + SIRFSOC_USP_EN, sspi->base + sspi->regs->usp_mode1); 201 + } 287 202 288 203 static void spi_sirfsoc_rx_word_u8(struct sirfsoc_spi *sspi) 289 204 { 290 205 u32 data; 291 206 u8 *rx = sspi->rx; 292 207 293 - data = readl(sspi->base + SIRFSOC_SPI_RXFIFO_DATA); 208 + data = readl(sspi->base + sspi->regs->rxfifo_data); 294 209 295 210 if (rx) { 296 211 *rx++ = (u8) data; ··· 334 199 data = *tx++; 335 200 sspi->tx = tx; 336 201 } 337 - 338 - writel(data, sspi->base + SIRFSOC_SPI_TXFIFO_DATA); 202 + writel(data, sspi->base + sspi->regs->txfifo_data); 339 203 sspi->left_tx_word--; 340 204 } 341 205 ··· 343 209 u32 data; 344 210 u16 *rx = sspi->rx; 345 211 346 - data = readl(sspi->base + SIRFSOC_SPI_RXFIFO_DATA); 212 + data = readl(sspi->base + sspi->regs->rxfifo_data); 347 213 348 214 if (rx) { 349 215 *rx++ = (u16) data; ··· 363 229 sspi->tx = tx; 364 230 } 365 231 366 - writel(data, sspi->base + SIRFSOC_SPI_TXFIFO_DATA); 232 + writel(data, sspi->base + sspi->regs->txfifo_data); 367 233 sspi->left_tx_word--; 368 234 } 369 235 ··· 372 238 u32 data; 373 239 u32 *rx = sspi->rx; 374 240 375 - data = readl(sspi->base + SIRFSOC_SPI_RXFIFO_DATA); 241 + data = readl(sspi->base + sspi->regs->rxfifo_data); 376 242 377 243 if (rx) { 378 244 *rx++ = (u32) data; ··· 393 259 sspi->tx = tx; 394 260 } 395 261 396 - writel(data, sspi->base + SIRFSOC_SPI_TXFIFO_DATA); 262 + writel(data, sspi->base + sspi->regs->txfifo_data); 397 263 sspi->left_tx_word--; 398 264 } 399 265 400 266 static irqreturn_t spi_sirfsoc_irq(int irq, void *dev_id) 401 267 { 402 268 struct sirfsoc_spi *sspi = dev_id; 403 - u32 spi_stat = readl(sspi->base + SIRFSOC_SPI_INT_STATUS); 404 - if (sspi->tx_by_cmd && (spi_stat & SIRFSOC_SPI_FRM_END)) { 269 + u32 spi_stat; 270 + 271 + spi_stat = readl(sspi->base + sspi->regs->int_st); 272 + if (sspi->tx_by_cmd && sspi->type == SIRF_REAL_SPI 273 + && (spi_stat & SIRFSOC_SPI_FRM_END)) { 405 274 complete(&sspi->tx_done); 406 - writel(0x0, sspi->base + SIRFSOC_SPI_INT_EN); 407 - writel(SIRFSOC_SPI_INT_MASK_ALL, 408 - sspi->base + SIRFSOC_SPI_INT_STATUS); 275 + writel(0x0, sspi->base + sspi->regs->int_en); 276 + writel(readl(sspi->base + sspi->regs->int_st), 277 + sspi->base + sspi->regs->int_st); 409 278 return IRQ_HANDLED; 410 279 } 411 - 412 280 /* Error Conditions */ 413 281 if (spi_stat & SIRFSOC_SPI_RX_OFLOW || 414 282 spi_stat & SIRFSOC_SPI_TX_UFLOW) { 415 283 complete(&sspi->tx_done); 416 284 complete(&sspi->rx_done); 417 - writel(0x0, sspi->base + SIRFSOC_SPI_INT_EN); 418 - writel(SIRFSOC_SPI_INT_MASK_ALL, 419 - sspi->base + SIRFSOC_SPI_INT_STATUS); 285 + switch (sspi->type) { 286 + case SIRF_REAL_SPI: 287 + case SIRF_USP_SPI_P2: 288 + writel(0x0, sspi->base + sspi->regs->int_en); 289 + break; 290 + case SIRF_USP_SPI_A7: 291 + writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); 292 + break; 293 + } 294 + writel(readl(sspi->base + sspi->regs->int_st), 295 + sspi->base + sspi->regs->int_st); 420 296 return IRQ_HANDLED; 421 297 } 422 298 if (spi_stat & SIRFSOC_SPI_TXFIFO_EMPTY) 423 299 complete(&sspi->tx_done); 424 - while (!(readl(sspi->base + SIRFSOC_SPI_INT_STATUS) & 300 + while (!(readl(sspi->base + sspi->regs->int_st) & 425 301 SIRFSOC_SPI_RX_IO_DMA)) 426 302 cpu_relax(); 427 303 complete(&sspi->rx_done); 428 - writel(0x0, sspi->base + SIRFSOC_SPI_INT_EN); 429 - writel(SIRFSOC_SPI_INT_MASK_ALL, 430 - sspi->base + SIRFSOC_SPI_INT_STATUS); 304 + switch (sspi->type) { 305 + case SIRF_REAL_SPI: 306 + case SIRF_USP_SPI_P2: 307 + writel(0x0, sspi->base + sspi->regs->int_en); 308 + break; 309 + case SIRF_USP_SPI_A7: 310 + writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); 311 + break; 312 + } 313 + writel(readl(sspi->base + sspi->regs->int_st), 314 + sspi->base + sspi->regs->int_st); 431 315 432 316 return IRQ_HANDLED; 433 317 } ··· 465 313 u32 cmd; 466 314 467 315 sspi = spi_master_get_devdata(spi->master); 468 - writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 469 - writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 316 + writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->txfifo_op); 317 + writel(SIRFSOC_SPI_FIFO_START, sspi->base + sspi->regs->txfifo_op); 470 318 memcpy(&cmd, sspi->tx, t->len); 471 319 if (sspi->word_width == 1 && !(spi->mode & SPI_LSB_FIRST)) 472 320 cmd = cpu_to_be32(cmd) >> ··· 474 322 if (sspi->word_width == 2 && t->len == 4 && 475 323 (!(spi->mode & SPI_LSB_FIRST))) 476 324 cmd = ((cmd & 0xffff) << 16) | (cmd >> 16); 477 - writel(cmd, sspi->base + SIRFSOC_SPI_CMD); 325 + writel(cmd, sspi->base + sspi->regs->spi_cmd); 478 326 writel(SIRFSOC_SPI_FRM_END_INT_EN, 479 - sspi->base + SIRFSOC_SPI_INT_EN); 327 + sspi->base + sspi->regs->int_en); 480 328 writel(SIRFSOC_SPI_CMD_TX_EN, 481 - sspi->base + SIRFSOC_SPI_TX_RX_EN); 329 + sspi->base + sspi->regs->tx_rx_en); 482 330 if (wait_for_completion_timeout(&sspi->tx_done, timeout) == 0) { 483 331 dev_err(&spi->dev, "cmd transfer timeout\n"); 484 332 return; ··· 494 342 int timeout = t->len * 10; 495 343 496 344 sspi = spi_master_get_devdata(spi->master); 497 - writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 498 - writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 499 - writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 500 - writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 501 - writel(0, sspi->base + SIRFSOC_SPI_INT_EN); 502 - writel(SIRFSOC_SPI_INT_MASK_ALL, sspi->base + SIRFSOC_SPI_INT_STATUS); 503 - if (sspi->left_tx_word < SIRFSOC_SPI_DAT_FRM_LEN_MAX) { 504 - writel(readl(sspi->base + SIRFSOC_SPI_CTRL) | 505 - SIRFSOC_SPI_ENA_AUTO_CLR | SIRFSOC_SPI_MUL_DAT_MODE, 506 - sspi->base + SIRFSOC_SPI_CTRL); 507 - writel(sspi->left_tx_word - 1, 508 - sspi->base + SIRFSOC_SPI_TX_DMA_IO_LEN); 509 - writel(sspi->left_tx_word - 1, 510 - sspi->base + SIRFSOC_SPI_RX_DMA_IO_LEN); 345 + writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->rxfifo_op); 346 + writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->txfifo_op); 347 + switch (sspi->type) { 348 + case SIRF_REAL_SPI: 349 + writel(SIRFSOC_SPI_FIFO_START, 350 + sspi->base + sspi->regs->rxfifo_op); 351 + writel(SIRFSOC_SPI_FIFO_START, 352 + sspi->base + sspi->regs->txfifo_op); 353 + writel(0, sspi->base + sspi->regs->int_en); 354 + break; 355 + case SIRF_USP_SPI_P2: 356 + writel(0x0, sspi->base + sspi->regs->rxfifo_op); 357 + writel(0x0, sspi->base + sspi->regs->txfifo_op); 358 + writel(0, sspi->base + sspi->regs->int_en); 359 + break; 360 + case SIRF_USP_SPI_A7: 361 + writel(0x0, sspi->base + sspi->regs->rxfifo_op); 362 + writel(0x0, sspi->base + sspi->regs->txfifo_op); 363 + writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); 364 + break; 365 + } 366 + writel(readl(sspi->base + sspi->regs->int_st), 367 + sspi->base + sspi->regs->int_st); 368 + if (sspi->left_tx_word < sspi->dat_max_frm_len) { 369 + switch (sspi->type) { 370 + case SIRF_REAL_SPI: 371 + writel(readl(sspi->base + sspi->regs->spi_ctrl) | 372 + SIRFSOC_SPI_ENA_AUTO_CLR | 373 + SIRFSOC_SPI_MUL_DAT_MODE, 374 + sspi->base + sspi->regs->spi_ctrl); 375 + writel(sspi->left_tx_word - 1, 376 + sspi->base + sspi->regs->tx_dma_io_len); 377 + writel(sspi->left_tx_word - 1, 378 + sspi->base + sspi->regs->rx_dma_io_len); 379 + break; 380 + case SIRF_USP_SPI_P2: 381 + case SIRF_USP_SPI_A7: 382 + /*USP simulate SPI, tx/rx_dma_io_len indicates bytes*/ 383 + writel(sspi->left_tx_word * sspi->word_width, 384 + sspi->base + sspi->regs->tx_dma_io_len); 385 + writel(sspi->left_tx_word * sspi->word_width, 386 + sspi->base + sspi->regs->rx_dma_io_len); 387 + break; 388 + } 511 389 } else { 512 - writel(readl(sspi->base + SIRFSOC_SPI_CTRL), 513 - sspi->base + SIRFSOC_SPI_CTRL); 514 - writel(0, sspi->base + SIRFSOC_SPI_TX_DMA_IO_LEN); 515 - writel(0, sspi->base + SIRFSOC_SPI_RX_DMA_IO_LEN); 390 + if (sspi->type == SIRF_REAL_SPI) 391 + writel(readl(sspi->base + sspi->regs->spi_ctrl), 392 + sspi->base + sspi->regs->spi_ctrl); 393 + writel(0, sspi->base + sspi->regs->tx_dma_io_len); 394 + writel(0, sspi->base + sspi->regs->rx_dma_io_len); 516 395 } 517 396 sspi->dst_start = dma_map_single(&spi->dev, sspi->rx, t->len, 518 397 (t->tx_buf != t->rx_buf) ? ··· 568 385 dma_async_issue_pending(sspi->tx_chan); 569 386 dma_async_issue_pending(sspi->rx_chan); 570 387 writel(SIRFSOC_SPI_RX_EN | SIRFSOC_SPI_TX_EN, 571 - sspi->base + SIRFSOC_SPI_TX_RX_EN); 388 + sspi->base + sspi->regs->tx_rx_en); 389 + if (sspi->type == SIRF_USP_SPI_P2 || 390 + sspi->type == SIRF_USP_SPI_A7) { 391 + writel(SIRFSOC_SPI_FIFO_START, 392 + sspi->base + sspi->regs->rxfifo_op); 393 + writel(SIRFSOC_SPI_FIFO_START, 394 + sspi->base + sspi->regs->txfifo_op); 395 + } 572 396 if (wait_for_completion_timeout(&sspi->rx_done, timeout) == 0) { 573 397 dev_err(&spi->dev, "transfer timeout\n"); 574 398 dmaengine_terminate_all(sspi->rx_chan); ··· 588 398 */ 589 399 if (wait_for_completion_timeout(&sspi->tx_done, timeout) == 0) { 590 400 dev_err(&spi->dev, "transfer timeout\n"); 401 + if (sspi->type == SIRF_USP_SPI_P2 || 402 + sspi->type == SIRF_USP_SPI_A7) 403 + writel(0, sspi->base + sspi->regs->tx_rx_en); 591 404 dmaengine_terminate_all(sspi->tx_chan); 592 405 } 593 406 dma_unmap_single(&spi->dev, sspi->src_start, t->len, DMA_TO_DEVICE); 594 407 dma_unmap_single(&spi->dev, sspi->dst_start, t->len, DMA_FROM_DEVICE); 595 408 /* TX, RX FIFO stop */ 596 - writel(0, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 597 - writel(0, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 598 - if (sspi->left_tx_word >= SIRFSOC_SPI_DAT_FRM_LEN_MAX) 599 - writel(0, sspi->base + SIRFSOC_SPI_TX_RX_EN); 409 + writel(0, sspi->base + sspi->regs->rxfifo_op); 410 + writel(0, sspi->base + sspi->regs->txfifo_op); 411 + if (sspi->left_tx_word >= sspi->dat_max_frm_len) 412 + writel(0, sspi->base + sspi->regs->tx_rx_en); 413 + if (sspi->type == SIRF_USP_SPI_P2 || 414 + sspi->type == SIRF_USP_SPI_A7) 415 + writel(0, sspi->base + sspi->regs->tx_rx_en); 600 416 } 601 417 602 418 static void spi_sirfsoc_pio_transfer(struct spi_device *spi, ··· 610 414 { 611 415 struct sirfsoc_spi *sspi; 612 416 int timeout = t->len * 10; 417 + unsigned int data_units; 613 418 614 419 sspi = spi_master_get_devdata(spi->master); 615 420 do { 616 421 writel(SIRFSOC_SPI_FIFO_RESET, 617 - sspi->base + SIRFSOC_SPI_RXFIFO_OP); 422 + sspi->base + sspi->regs->rxfifo_op); 618 423 writel(SIRFSOC_SPI_FIFO_RESET, 619 - sspi->base + SIRFSOC_SPI_TXFIFO_OP); 620 - writel(SIRFSOC_SPI_FIFO_START, 621 - sspi->base + SIRFSOC_SPI_RXFIFO_OP); 622 - writel(SIRFSOC_SPI_FIFO_START, 623 - sspi->base + SIRFSOC_SPI_TXFIFO_OP); 624 - writel(0, sspi->base + SIRFSOC_SPI_INT_EN); 625 - writel(SIRFSOC_SPI_INT_MASK_ALL, 626 - sspi->base + SIRFSOC_SPI_INT_STATUS); 627 - writel(readl(sspi->base + SIRFSOC_SPI_CTRL) | 628 - SIRFSOC_SPI_MUL_DAT_MODE | SIRFSOC_SPI_ENA_AUTO_CLR, 629 - sspi->base + SIRFSOC_SPI_CTRL); 630 - writel(min(sspi->left_tx_word, (u32)(256 / sspi->word_width)) 631 - - 1, sspi->base + SIRFSOC_SPI_TX_DMA_IO_LEN); 632 - writel(min(sspi->left_rx_word, (u32)(256 / sspi->word_width)) 633 - - 1, sspi->base + SIRFSOC_SPI_RX_DMA_IO_LEN); 634 - while (!((readl(sspi->base + SIRFSOC_SPI_TXFIFO_STATUS) 635 - & SIRFSOC_SPI_FIFO_FULL)) && sspi->left_tx_word) 424 + sspi->base + sspi->regs->txfifo_op); 425 + switch (sspi->type) { 426 + case SIRF_USP_SPI_P2: 427 + writel(0x0, sspi->base + sspi->regs->rxfifo_op); 428 + writel(0x0, sspi->base + sspi->regs->txfifo_op); 429 + writel(0, sspi->base + sspi->regs->int_en); 430 + writel(readl(sspi->base + sspi->regs->int_st), 431 + sspi->base + sspi->regs->int_st); 432 + writel(min((sspi->left_tx_word * sspi->word_width), 433 + sspi->fifo_size), 434 + sspi->base + sspi->regs->tx_dma_io_len); 435 + writel(min((sspi->left_rx_word * sspi->word_width), 436 + sspi->fifo_size), 437 + sspi->base + sspi->regs->rx_dma_io_len); 438 + break; 439 + case SIRF_USP_SPI_A7: 440 + writel(0x0, sspi->base + sspi->regs->rxfifo_op); 441 + writel(0x0, sspi->base + sspi->regs->txfifo_op); 442 + writel(~0UL, sspi->base + sspi->regs->usp_int_en_clr); 443 + writel(readl(sspi->base + sspi->regs->int_st), 444 + sspi->base + sspi->regs->int_st); 445 + writel(min((sspi->left_tx_word * sspi->word_width), 446 + sspi->fifo_size), 447 + sspi->base + sspi->regs->tx_dma_io_len); 448 + writel(min((sspi->left_rx_word * sspi->word_width), 449 + sspi->fifo_size), 450 + sspi->base + sspi->regs->rx_dma_io_len); 451 + break; 452 + case SIRF_REAL_SPI: 453 + writel(SIRFSOC_SPI_FIFO_START, 454 + sspi->base + sspi->regs->rxfifo_op); 455 + writel(SIRFSOC_SPI_FIFO_START, 456 + sspi->base + sspi->regs->txfifo_op); 457 + writel(0, sspi->base + sspi->regs->int_en); 458 + writel(readl(sspi->base + sspi->regs->int_st), 459 + sspi->base + sspi->regs->int_st); 460 + writel(readl(sspi->base + sspi->regs->spi_ctrl) | 461 + SIRFSOC_SPI_MUL_DAT_MODE | 462 + SIRFSOC_SPI_ENA_AUTO_CLR, 463 + sspi->base + sspi->regs->spi_ctrl); 464 + data_units = sspi->fifo_size / sspi->word_width; 465 + writel(min(sspi->left_tx_word, data_units) - 1, 466 + sspi->base + sspi->regs->tx_dma_io_len); 467 + writel(min(sspi->left_rx_word, data_units) - 1, 468 + sspi->base + sspi->regs->rx_dma_io_len); 469 + break; 470 + } 471 + while (!((readl(sspi->base + sspi->regs->txfifo_st) 472 + & SIRFSOC_SPI_FIFO_FULL_MASK(sspi))) && 473 + sspi->left_tx_word) 636 474 sspi->tx_word(sspi); 637 475 writel(SIRFSOC_SPI_TXFIFO_EMPTY_INT_EN | 638 476 SIRFSOC_SPI_TX_UFLOW_INT_EN | 639 477 SIRFSOC_SPI_RX_OFLOW_INT_EN | 640 478 SIRFSOC_SPI_RX_IO_DMA_INT_EN, 641 - sspi->base + SIRFSOC_SPI_INT_EN); 479 + sspi->base + sspi->regs->int_en); 642 480 writel(SIRFSOC_SPI_RX_EN | SIRFSOC_SPI_TX_EN, 643 - sspi->base + SIRFSOC_SPI_TX_RX_EN); 481 + sspi->base + sspi->regs->tx_rx_en); 482 + if (sspi->type == SIRF_USP_SPI_P2 || 483 + sspi->type == SIRF_USP_SPI_A7) { 484 + writel(SIRFSOC_SPI_FIFO_START, 485 + sspi->base + sspi->regs->rxfifo_op); 486 + writel(SIRFSOC_SPI_FIFO_START, 487 + sspi->base + sspi->regs->txfifo_op); 488 + } 644 489 if (!wait_for_completion_timeout(&sspi->tx_done, timeout) || 645 490 !wait_for_completion_timeout(&sspi->rx_done, timeout)) { 646 491 dev_err(&spi->dev, "transfer timeout\n"); 492 + if (sspi->type == SIRF_USP_SPI_P2 || 493 + sspi->type == SIRF_USP_SPI_A7) 494 + writel(0, sspi->base + sspi->regs->tx_rx_en); 647 495 break; 648 496 } 649 - while (!((readl(sspi->base + SIRFSOC_SPI_RXFIFO_STATUS) 650 - & SIRFSOC_SPI_FIFO_EMPTY)) && sspi->left_rx_word) 497 + while (!((readl(sspi->base + sspi->regs->rxfifo_st) 498 + & SIRFSOC_SPI_FIFO_EMPTY_MASK(sspi))) && 499 + sspi->left_rx_word) 651 500 sspi->rx_word(sspi); 652 - writel(0, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 653 - writel(0, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 501 + if (sspi->type == SIRF_USP_SPI_P2 || 502 + sspi->type == SIRF_USP_SPI_A7) 503 + writel(0, sspi->base + sspi->regs->tx_rx_en); 504 + writel(0, sspi->base + sspi->regs->rxfifo_op); 505 + writel(0, sspi->base + sspi->regs->txfifo_op); 654 506 } while (sspi->left_tx_word != 0 || sspi->left_rx_word != 0); 655 507 } 656 508 657 509 static int spi_sirfsoc_transfer(struct spi_device *spi, struct spi_transfer *t) 658 510 { 659 511 struct sirfsoc_spi *sspi; 660 - sspi = spi_master_get_devdata(spi->master); 661 512 662 - sspi->tx = t->tx_buf ? t->tx_buf : sspi->dummypage; 663 - sspi->rx = t->rx_buf ? t->rx_buf : sspi->dummypage; 513 + sspi = spi_master_get_devdata(spi->master); 514 + sspi->tx = t->tx_buf; 515 + sspi->rx = t->rx_buf; 664 516 sspi->left_tx_word = sspi->left_rx_word = t->len / sspi->word_width; 665 517 reinit_completion(&sspi->rx_done); 666 518 reinit_completion(&sspi->tx_done); ··· 717 473 * null, just fill command data into command register and wait for its 718 474 * completion. 719 475 */ 720 - if (sspi->tx_by_cmd) 476 + if (sspi->type == SIRF_REAL_SPI && sspi->tx_by_cmd) 721 477 spi_sirfsoc_cmd_transfer(spi, t); 722 478 else if (IS_DMA_VALID(t)) 723 479 spi_sirfsoc_dma_transfer(spi, t); ··· 732 488 struct sirfsoc_spi *sspi = spi_master_get_devdata(spi->master); 733 489 734 490 if (sspi->hw_cs) { 735 - u32 regval = readl(sspi->base + SIRFSOC_SPI_CTRL); 736 - switch (value) { 737 - case BITBANG_CS_ACTIVE: 738 - if (spi->mode & SPI_CS_HIGH) 739 - regval |= SIRFSOC_SPI_CS_IO_OUT; 740 - else 741 - regval &= ~SIRFSOC_SPI_CS_IO_OUT; 491 + u32 regval; 492 + 493 + switch (sspi->type) { 494 + case SIRF_REAL_SPI: 495 + regval = readl(sspi->base + sspi->regs->spi_ctrl); 496 + switch (value) { 497 + case BITBANG_CS_ACTIVE: 498 + if (spi->mode & SPI_CS_HIGH) 499 + regval |= SIRFSOC_SPI_CS_IO_OUT; 500 + else 501 + regval &= ~SIRFSOC_SPI_CS_IO_OUT; 502 + break; 503 + case BITBANG_CS_INACTIVE: 504 + if (spi->mode & SPI_CS_HIGH) 505 + regval &= ~SIRFSOC_SPI_CS_IO_OUT; 506 + else 507 + regval |= SIRFSOC_SPI_CS_IO_OUT; 508 + break; 509 + } 510 + writel(regval, sspi->base + sspi->regs->spi_ctrl); 742 511 break; 743 - case BITBANG_CS_INACTIVE: 744 - if (spi->mode & SPI_CS_HIGH) 745 - regval &= ~SIRFSOC_SPI_CS_IO_OUT; 746 - else 747 - regval |= SIRFSOC_SPI_CS_IO_OUT; 512 + case SIRF_USP_SPI_P2: 513 + case SIRF_USP_SPI_A7: 514 + regval = readl(sspi->base + 515 + sspi->regs->usp_pin_io_data); 516 + switch (value) { 517 + case BITBANG_CS_ACTIVE: 518 + if (spi->mode & SPI_CS_HIGH) 519 + regval |= SIRFSOC_USP_CS_HIGH_VALUE; 520 + else 521 + regval &= ~(SIRFSOC_USP_CS_HIGH_VALUE); 522 + break; 523 + case BITBANG_CS_INACTIVE: 524 + if (spi->mode & SPI_CS_HIGH) 525 + regval &= ~(SIRFSOC_USP_CS_HIGH_VALUE); 526 + else 527 + regval |= SIRFSOC_USP_CS_HIGH_VALUE; 528 + break; 529 + } 530 + writel(regval, 531 + sspi->base + sspi->regs->usp_pin_io_data); 748 532 break; 749 533 } 750 - writel(regval, sspi->base + SIRFSOC_SPI_CTRL); 751 534 } else { 752 535 switch (value) { 753 536 case BITBANG_CS_ACTIVE: ··· 789 518 } 790 519 } 791 520 521 + static int spi_sirfsoc_config_mode(struct spi_device *spi) 522 + { 523 + struct sirfsoc_spi *sspi; 524 + u32 regval, usp_mode1; 525 + 526 + sspi = spi_master_get_devdata(spi->master); 527 + regval = readl(sspi->base + sspi->regs->spi_ctrl); 528 + usp_mode1 = readl(sspi->base + sspi->regs->usp_mode1); 529 + if (!(spi->mode & SPI_CS_HIGH)) { 530 + regval |= SIRFSOC_SPI_CS_IDLE_STAT; 531 + usp_mode1 &= ~SIRFSOC_USP_CS_HIGH_VALID; 532 + } else { 533 + regval &= ~SIRFSOC_SPI_CS_IDLE_STAT; 534 + usp_mode1 |= SIRFSOC_USP_CS_HIGH_VALID; 535 + } 536 + if (!(spi->mode & SPI_LSB_FIRST)) { 537 + regval |= SIRFSOC_SPI_TRAN_MSB; 538 + usp_mode1 &= ~SIRFSOC_USP_LSB; 539 + } else { 540 + regval &= ~SIRFSOC_SPI_TRAN_MSB; 541 + usp_mode1 |= SIRFSOC_USP_LSB; 542 + } 543 + if (spi->mode & SPI_CPOL) { 544 + regval |= SIRFSOC_SPI_CLK_IDLE_STAT; 545 + usp_mode1 |= SIRFSOC_USP_SCLK_IDLE_STAT; 546 + } else { 547 + regval &= ~SIRFSOC_SPI_CLK_IDLE_STAT; 548 + usp_mode1 &= ~SIRFSOC_USP_SCLK_IDLE_STAT; 549 + } 550 + /* 551 + * Data should be driven at least 1/2 cycle before the fetch edge 552 + * to make sure that data gets stable at the fetch edge. 553 + */ 554 + if (((spi->mode & SPI_CPOL) && (spi->mode & SPI_CPHA)) || 555 + (!(spi->mode & SPI_CPOL) && !(spi->mode & SPI_CPHA))) { 556 + regval &= ~SIRFSOC_SPI_DRV_POS_EDGE; 557 + usp_mode1 |= (SIRFSOC_USP_TXD_FALLING_EDGE | 558 + SIRFSOC_USP_RXD_FALLING_EDGE); 559 + } else { 560 + regval |= SIRFSOC_SPI_DRV_POS_EDGE; 561 + usp_mode1 &= ~(SIRFSOC_USP_RXD_FALLING_EDGE | 562 + SIRFSOC_USP_TXD_FALLING_EDGE); 563 + } 564 + writel((SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size - 2) << 565 + SIRFSOC_SPI_FIFO_SC_OFFSET) | 566 + (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size / 2) << 567 + SIRFSOC_SPI_FIFO_LC_OFFSET) | 568 + (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, 2) << 569 + SIRFSOC_SPI_FIFO_HC_OFFSET), 570 + sspi->base + sspi->regs->txfifo_level_chk); 571 + writel((SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, 2) << 572 + SIRFSOC_SPI_FIFO_SC_OFFSET) | 573 + (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size / 2) << 574 + SIRFSOC_SPI_FIFO_LC_OFFSET) | 575 + (SIRFSOC_SPI_FIFO_LEVEL_CHK_MASK(sspi, sspi->fifo_size - 2) << 576 + SIRFSOC_SPI_FIFO_HC_OFFSET), 577 + sspi->base + sspi->regs->rxfifo_level_chk); 578 + /* 579 + * it should never set to hardware cs mode because in hardware cs mode, 580 + * cs signal can't controlled by driver. 581 + */ 582 + switch (sspi->type) { 583 + case SIRF_REAL_SPI: 584 + regval |= SIRFSOC_SPI_CS_IO_MODE; 585 + writel(regval, sspi->base + sspi->regs->spi_ctrl); 586 + break; 587 + case SIRF_USP_SPI_P2: 588 + case SIRF_USP_SPI_A7: 589 + usp_mode1 |= SIRFSOC_USP_SYNC_MODE; 590 + usp_mode1 |= SIRFSOC_USP_TFS_IO_MODE; 591 + usp_mode1 &= ~SIRFSOC_USP_TFS_IO_INPUT; 592 + writel(usp_mode1, sspi->base + sspi->regs->usp_mode1); 593 + break; 594 + } 595 + 596 + return 0; 597 + } 598 + 792 599 static int 793 600 spi_sirfsoc_setup_transfer(struct spi_device *spi, struct spi_transfer *t) 794 601 { 795 602 struct sirfsoc_spi *sspi; 796 603 u8 bits_per_word = 0; 797 604 int hz = 0; 798 - u32 regval; 799 - u32 txfifo_ctrl, rxfifo_ctrl; 800 - u32 fifo_size = SIRFSOC_SPI_FIFO_SIZE / 4; 605 + u32 regval, txfifo_ctrl, rxfifo_ctrl, tx_frm_ctl, rx_frm_ctl, usp_mode2; 801 606 802 607 sspi = spi_master_get_devdata(spi->master); 803 608 804 609 bits_per_word = (t) ? t->bits_per_word : spi->bits_per_word; 805 610 hz = t && t->speed_hz ? t->speed_hz : spi->max_speed_hz; 806 611 807 - regval = (sspi->ctrl_freq / (2 * hz)) - 1; 612 + usp_mode2 = regval = (sspi->ctrl_freq / (2 * hz)) - 1; 808 613 if (regval > 0xFFFF || regval < 0) { 809 614 dev_err(&spi->dev, "Speed %d not supported\n", hz); 810 615 return -EINVAL; 811 616 } 812 - 813 617 switch (bits_per_word) { 814 618 case 8: 815 619 regval |= SIRFSOC_SPI_TRAN_DAT_FORMAT_8; ··· 905 559 sspi->tx_word = spi_sirfsoc_tx_word_u32; 906 560 break; 907 561 default: 908 - BUG(); 562 + dev_err(&spi->dev, "bpw %d not supported\n", bits_per_word); 563 + return -EINVAL; 909 564 } 910 - 911 565 sspi->word_width = DIV_ROUND_UP(bits_per_word, 8); 912 - txfifo_ctrl = SIRFSOC_SPI_FIFO_THD(SIRFSOC_SPI_FIFO_SIZE / 2) | 913 - (sspi->word_width >> 1); 914 - rxfifo_ctrl = SIRFSOC_SPI_FIFO_THD(SIRFSOC_SPI_FIFO_SIZE / 2) | 915 - (sspi->word_width >> 1); 916 - 917 - if (!(spi->mode & SPI_CS_HIGH)) 918 - regval |= SIRFSOC_SPI_CS_IDLE_STAT; 919 - if (!(spi->mode & SPI_LSB_FIRST)) 920 - regval |= SIRFSOC_SPI_TRAN_MSB; 921 - if (spi->mode & SPI_CPOL) 922 - regval |= SIRFSOC_SPI_CLK_IDLE_STAT; 923 - 924 - /* 925 - * Data should be driven at least 1/2 cycle before the fetch edge 926 - * to make sure that data gets stable at the fetch edge. 927 - */ 928 - if (((spi->mode & SPI_CPOL) && (spi->mode & SPI_CPHA)) || 929 - (!(spi->mode & SPI_CPOL) && !(spi->mode & SPI_CPHA))) 930 - regval &= ~SIRFSOC_SPI_DRV_POS_EDGE; 931 - else 932 - regval |= SIRFSOC_SPI_DRV_POS_EDGE; 933 - 934 - writel(SIRFSOC_SPI_FIFO_SC(fifo_size - 2) | 935 - SIRFSOC_SPI_FIFO_LC(fifo_size / 2) | 936 - SIRFSOC_SPI_FIFO_HC(2), 937 - sspi->base + SIRFSOC_SPI_TXFIFO_LEVEL_CHK); 938 - writel(SIRFSOC_SPI_FIFO_SC(2) | 939 - SIRFSOC_SPI_FIFO_LC(fifo_size / 2) | 940 - SIRFSOC_SPI_FIFO_HC(fifo_size - 2), 941 - sspi->base + SIRFSOC_SPI_RXFIFO_LEVEL_CHK); 942 - writel(txfifo_ctrl, sspi->base + SIRFSOC_SPI_TXFIFO_CTRL); 943 - writel(rxfifo_ctrl, sspi->base + SIRFSOC_SPI_RXFIFO_CTRL); 944 - 945 - if (t && t->tx_buf && !t->rx_buf && (t->len <= SIRFSOC_MAX_CMD_BYTES)) { 946 - regval |= (SIRFSOC_SPI_CMD_BYTE_NUM((t->len - 1)) | 947 - SIRFSOC_SPI_CMD_MODE); 948 - sspi->tx_by_cmd = true; 949 - } else { 950 - regval &= ~SIRFSOC_SPI_CMD_MODE; 951 - sspi->tx_by_cmd = false; 566 + txfifo_ctrl = (((sspi->fifo_size / 2) & 567 + SIRFSOC_SPI_FIFO_THD_MASK(sspi)) 568 + << SIRFSOC_SPI_FIFO_THD_OFFSET) | 569 + (sspi->word_width >> 1); 570 + rxfifo_ctrl = (((sspi->fifo_size / 2) & 571 + SIRFSOC_SPI_FIFO_THD_MASK(sspi)) 572 + << SIRFSOC_SPI_FIFO_THD_OFFSET) | 573 + (sspi->word_width >> 1); 574 + writel(txfifo_ctrl, sspi->base + sspi->regs->txfifo_ctrl); 575 + writel(rxfifo_ctrl, sspi->base + sspi->regs->rxfifo_ctrl); 576 + if (sspi->type == SIRF_USP_SPI_P2 || 577 + sspi->type == SIRF_USP_SPI_A7) { 578 + tx_frm_ctl = 0; 579 + tx_frm_ctl |= ((bits_per_word - 1) & SIRFSOC_USP_TX_DATA_MASK) 580 + << SIRFSOC_USP_TX_DATA_OFFSET; 581 + tx_frm_ctl |= ((bits_per_word + 1 + SIRFSOC_USP_TXD_DELAY_LEN 582 + - 1) & SIRFSOC_USP_TX_SYNC_MASK) << 583 + SIRFSOC_USP_TX_SYNC_OFFSET; 584 + tx_frm_ctl |= ((bits_per_word + 1 + SIRFSOC_USP_TXD_DELAY_LEN 585 + + 2 - 1) & SIRFSOC_USP_TX_FRAME_MASK) << 586 + SIRFSOC_USP_TX_FRAME_OFFSET; 587 + tx_frm_ctl |= ((bits_per_word - 1) & 588 + SIRFSOC_USP_TX_SHIFTER_MASK) << 589 + SIRFSOC_USP_TX_SHIFTER_OFFSET; 590 + rx_frm_ctl = 0; 591 + rx_frm_ctl |= ((bits_per_word - 1) & SIRFSOC_USP_RX_DATA_MASK) 592 + << SIRFSOC_USP_RX_DATA_OFFSET; 593 + rx_frm_ctl |= ((bits_per_word + 1 + SIRFSOC_USP_RXD_DELAY_LEN 594 + + 2 - 1) & SIRFSOC_USP_RX_FRAME_MASK) << 595 + SIRFSOC_USP_RX_FRAME_OFFSET; 596 + rx_frm_ctl |= ((bits_per_word - 1) 597 + & SIRFSOC_USP_RX_SHIFTER_MASK) << 598 + SIRFSOC_USP_RX_SHIFTER_OFFSET; 599 + writel(tx_frm_ctl | (((usp_mode2 >> 10) & 600 + SIRFSOC_USP_CLK_10_11_MASK) << 601 + SIRFSOC_USP_CLK_10_11_OFFSET), 602 + sspi->base + sspi->regs->usp_tx_frame_ctrl); 603 + writel(rx_frm_ctl | (((usp_mode2 >> 12) & 604 + SIRFSOC_USP_CLK_12_15_MASK) << 605 + SIRFSOC_USP_CLK_12_15_OFFSET), 606 + sspi->base + sspi->regs->usp_rx_frame_ctrl); 607 + writel(readl(sspi->base + sspi->regs->usp_mode2) | 608 + ((usp_mode2 & SIRFSOC_USP_CLK_DIVISOR_MASK) << 609 + SIRFSOC_USP_CLK_DIVISOR_OFFSET) | 610 + (SIRFSOC_USP_RXD_DELAY_LEN << 611 + SIRFSOC_USP_RXD_DELAY_OFFSET) | 612 + (SIRFSOC_USP_TXD_DELAY_LEN << 613 + SIRFSOC_USP_TXD_DELAY_OFFSET), 614 + sspi->base + sspi->regs->usp_mode2); 952 615 } 953 - /* 954 - * it should never set to hardware cs mode because in hardware cs mode, 955 - * cs signal can't controlled by driver. 956 - */ 957 - regval |= SIRFSOC_SPI_CS_IO_MODE; 958 - writel(regval, sspi->base + SIRFSOC_SPI_CTRL); 959 - 616 + if (sspi->type == SIRF_REAL_SPI) 617 + writel(regval, sspi->base + sspi->regs->spi_ctrl); 618 + spi_sirfsoc_config_mode(spi); 619 + if (sspi->type == SIRF_REAL_SPI) { 620 + if (t && t->tx_buf && !t->rx_buf && 621 + (t->len <= SIRFSOC_MAX_CMD_BYTES)) { 622 + sspi->tx_by_cmd = true; 623 + writel(readl(sspi->base + sspi->regs->spi_ctrl) | 624 + (SIRFSOC_SPI_CMD_BYTE_NUM((t->len - 1)) | 625 + SIRFSOC_SPI_CMD_MODE), 626 + sspi->base + sspi->regs->spi_ctrl); 627 + } else { 628 + sspi->tx_by_cmd = false; 629 + writel(readl(sspi->base + sspi->regs->spi_ctrl) & 630 + ~SIRFSOC_SPI_CMD_MODE, 631 + sspi->base + sspi->regs->spi_ctrl); 632 + } 633 + } 960 634 if (IS_DMA_VALID(t)) { 961 635 /* Enable DMA mode for RX, TX */ 962 - writel(0, sspi->base + SIRFSOC_SPI_TX_DMA_IO_CTRL); 636 + writel(0, sspi->base + sspi->regs->tx_dma_io_ctrl); 963 637 writel(SIRFSOC_SPI_RX_DMA_FLUSH, 964 - sspi->base + SIRFSOC_SPI_RX_DMA_IO_CTRL); 638 + sspi->base + sspi->regs->rx_dma_io_ctrl); 965 639 } else { 966 640 /* Enable IO mode for RX, TX */ 967 641 writel(SIRFSOC_SPI_IO_MODE_SEL, 968 - sspi->base + SIRFSOC_SPI_TX_DMA_IO_CTRL); 642 + sspi->base + sspi->regs->tx_dma_io_ctrl); 969 643 writel(SIRFSOC_SPI_IO_MODE_SEL, 970 - sspi->base + SIRFSOC_SPI_RX_DMA_IO_CTRL); 644 + sspi->base + sspi->regs->rx_dma_io_ctrl); 971 645 } 972 - 973 646 return 0; 974 647 } 975 648 976 649 static int spi_sirfsoc_setup(struct spi_device *spi) 977 650 { 978 651 struct sirfsoc_spi *sspi; 652 + int ret = 0; 979 653 980 654 sspi = spi_master_get_devdata(spi->master); 981 - 982 655 if (spi->cs_gpio == -ENOENT) 983 656 sspi->hw_cs = true; 984 - else 657 + else { 985 658 sspi->hw_cs = false; 986 - return spi_sirfsoc_setup_transfer(spi, NULL); 659 + if (!spi_get_ctldata(spi)) { 660 + void *cs = kmalloc(sizeof(int), GFP_KERNEL); 661 + if (!cs) { 662 + ret = -ENOMEM; 663 + goto exit; 664 + } 665 + ret = gpio_is_valid(spi->cs_gpio); 666 + if (!ret) { 667 + dev_err(&spi->dev, "no valid gpio\n"); 668 + ret = -ENOENT; 669 + goto exit; 670 + } 671 + ret = gpio_request(spi->cs_gpio, DRIVER_NAME); 672 + if (ret) { 673 + dev_err(&spi->dev, "failed to request gpio\n"); 674 + goto exit; 675 + } 676 + spi_set_ctldata(spi, cs); 677 + } 678 + } 679 + spi_sirfsoc_config_mode(spi); 680 + spi_sirfsoc_chipselect(spi, BITBANG_CS_INACTIVE); 681 + exit: 682 + return ret; 987 683 } 684 + 685 + static void spi_sirfsoc_cleanup(struct spi_device *spi) 686 + { 687 + if (spi_get_ctldata(spi)) { 688 + gpio_free(spi->cs_gpio); 689 + kfree(spi_get_ctldata(spi)); 690 + } 691 + } 692 + 693 + static const struct sirf_spi_comp_data sirf_real_spi = { 694 + .regs = &real_spi_register, 695 + .type = SIRF_REAL_SPI, 696 + .dat_max_frm_len = 64 * 1024, 697 + .fifo_size = 256, 698 + }; 699 + 700 + static const struct sirf_spi_comp_data sirf_usp_spi_p2 = { 701 + .regs = &usp_spi_register, 702 + .type = SIRF_USP_SPI_P2, 703 + .dat_max_frm_len = 1024 * 1024, 704 + .fifo_size = 128, 705 + .hwinit = sirfsoc_usp_hwinit, 706 + }; 707 + 708 + static const struct sirf_spi_comp_data sirf_usp_spi_a7 = { 709 + .regs = &usp_spi_register, 710 + .type = SIRF_USP_SPI_A7, 711 + .dat_max_frm_len = 1024 * 1024, 712 + .fifo_size = 512, 713 + .hwinit = sirfsoc_usp_hwinit, 714 + }; 715 + 716 + static const struct of_device_id spi_sirfsoc_of_match[] = { 717 + { .compatible = "sirf,prima2-spi", .data = &sirf_real_spi}, 718 + { .compatible = "sirf,prima2-usp-spi", .data = &sirf_usp_spi_p2}, 719 + { .compatible = "sirf,atlas7-usp-spi", .data = &sirf_usp_spi_a7}, 720 + {} 721 + }; 722 + MODULE_DEVICE_TABLE(of, spi_sirfsoc_of_match); 988 723 989 724 static int spi_sirfsoc_probe(struct platform_device *pdev) 990 725 { 991 726 struct sirfsoc_spi *sspi; 992 727 struct spi_master *master; 993 728 struct resource *mem_res; 729 + struct sirf_spi_comp_data *spi_comp_data; 994 730 int irq; 995 - int i, ret; 731 + int ret; 732 + const struct of_device_id *match; 996 733 997 734 ret = device_reset(&pdev->dev); 998 735 if (ret) { ··· 1088 659 dev_err(&pdev->dev, "Unable to allocate SPI master\n"); 1089 660 return -ENOMEM; 1090 661 } 662 + match = of_match_node(spi_sirfsoc_of_match, pdev->dev.of_node); 1091 663 platform_set_drvdata(pdev, master); 1092 664 sspi = spi_master_get_devdata(master); 1093 - 665 + sspi->fifo_full_offset = ilog2(sspi->fifo_size); 666 + spi_comp_data = (struct sirf_spi_comp_data *)match->data; 667 + sspi->regs = spi_comp_data->regs; 668 + sspi->type = spi_comp_data->type; 669 + sspi->fifo_level_chk_mask = (sspi->fifo_size / 4) - 1; 670 + sspi->dat_max_frm_len = spi_comp_data->dat_max_frm_len; 671 + sspi->fifo_size = spi_comp_data->fifo_size; 1094 672 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1095 673 sspi->base = devm_ioremap_resource(&pdev->dev, mem_res); 1096 674 if (IS_ERR(sspi->base)) { 1097 675 ret = PTR_ERR(sspi->base); 1098 676 goto free_master; 1099 677 } 1100 - 1101 678 irq = platform_get_irq(pdev, 0); 1102 679 if (irq < 0) { 1103 680 ret = -ENXIO; ··· 1119 684 sspi->bitbang.setup_transfer = spi_sirfsoc_setup_transfer; 1120 685 sspi->bitbang.txrx_bufs = spi_sirfsoc_transfer; 1121 686 sspi->bitbang.master->setup = spi_sirfsoc_setup; 687 + sspi->bitbang.master->cleanup = spi_sirfsoc_cleanup; 1122 688 master->bus_num = pdev->id; 1123 689 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST | SPI_CS_HIGH; 1124 690 master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(12) | 1125 691 SPI_BPW_MASK(16) | SPI_BPW_MASK(32); 1126 692 master->max_speed_hz = SIRFSOC_SPI_DEFAULT_FRQ; 693 + master->flags = SPI_MASTER_MUST_RX | SPI_MASTER_MUST_TX; 1127 694 sspi->bitbang.master->dev.of_node = pdev->dev.of_node; 1128 695 1129 696 /* request DMA channels */ ··· 1148 711 goto free_tx_dma; 1149 712 } 1150 713 clk_prepare_enable(sspi->clk); 714 + if (spi_comp_data->hwinit) 715 + spi_comp_data->hwinit(sspi); 1151 716 sspi->ctrl_freq = clk_get_rate(sspi->clk); 1152 717 1153 718 init_completion(&sspi->rx_done); 1154 719 init_completion(&sspi->tx_done); 1155 720 1156 - writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 1157 - writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 1158 - writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 1159 - writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 1160 - /* We are not using dummy delay between command and data */ 1161 - writel(0, sspi->base + SIRFSOC_SPI_DUMMY_DELAY_CTL); 1162 - 1163 - sspi->dummypage = kmalloc(2 * PAGE_SIZE, GFP_KERNEL); 1164 - if (!sspi->dummypage) { 1165 - ret = -ENOMEM; 1166 - goto free_clk; 1167 - } 1168 - 1169 721 ret = spi_bitbang_start(&sspi->bitbang); 1170 722 if (ret) 1171 - goto free_dummypage; 1172 - for (i = 0; master->cs_gpios && i < master->num_chipselect; i++) { 1173 - if (master->cs_gpios[i] == -ENOENT) 1174 - continue; 1175 - if (!gpio_is_valid(master->cs_gpios[i])) { 1176 - dev_err(&pdev->dev, "no valid gpio\n"); 1177 - ret = -EINVAL; 1178 - goto free_dummypage; 1179 - } 1180 - ret = devm_gpio_request(&pdev->dev, 1181 - master->cs_gpios[i], DRIVER_NAME); 1182 - if (ret) { 1183 - dev_err(&pdev->dev, "failed to request gpio\n"); 1184 - goto free_dummypage; 1185 - } 1186 - } 723 + goto free_clk; 1187 724 dev_info(&pdev->dev, "registerred, bus number = %d\n", master->bus_num); 1188 725 1189 726 return 0; 1190 - free_dummypage: 1191 - kfree(sspi->dummypage); 1192 727 free_clk: 1193 728 clk_disable_unprepare(sspi->clk); 1194 729 clk_put(sspi->clk); ··· 1181 772 1182 773 master = platform_get_drvdata(pdev); 1183 774 sspi = spi_master_get_devdata(master); 1184 - 1185 775 spi_bitbang_stop(&sspi->bitbang); 1186 - kfree(sspi->dummypage); 1187 776 clk_disable_unprepare(sspi->clk); 1188 777 clk_put(sspi->clk); 1189 778 dma_release_channel(sspi->rx_chan); ··· 1211 804 struct sirfsoc_spi *sspi = spi_master_get_devdata(master); 1212 805 1213 806 clk_enable(sspi->clk); 1214 - writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 1215 - writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 1216 - writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_RXFIFO_OP); 1217 - writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_TXFIFO_OP); 1218 - 1219 - return spi_master_resume(master); 807 + writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->txfifo_op); 808 + writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + sspi->regs->rxfifo_op); 809 + writel(SIRFSOC_SPI_FIFO_START, sspi->base + sspi->regs->txfifo_op); 810 + writel(SIRFSOC_SPI_FIFO_START, sspi->base + sspi->regs->rxfifo_op); 811 + return 0; 1220 812 } 1221 813 #endif 1222 814 1223 815 static SIMPLE_DEV_PM_OPS(spi_sirfsoc_pm_ops, spi_sirfsoc_suspend, 1224 816 spi_sirfsoc_resume); 1225 - 1226 - static const struct of_device_id spi_sirfsoc_of_match[] = { 1227 - { .compatible = "sirf,prima2-spi", }, 1228 - {} 1229 - }; 1230 - MODULE_DEVICE_TABLE(of, spi_sirfsoc_of_match); 1231 817 1232 818 static struct platform_driver spi_sirfsoc_driver = { 1233 819 .driver = { ··· 1235 835 MODULE_DESCRIPTION("SiRF SoC SPI master driver"); 1236 836 MODULE_AUTHOR("Zhiwu Song <Zhiwu.Song@csr.com>"); 1237 837 MODULE_AUTHOR("Barry Song <Baohua.Song@csr.com>"); 838 + MODULE_AUTHOR("Qipan Li <Qipan.Li@csr.com>"); 1238 839 MODULE_LICENSE("GPL v2");
+1122
drivers/spi/spi-zynqmp-gqspi.c
··· 1 + /* 2 + * Xilinx Zynq UltraScale+ MPSoC Quad-SPI (QSPI) controller driver 3 + * (master mode only) 4 + * 5 + * Copyright (C) 2009 - 2015 Xilinx, Inc. 6 + * 7 + * This program is free software; you can redistribute it and/or modify it 8 + * under the terms of the GNU General Public License version 2 as published 9 + * by the Free Software Foundation; either version 2 of the License, or 10 + * (at your option) any later version. 11 + */ 12 + 13 + #include <linux/clk.h> 14 + #include <linux/delay.h> 15 + #include <linux/dma-mapping.h> 16 + #include <linux/dmaengine.h> 17 + #include <linux/interrupt.h> 18 + #include <linux/io.h> 19 + #include <linux/module.h> 20 + #include <linux/of_irq.h> 21 + #include <linux/of_address.h> 22 + #include <linux/platform_device.h> 23 + #include <linux/spi/spi.h> 24 + #include <linux/spinlock.h> 25 + #include <linux/workqueue.h> 26 + 27 + /* Generic QSPI register offsets */ 28 + #define GQSPI_CONFIG_OFST 0x00000100 29 + #define GQSPI_ISR_OFST 0x00000104 30 + #define GQSPI_IDR_OFST 0x0000010C 31 + #define GQSPI_IER_OFST 0x00000108 32 + #define GQSPI_IMASK_OFST 0x00000110 33 + #define GQSPI_EN_OFST 0x00000114 34 + #define GQSPI_TXD_OFST 0x0000011C 35 + #define GQSPI_RXD_OFST 0x00000120 36 + #define GQSPI_TX_THRESHOLD_OFST 0x00000128 37 + #define GQSPI_RX_THRESHOLD_OFST 0x0000012C 38 + #define GQSPI_LPBK_DLY_ADJ_OFST 0x00000138 39 + #define GQSPI_GEN_FIFO_OFST 0x00000140 40 + #define GQSPI_SEL_OFST 0x00000144 41 + #define GQSPI_GF_THRESHOLD_OFST 0x00000150 42 + #define GQSPI_FIFO_CTRL_OFST 0x0000014C 43 + #define GQSPI_QSPIDMA_DST_CTRL_OFST 0x0000080C 44 + #define GQSPI_QSPIDMA_DST_SIZE_OFST 0x00000804 45 + #define GQSPI_QSPIDMA_DST_STS_OFST 0x00000808 46 + #define GQSPI_QSPIDMA_DST_I_STS_OFST 0x00000814 47 + #define GQSPI_QSPIDMA_DST_I_EN_OFST 0x00000818 48 + #define GQSPI_QSPIDMA_DST_I_DIS_OFST 0x0000081C 49 + #define GQSPI_QSPIDMA_DST_I_MASK_OFST 0x00000820 50 + #define GQSPI_QSPIDMA_DST_ADDR_OFST 0x00000800 51 + #define GQSPI_QSPIDMA_DST_ADDR_MSB_OFST 0x00000828 52 + 53 + /* GQSPI register bit masks */ 54 + #define GQSPI_SEL_MASK 0x00000001 55 + #define GQSPI_EN_MASK 0x00000001 56 + #define GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK 0x00000020 57 + #define GQSPI_ISR_WR_TO_CLR_MASK 0x00000002 58 + #define GQSPI_IDR_ALL_MASK 0x00000FBE 59 + #define GQSPI_CFG_MODE_EN_MASK 0xC0000000 60 + #define GQSPI_CFG_GEN_FIFO_START_MODE_MASK 0x20000000 61 + #define GQSPI_CFG_ENDIAN_MASK 0x04000000 62 + #define GQSPI_CFG_EN_POLL_TO_MASK 0x00100000 63 + #define GQSPI_CFG_WP_HOLD_MASK 0x00080000 64 + #define GQSPI_CFG_BAUD_RATE_DIV_MASK 0x00000038 65 + #define GQSPI_CFG_CLK_PHA_MASK 0x00000004 66 + #define GQSPI_CFG_CLK_POL_MASK 0x00000002 67 + #define GQSPI_CFG_START_GEN_FIFO_MASK 0x10000000 68 + #define GQSPI_GENFIFO_IMM_DATA_MASK 0x000000FF 69 + #define GQSPI_GENFIFO_DATA_XFER 0x00000100 70 + #define GQSPI_GENFIFO_EXP 0x00000200 71 + #define GQSPI_GENFIFO_MODE_SPI 0x00000400 72 + #define GQSPI_GENFIFO_MODE_DUALSPI 0x00000800 73 + #define GQSPI_GENFIFO_MODE_QUADSPI 0x00000C00 74 + #define GQSPI_GENFIFO_MODE_MASK 0x00000C00 75 + #define GQSPI_GENFIFO_CS_LOWER 0x00001000 76 + #define GQSPI_GENFIFO_CS_UPPER 0x00002000 77 + #define GQSPI_GENFIFO_BUS_LOWER 0x00004000 78 + #define GQSPI_GENFIFO_BUS_UPPER 0x00008000 79 + #define GQSPI_GENFIFO_BUS_BOTH 0x0000C000 80 + #define GQSPI_GENFIFO_BUS_MASK 0x0000C000 81 + #define GQSPI_GENFIFO_TX 0x00010000 82 + #define GQSPI_GENFIFO_RX 0x00020000 83 + #define GQSPI_GENFIFO_STRIPE 0x00040000 84 + #define GQSPI_GENFIFO_POLL 0x00080000 85 + #define GQSPI_GENFIFO_EXP_START 0x00000100 86 + #define GQSPI_FIFO_CTRL_RST_RX_FIFO_MASK 0x00000004 87 + #define GQSPI_FIFO_CTRL_RST_TX_FIFO_MASK 0x00000002 88 + #define GQSPI_FIFO_CTRL_RST_GEN_FIFO_MASK 0x00000001 89 + #define GQSPI_ISR_RXEMPTY_MASK 0x00000800 90 + #define GQSPI_ISR_GENFIFOFULL_MASK 0x00000400 91 + #define GQSPI_ISR_GENFIFONOT_FULL_MASK 0x00000200 92 + #define GQSPI_ISR_TXEMPTY_MASK 0x00000100 93 + #define GQSPI_ISR_GENFIFOEMPTY_MASK 0x00000080 94 + #define GQSPI_ISR_RXFULL_MASK 0x00000020 95 + #define GQSPI_ISR_RXNEMPTY_MASK 0x00000010 96 + #define GQSPI_ISR_TXFULL_MASK 0x00000008 97 + #define GQSPI_ISR_TXNOT_FULL_MASK 0x00000004 98 + #define GQSPI_ISR_POLL_TIME_EXPIRE_MASK 0x00000002 99 + #define GQSPI_IER_TXNOT_FULL_MASK 0x00000004 100 + #define GQSPI_IER_RXEMPTY_MASK 0x00000800 101 + #define GQSPI_IER_POLL_TIME_EXPIRE_MASK 0x00000002 102 + #define GQSPI_IER_RXNEMPTY_MASK 0x00000010 103 + #define GQSPI_IER_GENFIFOEMPTY_MASK 0x00000080 104 + #define GQSPI_IER_TXEMPTY_MASK 0x00000100 105 + #define GQSPI_QSPIDMA_DST_INTR_ALL_MASK 0x000000FE 106 + #define GQSPI_QSPIDMA_DST_STS_WTC 0x0000E000 107 + #define GQSPI_CFG_MODE_EN_DMA_MASK 0x80000000 108 + #define GQSPI_ISR_IDR_MASK 0x00000994 109 + #define GQSPI_QSPIDMA_DST_I_EN_DONE_MASK 0x00000002 110 + #define GQSPI_QSPIDMA_DST_I_STS_DONE_MASK 0x00000002 111 + #define GQSPI_IRQ_MASK 0x00000980 112 + 113 + #define GQSPI_CFG_BAUD_RATE_DIV_SHIFT 3 114 + #define GQSPI_GENFIFO_CS_SETUP 0x4 115 + #define GQSPI_GENFIFO_CS_HOLD 0x3 116 + #define GQSPI_TXD_DEPTH 64 117 + #define GQSPI_RX_FIFO_THRESHOLD 32 118 + #define GQSPI_RX_FIFO_FILL (GQSPI_RX_FIFO_THRESHOLD * 4) 119 + #define GQSPI_TX_FIFO_THRESHOLD_RESET_VAL 32 120 + #define GQSPI_TX_FIFO_FILL (GQSPI_TXD_DEPTH -\ 121 + GQSPI_TX_FIFO_THRESHOLD_RESET_VAL) 122 + #define GQSPI_GEN_FIFO_THRESHOLD_RESET_VAL 0X10 123 + #define GQSPI_QSPIDMA_DST_CTRL_RESET_VAL 0x803FFA00 124 + #define GQSPI_SELECT_FLASH_CS_LOWER 0x1 125 + #define GQSPI_SELECT_FLASH_CS_UPPER 0x2 126 + #define GQSPI_SELECT_FLASH_CS_BOTH 0x3 127 + #define GQSPI_SELECT_FLASH_BUS_LOWER 0x1 128 + #define GQSPI_SELECT_FLASH_BUS_UPPER 0x2 129 + #define GQSPI_SELECT_FLASH_BUS_BOTH 0x3 130 + #define GQSPI_BAUD_DIV_MAX 7 /* Baud rate divisor maximum */ 131 + #define GQSPI_BAUD_DIV_SHIFT 2 /* Baud rate divisor shift */ 132 + #define GQSPI_SELECT_MODE_SPI 0x1 133 + #define GQSPI_SELECT_MODE_DUALSPI 0x2 134 + #define GQSPI_SELECT_MODE_QUADSPI 0x4 135 + #define GQSPI_DMA_UNALIGN 0x3 136 + #define GQSPI_DEFAULT_NUM_CS 1 /* Default number of chip selects */ 137 + 138 + enum mode_type {GQSPI_MODE_IO, GQSPI_MODE_DMA}; 139 + 140 + /** 141 + * struct zynqmp_qspi - Defines qspi driver instance 142 + * @regs: Virtual address of the QSPI controller registers 143 + * @refclk: Pointer to the peripheral clock 144 + * @pclk: Pointer to the APB clock 145 + * @irq: IRQ number 146 + * @dev: Pointer to struct device 147 + * @txbuf: Pointer to the TX buffer 148 + * @rxbuf: Pointer to the RX buffer 149 + * @bytes_to_transfer: Number of bytes left to transfer 150 + * @bytes_to_receive: Number of bytes left to receive 151 + * @genfifocs: Used for chip select 152 + * @genfifobus: Used to select the upper or lower bus 153 + * @dma_rx_bytes: Remaining bytes to receive by DMA mode 154 + * @dma_addr: DMA address after mapping the kernel buffer 155 + * @genfifoentry: Used for storing the genfifoentry instruction. 156 + * @mode: Defines the mode in which QSPI is operating 157 + */ 158 + struct zynqmp_qspi { 159 + void __iomem *regs; 160 + struct clk *refclk; 161 + struct clk *pclk; 162 + int irq; 163 + struct device *dev; 164 + const void *txbuf; 165 + void *rxbuf; 166 + int bytes_to_transfer; 167 + int bytes_to_receive; 168 + u32 genfifocs; 169 + u32 genfifobus; 170 + u32 dma_rx_bytes; 171 + dma_addr_t dma_addr; 172 + u32 genfifoentry; 173 + enum mode_type mode; 174 + }; 175 + 176 + /** 177 + * zynqmp_gqspi_read: For GQSPI controller read operation 178 + * @xqspi: Pointer to the zynqmp_qspi structure 179 + * @offset: Offset from where to read 180 + */ 181 + static u32 zynqmp_gqspi_read(struct zynqmp_qspi *xqspi, u32 offset) 182 + { 183 + return readl_relaxed(xqspi->regs + offset); 184 + } 185 + 186 + /** 187 + * zynqmp_gqspi_write: For GQSPI controller write operation 188 + * @xqspi: Pointer to the zynqmp_qspi structure 189 + * @offset: Offset where to write 190 + * @val: Value to be written 191 + */ 192 + static inline void zynqmp_gqspi_write(struct zynqmp_qspi *xqspi, u32 offset, 193 + u32 val) 194 + { 195 + writel_relaxed(val, (xqspi->regs + offset)); 196 + } 197 + 198 + /** 199 + * zynqmp_gqspi_selectslave: For selection of slave device 200 + * @instanceptr: Pointer to the zynqmp_qspi structure 201 + * @flashcs: For chip select 202 + * @flashbus: To check which bus is selected- upper or lower 203 + */ 204 + static void zynqmp_gqspi_selectslave(struct zynqmp_qspi *instanceptr, 205 + u8 slavecs, u8 slavebus) 206 + { 207 + /* 208 + * Bus and CS lines selected here will be updated in the instance and 209 + * used for subsequent GENFIFO entries during transfer. 210 + */ 211 + 212 + /* Choose slave select line */ 213 + switch (slavecs) { 214 + case GQSPI_SELECT_FLASH_CS_BOTH: 215 + instanceptr->genfifocs = GQSPI_GENFIFO_CS_LOWER | 216 + GQSPI_GENFIFO_CS_UPPER; 217 + case GQSPI_SELECT_FLASH_CS_UPPER: 218 + instanceptr->genfifocs = GQSPI_GENFIFO_CS_UPPER; 219 + break; 220 + case GQSPI_SELECT_FLASH_CS_LOWER: 221 + instanceptr->genfifocs = GQSPI_GENFIFO_CS_LOWER; 222 + break; 223 + default: 224 + dev_warn(instanceptr->dev, "Invalid slave select\n"); 225 + } 226 + 227 + /* Choose the bus */ 228 + switch (slavebus) { 229 + case GQSPI_SELECT_FLASH_BUS_BOTH: 230 + instanceptr->genfifobus = GQSPI_GENFIFO_BUS_LOWER | 231 + GQSPI_GENFIFO_BUS_UPPER; 232 + break; 233 + case GQSPI_SELECT_FLASH_BUS_UPPER: 234 + instanceptr->genfifobus = GQSPI_GENFIFO_BUS_UPPER; 235 + break; 236 + case GQSPI_SELECT_FLASH_BUS_LOWER: 237 + instanceptr->genfifobus = GQSPI_GENFIFO_BUS_LOWER; 238 + break; 239 + default: 240 + dev_warn(instanceptr->dev, "Invalid slave bus\n"); 241 + } 242 + } 243 + 244 + /** 245 + * zynqmp_qspi_init_hw: Initialize the hardware 246 + * @xqspi: Pointer to the zynqmp_qspi structure 247 + * 248 + * The default settings of the QSPI controller's configurable parameters on 249 + * reset are 250 + * - Master mode 251 + * - TX threshold set to 1 252 + * - RX threshold set to 1 253 + * - Flash memory interface mode enabled 254 + * This function performs the following actions 255 + * - Disable and clear all the interrupts 256 + * - Enable manual slave select 257 + * - Enable manual start 258 + * - Deselect all the chip select lines 259 + * - Set the little endian mode of TX FIFO and 260 + * - Enable the QSPI controller 261 + */ 262 + static void zynqmp_qspi_init_hw(struct zynqmp_qspi *xqspi) 263 + { 264 + u32 config_reg; 265 + 266 + /* Select the GQSPI mode */ 267 + zynqmp_gqspi_write(xqspi, GQSPI_SEL_OFST, GQSPI_SEL_MASK); 268 + /* Clear and disable interrupts */ 269 + zynqmp_gqspi_write(xqspi, GQSPI_ISR_OFST, 270 + zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST) | 271 + GQSPI_ISR_WR_TO_CLR_MASK); 272 + /* Clear the DMA STS */ 273 + zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_I_STS_OFST, 274 + zynqmp_gqspi_read(xqspi, 275 + GQSPI_QSPIDMA_DST_I_STS_OFST)); 276 + zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_STS_OFST, 277 + zynqmp_gqspi_read(xqspi, 278 + GQSPI_QSPIDMA_DST_STS_OFST) | 279 + GQSPI_QSPIDMA_DST_STS_WTC); 280 + zynqmp_gqspi_write(xqspi, GQSPI_IDR_OFST, GQSPI_IDR_ALL_MASK); 281 + zynqmp_gqspi_write(xqspi, 282 + GQSPI_QSPIDMA_DST_I_DIS_OFST, 283 + GQSPI_QSPIDMA_DST_INTR_ALL_MASK); 284 + /* Disable the GQSPI */ 285 + zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0); 286 + config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST); 287 + config_reg &= ~GQSPI_CFG_MODE_EN_MASK; 288 + /* Manual start */ 289 + config_reg |= GQSPI_CFG_GEN_FIFO_START_MODE_MASK; 290 + /* Little endian by default */ 291 + config_reg &= ~GQSPI_CFG_ENDIAN_MASK; 292 + /* Disable poll time out */ 293 + config_reg &= ~GQSPI_CFG_EN_POLL_TO_MASK; 294 + /* Set hold bit */ 295 + config_reg |= GQSPI_CFG_WP_HOLD_MASK; 296 + /* Clear pre-scalar by default */ 297 + config_reg &= ~GQSPI_CFG_BAUD_RATE_DIV_MASK; 298 + /* CPHA 0 */ 299 + config_reg &= ~GQSPI_CFG_CLK_PHA_MASK; 300 + /* CPOL 0 */ 301 + config_reg &= ~GQSPI_CFG_CLK_POL_MASK; 302 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg); 303 + 304 + /* Clear the TX and RX FIFO */ 305 + zynqmp_gqspi_write(xqspi, GQSPI_FIFO_CTRL_OFST, 306 + GQSPI_FIFO_CTRL_RST_RX_FIFO_MASK | 307 + GQSPI_FIFO_CTRL_RST_TX_FIFO_MASK | 308 + GQSPI_FIFO_CTRL_RST_GEN_FIFO_MASK); 309 + /* Set by default to allow for high frequencies */ 310 + zynqmp_gqspi_write(xqspi, GQSPI_LPBK_DLY_ADJ_OFST, 311 + zynqmp_gqspi_read(xqspi, GQSPI_LPBK_DLY_ADJ_OFST) | 312 + GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK); 313 + /* Reset thresholds */ 314 + zynqmp_gqspi_write(xqspi, GQSPI_TX_THRESHOLD_OFST, 315 + GQSPI_TX_FIFO_THRESHOLD_RESET_VAL); 316 + zynqmp_gqspi_write(xqspi, GQSPI_RX_THRESHOLD_OFST, 317 + GQSPI_RX_FIFO_THRESHOLD); 318 + zynqmp_gqspi_write(xqspi, GQSPI_GF_THRESHOLD_OFST, 319 + GQSPI_GEN_FIFO_THRESHOLD_RESET_VAL); 320 + zynqmp_gqspi_selectslave(xqspi, 321 + GQSPI_SELECT_FLASH_CS_LOWER, 322 + GQSPI_SELECT_FLASH_BUS_LOWER); 323 + /* Initialize DMA */ 324 + zynqmp_gqspi_write(xqspi, 325 + GQSPI_QSPIDMA_DST_CTRL_OFST, 326 + GQSPI_QSPIDMA_DST_CTRL_RESET_VAL); 327 + 328 + /* Enable the GQSPI */ 329 + zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, GQSPI_EN_MASK); 330 + } 331 + 332 + /** 333 + * zynqmp_qspi_copy_read_data: Copy data to RX buffer 334 + * @xqspi: Pointer to the zynqmp_qspi structure 335 + * @data: The variable where data is stored 336 + * @size: Number of bytes to be copied from data to RX buffer 337 + */ 338 + static void zynqmp_qspi_copy_read_data(struct zynqmp_qspi *xqspi, 339 + ulong data, u8 size) 340 + { 341 + memcpy(xqspi->rxbuf, &data, size); 342 + xqspi->rxbuf += size; 343 + xqspi->bytes_to_receive -= size; 344 + } 345 + 346 + /** 347 + * zynqmp_prepare_transfer_hardware: Prepares hardware for transfer. 348 + * @master: Pointer to the spi_master structure which provides 349 + * information about the controller. 350 + * 351 + * This function enables SPI master controller. 352 + * 353 + * Return: 0 on success; error value otherwise 354 + */ 355 + static int zynqmp_prepare_transfer_hardware(struct spi_master *master) 356 + { 357 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); 358 + int ret; 359 + 360 + ret = clk_enable(xqspi->refclk); 361 + if (ret) 362 + goto clk_err; 363 + 364 + ret = clk_enable(xqspi->pclk); 365 + if (ret) 366 + goto clk_err; 367 + 368 + zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, GQSPI_EN_MASK); 369 + return 0; 370 + clk_err: 371 + return ret; 372 + } 373 + 374 + /** 375 + * zynqmp_unprepare_transfer_hardware: Relaxes hardware after transfer 376 + * @master: Pointer to the spi_master structure which provides 377 + * information about the controller. 378 + * 379 + * This function disables the SPI master controller. 380 + * 381 + * Return: Always 0 382 + */ 383 + static int zynqmp_unprepare_transfer_hardware(struct spi_master *master) 384 + { 385 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); 386 + 387 + zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0); 388 + clk_disable(xqspi->refclk); 389 + clk_disable(xqspi->pclk); 390 + return 0; 391 + } 392 + 393 + /** 394 + * zynqmp_qspi_chipselect: Select or deselect the chip select line 395 + * @qspi: Pointer to the spi_device structure 396 + * @is_high: Select(0) or deselect (1) the chip select line 397 + */ 398 + static void zynqmp_qspi_chipselect(struct spi_device *qspi, bool is_high) 399 + { 400 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(qspi->master); 401 + ulong timeout; 402 + u32 genfifoentry = 0x0, statusreg; 403 + 404 + genfifoentry |= GQSPI_GENFIFO_MODE_SPI; 405 + genfifoentry |= xqspi->genfifobus; 406 + 407 + if (!is_high) { 408 + genfifoentry |= xqspi->genfifocs; 409 + genfifoentry |= GQSPI_GENFIFO_CS_SETUP; 410 + } else { 411 + genfifoentry |= GQSPI_GENFIFO_CS_HOLD; 412 + } 413 + 414 + zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, genfifoentry); 415 + 416 + /* Dummy generic FIFO entry */ 417 + zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, 0x0); 418 + 419 + /* Manually start the generic FIFO command */ 420 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, 421 + zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST) | 422 + GQSPI_CFG_START_GEN_FIFO_MASK); 423 + 424 + timeout = jiffies + msecs_to_jiffies(1000); 425 + 426 + /* Wait until the generic FIFO command is empty */ 427 + do { 428 + statusreg = zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST); 429 + 430 + if ((statusreg & GQSPI_ISR_GENFIFOEMPTY_MASK) && 431 + (statusreg & GQSPI_ISR_TXEMPTY_MASK)) 432 + break; 433 + else 434 + cpu_relax(); 435 + } while (!time_after_eq(jiffies, timeout)); 436 + 437 + if (time_after_eq(jiffies, timeout)) 438 + dev_err(xqspi->dev, "Chip select timed out\n"); 439 + } 440 + 441 + /** 442 + * zynqmp_qspi_setup_transfer: Configure QSPI controller for specified 443 + * transfer 444 + * @qspi: Pointer to the spi_device structure 445 + * @transfer: Pointer to the spi_transfer structure which provides 446 + * information about next transfer setup parameters 447 + * 448 + * Sets the operational mode of QSPI controller for the next QSPI transfer and 449 + * sets the requested clock frequency. 450 + * 451 + * Return: Always 0 452 + * 453 + * Note: 454 + * If the requested frequency is not an exact match with what can be 455 + * obtained using the pre-scalar value, the driver sets the clock 456 + * frequency which is lower than the requested frequency (maximum lower) 457 + * for the transfer. 458 + * 459 + * If the requested frequency is higher or lower than that is supported 460 + * by the QSPI controller the driver will set the highest or lowest 461 + * frequency supported by controller. 462 + */ 463 + static int zynqmp_qspi_setup_transfer(struct spi_device *qspi, 464 + struct spi_transfer *transfer) 465 + { 466 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(qspi->master); 467 + ulong clk_rate; 468 + u32 config_reg, req_hz, baud_rate_val = 0; 469 + 470 + if (transfer) 471 + req_hz = transfer->speed_hz; 472 + else 473 + req_hz = qspi->max_speed_hz; 474 + 475 + /* Set the clock frequency */ 476 + /* If req_hz == 0, default to lowest speed */ 477 + clk_rate = clk_get_rate(xqspi->refclk); 478 + 479 + while ((baud_rate_val < GQSPI_BAUD_DIV_MAX) && 480 + (clk_rate / 481 + (GQSPI_BAUD_DIV_SHIFT << baud_rate_val)) > req_hz) 482 + baud_rate_val++; 483 + 484 + config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST); 485 + 486 + /* Set the QSPI clock phase and clock polarity */ 487 + config_reg &= (~GQSPI_CFG_CLK_PHA_MASK) & (~GQSPI_CFG_CLK_POL_MASK); 488 + 489 + if (qspi->mode & SPI_CPHA) 490 + config_reg |= GQSPI_CFG_CLK_PHA_MASK; 491 + if (qspi->mode & SPI_CPOL) 492 + config_reg |= GQSPI_CFG_CLK_POL_MASK; 493 + 494 + config_reg &= ~GQSPI_CFG_BAUD_RATE_DIV_MASK; 495 + config_reg |= (baud_rate_val << GQSPI_CFG_BAUD_RATE_DIV_SHIFT); 496 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg); 497 + return 0; 498 + } 499 + 500 + /** 501 + * zynqmp_qspi_setup: Configure the QSPI controller 502 + * @qspi: Pointer to the spi_device structure 503 + * 504 + * Sets the operational mode of QSPI controller for the next QSPI transfer, 505 + * baud rate and divisor value to setup the requested qspi clock. 506 + * 507 + * Return: 0 on success; error value otherwise. 508 + */ 509 + static int zynqmp_qspi_setup(struct spi_device *qspi) 510 + { 511 + if (qspi->master->busy) 512 + return -EBUSY; 513 + return 0; 514 + } 515 + 516 + /** 517 + * zynqmp_qspi_filltxfifo: Fills the TX FIFO as long as there is room in 518 + * the FIFO or the bytes required to be 519 + * transmitted. 520 + * @xqspi: Pointer to the zynqmp_qspi structure 521 + * @size: Number of bytes to be copied from TX buffer to TX FIFO 522 + */ 523 + static void zynqmp_qspi_filltxfifo(struct zynqmp_qspi *xqspi, int size) 524 + { 525 + u32 count = 0, intermediate; 526 + 527 + while ((xqspi->bytes_to_transfer > 0) && (count < size)) { 528 + memcpy(&intermediate, xqspi->txbuf, 4); 529 + zynqmp_gqspi_write(xqspi, GQSPI_TXD_OFST, intermediate); 530 + 531 + if (xqspi->bytes_to_transfer >= 4) { 532 + xqspi->txbuf += 4; 533 + xqspi->bytes_to_transfer -= 4; 534 + } else { 535 + xqspi->txbuf += xqspi->bytes_to_transfer; 536 + xqspi->bytes_to_transfer = 0; 537 + } 538 + count++; 539 + } 540 + } 541 + 542 + /** 543 + * zynqmp_qspi_readrxfifo: Fills the RX FIFO as long as there is room in 544 + * the FIFO. 545 + * @xqspi: Pointer to the zynqmp_qspi structure 546 + * @size: Number of bytes to be copied from RX buffer to RX FIFO 547 + */ 548 + static void zynqmp_qspi_readrxfifo(struct zynqmp_qspi *xqspi, u32 size) 549 + { 550 + ulong data; 551 + int count = 0; 552 + 553 + while ((count < size) && (xqspi->bytes_to_receive > 0)) { 554 + if (xqspi->bytes_to_receive >= 4) { 555 + (*(u32 *) xqspi->rxbuf) = 556 + zynqmp_gqspi_read(xqspi, GQSPI_RXD_OFST); 557 + xqspi->rxbuf += 4; 558 + xqspi->bytes_to_receive -= 4; 559 + count += 4; 560 + } else { 561 + data = zynqmp_gqspi_read(xqspi, GQSPI_RXD_OFST); 562 + count += xqspi->bytes_to_receive; 563 + zynqmp_qspi_copy_read_data(xqspi, data, 564 + xqspi->bytes_to_receive); 565 + xqspi->bytes_to_receive = 0; 566 + } 567 + } 568 + } 569 + 570 + /** 571 + * zynqmp_process_dma_irq: Handler for DMA done interrupt of QSPI 572 + * controller 573 + * @xqspi: zynqmp_qspi instance pointer 574 + * 575 + * This function handles DMA interrupt only. 576 + */ 577 + static void zynqmp_process_dma_irq(struct zynqmp_qspi *xqspi) 578 + { 579 + u32 config_reg, genfifoentry; 580 + 581 + dma_unmap_single(xqspi->dev, xqspi->dma_addr, 582 + xqspi->dma_rx_bytes, DMA_FROM_DEVICE); 583 + xqspi->rxbuf += xqspi->dma_rx_bytes; 584 + xqspi->bytes_to_receive -= xqspi->dma_rx_bytes; 585 + xqspi->dma_rx_bytes = 0; 586 + 587 + /* Disabling the DMA interrupts */ 588 + zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_I_DIS_OFST, 589 + GQSPI_QSPIDMA_DST_I_EN_DONE_MASK); 590 + 591 + if (xqspi->bytes_to_receive > 0) { 592 + /* Switch to IO mode,for remaining bytes to receive */ 593 + config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST); 594 + config_reg &= ~GQSPI_CFG_MODE_EN_MASK; 595 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg); 596 + 597 + /* Initiate the transfer of remaining bytes */ 598 + genfifoentry = xqspi->genfifoentry; 599 + genfifoentry |= xqspi->bytes_to_receive; 600 + zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, genfifoentry); 601 + 602 + /* Dummy generic FIFO entry */ 603 + zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, 0x0); 604 + 605 + /* Manual start */ 606 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, 607 + (zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST) | 608 + GQSPI_CFG_START_GEN_FIFO_MASK)); 609 + 610 + /* Enable the RX interrupts for IO mode */ 611 + zynqmp_gqspi_write(xqspi, GQSPI_IER_OFST, 612 + GQSPI_IER_GENFIFOEMPTY_MASK | 613 + GQSPI_IER_RXNEMPTY_MASK | 614 + GQSPI_IER_RXEMPTY_MASK); 615 + } 616 + } 617 + 618 + /** 619 + * zynqmp_qspi_irq: Interrupt service routine of the QSPI controller 620 + * @irq: IRQ number 621 + * @dev_id: Pointer to the xqspi structure 622 + * 623 + * This function handles TX empty only. 624 + * On TX empty interrupt this function reads the received data from RX FIFO 625 + * and fills the TX FIFO if there is any data remaining to be transferred. 626 + * 627 + * Return: IRQ_HANDLED when interrupt is handled 628 + * IRQ_NONE otherwise. 629 + */ 630 + static irqreturn_t zynqmp_qspi_irq(int irq, void *dev_id) 631 + { 632 + struct spi_master *master = dev_id; 633 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); 634 + int ret = IRQ_NONE; 635 + u32 status, mask, dma_status = 0; 636 + 637 + status = zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST); 638 + zynqmp_gqspi_write(xqspi, GQSPI_ISR_OFST, status); 639 + mask = (status & ~(zynqmp_gqspi_read(xqspi, GQSPI_IMASK_OFST))); 640 + 641 + /* Read and clear DMA status */ 642 + if (xqspi->mode == GQSPI_MODE_DMA) { 643 + dma_status = 644 + zynqmp_gqspi_read(xqspi, GQSPI_QSPIDMA_DST_I_STS_OFST); 645 + zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_I_STS_OFST, 646 + dma_status); 647 + } 648 + 649 + if (mask & GQSPI_ISR_TXNOT_FULL_MASK) { 650 + zynqmp_qspi_filltxfifo(xqspi, GQSPI_TX_FIFO_FILL); 651 + ret = IRQ_HANDLED; 652 + } 653 + 654 + if (dma_status & GQSPI_QSPIDMA_DST_I_STS_DONE_MASK) { 655 + zynqmp_process_dma_irq(xqspi); 656 + ret = IRQ_HANDLED; 657 + } else if (!(mask & GQSPI_IER_RXEMPTY_MASK) && 658 + (mask & GQSPI_IER_GENFIFOEMPTY_MASK)) { 659 + zynqmp_qspi_readrxfifo(xqspi, GQSPI_RX_FIFO_FILL); 660 + ret = IRQ_HANDLED; 661 + } 662 + 663 + if ((xqspi->bytes_to_receive == 0) && (xqspi->bytes_to_transfer == 0) 664 + && ((status & GQSPI_IRQ_MASK) == GQSPI_IRQ_MASK)) { 665 + zynqmp_gqspi_write(xqspi, GQSPI_IDR_OFST, GQSPI_ISR_IDR_MASK); 666 + spi_finalize_current_transfer(master); 667 + ret = IRQ_HANDLED; 668 + } 669 + return ret; 670 + } 671 + 672 + /** 673 + * zynqmp_qspi_selectspimode: Selects SPI mode - x1 or x2 or x4. 674 + * @xqspi: xqspi is a pointer to the GQSPI instance 675 + * @spimode: spimode - SPI or DUAL or QUAD. 676 + * Return: Mask to set desired SPI mode in GENFIFO entry. 677 + */ 678 + static inline u32 zynqmp_qspi_selectspimode(struct zynqmp_qspi *xqspi, 679 + u8 spimode) 680 + { 681 + u32 mask = 0; 682 + 683 + switch (spimode) { 684 + case GQSPI_SELECT_MODE_DUALSPI: 685 + mask = GQSPI_GENFIFO_MODE_DUALSPI; 686 + break; 687 + case GQSPI_SELECT_MODE_QUADSPI: 688 + mask = GQSPI_GENFIFO_MODE_QUADSPI; 689 + break; 690 + case GQSPI_SELECT_MODE_SPI: 691 + mask = GQSPI_GENFIFO_MODE_SPI; 692 + break; 693 + default: 694 + dev_warn(xqspi->dev, "Invalid SPI mode\n"); 695 + } 696 + 697 + return mask; 698 + } 699 + 700 + /** 701 + * zynq_qspi_setuprxdma: This function sets up the RX DMA operation 702 + * @xqspi: xqspi is a pointer to the GQSPI instance. 703 + */ 704 + static void zynq_qspi_setuprxdma(struct zynqmp_qspi *xqspi) 705 + { 706 + u32 rx_bytes, rx_rem, config_reg; 707 + dma_addr_t addr; 708 + u64 dma_align = (u64)(uintptr_t)xqspi->rxbuf; 709 + 710 + if ((xqspi->bytes_to_receive < 8) || 711 + ((dma_align & GQSPI_DMA_UNALIGN) != 0x0)) { 712 + /* Setting to IO mode */ 713 + config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST); 714 + config_reg &= ~GQSPI_CFG_MODE_EN_MASK; 715 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg); 716 + xqspi->mode = GQSPI_MODE_IO; 717 + xqspi->dma_rx_bytes = 0; 718 + return; 719 + } 720 + 721 + rx_rem = xqspi->bytes_to_receive % 4; 722 + rx_bytes = (xqspi->bytes_to_receive - rx_rem); 723 + 724 + addr = dma_map_single(xqspi->dev, (void *)xqspi->rxbuf, 725 + rx_bytes, DMA_FROM_DEVICE); 726 + if (dma_mapping_error(xqspi->dev, addr)) 727 + dev_err(xqspi->dev, "ERR:rxdma:memory not mapped\n"); 728 + 729 + xqspi->dma_rx_bytes = rx_bytes; 730 + xqspi->dma_addr = addr; 731 + zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_ADDR_OFST, 732 + (u32)(addr & 0xffffffff)); 733 + addr = ((addr >> 16) >> 16); 734 + zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_ADDR_MSB_OFST, 735 + ((u32)addr) & 0xfff); 736 + 737 + /* Enabling the DMA mode */ 738 + config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST); 739 + config_reg &= ~GQSPI_CFG_MODE_EN_MASK; 740 + config_reg |= GQSPI_CFG_MODE_EN_DMA_MASK; 741 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg); 742 + 743 + /* Switch to DMA mode */ 744 + xqspi->mode = GQSPI_MODE_DMA; 745 + 746 + /* Write the number of bytes to transfer */ 747 + zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_SIZE_OFST, rx_bytes); 748 + } 749 + 750 + /** 751 + * zynqmp_qspi_txrxsetup: This function checks the TX/RX buffers in 752 + * the transfer and sets up the GENFIFO entries, 753 + * TX FIFO as required. 754 + * @xqspi: xqspi is a pointer to the GQSPI instance. 755 + * @transfer: It is a pointer to the structure containing transfer data. 756 + * @genfifoentry: genfifoentry is pointer to the variable in which 757 + * GENFIFO mask is returned to calling function 758 + */ 759 + static void zynqmp_qspi_txrxsetup(struct zynqmp_qspi *xqspi, 760 + struct spi_transfer *transfer, 761 + u32 *genfifoentry) 762 + { 763 + u32 config_reg; 764 + 765 + /* Transmit */ 766 + if ((xqspi->txbuf != NULL) && (xqspi->rxbuf == NULL)) { 767 + /* Setup data to be TXed */ 768 + *genfifoentry &= ~GQSPI_GENFIFO_RX; 769 + *genfifoentry |= GQSPI_GENFIFO_DATA_XFER; 770 + *genfifoentry |= GQSPI_GENFIFO_TX; 771 + *genfifoentry |= 772 + zynqmp_qspi_selectspimode(xqspi, transfer->tx_nbits); 773 + xqspi->bytes_to_transfer = transfer->len; 774 + if (xqspi->mode == GQSPI_MODE_DMA) { 775 + config_reg = zynqmp_gqspi_read(xqspi, 776 + GQSPI_CONFIG_OFST); 777 + config_reg &= ~GQSPI_CFG_MODE_EN_MASK; 778 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, 779 + config_reg); 780 + xqspi->mode = GQSPI_MODE_IO; 781 + } 782 + zynqmp_qspi_filltxfifo(xqspi, GQSPI_TXD_DEPTH); 783 + /* Discard RX data */ 784 + xqspi->bytes_to_receive = 0; 785 + } else if ((xqspi->txbuf == NULL) && (xqspi->rxbuf != NULL)) { 786 + /* Receive */ 787 + 788 + /* TX auto fill */ 789 + *genfifoentry &= ~GQSPI_GENFIFO_TX; 790 + /* Setup RX */ 791 + *genfifoentry |= GQSPI_GENFIFO_DATA_XFER; 792 + *genfifoentry |= GQSPI_GENFIFO_RX; 793 + *genfifoentry |= 794 + zynqmp_qspi_selectspimode(xqspi, transfer->rx_nbits); 795 + xqspi->bytes_to_transfer = 0; 796 + xqspi->bytes_to_receive = transfer->len; 797 + zynq_qspi_setuprxdma(xqspi); 798 + } 799 + } 800 + 801 + /** 802 + * zynqmp_qspi_start_transfer: Initiates the QSPI transfer 803 + * @master: Pointer to the spi_master structure which provides 804 + * information about the controller. 805 + * @qspi: Pointer to the spi_device structure 806 + * @transfer: Pointer to the spi_transfer structure which provide information 807 + * about next transfer parameters 808 + * 809 + * This function fills the TX FIFO, starts the QSPI transfer, and waits for the 810 + * transfer to be completed. 811 + * 812 + * Return: Number of bytes transferred in the last transfer 813 + */ 814 + static int zynqmp_qspi_start_transfer(struct spi_master *master, 815 + struct spi_device *qspi, 816 + struct spi_transfer *transfer) 817 + { 818 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); 819 + u32 genfifoentry = 0x0, transfer_len; 820 + 821 + xqspi->txbuf = transfer->tx_buf; 822 + xqspi->rxbuf = transfer->rx_buf; 823 + 824 + zynqmp_qspi_setup_transfer(qspi, transfer); 825 + 826 + genfifoentry |= xqspi->genfifocs; 827 + genfifoentry |= xqspi->genfifobus; 828 + 829 + zynqmp_qspi_txrxsetup(xqspi, transfer, &genfifoentry); 830 + 831 + if (xqspi->mode == GQSPI_MODE_DMA) 832 + transfer_len = xqspi->dma_rx_bytes; 833 + else 834 + transfer_len = transfer->len; 835 + 836 + xqspi->genfifoentry = genfifoentry; 837 + if ((transfer_len) < GQSPI_GENFIFO_IMM_DATA_MASK) { 838 + genfifoentry &= ~GQSPI_GENFIFO_IMM_DATA_MASK; 839 + genfifoentry |= transfer_len; 840 + zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, genfifoentry); 841 + } else { 842 + int tempcount = transfer_len; 843 + u32 exponent = 8; /* 2^8 = 256 */ 844 + u8 imm_data = tempcount & 0xFF; 845 + 846 + tempcount &= ~(tempcount & 0xFF); 847 + /* Immediate entry */ 848 + if (tempcount != 0) { 849 + /* Exponent entries */ 850 + genfifoentry |= GQSPI_GENFIFO_EXP; 851 + while (tempcount != 0) { 852 + if (tempcount & GQSPI_GENFIFO_EXP_START) { 853 + genfifoentry &= 854 + ~GQSPI_GENFIFO_IMM_DATA_MASK; 855 + genfifoentry |= exponent; 856 + zynqmp_gqspi_write(xqspi, 857 + GQSPI_GEN_FIFO_OFST, 858 + genfifoentry); 859 + } 860 + tempcount = tempcount >> 1; 861 + exponent++; 862 + } 863 + } 864 + if (imm_data != 0) { 865 + genfifoentry &= ~GQSPI_GENFIFO_EXP; 866 + genfifoentry &= ~GQSPI_GENFIFO_IMM_DATA_MASK; 867 + genfifoentry |= (u8) (imm_data & 0xFF); 868 + zynqmp_gqspi_write(xqspi, 869 + GQSPI_GEN_FIFO_OFST, genfifoentry); 870 + } 871 + } 872 + 873 + if ((xqspi->mode == GQSPI_MODE_IO) && 874 + (xqspi->rxbuf != NULL)) { 875 + /* Dummy generic FIFO entry */ 876 + zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, 0x0); 877 + } 878 + 879 + /* Since we are using manual mode */ 880 + zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, 881 + zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST) | 882 + GQSPI_CFG_START_GEN_FIFO_MASK); 883 + 884 + if (xqspi->txbuf != NULL) 885 + /* Enable interrupts for TX */ 886 + zynqmp_gqspi_write(xqspi, GQSPI_IER_OFST, 887 + GQSPI_IER_TXEMPTY_MASK | 888 + GQSPI_IER_GENFIFOEMPTY_MASK | 889 + GQSPI_IER_TXNOT_FULL_MASK); 890 + 891 + if (xqspi->rxbuf != NULL) { 892 + /* Enable interrupts for RX */ 893 + if (xqspi->mode == GQSPI_MODE_DMA) { 894 + /* Enable DMA interrupts */ 895 + zynqmp_gqspi_write(xqspi, 896 + GQSPI_QSPIDMA_DST_I_EN_OFST, 897 + GQSPI_QSPIDMA_DST_I_EN_DONE_MASK); 898 + } else { 899 + zynqmp_gqspi_write(xqspi, GQSPI_IER_OFST, 900 + GQSPI_IER_GENFIFOEMPTY_MASK | 901 + GQSPI_IER_RXNEMPTY_MASK | 902 + GQSPI_IER_RXEMPTY_MASK); 903 + } 904 + } 905 + 906 + return transfer->len; 907 + } 908 + 909 + /** 910 + * zynqmp_qspi_suspend: Suspend method for the QSPI driver 911 + * @_dev: Address of the platform_device structure 912 + * 913 + * This function stops the QSPI driver queue and disables the QSPI controller 914 + * 915 + * Return: Always 0 916 + */ 917 + static int __maybe_unused zynqmp_qspi_suspend(struct device *dev) 918 + { 919 + struct platform_device *pdev = container_of(dev, 920 + struct platform_device, 921 + dev); 922 + struct spi_master *master = platform_get_drvdata(pdev); 923 + 924 + spi_master_suspend(master); 925 + 926 + zynqmp_unprepare_transfer_hardware(master); 927 + 928 + return 0; 929 + } 930 + 931 + /** 932 + * zynqmp_qspi_resume: Resume method for the QSPI driver 933 + * @dev: Address of the platform_device structure 934 + * 935 + * The function starts the QSPI driver queue and initializes the QSPI 936 + * controller 937 + * 938 + * Return: 0 on success; error value otherwise 939 + */ 940 + static int __maybe_unused zynqmp_qspi_resume(struct device *dev) 941 + { 942 + struct platform_device *pdev = container_of(dev, 943 + struct platform_device, 944 + dev); 945 + struct spi_master *master = platform_get_drvdata(pdev); 946 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); 947 + int ret = 0; 948 + 949 + ret = clk_enable(xqspi->pclk); 950 + if (ret) { 951 + dev_err(dev, "Cannot enable APB clock.\n"); 952 + return ret; 953 + } 954 + 955 + ret = clk_enable(xqspi->refclk); 956 + if (ret) { 957 + dev_err(dev, "Cannot enable device clock.\n"); 958 + clk_disable(xqspi->pclk); 959 + return ret; 960 + } 961 + 962 + spi_master_resume(master); 963 + 964 + return 0; 965 + } 966 + 967 + static SIMPLE_DEV_PM_OPS(zynqmp_qspi_dev_pm_ops, zynqmp_qspi_suspend, 968 + zynqmp_qspi_resume); 969 + 970 + /** 971 + * zynqmp_qspi_probe: Probe method for the QSPI driver 972 + * @pdev: Pointer to the platform_device structure 973 + * 974 + * This function initializes the driver data structures and the hardware. 975 + * 976 + * Return: 0 on success; error value otherwise 977 + */ 978 + static int zynqmp_qspi_probe(struct platform_device *pdev) 979 + { 980 + int ret = 0; 981 + struct spi_master *master; 982 + struct zynqmp_qspi *xqspi; 983 + struct resource *res; 984 + struct device *dev = &pdev->dev; 985 + 986 + master = spi_alloc_master(&pdev->dev, sizeof(*xqspi)); 987 + if (!master) 988 + return -ENOMEM; 989 + 990 + xqspi = spi_master_get_devdata(master); 991 + master->dev.of_node = pdev->dev.of_node; 992 + platform_set_drvdata(pdev, master); 993 + 994 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 995 + xqspi->regs = devm_ioremap_resource(&pdev->dev, res); 996 + if (IS_ERR(xqspi->regs)) { 997 + ret = PTR_ERR(xqspi->regs); 998 + goto remove_master; 999 + } 1000 + 1001 + xqspi->dev = dev; 1002 + xqspi->pclk = devm_clk_get(&pdev->dev, "pclk"); 1003 + if (IS_ERR(xqspi->pclk)) { 1004 + dev_err(dev, "pclk clock not found.\n"); 1005 + ret = PTR_ERR(xqspi->pclk); 1006 + goto remove_master; 1007 + } 1008 + 1009 + ret = clk_prepare_enable(xqspi->pclk); 1010 + if (ret) { 1011 + dev_err(dev, "Unable to enable APB clock.\n"); 1012 + goto remove_master; 1013 + } 1014 + 1015 + xqspi->refclk = devm_clk_get(&pdev->dev, "ref_clk"); 1016 + if (IS_ERR(xqspi->refclk)) { 1017 + dev_err(dev, "ref_clk clock not found.\n"); 1018 + ret = PTR_ERR(xqspi->refclk); 1019 + goto clk_dis_pclk; 1020 + } 1021 + 1022 + ret = clk_prepare_enable(xqspi->refclk); 1023 + if (ret) { 1024 + dev_err(dev, "Unable to enable device clock.\n"); 1025 + goto clk_dis_pclk; 1026 + } 1027 + 1028 + /* QSPI controller initializations */ 1029 + zynqmp_qspi_init_hw(xqspi); 1030 + 1031 + xqspi->irq = platform_get_irq(pdev, 0); 1032 + if (xqspi->irq <= 0) { 1033 + ret = -ENXIO; 1034 + dev_err(dev, "irq resource not found\n"); 1035 + goto clk_dis_all; 1036 + } 1037 + ret = devm_request_irq(&pdev->dev, xqspi->irq, zynqmp_qspi_irq, 1038 + 0, pdev->name, master); 1039 + if (ret != 0) { 1040 + ret = -ENXIO; 1041 + dev_err(dev, "request_irq failed\n"); 1042 + goto clk_dis_all; 1043 + } 1044 + 1045 + master->num_chipselect = GQSPI_DEFAULT_NUM_CS; 1046 + 1047 + master->setup = zynqmp_qspi_setup; 1048 + master->set_cs = zynqmp_qspi_chipselect; 1049 + master->transfer_one = zynqmp_qspi_start_transfer; 1050 + master->prepare_transfer_hardware = zynqmp_prepare_transfer_hardware; 1051 + master->unprepare_transfer_hardware = 1052 + zynqmp_unprepare_transfer_hardware; 1053 + master->max_speed_hz = clk_get_rate(xqspi->refclk) / 2; 1054 + master->bits_per_word_mask = SPI_BPW_MASK(8); 1055 + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_RX_DUAL | SPI_RX_QUAD | 1056 + SPI_TX_DUAL | SPI_TX_QUAD; 1057 + 1058 + if (master->dev.parent == NULL) 1059 + master->dev.parent = &master->dev; 1060 + 1061 + ret = spi_register_master(master); 1062 + if (ret) 1063 + goto clk_dis_all; 1064 + 1065 + return 0; 1066 + 1067 + clk_dis_all: 1068 + clk_disable_unprepare(xqspi->refclk); 1069 + clk_dis_pclk: 1070 + clk_disable_unprepare(xqspi->pclk); 1071 + remove_master: 1072 + spi_master_put(master); 1073 + 1074 + return ret; 1075 + } 1076 + 1077 + /** 1078 + * zynqmp_qspi_remove: Remove method for the QSPI driver 1079 + * @pdev: Pointer to the platform_device structure 1080 + * 1081 + * This function is called if a device is physically removed from the system or 1082 + * if the driver module is being unloaded. It frees all resources allocated to 1083 + * the device. 1084 + * 1085 + * Return: 0 Always 1086 + */ 1087 + static int zynqmp_qspi_remove(struct platform_device *pdev) 1088 + { 1089 + struct spi_master *master = platform_get_drvdata(pdev); 1090 + struct zynqmp_qspi *xqspi = spi_master_get_devdata(master); 1091 + 1092 + zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0); 1093 + clk_disable_unprepare(xqspi->refclk); 1094 + clk_disable_unprepare(xqspi->pclk); 1095 + 1096 + spi_unregister_master(master); 1097 + 1098 + return 0; 1099 + } 1100 + 1101 + static const struct of_device_id zynqmp_qspi_of_match[] = { 1102 + { .compatible = "xlnx,zynqmp-qspi-1.0", }, 1103 + { /* End of table */ } 1104 + }; 1105 + 1106 + MODULE_DEVICE_TABLE(of, zynqmp_qspi_of_match); 1107 + 1108 + static struct platform_driver zynqmp_qspi_driver = { 1109 + .probe = zynqmp_qspi_probe, 1110 + .remove = zynqmp_qspi_remove, 1111 + .driver = { 1112 + .name = "zynqmp-qspi", 1113 + .of_match_table = zynqmp_qspi_of_match, 1114 + .pm = &zynqmp_qspi_dev_pm_ops, 1115 + }, 1116 + }; 1117 + 1118 + module_platform_driver(zynqmp_qspi_driver); 1119 + 1120 + MODULE_AUTHOR("Xilinx, Inc."); 1121 + MODULE_DESCRIPTION("Xilinx Zynqmp QSPI driver"); 1122 + MODULE_LICENSE("GPL");
+11 -24
drivers/spi/spidev.c
··· 95 95 96 96 /*-------------------------------------------------------------------------*/ 97 97 98 - /* 99 - * We can't use the standard synchronous wrappers for file I/O; we 100 - * need to protect against async removal of the underlying spi_device. 101 - */ 102 - static void spidev_complete(void *arg) 103 - { 104 - complete(arg); 105 - } 106 - 107 98 static ssize_t 108 99 spidev_sync(struct spidev_data *spidev, struct spi_message *message) 109 100 { 110 101 DECLARE_COMPLETION_ONSTACK(done); 111 102 int status; 112 - 113 - message->complete = spidev_complete; 114 - message->context = &done; 103 + struct spi_device *spi; 115 104 116 105 spin_lock_irq(&spidev->spi_lock); 117 - if (spidev->spi == NULL) 118 - status = -ESHUTDOWN; 119 - else 120 - status = spi_async(spidev->spi, message); 106 + spi = spidev->spi; 121 107 spin_unlock_irq(&spidev->spi_lock); 122 108 123 - if (status == 0) { 124 - wait_for_completion(&done); 125 - status = message->status; 126 - if (status == 0) 127 - status = message->actual_length; 128 - } 109 + if (spi == NULL) 110 + status = -ESHUTDOWN; 111 + else 112 + status = spi_sync(spi, message); 113 + 114 + if (status == 0) 115 + status = message->actual_length; 116 + 129 117 return status; 130 118 } 131 119 ··· 635 647 static int spidev_release(struct inode *inode, struct file *filp) 636 648 { 637 649 struct spidev_data *spidev; 638 - int status = 0; 639 650 640 651 mutex_lock(&device_list_lock); 641 652 spidev = filp->private_data; ··· 663 676 } 664 677 mutex_unlock(&device_list_lock); 665 678 666 - return status; 679 + return 0; 667 680 } 668 681 669 682 static const struct file_operations spidev_fops = {