|
|
@@ -192,7 +192,7 @@ static struct platform_device ar5312_gpio_leds = {
|
|
|
static char __init *ar5312_flash_limit(void)
|
|
|
{
|
|
|
u32 ctl;
|
|
|
- /*
|
|
|
+ /*
|
|
|
* Configure flash bank 0.
|
|
|
* Assume 8M window size. Flash will be aliased if it's smaller
|
|
|
*/
|
|
|
@@ -205,7 +205,7 @@ static char __init *ar5312_flash_limit(void)
|
|
|
(sysRegRead(AR531X_FLASHCTL0) & FLASHCTL_MW);
|
|
|
|
|
|
sysRegWrite(AR531X_FLASHCTL0, ctl);
|
|
|
-
|
|
|
+
|
|
|
/* Disable other flash banks */
|
|
|
sysRegWrite(AR531X_FLASHCTL1,
|
|
|
sysRegRead(AR531X_FLASHCTL1) & ~(FLASHCTL_E | FLASHCTL_AC));
|
|
|
@@ -219,7 +219,7 @@ static char __init *ar5312_flash_limit(void)
|
|
|
static struct ar531x_config __init *init_wmac(int unit)
|
|
|
{
|
|
|
struct ar531x_config *config;
|
|
|
-
|
|
|
+
|
|
|
config = (struct ar531x_config *) kzalloc(sizeof(struct ar531x_config), GFP_KERNEL);
|
|
|
config->board = board_config;
|
|
|
config->radio = radio_config;
|
|
|
@@ -228,7 +228,7 @@ static struct ar531x_config __init *init_wmac(int unit)
|
|
|
|
|
|
return config;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
int __init ar5312_init_devices(void)
|
|
|
{
|
|
|
struct ar531x_boarddata *bcfg;
|
|
|
@@ -243,13 +243,13 @@ int __init ar5312_init_devices(void)
|
|
|
ar531x_find_config(ar5312_flash_limit());
|
|
|
bcfg = (struct ar531x_boarddata *) board_config;
|
|
|
|
|
|
-
|
|
|
+
|
|
|
/*
|
|
|
* Chip IDs and hardware detection for some Atheros
|
|
|
* models are really broken!
|
|
|
- *
|
|
|
+ *
|
|
|
* Atheros uses a disabled WMAC0 and Silicon ID of AR5312
|
|
|
- * as indication for AR2312, which is otherwise
|
|
|
+ * as indication for AR2312, which is otherwise
|
|
|
* indistinguishable from the real AR5312.
|
|
|
*/
|
|
|
if (radio_config) {
|
|
|
@@ -262,11 +262,11 @@ int __init ar5312_init_devices(void)
|
|
|
/* AR2313 has CPU minor rev. 10 */
|
|
|
if ((current_cpu_data.processor_id & 0xff) == 0x0a)
|
|
|
mips_machtype = MACH_ATHEROS_AR2313;
|
|
|
-
|
|
|
+
|
|
|
/* AR2312 shares the same Silicon ID as AR5312 */
|
|
|
else if (bcfg->config & BD_ISCASPER)
|
|
|
mips_machtype = MACH_ATHEROS_AR2312;
|
|
|
-
|
|
|
+
|
|
|
/* Everything else is probably AR5312 or compatible */
|
|
|
else
|
|
|
mips_machtype = MACH_ATHEROS_AR5312;
|
|
|
@@ -288,8 +288,10 @@ int __init ar5312_init_devices(void)
|
|
|
|
|
|
ar5312_devs[dev++] = &ar5312_physmap_flash;
|
|
|
|
|
|
+#ifdef CONFIG_LEDS_GPIO
|
|
|
ar5312_leds[0].gpio = bcfg->sysLedGpio;
|
|
|
ar5312_devs[dev++] = &ar5312_gpio_leds;
|
|
|
+#endif
|
|
|
|
|
|
if (!memcmp(bcfg->enet0Mac, "\xff\xff\xff\xff\xff\xff", 6))
|
|
|
memcpy(bcfg->enet0Mac, bcfg->enet1Mac, 6);
|
|
|
@@ -363,7 +365,7 @@ static int __initdata CLOCKCTL1_PREDIVIDE_TABLE[4] = {
|
|
|
5
|
|
|
};
|
|
|
|
|
|
-
|
|
|
+
|
|
|
static unsigned int __init ar5312_cpu_frequency(void)
|
|
|
{
|
|
|
unsigned int result;
|
|
|
@@ -391,7 +393,7 @@ static unsigned int __init ar5312_cpu_frequency(void)
|
|
|
multiplier_shift = AR5312_CLOCKCTL1_MULTIPLIER_SHIFT;
|
|
|
doubler_mask = AR5312_CLOCKCTL1_DOUBLER_MASK;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/*
|
|
|
* Clocking is derived from a fixed 40MHz input clock.
|
|
|
*
|
|
|
@@ -400,9 +402,9 @@ static unsigned int __init ar5312_cpu_frequency(void)
|
|
|
* flash, Timer, Watchdog Timer)
|
|
|
*
|
|
|
* cntFreq = cpuFreq / 2 (use for CPU count/compare)
|
|
|
- *
|
|
|
+ *
|
|
|
* So, for example, with a PLL multiplier of 5, we have
|
|
|
- *
|
|
|
+ *
|
|
|
* cpuFreq = 200MHz
|
|
|
* sysFreq = 50MHz
|
|
|
* cntFreq = 100MHz
|
|
|
@@ -414,7 +416,7 @@ static unsigned int __init ar5312_cpu_frequency(void)
|
|
|
preDivideSelect = (clockCtl1 & predivide_mask) >> predivide_shift;
|
|
|
preDivisor = CLOCKCTL1_PREDIVIDE_TABLE[preDivideSelect];
|
|
|
multiplier = (clockCtl1 & multiplier_mask) >> multiplier_shift;
|
|
|
-
|
|
|
+
|
|
|
if (clockCtl1 & doubler_mask) {
|
|
|
multiplier = multiplier << 1;
|
|
|
}
|
|
|
@@ -446,7 +448,7 @@ void __init ar5312_prom_init(void)
|
|
|
+ (bank1AC ? (1 << (bank1AC+1)) : 0);
|
|
|
memsize <<= 20;
|
|
|
add_memory_region(0, memsize, BOOT_MEM_RAM);
|
|
|
-
|
|
|
+
|
|
|
/* Initialize it to AR5312 for now. Real detection will be done
|
|
|
* in ar5312_init_devices() */
|
|
|
mips_machtype = MACH_ATHEROS_AR5312;
|