#include <common.h>
#include <command.h>
+#include <asm/mipsregs.h>
+#include <asm/addrspace.h>
#include <malloc.h>
#include <devices.h>
#include <version.h>
#include <net.h>
#include <environment.h>
+#include "ar7240_soc.h"
+#include "../board/ar7240/common/ar7240_flash.h"
DECLARE_GLOBAL_DATA_PTR;
extern void all_led_on(void);
extern void all_led_off(void);
+extern const char* print_mem_type(void);
+extern void ar7240_sys_frequency(u32 *cpu_freq, u32 *ddr_freq, u32 *ahb_freq);
ulong monitor_flash_len;
}
static int display_banner(void){
- printf("\n\n*****************************************\n* %s *\n*****************************************\n\n", version_string);
+ printf("\n\n*********************************************\n* %s *\n*********************************************\n\n", version_string);
return(0);
}
#ifndef COMPRESSED_UBOOT
static int init_func_ram(void){
- puts("DRAM: ");
+ puts("DRAM: ");
if((gd->ram_size = initdram()) > 0){
- print_size (gd->ram_size, "\n");
-
+ print_size(gd->ram_size, print_mem_type());
+ puts("\n");
return(0);
}
// count ram size and print it
gd->ram_size = bootflag;
- puts("DRAM: ");
- print_size(gd->ram_size, "\n");
+ puts("DRAM: ");
+ print_size(gd->ram_size, print_mem_type());
+ puts("\n");
#endif
/*
int i;
char *s;
unsigned char buffer[6];
+ unsigned int ahb_freq, ddr_freq, cpu_freq, spi_freq;
gd = id;
gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */
+ /* bd -> board data */
+ bd = gd->bd;
+
+ /* get CPU/RAM/AHB clocks */
+ ar7240_sys_frequency(&cpu_freq, &ddr_freq, &ahb_freq);
+
+ /* 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
/* configure available FLASH banks */
size = flash_init();
- puts("\n\n");
-
- bd = gd->bd;
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");
+
#if CFG_MONITOR_BASE == CFG_FLASH_BASE
bd->bi_flashoffset = monitor_flash_len; /* reserved area for U-Boot */
#else
env_relocate();
/* board MAC address */
+#if defined(OFFSET_MAC_ADDRESS)
memcpy(buffer, (void *)(CFG_FLASH_BASE + OFFSET_MAC_DATA_BLOCK + OFFSET_MAC_ADDRESS), 6);
+#else
+ // fake MAC
+ // 00-03-7F (Atheros Communications, Inc.)
+ buffer[0] = 0x00;
+ buffer[1] = 0x03;
+ buffer[2] = 0x7f;
+ buffer[3] = 0x09;
+ buffer[4] = 0x0b;
+ buffer[5] = 0xad;
+#endif
for(i = 0; i < 6; ++i){
bd->bi_enetaddr[i] = buffer[i];