summaryrefslogtreecommitdiff
path: root/drivers/fsi/i2c/iic-boe.h
blob: 81b778334002e8c73a3d1d6b17171bb46979d84c (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
174
175
176
177
178
179
180
/*
 *   Copyright (c) International Business Machines Corp., 2006
 *
 *   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.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program;  if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

/************************ BOE Engine offsets *********************************/
#define IIC_BOE_FIFO 		0x00
#define IIC_BOE_CMD		0x01
#define IIC_BOE_MODE		0x02
#define IIC_BOE_WATER_MARK	0x03
#define IIC_BOE_INT_MASK	0x04
#define IIC_BOE_INT_COND	0x05
#define IIC_BOE_OR_INT_MASK	0x05
#define IIC_BOE_INTS		0x06
#define IIC_BOE_AND_INT_MASK	0x06
#define IIC_BOE_STAT		0x07
#define IIC_BOE_RESET_I2C	0x07
#define IIC_BOE_ESTAT		0x08
#define IIC_BOE_RESET_ERR	0x08
#define IIC_BOE_RESID_LEN	0x09
#define IIC_BOE_SET_SCL		0x09
#define IIC_BOE_RESERVED        0x0a
#define IIC_BOE_PORTBUSY        0x0a
#define IIC_BOE_RESET_SCL	0x0b
#define IIC_BOE_SET_SDA		0x0c
#define IIC_BOE_RESET_SDA	0x0d
#define IIC_BOE_MAX_OFFSET	IIC_BOE_RESET_SDA

/************************ BOE Bit Definitions ********************************/

#define IIC_BOE_MAX_BUSES	16
#define IIC_BOE_MAX_FIFO_SIZE	32
#define IIC_BOE_DFLT_FIFO_SIZE	8

/* cmd register bits */
#define IIC_BOE_WITH_START	0x80000000
#define IIC_BOE_WITH_ADDR	0x40000000
#define IIC_BOE_RD_CONT		0x20000000
#define IIC_BOE_WITH_STOP	0x10000000
#define IIC_BOE_FORCE_LAUNCH	0x08000000
#define IIC_BOE_ADDR		0x00fe0000
#define IIC_BOE_ADDR_SHIFT	16
#define IIC_BOE_READ		0x00010000
#define IIC_BOE_XFR_LEN		0x0000ffff

#define IIC_BOE_MK_ADDR(addr) ((addr << IIC_BOE_ADDR_SHIFT) & IIC_BOE_ADDR)
#define IIC_BOE_GET_ADDR(r) ((r & IIC_BOE_ADDR) >> IIC_BOE_ADDR_SHIFT)

/* mode register bits */
#define IIC_BOE_CLKDIV_LO	0xff000000
#define IIC_BOE_CLKDIV_LO_SHIFT 24
#define IIC_BOE_PORT		0x00ff0000
#define IIC_BOE_PORT_SHIFT	16
#define IIC_BOE_MODE_RSVD	0x0000ff00
#define IIC_BOE_CLKDIV_HI	0x000000f0
#define IIC_BOE_CLKDIV_HI_SHIFT 4
#define IIC_BOE_ENHANCED	0x00000008
#define IIC_BOE_DIAG		0x00000004
#define IIC_BOE_PACE_ALLOW	0x00000002
#define IIC_BOE_WRAP		0x00000001

#define IIC_BOE_GET_PORT(r) ((r & IIC_BOE_PORT) >> IIC_BOE_PORT_SHIFT)
#define IIC_BOE_MK_PORT(p) ((p << IIC_BOE_PORT_SHIFT) & IIC_BOE_PORT)

#define IIC_BOE_MK_CLKDIV(val) \
((val << IIC_BOE_CLKDIV_LO_SHIFT) | \
((val >> IIC_BOE_CLKDIV_HI_SHIFT) & IIC_BOE_CLKDIV_HI))

#define IIC_BOE_GET_CLKDIV(r) \
(((r & IIC_BOE_CLKDIV_LO) >> IIC_BOE_CLKDIV_LO_SHIFT) | \
((r & IIC_BOE_CLKDIV_HI) << IIC_BOE_CLKDIV_HI_SHIFT))

/* Z7 plus mode register */
#define IIC_BOE_Z7_CLKDIV	0xffff0000
#define IIC_BOE_Z7_CLKDIV_SHIFT	16
#define IIC_BOE_Z7_PORT		0x0000fc00
#define IIC_BOE_Z7_PORT_SHIFT	10

#define IIC_BOE_Z7_GET_PORT(r) ((r & IIC_BOE_Z7_PORT) >> IIC_BOE_Z7_PORT_SHIFT)
#define IIC_BOE_Z7_MK_PORT(p) ((p << IIC_BOE_Z7_PORT_SHIFT) & IIC_BOE_Z7_PORT)

#define IIC_BOE_Z7_MK_CLKDIV(val) ((val << IIC_BOE_Z7_CLKDIV_SHIFT))
#define IIC_BOE_Z7_GET_CLKDIV(r) ((r & IIC_BOE_Z7_CLKDIV) >> IIC_BOE_Z7_CLKDIV_SHIFT)

/* water mark register bits */
#define IIC_BOE_HI_MRK		0x0000ff00
#define IIC_BOE_HI_MRK_SHIFT	8
#define IIC_BOE_LO_MRK		0x000000ff
#define IIC_BOE_LO_MRK_SHIFT	0
#define IIC_BOE_GET_LO_MRK(e) ((e->regs[IIC_BOE_WATER_MARK] & \
			        IIC_BOE_LO_MRK) >> \
                               IIC_BOE_LO_MRK_SHIFT)
