3 #include <asm/mipsregs.h>
4 #include <asm/addrspace.h>
7 #include "ar7240_soc.h"
9 #ifndef COMPRESSED_UBOOT
10 extern void ar7240_ddr_initial_config(uint32_t refresh);
12 extern int ar7240_ddr_find_size(void);
13 extern void hornet_ddr_tap_init(void);
15 #define SETBITVAL(val, pos, bit) do {ulong bitval = (bit) ? 0x1 : 0x0; (val) = ((val) & ~(0x1 << (pos))) | ( (bitval) << (pos));} while(0)
17 void led_toggle(void){
20 gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
22 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
23 gpio ^= 1 << GPIO_WPS_LED_BIT;
24 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined(CONFIG_FOR_TPLINK_WR710N_V1)
25 gpio ^= 1 << GPIO_SYS_LED_BIT;
26 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
27 gpio ^= 1 << GPIO_INTERNET_LED_BIT;
28 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
29 gpio ^= 1 << GPIO_SYS_LED_BIT;
30 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4) || defined(CONFIG_FOR_TPLINK_MR3220_V2)
31 gpio ^= 1 << GPIO_SYS_LED_BIT;
32 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
33 gpio ^= 1 << GPIO_SYS_LED_BIT;
34 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
35 gpio ^= 1 << GPIO_WLAN_LED_BIT;
37 #error "Custom GPIO in leg_toggle() not defined!"
40 ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
43 void all_led_on(void){
46 gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
48 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
49 SETBITVAL(gpio, GPIO_WPS_LED_BIT, GPIO_WPS_LED_ON);
50 SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
51 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
52 SETBITVAL(gpio, GPIO_ETH_LED_BIT, GPIO_ETH_LED_ON);
53 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined (CONFIG_FOR_TPLINK_WR710N_V1)
54 SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
55 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
56 SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
57 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
58 SETBITVAL(gpio, GPIO_ETH_LED_BIT, GPIO_ETH_LED_ON);
59 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
60 SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
61 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4) || defined(CONFIG_FOR_TPLINK_MR3220_V2)
62 SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
63 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
64 SETBITVAL(gpio, GPIO_LAN1_LED_BIT, GPIO_LAN1_LED_ON);
65 SETBITVAL(gpio, GPIO_LAN2_LED_BIT, GPIO_LAN2_LED_ON);
66 SETBITVAL(gpio, GPIO_LAN3_LED_BIT, GPIO_LAN3_LED_ON);
67 SETBITVAL(gpio, GPIO_LAN4_LED_BIT, GPIO_LAN4_LED_ON);
68 SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
69 SETBITVAL(gpio, GPIO_QSS_LED_BIT, GPIO_QSS_LED_ON);
71 #ifdef CONFIG_FOR_TPLINK_MR3220_V2
72 SETBITVAL(gpio, GPIO_USB_LED_BIT, GPIO_USB_LED_ON);
74 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
75 SETBITVAL(gpio, GPIO_SYS_LED_BIT, GPIO_SYS_LED_ON);
76 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
77 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
79 #error "Custom GPIO in all_led_on() not defined!"
82 ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
85 void all_led_off(void){
88 gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
90 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
91 SETBITVAL(gpio, GPIO_WPS_LED_BIT, !GPIO_WPS_LED_ON);
92 SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, !GPIO_INTERNET_LED_ON);
93 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
94 SETBITVAL(gpio, GPIO_ETH_LED_BIT, !GPIO_ETH_LED_ON);
95 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined (CONFIG_FOR_TPLINK_WR710N_V1)
96 SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
97 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
98 SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, !GPIO_INTERNET_LED_ON);
99 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
100 SETBITVAL(gpio, GPIO_ETH_LED_BIT, !GPIO_ETH_LED_ON);
101 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
102 SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
103 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4) || defined(CONFIG_FOR_TPLINK_MR3220_V2)
104 SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
105 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
106 SETBITVAL(gpio, GPIO_LAN1_LED_BIT, !GPIO_LAN1_LED_ON);
107 SETBITVAL(gpio, GPIO_LAN2_LED_BIT, !GPIO_LAN2_LED_ON);
108 SETBITVAL(gpio, GPIO_LAN3_LED_BIT, !GPIO_LAN3_LED_ON);
109 SETBITVAL(gpio, GPIO_LAN4_LED_BIT, !GPIO_LAN4_LED_ON);
110 SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, !GPIO_INTERNET_LED_ON);
111 SETBITVAL(gpio, GPIO_QSS_LED_BIT, !GPIO_QSS_LED_ON);
113 #ifdef CONFIG_FOR_TPLINK_MR3220_V2
114 SETBITVAL(gpio, GPIO_USB_LED_BIT, !GPIO_USB_LED_ON);
116 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
117 SETBITVAL(gpio, GPIO_SYS_LED_BIT, !GPIO_SYS_LED_ON);
118 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
119 SETBITVAL(gpio, GPIO_WLAN_LED_BIT, !GPIO_WLAN_LED_ON);
121 #error "Custom GPIO in all_led_off() not defined!"
124 ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
128 #ifndef GPIO_RST_BUTTON_BIT
129 #error "GPIO_RST_BUTTON_BIT not defined!"
131 int reset_button_status(void){
132 if(ar7240_reg_rd(AR7240_GPIO_IN) & (1 << GPIO_RST_BUTTON_BIT)){
133 #if defined(GPIO_RST_BUTTON_IS_ACTIVE_LOW)
139 #if defined(GPIO_RST_BUTTON_IS_ACTIVE_LOW)
147 void gpio_config(void){
148 #if defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
150 * clk_obs1(gpio13/bit8), clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
151 * clk_obs4(gpio16/bit11), clk_obs5(gpio17/bit12)
152 * clk_obs0(gpio1/bit19), 6(gpio11/bit20)
154 ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~((0x1f<<8)|(0x3<<19))));
157 /* Enable eth Switch LEDs */
158 ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | (0x1f<<3)));
161 //Turn on status leds:
163 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) |(1<<0)));
165 //set WLAN LED output to low (reverse polarity LED)
166 //ar7240_reg_wr(AR7240_GPIO_CLEAR, (1<<0));
168 /* Clear AR7240_GPIO_FUNC BIT2 to ensure that software can control LED5(GPIO16) and LED6(GPIO17) */
169 ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~(0x1<<2)));
172 * clk_obs1(gpio13/bit8), clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
173 * clk_obs4(gpio16/bit11), clk_obs5(gpio17/bit12)
174 * clk_obs0(gpio1/bit19), 6(gpio11/bit20)
177 ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xEF84E0FB));
179 /* Disable EJTAG functionality to enable GPIO functionality */
180 ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | 0x8001));
182 /* Set HORNET_BOOTSTRAP_STATUS BIT18 to ensure that software can control GPIO26 and GPIO27 */
183 ar7240_reg_wr(HORNET_BOOTSTRAP_STATUS, (ar7240_reg_rd(HORNET_BOOTSTRAP_STATUS) | (0x1<<18)));
186 #if defined(CONFIG_FOR_TPLINK_MR3020_V1)
188 /* LED's GPIOs on MR3020:
197 /* set OE, added by zcf, 20110509 */
198 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC020001));
200 /* Disable clock obs, added by zcf, 20110509 */
201 //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
202 #elif defined(CONFIG_FOR_TPLINK_WR703N_V1) || defined(CONFIG_FOR_TPLINK_WR720N_V3) || defined(CONFIG_FOR_TPLINK_WR710N_V1)
204 /* LED's GPIOs on WR703N/WR720Nv3/WR710N:
210 /* set OE, added by zcf, 20110714 */
211 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x8000000));
212 #elif defined(CONFIG_FOR_TPLINK_MR3040_V1V2)
214 /* LED's GPIOs on MR3040:
222 /* set OE, added by zcf, 20110509 */
223 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC020000));
225 /* Disable clock obs, added by zcf, 20110509 */
226 //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
227 #elif defined(CONFIG_FOR_TPLINK_MR10U_V1) || defined(CONFIG_FOR_TPLINK_MR13U_V1)
229 /* LED's GPIOs on MR10U:
235 /* set OE, added by zcf, 20110714 */
236 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x8000000));
237 #elif defined(CONFIG_FOR_TPLINK_WR740N_V4)
239 /* LED's GPIOs on WR740Nv4:
252 /* set OE, added by zcf, 20110509 */
253 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0x803E003));
255 /* Disable clock obs, added by zcf, 20110509 */
256 //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
257 #elif defined(CONFIG_FOR_TPLINK_MR3220_V2)
259 /* LED's GPIOs on MR3220v2:
273 /* set OE, added by zcf, 20110509 */
274 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC03E003));
276 /* Disable clock obs, added by zcf, 20110509 */
277 //ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
278 #elif defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
279 // TODO: check GPIO config for C2
280 #elif defined(CONFIG_FOR_DLINK_DIR505_A1)
282 /* LED's GPIOs on DIR-505:
290 ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xC000000));
292 // turn off RED LED, we don't need it
293 ar7240_reg_wr(AR7240_GPIO_OUT, (ar7240_reg_rd(AR7240_GPIO_OUT) | (0x1 << 26)));
295 #error "Custom GPIO config in gpio_config() not defined!"
299 int ar7240_mem_config(void){
300 #ifndef COMPRESSED_UBOOT
301 ar7240_ddr_initial_config(CFG_DDR_REFRESH_VAL);
304 /* Default tap values for starting the tap_init*/
305 ar7240_reg_wr(AR7240_DDR_TAP_CONTROL0, CFG_DDR_TAP0_VAL);
306 ar7240_reg_wr(AR7240_DDR_TAP_CONTROL1, CFG_DDR_TAP1_VAL);
311 #ifndef COMPRESSED_UBOOT
312 ar7240_ddr_tap_init();
314 hornet_ddr_tap_init();
317 // return memory size
318 return(ar7240_ddr_find_size());
322 return((long int)ar7240_mem_config());
325 #ifndef COMPRESSED_UBOOT
326 int checkboard(void){
327 printf(BOARD_CUSTOM_STRING"\n\n");