]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-kirkwood/common.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
[linux-2.6-omap-h63xx.git] / arch / arm / mach-kirkwood / common.c
index c8516e352d1c2537b06599acbe5f256ec5effe61..0bb1fbd84ccb9f561cbb6cb6ebc14cdc485f6784 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/mv643xx_eth.h>
 #include <linux/ata_platform.h>
 #include <linux/spi/orion_spi.h>
+#include <net/dsa.h>
 #include <asm/page.h>
 #include <asm/timex.h>
 #include <asm/mach/map.h>
@@ -151,6 +152,40 @@ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data)
 }
 
 
+/*****************************************************************************
+ * Ethernet switch
+ ****************************************************************************/
+static struct resource kirkwood_switch_resources[] = {
+       {
+               .start  = 0,
+               .end    = 0,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device kirkwood_switch_device = {
+       .name           = "dsa",
+       .id             = 0,
+       .num_resources  = 0,
+       .resource       = kirkwood_switch_resources,
+};
+
+void __init kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq)
+{
+       if (irq != NO_IRQ) {
+               kirkwood_switch_resources[0].start = irq;
+               kirkwood_switch_resources[0].end = irq;
+               kirkwood_switch_device.num_resources = 1;
+       }
+
+       d->mii_bus = &kirkwood_ge00_shared.dev;
+       d->netdev = &kirkwood_ge00.dev;
+       kirkwood_switch_device.dev.platform_data = d;
+
+       platform_device_register(&kirkwood_switch_device);
+}
+
+
 /*****************************************************************************
  * SoC RTC
  ****************************************************************************/
@@ -588,9 +623,15 @@ static char * __init kirkwood_id(void)
        }
 }
 
-static int __init is_l2_writethrough(void)
+static void __init kirkwood_l2_init(void)
 {
-       return !!(readl(L2_CONFIG_REG) & L2_WRITETHROUGH);
+#ifdef CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH
+       writel(readl(L2_CONFIG_REG) | L2_WRITETHROUGH, L2_CONFIG_REG);
+       feroceon_l2_init(1);
+#else
+       writel(readl(L2_CONFIG_REG) & ~L2_WRITETHROUGH, L2_CONFIG_REG);
+       feroceon_l2_init(0);
+#endif
 }
 
 void __init kirkwood_init(void)
@@ -605,6 +646,6 @@ void __init kirkwood_init(void)
        kirkwood_setup_cpu_mbus();
 
 #ifdef CONFIG_CACHE_FEROCEON_L2
-       feroceon_l2_init(is_l2_writethrough());
+       kirkwood_l2_init();
 #endif
 }