|
|
|
@ -13,15 +13,59 @@ |
|
|
|
|
|
|
|
|
|
#include <asm/io.h> |
|
|
|
|
#include <asm/processor.h> |
|
|
|
|
#include <ambapp.h> |
|
|
|
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR; |
|
|
|
|
|
|
|
|
|
extern void _reset_reloc(void); |
|
|
|
|
|
|
|
|
|
int leon_cpu_cnt = 1; |
|
|
|
|
int leon_ver = 3; |
|
|
|
|
unsigned int leon_cpu_freq = CONFIG_SYS_CLK_FREQ; |
|
|
|
|
|
|
|
|
|
int cpu_freq(void) |
|
|
|
|
{ |
|
|
|
|
ambapp_ahbdev dev; |
|
|
|
|
|
|
|
|
|
if (leon_ver == 3) { |
|
|
|
|
ambapp_ahbmst_find(&ambapp_plb, VENDOR_GAISLER, |
|
|
|
|
GAISLER_LEON3, 0, &dev); |
|
|
|
|
} else { |
|
|
|
|
ambapp_ahbmst_find(&ambapp_plb, VENDOR_GAISLER, |
|
|
|
|
GAISLER_LEON4, 0, &dev); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
leon_cpu_freq = ambapp_bus_freq(&ambapp_plb, dev.ahb_bus_index); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int checkcpu(void) |
|
|
|
|
{ |
|
|
|
|
int cnt; |
|
|
|
|
char str[4]; |
|
|
|
|
|
|
|
|
|
/* check LEON version here */ |
|
|
|
|
printf("CPU: LEON3\n"); |
|
|
|
|
cnt = ambapp_ahbmst_count(&ambapp_plb, VENDOR_GAISLER, GAISLER_LEON3); |
|
|
|
|
if (cnt <= 0) { |
|
|
|
|
cnt = ambapp_ahbmst_count(&ambapp_plb, VENDOR_GAISLER, |
|
|
|
|
GAISLER_LEON4); |
|
|
|
|
if (cnt > 0) |
|
|
|
|
leon_ver = 4; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cpu_freq(); |
|
|
|
|
|
|
|
|
|
str[0] = '\0'; |
|
|
|
|
if (cnt > 1) { |
|
|
|
|
leon_cpu_cnt = cnt; |
|
|
|
|
str[0] = '0' + cnt; |
|
|
|
|
str[1] = 'x'; |
|
|
|
|
str[2] = '\0'; |
|
|
|
|
} |
|
|
|
|
printf("CPU: %sLEON%d @ %dMHz\n", str, leon_ver, |
|
|
|
|
leon_cpu_freq / 1000000); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|