summaryrefslogtreecommitdiff
path: root/target/linux/ar7/patches-2.6.30
diff options
context:
space:
mode:
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-01-03 20:19:32 +0000
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-01-03 20:19:32 +0000
commitb6e8369fc62e7fbcdebf7dce0e3a6388ea53a879 (patch)
tree6e739e981b45cb846578f905e9916d8472e43dee /target/linux/ar7/patches-2.6.30
parente6c9aacc5937d1f4a0686ae660d7c6f48f998218 (diff)
[ar7] add support for titan variant (WRTP54G) (#6185)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19022 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar7/patches-2.6.30')
-rw-r--r--target/linux/ar7/patches-2.6.30/930-titan-platform.patch248
-rw-r--r--target/linux/ar7/patches-2.6.30/940-cpmac-titan.patch66
2 files changed, 314 insertions, 0 deletions
diff --git a/target/linux/ar7/patches-2.6.30/930-titan-platform.patch b/target/linux/ar7/patches-2.6.30/930-titan-platform.patch
new file mode 100644
index 0000000000..80f7eb8ad9
--- /dev/null
+++ b/target/linux/ar7/patches-2.6.30/930-titan-platform.patch
@@ -0,0 +1,248 @@
+--- a/arch/mips/ar7/platform.c 2009-11-18 14:57:44.000000000 +0800
++++ b/arch/mips/ar7/platform.c 2009-11-18 15:43:04.000000000 +0800
+@@ -128,6 +128,36 @@
+ },
+ };
+
++static struct resource cpmac_low_res_titan[] = {
++ {
++ .name = "regs",
++ .flags = IORESOURCE_MEM,
++ .start = TITAN_REGS_MAC0,
++ .end = TITAN_REGS_MAC0 + 0x7ff,
++ },
++ {
++ .name = "irq",
++ .flags = IORESOURCE_IRQ,
++ .start = 27,
++ .end = 27,
++ },
++};
++
++static struct resource cpmac_high_res_titan[] = {
++ {
++ .name = "regs",
++ .flags = IORESOURCE_MEM,
++ .start = TITAN_REGS_MAC1,
++ .end = TITAN_REGS_MAC1 + 0x7ff,
++ },
++ {
++ .name = "irq",
++ .flags = IORESOURCE_IRQ,
++ .start = 41,
++ .end = 41,
++ },
++};
++
+ static struct resource vlynq_low_res[] = {
+ {
+ .name = "regs",
+@@ -182,6 +212,60 @@
+ },
+ };
+
++static struct resource vlynq_low_res_titan[] = {
++ {
++ .name = "regs",
++ .flags = IORESOURCE_MEM,
++ .start = TITAN_REGS_VLYNQ0,
++ .end = TITAN_REGS_VLYNQ0 + 0xff,
++ },
++ {
++ .name = "irq",
++ .flags = IORESOURCE_IRQ,
++ .start = 33,
++ .end = 33,
++ },
++ {
++ .name = "mem",
++ .flags = IORESOURCE_MEM,
++ .start = 0x0c000000,
++ .end = 0x0fffffff,
++ },
++ {
++ .name = "devirq",
++ .flags = IORESOURCE_IRQ,
++ .start = 80,
++ .end = 111,
++ },
++};
++
++static struct resource vlynq_high_res_titan[] = {
++ {
++ .name = "regs",
++ .flags = IORESOURCE_MEM,
++ .start = TITAN_REGS_VLYNQ1,
++ .end = TITAN_REGS_VLYNQ1 + 0xff,
++ },
++ {
++ .name = "irq",
++ .flags = IORESOURCE_IRQ,
++ .start = 34,
++ .end = 34,
++ },
++ {
++ .name = "mem",
++ .flags = IORESOURCE_MEM,
++ .start = 0x40000000,
++ .end = 0x43ffffff,
++ },
++ {
++ .name = "devirq",
++ .flags = IORESOURCE_IRQ,
++ .start = 112,
++ .end = 143,
++ },
++};
++
+ static struct resource usb_res[] = {
+ {
+ .name = "regs",
+@@ -226,6 +310,18 @@
+ .phy_mask = 0x7fffffff,
+ };
+
++static struct plat_cpmac_data cpmac_low_data_titan = {
++ .reset_bit = 17,
++ .power_bit = 20,
++ .phy_mask = 0x40000000,
++};
++
++static struct plat_cpmac_data cpmac_high_data_titan = {
++ .reset_bit = 21,
++ .power_bit = 22,
++ .phy_mask = 0x80000000,
++};
++
+ static struct plat_vlynq_data vlynq_low_data = {
+ .ops.on = vlynq_on,
+ .ops.off = vlynq_off,
+@@ -240,6 +336,20 @@
+ .gpio_bit = 19,
+ };
+
++static struct plat_vlynq_data vlynq_low_data_titan = {
++ .ops.on = vlynq_on,
++ .ops.off = vlynq_off,
++ .reset_bit = 15,
++ .gpio_bit = 14,
++};
++
++static struct plat_vlynq_data vlynq_high_data_titan = {
++ .ops.on = vlynq_on,
++ .ops.off = vlynq_off,
++ .reset_bit = 16,
++ .gpio_bit = 7,
++};
++
+ static struct platform_device physmap_flash = {
+ .id = 0,
+ .name = "physmap-flash",
+@@ -273,6 +383,30 @@
+ .num_resources = ARRAY_SIZE(cpmac_high_res),
+ };
+
++static struct platform_device cpmac_low_titan = {
++ .id = 0,
++ .name = "cpmac",
++ .dev = {
++ .dma_mask = &cpmac_dma_mask,
++ .coherent_dma_mask = DMA_32BIT_MASK,
++ .platform_data = &cpmac_low_data_titan,
++ },
++ .resource = cpmac_low_res_titan,
++ .num_resources = ARRAY_SIZE(cpmac_low_res_titan),
++};
++
++static struct platform_device cpmac_high_titan = {
++ .id = 1,
++ .name = "cpmac",
++ .dev = {
++ .dma_mask = &cpmac_dma_mask,
++ .coherent_dma_mask = DMA_32BIT_MASK,
++ .platform_data = &cpmac_high_data_titan,
++ },
++ .resource = cpmac_high_res_titan,
++ .num_resources = ARRAY_SIZE(cpmac_high_res_titan),
++};
++
+ static struct platform_device vlynq_low = {
+ .id = 0,
+ .name = "vlynq",
+@@ -289,6 +423,22 @@
+ .num_resources = ARRAY_SIZE(vlynq_high_res),
+ };
+
++static struct platform_device vlynq_low_titan = {
++ .id = 0,
++ .name = "vlynq",
++ .dev.platform_data = &vlynq_low_data_titan,
++ .resource = vlynq_low_res_titan,
++ .num_resources = ARRAY_SIZE(vlynq_low_res_titan),
++};
++
++static struct platform_device vlynq_high_titan = {
++ .id = 1,
++ .name = "vlynq",
++ .dev.platform_data = &vlynq_high_data_titan,
++ .resource = vlynq_high_res_titan,
++ .num_resources = ARRAY_SIZE(vlynq_high_res_titan),
++};
++
+
+ /* This is proper way to define uart ports, but they are then detected
+ * as xscale and, obviously, don't work...
+@@ -333,6 +483,11 @@
+ { .name = "status", .gpio = 8, .active_low = 1, },
+ };
+
++static struct gpio_led titan_leds[] = {
++ { .name = "status", .gpio = 8, .active_low = 1, },
++ { .name = "wifi", .gpio = 13, .active_low = 1, },
++};
++
+ static struct gpio_led dsl502t_leds[] = {
+ { .name = "status", .gpio = 9, .active_low = 1, },
+ { .name = "ethernet", .gpio = 7, .active_low = 1, },
+@@ -425,7 +580,7 @@
+ /* FIXME: the whole thing is unreliable */
+ prId = prom_getenv("ProductID");
+ usb_prod = prom_getenv("usb_prod");
+-
++
+ /* If we can't get the product id from PROM, use the default LEDs */
+ if (!prId)
+ return;
+@@ -442,6 +597,9 @@
+ } else if (strstr(prId, "DG834")) {
+ ar7_led_data.num_leds = ARRAY_SIZE(dg834g_leds);
+ ar7_led_data.leds = dg834g_leds;
++ } else if (strstr(prId, "CYWM")) {
++ ar7_led_data.num_leds = ARRAY_SIZE(titan_leds);
++ ar7_led_data.leds = titan_leds;
+ }
+ }
+
+@@ -502,14 +660,18 @@
+ if (res)
+ return res;
+
+- ar7_device_disable(vlynq_low_data.reset_bit);
+- res = platform_device_register(&vlynq_low);
++ ar7_device_disable(ar7_is_titan() ? vlynq_low_data_titan.reset_bit :
++ vlynq_low_data.reset_bit);
++ res = platform_device_register(ar7_is_titan() ? &vlynq_low_titan :
++ &vlynq_low);
+ if (res)
+ return res;
+
+ if (ar7_has_high_vlynq()) {
+- ar7_device_disable(vlynq_high_data.reset_bit);
+- res = platform_device_register(&vlynq_high);
++ ar7_device_disable(ar7_is_titan() ? vlynq_high_data_titan.reset_bit :
++ vlynq_high_data.reset_bit);
++ res = platform_device_register(ar7_is_titan() ? &vlynq_high_titan :
++ &vlynq_high);
+ if (res)
+ return res;
+ }
diff --git a/target/linux/ar7/patches-2.6.30/940-cpmac-titan.patch b/target/linux/ar7/patches-2.6.30/940-cpmac-titan.patch
new file mode 100644
index 0000000000..0e3a8b9ce4
--- /dev/null
+++ b/target/linux/ar7/patches-2.6.30/940-cpmac-titan.patch
@@ -0,0 +1,66 @@
+--- a/arch/mips/ar7/platform.c 2009-11-18 15:47:42.000000000 +0800
++++ b/arch/mips/ar7/platform.c 2009-11-19 00:56:05.000000000 +0800
+@@ -677,24 +677,32 @@
+ }
+
+ if (ar7_has_high_cpmac()) {
+- res = fixed_phy_add(PHY_POLL, cpmac_high.id, &fixed_phy_status);
++ res = fixed_phy_add(PHY_POLL, ar7_is_titan()?cpmac_high_titan.id: cpmac_high.id, &fixed_phy_status);
+ if (res && res != -ENODEV)
+ return res;
+
+- cpmac_get_mac(1, cpmac_high_data.dev_addr);
+- res = platform_device_register(&cpmac_high);
++ cpmac_get_mac(1, ar7_is_titan() ? cpmac_high_data_titan.dev_addr:
++ cpmac_high_data.dev_addr);
++ res = platform_device_register(ar7_is_titan() ? &cpmac_high_titan :
++ &cpmac_high);
+ if (res)
+ return res;
+ } else {
+- cpmac_low_data.phy_mask = 0xffffffff;
+- }
++ if (ar7_is_titan())
++ cpmac_low_data_titan.phy_mask = 0xffffffff;
++ else
++ cpmac_low_data.phy_mask = 0xffffffff;
++ }
+
+- res = fixed_phy_add(PHY_POLL, cpmac_low.id, &fixed_phy_status);
++ res = fixed_phy_add(PHY_POLL, ar7_is_titan()?cpmac_low_titan.id:
++ cpmac_low.id, &fixed_phy_status);
+ if (res && res != -ENODEV)
+ return res;
+
+- cpmac_get_mac(0, cpmac_low_data.dev_addr);
+- res = platform_device_register(&cpmac_low);
++ cpmac_get_mac(0, ar7_is_titan() ? cpmac_low_data_titan.dev_addr :
++ cpmac_low_data.dev_addr);
++ res = platform_device_register(ar7_is_titan() ? &cpmac_low_titan :
++ &cpmac_low);
+ if (res)
+ return res;
+
+--- a/drivers/net/cpmac.c 2009-11-18 15:47:42.000000000 +0800
++++ b/drivers/net/cpmac.c 2009-11-19 00:58:25.000000000 +0800
+@@ -1236,6 +1236,10 @@
+ ar7_device_reset(AR7_RESET_BIT_CPMAC_HI);
+ ar7_device_reset(AR7_RESET_BIT_EPHY);
+
++ if (ar7_is_titan()) {
++ ar7_device_reset(TITAN_RESET_BIT_EPHY1);
++ }
++
+ cpmac_mii->reset(cpmac_mii);
+
+ for (i = 0; i < 300; i++)
+@@ -1250,7 +1254,8 @@
+ mask = 0;
+ }
+
+- cpmac_mii->phy_mask = ~(mask | 0x80000000);
++ cpmac_mii->phy_mask = ar7_is_titan()? ~(mask | 0x80000000 | 0x40000000):
++ ~(mask | 0x80000000);
+ snprintf(cpmac_mii->id, MII_BUS_ID_SIZE, "1");
+
+ res = mdiobus_register(cpmac_mii);