#define IIC_BOE_MK_WATER_MRK(hi, lo)\
			((((hi) << IIC_BOE_HI_MRK_SHIFT) & IIC_BOE_HI_MRK) |\
			(((lo) << IIC_BOE_LO_MRK_SHIFT) & IIC_BOE_LO_MRK))
#define IIC_BOE_GET_HI_MRK(e) ((e->regs[IIC_BOE_WATER_MARK] & \
			        IIC_BOE_HI_MRK) >> \
                               IIC_BOE_HI_MRK_SHIFT)

/* interrupt, interrupt mask, interrupt condition bits */
#define IIC_BOE_INVALID_CMD	0x00008000
#define IIC_BOE_PARITY		0x00004000
#define IIC_BOE_BE_OVERRUN	0x00002000
#define IIC_BOE_BE_ACCESS	0x00001000
#define IIC_BOE_LOST_ARB	0x00000800
#define IIC_BOE_NACK		0x00000400
#define IIC_BOE_DAT_REQ		0x00000200
#define IIC_BOE_CMD_COMP	0x00000100
#define IIC_BOE_STOP_ERR	0x00000080
#define IIC_BOE_BUSY		0x00000040
#define IIC_BOE_IDLE		0x00000020
#define IIC_BOE_ALL_INTS	0x0000ffff
#define IIC_BOE_FE_ERRS		(IIC_BOE_LOST_ARB | IIC_BOE_NACK | \
				 IIC_BOE_STOP_ERR)
#define IIC_BOE_BE_ERRS		(IIC_BOE_INVALID_CMD | IIC_BOE_PARITY | \
				 IIC_BOE_BE_OVERRUN | IIC_BOE_BE_ACCESS)
#define IIC_BOE_ANY_ERR (IIC_BOE_BE_ERRS | IIC_BOE_FE_ERRS)

/* status register bits */
#define IIC_BOE_S_INVALID_CMD     0x80000000
#define IIC_BOE_S_PARITY          0x40000000
#define IIC_BOE_S_BE_OVERRUN      0x20000000
#define IIC_BOE_S_BE_ACCESS       0x10000000
#define IIC_BOE_S_LOST_ARB        0x08000000
#define IIC_BOE_S_NACK            0x04000000
#define IIC_BOE_S_DAT_REQ         0x02000000
#define IIC_BOE_S_CMD_COMP        0x01000000
#define IIC_BOE_S_STOP_ERR        0x00800000
#define IIC_BOE_STAT_SHIFT	  16
#define IIC_BOE_MAX_PORT	  0x000f0000
#define IIC_BOE_MAX_PORT_SHIFT	  16
#define IIC_BOE_ANY_INT		  0x00008000
#define IIC_BOE_SCL_IN		  0x00000800
#define IIC_BOE_SDA_IN		  0x00000400
#define IIC_BOE_PORT_BUSY	  0x00000200
#define IIC_BOE_SELF_BUSY	  0x00000100
#define IIC_BOE_FIFO_COUNT	  0x000000ff

#define IIC_BOE_S_BE_ERRS (IIC_BOE_BE_ERRS << IIC_BOE_STAT_SHIFT)
#define IIC_BOE_S_FE_ERRS (IIC_BOE_FE_ERRS << IIC_BOE_STAT_SHIFT)
#define IIC_BOE_S_ANY_ERR (IIC_BOE_ANY_ERR << IIC_BOE_STAT_SHIFT)

/* extended status register bits */
#define IIC_BOE_FIFO_SZ		0xff000000
#define IIC_BOE_FIFO_SZ_SHIFT	24
#define IIC_BOE_SCL_IN_SYN	0x00008000
#define IIC_BOE_SDA_IN_SYN	0x00004000
#define IIC_BOE_S_SCL		0x00002000
#define IIC_BOE_S_SDA		0x00001000
#define IIC_BOE_M_SCL		0x00000800
#define IIC_BOE_M_SDA		0x00000400
#define IIC_BOE_HI_WATER	0x00000200
#define IIC_BOE_LO_WATER	0x00000100
#define IIC_BOE_ES_PORT_BUSY	0x00000080
#define IIC_BOE_ES_SELF_BUSY	0x00000040
#define IIC_BOE_VERSION		0x0000001f

/* residual length register bits */
#define IIC_BOE_FE_LEN		0xffff0000
#define IIC_BOE_FE_LEN_SHIFT	16
#define IIC_BOE_BE_LEN		0x0000ffff
#define IIC_BOE_GET_BE(r)	(r & IIC_BOE_BE_LEN)
#define IIC_BOE_GET_FE(r) (r >> IIC_BOE_FE_LEN_SHIFT)

/* Murano/Centaur port busy register */
#define IIC_BOE_PORT_BUSY_REST  0x80000000