+#include <config.h>
#include <common.h>
#include <command.h>
#include <asm/mipsregs.h>
#include <asm/addrspace.h>
-#include <config.h>
-#include <version.h>
+
#include "ar7240_soc.h"
#if !defined(COMPRESSED_UBOOT)
#define SETBITVAL(val, pos, bit) do {ulong bitval = (bit) ? 0x1 : 0x0; (val) = ((val) & ~(0x1 << (pos))) | ( (bitval) << (pos));} while(0)
-void led_toggle(void){
+void led_toggle(void)
+{
unsigned int gpio;
gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
}
-void all_led_on(void){
+void all_led_on(void)
+{
unsigned int gpio;
gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
ar7240_reg_wr(AR7240_GPIO_OUT, gpio);
}
-void all_led_off(void){
+void all_led_off(void)
+{
unsigned int gpio;
gpio = ar7240_reg_rd(AR7240_GPIO_OUT);
#ifndef GPIO_RST_BUTTON_BIT
#error "GPIO_RST_BUTTON_BIT not defined!"
#endif
-int reset_button_status(void){
+int reset_button_status(void)
+{
unsigned int gpio;
gpio = ar7240_reg_rd(AR7240_GPIO_IN);
}
}
-void gpio_config(void){
+int gpio_init(void)
+{
#if defined(CONFIG_FOR_8DEVICES_CARAMBOLA2)
- /* Disable clock obs
- * clk_obs1(gpio13/bit8), clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
- * clk_obs4(gpio16/bit11), clk_obs5(gpio17/bit12)
- * clk_obs0(gpio1/bit19), 6(gpio11/bit20)
- */
- ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~((0x1f<<8)|(0x3<<19))));
+ /* Disable clock obs
+ * clk_obs1(gpio13/bit8), clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
+ * clk_obs4(gpio16/bit11), clk_obs5(gpio17/bit12)
+ * clk_obs0(gpio1/bit19), 6(gpio11/bit20)
+ */
+ ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~((0x1f<<8)|(0x3<<19))));
- /* Enable eth Switch LEDs */
- ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | (0x1f<<3)));
+ /* Enable eth Switch LEDs */
+ ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | (0x1f<<3)));
- //Turn on status leds:
- //set output enable
- ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) |(1<<0)));
+ //Turn on status leds:
+ //set output enable
+ ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) |(1<<0)));
- //set WLAN LED output to low (reverse polarity LED)
- //ar7240_reg_wr(AR7240_GPIO_CLEAR, (1<<0));
+ //set WLAN LED output to low (reverse polarity LED)
+ //ar7240_reg_wr(AR7240_GPIO_CLEAR, (1<<0));
- /* Clear AR7240_GPIO_FUNC BIT2 to ensure that software can control LED5(GPIO16) and LED6(GPIO17) */
- ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~(0x1<<2)));
+ /* Clear AR7240_GPIO_FUNC BIT2 to ensure that software can control LED5(GPIO16) and LED6(GPIO17) */
+ ar7240_reg_wr(AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~(0x1<<2)));
#else
/* Disable clock obs
* clk_obs1(gpio13/bit8), clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
#else
#error "Custom GPIO config in gpio_config() not defined!"
#endif
+ return 0;
}
-int ar7240_mem_config(void){
+int ar7240_mem_config(void)
+{
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
#ifndef COMPRESSED_UBOOT
hornet_ddr_init();
ar7240_reg_wr(AR7240_DDR_TAP_CONTROL1, CFG_DDR_TAP1_VAL);
#endif
- gpio_config();
all_led_off();
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
#endif
// return memory size
- return(ar7240_ddr_find_size());
+ return ar7240_ddr_find_size();
}
-long int initdram(){
- return((long int)ar7240_mem_config());
-}
-
-#ifndef COMPRESSED_UBOOT
-int checkboard(void){
- printf(BOARD_CUSTOM_STRING"\n\n");
- return(0);
-}
-#endif
-
-/*
- * Returns a string with memory type preceded by a space sign
- */
-const char* print_mem_type(void){
-/*
- * WR720N v3 (CH version) has wrong bootstrap configuration,
- * so the memory type cannot be recognized automatically
- */
-#if defined(CONFIG_FOR_TPLINK_WR720N_V3)
- return " DDR 16-bit";
-#else
- unsigned int reg_val;
-
- reg_val = (ar7240_reg_rd(HORNET_BOOTSTRAP_STATUS) & HORNET_BOOTSTRAP_MEM_TYPE_MASK) >> HORNET_BOOTSTRAP_MEM_TYPE_SHIFT;
-
- switch(reg_val){
- case 0:
- return " SDRAM";
- break;
-
- case 1:
- return " DDR 16-bit";
- break;
-
- case 2:
- return " DDR2 16-bit";
- break;
-
- default:
- return "";
- break;
- }
-#endif /* defined(CONFIG_FOR_TPLINK_WR720N_V3) */
+long int dram_init()
+{
+ return (long int)ar7240_mem_config();
}
#include <tinf.h>
#include "LzmaWrapper.h"
-//#define DEBUG_ENABLE_BOOTSTRAP_PRINTF
+/*#define DEBUG_ENABLE_BOOTSTRAP_PRINTF*/
DECLARE_GLOBAL_DATA_PTR;
-#if (((CFG_ENV_ADDR+CFG_ENV_SIZE) < BOOTSTRAP_CFG_MONITOR_BASE) || (CFG_ENV_ADDR >= (BOOTSTRAP_CFG_MONITOR_BASE + CFG_MONITOR_LEN)) ) || defined(CFG_ENV_IS_IN_NVRAM)
-#define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE)
+#if (((CFG_ENV_ADDR+CFG_ENV_SIZE) < BOOTSTRAP_CFG_MONITOR_BASE) || \
+ (CFG_ENV_ADDR >= (BOOTSTRAP_CFG_MONITOR_BASE + CFG_MONITOR_LEN))) \
+ || defined(CFG_ENV_IS_IN_NVRAM)
+ #define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE)
#else
-#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
+ #define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
#endif
#undef DEBUG
/*
* The Malloc area is immediately below the monitor copy in DRAM
*/
-static void mem_malloc_init(ulong dest_addr){
-// ulong dest_addr = BOOTSTRAP_CFG_MONITOR_BASE + gd->reloc_off;
-
+static void mem_malloc_init(ulong dest_addr)
+{
+ /* ulong dest_addr = BOOTSTRAP_CFG_MONITOR_BASE + gd->reloc_off; */
mem_malloc_end = dest_addr;
mem_malloc_start = dest_addr - TOTAL_MALLOC_LEN;
mem_malloc_brk = mem_malloc_start;
memset((void *)mem_malloc_start, 0, mem_malloc_end - mem_malloc_start);
}
-void *malloc(unsigned int size){
- if(size < (mem_malloc_end - mem_malloc_start)){
+void *malloc(unsigned int size)
+{
+ if (size < (mem_malloc_end - mem_malloc_start)) {
mem_malloc_start += size;
-
- return((void *)(mem_malloc_start - size));
+ return (void *)(mem_malloc_start - size);
}
- return(NULL);
+ return NULL;
}
-void *realloc(void *src, unsigned int size){
- return(NULL);
+void *realloc(void *src, unsigned int size)
+{
+ return NULL;
}
-void free(void *src){
+void free(void *src)
+{
return;
}
-static int init_func_ram(void){
- if((gd->ram_size = initdram()) > 0){
- return(0);
- }
- return(1);
+static int init_func_ram(void)
+{
+ if ((gd->ram_size = dram_init()) > 0)
+ return 0;
+
+ return 1;
}
/*
typedef int(init_fnc_t)(void);
init_fnc_t *init_sequence[] = { timer_init,
- init_func_ram,
- NULL, };
+ init_func_ram,
+ NULL, };
-void bootstrap_board_init_f(ulong bootflag){
+void bootstrap_board_init_f(ulong bootflag)
+{
gd_t gd_data, *id;
bd_t *bd;
init_fnc_t **init_fnc_ptr;
ulong addr, addr_sp, len = (ulong)&uboot_end_bootstrap - BOOTSTRAP_CFG_MONITOR_BASE;
ulong *s;
- /* Pointer is writable since we allocated a register for it.
- */
+ /* Pointer is writable since we allocated a register for it */
gd = &gd_data;
- /* compiler optimization barrier needed for GCC >= 3.4 */
+ /* Compiler optimization barrier needed for GCC >= 3.4 */
__asm__ __volatile__("": : :"memory");
memset((void *)gd, 0, sizeof(gd_t));
- for(init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr){
- if((*init_fnc_ptr)() != 0){
+ for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
+ if ((*init_fnc_ptr)() != 0)
hang();
- }
}
/*
* Now that we have DRAM mapped and working, we can
- * relocate the code and continue running from DRAM.
+ * relocate the code and continue running from DRAM
*/
addr = CFG_SDRAM_BASE + gd->ram_size;
/*
- * We can reserve some RAM "on top" here.
- * round down to next 4 kB limit.
+ * We can reserve some RAM "on top" here,
+ * round down to next 4 kB limit
*/
addr &= ~(4096 - 1);
/*
- * Reserve memory for U-Boot code, data & bss
+ * Reserve memory for U-Boot code, data & bss,
* round down to next 16 kB limit
*/
addr -= len;
addr &= ~(16 * 1024 - 1);
- /*
- * Reserve memory for malloc() arena.
- */
+ /* Reserve memory for malloc() arena */
addr_sp = addr - TOTAL_MALLOC_LEN;
/*
addr_sp -= sizeof(gd_t);
id = (gd_t *)addr_sp;
- /*
- * Reserve memory for boot params.
- */
+ /* Reserve memory for boot params */
addr_sp -= CFG_BOOTPARAMS_LEN;
bd->bi_boot_params = addr_sp;
/*
- * Finally, we set up a new (bigger) stack.
+ * Finally, we set up a new (bigger) stack
*
- * Leave some safety gap for SP, force alignment on 16 byte boundary
- * Clear initial stack frame
+ * Leave some safety gap for SP, force alignment on 16 byte boundary,
+ * clear initial stack frame
*/
addr_sp -= 16;
addr_sp &= ~0xF;
addr_sp = (ulong)s;
/*
- * Save local variables to board info struct
+ * Save local variables to board info struct:
+ * - start of DRAM memory
+ * - size of DRAM memory in bytes
*/
- bd->bi_memstart = CFG_SDRAM_BASE; /* start of DRAM memory */
- bd->bi_memsize = gd->ram_size; /* size of DRAM memory in bytes */
+ bd->bi_memstart = CFG_SDRAM_BASE;
+ bd->bi_memsize = gd->ram_size;
memcpy(id, (void *)gd, sizeof(gd_t));
bootstrap_relocate_code(addr_sp, id, addr);
-
/* NOTREACHED - relocate_code() does not return */
}
*
************************************************************************
*/
-void bootstrap_board_init_r(gd_t *id, ulong dest_addr){
+void bootstrap_board_init_r(gd_t *id, ulong dest_addr)
+{
int i;
ulong addr;
ulong data, len, checksum;
unsigned int destLen;
int (*fn)(int);
- /* initialize malloc() area */
+ /* Initialize malloc() area */
mem_malloc_init(dest_addr);
addr = (ulong)((char *)(BOOTSTRAP_CFG_MONITOR_BASE + ((ulong)&uboot_end_data_bootstrap - dest_addr)));
memmove(&header, (char *)addr, sizeof(image_header_t));
- if(ntohl(hdr->ih_magic) != IH_MAGIC){
+ if (ntohl(hdr->ih_magic) != IH_MAGIC)
return;
- }
data = (ulong)&header;
len = sizeof(image_header_t);
checksum = ntohl(hdr->ih_hcrc);
hdr->ih_hcrc = 0;
- if(tinf_crc32((unsigned char *)data, len) != checksum){
+ if (tinf_crc32((unsigned char *)data, len) != checksum)
return;
- }
data = addr + sizeof(image_header_t);
len = ntohl(hdr->ih_size);
#ifdef CONFIG_LZMA
i = lzma_inflate((unsigned char *)data, len, (unsigned char*)ntohl(hdr->ih_load), (int *)&destLen);
- if(i != LZMA_RESULT_OK){
- //do_reset(cmdtp, flag, argc, argv);
+ if (i != LZMA_RESULT_OK)
return;
- }
#endif
fn = (void *)ntohl(hdr->ih_load);
hang();
}
-void hang(void){
- for(;;);
+void hang(void)
+{
+ for (;;)
+ ;
}
#include <version.h>
#include <net.h>
#include <environment.h>
-#include "ar7240_soc.h"
-#include "../board/ar7240/common/ar7240_flash.h"
DECLARE_GLOBAL_DATA_PTR;
-//#define BOARD_DEBUG
+/*#define BOARD_DEBUG*/
-#if ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) || (CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) ) || defined(CFG_ENV_IS_IN_NVRAM)
-#define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE)
+#if (((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) || \
+ (CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN))) \
+ || defined(CFG_ENV_IS_IN_NVRAM)
+ #define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE)
#else
-#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
+ #define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
#endif
-#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
-
extern ulong uboot_end_data;
extern ulong uboot_end;
-extern int timer_init(void);
-
-extern void all_led_on(void);
-extern void all_led_off(void);
-extern const char* print_mem_type(void);
-#ifdef CONFIG_WASP
-extern void ar7240_sys_frequency(u32 *cpu_freq, u32 *ddr_freq, u32 *ahb_freq);
-#else
-extern void ar933x_sys_frequency(u32 *cpu_freq, u32 *ddr_freq, u32 *ahb_freq);
-#endif
-
ulong monitor_flash_len;
-const char version_string[] = U_BOOT_VERSION" (" __DATE__ ", " __TIME__ ")";
+const char version_string[] = U_BOOT_VERSION;
-// Begin and End of memory area for malloc(), and current "brk"
+/* Begin and end of memory area for malloc(), and current "brk" */
static ulong mem_malloc_start;
static ulong mem_malloc_end;
static ulong mem_malloc_brk;
-// The Malloc area is immediately below the monitor copy in DRAM
-static void mem_malloc_init(void){
+/* The Malloc area is immediately below the monitor copy in DRAM */
+static void mem_malloc_init(void)
+{
ulong dest_addr = CFG_MONITOR_BASE + gd->reloc_off;
mem_malloc_end = dest_addr;
memset((void *)mem_malloc_start, 0, mem_malloc_end - mem_malloc_start);
}
-void *sbrk(ptrdiff_t increment){
+void *sbrk(ptrdiff_t increment)
+{
ulong old = mem_malloc_brk;
ulong new = old + increment;
- if((new < mem_malloc_start) || (new > mem_malloc_end)){
+ if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
printf("## Error: sbrk: out of memory (%d requested > %d available)\n",
- increment, mem_malloc_end - old);
- return((void*)MORECORE_FAILURE);
+ increment, mem_malloc_end - old);
+
+ return (void*)MORECORE_FAILURE;
}
+
mem_malloc_brk = new;
- return((void *)old);
+
+ return (void *)old;
}
-static int display_banner(void){
-#ifndef CONFIG_SKIP_LOWLEVEL_INIT
- printf("\n\n*********************************************\n* %s *\n*********************************************\n\n", version_string);
-#else
- printf("\n\n*********************************************\n");
- printf("* *\n");
- printf("* RAM VERSION *\n");
- printf("* *\n");
- printf("*********************************************\n* %s *\n*********************************************\n\n", version_string);
+static int display_banner(void)
+{
+ puts("\n");
+
+#ifdef CONFIG_SKIP_LOWLEVEL_INIT
+ puts("\n***************************************"
+ "\n* *"
+ "\n* RAM VERSION *"
+ "\n* *");
#endif
- return(0);
+
+ printf("\n***************************************"
+ "\n* %s *"
+ "\n* " __DATE__ ", " __TIME__ " *"
+ "\n***************************************\n\n",
+ version_string);
+
+ return 0;
}
-static int init_baudrate(void){
+static int baudrate_init(void)
+{
char *s;
- if((s = getenv("baudrate")) != NULL){
+ if ((s = getenv("baudrate")) != NULL) {
gd->baudrate = simple_strtoul(s, NULL, 10);
} else {
gd->baudrate = CONFIG_BAUDRATE;
}
- return(0);
+
+ return 0;
}
#ifndef COMPRESSED_UBOOT
-static int init_func_ram(void){
- puts("DRAM: ");
-
- if((gd->ram_size = initdram()) > 0){
-#ifndef CONFIG_SKIP_LOWLEVEL_INIT
- print_size(gd->ram_size, print_mem_type());
-#else
- // TODO: fix me!
- print_size(gd->ram_size + 1024*1024, print_mem_type());
-#endif
- puts("\n");
- return(0);
- }
+static int init_func_ram(void)
+{
+ if ((gd->ram_size = dram_init()) > 0)
+ return 0;
puts("## Error on RAM initialization!\n");
- return(1);
+ return 1;
}
#endif
#ifndef COMPRESSED_UBOOT
init_fnc_t *init_sequence[] = { timer_init,
- env_init, /* initialize environment */
- init_baudrate, /* initialze baudrate settings */
- serial_init, /* serial communications setup */
- console_init_f,
- display_banner, /* say that we are here */
- checkboard,
- init_func_ram,
- NULL, };
+ env_init,
+ baudrate_init,
+ gpio_init,
+ serial_init,
+ console_init_f,
+ display_banner,
+ init_func_ram,
+ NULL, };
#else
-init_fnc_t *init_sequence[] = { env_init, /* initialize environment */
- init_baudrate, /* initialze baudrate settings */
- serial_init, /* serial communications setup */
- console_init_f, /* initialize console */
- display_banner, /* say that we are here -> print baner */
- NULL, };
+init_fnc_t *init_sequence[] = { env_init,
+ baudrate_init,
+ gpio_init,
+ serial_init,
+ console_init_f,
+ display_banner,
+ NULL, };
#endif
/*
* BOARD INITIALIZATION
*
*/
-void board_init_f(ulong bootflag){
+void board_init_f(ulong bootflag)
+{
gd_t gd_data, *id;
bd_t *bd;
init_fnc_t **init_fnc_ptr;
ulong addr, addr_sp, len = (ulong)&uboot_end - CFG_MONITOR_BASE;
ulong *s;
- // Pointer is writable since we allocated a register for it.
+ /* Pointer is writable since we allocated a register for it */
gd = &gd_data;
- /* compiler optimization barrier needed for GCC >= 3.4 */
+ /* Compiler optimization barrier needed for GCC >= 3.4 */
__asm__ __volatile__("": : :"memory");
memset((void *)gd, 0, sizeof(gd_t));
- // loop trough init_sequence
- for(init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr){
- if((*init_fnc_ptr)() != 0){
+ /* Loop trough init_sequence */
+ for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
+ if ((*init_fnc_ptr)() != 0)
hang();
- }
}
#ifdef COMPRESSED_UBOOT
- // print BOARD_CUSTOM_STRING
- puts(BOARD_CUSTOM_STRING"\n\n");
-
- // count ram size and print it
gd->ram_size = bootflag;
- puts("DRAM: ");
- print_size(gd->ram_size, print_mem_type());
- puts("\n");
#endif
/*
* Now that we have DRAM mapped and working, we can
- * relocate the code and continue running from DRAM.
+ * relocate the code and continue running from DRAM
*/
addr = CFG_SDRAM_BASE + gd->ram_size;
/*
- * We can reserve some RAM "on top" here.
- */
-
- /*
- * round down to next 4 kB limit.
+ * We can reserve some RAM "on top" here,
+ * round down to next 4 kB limit
*/
addr &= ~(4096 - 1);
#endif
/*
- * Reserve memory for U-Boot code, data & bss
+ * Reserve memory for U-Boot code, data & bss,
* round down to next 16 kB limit
*/
addr -= len;
printf("Reserving %ldk for U-Boot at: %08lX\n", len >> 10, addr);
#endif
- /*
- * Reserve memory for malloc() arena.
- */
+ /* Reserve memory for malloc() arena */
addr_sp = addr - TOTAL_MALLOC_LEN;
#ifdef BOARD_DEBUG
printf("Reserving %d Bytes for Global Data at: %08lX\n", sizeof(gd_t), addr_sp);
#endif
- /* Reserve memory for boot params.
- */
+ /* Reserve memory for boot params */
addr_sp -= CFG_BOOTPARAMS_LEN;
bd->bi_boot_params = addr_sp;
#endif
/*
- * Finally, we set up a new (bigger) stack.
+ * Finally, we set up a new (bigger) stack
*
- * Leave some safety gap for SP, force alignment on 16 byte boundary
- * Clear initial stack frame
+ * Leave some safety gap for SP, force alignment on 16 byte boundary,
+ * clear initial stack frame
*/
addr_sp -= 16;
addr_sp &= ~0xF;
#endif
/*
- * Save local variables to board info struct
+ * Save local variables to board info struct:
+ * - start of DRAM memory
+ * - size of DRAM memory in bytes
+ * - console baudrate
*/
- bd->bi_memstart = CFG_SDRAM_BASE; /* start of DRAM memory */
- bd->bi_memsize = gd->ram_size; /* size of DRAM memory in bytes */
- bd->bi_baudrate = gd->baudrate; /* Console Baudrate */
+ bd->bi_memstart = CFG_SDRAM_BASE;
+ bd->bi_memsize = gd->ram_size;
+ bd->bi_baudrate = gd->baudrate;
memcpy(id, (void *)gd, sizeof(gd_t));
*
************************************************************************
*/
-void board_init_r(gd_t *id, ulong dest_addr){
+void board_init_r(gd_t *id, ulong dest_addr)
+{
cmd_tbl_t *cmdtp;
- ulong size;
extern void malloc_bin_reloc(void);
#ifndef CFG_ENV_IS_NOWHERE
- extern char * env_name_spec;
+ extern char *env_name_spec;
#endif
bd_t *bd;
char *s;
-#if defined(OFFSET_MAC_ADDRESS)
- unsigned char buffer[6];
-#endif
- unsigned int ahb_freq, ddr_freq, cpu_freq, spi_freq;
gd = id;
- gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */
+
+ /* Tell others: relocation done */
+ gd->flags |= GD_FLG_RELOC;
/* bd -> board data */
bd = gd->bd;
- /* get CPU/RAM/AHB clocks */
-#ifdef CONFIG_WASP
- ar7240_sys_frequency(&cpu_freq, &ddr_freq, &ahb_freq);
-#else
- ar933x_sys_frequency(&cpu_freq, &ddr_freq, &ahb_freq);
-#endif
-
- /* set bi_cfg_hz */
- bd->bi_cfg_hz = (unsigned long)(cpu_freq >> 1);
-
#ifdef BOARD_DEBUG
printf("Now running in RAM - U-Boot at: %08lX\n", dest_addr);
#endif
+ /* We need (half of the) main CPU clock for udelay */
+ bd->bi_cfg_hz = (u32)(main_cpu_clk() >> 1);
+
gd->reloc_off = dest_addr - CFG_MONITOR_BASE;
monitor_flash_len = (ulong)&uboot_end_data - dest_addr;
- /*
- * We have to relocate the command table manually
- */
- for(cmdtp = &__u_boot_cmd_start; cmdtp != &__u_boot_cmd_end; cmdtp++){
+ /* We have to relocate the command table manually */
+ for (cmdtp = &__u_boot_cmd_start; cmdtp != &__u_boot_cmd_end; cmdtp++) {
ulong addr;
addr = (ulong)(cmdtp->cmd) + gd->reloc_off;
addr = (ulong)(cmdtp->name) + gd->reloc_off;
cmdtp->name = (char *)addr;
- if(cmdtp->usage){
+ if (cmdtp->usage) {
addr = (ulong)(cmdtp->usage) + gd->reloc_off;
cmdtp->usage = (char *)addr;
}
+
#ifdef CFG_LONGHELP
- if(cmdtp->help){
+ if (cmdtp->help) {
addr = (ulong)(cmdtp->help) + gd->reloc_off;
cmdtp->help = (char *)addr;
}
#endif
}
- /* there are some other pointer constants we must deal with */
+ /* There are some other pointer constants we must deal with */
#ifndef CFG_ENV_IS_NOWHERE
env_name_spec += gd->reloc_off;
#endif
- /* configure available FLASH banks */
- size = flash_init();
-
+ /* Configure available FLASH banks */
bd->bi_flashstart = CFG_FLASH_BASE;
- bd->bi_flashsize = size;
-
- // calculate SPI clock (we need to set bit 0 to 1 in SPI_FUNC_SELECT to access SPI registers)
- ar7240_reg_wr(AR7240_SPI_FS, 0x01);
- spi_freq = ahb_freq / (((ar7240_reg_rd(AR7240_SPI_CLOCK) & 0x3F) + 1) * 2);
- ar7240_reg_wr(AR7240_SPI_FS, 0x0);
-
- // make MHz from Hz
- cpu_freq /= 1000000;
- ddr_freq /= 1000000;
- ahb_freq /= 1000000;
- spi_freq /= 1000000;
-
- printf("CLOCKS: %d/%d/%d/%d MHz (CPU/RAM/AHB/SPI)\n", cpu_freq, ddr_freq, ahb_freq, spi_freq);
- puts("\n");
+ bd->bi_flashsize = flash_init();
#if CFG_MONITOR_BASE == CFG_FLASH_BASE
- bd->bi_flashoffset = monitor_flash_len; /* reserved area for U-Boot */
+ /* Reserved area for U-Boot */
+ bd->bi_flashoffset = monitor_flash_len;
#else
bd->bi_flashoffset = 0;
#endif
- /* initialize malloc() area */
+ /* Initialize malloc() area */
mem_malloc_init();
malloc_bin_reloc();
- /* relocate environment function pointers etc. */
+ /* Relocate environment function pointers etc. */
env_relocate();
- /* board MAC address */
-#if defined(OFFSET_MAC_ADDRESS)
- memcpy(buffer, (void *)(CFG_FLASH_BASE + OFFSET_MAC_DATA_BLOCK + OFFSET_MAC_ADDRESS), 6);
-
- /*
- * check first LSBit (I/G bit) and second LSBit (U/L bit) in MSByte of vendor part
- * both of them should be 0:
- * I/G bit == 0 -> Individual MAC address (unicast address)
- * U/L bit == 0 -> Burned-In-Address (BIA) MAC address
- */
- if(CHECK_BIT((buffer[0] & 0xFF), 0) != 0 || CHECK_BIT((buffer[0] & 0xFF), 1) != 0){
- // 00-03-7F (Atheros Communications, Inc.)
- bd->bi_enetaddr[0] = 0x00;
- bd->bi_enetaddr[1] = 0x03;
- bd->bi_enetaddr[2] = 0x7f;
- bd->bi_enetaddr[3] = 0x09;
- bd->bi_enetaddr[4] = 0x0b;
- bd->bi_enetaddr[5] = 0xad;
-
- printf("## Error: MAC is invalid, using fixed!\n\n");
- }
-#else
- // fake MAC
- // 00-03-7F (Atheros Communications, Inc.)
- bd->bi_enetaddr[0] = 0x00;
- bd->bi_enetaddr[1] = 0x03;
- bd->bi_enetaddr[2] = 0x7f;
- bd->bi_enetaddr[3] = 0x09;
- bd->bi_enetaddr[4] = 0x0b;
- bd->bi_enetaddr[5] = 0xad;
-
- printf("** Warning: using fixed MAC address!\n\n");
-#endif
-
- /* IP Address */
+ /* Local device IP address */
bd->bi_ip_addr = getenv_IPaddr("ipaddr");
#if defined(CONFIG_PCI)
- /*
- * Do pci configuration
- */
+ /* Do pci configuration */
pci_init();
#endif
- /** leave this here (after malloc(), environment and PCI are working) **/
+ /* Leave this here (after malloc(), environment and PCI are working) */
/* Initialize devices */
devices_init();
/* Initialize the console (after the relocation and devices init) */
console_init_r();
- /** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
/* Initialize from environment */
- if((s = getenv("loadaddr")) != NULL){
+ if ((s = getenv("loadaddr")) != NULL)
load_addr = simple_strtoul(s, NULL, 16);
- }
#if (CONFIG_COMMANDS & CFG_CMD_NET)
- if((s = getenv("bootfile")) != NULL){
+ if ((s = getenv("bootfile")) != NULL)
copy_filename(BootFile, s, sizeof(BootFile));
- }
-#endif /* CFG_CMD_NET */
+#endif
- /* blink all available LEDs */
- printf("LED on during eth initialization...\n\n");
- all_led_on();
+ /* Init MAC address in board data info */
+ macaddr_init(bd->bi_enetaddr);
+
+ /* Print some information about board */
+ print_board_info();
#if (CONFIG_COMMANDS & CFG_CMD_NET)
+ all_led_on();
eth_initialize(gd->bd);
-#endif
-
all_led_off();
+#endif
- /* main_loop() can return to retry autoboot, if so just run it again. */
- for(;;){
+ /* main_loop() can return to retry autoboot, if so just run it again */
+ for (;;)
main_loop();
- }
/* NOTREACHED - no way out of command loop except booting */
}
-void hang(void){
+void hang(void)
+{
puts("## ERROR ##\n");
- for(;;);
+
+ for (;;)
+ ;
}