xref: /openbmc/linux/arch/mips/include/asm/sibyte/sb1250_smbus.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*1a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2384740dcSRalf Baechle /*  *********************************************************************
3384740dcSRalf Baechle     *  SB1250 Board Support Package
4384740dcSRalf Baechle     *
5384740dcSRalf Baechle     *  SMBUS Constants				File: sb1250_smbus.h
6384740dcSRalf Baechle     *
7384740dcSRalf Baechle     *  This module contains constants and macros useful for
8384740dcSRalf Baechle     *  manipulating the SB1250's SMbus devices.
9384740dcSRalf Baechle     *
10384740dcSRalf Baechle     *  SB1250 specification level:  10/21/02
11384740dcSRalf Baechle     *  BCM1280 specification level:  11/24/03
12384740dcSRalf Baechle     *
13384740dcSRalf Baechle     *********************************************************************
14384740dcSRalf Baechle     *
15384740dcSRalf Baechle     *  Copyright 2000,2001,2002,2003
16384740dcSRalf Baechle     *  Broadcom Corporation. All rights reserved.
17384740dcSRalf Baechle     *
18384740dcSRalf Baechle     ********************************************************************* */
19384740dcSRalf Baechle 
20384740dcSRalf Baechle 
21384740dcSRalf Baechle #ifndef _SB1250_SMBUS_H
22384740dcSRalf Baechle #define _SB1250_SMBUS_H
23384740dcSRalf Baechle 
24a1ce3928SDavid Howells #include <asm/sibyte/sb1250_defs.h>
25384740dcSRalf Baechle 
26384740dcSRalf Baechle /*
27384740dcSRalf Baechle  * SMBus Clock Frequency Register (Table 14-2)
28384740dcSRalf Baechle  */
29384740dcSRalf Baechle 
30384740dcSRalf Baechle #define S_SMB_FREQ_DIV		    0
31384740dcSRalf Baechle #define M_SMB_FREQ_DIV		    _SB_MAKEMASK(13, S_SMB_FREQ_DIV)
32384740dcSRalf Baechle #define V_SMB_FREQ_DIV(x)	    _SB_MAKEVALUE(x, S_SMB_FREQ_DIV)
33384740dcSRalf Baechle 
34384740dcSRalf Baechle #define K_SMB_FREQ_400KHZ	    0x1F
35384740dcSRalf Baechle #define K_SMB_FREQ_100KHZ	    0x7D
36384740dcSRalf Baechle #define K_SMB_FREQ_10KHZ	    1250
37384740dcSRalf Baechle 
38384740dcSRalf Baechle #define S_SMB_CMD		    0
39384740dcSRalf Baechle #define M_SMB_CMD		    _SB_MAKEMASK(8, S_SMB_CMD)
40384740dcSRalf Baechle #define V_SMB_CMD(x)		    _SB_MAKEVALUE(x, S_SMB_CMD)
41384740dcSRalf Baechle 
42384740dcSRalf Baechle /*
43384740dcSRalf Baechle  * SMBus control register (Table 14-4)
44384740dcSRalf Baechle  */
45384740dcSRalf Baechle 
46384740dcSRalf Baechle #define M_SMB_ERR_INTR		    _SB_MAKEMASK1(0)
47384740dcSRalf Baechle #define M_SMB_FINISH_INTR	    _SB_MAKEMASK1(1)
48384740dcSRalf Baechle 
49384740dcSRalf Baechle #define S_SMB_DATA_OUT		    4
50384740dcSRalf Baechle #define M_SMB_DATA_OUT		    _SB_MAKEMASK1(S_SMB_DATA_OUT)
51384740dcSRalf Baechle #define V_SMB_DATA_OUT(x)	    _SB_MAKEVALUE(x, S_SMB_DATA_OUT)
52384740dcSRalf Baechle 
53384740dcSRalf Baechle #define M_SMB_DATA_DIR		    _SB_MAKEMASK1(5)
54384740dcSRalf Baechle #define M_SMB_DATA_DIR_OUTPUT	    M_SMB_DATA_DIR
55384740dcSRalf Baechle #define M_SMB_CLK_OUT		    _SB_MAKEMASK1(6)
56384740dcSRalf Baechle #define M_SMB_DIRECT_ENABLE	    _SB_MAKEMASK1(7)
57384740dcSRalf Baechle 
58384740dcSRalf Baechle /*
59384740dcSRalf Baechle  * SMBus status registers (Table 14-5)
60384740dcSRalf Baechle  */
61384740dcSRalf Baechle 
62384740dcSRalf Baechle #define M_SMB_BUSY		    _SB_MAKEMASK1(0)
63384740dcSRalf Baechle #define M_SMB_ERROR		    _SB_MAKEMASK1(1)
64384740dcSRalf Baechle #define M_SMB_ERROR_TYPE	    _SB_MAKEMASK1(2)
65384740dcSRalf Baechle 
66384740dcSRalf Baechle #if SIBYTE_HDR_FEATURE(1250, PASS3) || SIBYTE_HDR_FEATURE(112x, PASS1) || SIBYTE_HDR_FEATURE_CHIP(1480)
67384740dcSRalf Baechle #define S_SMB_SCL_IN		    5
68384740dcSRalf Baechle #define M_SMB_SCL_IN		    _SB_MAKEMASK1(S_SMB_SCL_IN)
69384740dcSRalf Baechle #define V_SMB_SCL_IN(x)		    _SB_MAKEVALUE(x, S_SMB_SCL_IN)
70384740dcSRalf Baechle #define G_SMB_SCL_IN(x)		    _SB_GETVALUE(x, S_SMB_SCL_IN, M_SMB_SCL_IN)
71384740dcSRalf Baechle #endif /* 1250 PASS3 || 112x PASS1 || 1480 */
72384740dcSRalf Baechle 
73384740dcSRalf Baechle #define S_SMB_REF		    6
74384740dcSRalf Baechle #define M_SMB_REF		    _SB_MAKEMASK1(S_SMB_REF)
75384740dcSRalf Baechle #define V_SMB_REF(x)		    _SB_MAKEVALUE(x, S_SMB_REF)
76384740dcSRalf Baechle #define G_SMB_REF(x)		    _SB_GETVALUE(x, S_SMB_REF, M_SMB_REF)
77384740dcSRalf Baechle 
78384740dcSRalf Baechle #define S_SMB_DATA_IN		    7
79384740dcSRalf Baechle #define M_SMB_DATA_IN		    _SB_MAKEMASK1(S_SMB_DATA_IN)
80384740dcSRalf Baechle #define V_SMB_DATA_IN(x)	    _SB_MAKEVALUE(x, S_SMB_DATA_IN)
81384740dcSRalf Baechle #define G_SMB_DATA_IN(x)	    _SB_GETVALUE(x, S_SMB_DATA_IN, M_SMB_DATA_IN)
82384740dcSRalf Baechle 
83384740dcSRalf Baechle /*
84384740dcSRalf Baechle  * SMBus Start/Command registers (Table 14-9)
85384740dcSRalf Baechle  */
86384740dcSRalf Baechle 
87384740dcSRalf Baechle #define S_SMB_ADDR		    0
88384740dcSRalf Baechle #define M_SMB_ADDR		    _SB_MAKEMASK(7, S_SMB_ADDR)
89384740dcSRalf Baechle #define V_SMB_ADDR(x)		    _SB_MAKEVALUE(x, S_SMB_ADDR)
90384740dcSRalf Baechle #define G_SMB_ADDR(x)		    _SB_GETVALUE(x, S_SMB_ADDR, M_SMB_ADDR)
91384740dcSRalf Baechle 
92384740dcSRalf Baechle #define M_SMB_QDATA		    _SB_MAKEMASK1(7)
93384740dcSRalf Baechle 
94384740dcSRalf Baechle #define S_SMB_TT		    8
95384740dcSRalf Baechle #define M_SMB_TT		    _SB_MAKEMASK(3, S_SMB_TT)
96384740dcSRalf Baechle #define V_SMB_TT(x)		    _SB_MAKEVALUE(x, S_SMB_TT)
97384740dcSRalf Baechle #define G_SMB_TT(x)		    _SB_GETVALUE(x, S_SMB_TT, M_SMB_TT)
98384740dcSRalf Baechle 
99384740dcSRalf Baechle #define K_SMB_TT_WR1BYTE	    0
100384740dcSRalf Baechle #define K_SMB_TT_WR2BYTE	    1
101384740dcSRalf Baechle #define K_SMB_TT_WR3BYTE	    2
102384740dcSRalf Baechle #define K_SMB_TT_CMD_RD1BYTE	    3
103384740dcSRalf Baechle #define K_SMB_TT_CMD_RD2BYTE	    4
104384740dcSRalf Baechle #define K_SMB_TT_RD1BYTE	    5
105384740dcSRalf Baechle #define K_SMB_TT_QUICKCMD	    6
106384740dcSRalf Baechle #define K_SMB_TT_EEPROMREAD	    7
107384740dcSRalf Baechle 
108384740dcSRalf Baechle #define V_SMB_TT_WR1BYTE	    V_SMB_TT(K_SMB_TT_WR1BYTE)
109384740dcSRalf Baechle #define V_SMB_TT_WR2BYTE	    V_SMB_TT(K_SMB_TT_WR2BYTE)
110384740dcSRalf Baechle #define V_SMB_TT_WR3BYTE	    V_SMB_TT(K_SMB_TT_WR3BYTE)
111384740dcSRalf Baechle #define V_SMB_TT_CMD_RD1BYTE	    V_SMB_TT(K_SMB_TT_CMD_RD1BYTE)
112384740dcSRalf Baechle #define V_SMB_TT_CMD_RD2BYTE	    V_SMB_TT(K_SMB_TT_CMD_RD2BYTE)
113384740dcSRalf Baechle #define V_SMB_TT_RD1BYTE	    V_SMB_TT(K_SMB_TT_RD1BYTE)
114384740dcSRalf Baechle #define V_SMB_TT_QUICKCMD	    V_SMB_TT(K_SMB_TT_QUICKCMD)
115384740dcSRalf Baechle #define V_SMB_TT_EEPROMREAD	    V_SMB_TT(K_SMB_TT_EEPROMREAD)
116384740dcSRalf Baechle 
117384740dcSRalf Baechle #define M_SMB_PEC		    _SB_MAKEMASK1(15)
118384740dcSRalf Baechle 
119384740dcSRalf Baechle /*
120384740dcSRalf Baechle  * SMBus Data Register (Table 14-6) and SMBus Extra Register (Table 14-7)
121384740dcSRalf Baechle  */
122384740dcSRalf Baechle 
123384740dcSRalf Baechle #define S_SMB_LB		    0
124384740dcSRalf Baechle #define M_SMB_LB		    _SB_MAKEMASK(8, S_SMB_LB)
125384740dcSRalf Baechle #define V_SMB_LB(x)		    _SB_MAKEVALUE(x, S_SMB_LB)
126384740dcSRalf Baechle 
127384740dcSRalf Baechle #define S_SMB_MB		    8
128384740dcSRalf Baechle #define M_SMB_MB		    _SB_MAKEMASK(8, S_SMB_MB)
129384740dcSRalf Baechle #define V_SMB_MB(x)		    _SB_MAKEVALUE(x, S_SMB_MB)
130384740dcSRalf Baechle 
131384740dcSRalf Baechle 
132384740dcSRalf Baechle /*
133384740dcSRalf Baechle  * SMBus Packet Error Check register (Table 14-8)
134384740dcSRalf Baechle  */
135384740dcSRalf Baechle 
136384740dcSRalf Baechle #define S_SPEC_PEC		    0
137384740dcSRalf Baechle #define M_SPEC_PEC		    _SB_MAKEMASK(8, S_SPEC_PEC)
138384740dcSRalf Baechle #define V_SPEC_MB(x)		    _SB_MAKEVALUE(x, S_SPEC_PEC)
139384740dcSRalf Baechle 
140384740dcSRalf Baechle 
141384740dcSRalf Baechle #if SIBYTE_HDR_FEATURE(1250, PASS2) || SIBYTE_HDR_FEATURE(112x, PASS1) || SIBYTE_HDR_FEATURE_CHIP(1480)
142384740dcSRalf Baechle 
143384740dcSRalf Baechle #define S_SMB_CMDH		    8
144384740dcSRalf Baechle #define M_SMB_CMDH		    _SB_MAKEMASK(8, S_SMB_CMDH)
145384740dcSRalf Baechle #define V_SMB_CMDH(x)		    _SB_MAKEVALUE(x, S_SMB_CMDH)
146384740dcSRalf Baechle 
147384740dcSRalf Baechle #define M_SMB_EXTEND		    _SB_MAKEMASK1(14)
148384740dcSRalf Baechle 
149384740dcSRalf Baechle #define S_SMB_DFMT		    8
150384740dcSRalf Baechle #define M_SMB_DFMT		    _SB_MAKEMASK(3, S_SMB_DFMT)
151384740dcSRalf Baechle #define V_SMB_DFMT(x)		    _SB_MAKEVALUE(x, S_SMB_DFMT)
152384740dcSRalf Baechle #define G_SMB_DFMT(x)		    _SB_GETVALUE(x, S_SMB_DFMT, M_SMB_DFMT)
153384740dcSRalf Baechle 
154384740dcSRalf Baechle #define K_SMB_DFMT_1BYTE	    0
155384740dcSRalf Baechle #define K_SMB_DFMT_2BYTE	    1
156384740dcSRalf Baechle #define K_SMB_DFMT_3BYTE	    2
157384740dcSRalf Baechle #define K_SMB_DFMT_4BYTE	    3
158384740dcSRalf Baechle #define K_SMB_DFMT_NODATA	    4
159384740dcSRalf Baechle #define K_SMB_DFMT_CMD4BYTE	    5
160384740dcSRalf Baechle #define K_SMB_DFMT_CMD5BYTE	    6
161384740dcSRalf Baechle #define K_SMB_DFMT_RESERVED	    7
162384740dcSRalf Baechle 
163384740dcSRalf Baechle #define V_SMB_DFMT_1BYTE	    V_SMB_DFMT(K_SMB_DFMT_1BYTE)
164384740dcSRalf Baechle #define V_SMB_DFMT_2BYTE	    V_SMB_DFMT(K_SMB_DFMT_2BYTE)
165384740dcSRalf Baechle #define V_SMB_DFMT_3BYTE	    V_SMB_DFMT(K_SMB_DFMT_3BYTE)
166384740dcSRalf Baechle #define V_SMB_DFMT_4BYTE	    V_SMB_DFMT(K_SMB_DFMT_4BYTE)
167384740dcSRalf Baechle #define V_SMB_DFMT_NODATA	    V_SMB_DFMT(K_SMB_DFMT_NODATA)
168384740dcSRalf Baechle #define V_SMB_DFMT_CMD4BYTE	    V_SMB_DFMT(K_SMB_DFMT_CMD4BYTE)
169384740dcSRalf Baechle #define V_SMB_DFMT_CMD5BYTE	    V_SMB_DFMT(K_SMB_DFMT_CMD5BYTE)
170384740dcSRalf Baechle #define V_SMB_DFMT_RESERVED	    V_SMB_DFMT(K_SMB_DFMT_RESERVED)
171384740dcSRalf Baechle 
172384740dcSRalf Baechle #define S_SMB_AFMT		    11
173384740dcSRalf Baechle #define M_SMB_AFMT		    _SB_MAKEMASK(2, S_SMB_AFMT)
174384740dcSRalf Baechle #define V_SMB_AFMT(x)		    _SB_MAKEVALUE(x, S_SMB_AFMT)
175384740dcSRalf Baechle #define G_SMB_AFMT(x)		    _SB_GETVALUE(x, S_SMB_AFMT, M_SMB_AFMT)
176384740dcSRalf Baechle 
177384740dcSRalf Baechle #define K_SMB_AFMT_NONE		    0
178384740dcSRalf Baechle #define K_SMB_AFMT_ADDR		    1
179384740dcSRalf Baechle #define K_SMB_AFMT_ADDR_CMD1BYTE    2
180384740dcSRalf Baechle #define K_SMB_AFMT_ADDR_CMD2BYTE    3
181384740dcSRalf Baechle 
182384740dcSRalf Baechle #define V_SMB_AFMT_NONE		    V_SMB_AFMT(K_SMB_AFMT_NONE)
183384740dcSRalf Baechle #define V_SMB_AFMT_ADDR		    V_SMB_AFMT(K_SMB_AFMT_ADDR)
184384740dcSRalf Baechle #define V_SMB_AFMT_ADDR_CMD1BYTE    V_SMB_AFMT(K_SMB_AFMT_ADDR_CMD1BYTE)
185384740dcSRalf Baechle #define V_SMB_AFMT_ADDR_CMD2BYTE    V_SMB_AFMT(K_SMB_AFMT_ADDR_CMD2BYTE)
186384740dcSRalf Baechle 
187384740dcSRalf Baechle #define M_SMB_DIR		    _SB_MAKEMASK1(13)
188384740dcSRalf Baechle 
189384740dcSRalf Baechle #endif /* 1250 PASS2 || 112x PASS1 || 1480 */
190384740dcSRalf Baechle 
191384740dcSRalf Baechle #endif
192