]>
Commit | Line | Data |
---|---|---|
cb849fc5 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
fa236a7e KD |
2 | /* |
3 | * Copyright 2016 Broadcom | |
fa236a7e KD |
4 | */ |
5 | ||
6 | #ifndef __SPI_BCM_QSPI_H__ | |
7 | #define __SPI_BCM_QSPI_H__ | |
8 | ||
9 | #include <linux/types.h> | |
10 | #include <linux/io.h> | |
11 | ||
4e3b2d23 KD |
12 | /* BSPI interrupt masks */ |
13 | #define INTR_BSPI_LR_OVERREAD_MASK BIT(4) | |
14 | #define INTR_BSPI_LR_SESSION_DONE_MASK BIT(3) | |
15 | #define INTR_BSPI_LR_IMPATIENT_MASK BIT(2) | |
16 | #define INTR_BSPI_LR_SESSION_ABORTED_MASK BIT(1) | |
17 | #define INTR_BSPI_LR_FULLNESS_REACHED_MASK BIT(0) | |
18 | ||
19 | #define BSPI_LR_INTERRUPTS_DATA \ | |
20 | (INTR_BSPI_LR_SESSION_DONE_MASK | \ | |
21 | INTR_BSPI_LR_FULLNESS_REACHED_MASK) | |
22 | ||
23 | #define BSPI_LR_INTERRUPTS_ERROR \ | |
24 | (INTR_BSPI_LR_OVERREAD_MASK | \ | |
25 | INTR_BSPI_LR_IMPATIENT_MASK | \ | |
26 | INTR_BSPI_LR_SESSION_ABORTED_MASK) | |
27 | ||
28 | #define BSPI_LR_INTERRUPTS_ALL \ | |
29 | (BSPI_LR_INTERRUPTS_ERROR | \ | |
30 | BSPI_LR_INTERRUPTS_DATA) | |
31 | ||
fa236a7e KD |
32 | /* MSPI Interrupt masks */ |
33 | #define INTR_MSPI_HALTED_MASK BIT(6) | |
34 | #define INTR_MSPI_DONE_MASK BIT(5) | |
35 | ||
36 | #define MSPI_INTERRUPTS_ALL \ | |
37 | (INTR_MSPI_DONE_MASK | \ | |
38 | INTR_MSPI_HALTED_MASK) | |
39 | ||
cc20a386 KD |
40 | #define QSPI_INTERRUPTS_ALL \ |
41 | (MSPI_INTERRUPTS_ALL | \ | |
42 | BSPI_LR_INTERRUPTS_ALL) | |
43 | ||
fa236a7e KD |
44 | struct platform_device; |
45 | struct dev_pm_ops; | |
46 | ||
cc20a386 KD |
47 | enum { |
48 | MSPI_DONE = 0x1, | |
49 | BSPI_DONE = 0x2, | |
50 | BSPI_ERR = 0x4, | |
51 | MSPI_BSPI_DONE = 0x7 | |
52 | }; | |
53 | ||
54 | struct bcm_qspi_soc_intc { | |
55 | void (*bcm_qspi_int_ack)(struct bcm_qspi_soc_intc *soc_intc, int type); | |
56 | void (*bcm_qspi_int_set)(struct bcm_qspi_soc_intc *soc_intc, int type, | |
57 | bool en); | |
58 | u32 (*bcm_qspi_get_int_status)(struct bcm_qspi_soc_intc *soc_intc); | |
59 | }; | |
fa236a7e KD |
60 | |
61 | /* Read controller register*/ | |
62 | static inline u32 bcm_qspi_readl(bool be, void __iomem *addr) | |
63 | { | |
64 | if (be) | |
65 | return ioread32be(addr); | |
66 | else | |
67 | return readl_relaxed(addr); | |
68 | } | |
69 | ||
70 | /* Write controller register*/ | |
71 | static inline void bcm_qspi_writel(bool be, | |
72 | unsigned int data, void __iomem *addr) | |
73 | { | |
74 | if (be) | |
75 | iowrite32be(data, addr); | |
76 | else | |
77 | writel_relaxed(data, addr); | |
78 | } | |
79 | ||
cc20a386 KD |
80 | static inline u32 get_qspi_mask(int type) |
81 | { | |
82 | switch (type) { | |
83 | case MSPI_DONE: | |
84 | return INTR_MSPI_DONE_MASK; | |
85 | case BSPI_DONE: | |
86 | return BSPI_LR_INTERRUPTS_ALL; | |
87 | case MSPI_BSPI_DONE: | |
88 | return QSPI_INTERRUPTS_ALL; | |
89 | case BSPI_ERR: | |
90 | return BSPI_LR_INTERRUPTS_ERROR; | |
91 | } | |
92 | ||
93 | return 0; | |
94 | } | |
95 | ||
fa236a7e KD |
96 | /* The common driver functions to be called by the SoC platform driver */ |
97 | int bcm_qspi_probe(struct platform_device *pdev, | |
98 | struct bcm_qspi_soc_intc *soc_intc); | |
666ea0ad | 99 | void bcm_qspi_remove(struct platform_device *pdev); |
fa236a7e KD |
100 | |
101 | /* pm_ops used by the SoC platform driver called on PM suspend/resume */ | |
102 | extern const struct dev_pm_ops bcm_qspi_pm_ops; | |
103 | ||
104 | #endif /* __SPI_BCM_QSPI_H__ */ |