1*6e778a7eSPedro F. Giffuni /*- 2*6e778a7eSPedro F. Giffuni * SPDX-License-Identifier: ISC 3*6e778a7eSPedro F. Giffuni * 414779705SSam Leffler * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting 514779705SSam Leffler * Copyright (c) 2002-2008 Atheros Communications, Inc. 614779705SSam Leffler * 714779705SSam Leffler * Permission to use, copy, modify, and/or distribute this software for any 814779705SSam Leffler * purpose with or without fee is hereby granted, provided that the above 914779705SSam Leffler * copyright notice and this permission notice appear in all copies. 1014779705SSam Leffler * 1114779705SSam Leffler * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1214779705SSam Leffler * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1314779705SSam Leffler * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1414779705SSam Leffler * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1514779705SSam Leffler * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1614779705SSam Leffler * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1714779705SSam Leffler * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1814779705SSam Leffler */ 1914779705SSam Leffler #ifndef _DEV_ATH_AR5312REG_H_ 2014779705SSam Leffler #define _DEV_ATH_AR5312REG_H_ 2114779705SSam Leffler 2214779705SSam Leffler #include "ar5212/ar5212reg.h" 2314779705SSam Leffler /* 2414779705SSam Leffler * Definitions for the Atheros 5312 chipset. 2514779705SSam Leffler */ 2614779705SSam Leffler 2714779705SSam Leffler /* Register base addresses for modules which are not wmac modules */ 2814779705SSam Leffler /* 531X has a fixed memory map */ 2914779705SSam Leffler 3014779705SSam Leffler #define REG_WRITE(_reg,_val) *((volatile uint32_t *)(_reg)) = (_val); 3114779705SSam Leffler #define REG_READ(_reg) *((volatile uint32_t *)(_reg)) 3214779705SSam Leffler /* 3314779705SSam Leffler * PCI-MAC Configuration registers (AR2315+) 3414779705SSam Leffler */ 3514779705SSam Leffler #define AR5315_RSTIMER_BASE 0xb1000000 /* Address for reset/timer registers */ 3614779705SSam Leffler #define AR5315_GPIO_BASE 0xb1000000 /* Address for GPIO registers */ 3714779705SSam Leffler #define AR5315_WLAN0 0xb0000000 3814779705SSam Leffler 3914779705SSam Leffler #define AR5315_RESET 0x0004 /* Offset of reset control register */ 4014779705SSam Leffler #define AR5315_SREV 0x0014 /* Offset of reset control register */ 4114779705SSam Leffler #define AR5315_ENDIAN_CTL 0x000c /* offset of the endian control register */ 4214779705SSam Leffler #define AR5315_CONFIG_WLAN 0x00000002 /* WLAN byteswap */ 4314779705SSam Leffler 4414779705SSam Leffler #define AR5315_REV_MAJ 0x00f0 4514779705SSam Leffler #define AR5315_REV_MIN 0x000f 4614779705SSam Leffler 4714779705SSam Leffler #define AR5315_GPIODIR 0x0098 /* GPIO direction register */ 4814779705SSam Leffler #define AR5315_GPIODO 0x0090 /* GPIO data output access reg */ 4914779705SSam Leffler #define AR5315_GPIODI 0x0088 /* GPIO data input access reg*/ 5014779705SSam Leffler #define AR5315_GPIOINT 0x00a0 /* GPIO interrupt control */ 5114779705SSam Leffler 5214779705SSam Leffler #define AR5315_GPIODIR_M(x) (1 << (x)) /* mask for i/o */ 5314779705SSam Leffler #define AR5315_GPIODIR_O(x) (1 << (x)) /* output */ 5414779705SSam Leffler #define AR5315_GPIODIR_I(x) 0 /* input */ 5514779705SSam Leffler 5614779705SSam Leffler #define AR5315_GPIOINT_S 0 5714779705SSam Leffler #define AR5315_GPIOINT_M 0x3F 5814779705SSam Leffler #define AR5315_GPIOINTLVL_S 6 5914779705SSam Leffler #define AR5315_GPIOINTLVL_M (3 << AR5315_GPIOINTLVL_S) 6014779705SSam Leffler 6114779705SSam Leffler #define AR5315_WREV (-0xefbfe0) /* Revision ID register offset */ 6214779705SSam Leffler #define AR5315_WREV_S 0 /* Shift for WMAC revision info */ 6314779705SSam Leffler #define AR5315_WREV_ID 0x000000FF /* Mask for WMAC revision info */ 6414779705SSam Leffler #define AR5315_WREV_ID_S 4 /* Shift for WMAC Rev ID */ 6514779705SSam Leffler #define AR5315_WREV_REVISION 0x0000000F /* Mask for WMAN Revsion version */ 6614779705SSam Leffler 6714779705SSam Leffler #define AR5315_RC_BB0_CRES 0x00000002 /* Cold reset to WMAC0 & WBB0 */ 6814779705SSam Leffler #define AR5315_RC_BB1_CRES 0x00000200 /* Cold reset to WMAC1 & WBB1n */ 6914779705SSam Leffler #define AR5315_RC_WMAC0_RES 0x00000001 /* Warm reset to WMAC 0 */ 7014779705SSam Leffler #define AR5315_RC_WBB0_RES 0x00000002 /* Warm reset to WBB0 */ 7114779705SSam Leffler #define AR5315_RC_WMAC1_RES 0x00020000 /* Warm reset to WMAC1 */ 7214779705SSam Leffler #define AR5315_RC_WBB1_RES 0x00040000 /* Warm reset to WBB */ 7314779705SSam Leffler 7414779705SSam Leffler /* 7514779705SSam Leffler * PCI-MAC Configuration registers (AR5312) 7614779705SSam Leffler */ 7714779705SSam Leffler #define AR5312_RSTIMER_BASE 0xbc003000 /* Address for reset/timer registers */ 7814779705SSam Leffler #define AR5312_GPIO_BASE 0xbc002000 /* Address for GPIO registers */ 7914779705SSam Leffler #define AR5312_WLAN0 0xb8000000 8014779705SSam Leffler #define AR5312_WLAN1 0xb8500000 8114779705SSam Leffler 8214779705SSam Leffler #define AR5312_RESET 0x0020 /* Offset of reset control register */ 8314779705SSam Leffler #define AR5312_PCICFG 0x00B0 /* MAC/PCI configuration reg (LEDs) */ 8414779705SSam Leffler 8514779705SSam Leffler #define AR5312_PCICFG_LEDMODE 0x0000001c /* LED Mode mask */ 8614779705SSam Leffler #define AR5312_PCICFG_LEDMODE_S 2 /* LED Mode shift */ 8714779705SSam Leffler #define AR5312_PCICFG_LEDMOD0 0 /* Blnk prop to Tx and filtered Rx */ 8814779705SSam Leffler #define AR5312_PCICFG_LEDMOD1 1 /* Blnk prop to all Tx and Rx */ 8914779705SSam Leffler #define AR5312_PCICFG_LEDMOD2 2 /* DEBG flash */ 9014779705SSam Leffler #define AR5312_PCICFG_LEDMOD3 3 /* BLNK Randomly */ 9114779705SSam Leffler 9214779705SSam Leffler #define AR5312_PCICFG_LEDSEL 0x000000e0 /* LED Throughput select */ 9314779705SSam Leffler #define AR5312_PCICFG_LEDSEL_S 5 9414779705SSam Leffler #define AR5312_PCICFG_LEDSEL0 0 /* See blink rate table on p. 143 */ 9514779705SSam Leffler #define AR5312_PCICFG_LEDSEL1 1 /* of AR5212 data sheet */ 9614779705SSam Leffler #define AR5312_PCICFG_LEDSEL2 2 9714779705SSam Leffler #define AR5312_PCICFG_LEDSEL3 3 9814779705SSam Leffler #define AR5312_PCICFG_LEDSEL4 4 9914779705SSam Leffler #define AR5312_PCICFG_LEDSEL5 5 10014779705SSam Leffler #define AR5312_PCICFG_LEDSEL6 6 10114779705SSam Leffler #define AR5312_PCICFG_LEDSEL7 7 10214779705SSam Leffler 10314779705SSam Leffler #define AR5312_PCICFG_LEDSBR 0x00000100 /* Slow blink rate if no 10414779705SSam Leffler activity. 0 = blink @ lowest 10514779705SSam Leffler rate */ 10614779705SSam Leffler 10714779705SSam Leffler #undef AR_GPIOCR 10814779705SSam Leffler #undef AR_GPIODO /* Undefine the 5212 defs */ 10914779705SSam Leffler #undef AR_GPIODI 11014779705SSam Leffler 11114779705SSam Leffler #define AR5312_GPIOCR 0x0008 /* GPIO Control register */ 11214779705SSam Leffler #define AR5312_GPIODO 0x0000 /* GPIO data output access reg */ 11314779705SSam Leffler #define AR5312_GPIODI 0x0004 /* GPIO data input access reg*/ 11414779705SSam Leffler /* NB: AR5312 uses AR5212 defines for GPIOCR definitions */ 11514779705SSam Leffler 11614779705SSam Leffler #define AR5312_WREV 0x0090 /* Revision ID register offset */ 11714779705SSam Leffler #define AR5312_WREV_S 8 /* Shift for WMAC revision info */ 11814779705SSam Leffler #define AR5312_WREV_ID 0x000000FF /* Mask for WMAC revision info */ 11914779705SSam Leffler #define AR5312_WREV_ID_S 4 /* Shift for WMAC Rev ID */ 12014779705SSam Leffler #define AR5312_WREV_REVISION 0x0000000F /* Mask for WMAN Revsion version */ 12114779705SSam Leffler 12214779705SSam Leffler #define AR5312_RC_BB0_CRES 0x00000004 /* Cold reset to WMAC0 & WBB0 */ 12314779705SSam Leffler #define AR5312_RC_BB1_CRES 0x00000200 /* Cold reset to WMAC1 & WBB1n */ 12414779705SSam Leffler #define AR5312_RC_WMAC0_RES 0x00002000 /* Warm reset to WMAC 0 */ 12514779705SSam Leffler #define AR5312_RC_WBB0_RES 0x00004000 /* Warm reset to WBB0 */ 12614779705SSam Leffler #define AR5312_RC_WMAC1_RES 0x00020000 /* Warm reset to WMAC1 */ 12714779705SSam Leffler #define AR5312_RC_WBB1_RES 0x00040000 /* Warm reset to WBB */ 12814779705SSam Leffler 12914779705SSam Leffler #define AR_RAD2112_SREV_MAJOR 0x40 /* 2112 Major Rev */ 13014779705SSam Leffler 13114779705SSam Leffler enum AR5312PowerMode { 13214779705SSam Leffler AR5312_POWER_MODE_FORCE_SLEEP = 0, 13314779705SSam Leffler AR5312_POWER_MODE_FORCE_WAKE = 1, 13414779705SSam Leffler AR5312_POWER_MODE_NORMAL = 2, 13514779705SSam Leffler }; 13614779705SSam Leffler 13714779705SSam Leffler #endif /* _DEV_AR5312REG_H_ */ 138