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

Merge remote-tracking branch 'spi/topic/xilinx' into spi-next

+163 -135
+163 -135
drivers/spi/spi-xilinx.c
··· 22 22 #include <linux/spi/xilinx_spi.h> 23 23 #include <linux/io.h> 24 24 25 + #define XILINX_SPI_MAX_CS 32 26 + 25 27 #define XILINX_SPI_NAME "xilinx_spi" 26 28 27 29 /* Register definitions as per "OPB Serial Peripheral Interface (SPI) (v1.00e) ··· 36 34 #define XSPI_CR_MASTER_MODE 0x04 37 35 #define XSPI_CR_CPOL 0x08 38 36 #define XSPI_CR_CPHA 0x10 39 - #define XSPI_CR_MODE_MASK (XSPI_CR_CPHA | XSPI_CR_CPOL) 37 + #define XSPI_CR_MODE_MASK (XSPI_CR_CPHA | XSPI_CR_CPOL | \ 38 + XSPI_CR_LSB_FIRST | XSPI_CR_LOOP) 40 39 #define XSPI_CR_TXFIFO_RESET 0x20 41 40 #define XSPI_CR_RXFIFO_RESET 0x40 42 41 #define XSPI_CR_MANUAL_SSELECT 0x80 ··· 88 85 89 86 u8 *rx_ptr; /* pointer in the Tx buffer */ 90 87 const u8 *tx_ptr; /* pointer in the Rx buffer */ 91 - int remaining_bytes; /* the number of bytes left to transfer */ 92 - u8 bits_per_word; 88 + u8 bytes_per_word; 89 + int buffer_size; /* buffer size in words */ 90 + u32 cs_inactive; /* Level of the CS pins when inactive*/ 93 91 unsigned int (*read_fn)(void __iomem *); 94 92 void (*write_fn)(u32, void __iomem *); 95 - void (*tx_fn)(struct xilinx_spi *); 96 - void (*rx_fn)(struct xilinx_spi *); 97 93 }; 98 94 99 95 static void xspi_write32(u32 val, void __iomem *addr) ··· 115 113 return ioread32be(addr); 116 114 } 117 115 118 - static void xspi_tx8(struct xilinx_spi *xspi) 116 + static void xilinx_spi_tx(struct xilinx_spi *xspi) 119 117 { 120 - xspi->write_fn(*xspi->tx_ptr, xspi->regs + XSPI_TXD_OFFSET); 121 - xspi->tx_ptr++; 122 - } 118 + u32 data = 0; 123 119 124 - static void xspi_tx16(struct xilinx_spi *xspi) 125 - { 126 - xspi->write_fn(*(u16 *)(xspi->tx_ptr), xspi->regs + XSPI_TXD_OFFSET); 127 - xspi->tx_ptr += 2; 128 - } 129 - 130 - static void xspi_tx32(struct xilinx_spi *xspi) 131 - { 132 - xspi->write_fn(*(u32 *)(xspi->tx_ptr), xspi->regs + XSPI_TXD_OFFSET); 133 - xspi->tx_ptr += 4; 134 - } 135 - 136 - static void xspi_rx8(struct xilinx_spi *xspi) 137 - { 138 - u32 data = xspi->read_fn(xspi->regs + XSPI_RXD_OFFSET); 139 - if (xspi->rx_ptr) { 140 - *xspi->rx_ptr = data & 0xff; 141 - xspi->rx_ptr++; 120 + if (!xspi->tx_ptr) { 121 + xspi->write_fn(0, xspi->regs + XSPI_TXD_OFFSET); 122 + return; 142 123 } 143 - } 144 124 145 - static void xspi_rx16(struct xilinx_spi *xspi) 146 - { 147 - u32 data = xspi->read_fn(xspi->regs + XSPI_RXD_OFFSET); 148 - if (xspi->rx_ptr) { 149 - *(u16 *)(xspi->rx_ptr) = data & 0xffff; 150 - xspi->rx_ptr += 2; 125 + switch (xspi->bytes_per_word) { 126 + case 1: 127 + data = *(u8 *)(xspi->tx_ptr); 128 + break; 129 + case 2: 130 + data = *(u16 *)(xspi->tx_ptr); 131 + break; 132 + case 4: 133 + data = *(u32 *)(xspi->tx_ptr); 134 + break; 151 135 } 136 + 137 + xspi->write_fn(data, xspi->regs + XSPI_TXD_OFFSET); 138 + xspi->tx_ptr += xspi->bytes_per_word; 152 139 } 153 140 154 - static void xspi_rx32(struct xilinx_spi *xspi) 141 + static void xilinx_spi_rx(struct xilinx_spi *xspi) 155 142 { 156 143 u32 data = xspi->read_fn(xspi->regs + XSPI_RXD_OFFSET); 157 - if (xspi->rx_ptr) { 144 + 145 + if (!xspi->rx_ptr) 146 + return; 147 + 148 + switch (xspi->bytes_per_word) { 149 + case 1: 150 + *(u8 *)(xspi->rx_ptr) = data; 151 + break; 152 + case 2: 153 + *(u16 *)(xspi->rx_ptr) = data; 154 + break; 155 + case 4: 158 156 *(u32 *)(xspi->rx_ptr) = data; 159 - xspi->rx_ptr += 4; 157 + break; 160 158 } 159 + 160 + xspi->rx_ptr += xspi->bytes_per_word; 161 161 } 162 162 163 163 static void xspi_init_hw(struct xilinx_spi *xspi) ··· 169 165 /* Reset the SPI device */ 170 166 xspi->write_fn(XIPIF_V123B_RESET_MASK, 171 167 regs_base + XIPIF_V123B_RESETR_OFFSET); 172 - /* Disable all the interrupts just in case */ 173 - xspi->write_fn(0, regs_base + XIPIF_V123B_IIER_OFFSET); 174 - /* Enable the global IPIF interrupt */ 175 - xspi->write_fn(XIPIF_V123B_GINTR_ENABLE, 176 - regs_base + XIPIF_V123B_DGIER_OFFSET); 168 + /* Enable the transmit empty interrupt, which we use to determine 169 + * progress on the transmission. 170 + */ 171 + xspi->write_fn(XSPI_INTR_TX_EMPTY, 172 + regs_base + XIPIF_V123B_IIER_OFFSET); 173 + /* Disable the global IPIF interrupt */ 174 + xspi->write_fn(0, regs_base + XIPIF_V123B_DGIER_OFFSET); 177 175 /* Deselect the slave on the SPI bus */ 178 176 xspi->write_fn(0xffff, regs_base + XSPI_SSR_OFFSET); 179 177 /* Disable the transmitter, enable Manual Slave Select Assertion, 180 178 * put SPI controller into master mode, and enable it */ 181 - xspi->write_fn(XSPI_CR_TRANS_INHIBIT | XSPI_CR_MANUAL_SSELECT | 182 - XSPI_CR_MASTER_MODE | XSPI_CR_ENABLE | XSPI_CR_TXFIFO_RESET | 183 - XSPI_CR_RXFIFO_RESET, regs_base + XSPI_CR_OFFSET); 179 + xspi->write_fn(XSPI_CR_MANUAL_SSELECT | XSPI_CR_MASTER_MODE | 180 + XSPI_CR_ENABLE | XSPI_CR_TXFIFO_RESET | XSPI_CR_RXFIFO_RESET, 181 + regs_base + XSPI_CR_OFFSET); 184 182 } 185 183 186 184 static void xilinx_spi_chipselect(struct spi_device *spi, int is_on) 187 185 { 188 186 struct xilinx_spi *xspi = spi_master_get_devdata(spi->master); 187 + u16 cr; 188 + u32 cs; 189 189 190 190 if (is_on == BITBANG_CS_INACTIVE) { 191 191 /* Deselect the slave on the SPI bus */ 192 - xspi->write_fn(0xffff, xspi->regs + XSPI_SSR_OFFSET); 193 - } else if (is_on == BITBANG_CS_ACTIVE) { 194 - /* Set the SPI clock phase and polarity */ 195 - u16 cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET) 196 - & ~XSPI_CR_MODE_MASK; 197 - if (spi->mode & SPI_CPHA) 198 - cr |= XSPI_CR_CPHA; 199 - if (spi->mode & SPI_CPOL) 200 - cr |= XSPI_CR_CPOL; 201 - xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET); 202 - 203 - /* We do not check spi->max_speed_hz here as the SPI clock 204 - * frequency is not software programmable (the IP block design 205 - * parameter) 206 - */ 207 - 208 - /* Activate the chip select */ 209 - xspi->write_fn(~(0x0001 << spi->chip_select), 210 - xspi->regs + XSPI_SSR_OFFSET); 192 + xspi->write_fn(xspi->cs_inactive, xspi->regs + XSPI_SSR_OFFSET); 193 + return; 211 194 } 195 + 196 + /* Set the SPI clock phase and polarity */ 197 + cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET) & ~XSPI_CR_MODE_MASK; 198 + if (spi->mode & SPI_CPHA) 199 + cr |= XSPI_CR_CPHA; 200 + if (spi->mode & SPI_CPOL) 201 + cr |= XSPI_CR_CPOL; 202 + if (spi->mode & SPI_LSB_FIRST) 203 + cr |= XSPI_CR_LSB_FIRST; 204 + if (spi->mode & SPI_LOOP) 205 + cr |= XSPI_CR_LOOP; 206 + xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET); 207 + 208 + /* We do not check spi->max_speed_hz here as the SPI clock 209 + * frequency is not software programmable (the IP block design 210 + * parameter) 211 + */ 212 + 213 + cs = xspi->cs_inactive; 214 + cs ^= BIT(spi->chip_select); 215 + 216 + /* Activate the chip select */ 217 + xspi->write_fn(cs, xspi->regs + XSPI_SSR_OFFSET); 212 218 } 213 219 214 220 /* spi_bitbang requires custom setup_transfer() to be defined if there is a ··· 227 213 static int xilinx_spi_setup_transfer(struct spi_device *spi, 228 214 struct spi_transfer *t) 229 215 { 216 + struct xilinx_spi *xspi = spi_master_get_devdata(spi->master); 217 + 218 + if (spi->mode & SPI_CS_HIGH) 219 + xspi->cs_inactive &= ~BIT(spi->chip_select); 220 + else 221 + xspi->cs_inactive |= BIT(spi->chip_select); 222 + 230 223 return 0; 231 - } 232 - 233 - static void xilinx_spi_fill_tx_fifo(struct xilinx_spi *xspi) 234 - { 235 - u8 sr; 236 - 237 - /* Fill the Tx FIFO with as many bytes as possible */ 238 - sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); 239 - while ((sr & XSPI_SR_TX_FULL_MASK) == 0 && xspi->remaining_bytes > 0) { 240 - if (xspi->tx_ptr) 241 - xspi->tx_fn(xspi); 242 - else 243 - xspi->write_fn(0, xspi->regs + XSPI_TXD_OFFSET); 244 - xspi->remaining_bytes -= xspi->bits_per_word / 8; 245 - sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); 246 - } 247 224 } 248 225 249 226 static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) 250 227 { 251 228 struct xilinx_spi *xspi = spi_master_get_devdata(spi->master); 252 - u32 ipif_ier; 229 + int remaining_words; /* the number of words left to transfer */ 230 + bool use_irq = false; 231 + u16 cr = 0; 253 232 254 233 /* We get here with transmitter inhibited */ 255 234 256 235 xspi->tx_ptr = t->tx_buf; 257 236 xspi->rx_ptr = t->rx_buf; 258 - xspi->remaining_bytes = t->len; 237 + remaining_words = t->len / xspi->bytes_per_word; 259 238 reinit_completion(&xspi->done); 260 239 240 + if (xspi->irq >= 0 && remaining_words > xspi->buffer_size) { 241 + use_irq = true; 242 + xspi->write_fn(XSPI_INTR_TX_EMPTY, 243 + xspi->regs + XIPIF_V123B_IISR_OFFSET); 244 + /* Enable the global IPIF interrupt */ 245 + xspi->write_fn(XIPIF_V123B_GINTR_ENABLE, 246 + xspi->regs + XIPIF_V123B_DGIER_OFFSET); 247 + /* Inhibit irq to avoid spurious irqs on tx_empty*/ 248 + cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET); 249 + xspi->write_fn(cr | XSPI_CR_TRANS_INHIBIT, 250 + xspi->regs + XSPI_CR_OFFSET); 251 + } 261 252 262 - /* Enable the transmit empty interrupt, which we use to determine 263 - * progress on the transmission. 264 - */ 265 - ipif_ier = xspi->read_fn(xspi->regs + XIPIF_V123B_IIER_OFFSET); 266 - xspi->write_fn(ipif_ier | XSPI_INTR_TX_EMPTY, 267 - xspi->regs + XIPIF_V123B_IIER_OFFSET); 253 + while (remaining_words) { 254 + int n_words, tx_words, rx_words; 268 255 269 - for (;;) { 270 - u16 cr; 271 - u8 sr; 256 + n_words = min(remaining_words, xspi->buffer_size); 272 257 273 - xilinx_spi_fill_tx_fifo(xspi); 258 + tx_words = n_words; 259 + while (tx_words--) 260 + xilinx_spi_tx(xspi); 274 261 275 262 /* Start the transfer by not inhibiting the transmitter any 276 263 * longer 277 264 */ 278 - cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET) & 279 - ~XSPI_CR_TRANS_INHIBIT; 280 - xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET); 281 265 282 - wait_for_completion(&xspi->done); 266 + if (use_irq) { 267 + xspi->write_fn(cr, xspi->regs + XSPI_CR_OFFSET); 268 + wait_for_completion(&xspi->done); 269 + } else 270 + while (!(xspi->read_fn(xspi->regs + XSPI_SR_OFFSET) & 271 + XSPI_SR_TX_EMPTY_MASK)) 272 + ; 283 273 284 274 /* A transmit has just completed. Process received data and 285 275 * check for more data to transmit. Always inhibit the 286 276 * transmitter while the Isr refills the transmit register/FIFO, 287 277 * or make sure it is stopped if we're done. 288 278 */ 289 - cr = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET); 290 - xspi->write_fn(cr | XSPI_CR_TRANS_INHIBIT, 279 + if (use_irq) 280 + xspi->write_fn(cr | XSPI_CR_TRANS_INHIBIT, 291 281 xspi->regs + XSPI_CR_OFFSET); 292 282 293 283 /* Read out all the data from the Rx FIFO */ 294 - sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); 295 - while ((sr & XSPI_SR_RX_EMPTY_MASK) == 0) { 296 - xspi->rx_fn(xspi); 297 - sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); 298 - } 284 + rx_words = n_words; 285 + while (rx_words--) 286 + xilinx_spi_rx(xspi); 299 287 300 - /* See if there is more data to send */ 301 - if (xspi->remaining_bytes <= 0) 302 - break; 288 + remaining_words -= n_words; 303 289 } 304 290 305 - /* Disable the transmit empty interrupt */ 306 - xspi->write_fn(ipif_ier, xspi->regs + XIPIF_V123B_IIER_OFFSET); 291 + if (use_irq) 292 + xspi->write_fn(0, xspi->regs + XIPIF_V123B_DGIER_OFFSET); 307 293 308 - return t->len - xspi->remaining_bytes; 294 + return t->len; 309 295 } 310 296 311 297 ··· 328 314 } 329 315 330 316 return IRQ_HANDLED; 317 + } 318 + 319 + static int xilinx_spi_find_buffer_size(struct xilinx_spi *xspi) 320 + { 321 + u8 sr; 322 + int n_words = 0; 323 + 324 + /* 325 + * Before the buffer_size detection we reset the core 326 + * to make sure we start with a clean state. 327 + */ 328 + xspi->write_fn(XIPIF_V123B_RESET_MASK, 329 + xspi->regs + XIPIF_V123B_RESETR_OFFSET); 330 + 331 + /* Fill the Tx FIFO with as many words as possible */ 332 + do { 333 + xspi->write_fn(0, xspi->regs + XSPI_TXD_OFFSET); 334 + sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); 335 + n_words++; 336 + } while (!(sr & XSPI_SR_TX_FULL_MASK)); 337 + 338 + return n_words; 331 339 } 332 340 333 341 static const struct of_device_id xilinx_spi_of_match[] = { ··· 384 348 return -EINVAL; 385 349 } 386 350 351 + if (num_cs > XILINX_SPI_MAX_CS) { 352 + dev_err(&pdev->dev, "Invalid number of spi slaves\n"); 353 + return -EINVAL; 354 + } 355 + 387 356 master = spi_alloc_master(&pdev->dev, sizeof(struct xilinx_spi)); 388 357 if (!master) 389 358 return -ENODEV; 390 359 391 360 /* the spi->mode bits understood by this driver: */ 392 - master->mode_bits = SPI_CPOL | SPI_CPHA; 361 + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST | SPI_LOOP | 362 + SPI_CS_HIGH; 393 363 394 364 xspi = spi_master_get_devdata(master); 365 + xspi->cs_inactive = 0xffffffff; 395 366 xspi->bitbang.master = master; 396 367 xspi->bitbang.chipselect = xilinx_spi_chipselect; 397 368 xspi->bitbang.setup_transfer = xilinx_spi_setup_transfer; ··· 435 392 } 436 393 437 394 master->bits_per_word_mask = SPI_BPW_MASK(bits_per_word); 438 - xspi->bits_per_word = bits_per_word; 439 - if (xspi->bits_per_word == 8) { 440 - xspi->tx_fn = xspi_tx8; 441 - xspi->rx_fn = xspi_rx8; 442 - } else if (xspi->bits_per_word == 16) { 443 - xspi->tx_fn = xspi_tx16; 444 - xspi->rx_fn = xspi_rx16; 445 - } else if (xspi->bits_per_word == 32) { 446 - xspi->tx_fn = xspi_tx32; 447 - xspi->rx_fn = xspi_rx32; 448 - } else { 449 - ret = -EINVAL; 450 - goto put_master; 395 + xspi->bytes_per_word = bits_per_word / 8; 396 + xspi->buffer_size = xilinx_spi_find_buffer_size(xspi); 397 + 398 + xspi->irq = platform_get_irq(pdev, 0); 399 + if (xspi->irq >= 0) { 400 + /* Register for SPI Interrupt */ 401 + ret = devm_request_irq(&pdev->dev, xspi->irq, xilinx_spi_irq, 0, 402 + dev_name(&pdev->dev), xspi); 403 + if (ret) 404 + goto put_master; 451 405 } 452 406 453 407 /* SPI controller initializations */ 454 408 xspi_init_hw(xspi); 455 - 456 - xspi->irq = platform_get_irq(pdev, 0); 457 - if (xspi->irq < 0) { 458 - ret = xspi->irq; 459 - goto put_master; 460 - } 461 - 462 - /* Register for SPI Interrupt */ 463 - ret = devm_request_irq(&pdev->dev, xspi->irq, xilinx_spi_irq, 0, 464 - dev_name(&pdev->dev), xspi); 465 - if (ret) 466 - goto put_master; 467 409 468 410 ret = spi_bitbang_start(&xspi->bitbang); 469 411 if (ret) {