summaryrefslogtreecommitdiff
path: root/target/linux/brcm63xx
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm63xx')
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/110-gpiodev.patch2
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/180-udc_preliminary_support.patch4
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/200-extended-platform-devices.patch2
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/200-spi-board-info.patch2
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/240-spi.patch2
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/260-no_ehci_over_current_check.patch2
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch157
-rw-r--r--target/linux/brcm63xx/patches-2.6.37/977-ssb_export_fallback_sprom.patch37
8 files changed, 182 insertions, 26 deletions
diff --git a/target/linux/brcm63xx/patches-2.6.37/110-gpiodev.patch b/target/linux/brcm63xx/patches-2.6.37/110-gpiodev.patch
index 99ee29f..fc99f53 100644
--- a/target/linux/brcm63xx/patches-2.6.37/110-gpiodev.patch
+++ b/target/linux/brcm63xx/patches-2.6.37/110-gpiodev.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -852,6 +852,10 @@ static struct platform_device mtd_dev =
+@@ -852,6 +852,10 @@ static struct platform_device mtd_dev =
.num_resources = ARRAY_SIZE(mtd_resources),
};
diff --git a/target/linux/brcm63xx/patches-2.6.37/180-udc_preliminary_support.patch b/target/linux/brcm63xx/patches-2.6.37/180-udc_preliminary_support.patch
index 2f6a27e..6011db7 100644
--- a/target/linux/brcm63xx/patches-2.6.37/180-udc_preliminary_support.patch
+++ b/target/linux/brcm63xx/patches-2.6.37/180-udc_preliminary_support.patch
@@ -17,7 +17,7 @@
};
static struct board_info __initdata board_rta1025w_16 = {
-@@ -1001,6 +1004,9 @@ int __init board_register_devices(void)
+@@ -1002,6 +1005,9 @@ int __init board_register_devices(void)
if (board.has_dsp)
bcm63xx_dsp_register(&board.dsp);
@@ -214,7 +214,7 @@
* SPI clock
*/
static void spi_set(struct clk *clk, int enable)
-@@ -208,6 +232,8 @@ struct clk *clk_get(struct device *dev,
+@@ -208,6 +232,8 @@ struct clk *clk_get(struct device *dev,
return &clk_ephy;
if (!strcmp(id, "usbh"))
return &clk_usbh;
diff --git a/target/linux/brcm63xx/patches-2.6.37/200-extended-platform-devices.patch b/target/linux/brcm63xx/patches-2.6.37/200-extended-platform-devices.patch
index 70637e5..e9619d4 100644
--- a/target/linux/brcm63xx/patches-2.6.37/200-extended-platform-devices.patch
+++ b/target/linux/brcm63xx/patches-2.6.37/200-extended-platform-devices.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1007,6 +1007,9 @@ int __init board_register_devices(void)
+@@ -1008,6 +1008,9 @@ int __init board_register_devices(void)
if (board.has_udc0)
bcm63xx_udc_register();
diff --git a/target/linux/brcm63xx/patches-2.6.37/200-spi-board-info.patch b/target/linux/brcm63xx/patches-2.6.37/200-spi-board-info.patch
index d73d6f0..fc39eb4 100644
--- a/target/linux/brcm63xx/patches-2.6.37/200-spi-board-info.patch
+++ b/target/linux/brcm63xx/patches-2.6.37/200-spi-board-info.patch
@@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -1010,6 +1010,9 @@ int __init board_register_devices(void)
+@@ -1011,6 +1011,9 @@ int __init board_register_devices(void)
if (board.num_devs)
platform_add_devices(board.devs, board.num_devs);
diff --git a/target/linux/brcm63xx/patches-2.6.37/240-spi.patch b/target/linux/brcm63xx/patches-2.6.37/240-spi.patch
index 5a81a08..35c490c 100644
--- a/target/linux/brcm63xx/patches-2.6.37/240-spi.patch
+++ b/target/linux/brcm63xx/patches-2.6.37/240-spi.patch
@@ -990,7 +990,7 @@
#include <board_bcm963xx.h>
#define PFX "board_bcm963xx: "
-@@ -1586,6 +1587,9 @@ int __init board_register_devices(void)
+@@ -1587,6 +1588,9 @@ int __init board_register_devices(void)
if (board.num_spis)
spi_register_board_info(board.spis, board.num_spis);
diff --git a/target/linux/brcm63xx/patches-2.6.37/260-no_ehci_over_current_check.patch b/target/linux/brcm63xx/patches-2.6.37/260-no_ehci_over_current_check.patch
index 816343e..513ff99 100644
--- a/target/linux/brcm63xx/patches-2.6.37/260-no_ehci_over_current_check.patch
+++ b/target/linux/brcm63xx/patches-2.6.37/260-no_ehci_over_current_check.patch
@@ -1,6 +1,6 @@
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
-@@ -861,11 +861,13 @@ static int ehci_hub_control (
+@@ -882,11 +882,13 @@ static int ehci_hub_control (
* power switching; they're allowed to just limit the
* current. khubd will turn the power back on.
*/
diff --git a/target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch b/target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch
new file mode 100644
index 0000000..7e153a1
--- /dev/null
+++ b/target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch
@@ -0,0 +1,157 @@
+From 62a518124cff3970d99f7ccdab457f4289e3b982 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Sat, 30 Apr 2011 15:42:30 +0200
+Subject: [PATCH 1/4] ssb: add callback for sprom
+
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ arch/mips/bcm63xx/boards/board_bcm963xx.c | 16 ++++++++++++++--
+ drivers/ssb/pci.c | 13 ++++++++-----
+ drivers/ssb/sprom.c | 26 +++++++++++++++-----------
+ drivers/ssb/ssb_private.h | 2 +-
+ include/linux/ssb/ssb.h | 3 ++-
+ 5 files changed, 40 insertions(+), 20 deletions(-)
+
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -1927,6 +1927,17 @@ static struct ssb_sprom bcm63xx_sprom =
+ .boardflags_lo = 0x2848,
+ .boardflags_hi = 0x0000,
+ };
++
++int bcm63xx_get_fallback_sprom(struct ssb_bus *bus)
++{
++ if (bus->bustype == SSB_BUSTYPE_PCI) {
++ memcpy(&bus->sprom, &bcm63xx_sprom, sizeof(struct ssb_sprom));
++ return 0;
++ } else {
++ printk(KERN_ERR PFX "unable to fill SPROM for given bustype.\n");
++ return -EINVAL;
++ }
++}
+ #endif
+
+ /*
+@@ -2111,8 +2122,9 @@ void __init board_prom_init(void)
+ if (!board_get_mac_address(bcm63xx_sprom.il0mac)) {
+ memcpy(bcm63xx_sprom.et0mac, bcm63xx_sprom.il0mac, ETH_ALEN);
+ memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN);
+- if (ssb_arch_set_fallback_sprom(&bcm63xx_sprom) < 0)
+- printk(KERN_ERR "failed to register fallback SPROM\n");
++ if (ssb_arch_register_fallback_sprom(
++ &bcm63xx_get_fallback_sprom) < 0)
++ printk(KERN_ERR PFX "failed to register fallback SPROM\n");
+ }
+ #endif
+ }
+--- a/drivers/ssb/pci.c
++++ b/drivers/ssb/pci.c
+@@ -662,7 +662,6 @@ static int sprom_extract(struct ssb_bus
+ static int ssb_pci_sprom_get(struct ssb_bus *bus,
+ struct ssb_sprom *sprom)
+ {
+- const struct ssb_sprom *fallback;
+ int err;
+ u16 *buf;
+
+@@ -707,10 +706,14 @@ static int ssb_pci_sprom_get(struct ssb_
+ if (err) {
+ /* All CRC attempts failed.
+ * Maybe there is no SPROM on the device?
+- * If we have a fallback, use that. */
+- fallback = ssb_get_fallback_sprom();
+- if (fallback) {
+- memcpy(sprom, fallback, sizeof(*sprom));
++ * Now we ask the arch code if there is some sprom
++ * avaliable for this device in some other storage */
++ err = ssb_fill_sprom_with_fallback(bus);
++ if (err) {
++ ssb_printk(KERN_WARNING PFX "WARNING: Using"
++ " fallback SPROM failed (err %d)\n",
++ err);
++ } else {
+ err = 0;
+ goto out_free;
+ }
+--- a/drivers/ssb/sprom.c
++++ b/drivers/ssb/sprom.c
+@@ -17,7 +17,7 @@
+ #include <linux/slab.h>
+
+
+-static const struct ssb_sprom *fallback_sprom;
++static int(*get_fallback_sprom)(struct ssb_bus *dev);
+
+
+ static int sprom2hex(const u16 *sprom, char *buf, size_t buf_len,
+@@ -145,13 +145,14 @@ out:
+ }
+
+ /**
+- * ssb_arch_set_fallback_sprom - Set a fallback SPROM for use if no SPROM is found.
++ * ssb_arch_register_fallback_sprom - Registers a method providing a fallback
++ * SPROM if no SPROM is found.
+ *
+- * @sprom: The SPROM data structure to register.
++ * @sprom_callback: The callbcak function.
+ *
+- * With this function the architecture implementation may register a fallback
+- * SPROM data structure. The fallback is only used for PCI based SSB devices,
+- * where no valid SPROM can be found in the shadow registers.
++ * With this function the architecture implementation may register a callback
++ * handler which wills the SPROM data structure. The fallback is only used for
++ * PCI based SSB devices, where no valid SPROM can be found in the shadow registers.
+ *
+ * This function is useful for weird architectures that have a half-assed SSB device
+ * hardwired to their PCI bus.
+@@ -163,18 +164,21 @@ out:
+ *
+ * This function is available for architecture code, only. So it is not exported.
+ */
+-int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom)
++int ssb_arch_register_fallback_sprom(int (*sprom_callback)(struct ssb_bus *bus))
+ {
+- if (fallback_sprom)
++ if (get_fallback_sprom)
+ return -EEXIST;
+- fallback_sprom = sprom;
++ get_fallback_sprom = sprom_callback;
+
+ return 0;
+ }
+
+-const struct ssb_sprom *ssb_get_fallback_sprom(void)
++int ssb_fill_sprom_with_fallback(struct ssb_bus *bus)
+ {
+- return fallback_sprom;
++ if (!get_fallback_sprom)
++ return -ENOENT;
++
++ return get_fallback_sprom(bus);
+ }
+
+ /* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
+--- a/drivers/ssb/ssb_private.h
++++ b/drivers/ssb/ssb_private.h
+@@ -171,7 +171,7 @@ ssize_t ssb_attr_sprom_store(struct ssb_
+ const char *buf, size_t count,
+ int (*sprom_check_crc)(const u16 *sprom, size_t size),
+ int (*sprom_write)(struct ssb_bus *bus, const u16 *sprom));
+-extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
++extern int ssb_fill_sprom_with_fallback(struct ssb_bus *bus);
+
+
+ /* core.c */
+--- a/include/linux/ssb/ssb.h
++++ b/include/linux/ssb/ssb.h
+@@ -404,7 +404,8 @@ extern bool ssb_is_sprom_available(struc
+
+ /* Set a fallback SPROM.
+ * See kdoc at the function definition for complete documentation. */
+-extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
++extern int ssb_arch_register_fallback_sprom(
++ int (*sprom_callback)(struct ssb_bus *bus));
+
+ /* Suspend a SSB bus.
+ * Call this from the parent bus suspend routine. */
diff --git a/target/linux/brcm63xx/patches-2.6.37/977-ssb_export_fallback_sprom.patch b/target/linux/brcm63xx/patches-2.6.37/977-ssb_export_fallback_sprom.patch
index 2a22a3a..3447c37 100644
--- a/target/linux/brcm63xx/patches-2.6.37/977-ssb_export_fallback_sprom.patch
+++ b/target/linux/brcm63xx/patches-2.6.37/977-ssb_export_fallback_sprom.patch
@@ -1,20 +1,19 @@
---- a/drivers/ssb/sprom.c
-+++ b/drivers/ssb/sprom.c
-@@ -176,6 +176,7 @@ const struct ssb_sprom *ssb_get_fallback
- {
- return fallback_sprom;
- }
-+EXPORT_SYMBOL(ssb_get_fallback_sprom);
-
- /* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
- bool ssb_is_sprom_available(struct ssb_bus *bus)
---- a/include/linux/ssb/ssb.h
-+++ b/include/linux/ssb/ssb.h
-@@ -401,6 +401,7 @@ extern bool ssb_is_sprom_available(struc
- /* Set a fallback SPROM.
- * See kdoc at the function definition for complete documentation. */
- extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
-+extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -1907,7 +1907,7 @@ static void __init nb4_nvram_fixup(void)
+ * bcm4318 WLAN work
+ */
+ #ifdef CONFIG_SSB_PCIHOST
+-static struct ssb_sprom bcm63xx_sprom = {
++struct ssb_sprom bcm63xx_sprom = {
+ .revision = 0x02,
+ .board_rev = 0x17,
+ .country_code = 0x0,
+@@ -1927,6 +1927,7 @@ static struct ssb_sprom bcm63xx_sprom =
+ .boardflags_lo = 0x2848,
+ .boardflags_hi = 0x0000,
+ };
++EXPORT_SYMBOL(bcm63xx_sprom);
- /* Suspend a SSB bus.
- * Call this from the parent bus suspend routine. */
+ int bcm63xx_get_fallback_sprom(struct ssb_bus *bus)
+ {