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 + -
显示快捷键?