]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/mips/atheros/ar71xxreg.h
[ar71xx] remove dead code!
[FreeBSD/FreeBSD.git] / sys / mips / atheros / ar71xxreg.h
1 /*-
2  * Copyright (c) 2009 Oleksandr Tymoshenko
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26
27 /* $FreeBSD$ */
28
29 #ifndef _AR71XX_REG_H_
30 #define _AR71XX_REG_H_
31
32 /* PCI region */
33 #define AR71XX_PCI_MEM_BASE             0x10000000
34 /* 
35  * PCI mem windows is 0x08000000 bytes long but we exclude control 
36  * region from the resource manager
37  */
38 #define AR71XX_PCI_MEM_SIZE             0x07000000
39 #define AR71XX_PCI_IRQ_START            0
40 #define AR71XX_PCI_IRQ_END              2
41 #define AR71XX_PCI_NIRQS                3
42 /*
43  * PCI devices slots are starting from this number
44  */
45 #define AR71XX_PCI_BASE_SLOT            17
46
47 /* PCI config registers */
48 #define AR71XX_PCI_LCONF_CMD            0x17010000
49 #define                 PCI_LCONF_CMD_READ      0x00000000
50 #define                 PCI_LCONF_CMD_WRITE     0x00010000
51 #define AR71XX_PCI_LCONF_WRITE_DATA     0x17010004
52 #define AR71XX_PCI_LCONF_READ_DATA      0x17010008
53 #define AR71XX_PCI_CONF_ADDR            0x1701000C
54 #define AR71XX_PCI_CONF_CMD             0x17010010
55 #define                 PCI_CONF_CMD_READ       0x0000000A
56 #define                 PCI_CONF_CMD_WRITE      0x0000000B
57 #define AR71XX_PCI_CONF_WRITE_DATA      0x17010014
58 #define AR71XX_PCI_CONF_READ_DATA       0x17010018
59 #define AR71XX_PCI_ERROR                0x1701001C
60 #define AR71XX_PCI_ERROR_ADDR           0x17010020
61 #define AR71XX_PCI_AHB_ERROR            0x17010024
62 #define AR71XX_PCI_AHB_ERROR_ADDR       0x17010028
63
64 /* APB region */
65 /*
66  * Size is not really true actual APB window size is 
67  * 0x01000000 but it should handle OHCI memory as well
68  * because this controller's interrupt is routed through 
69  * APB. 
70  */
71 #define AR71XX_APB_BASE         0x18000000
72 #define AR71XX_APB_SIZE         0x06000000
73
74 /* DDR registers */
75 #define AR71XX_DDR_CONFIG               0x18000000
76 #define AR71XX_DDR_CONFIG2              0x18000004
77 #define AR71XX_DDR_MODE_REGISTER        0x18000008
78 #define AR71XX_DDR_EXT_MODE_REGISTER    0x1800000C
79 #define AR71XX_DDR_CONTROL              0x18000010
80 #define AR71XX_DDR_REFRESH              0x18000014
81 #define AR71XX_DDR_RD_DATA_THIS_CYCLE   0x18000018
82 #define AR71XX_TAP_CONTROL0             0x1800001C
83 #define AR71XX_TAP_CONTROL1             0x18000020
84 #define AR71XX_TAP_CONTROL2             0x18000024
85 #define AR71XX_TAP_CONTROL3             0x18000028
86 #define AR71XX_PCI_WINDOW0              0x1800007C
87 #define AR71XX_PCI_WINDOW1              0x18000080
88 #define AR71XX_PCI_WINDOW2              0x18000084
89 #define AR71XX_PCI_WINDOW3              0x18000088
90 #define AR71XX_PCI_WINDOW4              0x1800008C
91 #define AR71XX_PCI_WINDOW5              0x18000090
92 #define AR71XX_PCI_WINDOW6              0x18000094
93 #define AR71XX_PCI_WINDOW7              0x18000098
94 #define AR71XX_WB_FLUSH_GE0             0x1800009C
95 #define AR71XX_WB_FLUSH_GE1             0x180000A0
96 #define AR71XX_WB_FLUSH_USB             0x180000A4
97 #define AR71XX_WB_FLUSH_PCI             0x180000A8
98
99 /*
100  * Values for PCI_WINDOW_X registers 
101  */
102 #define PCI_WINDOW0_ADDR                0x10000000
103 #define PCI_WINDOW1_ADDR                0x11000000
104 #define PCI_WINDOW2_ADDR                0x12000000
105 #define PCI_WINDOW3_ADDR                0x13000000
106 #define PCI_WINDOW4_ADDR                0x14000000
107 #define PCI_WINDOW5_ADDR                0x15000000
108 #define PCI_WINDOW6_ADDR                0x16000000
109 #define PCI_WINDOW7_ADDR                0x17000000
110 /* This value enables acces to PCI config registers */
111 #define PCI_WINDOW7_CONF_ADDR           0x07000000
112
113 #define AR71XX_UART_ADDR                0x18020000
114 #define         AR71XX_UART_THR         0x0
115 #define         AR71XX_UART_LSR         0x14
116 #define         AR71XX_UART_LSR_THRE    (1 << 5)
117 #define         AR71XX_UART_LSR_TEMT    (1 << 6)
118
119 #define AR71XX_USB_CTRL_FLADJ           0x18030000
120 #define         USB_CTRL_FLADJ_HOST_SHIFT       12
121 #define         USB_CTRL_FLADJ_A5_SHIFT         10
122 #define         USB_CTRL_FLADJ_A4_SHIFT         8
123 #define         USB_CTRL_FLADJ_A3_SHIFT         6
124 #define         USB_CTRL_FLADJ_A2_SHIFT         4
125 #define         USB_CTRL_FLADJ_A1_SHIFT         2
126 #define         USB_CTRL_FLADJ_A0_SHIFT         0
127 #define AR71XX_USB_CTRL_CONFIG          0x18030004
128 #define         USB_CTRL_CONFIG_OHCI_DES_SWAP   (1 << 19)
129 #define         USB_CTRL_CONFIG_OHCI_BUF_SWAP   (1 << 18)
130 #define         USB_CTRL_CONFIG_EHCI_DES_SWAP   (1 << 17)
131 #define         USB_CTRL_CONFIG_EHCI_BUF_SWAP   (1 << 16)
132 #define         USB_CTRL_CONFIG_DISABLE_XTL     (1 << 13)
133 #define         USB_CTRL_CONFIG_OVERRIDE_XTL    (1 << 12)
134 #define         USB_CTRL_CONFIG_CLK_SEL_SHIFT   4
135 #define         USB_CTRL_CONFIG_CLK_SEL_MASK    3
136 #define         USB_CTRL_CONFIG_CLK_SEL_12      0
137 #define         USB_CTRL_CONFIG_CLK_SEL_24      1
138 #define         USB_CTRL_CONFIG_CLK_SEL_48      2
139 #define         USB_CTRL_CONFIG_OVER_CURRENT_AS_GPIO    (1 << 8)
140 #define         USB_CTRL_CONFIG_SS_SIMULATION_MODE      (1 << 2)
141 #define         USB_CTRL_CONFIG_RESUME_UTMI_PLS_DIS     (1 << 1)
142 #define         USB_CTRL_CONFIG_UTMI_BACKWARD_ENB       (1 << 0)
143
144 #define AR71XX_GPIO_BASE                0x18040000
145 #define         AR71XX_GPIO_OE                  0x00
146 #define         AR71XX_GPIO_IN                  0x04
147 #define         AR71XX_GPIO_OUT                 0x08
148 #define         AR71XX_GPIO_SET                 0x0c
149 #define         AR71XX_GPIO_CLEAR               0x10
150 #define         AR71XX_GPIO_INT                 0x14
151 #define         AR71XX_GPIO_INT_TYPE            0x18
152 #define         AR71XX_GPIO_INT_POLARITY        0x1c
153 #define         AR71XX_GPIO_INT_PENDING         0x20
154 #define         AR71XX_GPIO_INT_MASK            0x24
155 #define         AR71XX_GPIO_FUNCTION            0x28
156 #define                 GPIO_FUNC_STEREO_EN     (1 << 17)
157 #define                 GPIO_FUNC_SLIC_EN       (1 << 16)
158 #define                 GPIO_FUNC_SPI_CS2_EN    (1 << 13)
159                                 /* CS2 is shared with GPIO_1 */
160 #define                 GPIO_FUNC_SPI_CS1_EN    (1 << 12)
161                                 /* CS1 is shared with GPIO_0 */
162 #define                 GPIO_FUNC_UART_EN       (1 << 8)
163 #define                 GPIO_FUNC_USB_OC_EN     (1 << 4)
164 #define                 GPIO_FUNC_USB_CLK_EN    (0)
165
166 #define AR71XX_BASE_FREQ                40000000
167 #define AR71XX_PLL_CPU_BASE             0x18050000
168 #define AR71XX_PLL_CPU_CONFIG           0x18050000
169 #define         PLL_SW_UPDATE                   (1U << 31)
170 #define         PLL_LOCKED                      (1 << 30)
171 #define         PLL_AHB_DIV_SHIFT               20
172 #define         PLL_AHB_DIV_MASK                7
173 #define         PLL_DDR_DIV_SEL_SHIFT           18
174 #define         PLL_DDR_DIV_SEL_MASK            3
175 #define         PLL_CPU_DIV_SEL_SHIFT           16
176 #define         PLL_CPU_DIV_SEL_MASK            3
177 #define         PLL_LOOP_BW_SHIFT               12
178 #define         PLL_LOOP_BW_MASK                0xf
179 #define         PLL_DIV_IN_SHIFT                10
180 #define         PLL_DIV_IN_MASK                 3
181 #define         PLL_DIV_OUT_SHIFT               8
182 #define         PLL_DIV_OUT_MASK                3
183 #define         PLL_FB_SHIFT                    3
184 #define         PLL_FB_MASK                     0x1f
185 #define         PLL_BYPASS                      (1 << 1)
186 #define         PLL_POWER_DOWN                  (1 << 0)
187 #define AR71XX_PLL_SEC_CONFIG           0x18050004
188 #define         AR71XX_PLL_ETH0_SHIFT           17
189 #define         AR71XX_PLL_ETH1_SHIFT           19
190 #define AR71XX_PLL_CPU_CLK_CTRL         0x18050008
191 #define AR71XX_PLL_ETH_INT0_CLK         0x18050010
192 #define AR71XX_PLL_ETH_INT1_CLK         0x18050014
193 #define         XPLL_ETH_INT_CLK_10             0x00991099
194 #define         XPLL_ETH_INT_CLK_100            0x00441011
195 #define         XPLL_ETH_INT_CLK_1000           0x13110000
196 #define         XPLL_ETH_INT_CLK_1000_GMII      0x14110000
197 #define         PLL_ETH_INT_CLK_10              0x00991099
198 #define         PLL_ETH_INT_CLK_100             0x00001099
199 #define         PLL_ETH_INT_CLK_1000            0x00110000
200 #define AR71XX_PLL_ETH_EXT_CLK          0x18050018
201 #define AR71XX_PLL_PCI_CLK              0x1805001C
202
203 /* Reset block */
204 #define AR71XX_RST_BLOCK_BASE   0x18060000
205
206 #define AR71XX_RST_WDOG_CONTROL 0x18060008
207 #define         RST_WDOG_LAST                   (1U << 31)
208 #define         RST_WDOG_ACTION_MASK            3
209 #define         RST_WDOG_ACTION_RESET           3
210 #define         RST_WDOG_ACTION_NMI             2
211 #define         RST_WDOG_ACTION_GP_INTR         1
212 #define         RST_WDOG_ACTION_NOACTION        0
213
214 #define AR71XX_RST_WDOG_TIMER   0x1806000C
215 /* 
216  * APB interrupt status and mask register and interrupt bit numbers for 
217  */
218 #define AR71XX_MISC_INTR_STATUS 0x18060010
219 #define AR71XX_MISC_INTR_MASK   0x18060014
220 #define         MISC_INTR_TIMER         0
221 #define         MISC_INTR_ERROR         1
222 #define         MISC_INTR_GPIO          2
223 #define         MISC_INTR_UART          3
224 #define         MISC_INTR_WATCHDOG      4
225 #define         MISC_INTR_PERF          5
226 #define         MISC_INTR_OHCI          6
227 #define         MISC_INTR_DMA           7
228
229 #define AR71XX_PCI_INTR_STATUS  0x18060018
230 #define AR71XX_PCI_INTR_MASK    0x1806001C
231 #define         PCI_INTR_CORE           (1 << 4)
232
233 #define AR71XX_RST_RESET        0x18060024
234 #define         RST_RESET_FULL_CHIP     (1 << 24) /* Same as pulling
235                                                              the reset pin */
236 #define         RST_RESET_CPU_COLD      (1 << 20) /* Cold reset */
237 #define         RST_RESET_GE1_MAC       (1 << 13)
238 #define         RST_RESET_GE1_PHY       (1 << 12)
239 #define         RST_RESET_GE0_MAC       (1 <<  9)
240 #define         RST_RESET_GE0_PHY       (1 <<  8)
241 #define         RST_RESET_USB_OHCI_DLL  (1 <<  6)
242 #define         RST_RESET_USB_HOST      (1 <<  5)
243 #define         RST_RESET_USB_PHY       (1 <<  4)
244 #define         RST_RESET_PCI_BUS       (1 <<  1)
245 #define         RST_RESET_PCI_CORE      (1 <<  0)
246
247 /* Chipset revision details */
248 #define AR71XX_RST_RESET_REG_REV_ID     0x18060090
249 #define         REV_ID_MAJOR_MASK       0xfff0
250 #define         REV_ID_MAJOR_AR71XX     0x00a0
251 #define         REV_ID_MAJOR_AR913X     0x00b0
252 #define         REV_ID_MAJOR_AR7240     0x00c0
253 #define         REV_ID_MAJOR_AR7241     0x0100
254 #define         REV_ID_MAJOR_AR7242     0x1100
255
256 /* AR71XX chipset revision details */
257 #define         AR71XX_REV_ID_MINOR_MASK        0x3
258 #define         AR71XX_REV_ID_MINOR_AR7130      0x0
259 #define         AR71XX_REV_ID_MINOR_AR7141      0x1
260 #define         AR71XX_REV_ID_MINOR_AR7161      0x2
261 #define         AR71XX_REV_ID_REVISION_MASK     0x3
262 #define         AR71XX_REV_ID_REVISION_SHIFT    2
263
264 /* AR724X chipset revision details */
265 #define         AR724X_REV_ID_REVISION_MASK     0x3
266
267 /* AR91XX chipset revision details */
268 #define         AR91XX_REV_ID_MINOR_MASK        0x3
269 #define         AR91XX_REV_ID_MINOR_AR9130      0x0
270 #define         AR91XX_REV_ID_MINOR_AR9132      0x1
271 #define         AR91XX_REV_ID_REVISION_MASK     0x3
272 #define         AR91XX_REV_ID_REVISION_SHIFT    2
273
274 typedef enum {
275         AR71XX_MII_MODE_NONE = 0,
276         AR71XX_MII_MODE_GMII,
277         AR71XX_MII_MODE_MII,
278         AR71XX_MII_MODE_RGMII,
279         AR71XX_MII_MODE_RMII,
280         AR71XX_MII_MODE_SGMII   /* not hardware defined, though! */
281 } ar71xx_mii_mode;
282
283 /*
284  * AR71xx MII control region
285  */
286 #define AR71XX_MII0_CTRL        0x18070000
287 #define                 MII_CTRL_SPEED_SHIFT    4
288 #define                 MII_CTRL_SPEED_MASK     3
289 #define                         MII_CTRL_SPEED_10       0
290 #define                         MII_CTRL_SPEED_100      1
291 #define                         MII_CTRL_SPEED_1000     2
292 #define                 MII_CTRL_IF_MASK        3
293 #define                 MII_CTRL_IF_SHIFT       0
294 #define                         MII0_CTRL_IF_GMII       0
295 #define                         MII0_CTRL_IF_MII        1
296 #define                         MII0_CTRL_IF_RGMII      2
297 #define                         MII0_CTRL_IF_RMII       3
298
299 #define AR71XX_MII1_CTRL        0x18070004
300
301 #define                         MII1_CTRL_IF_RGMII      0
302 #define                         MII1_CTRL_IF_RMII       1
303
304 /*
305  * GigE adapters region
306  */
307 #define AR71XX_MAC0_BASE        0x19000000
308 #define AR71XX_MAC1_BASE        0x1A000000
309
310 #define         AR71XX_MAC_CFG1                 0x00
311 #define                 MAC_CFG1_SOFT_RESET             (1U << 31)
312 #define                 MAC_CFG1_SIMUL_RESET            (1 << 30)
313 #define                 MAC_CFG1_MAC_RX_BLOCK_RESET     (1 << 19)
314 #define                 MAC_CFG1_MAC_TX_BLOCK_RESET     (1 << 18)
315 #define                 MAC_CFG1_RX_FUNC_RESET          (1 << 17)
316 #define                 MAC_CFG1_TX_FUNC_RESET          (1 << 16)
317 #define                 MAC_CFG1_LOOPBACK               (1 <<  8)
318 #define                 MAC_CFG1_RXFLOW_CTRL            (1 <<  5)
319 #define                 MAC_CFG1_TXFLOW_CTRL            (1 <<  4)
320 #define                 MAC_CFG1_SYNC_RX                (1 <<  3)
321 #define                 MAC_CFG1_RX_ENABLE              (1 <<  2)
322 #define                 MAC_CFG1_SYNC_TX                (1 <<  1)
323 #define                 MAC_CFG1_TX_ENABLE              (1 <<  0)
324 #define         AR71XX_MAC_CFG2                 0x04
325 #define                 MAC_CFG2_PREAMBLE_LEN_MASK      0xf
326 #define                 MAC_CFG2_PREAMBLE_LEN_SHIFT     12
327 #define                 MAC_CFG2_IFACE_MODE_1000        (2 << 8)
328 #define                 MAC_CFG2_IFACE_MODE_10_100      (1 << 8)
329 #define                 MAC_CFG2_IFACE_MODE_SHIFT       8
330 #define                 MAC_CFG2_IFACE_MODE_MASK        3
331 #define                 MAC_CFG2_HUGE_FRAME             (1 << 5)
332 #define                 MAC_CFG2_LENGTH_FIELD           (1 << 4)
333 #define                 MAC_CFG2_ENABLE_PADCRC          (1 << 2)
334 #define                 MAC_CFG2_ENABLE_CRC             (1 << 1)
335 #define                 MAC_CFG2_FULL_DUPLEX            (1 << 0)
336 #define         AR71XX_MAC_IFG                  0x08
337 #define         AR71XX_MAC_HDUPLEX              0x0C
338 #define         AR71XX_MAC_MAX_FRAME_LEN        0x10
339 #define         AR71XX_MAC_MII_CFG              0x20
340 #define                 MAC_MII_CFG_RESET               (1U << 31)
341 #define                 MAC_MII_CFG_SCAN_AUTO_INC       (1 <<  5)
342 #define                 MAC_MII_CFG_PREAMBLE_SUP        (1 <<  4)
343 #define                 MAC_MII_CFG_CLOCK_SELECT_MASK   0x7
344 #define                 MAC_MII_CFG_CLOCK_SELECT_MASK_AR933X    0xf
345 #define                 MAC_MII_CFG_CLOCK_DIV_4         0
346 #define                 MAC_MII_CFG_CLOCK_DIV_6         2
347 #define                 MAC_MII_CFG_CLOCK_DIV_8         3
348 #define                 MAC_MII_CFG_CLOCK_DIV_10        4
349 #define                 MAC_MII_CFG_CLOCK_DIV_14        5
350 #define                 MAC_MII_CFG_CLOCK_DIV_20        6
351 #define                 MAC_MII_CFG_CLOCK_DIV_28        7
352
353 /* .. and the AR933x/AR934x extensions */
354 #define                 MAC_MII_CFG_CLOCK_DIV_34        8
355 #define                 MAC_MII_CFG_CLOCK_DIV_42        9
356 #define                 MAC_MII_CFG_CLOCK_DIV_50        10
357 #define                 MAC_MII_CFG_CLOCK_DIV_58        11
358 #define                 MAC_MII_CFG_CLOCK_DIV_66        12
359 #define                 MAC_MII_CFG_CLOCK_DIV_74        13
360 #define                 MAC_MII_CFG_CLOCK_DIV_82        14
361 #define                 MAC_MII_CFG_CLOCK_DIV_98        15
362
363 #define         AR71XX_MAC_MII_CMD              0x24
364 #define                 MAC_MII_CMD_SCAN_CYCLE          (1 << 1)
365 #define                 MAC_MII_CMD_READ                1
366 #define                 MAC_MII_CMD_WRITE               0
367 #define         AR71XX_MAC_MII_ADDR             0x28
368 #define                 MAC_MII_PHY_ADDR_SHIFT          8
369 #define                 MAC_MII_PHY_ADDR_MASK           0xff
370 #define                 MAC_MII_REG_MASK                0x1f
371 #define         AR71XX_MAC_MII_CONTROL          0x2C
372 #define                 MAC_MII_CONTROL_MASK            0xffff
373 #define         AR71XX_MAC_MII_STATUS           0x30
374 #define                 MAC_MII_STATUS_MASK             0xffff
375 #define         AR71XX_MAC_MII_INDICATOR        0x34
376 #define                 MAC_MII_INDICATOR_NOT_VALID     (1 << 2)
377 #define                 MAC_MII_INDICATOR_SCANNING      (1 << 1)
378 #define                 MAC_MII_INDICATOR_BUSY          (1 << 0)
379 #define         AR71XX_MAC_IFCONTROL            0x38
380 #define                 MAC_IFCONTROL_SPEED     (1 << 16)
381 #define         AR71XX_MAC_STA_ADDR1            0x40
382 #define         AR71XX_MAC_STA_ADDR2            0x44
383 #define         AR71XX_MAC_FIFO_CFG0            0x48
384 #define                 FIFO_CFG0_TX_FABRIC             (1 << 4)
385 #define                 FIFO_CFG0_TX_SYSTEM             (1 << 3)
386 #define                 FIFO_CFG0_RX_FABRIC             (1 << 2)
387 #define                 FIFO_CFG0_RX_SYSTEM             (1 << 1)
388 #define                 FIFO_CFG0_WATERMARK             (1 << 0)
389 #define                 FIFO_CFG0_ALL                   ((1 << 5) - 1)
390 #define                 FIFO_CFG0_ENABLE_SHIFT          8
391 #define         AR71XX_MAC_FIFO_CFG1            0x4C
392 #define         AR71XX_MAC_FIFO_CFG2            0x50
393 #define         AR71XX_MAC_FIFO_TX_THRESHOLD    0x54
394 #define         AR71XX_MAC_FIFO_RX_FILTMATCH    0x58
395 /* 
396  * These flags applicable both to AR71XX_MAC_FIFO_RX_FILTMASK and
397  * to AR71XX_MAC_FIFO_RX_FILTMATCH
398  */
399 #define                 FIFO_RX_MATCH_UNICAST           (1 << 17)
400 #define                 FIFO_RX_MATCH_TRUNC_FRAME       (1 << 16)
401 #define                 FIFO_RX_MATCH_VLAN_TAG          (1 << 15)
402 #define                 FIFO_RX_MATCH_UNSUP_OPCODE      (1 << 14)
403 #define                 FIFO_RX_MATCH_PAUSE_FRAME       (1 << 13)
404 #define                 FIFO_RX_MATCH_CTRL_FRAME        (1 << 12)
405 #define                 FIFO_RX_MATCH_LONG_EVENT        (1 << 11)
406 #define                 FIFO_RX_MATCH_DRIBBLE_NIBBLE    (1 << 10)
407 #define                 FIFO_RX_MATCH_BCAST             (1 <<  9)
408 #define                 FIFO_RX_MATCH_MCAST             (1 <<  8)
409 #define                 FIFO_RX_MATCH_OK                (1 <<  7)
410 #define                 FIFO_RX_MATCH_OORANGE           (1 <<  6)
411 #define                 FIFO_RX_MATCH_LEN_MSMTCH        (1 <<  5)
412 #define                 FIFO_RX_MATCH_CRC_ERROR         (1 <<  4)
413 #define                 FIFO_RX_MATCH_CODE_ERROR        (1 <<  3)
414 #define                 FIFO_RX_MATCH_FALSE_CARRIER     (1 <<  2)
415 #define                 FIFO_RX_MATCH_RX_DV_EVENT       (1 <<  1)
416 #define                 FIFO_RX_MATCH_DROP_EVENT        (1 <<  0)
417 /*
418  * Exclude unicast and truncated frames from matching
419  */
420 #define                 FIFO_RX_FILTMATCH_DEFAULT               \
421                                 (FIFO_RX_MATCH_VLAN_TAG         | \
422                                 FIFO_RX_MATCH_UNSUP_OPCODE      | \
423                                 FIFO_RX_MATCH_PAUSE_FRAME       | \
424                                 FIFO_RX_MATCH_CTRL_FRAME        | \
425                                 FIFO_RX_MATCH_LONG_EVENT        | \
426                                 FIFO_RX_MATCH_DRIBBLE_NIBBLE    | \
427                                 FIFO_RX_MATCH_BCAST             | \
428                                 FIFO_RX_MATCH_MCAST             | \
429                                 FIFO_RX_MATCH_OK                | \
430                                 FIFO_RX_MATCH_OORANGE           | \
431                                 FIFO_RX_MATCH_LEN_MSMTCH        | \
432                                 FIFO_RX_MATCH_CRC_ERROR         | \
433                                 FIFO_RX_MATCH_CODE_ERROR        | \
434                                 FIFO_RX_MATCH_FALSE_CARRIER     | \
435                                 FIFO_RX_MATCH_RX_DV_EVENT       | \
436                                 FIFO_RX_MATCH_DROP_EVENT)
437 #define         AR71XX_MAC_FIFO_RX_FILTMASK     0x5C
438 #define                 FIFO_RX_MASK_BYTE_MODE          (1 << 19)
439 #define                 FIFO_RX_MASK_NO_SHORT_FRAME     (1 << 18)
440 #define                 FIFO_RX_MASK_BIT17              (1 << 17)
441 #define                 FIFO_RX_MASK_BIT16              (1 << 16)
442 #define                 FIFO_RX_MASK_TRUNC_FRAME        (1 << 15)
443 #define                 FIFO_RX_MASK_LONG_EVENT         (1 << 14)
444 #define                 FIFO_RX_MASK_VLAN_TAG           (1 << 13)
445 #define                 FIFO_RX_MASK_UNSUP_OPCODE       (1 << 12)
446 #define                 FIFO_RX_MASK_PAUSE_FRAME        (1 << 11)
447 #define                 FIFO_RX_MASK_CTRL_FRAME         (1 << 10)
448 #define                 FIFO_RX_MASK_DRIBBLE_NIBBLE     (1 <<  9)
449 #define                 FIFO_RX_MASK_BCAST              (1 <<  8)
450 #define                 FIFO_RX_MASK_MCAST              (1 <<  7)
451 #define                 FIFO_RX_MASK_OK                 (1 <<  6)
452 #define                 FIFO_RX_MASK_OORANGE            (1 <<  5)
453 #define                 FIFO_RX_MASK_LEN_MSMTCH         (1 <<  4)
454 #define                 FIFO_RX_MASK_CODE_ERROR         (1 <<  3)
455 #define                 FIFO_RX_MASK_FALSE_CARRIER      (1 <<  2)
456 #define                 FIFO_RX_MASK_RX_DV_EVENT        (1 <<  1)
457 #define                 FIFO_RX_MASK_DROP_EVENT         (1 <<  0)
458
459 /*
460  *  Len. mismatch, unsup. opcode and short frmae bits excluded
461  */
462 #define                 FIFO_RX_FILTMASK_DEFAULT \
463                                 (FIFO_RX_MASK_NO_SHORT_FRAME    | \
464                                 FIFO_RX_MASK_BIT17              | \
465                                 FIFO_RX_MASK_BIT16              | \
466                                 FIFO_RX_MASK_TRUNC_FRAME        | \
467                                 FIFO_RX_MASK_LONG_EVENT         | \
468                                 FIFO_RX_MASK_VLAN_TAG           | \
469                                 FIFO_RX_MASK_PAUSE_FRAME        | \
470                                 FIFO_RX_MASK_CTRL_FRAME         | \
471                                 FIFO_RX_MASK_DRIBBLE_NIBBLE     | \
472                                 FIFO_RX_MASK_BCAST              | \
473                                 FIFO_RX_MASK_MCAST              | \
474                                 FIFO_RX_MASK_OK                 | \
475                                 FIFO_RX_MASK_OORANGE            | \
476                                 FIFO_RX_MASK_CODE_ERROR         | \
477                                 FIFO_RX_MASK_FALSE_CARRIER      | \
478                                 FIFO_RX_MASK_RX_DV_EVENT        | \
479                                 FIFO_RX_MASK_DROP_EVENT)
480
481 #define         AR71XX_MAC_FIFO_RAM0            0x60
482 #define         AR71XX_MAC_FIFO_RAM1            0x64
483 #define         AR71XX_MAC_FIFO_RAM2            0x68
484 #define         AR71XX_MAC_FIFO_RAM3            0x6C
485 #define         AR71XX_MAC_FIFO_RAM4            0x70
486 #define         AR71XX_MAC_FIFO_RAM5            0x74
487 #define         AR71XX_MAC_FIFO_RAM6            0x78
488 #define         AR71XX_DMA_TX_CONTROL           0x180
489 #define                 DMA_TX_CONTROL_EN               (1 << 0)
490 #define         AR71XX_DMA_TX_DESC              0x184
491 #define         AR71XX_DMA_TX_STATUS            0x188
492 #define                 DMA_TX_STATUS_PCOUNT_MASK       0xff
493 #define                 DMA_TX_STATUS_PCOUNT_SHIFT      16
494 #define                 DMA_TX_STATUS_BUS_ERROR         (1 << 3) 
495 #define                 DMA_TX_STATUS_UNDERRUN          (1 << 1) 
496 #define                 DMA_TX_STATUS_PKT_SENT          (1 << 0) 
497 #define         AR71XX_DMA_RX_CONTROL           0x18C
498 #define                 DMA_RX_CONTROL_EN               (1 << 0)
499 #define         AR71XX_DMA_RX_DESC              0x190
500 #define         AR71XX_DMA_RX_STATUS            0x194
501 #define                 DMA_RX_STATUS_PCOUNT_MASK       0xff
502 #define                 DMA_RX_STATUS_PCOUNT_SHIFT      16
503 #define                 DMA_RX_STATUS_BUS_ERROR         (1 << 3)
504 #define                 DMA_RX_STATUS_OVERFLOW          (1 << 2)
505 #define                 DMA_RX_STATUS_PKT_RECVD         (1 << 0)
506 #define         AR71XX_DMA_INTR                         0x198
507 #define         AR71XX_DMA_INTR_STATUS                  0x19C
508 #define                 DMA_INTR_ALL                    ((1 << 8) - 1)
509 #define                 DMA_INTR_RX_BUS_ERROR           (1 << 7)
510 #define                 DMA_INTR_RX_OVERFLOW            (1 << 6)
511 #define                 DMA_INTR_RX_PKT_RCVD            (1 << 4)
512 #define                 DMA_INTR_TX_BUS_ERROR           (1 << 3)
513 #define                 DMA_INTR_TX_UNDERRUN            (1 << 1)
514 #define                 DMA_INTR_TX_PKT_SENT            (1 << 0)
515
516 #define AR71XX_SPI_BASE 0x1f000000
517 #define         AR71XX_SPI_FS           0x00
518 #define         AR71XX_SPI_CTRL         0x04
519 #define                 SPI_CTRL_REMAP_DISABLE          (1 << 6)
520 #define                 SPI_CTRL_CLOCK_DIVIDER_MASK     ((1 << 6) - 1)
521 #define         AR71XX_SPI_IO_CTRL      0x08
522 #define                 SPI_IO_CTRL_CS2                 (1 << 18)
523 #define                 SPI_IO_CTRL_CS1                 (1 << 17)
524 #define                 SPI_IO_CTRL_CS0                 (1 << 16)
525 #define                 SPI_IO_CTRL_CSMASK              (7 << 16)
526 #define                 SPI_IO_CTRL_CLK                 (1 << 8)
527 #define                 SPI_IO_CTRL_DO                  1
528 #define         AR71XX_SPI_RDS          0x0C
529
530 #define ATH_READ_REG(reg) \
531     *((volatile uint32_t *)MIPS_PHYS_TO_KSEG1((reg)))
532
533 #define ATH_WRITE_REG(reg, val) \
534     do { \
535       *((volatile uint32_t *)MIPS_PHYS_TO_KSEG1((reg))) = (val); \
536       (void) ATH_READ_REG(reg); \
537     } while (0)
538
539 static inline void
540 ar71xx_ddr_flush(uint32_t reg)
541
542         ATH_WRITE_REG(reg, 1);
543         while ((ATH_READ_REG(reg) & 0x1))
544                 ;
545         ATH_WRITE_REG(reg, 1);
546         while ((ATH_READ_REG(reg) & 0x1))
547                 ;
548
549
550 static inline void
551 ar71xx_write_pll(uint32_t cfg_reg, uint32_t pll_reg, uint32_t pll, uint32_t pll_reg_shift)
552 {
553         uint32_t sec_cfg;
554
555         /* set PLL registers */
556         sec_cfg = ATH_READ_REG(cfg_reg);
557         sec_cfg &= ~(3 << pll_reg_shift);
558         sec_cfg |= (2 << pll_reg_shift);
559
560         ATH_WRITE_REG(cfg_reg, sec_cfg);
561         DELAY(100);
562
563         ATH_WRITE_REG(pll_reg, pll);
564         sec_cfg |= (3 << pll_reg_shift);
565         ATH_WRITE_REG(cfg_reg, sec_cfg);
566         DELAY(100);
567
568         sec_cfg &= ~(3 << pll_reg_shift);
569         ATH_WRITE_REG(cfg_reg, sec_cfg);
570         DELAY(100);
571 }
572
573 #endif /* _AR71XX_REG_H_ */