ap81.c
来自「TP-LINK公司TL-WR941N无线路由器的Bootloader U_BOO」· C语言 代码 · 共 169 行
C
169 行
#include <common.h>#include <command.h>#include <asm/mipsregs.h>#include <asm/addrspace.h>#include <config.h>#include <version.h>#include "ar7100_soc.h"intar7100_mem_config(){ uint32_t ddr_config, ddr_config2; int i;#if 0 ar7100_ddr_width_t width;#endif ar7100_ddr_initial_config(CFG_DDR_REFRESH_VAL);#if 0 ar7100_ddr_tap_config();#else ar7100_reg_wr (AR7100_DDR_TAP_CONTROL0, 0x0); ar7100_reg_wr (AR7100_DDR_TAP_CONTROL1, 0x0); ar7100_reg_wr (AR7100_DDR_TAP_CONTROL2, 0x0); ar7100_reg_wr (AR7100_DDR_TAP_CONTROL3, 0x0);#endif#if 0 ddr_config = ar7100_reg_rd(AR7100_DDR_CONFIG); ddr_config2 = ar7100_reg_rd(AR7100_DDR_CONFIG2); width = ar7100_ddr_get_width(); if (width != AR7100_DDR_32B) ddr_config |= AR7100_DDR_CONFIG_16BIT; if (width == AR7100_DDR_16B_HIGH) ddr_config2 &= ~AR7100_DDR_CONFIG2_HALF_WIDTH_L; ddr_config2 &= ~((0x1f << AR7100_DDR_CONFIG2_TRTW_SHIFT) | (0x1f << AR7100_DDR_CONFIG2_TWTR_SHIFT) | 0xf); ddr_config2 |= ((CFG_DDR_TRTW_VAL << AR7100_DDR_CONFIG2_TRTW_SHIFT) | (CFG_DDR_TWTR_VAL << AR7100_DDR_CONFIG2_TWTR_SHIFT) | AR7100_DDR_CONFIG2_BL2); /* * XXX These bits are reserved... */ ddr_config2 |= (1 << 26)|(1 << 27)|(1 << 30); printf("programming config1 %#x, config2 %#x\n", ddr_config, ddr_config2); ar7100_reg_wr(AR7100_DDR_CONFIG, ddr_config); ar7100_reg_wr(AR7100_DDR_CONFIG2, ddr_config2);#endif /* XXX - these don't really belong here! *(volatile unsigned int *)0xb8050004 = 0x00001032; udelay(100);*/#ifndef AR9100 *(volatile unsigned int *)0xb8050018 = 0x1313; udelay(10);#endif#if 0 *(volatile unsigned int *)0xb805001c = 0x00000909; udelay(100); *(volatile unsigned int *)0xb8050014 = 0x14000044; udelay(100);#endif i = *(volatile int *)0xb8050004; i = i & (~(1 << 25)); *(volatile int *)0xb8050004 = i; while ((*(volatile int *)0xb8050004) & (1 << 17)); i = *(volatile int *)0xb8050004; i = i & (~(1 << 16)); *(volatile int *)0xb8050004 = i; while ((*(volatile int *)0xb8050004) & (1 << 17)); i = *(volatile int *)0xb8050004; i = i | (0x3f << 19); *(volatile int *)0xb8050004 = i; udelay(100); *(volatile int *)0xb8050014 = 0x13000a44;/* *(volatile int *)0xb8050014 = 0x13000044; *(volatile int *)0xb8050014 = 0x13111321; *(volatile int *)0xb8050014 = 0x00111321; *(volatile int *)0xb8050014 = 0x00001344; *(volatile int *)0xb8050014 = 0x14000044; *(volatile int *)0xb8050014 = 0x14000f44; *(volatile int *)0xb8050014 = 0x00001044; *(volatile int *)0xb8050014 = 0x14001044; *(volatile int *)0xb8050014 = 0x14001f44; *(volatile int *)0xb8050014 = 0x1f001044; *(volatile int *)0xb8050014 = 0x1f001f44;*/ *(volatile int *)0xb805001c = 0x00000909; udelay(100); i = *(volatile int *)0xb8050004; i = i & (~(0x3b << 19)); *(volatile int *)0xb8050004 = i; udelay(100); i = *(volatile int *)0xb8050004; i = i | (0x3 << 20); *(volatile int *)0xb8050004 = i; udelay(100); i = *(volatile int *)0xb8050004; i = i & (~(0x3 << 20)); *(volatile int *)0xb8050004 = i; udelay(100); /* Temp addition - check with Ravi */ *(volatile unsigned int *)0xb8080008 = 0x00000040; udelay(100); return (ar7100_ddr_find_size());}long int initdram(int board_type){ return (ar7100_mem_config());}int checkboard (void){ printf("AP81 (ar7100) U-boot\n"); return 0;}/* add by lqm, 18Apr08 */#define SYS_LED_GPIO 2 /* system led, set to 0 for LED on, 1 for OFF */#define WPS_LED_RED 4 /* WPS LED, GPIO 4, set to 1 for LED on, 0 for OFF */#define WPS_LED_GREEN 5 /* GPIO 5 */void wr841n_set_sys_led(int on){ if (on) { ar7100_reg_wr(AR7100_GPIO_CLEAR, (1 << SYS_LED_GPIO)); } else { ar7100_reg_wr(AR7100_GPIO_SET, (1 << SYS_LED_GPIO)); }}void wr841n_set_wps_led(int is_red, int on){ int bit = is_red ? WPS_LED_RED : WPS_LED_GREEN; if (on) { ar7100_reg_wr(AR7100_GPIO_SET, (1 << bit)); } else { ar7100_reg_wr(AR7100_GPIO_CLEAR, (1 << bit)); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?