brcm47xx: fix Linux-3.0 and fix clock rate detection.
authorHauke Mehrtens <hauke@hauke-m.de>
Mon, 27 Jun 2011 20:20:11 +0000 (20:20 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Mon, 27 Jun 2011 20:20:11 +0000 (20:20 +0000)
SVN-Revision: 27294

target/linux/brcm47xx/patches-3.0/220-bcm5354.patch
target/linux/brcm47xx/patches-3.0/230-flash_linux_3_0.patch [new file with mode: 0644]
target/linux/brcm47xx/patches-3.0/240-ssb_no_sprom_on_pci.patch [new file with mode: 0644]
target/linux/brcm47xx/patches-3.0/250-ssb_fix_ssb_clock_rate.patch [new file with mode: 0644]
target/linux/brcm47xx/patches-3.0/976-ssb_increase_pci_delay.patch

index f7bc920d0e5c9443b0cd2c4f212bcd5893bc62c0..d68534fb65f0e4f230541d661afa956dd2ad288a 100644 (file)
@@ -31,7 +31,7 @@
        }
 --- a/drivers/ssb/main.c
 +++ b/drivers/ssb/main.c
-@@ -1103,6 +1103,8 @@ u32 ssb_clockspeed(struct ssb_bus *bus)
+@@ -1104,6 +1104,8 @@ u32 ssb_clockspeed(struct ssb_bus *bus)
  
        if (bus->chip_id == 0x5365) {
                rate = 100000000;
diff --git a/target/linux/brcm47xx/patches-3.0/230-flash_linux_3_0.patch b/target/linux/brcm47xx/patches-3.0/230-flash_linux_3_0.patch
new file mode 100644 (file)
index 0000000..c632813
--- /dev/null
@@ -0,0 +1,68 @@
+--- a/drivers/mtd/maps/bcm47xx-flash.c
++++ b/drivers/mtd/maps/bcm47xx-flash.c
+@@ -44,9 +44,7 @@
+ #include <linux/wait.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/map.h>
+-#ifdef CONFIG_MTD_PARTITIONS
+ #include <linux/mtd/partitions.h>
+-#endif
+ #include <linux/crc32.h>
+ #ifdef CONFIG_SSB
+ #include <linux/ssb/ssb.h>
+@@ -120,7 +118,6 @@ static struct map_info bcm47xx_map = {
+       phys: WINDOW_ADDR,
+ };
+-#ifdef CONFIG_MTD_PARTITIONS
+ static struct mtd_partition bcm47xx_parts[] = {
+       { name: "cfe",  offset: 0, size: 0, mask_flags: MTD_WRITEABLE, },
+@@ -552,7 +549,6 @@ init_mtd_partitions(struct mtd_info *mtd
+       return bcm47xx_parts;
+ }
+-#endif
+ int __init init_bcm47xx_map(void)
+ {
+@@ -561,10 +557,8 @@ int __init init_bcm47xx_map(void)
+ #endif
+       size_t size;
+       int ret = 0;
+-#ifdef CONFIG_MTD_PARTITIONS
+       struct mtd_partition *parts;
+       int i;
+-#endif
+ #ifdef CONFIG_SSB
+       u32 window = mcore->flash_window;
+@@ -602,15 +596,13 @@ int __init init_bcm47xx_map(void)
+       printk(KERN_NOTICE "Flash device: 0x%x at 0x%x\n", size, WINDOW_ADDR);
+-#ifdef CONFIG_MTD_PARTITIONS
+       parts = init_mtd_partitions(bcm47xx_mtd, size);
+       for (i = 0; parts[i].name; i++);
+-      ret = add_mtd_partitions(bcm47xx_mtd, parts, i);
++      ret = mtd_device_register(bcm47xx_mtd, parts, i);
+       if (ret) {
+-              printk(KERN_ERR "Flash: add_mtd_partitions failed\n");
++              printk(KERN_ERR "Flash: mtd_device_register failed\n");
+               goto fail;
+       }
+-#endif
+       return 0;
+  fail:
+@@ -624,9 +616,7 @@ int __init init_bcm47xx_map(void)
+ void __exit cleanup_bcm47xx_map(void)
+ {
+-#ifdef CONFIG_MTD_PARTITIONS
+-      del_mtd_partitions(bcm47xx_mtd);
+-#endif
++      mtd_device_unregister(bcm47xx_mtd);
+       map_destroy(bcm47xx_mtd);
+       iounmap((void *)bcm47xx_map.virt);
+ }
diff --git a/target/linux/brcm47xx/patches-3.0/240-ssb_no_sprom_on_pci.patch b/target/linux/brcm47xx/patches-3.0/240-ssb_no_sprom_on_pci.patch
new file mode 100644 (file)
index 0000000..52c8fe9
--- /dev/null
@@ -0,0 +1,28 @@
+--- a/drivers/ssb/driver_pcicore.c
++++ b/drivers/ssb/driver_pcicore.c
+@@ -412,16 +412,6 @@ static int __devinit pcicore_is_in_hostm
+  * Workarounds.
+  **************************************************/
+-static void __devinit ssb_pcicore_fix_sprom_core_index(struct ssb_pcicore *pc)
+-{
+-      u16 tmp = pcicore_read16(pc, SSB_PCICORE_SPROM(0));
+-      if (((tmp & 0xF000) >> 12) != pc->dev->core_index) {
+-              tmp &= ~0xF000;
+-              tmp |= (pc->dev->core_index << 12);
+-              pcicore_write16(pc, SSB_PCICORE_SPROM(0), tmp);
+-      }
+-}
+-
+ static u8 ssb_pcicore_polarity_workaround(struct ssb_pcicore *pc)
+ {
+       return (ssb_pcie_read(pc, 0x204) & 0x10) ? 0xC0 : 0x80;
+@@ -529,8 +519,6 @@ void __devinit ssb_pcicore_init(struct s
+       if (!ssb_device_is_enabled(dev))
+               ssb_device_enable(dev, 0);
+-      ssb_pcicore_fix_sprom_core_index(pc);
+-
+ #ifdef CONFIG_SSB_PCICORE_HOSTMODE
+       pc->hostmode = pcicore_is_in_hostmode(pc);
+       if (pc->hostmode)
diff --git a/target/linux/brcm47xx/patches-3.0/250-ssb_fix_ssb_clock_rate.patch b/target/linux/brcm47xx/patches-3.0/250-ssb_fix_ssb_clock_rate.patch
new file mode 100644 (file)
index 0000000..fe6507b
--- /dev/null
@@ -0,0 +1,25 @@
+From 974353557959d8ec1c022511cd1b3eeaa7ed482a Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Sat, 4 Jun 2011 15:55:24 +0200
+Subject: [PATCH 15/15] ssb: fix ssb clock rate according to broadcom source
+
+This fix was done according to si_clock_rate function in broadcom siutils.c
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ drivers/ssb/main.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/ssb/main.c
++++ b/drivers/ssb/main.c
+@@ -1002,8 +1002,8 @@ u32 ssb_calc_clock_rate(u32 plltype, u32
+       switch (plltype) {
+       case SSB_PLLTYPE_6: /* 100/200 or 120/240 only */
+               if (m & SSB_CHIPCO_CLK_T6_MMASK)
+-                      return SSB_CHIPCO_CLK_T6_M0;
+-              return SSB_CHIPCO_CLK_T6_M1;
++                      return SSB_CHIPCO_CLK_T6_M1;
++              return SSB_CHIPCO_CLK_T6_M0;
+       case SSB_PLLTYPE_1: /* 48Mhz base, 3 dividers */
+       case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */
+       case SSB_PLLTYPE_4: /* 48Mhz, 4 dividers */
index b56f1d5be31b4561b67fd26eb652f1b98a9f29cc..0650c256832eeb584d8afc8765311bada94e9a4d 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/ssb/driver_pcicore.c
 +++ b/drivers/ssb/driver_pcicore.c
-@@ -375,7 +375,7 @@ static void ssb_pcicore_init_hostmode(st
+@@ -375,7 +375,7 @@ static void __devinit ssb_pcicore_init_h
        set_io_port_base(ssb_pcicore_controller.io_map_base);
        /* Give some time to the PCI controller to configure itself with the new
         * values. Not waiting at this point causes crashes of the machine. */