1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2017-2018, The Linux foundation. All rights reserved.
5 #include <linux/interconnect.h>
6 #include <linux/interrupt.h>
8 #include <linux/module.h>
10 #include <linux/of_platform.h>
11 #include <linux/pm_runtime.h>
12 #include <linux/pm_opp.h>
13 #include <linux/spi/spi.h>
14 #include <linux/spi/spi-mem.h>
18 #define QSPI_BYTES_PER_WORD 4
20 #define MSTR_CONFIG 0x0000
21 #define FULL_CYCLE_MODE BIT(3)
22 #define FB_CLK_EN BIT(4)
23 #define PIN_HOLDN BIT(6)
24 #define PIN_WPN BIT(7)
25 #define DMA_ENABLE BIT(8)
26 #define BIG_ENDIAN_MODE BIT(9)
27 #define SPI_MODE_MSK 0xc00
28 #define SPI_MODE_SHFT 10
29 #define CHIP_SELECT_NUM BIT(12)
30 #define SBL_EN BIT(13)
31 #define LPA_BASE_MSK 0x3c000
32 #define LPA_BASE_SHFT 14
33 #define TX_DATA_DELAY_MSK 0xc0000
34 #define TX_DATA_DELAY_SHFT 18
35 #define TX_CLK_DELAY_MSK 0x300000
36 #define TX_CLK_DELAY_SHFT 20
37 #define TX_CS_N_DELAY_MSK 0xc00000
38 #define TX_CS_N_DELAY_SHFT 22
39 #define TX_DATA_OE_DELAY_MSK 0x3000000
40 #define TX_DATA_OE_DELAY_SHFT 24
42 #define AHB_MASTER_CFG 0x0004
43 #define HMEM_TYPE_START_MID_TRANS_MSK 0x7
44 #define HMEM_TYPE_START_MID_TRANS_SHFT 0
45 #define HMEM_TYPE_LAST_TRANS_MSK 0x38
46 #define HMEM_TYPE_LAST_TRANS_SHFT 3
47 #define USE_HMEMTYPE_LAST_ON_DESC_OR_CHAIN_MSK 0xc0
48 #define USE_HMEMTYPE_LAST_ON_DESC_OR_CHAIN_SHFT 6
49 #define HMEMTYPE_READ_TRANS_MSK 0x700
50 #define HMEMTYPE_READ_TRANS_SHFT 8
51 #define HSHARED BIT(11)
52 #define HINNERSHARED BIT(12)
54 #define MSTR_INT_EN 0x000C
55 #define MSTR_INT_STATUS 0x0010
56 #define RESP_FIFO_UNDERRUN BIT(0)
57 #define RESP_FIFO_NOT_EMPTY BIT(1)
58 #define RESP_FIFO_RDY BIT(2)
59 #define HRESP_FROM_NOC_ERR BIT(3)
60 #define WR_FIFO_EMPTY BIT(9)
61 #define WR_FIFO_FULL BIT(10)
62 #define WR_FIFO_OVERRUN BIT(11)
63 #define TRANSACTION_DONE BIT(16)
64 #define QSPI_ERR_IRQS (RESP_FIFO_UNDERRUN | HRESP_FROM_NOC_ERR | \
66 #define QSPI_ALL_IRQS (QSPI_ERR_IRQS | RESP_FIFO_RDY | \
67 WR_FIFO_EMPTY | WR_FIFO_FULL | \
70 #define PIO_XFER_CTRL 0x0014
71 #define REQUEST_COUNT_MSK 0xffff
73 #define PIO_XFER_CFG 0x0018
74 #define TRANSFER_DIRECTION BIT(0)
75 #define MULTI_IO_MODE_MSK 0xe
76 #define MULTI_IO_MODE_SHFT 1
77 #define TRANSFER_FRAGMENT BIT(8)
84 #define DMA_DESC_SINGLE_SPI 1
85 #define DMA_DESC_DUAL_SPI 2
86 #define DMA_DESC_QUAD_SPI 3
88 #define PIO_XFER_STATUS 0x001c
89 #define WR_FIFO_BYTES_MSK 0xffff0000
90 #define WR_FIFO_BYTES_SHFT 16
92 #define PIO_DATAOUT_1B 0x0020
93 #define PIO_DATAOUT_4B 0x0024
95 #define RD_FIFO_CFG 0x0028
96 #define CONTINUOUS_MODE BIT(0)
98 #define RD_FIFO_STATUS 0x002c
99 #define FIFO_EMPTY BIT(11)
100 #define WR_CNTS_MSK 0x7f0
101 #define WR_CNTS_SHFT 4
102 #define RDY_64BYTE BIT(3)
103 #define RDY_32BYTE BIT(2)
104 #define RDY_16BYTE BIT(1)
105 #define FIFO_RDY BIT(0)
107 #define RD_FIFO_RESET 0x0030
108 #define RESET_FIFO BIT(0)
110 #define CUR_MEM_ADDR 0x0048
111 #define HW_VERSION 0x004c
112 #define RD_FIFO 0x0050
113 #define SAMPLING_CLK_CFG 0x0090
114 #define SAMPLING_CLK_STATUS 0x0094
127 unsigned int rem_bytes
;
128 unsigned int buswidth
;
142 struct clk_bulk_data
*clks
;
143 struct qspi_xfer xfer
;
144 struct icc_path
*icc_path_cpu_to_qspi
;
145 struct opp_table
*opp_table
;
146 unsigned long last_speed
;
147 /* Lock to protect data accessed by IRQs */
151 static u32
qspi_buswidth_to_iomode(struct qcom_qspi
*ctrl
,
152 unsigned int buswidth
)
156 return SDR_1BIT
<< MULTI_IO_MODE_SHFT
;
158 return SDR_2BIT
<< MULTI_IO_MODE_SHFT
;
160 return SDR_4BIT
<< MULTI_IO_MODE_SHFT
;
162 dev_warn_once(ctrl
->dev
,
163 "Unexpected bus width: %u\n", buswidth
);
164 return SDR_1BIT
<< MULTI_IO_MODE_SHFT
;
168 static void qcom_qspi_pio_xfer_cfg(struct qcom_qspi
*ctrl
)
171 const struct qspi_xfer
*xfer
;
174 pio_xfer_cfg
= readl(ctrl
->base
+ PIO_XFER_CFG
);
175 pio_xfer_cfg
&= ~TRANSFER_DIRECTION
;
176 pio_xfer_cfg
|= xfer
->dir
;
178 pio_xfer_cfg
&= ~TRANSFER_FRAGMENT
;
180 pio_xfer_cfg
|= TRANSFER_FRAGMENT
;
181 pio_xfer_cfg
&= ~MULTI_IO_MODE_MSK
;
182 pio_xfer_cfg
|= qspi_buswidth_to_iomode(ctrl
, xfer
->buswidth
);
184 writel(pio_xfer_cfg
, ctrl
->base
+ PIO_XFER_CFG
);
187 static void qcom_qspi_pio_xfer_ctrl(struct qcom_qspi
*ctrl
)
191 pio_xfer_ctrl
= readl(ctrl
->base
+ PIO_XFER_CTRL
);
192 pio_xfer_ctrl
&= ~REQUEST_COUNT_MSK
;
193 pio_xfer_ctrl
|= ctrl
->xfer
.rem_bytes
;
194 writel(pio_xfer_ctrl
, ctrl
->base
+ PIO_XFER_CTRL
);
197 static void qcom_qspi_pio_xfer(struct qcom_qspi
*ctrl
)
201 qcom_qspi_pio_xfer_cfg(ctrl
);
203 /* Ack any previous interrupts that might be hanging around */
204 writel(QSPI_ALL_IRQS
, ctrl
->base
+ MSTR_INT_STATUS
);
206 /* Setup new interrupts */
207 if (ctrl
->xfer
.dir
== QSPI_WRITE
)
208 ints
= QSPI_ERR_IRQS
| WR_FIFO_EMPTY
;
210 ints
= QSPI_ERR_IRQS
| RESP_FIFO_RDY
;
211 writel(ints
, ctrl
->base
+ MSTR_INT_EN
);
213 /* Kick off the transfer */
214 qcom_qspi_pio_xfer_ctrl(ctrl
);
217 static void qcom_qspi_handle_err(struct spi_master
*master
,
218 struct spi_message
*msg
)
220 struct qcom_qspi
*ctrl
= spi_master_get_devdata(master
);
223 spin_lock_irqsave(&ctrl
->lock
, flags
);
224 writel(0, ctrl
->base
+ MSTR_INT_EN
);
225 ctrl
->xfer
.rem_bytes
= 0;
226 spin_unlock_irqrestore(&ctrl
->lock
, flags
);
229 static int qcom_qspi_set_speed(struct qcom_qspi
*ctrl
, unsigned long speed_hz
)
232 unsigned int avg_bw_cpu
;
234 if (speed_hz
== ctrl
->last_speed
)
237 /* In regular operation (SBL_EN=1) core must be 4x transfer clock */
238 ret
= dev_pm_opp_set_rate(ctrl
->dev
, speed_hz
* 4);
240 dev_err(ctrl
->dev
, "Failed to set core clk %d\n", ret
);
245 * Set BW quota for CPU as driver supports FIFO mode only.
246 * We don't have explicit peak requirement so keep it equal to avg_bw.
248 avg_bw_cpu
= Bps_to_icc(speed_hz
);
249 ret
= icc_set_bw(ctrl
->icc_path_cpu_to_qspi
, avg_bw_cpu
, avg_bw_cpu
);
251 dev_err(ctrl
->dev
, "%s: ICC BW voting failed for cpu: %d\n",
256 ctrl
->last_speed
= speed_hz
;
261 static int qcom_qspi_transfer_one(struct spi_master
*master
,
262 struct spi_device
*slv
,
263 struct spi_transfer
*xfer
)
265 struct qcom_qspi
*ctrl
= spi_master_get_devdata(master
);
267 unsigned long speed_hz
;
270 speed_hz
= slv
->max_speed_hz
;
272 speed_hz
= xfer
->speed_hz
;
274 ret
= qcom_qspi_set_speed(ctrl
, speed_hz
);
278 spin_lock_irqsave(&ctrl
->lock
, flags
);
280 /* We are half duplex, so either rx or tx will be set */
282 ctrl
->xfer
.dir
= QSPI_READ
;
283 ctrl
->xfer
.buswidth
= xfer
->rx_nbits
;
284 ctrl
->xfer
.rx_buf
= xfer
->rx_buf
;
286 ctrl
->xfer
.dir
= QSPI_WRITE
;
287 ctrl
->xfer
.buswidth
= xfer
->tx_nbits
;
288 ctrl
->xfer
.tx_buf
= xfer
->tx_buf
;
290 ctrl
->xfer
.is_last
= list_is_last(&xfer
->transfer_list
,
291 &master
->cur_msg
->transfers
);
292 ctrl
->xfer
.rem_bytes
= xfer
->len
;
293 qcom_qspi_pio_xfer(ctrl
);
295 spin_unlock_irqrestore(&ctrl
->lock
, flags
);
297 /* We'll call spi_finalize_current_transfer() when done */
301 static int qcom_qspi_prepare_message(struct spi_master
*master
,
302 struct spi_message
*message
)
305 struct qcom_qspi
*ctrl
;
306 int tx_data_oe_delay
= 1;
307 int tx_data_delay
= 1;
310 ctrl
= spi_master_get_devdata(master
);
311 spin_lock_irqsave(&ctrl
->lock
, flags
);
313 mstr_cfg
= readl(ctrl
->base
+ MSTR_CONFIG
);
314 mstr_cfg
&= ~CHIP_SELECT_NUM
;
315 if (message
->spi
->chip_select
)
316 mstr_cfg
|= CHIP_SELECT_NUM
;
318 mstr_cfg
|= FB_CLK_EN
| PIN_WPN
| PIN_HOLDN
| SBL_EN
| FULL_CYCLE_MODE
;
319 mstr_cfg
&= ~(SPI_MODE_MSK
| TX_DATA_OE_DELAY_MSK
| TX_DATA_DELAY_MSK
);
320 mstr_cfg
|= message
->spi
->mode
<< SPI_MODE_SHFT
;
321 mstr_cfg
|= tx_data_oe_delay
<< TX_DATA_OE_DELAY_SHFT
;
322 mstr_cfg
|= tx_data_delay
<< TX_DATA_DELAY_SHFT
;
323 mstr_cfg
&= ~DMA_ENABLE
;
325 writel(mstr_cfg
, ctrl
->base
+ MSTR_CONFIG
);
326 spin_unlock_irqrestore(&ctrl
->lock
, flags
);
331 static irqreturn_t
pio_read(struct qcom_qspi
*ctrl
)
335 unsigned int wr_cnts
;
336 unsigned int bytes_to_read
;
337 unsigned int words_to_read
;
342 rd_fifo_status
= readl(ctrl
->base
+ RD_FIFO_STATUS
);
344 if (!(rd_fifo_status
& FIFO_RDY
)) {
345 dev_dbg(ctrl
->dev
, "Spurious IRQ %#x\n", rd_fifo_status
);
349 wr_cnts
= (rd_fifo_status
& WR_CNTS_MSK
) >> WR_CNTS_SHFT
;
350 wr_cnts
= min(wr_cnts
, ctrl
->xfer
.rem_bytes
);
352 words_to_read
= wr_cnts
/ QSPI_BYTES_PER_WORD
;
353 bytes_to_read
= wr_cnts
% QSPI_BYTES_PER_WORD
;
356 word_buf
= ctrl
->xfer
.rx_buf
;
357 ctrl
->xfer
.rem_bytes
-= words_to_read
* QSPI_BYTES_PER_WORD
;
358 ioread32_rep(ctrl
->base
+ RD_FIFO
, word_buf
, words_to_read
);
359 ctrl
->xfer
.rx_buf
= word_buf
+ words_to_read
;
363 byte_buf
= ctrl
->xfer
.rx_buf
;
364 rd_fifo
= readl(ctrl
->base
+ RD_FIFO
);
365 ctrl
->xfer
.rem_bytes
-= bytes_to_read
;
366 for (i
= 0; i
< bytes_to_read
; i
++)
367 *byte_buf
++ = rd_fifo
>> (i
* BITS_PER_BYTE
);
368 ctrl
->xfer
.rx_buf
= byte_buf
;
374 static irqreturn_t
pio_write(struct qcom_qspi
*ctrl
)
376 const void *xfer_buf
= ctrl
->xfer
.tx_buf
;
378 const char *byte_buf
;
379 unsigned int wr_fifo_bytes
;
380 unsigned int wr_fifo_words
;
381 unsigned int wr_size
;
382 unsigned int rem_words
;
384 wr_fifo_bytes
= readl(ctrl
->base
+ PIO_XFER_STATUS
);
385 wr_fifo_bytes
>>= WR_FIFO_BYTES_SHFT
;
387 if (ctrl
->xfer
.rem_bytes
< QSPI_BYTES_PER_WORD
) {
388 /* Process the last 1-3 bytes */
389 wr_size
= min(wr_fifo_bytes
, ctrl
->xfer
.rem_bytes
);
390 ctrl
->xfer
.rem_bytes
-= wr_size
;
395 ctrl
->base
+ PIO_DATAOUT_1B
);
396 ctrl
->xfer
.tx_buf
= byte_buf
;
399 * Process all the whole words; to keep things simple we'll
400 * just wait for the next interrupt to handle the last 1-3
401 * bytes if we don't have an even number of words.
403 rem_words
= ctrl
->xfer
.rem_bytes
/ QSPI_BYTES_PER_WORD
;
404 wr_fifo_words
= wr_fifo_bytes
/ QSPI_BYTES_PER_WORD
;
406 wr_size
= min(rem_words
, wr_fifo_words
);
407 ctrl
->xfer
.rem_bytes
-= wr_size
* QSPI_BYTES_PER_WORD
;
410 iowrite32_rep(ctrl
->base
+ PIO_DATAOUT_4B
, word_buf
, wr_size
);
411 ctrl
->xfer
.tx_buf
= word_buf
+ wr_size
;
418 static irqreturn_t
qcom_qspi_irq(int irq
, void *dev_id
)
421 struct qcom_qspi
*ctrl
= dev_id
;
422 irqreturn_t ret
= IRQ_NONE
;
424 spin_lock(&ctrl
->lock
);
426 int_status
= readl(ctrl
->base
+ MSTR_INT_STATUS
);
427 writel(int_status
, ctrl
->base
+ MSTR_INT_STATUS
);
429 if (ctrl
->xfer
.dir
== QSPI_WRITE
) {
430 if (int_status
& WR_FIFO_EMPTY
)
431 ret
= pio_write(ctrl
);
433 if (int_status
& RESP_FIFO_RDY
)
434 ret
= pio_read(ctrl
);
437 if (int_status
& QSPI_ERR_IRQS
) {
438 if (int_status
& RESP_FIFO_UNDERRUN
)
439 dev_err(ctrl
->dev
, "IRQ error: FIFO underrun\n");
440 if (int_status
& WR_FIFO_OVERRUN
)
441 dev_err(ctrl
->dev
, "IRQ error: FIFO overrun\n");
442 if (int_status
& HRESP_FROM_NOC_ERR
)
443 dev_err(ctrl
->dev
, "IRQ error: NOC response error\n");
447 if (!ctrl
->xfer
.rem_bytes
) {
448 writel(0, ctrl
->base
+ MSTR_INT_EN
);
449 spi_finalize_current_transfer(dev_get_drvdata(ctrl
->dev
));
452 spin_unlock(&ctrl
->lock
);
456 static int qcom_qspi_probe(struct platform_device
*pdev
)
460 struct spi_master
*master
;
461 struct qcom_qspi
*ctrl
;
465 master
= devm_spi_alloc_master(dev
, sizeof(*ctrl
));
469 platform_set_drvdata(pdev
, master
);
471 ctrl
= spi_master_get_devdata(master
);
473 spin_lock_init(&ctrl
->lock
);
475 ctrl
->base
= devm_platform_ioremap_resource(pdev
, 0);
476 if (IS_ERR(ctrl
->base
))
477 return PTR_ERR(ctrl
->base
);
479 ctrl
->clks
= devm_kcalloc(dev
, QSPI_NUM_CLKS
,
480 sizeof(*ctrl
->clks
), GFP_KERNEL
);
484 ctrl
->clks
[QSPI_CLK_CORE
].id
= "core";
485 ctrl
->clks
[QSPI_CLK_IFACE
].id
= "iface";
486 ret
= devm_clk_bulk_get(dev
, QSPI_NUM_CLKS
, ctrl
->clks
);
490 ctrl
->icc_path_cpu_to_qspi
= devm_of_icc_get(dev
, "qspi-config");
491 if (IS_ERR(ctrl
->icc_path_cpu_to_qspi
))
492 return dev_err_probe(dev
, PTR_ERR(ctrl
->icc_path_cpu_to_qspi
),
493 "Failed to get cpu path\n");
495 /* Set BW vote for register access */
496 ret
= icc_set_bw(ctrl
->icc_path_cpu_to_qspi
, Bps_to_icc(1000),
499 dev_err(ctrl
->dev
, "%s: ICC BW voting failed for cpu: %d\n",
504 ret
= icc_disable(ctrl
->icc_path_cpu_to_qspi
);
506 dev_err(ctrl
->dev
, "%s: ICC disable failed for cpu: %d\n",
511 ret
= platform_get_irq(pdev
, 0);
514 ret
= devm_request_irq(dev
, ret
, qcom_qspi_irq
,
515 IRQF_TRIGGER_HIGH
, dev_name(dev
), ctrl
);
517 dev_err(dev
, "Failed to request irq %d\n", ret
);
521 master
->max_speed_hz
= 300000000;
522 master
->num_chipselect
= QSPI_NUM_CS
;
523 master
->bus_num
= -1;
524 master
->dev
.of_node
= pdev
->dev
.of_node
;
525 master
->mode_bits
= SPI_MODE_0
|
526 SPI_TX_DUAL
| SPI_RX_DUAL
|
527 SPI_TX_QUAD
| SPI_RX_QUAD
;
528 master
->flags
= SPI_MASTER_HALF_DUPLEX
;
529 master
->prepare_message
= qcom_qspi_prepare_message
;
530 master
->transfer_one
= qcom_qspi_transfer_one
;
531 master
->handle_err
= qcom_qspi_handle_err
;
532 master
->auto_runtime_pm
= true;
534 ctrl
->opp_table
= dev_pm_opp_set_clkname(&pdev
->dev
, "core");
535 if (IS_ERR(ctrl
->opp_table
))
536 return PTR_ERR(ctrl
->opp_table
);
537 /* OPP table is optional */
538 ret
= dev_pm_opp_of_add_table(&pdev
->dev
);
539 if (ret
&& ret
!= -ENODEV
) {
540 dev_err(&pdev
->dev
, "invalid OPP table in device tree\n");
541 goto exit_probe_put_clkname
;
544 pm_runtime_use_autosuspend(dev
);
545 pm_runtime_set_autosuspend_delay(dev
, 250);
546 pm_runtime_enable(dev
);
548 ret
= spi_register_master(master
);
552 pm_runtime_disable(dev
);
553 dev_pm_opp_of_remove_table(&pdev
->dev
);
555 exit_probe_put_clkname
:
556 dev_pm_opp_put_clkname(ctrl
->opp_table
);
561 static int qcom_qspi_remove(struct platform_device
*pdev
)
563 struct spi_master
*master
= platform_get_drvdata(pdev
);
564 struct qcom_qspi
*ctrl
= spi_master_get_devdata(master
);
566 /* Unregister _before_ disabling pm_runtime() so we stop transfers */
567 spi_unregister_master(master
);
569 pm_runtime_disable(&pdev
->dev
);
570 dev_pm_opp_of_remove_table(&pdev
->dev
);
571 dev_pm_opp_put_clkname(ctrl
->opp_table
);
576 static int __maybe_unused
qcom_qspi_runtime_suspend(struct device
*dev
)
578 struct spi_master
*master
= dev_get_drvdata(dev
);
579 struct qcom_qspi
*ctrl
= spi_master_get_devdata(master
);
582 /* Drop the performance state vote */
583 dev_pm_opp_set_rate(dev
, 0);
584 clk_bulk_disable_unprepare(QSPI_NUM_CLKS
, ctrl
->clks
);
586 ret
= icc_disable(ctrl
->icc_path_cpu_to_qspi
);
588 dev_err_ratelimited(ctrl
->dev
, "%s: ICC disable failed for cpu: %d\n",
596 static int __maybe_unused
qcom_qspi_runtime_resume(struct device
*dev
)
598 struct spi_master
*master
= dev_get_drvdata(dev
);
599 struct qcom_qspi
*ctrl
= spi_master_get_devdata(master
);
602 ret
= icc_enable(ctrl
->icc_path_cpu_to_qspi
);
604 dev_err_ratelimited(ctrl
->dev
, "%s: ICC enable failed for cpu: %d\n",
609 ret
= clk_bulk_prepare_enable(QSPI_NUM_CLKS
, ctrl
->clks
);
613 return dev_pm_opp_set_rate(dev
, ctrl
->last_speed
* 4);
616 static int __maybe_unused
qcom_qspi_suspend(struct device
*dev
)
618 struct spi_master
*master
= dev_get_drvdata(dev
);
621 ret
= spi_master_suspend(master
);
625 ret
= pm_runtime_force_suspend(dev
);
627 spi_master_resume(master
);
632 static int __maybe_unused
qcom_qspi_resume(struct device
*dev
)
634 struct spi_master
*master
= dev_get_drvdata(dev
);
637 ret
= pm_runtime_force_resume(dev
);
641 ret
= spi_master_resume(master
);
643 pm_runtime_force_suspend(dev
);
648 static const struct dev_pm_ops qcom_qspi_dev_pm_ops
= {
649 SET_RUNTIME_PM_OPS(qcom_qspi_runtime_suspend
,
650 qcom_qspi_runtime_resume
, NULL
)
651 SET_SYSTEM_SLEEP_PM_OPS(qcom_qspi_suspend
, qcom_qspi_resume
)
654 static const struct of_device_id qcom_qspi_dt_match
[] = {
655 { .compatible
= "qcom,qspi-v1", },
658 MODULE_DEVICE_TABLE(of
, qcom_qspi_dt_match
);
660 static struct platform_driver qcom_qspi_driver
= {
663 .pm
= &qcom_qspi_dev_pm_ops
,
664 .of_match_table
= qcom_qspi_dt_match
,
666 .probe
= qcom_qspi_probe
,
667 .remove
= qcom_qspi_remove
,
669 module_platform_driver(qcom_qspi_driver
);
671 MODULE_DESCRIPTION("SPI driver for QSPI cores");
672 MODULE_LICENSE("GPL v2");