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/delay', 'spi/topic/dw', 'spi/topic/fsl-dspi' and 'spi/topic/fsl-espi' into spi-next

+706 -350
-1
drivers/spi/Kconfig
··· 380 380 config SPI_FSL_ESPI 381 381 tristate "Freescale eSPI controller" 382 382 depends on FSL_SOC 383 - select SPI_FSL_LIB 384 383 help 385 384 This enables using the Freescale eSPI controllers in master mode. 386 385 From MPC8536, 85xx platform uses the controller, and all P10xx,
+1
drivers/spi/spi-dw.c
··· 502 502 master->handle_err = dw_spi_handle_err; 503 503 master->max_speed_hz = dws->max_freq; 504 504 master->dev.of_node = dev->of_node; 505 + master->flags = SPI_MASTER_GPIO_SS; 505 506 506 507 /* Basic HW init */ 507 508 spi_hw_init(dev, dws);
+302 -4
drivers/spi/spi-fsl-dspi.c
··· 15 15 16 16 #include <linux/clk.h> 17 17 #include <linux/delay.h> 18 + #include <linux/dmaengine.h> 19 + #include <linux/dma-mapping.h> 18 20 #include <linux/err.h> 19 21 #include <linux/errno.h> 20 22 #include <linux/interrupt.h> ··· 42 40 #define TRAN_STATE_WORD_ODD_NUM 0x04 43 41 44 42 #define DSPI_FIFO_SIZE 4 43 + #define DSPI_DMA_BUFSIZE (DSPI_FIFO_SIZE * 1024) 45 44 46 45 #define SPI_MCR 0x00 47 46 #define SPI_MCR_MASTER (1 << 31) ··· 74 71 #define SPI_SR_EOQF 0x10000000 75 72 #define SPI_SR_TCFQF 0x80000000 76 73 #define SPI_SR_CLEAR 0xdaad0000 74 + 75 + #define SPI_RSER_TFFFE BIT(25) 76 + #define SPI_RSER_TFFFD BIT(24) 77 + #define SPI_RSER_RFDFE BIT(17) 78 + #define SPI_RSER_RFDFD BIT(16) 77 79 78 80 #define SPI_RSER 0x30 79 81 #define SPI_RSER_EOQFE 0x10000000 ··· 117 109 118 110 #define SPI_TCR_TCNT_MAX 0x10000 119 111 112 + #define DMA_COMPLETION_TIMEOUT msecs_to_jiffies(3000) 113 + 120 114 struct chip_data { 121 115 u32 mcr_val; 122 116 u32 ctar_val; ··· 128 118 enum dspi_trans_mode { 129 119 DSPI_EOQ_MODE = 0, 130 120 DSPI_TCFQ_MODE, 121 + DSPI_DMA_MODE, 131 122 }; 132 123 133 124 struct fsl_dspi_devtype_data { ··· 137 126 }; 138 127 139 128 static const struct fsl_dspi_devtype_data vf610_data = { 140 - .trans_mode = DSPI_EOQ_MODE, 129 + .trans_mode = DSPI_DMA_MODE, 141 130 .max_clock_factor = 2, 142 131 }; 143 132 ··· 149 138 static const struct fsl_dspi_devtype_data ls2085a_data = { 150 139 .trans_mode = DSPI_TCFQ_MODE, 151 140 .max_clock_factor = 8, 141 + }; 142 + 143 + struct fsl_dspi_dma { 144 + /* Length of transfer in words of DSPI_FIFO_SIZE */ 145 + u32 curr_xfer_len; 146 + 147 + u32 *tx_dma_buf; 148 + struct dma_chan *chan_tx; 149 + dma_addr_t tx_dma_phys; 150 + struct completion cmd_tx_complete; 151 + struct dma_async_tx_descriptor *tx_desc; 152 + 153 + u32 *rx_dma_buf; 154 + struct dma_chan *chan_rx; 155 + dma_addr_t rx_dma_phys; 156 + struct completion cmd_rx_complete; 157 + struct dma_async_tx_descriptor *rx_desc; 152 158 }; 153 159 154 160 struct fsl_dspi { ··· 194 166 u32 waitflags; 195 167 196 168 u32 spi_tcnt; 169 + struct fsl_dspi_dma *dma; 197 170 }; 171 + 172 + static u32 dspi_data_to_pushr(struct fsl_dspi *dspi, int tx_word); 198 173 199 174 static inline int is_double_byte_mode(struct fsl_dspi *dspi) 200 175 { ··· 206 175 regmap_read(dspi->regmap, SPI_CTAR(0), &val); 207 176 208 177 return ((val & SPI_FRAME_BITS_MASK) == SPI_FRAME_BITS(8)) ? 0 : 1; 178 + } 179 + 180 + static void dspi_tx_dma_callback(void *arg) 181 + { 182 + struct fsl_dspi *dspi = arg; 183 + struct fsl_dspi_dma *dma = dspi->dma; 184 + 185 + complete(&dma->cmd_tx_complete); 186 + } 187 + 188 + static void dspi_rx_dma_callback(void *arg) 189 + { 190 + struct fsl_dspi *dspi = arg; 191 + struct fsl_dspi_dma *dma = dspi->dma; 192 + int rx_word; 193 + int i; 194 + u16 d; 195 + 196 + rx_word = is_double_byte_mode(dspi); 197 + 198 + if (!(dspi->dataflags & TRAN_STATE_RX_VOID)) { 199 + for (i = 0; i < dma->curr_xfer_len; i++) { 200 + d = dspi->dma->rx_dma_buf[i]; 201 + rx_word ? (*(u16 *)dspi->rx = d) : 202 + (*(u8 *)dspi->rx = d); 203 + dspi->rx += rx_word + 1; 204 + } 205 + } 206 + 207 + complete(&dma->cmd_rx_complete); 208 + } 209 + 210 + static int dspi_next_xfer_dma_submit(struct fsl_dspi *dspi) 211 + { 212 + struct fsl_dspi_dma *dma = dspi->dma; 213 + struct device *dev = &dspi->pdev->dev; 214 + int time_left; 215 + int tx_word; 216 + int i; 217 + 218 + tx_word = is_double_byte_mode(dspi); 219 + 220 + for (i = 0; i < dma->curr_xfer_len; i++) { 221 + dspi->dma->tx_dma_buf[i] = dspi_data_to_pushr(dspi, tx_word); 222 + if ((dspi->cs_change) && (!dspi->len)) 223 + dspi->dma->tx_dma_buf[i] &= ~SPI_PUSHR_CONT; 224 + } 225 + 226 + dma->tx_desc = dmaengine_prep_slave_single(dma->chan_tx, 227 + dma->tx_dma_phys, 228 + dma->curr_xfer_len * 229 + DMA_SLAVE_BUSWIDTH_4_BYTES, 230 + DMA_MEM_TO_DEV, 231 + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 232 + if (!dma->tx_desc) { 233 + dev_err(dev, "Not able to get desc for DMA xfer\n"); 234 + return -EIO; 235 + } 236 + 237 + dma->tx_desc->callback = dspi_tx_dma_callback; 238 + dma->tx_desc->callback_param = dspi; 239 + if (dma_submit_error(dmaengine_submit(dma->tx_desc))) { 240 + dev_err(dev, "DMA submit failed\n"); 241 + return -EINVAL; 242 + } 243 + 244 + dma->rx_desc = dmaengine_prep_slave_single(dma->chan_rx, 245 + dma->rx_dma_phys, 246 + dma->curr_xfer_len * 247 + DMA_SLAVE_BUSWIDTH_4_BYTES, 248 + DMA_DEV_TO_MEM, 249 + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 250 + if (!dma->rx_desc) { 251 + dev_err(dev, "Not able to get desc for DMA xfer\n"); 252 + return -EIO; 253 + } 254 + 255 + dma->rx_desc->callback = dspi_rx_dma_callback; 256 + dma->rx_desc->callback_param = dspi; 257 + if (dma_submit_error(dmaengine_submit(dma->rx_desc))) { 258 + dev_err(dev, "DMA submit failed\n"); 259 + return -EINVAL; 260 + } 261 + 262 + reinit_completion(&dspi->dma->cmd_rx_complete); 263 + reinit_completion(&dspi->dma->cmd_tx_complete); 264 + 265 + dma_async_issue_pending(dma->chan_rx); 266 + dma_async_issue_pending(dma->chan_tx); 267 + 268 + time_left = wait_for_completion_timeout(&dspi->dma->cmd_tx_complete, 269 + DMA_COMPLETION_TIMEOUT); 270 + if (time_left == 0) { 271 + dev_err(dev, "DMA tx timeout\n"); 272 + dmaengine_terminate_all(dma->chan_tx); 273 + dmaengine_terminate_all(dma->chan_rx); 274 + return -ETIMEDOUT; 275 + } 276 + 277 + time_left = wait_for_completion_timeout(&dspi->dma->cmd_rx_complete, 278 + DMA_COMPLETION_TIMEOUT); 279 + if (time_left == 0) { 280 + dev_err(dev, "DMA rx timeout\n"); 281 + dmaengine_terminate_all(dma->chan_tx); 282 + dmaengine_terminate_all(dma->chan_rx); 283 + return -ETIMEDOUT; 284 + } 285 + 286 + return 0; 287 + } 288 + 289 + static int dspi_dma_xfer(struct fsl_dspi *dspi) 290 + { 291 + struct fsl_dspi_dma *dma = dspi->dma; 292 + struct device *dev = &dspi->pdev->dev; 293 + int curr_remaining_bytes; 294 + int bytes_per_buffer; 295 + int word = 1; 296 + int ret = 0; 297 + 298 + if (is_double_byte_mode(dspi)) 299 + word = 2; 300 + curr_remaining_bytes = dspi->len; 301 + bytes_per_buffer = DSPI_DMA_BUFSIZE / DSPI_FIFO_SIZE; 302 + while (curr_remaining_bytes) { 303 + /* Check if current transfer fits the DMA buffer */ 304 + dma->curr_xfer_len = curr_remaining_bytes / word; 305 + if (dma->curr_xfer_len > bytes_per_buffer) 306 + dma->curr_xfer_len = bytes_per_buffer; 307 + 308 + ret = dspi_next_xfer_dma_submit(dspi); 309 + if (ret) { 310 + dev_err(dev, "DMA transfer failed\n"); 311 + goto exit; 312 + 313 + } else { 314 + curr_remaining_bytes -= dma->curr_xfer_len * word; 315 + if (curr_remaining_bytes < 0) 316 + curr_remaining_bytes = 0; 317 + } 318 + } 319 + 320 + exit: 321 + return ret; 322 + } 323 + 324 + static int dspi_request_dma(struct fsl_dspi *dspi, phys_addr_t phy_addr) 325 + { 326 + struct fsl_dspi_dma *dma; 327 + struct dma_slave_config cfg; 328 + struct device *dev = &dspi->pdev->dev; 329 + int ret; 330 + 331 + dma = devm_kzalloc(dev, sizeof(*dma), GFP_KERNEL); 332 + if (!dma) 333 + return -ENOMEM; 334 + 335 + dma->chan_rx = dma_request_slave_channel(dev, "rx"); 336 + if (!dma->chan_rx) { 337 + dev_err(dev, "rx dma channel not available\n"); 338 + ret = -ENODEV; 339 + return ret; 340 + } 341 + 342 + dma->chan_tx = dma_request_slave_channel(dev, "tx"); 343 + if (!dma->chan_tx) { 344 + dev_err(dev, "tx dma channel not available\n"); 345 + ret = -ENODEV; 346 + goto err_tx_channel; 347 + } 348 + 349 + dma->tx_dma_buf = dma_alloc_coherent(dev, DSPI_DMA_BUFSIZE, 350 + &dma->tx_dma_phys, GFP_KERNEL); 351 + if (!dma->tx_dma_buf) { 352 + ret = -ENOMEM; 353 + goto err_tx_dma_buf; 354 + } 355 + 356 + dma->rx_dma_buf = dma_alloc_coherent(dev, DSPI_DMA_BUFSIZE, 357 + &dma->rx_dma_phys, GFP_KERNEL); 358 + if (!dma->rx_dma_buf) { 359 + ret = -ENOMEM; 360 + goto err_rx_dma_buf; 361 + } 362 + 363 + cfg.src_addr = phy_addr + SPI_POPR; 364 + cfg.dst_addr = phy_addr + SPI_PUSHR; 365 + cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 366 + cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 367 + cfg.src_maxburst = 1; 368 + cfg.dst_maxburst = 1; 369 + 370 + cfg.direction = DMA_DEV_TO_MEM; 371 + ret = dmaengine_slave_config(dma->chan_rx, &cfg); 372 + if (ret) { 373 + dev_err(dev, "can't configure rx dma channel\n"); 374 + ret = -EINVAL; 375 + goto err_slave_config; 376 + } 377 + 378 + cfg.direction = DMA_MEM_TO_DEV; 379 + ret = dmaengine_slave_config(dma->chan_tx, &cfg); 380 + if (ret) { 381 + dev_err(dev, "can't configure tx dma channel\n"); 382 + ret = -EINVAL; 383 + goto err_slave_config; 384 + } 385 + 386 + dspi->dma = dma; 387 + init_completion(&dma->cmd_tx_complete); 388 + init_completion(&dma->cmd_rx_complete); 389 + 390 + return 0; 391 + 392 + err_slave_config: 393 + dma_free_coherent(dev, DSPI_DMA_BUFSIZE, 394 + dma->rx_dma_buf, dma->rx_dma_phys); 395 + err_rx_dma_buf: 396 + dma_free_coherent(dev, DSPI_DMA_BUFSIZE, 397 + dma->tx_dma_buf, dma->tx_dma_phys); 398 + err_tx_dma_buf: 399 + dma_release_channel(dma->chan_tx); 400 + err_tx_channel: 401 + dma_release_channel(dma->chan_rx); 402 + 403 + devm_kfree(dev, dma); 404 + dspi->dma = NULL; 405 + 406 + return ret; 407 + } 408 + 409 + static void dspi_release_dma(struct fsl_dspi *dspi) 410 + { 411 + struct fsl_dspi_dma *dma = dspi->dma; 412 + struct device *dev = &dspi->pdev->dev; 413 + 414 + if (dma) { 415 + if (dma->chan_tx) { 416 + dma_unmap_single(dev, dma->tx_dma_phys, 417 + DSPI_DMA_BUFSIZE, DMA_TO_DEVICE); 418 + dma_release_channel(dma->chan_tx); 419 + } 420 + 421 + if (dma->chan_rx) { 422 + dma_unmap_single(dev, dma->rx_dma_phys, 423 + DSPI_DMA_BUFSIZE, DMA_FROM_DEVICE); 424 + dma_release_channel(dma->chan_rx); 425 + } 426 + } 209 427 } 210 428 211 429 static void hz_to_spi_baud(char *pbr, char *br, int speed_hz, ··· 705 425 regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_TCFQE); 706 426 dspi_tcfq_write(dspi); 707 427 break; 428 + case DSPI_DMA_MODE: 429 + regmap_write(dspi->regmap, SPI_RSER, 430 + SPI_RSER_TFFFE | SPI_RSER_TFFFD | 431 + SPI_RSER_RFDFE | SPI_RSER_RFDFD); 432 + status = dspi_dma_xfer(dspi); 433 + break; 708 434 default: 709 435 dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n", 710 436 trans_mode); ··· 718 432 goto out; 719 433 } 720 434 721 - if (wait_event_interruptible(dspi->waitq, dspi->waitflags)) 722 - dev_err(&dspi->pdev->dev, "wait transfer complete fail!\n"); 723 - dspi->waitflags = 0; 435 + if (trans_mode != DSPI_DMA_MODE) { 436 + if (wait_event_interruptible(dspi->waitq, 437 + dspi->waitflags)) 438 + dev_err(&dspi->pdev->dev, 439 + "wait transfer complete fail!\n"); 440 + dspi->waitflags = 0; 441 + } 724 442 725 443 if (transfer->delay_usecs) 726 444 udelay(transfer->delay_usecs); ··· 1030 740 if (ret) 1031 741 goto out_master_put; 1032 742 743 + if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) { 744 + if (dspi_request_dma(dspi, res->start)) { 745 + dev_err(&pdev->dev, "can't get dma channels\n"); 746 + goto out_clk_put; 747 + } 748 + } 749 + 1033 750 master->max_speed_hz = 1034 751 clk_get_rate(dspi->clk) / dspi->devtype_data->max_clock_factor; 1035 752 ··· 1065 768 struct fsl_dspi *dspi = spi_master_get_devdata(master); 1066 769 1067 770 /* Disconnect from the SPI framework */ 771 + dspi_release_dma(dspi); 1068 772 clk_disable_unprepare(dspi->clk); 1069 773 spi_unregister_master(dspi->master); 1070 774
+395 -339
drivers/spi/spi-fsl-espi.c
··· 23 23 #include <linux/pm_runtime.h> 24 24 #include <sysdev/fsl_soc.h> 25 25 26 - #include "spi-fsl-lib.h" 27 - 28 26 /* eSPI Controller registers */ 29 27 #define ESPI_SPMODE 0x00 /* eSPI mode register */ 30 28 #define ESPI_SPIE 0x04 /* eSPI event register */ ··· 52 54 #define CSMODE_AFT(x) ((x) << 8) 53 55 #define CSMODE_CG(x) ((x) << 3) 54 56 57 + #define FSL_ESPI_FIFO_SIZE 32 58 + #define FSL_ESPI_RXTHR 15 59 + 55 60 /* Default mode/csmode for eSPI controller */ 56 - #define SPMODE_INIT_VAL (SPMODE_TXTHR(4) | SPMODE_RXTHR(3)) 61 + #define SPMODE_INIT_VAL (SPMODE_TXTHR(4) | SPMODE_RXTHR(FSL_ESPI_RXTHR)) 57 62 #define CSMODE_INIT_VAL (CSMODE_POL_1 | CSMODE_BEF(0) \ 58 63 | CSMODE_AFT(0) | CSMODE_CG(1)) 59 64 ··· 91 90 92 91 #define AUTOSUSPEND_TIMEOUT 2000 93 92 94 - static inline u32 fsl_espi_read_reg(struct mpc8xxx_spi *mspi, int offset) 93 + struct fsl_espi { 94 + struct device *dev; 95 + void __iomem *reg_base; 96 + 97 + struct list_head *m_transfers; 98 + struct spi_transfer *tx_t; 99 + unsigned int tx_pos; 100 + bool tx_done; 101 + struct spi_transfer *rx_t; 102 + unsigned int rx_pos; 103 + bool rx_done; 104 + 105 + bool swab; 106 + unsigned int rxskip; 107 + 108 + spinlock_t lock; 109 + 110 + u32 spibrg; /* SPIBRG input clock */ 111 + 112 + struct completion done; 113 + }; 114 + 115 + struct fsl_espi_cs { 116 + u32 hw_mode; 117 + }; 118 + 119 + static inline u32 fsl_espi_read_reg(struct fsl_espi *espi, int offset) 95 120 { 96 - return ioread32be(mspi->reg_base + offset); 121 + return ioread32be(espi->reg_base + offset); 97 122 } 98 123 99 - static inline u8 fsl_espi_read_reg8(struct mpc8xxx_spi *mspi, int offset) 124 + static inline u16 fsl_espi_read_reg16(struct fsl_espi *espi, int offset) 100 125 { 101 - return ioread8(mspi->reg_base + offset); 126 + return ioread16be(espi->reg_base + offset); 102 127 } 103 128 104 - static inline void fsl_espi_write_reg(struct mpc8xxx_spi *mspi, int offset, 129 + static inline u8 fsl_espi_read_reg8(struct fsl_espi *espi, int offset) 130 + { 131 + return ioread8(espi->reg_base + offset); 132 + } 133 + 134 + static inline void fsl_espi_write_reg(struct fsl_espi *espi, int offset, 105 135 u32 val) 106 136 { 107 - iowrite32be(val, mspi->reg_base + offset); 137 + iowrite32be(val, espi->reg_base + offset); 108 138 } 109 139 110 - static inline void fsl_espi_write_reg8(struct mpc8xxx_spi *mspi, int offset, 140 + static inline void fsl_espi_write_reg16(struct fsl_espi *espi, int offset, 141 + u16 val) 142 + { 143 + iowrite16be(val, espi->reg_base + offset); 144 + } 145 + 146 + static inline void fsl_espi_write_reg8(struct fsl_espi *espi, int offset, 111 147 u8 val) 112 148 { 113 - iowrite8(val, mspi->reg_base + offset); 114 - } 115 - 116 - static void fsl_espi_copy_to_buf(struct spi_message *m, 117 - struct mpc8xxx_spi *mspi) 118 - { 119 - struct spi_transfer *t; 120 - u8 *buf = mspi->local_buf; 121 - 122 - list_for_each_entry(t, &m->transfers, transfer_list) { 123 - if (t->tx_buf) 124 - memcpy(buf, t->tx_buf, t->len); 125 - else 126 - memset(buf, 0, t->len); 127 - buf += t->len; 128 - } 129 - } 130 - 131 - static void fsl_espi_copy_from_buf(struct spi_message *m, 132 - struct mpc8xxx_spi *mspi) 133 - { 134 - struct spi_transfer *t; 135 - u8 *buf = mspi->local_buf; 136 - 137 - list_for_each_entry(t, &m->transfers, transfer_list) { 138 - if (t->rx_buf) 139 - memcpy(t->rx_buf, buf, t->len); 140 - buf += t->len; 141 - } 149 + iowrite8(val, espi->reg_base + offset); 142 150 } 143 151 144 152 static int fsl_espi_check_message(struct spi_message *m) 145 153 { 146 - struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master); 154 + struct fsl_espi *espi = spi_master_get_devdata(m->spi->master); 147 155 struct spi_transfer *t, *first; 148 156 149 157 if (m->frame_length > SPCOM_TRANLEN_MAX) { 150 - dev_err(mspi->dev, "message too long, size is %u bytes\n", 158 + dev_err(espi->dev, "message too long, size is %u bytes\n", 151 159 m->frame_length); 152 160 return -EMSGSIZE; 153 161 } 154 162 155 163 first = list_first_entry(&m->transfers, struct spi_transfer, 156 164 transfer_list); 165 + 157 166 list_for_each_entry(t, &m->transfers, transfer_list) { 158 167 if (first->bits_per_word != t->bits_per_word || 159 168 first->speed_hz != t->speed_hz) { 160 - dev_err(mspi->dev, "bits_per_word/speed_hz should be the same for all transfers\n"); 169 + dev_err(espi->dev, "bits_per_word/speed_hz should be the same for all transfers\n"); 161 170 return -EINVAL; 162 171 } 172 + } 173 + 174 + /* ESPI supports MSB-first transfers for word size 8 / 16 only */ 175 + if (!(m->spi->mode & SPI_LSB_FIRST) && first->bits_per_word != 8 && 176 + first->bits_per_word != 16) { 177 + dev_err(espi->dev, 178 + "MSB-first transfer not supported for wordsize %u\n", 179 + first->bits_per_word); 180 + return -EINVAL; 163 181 } 164 182 165 183 return 0; 166 184 } 167 185 168 - static void fsl_espi_change_mode(struct spi_device *spi) 186 + static unsigned int fsl_espi_check_rxskip_mode(struct spi_message *m) 169 187 { 170 - struct mpc8xxx_spi *mspi = spi_master_get_devdata(spi->master); 171 - struct spi_mpc8xxx_cs *cs = spi->controller_state; 172 - u32 tmp; 173 - unsigned long flags; 188 + struct spi_transfer *t; 189 + unsigned int i = 0, rxskip = 0; 174 190 175 - /* Turn off IRQs locally to minimize time that SPI is disabled. */ 176 - local_irq_save(flags); 191 + /* 192 + * prerequisites for ESPI rxskip mode: 193 + * - message has two transfers 194 + * - first transfer is a write and second is a read 195 + * 196 + * In addition the current low-level transfer mechanism requires 197 + * that the rxskip bytes fit into the TX FIFO. Else the transfer 198 + * would hang because after the first FSL_ESPI_FIFO_SIZE bytes 199 + * the TX FIFO isn't re-filled. 200 + */ 201 + list_for_each_entry(t, &m->transfers, transfer_list) { 202 + if (i == 0) { 203 + if (!t->tx_buf || t->rx_buf || 204 + t->len > FSL_ESPI_FIFO_SIZE) 205 + return 0; 206 + rxskip = t->len; 207 + } else if (i == 1) { 208 + if (t->tx_buf || !t->rx_buf) 209 + return 0; 210 + } 211 + i++; 212 + } 177 213 178 - /* Turn off SPI unit prior changing mode */ 179 - tmp = fsl_espi_read_reg(mspi, ESPI_SPMODE); 180 - fsl_espi_write_reg(mspi, ESPI_SPMODE, tmp & ~SPMODE_ENABLE); 181 - fsl_espi_write_reg(mspi, ESPI_SPMODEx(spi->chip_select), 182 - cs->hw_mode); 183 - fsl_espi_write_reg(mspi, ESPI_SPMODE, tmp); 184 - 185 - local_irq_restore(flags); 214 + return i == 2 ? rxskip : 0; 186 215 } 187 216 188 - static u32 fsl_espi_tx_buf_lsb(struct mpc8xxx_spi *mpc8xxx_spi) 217 + static void fsl_espi_fill_tx_fifo(struct fsl_espi *espi, u32 events) 189 218 { 190 - u32 data; 191 - u16 data_h; 192 - u16 data_l; 193 - const u32 *tx = mpc8xxx_spi->tx; 219 + u32 tx_fifo_avail; 220 + unsigned int tx_left; 221 + const void *tx_buf; 194 222 195 - if (!tx) 196 - return 0; 223 + /* if events is zero transfer has not started and tx fifo is empty */ 224 + tx_fifo_avail = events ? SPIE_TXCNT(events) : FSL_ESPI_FIFO_SIZE; 225 + start: 226 + tx_left = espi->tx_t->len - espi->tx_pos; 227 + tx_buf = espi->tx_t->tx_buf; 228 + while (tx_fifo_avail >= min(4U, tx_left) && tx_left) { 229 + if (tx_left >= 4) { 230 + if (!tx_buf) 231 + fsl_espi_write_reg(espi, ESPI_SPITF, 0); 232 + else if (espi->swab) 233 + fsl_espi_write_reg(espi, ESPI_SPITF, 234 + swahb32p(tx_buf + espi->tx_pos)); 235 + else 236 + fsl_espi_write_reg(espi, ESPI_SPITF, 237 + *(u32 *)(tx_buf + espi->tx_pos)); 238 + espi->tx_pos += 4; 239 + tx_left -= 4; 240 + tx_fifo_avail -= 4; 241 + } else if (tx_left >= 2 && tx_buf && espi->swab) { 242 + fsl_espi_write_reg16(espi, ESPI_SPITF, 243 + swab16p(tx_buf + espi->tx_pos)); 244 + espi->tx_pos += 2; 245 + tx_left -= 2; 246 + tx_fifo_avail -= 2; 247 + } else { 248 + if (!tx_buf) 249 + fsl_espi_write_reg8(espi, ESPI_SPITF, 0); 250 + else 251 + fsl_espi_write_reg8(espi, ESPI_SPITF, 252 + *(u8 *)(tx_buf + espi->tx_pos)); 253 + espi->tx_pos += 1; 254 + tx_left -= 1; 255 + tx_fifo_avail -= 1; 256 + } 257 + } 197 258 198 - data = *tx++ << mpc8xxx_spi->tx_shift; 199 - data_l = data & 0xffff; 200 - data_h = (data >> 16) & 0xffff; 201 - swab16s(&data_l); 202 - swab16s(&data_h); 203 - data = data_h | data_l; 259 + if (!tx_left) { 260 + /* Last transfer finished, in rxskip mode only one is needed */ 261 + if (list_is_last(&espi->tx_t->transfer_list, 262 + espi->m_transfers) || espi->rxskip) { 263 + espi->tx_done = true; 264 + return; 265 + } 266 + espi->tx_t = list_next_entry(espi->tx_t, transfer_list); 267 + espi->tx_pos = 0; 268 + /* continue with next transfer if tx fifo is not full */ 269 + if (tx_fifo_avail) 270 + goto start; 271 + } 272 + } 204 273 205 - mpc8xxx_spi->tx = tx; 206 - return data; 274 + static void fsl_espi_read_rx_fifo(struct fsl_espi *espi, u32 events) 275 + { 276 + u32 rx_fifo_avail = SPIE_RXCNT(events); 277 + unsigned int rx_left; 278 + void *rx_buf; 279 + 280 + start: 281 + rx_left = espi->rx_t->len - espi->rx_pos; 282 + rx_buf = espi->rx_t->rx_buf; 283 + while (rx_fifo_avail >= min(4U, rx_left) && rx_left) { 284 + if (rx_left >= 4) { 285 + u32 val = fsl_espi_read_reg(espi, ESPI_SPIRF); 286 + 287 + if (rx_buf && espi->swab) 288 + *(u32 *)(rx_buf + espi->rx_pos) = swahb32(val); 289 + else if (rx_buf) 290 + *(u32 *)(rx_buf + espi->rx_pos) = val; 291 + espi->rx_pos += 4; 292 + rx_left -= 4; 293 + rx_fifo_avail -= 4; 294 + } else if (rx_left >= 2 && rx_buf && espi->swab) { 295 + u16 val = fsl_espi_read_reg16(espi, ESPI_SPIRF); 296 + 297 + *(u16 *)(rx_buf + espi->rx_pos) = swab16(val); 298 + espi->rx_pos += 2; 299 + rx_left -= 2; 300 + rx_fifo_avail -= 2; 301 + } else { 302 + u8 val = fsl_espi_read_reg8(espi, ESPI_SPIRF); 303 + 304 + if (rx_buf) 305 + *(u8 *)(rx_buf + espi->rx_pos) = val; 306 + espi->rx_pos += 1; 307 + rx_left -= 1; 308 + rx_fifo_avail -= 1; 309 + } 310 + } 311 + 312 + if (!rx_left) { 313 + if (list_is_last(&espi->rx_t->transfer_list, 314 + espi->m_transfers)) { 315 + espi->rx_done = true; 316 + return; 317 + } 318 + espi->rx_t = list_next_entry(espi->rx_t, transfer_list); 319 + espi->rx_pos = 0; 320 + /* continue with next transfer if rx fifo is not empty */ 321 + if (rx_fifo_avail) 322 + goto start; 323 + } 207 324 } 208 325 209 326 static void fsl_espi_setup_transfer(struct spi_device *spi, 210 327 struct spi_transfer *t) 211 328 { 212 - struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); 329 + struct fsl_espi *espi = spi_master_get_devdata(spi->master); 213 330 int bits_per_word = t ? t->bits_per_word : spi->bits_per_word; 214 - u32 hz = t ? t->speed_hz : spi->max_speed_hz; 215 - u8 pm; 216 - struct spi_mpc8xxx_cs *cs = spi->controller_state; 217 - 218 - cs->rx_shift = 0; 219 - cs->tx_shift = 0; 220 - cs->get_rx = mpc8xxx_spi_rx_buf_u32; 221 - cs->get_tx = mpc8xxx_spi_tx_buf_u32; 222 - if (bits_per_word <= 8) { 223 - cs->rx_shift = 8 - bits_per_word; 224 - } else { 225 - cs->rx_shift = 16 - bits_per_word; 226 - if (spi->mode & SPI_LSB_FIRST) 227 - cs->get_tx = fsl_espi_tx_buf_lsb; 228 - } 229 - 230 - mpc8xxx_spi->rx_shift = cs->rx_shift; 231 - mpc8xxx_spi->tx_shift = cs->tx_shift; 232 - mpc8xxx_spi->get_rx = cs->get_rx; 233 - mpc8xxx_spi->get_tx = cs->get_tx; 331 + u32 pm, hz = t ? t->speed_hz : spi->max_speed_hz; 332 + struct fsl_espi_cs *cs = spi_get_ctldata(spi); 333 + u32 hw_mode_old = cs->hw_mode; 234 334 235 335 /* mask out bits we are going to set */ 236 336 cs->hw_mode &= ~(CSMODE_LEN(0xF) | CSMODE_DIV16 | CSMODE_PM(0xF)); 237 337 238 338 cs->hw_mode |= CSMODE_LEN(bits_per_word - 1); 239 339 240 - if ((mpc8xxx_spi->spibrg / hz) > 64) { 241 - cs->hw_mode |= CSMODE_DIV16; 242 - pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 16 * 4); 340 + pm = DIV_ROUND_UP(espi->spibrg, hz * 4) - 1; 243 341 244 - WARN_ONCE(pm > 33, "%s: Requested speed is too low: %d Hz. " 245 - "Will use %d Hz instead.\n", dev_name(&spi->dev), 246 - hz, mpc8xxx_spi->spibrg / (4 * 16 * (32 + 1))); 247 - if (pm > 33) 248 - pm = 33; 249 - } else { 250 - pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 4); 342 + if (pm > 15) { 343 + cs->hw_mode |= CSMODE_DIV16; 344 + pm = DIV_ROUND_UP(espi->spibrg, hz * 16 * 4) - 1; 251 345 } 252 - if (pm) 253 - pm--; 254 - if (pm < 2) 255 - pm = 2; 256 346 257 347 cs->hw_mode |= CSMODE_PM(pm); 258 348 259 - fsl_espi_change_mode(spi); 349 + /* don't write the mode register if the mode doesn't change */ 350 + if (cs->hw_mode != hw_mode_old) 351 + fsl_espi_write_reg(espi, ESPI_SPMODEx(spi->chip_select), 352 + cs->hw_mode); 260 353 } 261 354 262 355 static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t) 263 356 { 264 - struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); 265 - u32 word; 357 + struct fsl_espi *espi = spi_master_get_devdata(spi->master); 358 + unsigned int rx_len = t->len; 359 + u32 mask, spcom; 266 360 int ret; 267 361 268 - mpc8xxx_spi->len = t->len; 269 - mpc8xxx_spi->count = roundup(t->len, 4) / 4; 270 - 271 - mpc8xxx_spi->tx = t->tx_buf; 272 - mpc8xxx_spi->rx = t->rx_buf; 273 - 274 - reinit_completion(&mpc8xxx_spi->done); 362 + reinit_completion(&espi->done); 275 363 276 364 /* Set SPCOM[CS] and SPCOM[TRANLEN] field */ 277 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM, 278 - (SPCOM_CS(spi->chip_select) | SPCOM_TRANLEN(t->len - 1))); 365 + spcom = SPCOM_CS(spi->chip_select); 366 + spcom |= SPCOM_TRANLEN(t->len - 1); 279 367 280 - /* enable rx ints */ 281 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, SPIM_RNE); 368 + /* configure RXSKIP mode */ 369 + if (espi->rxskip) { 370 + spcom |= SPCOM_RXSKIP(espi->rxskip); 371 + rx_len = t->len - espi->rxskip; 372 + if (t->rx_nbits == SPI_NBITS_DUAL) 373 + spcom |= SPCOM_DO; 374 + } 282 375 283 - /* transmit word */ 284 - word = mpc8xxx_spi->get_tx(mpc8xxx_spi); 285 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPITF, word); 376 + fsl_espi_write_reg(espi, ESPI_SPCOM, spcom); 377 + 378 + /* enable interrupts */ 379 + mask = SPIM_DON; 380 + if (rx_len > FSL_ESPI_FIFO_SIZE) 381 + mask |= SPIM_RXT; 382 + fsl_espi_write_reg(espi, ESPI_SPIM, mask); 383 + 384 + /* Prevent filling the fifo from getting interrupted */ 385 + spin_lock_irq(&espi->lock); 386 + fsl_espi_fill_tx_fifo(espi, 0); 387 + spin_unlock_irq(&espi->lock); 286 388 287 389 /* Won't hang up forever, SPI bus sometimes got lost interrupts... */ 288 - ret = wait_for_completion_timeout(&mpc8xxx_spi->done, 2 * HZ); 390 + ret = wait_for_completion_timeout(&espi->done, 2 * HZ); 289 391 if (ret == 0) 290 - dev_err(mpc8xxx_spi->dev, 291 - "Transaction hanging up (left %d bytes)\n", 292 - mpc8xxx_spi->count); 392 + dev_err(espi->dev, "Transfer timed out!\n"); 293 393 294 394 /* disable rx ints */ 295 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0); 395 + fsl_espi_write_reg(espi, ESPI_SPIM, 0); 296 396 297 - return mpc8xxx_spi->count > 0 ? -EMSGSIZE : 0; 397 + return ret == 0 ? -ETIMEDOUT : 0; 298 398 } 299 399 300 400 static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans) 301 401 { 302 - struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master); 402 + struct fsl_espi *espi = spi_master_get_devdata(m->spi->master); 303 403 struct spi_device *spi = m->spi; 304 404 int ret; 305 405 306 - fsl_espi_copy_to_buf(m, mspi); 406 + /* In case of LSB-first and bits_per_word > 8 byte-swap all words */ 407 + espi->swab = spi->mode & SPI_LSB_FIRST && trans->bits_per_word > 8; 408 + 409 + espi->m_transfers = &m->transfers; 410 + espi->tx_t = list_first_entry(&m->transfers, struct spi_transfer, 411 + transfer_list); 412 + espi->tx_pos = 0; 413 + espi->tx_done = false; 414 + espi->rx_t = list_first_entry(&m->transfers, struct spi_transfer, 415 + transfer_list); 416 + espi->rx_pos = 0; 417 + espi->rx_done = false; 418 + 419 + espi->rxskip = fsl_espi_check_rxskip_mode(m); 420 + if (trans->rx_nbits == SPI_NBITS_DUAL && !espi->rxskip) { 421 + dev_err(espi->dev, "Dual output mode requires RXSKIP mode!\n"); 422 + return -EINVAL; 423 + } 424 + 425 + /* In RXSKIP mode skip first transfer for reads */ 426 + if (espi->rxskip) 427 + espi->rx_t = list_next_entry(espi->rx_t, transfer_list); 428 + 307 429 fsl_espi_setup_transfer(spi, trans); 308 430 309 431 ret = fsl_espi_bufs(spi, trans); ··· 434 310 if (trans->delay_usecs) 435 311 udelay(trans->delay_usecs); 436 312 437 - fsl_espi_setup_transfer(spi, NULL); 438 - 439 - if (!ret) 440 - fsl_espi_copy_from_buf(m, mspi); 441 - 442 313 return ret; 443 314 } 444 315 445 316 static int fsl_espi_do_one_msg(struct spi_master *master, 446 317 struct spi_message *m) 447 318 { 448 - struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master); 449 - unsigned int delay_usecs = 0; 319 + unsigned int delay_usecs = 0, rx_nbits = 0; 450 320 struct spi_transfer *t, trans = {}; 451 321 int ret; 452 322 ··· 451 333 list_for_each_entry(t, &m->transfers, transfer_list) { 452 334 if (t->delay_usecs > delay_usecs) 453 335 delay_usecs = t->delay_usecs; 336 + if (t->rx_nbits > rx_nbits) 337 + rx_nbits = t->rx_nbits; 454 338 } 455 339 456 340 t = list_first_entry(&m->transfers, struct spi_transfer, ··· 462 342 trans.speed_hz = t->speed_hz; 463 343 trans.bits_per_word = t->bits_per_word; 464 344 trans.delay_usecs = delay_usecs; 465 - trans.tx_buf = mspi->local_buf; 466 - trans.rx_buf = mspi->local_buf; 345 + trans.rx_nbits = rx_nbits; 467 346 468 347 if (trans.len) 469 348 ret = fsl_espi_trans(m, &trans); ··· 479 360 480 361 static int fsl_espi_setup(struct spi_device *spi) 481 362 { 482 - struct mpc8xxx_spi *mpc8xxx_spi; 363 + struct fsl_espi *espi; 483 364 u32 loop_mode; 484 - struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi); 485 - 486 - if (!spi->max_speed_hz) 487 - return -EINVAL; 365 + struct fsl_espi_cs *cs = spi_get_ctldata(spi); 488 366 489 367 if (!cs) { 490 368 cs = kzalloc(sizeof(*cs), GFP_KERNEL); ··· 490 374 spi_set_ctldata(spi, cs); 491 375 } 492 376 493 - mpc8xxx_spi = spi_master_get_devdata(spi->master); 377 + espi = spi_master_get_devdata(spi->master); 494 378 495 - pm_runtime_get_sync(mpc8xxx_spi->dev); 379 + pm_runtime_get_sync(espi->dev); 496 380 497 - cs->hw_mode = fsl_espi_read_reg(mpc8xxx_spi, 498 - ESPI_SPMODEx(spi->chip_select)); 381 + cs->hw_mode = fsl_espi_read_reg(espi, ESPI_SPMODEx(spi->chip_select)); 499 382 /* mask out bits we are going to set */ 500 383 cs->hw_mode &= ~(CSMODE_CP_BEGIN_EDGECLK | CSMODE_CI_INACTIVEHIGH 501 384 | CSMODE_REV); ··· 507 392 cs->hw_mode |= CSMODE_REV; 508 393 509 394 /* Handle the loop mode */ 510 - loop_mode = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE); 395 + loop_mode = fsl_espi_read_reg(espi, ESPI_SPMODE); 511 396 loop_mode &= ~SPMODE_LOOP; 512 397 if (spi->mode & SPI_LOOP) 513 398 loop_mode |= SPMODE_LOOP; 514 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, loop_mode); 399 + fsl_espi_write_reg(espi, ESPI_SPMODE, loop_mode); 515 400 516 401 fsl_espi_setup_transfer(spi, NULL); 517 402 518 - pm_runtime_mark_last_busy(mpc8xxx_spi->dev); 519 - pm_runtime_put_autosuspend(mpc8xxx_spi->dev); 403 + pm_runtime_mark_last_busy(espi->dev); 404 + pm_runtime_put_autosuspend(espi->dev); 520 405 521 406 return 0; 522 407 } 523 408 524 409 static void fsl_espi_cleanup(struct spi_device *spi) 525 410 { 526 - struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi); 411 + struct fsl_espi_cs *cs = spi_get_ctldata(spi); 527 412 528 413 kfree(cs); 529 414 spi_set_ctldata(spi, NULL); 530 415 } 531 416 532 - static void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) 417 + static void fsl_espi_cpu_irq(struct fsl_espi *espi, u32 events) 533 418 { 534 - /* We need handle RX first */ 535 - if (events & SPIE_RNE) { 536 - u32 rx_data, tmp; 537 - u8 rx_data_8; 538 - int rx_nr_bytes = 4; 539 - int ret; 419 + if (!espi->rx_done) 420 + fsl_espi_read_rx_fifo(espi, events); 540 421 541 - /* Spin until RX is done */ 542 - if (SPIE_RXCNT(events) < min(4, mspi->len)) { 543 - ret = spin_event_timeout( 544 - !(SPIE_RXCNT(events = 545 - fsl_espi_read_reg(mspi, ESPI_SPIE)) < 546 - min(4, mspi->len)), 547 - 10000, 0); /* 10 msec */ 548 - if (!ret) 549 - dev_err(mspi->dev, 550 - "tired waiting for SPIE_RXCNT\n"); 551 - } 422 + if (!espi->tx_done) 423 + fsl_espi_fill_tx_fifo(espi, events); 552 424 553 - if (mspi->len >= 4) { 554 - rx_data = fsl_espi_read_reg(mspi, ESPI_SPIRF); 555 - } else if (mspi->len <= 0) { 556 - dev_err(mspi->dev, 557 - "unexpected RX(SPIE_RNE) interrupt occurred,\n" 558 - "(local rxlen %d bytes, reg rxlen %d bytes)\n", 559 - min(4, mspi->len), SPIE_RXCNT(events)); 560 - rx_nr_bytes = 0; 561 - } else { 562 - rx_nr_bytes = mspi->len; 563 - tmp = mspi->len; 564 - rx_data = 0; 565 - while (tmp--) { 566 - rx_data_8 = fsl_espi_read_reg8(mspi, 567 - ESPI_SPIRF); 568 - rx_data |= (rx_data_8 << (tmp * 8)); 569 - } 425 + if (!espi->tx_done || !espi->rx_done) 426 + return; 570 427 571 - rx_data <<= (4 - mspi->len) * 8; 572 - } 428 + /* we're done, but check for errors before returning */ 429 + events = fsl_espi_read_reg(espi, ESPI_SPIE); 573 430 574 - mspi->len -= rx_nr_bytes; 431 + if (!(events & SPIE_DON)) 432 + dev_err(espi->dev, 433 + "Transfer done but SPIE_DON isn't set!\n"); 575 434 576 - if (rx_nr_bytes && mspi->rx) 577 - mspi->get_rx(rx_data, mspi); 578 - } 435 + if (SPIE_RXCNT(events) || SPIE_TXCNT(events) != FSL_ESPI_FIFO_SIZE) 436 + dev_err(espi->dev, "Transfer done but rx/tx fifo's aren't empty!\n"); 579 437 580 - if (!(events & SPIE_TNF)) { 581 - int ret; 582 - 583 - /* spin until TX is done */ 584 - ret = spin_event_timeout(((events = fsl_espi_read_reg( 585 - mspi, ESPI_SPIE)) & SPIE_TNF), 1000, 0); 586 - if (!ret) { 587 - dev_err(mspi->dev, "tired waiting for SPIE_TNF\n"); 588 - complete(&mspi->done); 589 - return; 590 - } 591 - } 592 - 593 - mspi->count -= 1; 594 - if (mspi->count) { 595 - u32 word = mspi->get_tx(mspi); 596 - 597 - fsl_espi_write_reg(mspi, ESPI_SPITF, word); 598 - } else { 599 - complete(&mspi->done); 600 - } 438 + complete(&espi->done); 601 439 } 602 440 603 441 static irqreturn_t fsl_espi_irq(s32 irq, void *context_data) 604 442 { 605 - struct mpc8xxx_spi *mspi = context_data; 443 + struct fsl_espi *espi = context_data; 606 444 u32 events; 607 445 446 + spin_lock(&espi->lock); 447 + 608 448 /* Get interrupt events(tx/rx) */ 609 - events = fsl_espi_read_reg(mspi, ESPI_SPIE); 610 - if (!events) 449 + events = fsl_espi_read_reg(espi, ESPI_SPIE); 450 + if (!events) { 451 + spin_unlock(&espi->lock); 611 452 return IRQ_NONE; 453 + } 612 454 613 - dev_vdbg(mspi->dev, "%s: events %x\n", __func__, events); 455 + dev_vdbg(espi->dev, "%s: events %x\n", __func__, events); 614 456 615 - fsl_espi_cpu_irq(mspi, events); 457 + fsl_espi_cpu_irq(espi, events); 616 458 617 459 /* Clear the events */ 618 - fsl_espi_write_reg(mspi, ESPI_SPIE, events); 460 + fsl_espi_write_reg(espi, ESPI_SPIE, events); 461 + 462 + spin_unlock(&espi->lock); 619 463 620 464 return IRQ_HANDLED; 621 465 } ··· 583 509 static int fsl_espi_runtime_suspend(struct device *dev) 584 510 { 585 511 struct spi_master *master = dev_get_drvdata(dev); 586 - struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master); 512 + struct fsl_espi *espi = spi_master_get_devdata(master); 587 513 u32 regval; 588 514 589 - regval = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE); 515 + regval = fsl_espi_read_reg(espi, ESPI_SPMODE); 590 516 regval &= ~SPMODE_ENABLE; 591 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval); 517 + fsl_espi_write_reg(espi, ESPI_SPMODE, regval); 592 518 593 519 return 0; 594 520 } ··· 596 522 static int fsl_espi_runtime_resume(struct device *dev) 597 523 { 598 524 struct spi_master *master = dev_get_drvdata(dev); 599 - struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master); 525 + struct fsl_espi *espi = spi_master_get_devdata(master); 600 526 u32 regval; 601 527 602 - regval = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE); 528 + regval = fsl_espi_read_reg(espi, ESPI_SPMODE); 603 529 regval |= SPMODE_ENABLE; 604 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval); 530 + fsl_espi_write_reg(espi, ESPI_SPMODE, regval); 605 531 606 532 return 0; 607 533 } ··· 612 538 return SPCOM_TRANLEN_MAX; 613 539 } 614 540 615 - static int fsl_espi_probe(struct device *dev, struct resource *mem, 616 - unsigned int irq) 541 + static void fsl_espi_init_regs(struct device *dev, bool initial) 617 542 { 618 - struct fsl_spi_platform_data *pdata = dev_get_platdata(dev); 619 - struct spi_master *master; 620 - struct mpc8xxx_spi *mpc8xxx_spi; 543 + struct spi_master *master = dev_get_drvdata(dev); 544 + struct fsl_espi *espi = spi_master_get_devdata(master); 621 545 struct device_node *nc; 622 - const __be32 *prop; 623 - u32 regval, csmode; 624 - int i, len, ret; 546 + u32 csmode, cs, prop; 547 + int ret; 625 548 626 - master = spi_alloc_master(dev, sizeof(struct mpc8xxx_spi)); 549 + /* SPI controller initializations */ 550 + fsl_espi_write_reg(espi, ESPI_SPMODE, 0); 551 + fsl_espi_write_reg(espi, ESPI_SPIM, 0); 552 + fsl_espi_write_reg(espi, ESPI_SPCOM, 0); 553 + fsl_espi_write_reg(espi, ESPI_SPIE, 0xffffffff); 554 + 555 + /* Init eSPI CS mode register */ 556 + for_each_available_child_of_node(master->dev.of_node, nc) { 557 + /* get chip select */ 558 + ret = of_property_read_u32(nc, "reg", &cs); 559 + if (ret || cs >= master->num_chipselect) 560 + continue; 561 + 562 + csmode = CSMODE_INIT_VAL; 563 + 564 + /* check if CSBEF is set in device tree */ 565 + ret = of_property_read_u32(nc, "fsl,csbef", &prop); 566 + if (!ret) { 567 + csmode &= ~(CSMODE_BEF(0xf)); 568 + csmode |= CSMODE_BEF(prop); 569 + } 570 + 571 + /* check if CSAFT is set in device tree */ 572 + ret = of_property_read_u32(nc, "fsl,csaft", &prop); 573 + if (!ret) { 574 + csmode &= ~(CSMODE_AFT(0xf)); 575 + csmode |= CSMODE_AFT(prop); 576 + } 577 + 578 + fsl_espi_write_reg(espi, ESPI_SPMODEx(cs), csmode); 579 + 580 + if (initial) 581 + dev_info(dev, "cs=%u, init_csmode=0x%x\n", cs, csmode); 582 + } 583 + 584 + /* Enable SPI interface */ 585 + fsl_espi_write_reg(espi, ESPI_SPMODE, SPMODE_INIT_VAL | SPMODE_ENABLE); 586 + } 587 + 588 + static int fsl_espi_probe(struct device *dev, struct resource *mem, 589 + unsigned int irq, unsigned int num_cs) 590 + { 591 + struct spi_master *master; 592 + struct fsl_espi *espi; 593 + int ret; 594 + 595 + master = spi_alloc_master(dev, sizeof(struct fsl_espi)); 627 596 if (!master) 628 597 return -ENOMEM; 629 598 630 599 dev_set_drvdata(dev, master); 631 600 632 - mpc8xxx_spi_probe(dev, mem, irq); 633 - 601 + master->mode_bits = SPI_RX_DUAL | SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | 602 + SPI_LSB_FIRST | SPI_LOOP; 603 + master->dev.of_node = dev->of_node; 634 604 master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16); 635 605 master->setup = fsl_espi_setup; 636 606 master->cleanup = fsl_espi_cleanup; 637 607 master->transfer_one_message = fsl_espi_do_one_msg; 638 608 master->auto_runtime_pm = true; 639 609 master->max_message_size = fsl_espi_max_message_size; 610 + master->num_chipselect = num_cs; 640 611 641 - mpc8xxx_spi = spi_master_get_devdata(master); 612 + espi = spi_master_get_devdata(master); 613 + spin_lock_init(&espi->lock); 642 614 643 - mpc8xxx_spi->local_buf = 644 - devm_kmalloc(dev, SPCOM_TRANLEN_MAX, GFP_KERNEL); 645 - if (!mpc8xxx_spi->local_buf) { 646 - ret = -ENOMEM; 615 + espi->dev = dev; 616 + espi->spibrg = fsl_get_sys_freq(); 617 + if (espi->spibrg == -1) { 618 + dev_err(dev, "Can't get sys frequency!\n"); 619 + ret = -EINVAL; 647 620 goto err_probe; 648 621 } 622 + /* determined by clock divider fields DIV16/PM in register SPMODEx */ 623 + master->min_speed_hz = DIV_ROUND_UP(espi->spibrg, 4 * 16 * 16); 624 + master->max_speed_hz = DIV_ROUND_UP(espi->spibrg, 4); 649 625 650 - mpc8xxx_spi->reg_base = devm_ioremap_resource(dev, mem); 651 - if (IS_ERR(mpc8xxx_spi->reg_base)) { 652 - ret = PTR_ERR(mpc8xxx_spi->reg_base); 626 + init_completion(&espi->done); 627 + 628 + espi->reg_base = devm_ioremap_resource(dev, mem); 629 + if (IS_ERR(espi->reg_base)) { 630 + ret = PTR_ERR(espi->reg_base); 653 631 goto err_probe; 654 632 } 655 633 656 634 /* Register for SPI Interrupt */ 657 - ret = devm_request_irq(dev, mpc8xxx_spi->irq, fsl_espi_irq, 658 - 0, "fsl_espi", mpc8xxx_spi); 635 + ret = devm_request_irq(dev, irq, fsl_espi_irq, 0, "fsl_espi", espi); 659 636 if (ret) 660 637 goto err_probe; 661 638 662 - if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) { 663 - mpc8xxx_spi->rx_shift = 16; 664 - mpc8xxx_spi->tx_shift = 24; 665 - } 666 - 667 - /* SPI controller initializations */ 668 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, 0); 669 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0); 670 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM, 0); 671 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIE, 0xffffffff); 672 - 673 - /* Init eSPI CS mode register */ 674 - for_each_available_child_of_node(master->dev.of_node, nc) { 675 - /* get chip select */ 676 - prop = of_get_property(nc, "reg", &len); 677 - if (!prop || len < sizeof(*prop)) 678 - continue; 679 - i = be32_to_cpup(prop); 680 - if (i < 0 || i >= pdata->max_chipselect) 681 - continue; 682 - 683 - csmode = CSMODE_INIT_VAL; 684 - /* check if CSBEF is set in device tree */ 685 - prop = of_get_property(nc, "fsl,csbef", &len); 686 - if (prop && len >= sizeof(*prop)) { 687 - csmode &= ~(CSMODE_BEF(0xf)); 688 - csmode |= CSMODE_BEF(be32_to_cpup(prop)); 689 - } 690 - /* check if CSAFT is set in device tree */ 691 - prop = of_get_property(nc, "fsl,csaft", &len); 692 - if (prop && len >= sizeof(*prop)) { 693 - csmode &= ~(CSMODE_AFT(0xf)); 694 - csmode |= CSMODE_AFT(be32_to_cpup(prop)); 695 - } 696 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODEx(i), csmode); 697 - 698 - dev_info(dev, "cs=%d, init_csmode=0x%x\n", i, csmode); 699 - } 700 - 701 - /* Enable SPI interface */ 702 - regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE; 703 - 704 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval); 639 + fsl_espi_init_regs(dev, true); 705 640 706 641 pm_runtime_set_autosuspend_delay(dev, AUTOSUSPEND_TIMEOUT); 707 642 pm_runtime_use_autosuspend(dev); ··· 722 639 if (ret < 0) 723 640 goto err_pm; 724 641 725 - dev_info(dev, "at 0x%p (irq = %d)\n", mpc8xxx_spi->reg_base, 726 - mpc8xxx_spi->irq); 642 + dev_info(dev, "at 0x%p (irq = %u)\n", espi->reg_base, irq); 727 643 728 644 pm_runtime_mark_last_busy(dev); 729 645 pm_runtime_put_autosuspend(dev); ··· 741 659 static int of_fsl_espi_get_chipselects(struct device *dev) 742 660 { 743 661 struct device_node *np = dev->of_node; 744 - struct fsl_spi_platform_data *pdata = dev_get_platdata(dev); 745 - const u32 *prop; 746 - int len; 662 + u32 num_cs; 663 + int ret; 747 664 748 - prop = of_get_property(np, "fsl,espi-num-chipselects", &len); 749 - if (!prop || len < sizeof(*prop)) { 665 + ret = of_property_read_u32(np, "fsl,espi-num-chipselects", &num_cs); 666 + if (ret) { 750 667 dev_err(dev, "No 'fsl,espi-num-chipselects' property\n"); 751 - return -EINVAL; 668 + return 0; 752 669 } 753 670 754 - pdata->max_chipselect = *prop; 755 - pdata->cs_control = NULL; 756 - 757 - return 0; 671 + return num_cs; 758 672 } 759 673 760 674 static int of_fsl_espi_probe(struct platform_device *ofdev) ··· 758 680 struct device *dev = &ofdev->dev; 759 681 struct device_node *np = ofdev->dev.of_node; 760 682 struct resource mem; 761 - unsigned int irq; 683 + unsigned int irq, num_cs; 762 684 int ret; 763 685 764 - ret = of_mpc8xxx_spi_probe(ofdev); 765 - if (ret) 766 - return ret; 686 + if (of_property_read_bool(np, "mode")) { 687 + dev_err(dev, "mode property is not supported on ESPI!\n"); 688 + return -EINVAL; 689 + } 767 690 768 - ret = of_fsl_espi_get_chipselects(dev); 769 - if (ret) 770 - return ret; 691 + num_cs = of_fsl_espi_get_chipselects(dev); 692 + if (!num_cs) 693 + return -EINVAL; 771 694 772 695 ret = of_address_to_resource(np, 0, &mem); 773 696 if (ret) ··· 778 699 if (!irq) 779 700 return -EINVAL; 780 701 781 - return fsl_espi_probe(dev, &mem, irq); 702 + return fsl_espi_probe(dev, &mem, irq, num_cs); 782 703 } 783 704 784 705 static int of_fsl_espi_remove(struct platform_device *dev) ··· 800 721 return ret; 801 722 } 802 723 803 - ret = pm_runtime_force_suspend(dev); 804 - if (ret < 0) 805 - return ret; 806 - 807 - return 0; 724 + return pm_runtime_force_suspend(dev); 808 725 } 809 726 810 727 static int of_fsl_espi_resume(struct device *dev) 811 728 { 812 - struct fsl_spi_platform_data *pdata = dev_get_platdata(dev); 813 729 struct spi_master *master = dev_get_drvdata(dev); 814 - struct mpc8xxx_spi *mpc8xxx_spi; 815 - u32 regval; 816 - int i, ret; 730 + int ret; 817 731 818 - mpc8xxx_spi = spi_master_get_devdata(master); 819 - 820 - /* SPI controller initializations */ 821 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, 0); 822 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0); 823 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM, 0); 824 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIE, 0xffffffff); 825 - 826 - /* Init eSPI CS mode register */ 827 - for (i = 0; i < pdata->max_chipselect; i++) 828 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODEx(i), 829 - CSMODE_INIT_VAL); 830 - 831 - /* Enable SPI interface */ 832 - regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE; 833 - 834 - fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval); 732 + fsl_espi_init_regs(dev, false); 835 733 836 734 ret = pm_runtime_force_resume(dev); 837 735 if (ret < 0)
-4
drivers/spi/spi-fsl-lib.h
··· 28 28 /* rx & tx bufs from the spi_transfer */ 29 29 const void *tx; 30 30 void *rx; 31 - #if IS_ENABLED(CONFIG_SPI_FSL_ESPI) 32 - int len; 33 - u8 *local_buf; 34 - #endif 35 31 36 32 int subblock; 37 33 struct spi_pram __iomem *pram;
+8 -2
drivers/spi/spi.c
··· 1042 1042 if (msg->status != -EINPROGRESS) 1043 1043 goto out; 1044 1044 1045 - if (xfer->delay_usecs) 1046 - udelay(xfer->delay_usecs); 1045 + if (xfer->delay_usecs) { 1046 + u16 us = xfer->delay_usecs; 1047 + 1048 + if (us <= 10) 1049 + udelay(us); 1050 + else 1051 + usleep_range(us, us + DIV_ROUND_UP(us, 10)); 1052 + } 1047 1053 1048 1054 if (xfer->cs_change) { 1049 1055 if (list_is_last(&xfer->transfer_list,