1
2#include <linux/bitops.h>
3#include <linux/serial_core.h>
4#include <linux/io.h>
5
6#define SCI_MAJOR 204
7#define SCI_MINOR_START 8
8
9
10
11
12
13
14enum {
15 SCSMR,
16 SCBRR,
17 SCSCR,
18 SCxSR,
19 SCFCR,
20 SCFDR,
21 SCxTDR,
22 SCxRDR,
23 SCLSR,
24 SCTFDR,
25 SCRFDR,
26 SCSPTR,
27 HSSRR,
28 SCPCR,
29 SCPDR,
30 SCDL,
31 SCCKS,
32 HSRTRGR,
33 HSTTRGR,
34
35 SCIx_NR_REGS,
36};
37
38
39
40#define SCSMR_C_A BIT(7)
41#define SCSMR_CSYNC BIT(7)
42#define SCSMR_ASYNC 0
43#define SCSMR_CHR BIT(6)
44#define SCSMR_PE BIT(5)
45#define SCSMR_ODD BIT(4)
46#define SCSMR_STOP BIT(3)
47#define SCSMR_CKS 0x0003
48
49
50#define SCSMR_CKEDG BIT(12)
51#define SCSMR_SRC_MASK 0x0700
52#define SCSMR_SRC_16 0x0000
53#define SCSMR_SRC_5 0x0100
54#define SCSMR_SRC_7 0x0200
55#define SCSMR_SRC_11 0x0300
56#define SCSMR_SRC_13 0x0400
57#define SCSMR_SRC_17 0x0500
58#define SCSMR_SRC_19 0x0600
59#define SCSMR_SRC_27 0x0700
60
61
62#define SCSCR_TDRQE BIT(15)
63#define SCSCR_RDRQE BIT(14)
64
65
66#define HSSCR_TOT_SHIFT 14
67
68
69#define SCI_TDRE BIT(7)
70#define SCI_RDRF BIT(6)
71#define SCI_ORER BIT(5)
72#define SCI_FER BIT(4)
73#define SCI_PER BIT(3)
74#define SCI_TEND BIT(2)
75#define SCI_RESERVED 0x03
76
77#define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER)
78
79#define SCI_RDxF_CLEAR (u32)(~(SCI_RESERVED | SCI_RDRF))
80#define SCI_ERROR_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
81#define SCI_TDxE_CLEAR (u32)(~(SCI_RESERVED | SCI_TEND | SCI_TDRE))
82#define SCI_BREAK_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
83
84
85#define SCIF_ER BIT(7)
86#define SCIF_TEND BIT(6)
87#define SCIF_TDFE BIT(5)
88#define SCIF_BRK BIT(4)
89#define SCIF_FER BIT(3)
90#define SCIF_PER BIT(2)
91#define SCIF_RDF BIT(1)
92#define SCIF_DR BIT(0)
93
94#define SCIF_PERC 0xf000
95#define SCIF_FERC 0x0f00
96
97#define SCIFA_ORER BIT(9)
98
99#define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_BRK | SCIF_ER)
100
101#define SCIF_RDxF_CLEAR (u32)(~(SCIF_DR | SCIF_RDF))
102#define SCIF_ERROR_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_ER))
103#define SCIF_TDxE_CLEAR (u32)(~(SCIF_TDFE))
104#define SCIF_BREAK_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_BRK))
105
106
107#define SCFCR_RTRG1 BIT(7)
108#define SCFCR_RTRG0 BIT(6)
109#define SCFCR_TTRG1 BIT(5)
110#define SCFCR_TTRG0 BIT(4)
111#define SCFCR_MCE BIT(3)
112#define SCFCR_TFRST BIT(2)
113#define SCFCR_RFRST BIT(1)
114#define SCFCR_LOOP BIT(0)
115
116
117#define SCLSR_TO BIT(2)
118#define SCLSR_ORER BIT(0)
119
120
121#define SCSPTR_RTSIO BIT(7)
122#define SCSPTR_RTSDT BIT(6)
123#define SCSPTR_CTSIO BIT(5)
124#define SCSPTR_CTSDT BIT(4)
125#define SCSPTR_SCKIO BIT(3)
126#define SCSPTR_SCKDT BIT(2)
127#define SCSPTR_SPB2IO BIT(1)
128#define SCSPTR_SPB2DT BIT(0)
129
130
131#define HSCIF_SRE BIT(15)
132#define HSCIF_SRDE BIT(14)
133
134#define HSCIF_SRHP_SHIFT 8
135#define HSCIF_SRHP_MASK 0x0f00
136
137
138#define SCPCR_RTSC BIT(4)
139#define SCPCR_CTSC BIT(3)
140#define SCPCR_SCKC BIT(2)
141#define SCPCR_RXDC BIT(1)
142#define SCPCR_TXDC BIT(0)
143
144
145#define SCPDR_RTSD BIT(4)
146#define SCPDR_CTSD BIT(3)
147#define SCPDR_SCKD BIT(2)
148#define SCPDR_RXDD BIT(1)
149#define SCPDR_TXDD BIT(0)
150
151
152
153
154
155
156
157#define SCCKS_CKS BIT(15)
158#define SCCKS_XIN BIT(14)
159
160#define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
161#define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_DR | SCIF_RDF)
162#define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE)
163#define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
164#define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
165#define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
166
167#define SCxSR_ERRORS(port) (to_sci_port(port)->params->error_mask)
168
169#define SCxSR_RDxF_CLEAR(port) \
170 (((port)->type == PORT_SCI) ? SCI_RDxF_CLEAR : SCIF_RDxF_CLEAR)
171#define SCxSR_ERROR_CLEAR(port) \
172 (to_sci_port(port)->params->error_clear)
173#define SCxSR_TDxE_CLEAR(port) \
174 (((port)->type == PORT_SCI) ? SCI_TDxE_CLEAR : SCIF_TDxE_CLEAR)
175#define SCxSR_BREAK_CLEAR(port) \
176 (((port)->type == PORT_SCI) ? SCI_BREAK_CLEAR : SCIF_BREAK_CLEAR)
177