blob: 0441a0f6fde595b4d8432a549df9a41de1f66b2f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
/*
* Copyright 2012 Freescale Semiconductor, Inc.
*
* This file is based on mcfqspi.h
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef SPI_MVF_H_
#define SPI_MVF_H_
struct spi_mvf_chip {
u8 mode;
u8 bits_per_word;
u16 void_write_data;
/* Only used in master mode */
u8 dbr; /* Double baud rate */
u8 pbr; /* Baud rate prescaler */
u8 br; /* Baud rate scaler */
u8 pcssck; /* PCS to SCK delay prescaler */
u8 pasc; /* After SCK delay prescaler */
u8 pdt; /* Delay after transfer prescaler */
u8 cssck; /* PCS to SCK delay scaler */
u8 asc; /* After SCK delay scaler */
u8 dt; /* Delay after transfer scaler */
};
struct spi_mvf_master {
u16 bus_num;
int *chipselect;
int num_chipselect;
void (*cs_control)(u8 cs, u8 command);
};
#define SPI_MCR 0x00
#define SPI_TCR 0x08
#define SPI_CTAR(x) (0x0c + (x * 4))
#define SPI_CTAR_FMSZ(x) (((x) & 0x0000000f) << 27)
#define SPI_CTAR_CPOL(x) ((x) << 26)
#define SPI_CTAR_CPHA(x) ((x) << 25)
#define SPI_CTAR_PCSSCR(x) (((x) & 0x00000003) << 22)
#define SPI_CTAR_PASC(x) (((x) & 0x00000003) << 20)
#define SPI_CTAR_PDT(x) (((x) & 0x00000003) << 18)
#define SPI_CTAR_PBR(x) (((x) & 0x00000003) << 16)
#define SPI_CTAR_CSSCK(x) (((x) & 0x0000000f) << 12)
#define SPI_CTAR_ASC(x) (((x) & 0x0000000f) << 8)
#define SPI_CTAR_DT(x) (((x) & 0x0000000f) << 4)
#define SPI_CTAR_BR(x) ((x) & 0x0000000f)
#define SPI_CTAR0_SLAVE 0x0c
#define SPI_SR 0x2c
#define SPI_SR_EOQF 0x10000000
#define SPI_RSER 0x30
#define SPI_RSER_EOQFE 0x10000000
#define SPI_PUSHR 0x34
#define SPI_PUSHR_CONT (1 << 31)
#define SPI_PUSHR_CTAS(x) (((x) & 0x00000007) << 28)
#define SPI_PUSHR_EOQ (1 << 27)
#define SPI_PUSHR_CTCNT (1 << 26)
#define SPI_PUSHR_PCS(x) (((1 << x) & 0x0000003f) << 16)
#define SPI_PUSHR_TXDATA(x) ((x) & 0x0000ffff)
#define SPI_PUSHR_SLAVE 0x34
#define SPI_POPR 0x38
#define SPI_POPR_RXDATA(x) ((x) & 0x0000ffff)
#define SPI_TXFR0 0x3c
#define SPI_TXFR1 0x40
#define SPI_TXFR2 0x44
#define SPI_TXFR3 0x48
#define SPI_RXFR0 0x7c
#define SPI_RXFR1 0x80
#define SPI_RXFR2 0x84
#define SPI_RXFR3 0x88
#define SPI_FRAME_BITS SPI_CTAR_FMSZ(0xf)
#define SPI_FRAME_BITS_16 SPI_CTAR_FMSZ(0xf)
#define SPI_FRAME_BITS_8 SPI_CTAR_FMSZ(0x7)
#define SPI_CS_INIT 0x01
#define SPI_CS_ASSERT 0x02
#define SPI_CS_DROP 0x04
/* Quad SPI */
#define INT_DLPFIE (0x1 << 31)
#define INT_TBFIE (0x1 << 27)
#define INT_TBUIE (0x1 << 26)
#define INT_ILLINIE (0x1 << 23)
#define INT_RBOIE (0x1 << 17)
#define INT_RBDIE (0x1 << 16)
#define INT_ABSEIE (0x1 << 15)
#define INT_ABOIE (0x1 << 12)
#define INT_IUEIE (0x1 << 11)
#define INT_IPAEIE (0x1 << 7)
#define INT_IPIEIE (0x1 << 6)
#define INT_IPGEIE (0x1 << 4)
#define INT_TFIE (0x1 << 0)
#define QUADSPI_MCR 0x00
#define QUADSPI_IPCR 0x08
#define QUADSPI_FLSHCR 0x0c
#define QUADSPI_BUF0CR 0x10
#define QUADSPI_BUF1CR 0x14
#define QUADSPI_BUF2CR 0x18
#define QUADSPI_BUF3CR 0x1c
#define QUADSPI_BFGENCR 0x20
#define QUADSPI_SOCCR 0x24
#define QUADSPI_BUF0IND 0x30
#define QUADSPI_BUF1IND 0x34
#define QUADSPI_BUF2IND 0x38
#define QUADSPI_SFAR 0x100
#define QUADSPI_SMPR 0x108
#define QUADSPI_RBSR 0x10c
#define QUADSPI_RBCT 0x110
#define QUADSPI_TBSR 0x150
#define QUADSPI_TBDR 0x154
#define QUADSPI_SR 0x15c
#define QUADSPI_FR 0x160
#define QUADSPI_RSER 0x164
#define QUADSPI_SPNDST 0x168
#define QUADSPI_SPTRCLR 0x16c
#define QUADSPI_SFA1AD 0x180
#define QUADSPI_SFA2AD 0x184
#define QUADSPI_SFB1AD 0x188
#define QUADSPI_SFB2AD 0x18c
#define QUADSPI_RBDR 0x200
#define QUADSPI_LUTKEY 0x300
#define QUADSPI_LCKCR 0x304
#define QUADSPI_LUT(x) (0x310 + (x) * 4)
#define OPRND0(x) (((x) & 0xff) << 0)
#define PAD0(x) (((x) & 0x3) << 8)
#define INSTR0(x) (((x) & 0x3f) << 10)
#define OPRND1(x) (((x) & 0xff) << 16)
#define PAD1(x) (((x) & 0x3) << 24)
#define INSTR1(x) (((x) & 0x3f) << 26)
#define SEQU_CMD 0x1
#define SEQU_ADDR 0x2
#define SEQU_DUMMY 0x3
#define SEQU_MODE 0x4
#define SEQU_MODE2 0x5
#define SEQU_MODE4 0x6
#define SEQU_READ 0x7
#define SEQU_WRITE 0x8
#define SEQU_JMP_ON_CS 0x9
#define SEQU_ADDR_DDR 0xa
#define SEQU_MODE_DDR 0xb
#define SEQU_MODE2_DDR 0xc
#define SEQU_MODE4_DDR 0xd
#define SEQU_READ_DDR 0xe
#define SEQU_WRITE_DDR 0xf
#define SEQU_DATA_LEARN 0x10
#define SEQU_STOP 0x0
#endif /* SPI_MVF_H_ */
|