0001
0002
0003
0004 #include <linux/clk.h>
0005 #include <linux/dmaengine.h>
0006 #include <linux/dma-mapping.h>
0007 #include <linux/dma/sprd-dma.h>
0008 #include <linux/interrupt.h>
0009 #include <linux/io.h>
0010 #include <linux/iopoll.h>
0011 #include <linux/kernel.h>
0012 #include <linux/module.h>
0013 #include <linux/of.h>
0014 #include <linux/of_device.h>
0015 #include <linux/of_dma.h>
0016 #include <linux/platform_device.h>
0017 #include <linux/pm_runtime.h>
0018 #include <linux/spi/spi.h>
0019
0020 #define SPRD_SPI_TXD 0x0
0021 #define SPRD_SPI_CLKD 0x4
0022 #define SPRD_SPI_CTL0 0x8
0023 #define SPRD_SPI_CTL1 0xc
0024 #define SPRD_SPI_CTL2 0x10
0025 #define SPRD_SPI_CTL3 0x14
0026 #define SPRD_SPI_CTL4 0x18
0027 #define SPRD_SPI_CTL5 0x1c
0028 #define SPRD_SPI_INT_EN 0x20
0029 #define SPRD_SPI_INT_CLR 0x24
0030 #define SPRD_SPI_INT_RAW_STS 0x28
0031 #define SPRD_SPI_INT_MASK_STS 0x2c
0032 #define SPRD_SPI_STS1 0x30
0033 #define SPRD_SPI_STS2 0x34
0034 #define SPRD_SPI_DSP_WAIT 0x38
0035 #define SPRD_SPI_STS3 0x3c
0036 #define SPRD_SPI_CTL6 0x40
0037 #define SPRD_SPI_STS4 0x44
0038 #define SPRD_SPI_FIFO_RST 0x48
0039 #define SPRD_SPI_CTL7 0x4c
0040 #define SPRD_SPI_STS5 0x50
0041 #define SPRD_SPI_CTL8 0x54
0042 #define SPRD_SPI_CTL9 0x58
0043 #define SPRD_SPI_CTL10 0x5c
0044 #define SPRD_SPI_CTL11 0x60
0045 #define SPRD_SPI_CTL12 0x64
0046 #define SPRD_SPI_STS6 0x68
0047 #define SPRD_SPI_STS7 0x6c
0048 #define SPRD_SPI_STS8 0x70
0049 #define SPRD_SPI_STS9 0x74
0050
0051
0052 #define SPRD_SPI_SCK_REV BIT(13)
0053 #define SPRD_SPI_NG_TX BIT(1)
0054 #define SPRD_SPI_NG_RX BIT(0)
0055 #define SPRD_SPI_CHNL_LEN_MASK GENMASK(4, 0)
0056 #define SPRD_SPI_CSN_MASK GENMASK(11, 8)
0057 #define SPRD_SPI_CS0_VALID BIT(8)
0058
0059
0060 #define SPRD_SPI_TX_END_INT_EN BIT(8)
0061 #define SPRD_SPI_RX_END_INT_EN BIT(9)
0062
0063
0064 #define SPRD_SPI_TX_END_RAW BIT(8)
0065 #define SPRD_SPI_RX_END_RAW BIT(9)
0066
0067
0068 #define SPRD_SPI_TX_END_CLR BIT(8)
0069 #define SPRD_SPI_RX_END_CLR BIT(9)
0070
0071
0072 #define SPRD_SPI_MASK_RX_END BIT(9)
0073 #define SPRD_SPI_MASK_TX_END BIT(8)
0074
0075
0076 #define SPRD_SPI_TX_BUSY BIT(8)
0077
0078
0079 #define SPRD_SPI_RX_MODE BIT(12)
0080 #define SPRD_SPI_TX_MODE BIT(13)
0081 #define SPRD_SPI_RTX_MD_MASK GENMASK(13, 12)
0082
0083
0084 #define SPRD_SPI_DMA_EN BIT(6)
0085
0086
0087 #define SPRD_SPI_START_RX BIT(9)
0088 #define SPRD_SPI_ONLY_RECV_MASK GENMASK(8, 0)
0089
0090
0091 #define SPRD_SPI_RX_END_INT_CLR BIT(9)
0092 #define SPRD_SPI_TX_END_INT_CLR BIT(8)
0093
0094
0095 #define SPRD_SPI_RX_END_IRQ BIT(9)
0096 #define SPRD_SPI_TX_END_IRQ BIT(8)
0097
0098
0099 #define SPRD_SPI_SW_RX_REQ BIT(0)
0100 #define SPRD_SPI_SW_TX_REQ BIT(1)
0101
0102
0103 #define SPRD_SPI_DATA_LINE2_EN BIT(15)
0104 #define SPRD_SPI_MODE_MASK GENMASK(5, 3)
0105 #define SPRD_SPI_MODE_OFFSET 3
0106 #define SPRD_SPI_3WIRE_MODE 4
0107 #define SPRD_SPI_4WIRE_MODE 0
0108
0109
0110 #define SPRD_SPI_TX_MAX_LEN_MASK GENMASK(19, 0)
0111 #define SPRD_SPI_TX_LEN_H_MASK GENMASK(3, 0)
0112 #define SPRD_SPI_TX_LEN_H_OFFSET 16
0113
0114
0115 #define SPRD_SPI_TX_LEN_L_MASK GENMASK(15, 0)
0116
0117
0118 #define SPRD_SPI_RX_MAX_LEN_MASK GENMASK(19, 0)
0119 #define SPRD_SPI_RX_LEN_H_MASK GENMASK(3, 0)
0120 #define SPRD_SPI_RX_LEN_H_OFFSET 16
0121
0122
0123 #define SPRD_SPI_RX_LEN_L_MASK GENMASK(15, 0)
0124
0125
0126 #define SPRD_SPI_MIN_DELAY_CYCLE 14
0127 #define SPRD_SPI_MAX_DELAY_CYCLE 130
0128
0129 #define SPRD_SPI_FIFO_SIZE 32
0130 #define SPRD_SPI_CHIP_CS_NUM 0x4
0131 #define SPRD_SPI_CHNL_LEN 2
0132 #define SPRD_SPI_DEFAULT_SOURCE 26000000
0133 #define SPRD_SPI_MAX_SPEED_HZ 48000000
0134 #define SPRD_SPI_AUTOSUSPEND_DELAY 100
0135 #define SPRD_SPI_DMA_STEP 8
0136
0137 enum sprd_spi_dma_channel {
0138 SPRD_SPI_RX,
0139 SPRD_SPI_TX,
0140 SPRD_SPI_MAX,
0141 };
0142
0143 struct sprd_spi_dma {
0144 bool enable;
0145 struct dma_chan *dma_chan[SPRD_SPI_MAX];
0146 enum dma_slave_buswidth width;
0147 u32 fragmens_len;
0148 u32 rx_len;
0149 };
0150
0151 struct sprd_spi {
0152 void __iomem *base;
0153 phys_addr_t phy_base;
0154 struct device *dev;
0155 struct clk *clk;
0156 int irq;
0157 u32 src_clk;
0158 u32 hw_mode;
0159 u32 trans_len;
0160 u32 trans_mode;
0161 u32 word_delay;
0162 u32 hw_speed_hz;
0163 u32 len;
0164 int status;
0165 struct sprd_spi_dma dma;
0166 struct completion xfer_completion;
0167 const void *tx_buf;
0168 void *rx_buf;
0169 int (*read_bufs)(struct sprd_spi *ss, u32 len);
0170 int (*write_bufs)(struct sprd_spi *ss, u32 len);
0171 };
0172
0173 static u32 sprd_spi_transfer_max_timeout(struct sprd_spi *ss,
0174 struct spi_transfer *t)
0175 {
0176
0177
0178
0179
0180 u32 size = t->bits_per_word * SPRD_SPI_FIFO_SIZE;
0181 u32 bit_time_us = DIV_ROUND_UP(USEC_PER_SEC, ss->hw_speed_hz);
0182 u32 total_time_us = size * bit_time_us;
0183
0184
0185
0186
0187 u32 interval_cycle = SPRD_SPI_FIFO_SIZE * ss->word_delay;
0188 u32 interval_time_us = DIV_ROUND_UP(interval_cycle * USEC_PER_SEC,
0189 ss->src_clk);
0190
0191 return total_time_us + interval_time_us;
0192 }
0193
0194 static int sprd_spi_wait_for_tx_end(struct sprd_spi *ss, struct spi_transfer *t)
0195 {
0196 u32 val, us;
0197 int ret;
0198
0199 us = sprd_spi_transfer_max_timeout(ss, t);
0200 ret = readl_relaxed_poll_timeout(ss->base + SPRD_SPI_INT_RAW_STS, val,
0201 val & SPRD_SPI_TX_END_IRQ, 0, us);
0202 if (ret) {
0203 dev_err(ss->dev, "SPI error, spi send timeout!\n");
0204 return ret;
0205 }
0206
0207 ret = readl_relaxed_poll_timeout(ss->base + SPRD_SPI_STS2, val,
0208 !(val & SPRD_SPI_TX_BUSY), 0, us);
0209 if (ret) {
0210 dev_err(ss->dev, "SPI error, spi busy timeout!\n");
0211 return ret;
0212 }
0213
0214 writel_relaxed(SPRD_SPI_TX_END_INT_CLR, ss->base + SPRD_SPI_INT_CLR);
0215
0216 return 0;
0217 }
0218
0219 static int sprd_spi_wait_for_rx_end(struct sprd_spi *ss, struct spi_transfer *t)
0220 {
0221 u32 val, us;
0222 int ret;
0223
0224 us = sprd_spi_transfer_max_timeout(ss, t);
0225 ret = readl_relaxed_poll_timeout(ss->base + SPRD_SPI_INT_RAW_STS, val,
0226 val & SPRD_SPI_RX_END_IRQ, 0, us);
0227 if (ret) {
0228 dev_err(ss->dev, "SPI error, spi rx timeout!\n");
0229 return ret;
0230 }
0231
0232 writel_relaxed(SPRD_SPI_RX_END_INT_CLR, ss->base + SPRD_SPI_INT_CLR);
0233
0234 return 0;
0235 }
0236
0237 static void sprd_spi_tx_req(struct sprd_spi *ss)
0238 {
0239 writel_relaxed(SPRD_SPI_SW_TX_REQ, ss->base + SPRD_SPI_CTL12);
0240 }
0241
0242 static void sprd_spi_rx_req(struct sprd_spi *ss)
0243 {
0244 writel_relaxed(SPRD_SPI_SW_RX_REQ, ss->base + SPRD_SPI_CTL12);
0245 }
0246
0247 static void sprd_spi_enter_idle(struct sprd_spi *ss)
0248 {
0249 u32 val = readl_relaxed(ss->base + SPRD_SPI_CTL1);
0250
0251 val &= ~SPRD_SPI_RTX_MD_MASK;
0252 writel_relaxed(val, ss->base + SPRD_SPI_CTL1);
0253 }
0254
0255 static void sprd_spi_set_transfer_bits(struct sprd_spi *ss, u32 bits)
0256 {
0257 u32 val = readl_relaxed(ss->base + SPRD_SPI_CTL0);
0258
0259
0260 val &= ~(SPRD_SPI_CHNL_LEN_MASK << SPRD_SPI_CHNL_LEN);
0261 val |= bits << SPRD_SPI_CHNL_LEN;
0262 writel_relaxed(val, ss->base + SPRD_SPI_CTL0);
0263 }
0264
0265 static void sprd_spi_set_tx_length(struct sprd_spi *ss, u32 length)
0266 {
0267 u32 val = readl_relaxed(ss->base + SPRD_SPI_CTL8);
0268
0269 length &= SPRD_SPI_TX_MAX_LEN_MASK;
0270 val &= ~SPRD_SPI_TX_LEN_H_MASK;
0271 val |= length >> SPRD_SPI_TX_LEN_H_OFFSET;
0272 writel_relaxed(val, ss->base + SPRD_SPI_CTL8);
0273
0274 val = length & SPRD_SPI_TX_LEN_L_MASK;
0275 writel_relaxed(val, ss->base + SPRD_SPI_CTL9);
0276 }
0277
0278 static void sprd_spi_set_rx_length(struct sprd_spi *ss, u32 length)
0279 {
0280 u32 val = readl_relaxed(ss->base + SPRD_SPI_CTL10);
0281
0282 length &= SPRD_SPI_RX_MAX_LEN_MASK;
0283 val &= ~SPRD_SPI_RX_LEN_H_MASK;
0284 val |= length >> SPRD_SPI_RX_LEN_H_OFFSET;
0285 writel_relaxed(val, ss->base + SPRD_SPI_CTL10);
0286
0287 val = length & SPRD_SPI_RX_LEN_L_MASK;
0288 writel_relaxed(val, ss->base + SPRD_SPI_CTL11);
0289 }
0290
0291 static void sprd_spi_chipselect(struct spi_device *sdev, bool cs)
0292 {
0293 struct spi_controller *sctlr = sdev->controller;
0294 struct sprd_spi *ss = spi_controller_get_devdata(sctlr);
0295 u32 val;
0296
0297 val = readl_relaxed(ss->base + SPRD_SPI_CTL0);
0298
0299 if (!cs) {
0300 val &= ~SPRD_SPI_CS0_VALID;
0301 writel_relaxed(val, ss->base + SPRD_SPI_CTL0);
0302 } else {
0303 val |= SPRD_SPI_CSN_MASK;
0304 writel_relaxed(val, ss->base + SPRD_SPI_CTL0);
0305 }
0306 }
0307
0308 static int sprd_spi_write_only_receive(struct sprd_spi *ss, u32 len)
0309 {
0310 u32 val;
0311
0312
0313 val = readl_relaxed(ss->base + SPRD_SPI_CTL4);
0314 val &= ~(SPRD_SPI_START_RX | SPRD_SPI_ONLY_RECV_MASK);
0315 writel_relaxed(val, ss->base + SPRD_SPI_CTL4);
0316
0317
0318 val = readl_relaxed(ss->base + SPRD_SPI_CTL4);
0319 val |= len & SPRD_SPI_ONLY_RECV_MASK;
0320 writel_relaxed(val, ss->base + SPRD_SPI_CTL4);
0321
0322
0323 val = readl_relaxed(ss->base + SPRD_SPI_CTL4);
0324 val |= SPRD_SPI_START_RX;
0325 writel_relaxed(val, ss->base + SPRD_SPI_CTL4);
0326
0327 return len;
0328 }
0329
0330 static int sprd_spi_write_bufs_u8(struct sprd_spi *ss, u32 len)
0331 {
0332 u8 *tx_p = (u8 *)ss->tx_buf;
0333 int i;
0334
0335 for (i = 0; i < len; i++)
0336 writeb_relaxed(tx_p[i], ss->base + SPRD_SPI_TXD);
0337
0338 ss->tx_buf += i;
0339 return i;
0340 }
0341
0342 static int sprd_spi_write_bufs_u16(struct sprd_spi *ss, u32 len)
0343 {
0344 u16 *tx_p = (u16 *)ss->tx_buf;
0345 int i;
0346
0347 for (i = 0; i < len; i++)
0348 writew_relaxed(tx_p[i], ss->base + SPRD_SPI_TXD);
0349
0350 ss->tx_buf += i << 1;
0351 return i << 1;
0352 }
0353
0354 static int sprd_spi_write_bufs_u32(struct sprd_spi *ss, u32 len)
0355 {
0356 u32 *tx_p = (u32 *)ss->tx_buf;
0357 int i;
0358
0359 for (i = 0; i < len; i++)
0360 writel_relaxed(tx_p[i], ss->base + SPRD_SPI_TXD);
0361
0362 ss->tx_buf += i << 2;
0363 return i << 2;
0364 }
0365
0366 static int sprd_spi_read_bufs_u8(struct sprd_spi *ss, u32 len)
0367 {
0368 u8 *rx_p = (u8 *)ss->rx_buf;
0369 int i;
0370
0371 for (i = 0; i < len; i++)
0372 rx_p[i] = readb_relaxed(ss->base + SPRD_SPI_TXD);
0373
0374 ss->rx_buf += i;
0375 return i;
0376 }
0377
0378 static int sprd_spi_read_bufs_u16(struct sprd_spi *ss, u32 len)
0379 {
0380 u16 *rx_p = (u16 *)ss->rx_buf;
0381 int i;
0382
0383 for (i = 0; i < len; i++)
0384 rx_p[i] = readw_relaxed(ss->base + SPRD_SPI_TXD);
0385
0386 ss->rx_buf += i << 1;
0387 return i << 1;
0388 }
0389
0390 static int sprd_spi_read_bufs_u32(struct sprd_spi *ss, u32 len)
0391 {
0392 u32 *rx_p = (u32 *)ss->rx_buf;
0393 int i;
0394
0395 for (i = 0; i < len; i++)
0396 rx_p[i] = readl_relaxed(ss->base + SPRD_SPI_TXD);
0397
0398 ss->rx_buf += i << 2;
0399 return i << 2;
0400 }
0401
0402 static int sprd_spi_txrx_bufs(struct spi_device *sdev, struct spi_transfer *t)
0403 {
0404 struct sprd_spi *ss = spi_controller_get_devdata(sdev->controller);
0405 u32 trans_len = ss->trans_len, len;
0406 int ret, write_size = 0, read_size = 0;
0407
0408 while (trans_len) {
0409 len = trans_len > SPRD_SPI_FIFO_SIZE ? SPRD_SPI_FIFO_SIZE :
0410 trans_len;
0411 if (ss->trans_mode & SPRD_SPI_TX_MODE) {
0412 sprd_spi_set_tx_length(ss, len);
0413 write_size += ss->write_bufs(ss, len);
0414
0415
0416
0417
0418
0419 if (ss->hw_mode & SPI_3WIRE || ss->hw_mode & SPI_TX_DUAL)
0420 sprd_spi_tx_req(ss);
0421
0422 ret = sprd_spi_wait_for_tx_end(ss, t);
0423 } else {
0424 sprd_spi_set_rx_length(ss, len);
0425
0426
0427
0428
0429
0430 if (ss->hw_mode & SPI_3WIRE || ss->hw_mode & SPI_TX_DUAL)
0431 sprd_spi_rx_req(ss);
0432 else
0433 write_size += ss->write_bufs(ss, len);
0434
0435 ret = sprd_spi_wait_for_rx_end(ss, t);
0436 }
0437
0438 if (ret)
0439 goto complete;
0440
0441 if (ss->trans_mode & SPRD_SPI_RX_MODE)
0442 read_size += ss->read_bufs(ss, len);
0443
0444 trans_len -= len;
0445 }
0446
0447 if (ss->trans_mode & SPRD_SPI_TX_MODE)
0448 ret = write_size;
0449 else
0450 ret = read_size;
0451 complete:
0452 sprd_spi_enter_idle(ss);
0453
0454 return ret;
0455 }
0456
0457 static void sprd_spi_irq_enable(struct sprd_spi *ss)
0458 {
0459 u32 val;
0460
0461
0462 writel_relaxed(SPRD_SPI_TX_END_CLR | SPRD_SPI_RX_END_CLR,
0463 ss->base + SPRD_SPI_INT_CLR);
0464
0465 val = readl_relaxed(ss->base + SPRD_SPI_INT_EN);
0466 writel_relaxed(val | SPRD_SPI_TX_END_INT_EN |
0467 SPRD_SPI_RX_END_INT_EN,
0468 ss->base + SPRD_SPI_INT_EN);
0469 }
0470
0471 static void sprd_spi_irq_disable(struct sprd_spi *ss)
0472 {
0473 writel_relaxed(0, ss->base + SPRD_SPI_INT_EN);
0474 }
0475
0476 static void sprd_spi_dma_enable(struct sprd_spi *ss, bool enable)
0477 {
0478 u32 val = readl_relaxed(ss->base + SPRD_SPI_CTL2);
0479
0480 if (enable)
0481 val |= SPRD_SPI_DMA_EN;
0482 else
0483 val &= ~SPRD_SPI_DMA_EN;
0484
0485 writel_relaxed(val, ss->base + SPRD_SPI_CTL2);
0486 }
0487
0488 static int sprd_spi_dma_submit(struct dma_chan *dma_chan,
0489 struct dma_slave_config *c,
0490 struct sg_table *sg,
0491 enum dma_transfer_direction dir)
0492 {
0493 struct dma_async_tx_descriptor *desc;
0494 dma_cookie_t cookie;
0495 unsigned long flags;
0496 int ret;
0497
0498 ret = dmaengine_slave_config(dma_chan, c);
0499 if (ret < 0)
0500 return ret;
0501
0502 flags = SPRD_DMA_FLAGS(SPRD_DMA_CHN_MODE_NONE, SPRD_DMA_NO_TRG,
0503 SPRD_DMA_FRAG_REQ, SPRD_DMA_TRANS_INT);
0504 desc = dmaengine_prep_slave_sg(dma_chan, sg->sgl, sg->nents, dir, flags);
0505 if (!desc)
0506 return -ENODEV;
0507
0508 cookie = dmaengine_submit(desc);
0509 if (dma_submit_error(cookie))
0510 return dma_submit_error(cookie);
0511
0512 dma_async_issue_pending(dma_chan);
0513
0514 return 0;
0515 }
0516
0517 static int sprd_spi_dma_rx_config(struct sprd_spi *ss, struct spi_transfer *t)
0518 {
0519 struct dma_chan *dma_chan = ss->dma.dma_chan[SPRD_SPI_RX];
0520 struct dma_slave_config config = {
0521 .src_addr = ss->phy_base,
0522 .src_addr_width = ss->dma.width,
0523 .dst_addr_width = ss->dma.width,
0524 .dst_maxburst = ss->dma.fragmens_len,
0525 };
0526 int ret;
0527
0528 ret = sprd_spi_dma_submit(dma_chan, &config, &t->rx_sg, DMA_DEV_TO_MEM);
0529 if (ret)
0530 return ret;
0531
0532 return ss->dma.rx_len;
0533 }
0534
0535 static int sprd_spi_dma_tx_config(struct sprd_spi *ss, struct spi_transfer *t)
0536 {
0537 struct dma_chan *dma_chan = ss->dma.dma_chan[SPRD_SPI_TX];
0538 struct dma_slave_config config = {
0539 .dst_addr = ss->phy_base,
0540 .src_addr_width = ss->dma.width,
0541 .dst_addr_width = ss->dma.width,
0542 .src_maxburst = ss->dma.fragmens_len,
0543 };
0544 int ret;
0545
0546 ret = sprd_spi_dma_submit(dma_chan, &config, &t->tx_sg, DMA_MEM_TO_DEV);
0547 if (ret)
0548 return ret;
0549
0550 return t->len;
0551 }
0552
0553 static int sprd_spi_dma_request(struct sprd_spi *ss)
0554 {
0555 ss->dma.dma_chan[SPRD_SPI_RX] = dma_request_chan(ss->dev, "rx_chn");
0556 if (IS_ERR_OR_NULL(ss->dma.dma_chan[SPRD_SPI_RX]))
0557 return dev_err_probe(ss->dev, PTR_ERR(ss->dma.dma_chan[SPRD_SPI_RX]),
0558 "request RX DMA channel failed!\n");
0559
0560 ss->dma.dma_chan[SPRD_SPI_TX] = dma_request_chan(ss->dev, "tx_chn");
0561 if (IS_ERR_OR_NULL(ss->dma.dma_chan[SPRD_SPI_TX])) {
0562 dma_release_channel(ss->dma.dma_chan[SPRD_SPI_RX]);
0563 return dev_err_probe(ss->dev, PTR_ERR(ss->dma.dma_chan[SPRD_SPI_TX]),
0564 "request TX DMA channel failed!\n");
0565 }
0566
0567 return 0;
0568 }
0569
0570 static void sprd_spi_dma_release(struct sprd_spi *ss)
0571 {
0572 if (ss->dma.dma_chan[SPRD_SPI_RX])
0573 dma_release_channel(ss->dma.dma_chan[SPRD_SPI_RX]);
0574
0575 if (ss->dma.dma_chan[SPRD_SPI_TX])
0576 dma_release_channel(ss->dma.dma_chan[SPRD_SPI_TX]);
0577 }
0578
0579 static int sprd_spi_dma_txrx_bufs(struct spi_device *sdev,
0580 struct spi_transfer *t)
0581 {
0582 struct sprd_spi *ss = spi_master_get_devdata(sdev->master);
0583 u32 trans_len = ss->trans_len;
0584 int ret, write_size = 0;
0585
0586 reinit_completion(&ss->xfer_completion);
0587 sprd_spi_irq_enable(ss);
0588 if (ss->trans_mode & SPRD_SPI_TX_MODE) {
0589 write_size = sprd_spi_dma_tx_config(ss, t);
0590 sprd_spi_set_tx_length(ss, trans_len);
0591
0592
0593
0594
0595
0596 if (ss->hw_mode & SPI_3WIRE || ss->hw_mode & SPI_TX_DUAL)
0597 sprd_spi_tx_req(ss);
0598 } else {
0599 sprd_spi_set_rx_length(ss, trans_len);
0600
0601
0602
0603
0604
0605 if (ss->hw_mode & SPI_3WIRE || ss->hw_mode & SPI_TX_DUAL)
0606 sprd_spi_rx_req(ss);
0607 else
0608 write_size = ss->write_bufs(ss, trans_len);
0609 }
0610
0611 if (write_size < 0) {
0612 ret = write_size;
0613 dev_err(ss->dev, "failed to write, ret = %d\n", ret);
0614 goto trans_complete;
0615 }
0616
0617 if (ss->trans_mode & SPRD_SPI_RX_MODE) {
0618
0619
0620
0621
0622
0623
0624
0625 ss->dma.rx_len = t->len > ss->dma.fragmens_len ?
0626 (t->len - t->len % ss->dma.fragmens_len) :
0627 t->len;
0628 ret = sprd_spi_dma_rx_config(ss, t);
0629 if (ret < 0) {
0630 dev_err(&sdev->dev,
0631 "failed to configure rx DMA, ret = %d\n", ret);
0632 goto trans_complete;
0633 }
0634 }
0635
0636 sprd_spi_dma_enable(ss, true);
0637 wait_for_completion(&(ss->xfer_completion));
0638
0639 if (ss->trans_mode & SPRD_SPI_TX_MODE)
0640 ret = write_size;
0641 else
0642 ret = ss->dma.rx_len;
0643
0644 trans_complete:
0645 sprd_spi_dma_enable(ss, false);
0646 sprd_spi_enter_idle(ss);
0647 sprd_spi_irq_disable(ss);
0648
0649 return ret;
0650 }
0651
0652 static void sprd_spi_set_speed(struct sprd_spi *ss, u32 speed_hz)
0653 {
0654
0655
0656
0657
0658 u32 clk_div = DIV_ROUND_UP(ss->src_clk, speed_hz << 1) - 1;
0659
0660
0661 ss->hw_speed_hz = (ss->src_clk >> 1) / (clk_div + 1);
0662 writel_relaxed(clk_div, ss->base + SPRD_SPI_CLKD);
0663 }
0664
0665 static int sprd_spi_init_hw(struct sprd_spi *ss, struct spi_transfer *t)
0666 {
0667 struct spi_delay *d = &t->word_delay;
0668 u16 word_delay, interval;
0669 u32 val;
0670
0671 if (d->unit != SPI_DELAY_UNIT_SCK)
0672 return -EINVAL;
0673
0674 val = readl_relaxed(ss->base + SPRD_SPI_CTL0);
0675 val &= ~(SPRD_SPI_SCK_REV | SPRD_SPI_NG_TX | SPRD_SPI_NG_RX);
0676
0677 val |= ss->hw_mode & SPI_CPHA ? SPRD_SPI_NG_RX : SPRD_SPI_NG_TX;
0678 val |= ss->hw_mode & SPI_CPOL ? SPRD_SPI_SCK_REV : 0;
0679 writel_relaxed(val, ss->base + SPRD_SPI_CTL0);
0680
0681
0682
0683
0684
0685
0686 word_delay = clamp_t(u16, d->value, SPRD_SPI_MIN_DELAY_CYCLE,
0687 SPRD_SPI_MAX_DELAY_CYCLE);
0688 interval = DIV_ROUND_UP(word_delay - 10, 4);
0689 ss->word_delay = interval * 4 + 10;
0690 writel_relaxed(interval, ss->base + SPRD_SPI_CTL5);
0691
0692
0693 writel_relaxed(1, ss->base + SPRD_SPI_FIFO_RST);
0694 writel_relaxed(0, ss->base + SPRD_SPI_FIFO_RST);
0695
0696
0697 val = readl_relaxed(ss->base + SPRD_SPI_CTL7);
0698 val &= ~SPRD_SPI_MODE_MASK;
0699
0700 if (ss->hw_mode & SPI_3WIRE)
0701 val |= SPRD_SPI_3WIRE_MODE << SPRD_SPI_MODE_OFFSET;
0702 else
0703 val |= SPRD_SPI_4WIRE_MODE << SPRD_SPI_MODE_OFFSET;
0704
0705 if (ss->hw_mode & SPI_TX_DUAL)
0706 val |= SPRD_SPI_DATA_LINE2_EN;
0707 else
0708 val &= ~SPRD_SPI_DATA_LINE2_EN;
0709
0710 writel_relaxed(val, ss->base + SPRD_SPI_CTL7);
0711
0712 return 0;
0713 }
0714
0715 static int sprd_spi_setup_transfer(struct spi_device *sdev,
0716 struct spi_transfer *t)
0717 {
0718 struct sprd_spi *ss = spi_controller_get_devdata(sdev->controller);
0719 u8 bits_per_word = t->bits_per_word;
0720 u32 val, mode = 0;
0721 int ret;
0722
0723 ss->len = t->len;
0724 ss->tx_buf = t->tx_buf;
0725 ss->rx_buf = t->rx_buf;
0726
0727 ss->hw_mode = sdev->mode;
0728 ret = sprd_spi_init_hw(ss, t);
0729 if (ret)
0730 return ret;
0731
0732
0733 sprd_spi_set_speed(ss, t->speed_hz);
0734 sprd_spi_set_transfer_bits(ss, bits_per_word);
0735
0736 if (bits_per_word > 16)
0737 bits_per_word = round_up(bits_per_word, 16);
0738 else
0739 bits_per_word = round_up(bits_per_word, 8);
0740
0741 switch (bits_per_word) {
0742 case 8:
0743 ss->trans_len = t->len;
0744 ss->read_bufs = sprd_spi_read_bufs_u8;
0745 ss->write_bufs = sprd_spi_write_bufs_u8;
0746 ss->dma.width = DMA_SLAVE_BUSWIDTH_1_BYTE;
0747 ss->dma.fragmens_len = SPRD_SPI_DMA_STEP;
0748 break;
0749 case 16:
0750 ss->trans_len = t->len >> 1;
0751 ss->read_bufs = sprd_spi_read_bufs_u16;
0752 ss->write_bufs = sprd_spi_write_bufs_u16;
0753 ss->dma.width = DMA_SLAVE_BUSWIDTH_2_BYTES;
0754 ss->dma.fragmens_len = SPRD_SPI_DMA_STEP << 1;
0755 break;
0756 case 32:
0757 ss->trans_len = t->len >> 2;
0758 ss->read_bufs = sprd_spi_read_bufs_u32;
0759 ss->write_bufs = sprd_spi_write_bufs_u32;
0760 ss->dma.width = DMA_SLAVE_BUSWIDTH_4_BYTES;
0761 ss->dma.fragmens_len = SPRD_SPI_DMA_STEP << 2;
0762 break;
0763 default:
0764 return -EINVAL;
0765 }
0766
0767
0768 val = readl_relaxed(ss->base + SPRD_SPI_CTL1);
0769 val &= ~SPRD_SPI_RTX_MD_MASK;
0770 if (t->tx_buf)
0771 mode |= SPRD_SPI_TX_MODE;
0772 if (t->rx_buf)
0773 mode |= SPRD_SPI_RX_MODE;
0774
0775 writel_relaxed(val | mode, ss->base + SPRD_SPI_CTL1);
0776
0777 ss->trans_mode = mode;
0778
0779
0780
0781
0782
0783 if (ss->trans_mode == SPRD_SPI_RX_MODE)
0784 ss->write_bufs = sprd_spi_write_only_receive;
0785
0786 return 0;
0787 }
0788
0789 static int sprd_spi_transfer_one(struct spi_controller *sctlr,
0790 struct spi_device *sdev,
0791 struct spi_transfer *t)
0792 {
0793 int ret;
0794
0795 ret = sprd_spi_setup_transfer(sdev, t);
0796 if (ret)
0797 goto setup_err;
0798
0799 if (sctlr->can_dma(sctlr, sdev, t))
0800 ret = sprd_spi_dma_txrx_bufs(sdev, t);
0801 else
0802 ret = sprd_spi_txrx_bufs(sdev, t);
0803
0804 if (ret == t->len)
0805 ret = 0;
0806 else if (ret >= 0)
0807 ret = -EREMOTEIO;
0808
0809 setup_err:
0810 spi_finalize_current_transfer(sctlr);
0811
0812 return ret;
0813 }
0814
0815 static irqreturn_t sprd_spi_handle_irq(int irq, void *data)
0816 {
0817 struct sprd_spi *ss = (struct sprd_spi *)data;
0818 u32 val = readl_relaxed(ss->base + SPRD_SPI_INT_MASK_STS);
0819
0820 if (val & SPRD_SPI_MASK_TX_END) {
0821 writel_relaxed(SPRD_SPI_TX_END_CLR, ss->base + SPRD_SPI_INT_CLR);
0822 if (!(ss->trans_mode & SPRD_SPI_RX_MODE))
0823 complete(&ss->xfer_completion);
0824
0825 return IRQ_HANDLED;
0826 }
0827
0828 if (val & SPRD_SPI_MASK_RX_END) {
0829 writel_relaxed(SPRD_SPI_RX_END_CLR, ss->base + SPRD_SPI_INT_CLR);
0830 if (ss->dma.rx_len < ss->len) {
0831 ss->rx_buf += ss->dma.rx_len;
0832 ss->dma.rx_len +=
0833 ss->read_bufs(ss, ss->len - ss->dma.rx_len);
0834 }
0835 complete(&ss->xfer_completion);
0836
0837 return IRQ_HANDLED;
0838 }
0839
0840 return IRQ_NONE;
0841 }
0842
0843 static int sprd_spi_irq_init(struct platform_device *pdev, struct sprd_spi *ss)
0844 {
0845 int ret;
0846
0847 ss->irq = platform_get_irq(pdev, 0);
0848 if (ss->irq < 0)
0849 return ss->irq;
0850
0851 ret = devm_request_irq(&pdev->dev, ss->irq, sprd_spi_handle_irq,
0852 0, pdev->name, ss);
0853 if (ret)
0854 dev_err(&pdev->dev, "failed to request spi irq %d, ret = %d\n",
0855 ss->irq, ret);
0856
0857 return ret;
0858 }
0859
0860 static int sprd_spi_clk_init(struct platform_device *pdev, struct sprd_spi *ss)
0861 {
0862 struct clk *clk_spi, *clk_parent;
0863
0864 clk_spi = devm_clk_get(&pdev->dev, "spi");
0865 if (IS_ERR(clk_spi)) {
0866 dev_warn(&pdev->dev, "can't get the spi clock\n");
0867 clk_spi = NULL;
0868 }
0869
0870 clk_parent = devm_clk_get(&pdev->dev, "source");
0871 if (IS_ERR(clk_parent)) {
0872 dev_warn(&pdev->dev, "can't get the source clock\n");
0873 clk_parent = NULL;
0874 }
0875
0876 ss->clk = devm_clk_get(&pdev->dev, "enable");
0877 if (IS_ERR(ss->clk)) {
0878 dev_err(&pdev->dev, "can't get the enable clock\n");
0879 return PTR_ERR(ss->clk);
0880 }
0881
0882 if (!clk_set_parent(clk_spi, clk_parent))
0883 ss->src_clk = clk_get_rate(clk_spi);
0884 else
0885 ss->src_clk = SPRD_SPI_DEFAULT_SOURCE;
0886
0887 return 0;
0888 }
0889
0890 static bool sprd_spi_can_dma(struct spi_controller *sctlr,
0891 struct spi_device *spi, struct spi_transfer *t)
0892 {
0893 struct sprd_spi *ss = spi_controller_get_devdata(sctlr);
0894
0895 return ss->dma.enable && (t->len > SPRD_SPI_FIFO_SIZE);
0896 }
0897
0898 static int sprd_spi_dma_init(struct platform_device *pdev, struct sprd_spi *ss)
0899 {
0900 int ret;
0901
0902 ret = sprd_spi_dma_request(ss);
0903 if (ret) {
0904 if (ret == -EPROBE_DEFER)
0905 return ret;
0906
0907 dev_warn(&pdev->dev,
0908 "failed to request dma, enter no dma mode, ret = %d\n",
0909 ret);
0910
0911 return 0;
0912 }
0913
0914 ss->dma.enable = true;
0915
0916 return 0;
0917 }
0918
0919 static int sprd_spi_probe(struct platform_device *pdev)
0920 {
0921 struct spi_controller *sctlr;
0922 struct resource *res;
0923 struct sprd_spi *ss;
0924 int ret;
0925
0926 pdev->id = of_alias_get_id(pdev->dev.of_node, "spi");
0927 sctlr = spi_alloc_master(&pdev->dev, sizeof(*ss));
0928 if (!sctlr)
0929 return -ENOMEM;
0930
0931 ss = spi_controller_get_devdata(sctlr);
0932 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
0933 ss->base = devm_ioremap_resource(&pdev->dev, res);
0934 if (IS_ERR(ss->base)) {
0935 ret = PTR_ERR(ss->base);
0936 goto free_controller;
0937 }
0938
0939 ss->phy_base = res->start;
0940 ss->dev = &pdev->dev;
0941 sctlr->dev.of_node = pdev->dev.of_node;
0942 sctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_3WIRE | SPI_TX_DUAL;
0943 sctlr->bus_num = pdev->id;
0944 sctlr->set_cs = sprd_spi_chipselect;
0945 sctlr->transfer_one = sprd_spi_transfer_one;
0946 sctlr->can_dma = sprd_spi_can_dma;
0947 sctlr->auto_runtime_pm = true;
0948 sctlr->max_speed_hz = min_t(u32, ss->src_clk >> 1,
0949 SPRD_SPI_MAX_SPEED_HZ);
0950
0951 init_completion(&ss->xfer_completion);
0952 platform_set_drvdata(pdev, sctlr);
0953 ret = sprd_spi_clk_init(pdev, ss);
0954 if (ret)
0955 goto free_controller;
0956
0957 ret = sprd_spi_irq_init(pdev, ss);
0958 if (ret)
0959 goto free_controller;
0960
0961 ret = sprd_spi_dma_init(pdev, ss);
0962 if (ret)
0963 goto free_controller;
0964
0965 ret = clk_prepare_enable(ss->clk);
0966 if (ret)
0967 goto release_dma;
0968
0969 ret = pm_runtime_set_active(&pdev->dev);
0970 if (ret < 0)
0971 goto disable_clk;
0972
0973 pm_runtime_set_autosuspend_delay(&pdev->dev,
0974 SPRD_SPI_AUTOSUSPEND_DELAY);
0975 pm_runtime_use_autosuspend(&pdev->dev);
0976 pm_runtime_enable(&pdev->dev);
0977 ret = pm_runtime_get_sync(&pdev->dev);
0978 if (ret < 0) {
0979 dev_err(&pdev->dev, "failed to resume SPI controller\n");
0980 goto err_rpm_put;
0981 }
0982
0983 ret = devm_spi_register_controller(&pdev->dev, sctlr);
0984 if (ret)
0985 goto err_rpm_put;
0986
0987 pm_runtime_mark_last_busy(&pdev->dev);
0988 pm_runtime_put_autosuspend(&pdev->dev);
0989
0990 return 0;
0991
0992 err_rpm_put:
0993 pm_runtime_put_noidle(&pdev->dev);
0994 pm_runtime_disable(&pdev->dev);
0995 disable_clk:
0996 clk_disable_unprepare(ss->clk);
0997 release_dma:
0998 sprd_spi_dma_release(ss);
0999 free_controller:
1000 spi_controller_put(sctlr);
1001
1002 return ret;
1003 }
1004
1005 static int sprd_spi_remove(struct platform_device *pdev)
1006 {
1007 struct spi_controller *sctlr = platform_get_drvdata(pdev);
1008 struct sprd_spi *ss = spi_controller_get_devdata(sctlr);
1009 int ret;
1010
1011 ret = pm_runtime_resume_and_get(ss->dev);
1012 if (ret < 0) {
1013 dev_err(ss->dev, "failed to resume SPI controller\n");
1014 return ret;
1015 }
1016
1017 spi_controller_suspend(sctlr);
1018
1019 if (ss->dma.enable)
1020 sprd_spi_dma_release(ss);
1021 clk_disable_unprepare(ss->clk);
1022 pm_runtime_put_noidle(&pdev->dev);
1023 pm_runtime_disable(&pdev->dev);
1024
1025 return 0;
1026 }
1027
1028 static int __maybe_unused sprd_spi_runtime_suspend(struct device *dev)
1029 {
1030 struct spi_controller *sctlr = dev_get_drvdata(dev);
1031 struct sprd_spi *ss = spi_controller_get_devdata(sctlr);
1032
1033 if (ss->dma.enable)
1034 sprd_spi_dma_release(ss);
1035
1036 clk_disable_unprepare(ss->clk);
1037
1038 return 0;
1039 }
1040
1041 static int __maybe_unused sprd_spi_runtime_resume(struct device *dev)
1042 {
1043 struct spi_controller *sctlr = dev_get_drvdata(dev);
1044 struct sprd_spi *ss = spi_controller_get_devdata(sctlr);
1045 int ret;
1046
1047 ret = clk_prepare_enable(ss->clk);
1048 if (ret)
1049 return ret;
1050
1051 if (!ss->dma.enable)
1052 return 0;
1053
1054 ret = sprd_spi_dma_request(ss);
1055 if (ret)
1056 clk_disable_unprepare(ss->clk);
1057
1058 return ret;
1059 }
1060
1061 static const struct dev_pm_ops sprd_spi_pm_ops = {
1062 SET_RUNTIME_PM_OPS(sprd_spi_runtime_suspend,
1063 sprd_spi_runtime_resume, NULL)
1064 };
1065
1066 static const struct of_device_id sprd_spi_of_match[] = {
1067 { .compatible = "sprd,sc9860-spi", },
1068 { }
1069 };
1070 MODULE_DEVICE_TABLE(of, sprd_spi_of_match);
1071
1072 static struct platform_driver sprd_spi_driver = {
1073 .driver = {
1074 .name = "sprd-spi",
1075 .of_match_table = sprd_spi_of_match,
1076 .pm = &sprd_spi_pm_ops,
1077 },
1078 .probe = sprd_spi_probe,
1079 .remove = sprd_spi_remove,
1080 };
1081
1082 module_platform_driver(sprd_spi_driver);
1083
1084 MODULE_DESCRIPTION("Spreadtrum SPI Controller driver");
1085 MODULE_AUTHOR("Lanqing Liu <lanqing.liu@spreadtrum.com>");
1086 MODULE_LICENSE("GPL v2");