From 32d1e0ed2c3ec748bf7759a31d363e38d15b2424 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 23 May 2014 18:48:31 +0000 Subject: [PATCH] kernel: add a ssb backport required for a new mac80211 update Signed-off-by: Felix Fietkau SVN-Revision: 40833 --- ...-some-very-confused-types-and-data-c.patch | 6 ++-- .../generic/patches-3.10/020-ssb_update.patch | 22 ++++++++++-- .../generic/patches-3.12/020-ssb_update.patch | 22 ++++++++++-- .../generic/patches-3.13/020-ssb_update.patch | 22 ++++++++++-- .../generic/patches-3.14/020-ssb_update.patch | 36 +++++++++++++++++++ .../generic/patches-3.3/020-ssb_update.patch | 29 +++++++-------- .../generic/patches-3.6/020-ssb_update.patch | 23 +++++++----- .../generic/patches-3.8/020-ssb_update.patch | 33 ++++++++++++----- .../generic/patches-3.9/020-ssb_update.patch | 29 +++++++++++---- 9 files changed, 174 insertions(+), 48 deletions(-) create mode 100644 target/linux/generic/patches-3.14/020-ssb_update.patch diff --git a/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch b/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch index a4bc08adca..9c669e6cb5 100644 --- a/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch +++ b/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch @@ -18,7 +18,7 @@ Patchwork: http://patchwork.linux-mips.org/patch/6211/ --- a/arch/mips/bcm47xx/sprom.c +++ b/arch/mips/bcm47xx/sprom.c -@@ -135,7 +135,7 @@ static void nvram_read_leddc(const char +@@ -135,7 +135,7 @@ static void nvram_read_leddc(const char } static void nvram_read_macaddr(const char *prefix, const char *name, @@ -50,7 +50,7 @@ Patchwork: http://patchwork.linux-mips.org/patch/6211/ } static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, -@@ -180,7 +180,7 @@ static void bcm47xx_fill_sprom_r1234589( +@@ -181,7 +181,7 @@ static void bcm47xx_fill_sprom_r1234589( fallback); nvram_read_s8(prefix, NULL, "ag1", &sprom->antenna_gain.a1, 0, fallback); @@ -59,7 +59,7 @@ Patchwork: http://patchwork.linux-mips.org/patch/6211/ } static void bcm47xx_fill_sprom_r12389(struct ssb_sprom *sprom, -@@ -633,20 +633,20 @@ static void bcm47xx_fill_sprom_path_r45( +@@ -634,20 +634,20 @@ static void bcm47xx_fill_sprom_path_r45( static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom, const char *prefix, bool fallback) { diff --git a/target/linux/generic/patches-3.10/020-ssb_update.patch b/target/linux/generic/patches-3.10/020-ssb_update.patch index 4b0caa806a..c4c92c203c 100644 --- a/target/linux/generic/patches-3.10/020-ssb_update.patch +++ b/target/linux/generic/patches-3.10/020-ssb_update.patch @@ -169,7 +169,7 @@ static int ssb_gpio_chipco_get_value(struct gpio_chip *chip, unsigned gpio) { struct ssb_bus *bus = ssb_gpio_get_bus(chip); -@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct +@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0); } @@ -596,7 +596,15 @@ extern u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms); --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h -@@ -486,6 +486,7 @@ struct ssb_bus { +@@ -33,6 +33,7 @@ struct ssb_sprom { + u8 et1phyaddr; /* MII address for enet1 */ + u8 et0mdcport; /* MDIO for enet0 */ + u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ + u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ +@@ -486,6 +487,7 @@ struct ssb_bus { #endif /* EMBEDDED */ #ifdef CONFIG_SSB_DRIVER_GPIO struct gpio_chip gpio; @@ -675,3 +683,13 @@ #define SSB_SPROM_BASE1 0x1000 #define SSB_SPROM_BASE31 0x0800 #define SSB_SPROM_REVISION 0x007E +--- a/arch/mips/bcm47xx/sprom.c ++++ b/arch/mips/bcm47xx/sprom.c +@@ -168,6 +168,7 @@ static void nvram_read_alpha2(const char + static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, + const char *prefix, bool fallback) + { ++ nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback); + nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback); diff --git a/target/linux/generic/patches-3.12/020-ssb_update.patch b/target/linux/generic/patches-3.12/020-ssb_update.patch index a6c6d8f46c..3a9916197b 100644 --- a/target/linux/generic/patches-3.12/020-ssb_update.patch +++ b/target/linux/generic/patches-3.12/020-ssb_update.patch @@ -80,7 +80,7 @@ static int ssb_gpio_chipco_get_value(struct gpio_chip *chip, unsigned gpio) { struct ssb_bus *bus = ssb_gpio_get_bus(chip); -@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct +@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0); } @@ -503,7 +503,15 @@ ssb_bus_may_powerdown(bus); --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h -@@ -486,6 +486,7 @@ struct ssb_bus { +@@ -33,6 +33,7 @@ struct ssb_sprom { + u8 et1phyaddr; /* MII address for enet1 */ + u8 et0mdcport; /* MDIO for enet0 */ + u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ + u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ +@@ -486,6 +487,7 @@ struct ssb_bus { #endif /* EMBEDDED */ #ifdef CONFIG_SSB_DRIVER_GPIO struct gpio_chip gpio; @@ -541,3 +549,13 @@ #endif /* CONFIG_SSB_DRIVER_GIGE */ #endif /* LINUX_SSB_DRIVER_GIGE_H_ */ +--- a/arch/mips/bcm47xx/sprom.c ++++ b/arch/mips/bcm47xx/sprom.c +@@ -168,6 +168,7 @@ static void nvram_read_alpha2(const char + static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, + const char *prefix, bool fallback) + { ++ nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback); + nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback); diff --git a/target/linux/generic/patches-3.13/020-ssb_update.patch b/target/linux/generic/patches-3.13/020-ssb_update.patch index 4452644680..c098bd3794 100644 --- a/target/linux/generic/patches-3.13/020-ssb_update.patch +++ b/target/linux/generic/patches-3.13/020-ssb_update.patch @@ -80,7 +80,7 @@ static int ssb_gpio_chipco_get_value(struct gpio_chip *chip, unsigned gpio) { struct ssb_bus *bus = ssb_gpio_get_bus(chip); -@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct +@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0); } @@ -457,7 +457,15 @@ ssb_bus_may_powerdown(bus); --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h -@@ -486,6 +486,7 @@ struct ssb_bus { +@@ -33,6 +33,7 @@ struct ssb_sprom { + u8 et1phyaddr; /* MII address for enet1 */ + u8 et0mdcport; /* MDIO for enet0 */ + u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ + u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ +@@ -486,6 +487,7 @@ struct ssb_bus { #endif /* EMBEDDED */ #ifdef CONFIG_SSB_DRIVER_GPIO struct gpio_chip gpio; @@ -465,3 +473,13 @@ #endif /* DRIVER_GPIO */ /* Internal-only stuff follows. Do not touch. */ +--- a/arch/mips/bcm47xx/sprom.c ++++ b/arch/mips/bcm47xx/sprom.c +@@ -168,6 +168,7 @@ static void nvram_read_alpha2(const char + static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, + const char *prefix, bool fallback) + { ++ nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback); + nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback); diff --git a/target/linux/generic/patches-3.14/020-ssb_update.patch b/target/linux/generic/patches-3.14/020-ssb_update.patch new file mode 100644 index 0000000000..eb0bc5227e --- /dev/null +++ b/target/linux/generic/patches-3.14/020-ssb_update.patch @@ -0,0 +1,36 @@ +commit 4f4aa2ec24dc45881849833a439558d3a378028c +Author: Rafał Miłecki +Date: Sun May 18 00:22:38 2014 +0200 + + ssb: sprom: add dev_id field for value overriding standard ID + + Some devices may have different features despite sharing the same ID + (e.g. PCI ID). For example 14e4:4331 is usually a dual band, but this + can be "limited". Device with "pci/x/y/devid=0x4332" supports 2.4 GHz + only. Similarly 0x4333 will mean support for 5 GHz only. + Add entry in SPROM so info described above can be extracted and stored. + + Signed-off-by: Rafał Miłecki + Acked-by: Hauke Mehrtens + Signed-off-by: John W. Linville + +--- a/arch/mips/bcm47xx/sprom.c ++++ b/arch/mips/bcm47xx/sprom.c +@@ -168,6 +168,7 @@ static void nvram_read_alpha2(const char + static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, + const char *prefix, bool fallback) + { ++ nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback); + nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback); +--- a/include/linux/ssb/ssb.h ++++ b/include/linux/ssb/ssb.h +@@ -33,6 +33,7 @@ struct ssb_sprom { + u8 et1phyaddr; /* MII address for enet1 */ + u8 et0mdcport; /* MDIO for enet0 */ + u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ + u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ diff --git a/target/linux/generic/patches-3.3/020-ssb_update.patch b/target/linux/generic/patches-3.3/020-ssb_update.patch index 14ff3c5b0d..eac9807f18 100644 --- a/target/linux/generic/patches-3.3/020-ssb_update.patch +++ b/target/linux/generic/patches-3.3/020-ssb_update.patch @@ -471,7 +471,7 @@ } if (updown_tab) { -@@ -516,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon +@@ -516,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon pmucap = chipco_read32(cc, SSB_CHIPCO_PMU_CAP); cc->pmu.rev = (pmucap & SSB_CHIPCO_PMU_CAP_REVISION); @@ -1131,7 +1131,7 @@ } static void dump_irq(struct ssb_bus *bus) -@@ -178,9 +199,9 @@ static void ssb_mips_serial_init(struct +@@ -178,9 +199,9 @@ static void ssb_mips_serial_init(struct { struct ssb_bus *bus = mcore->dev->bus; @@ -1143,7 +1143,7 @@ mcore->nr_serial_ports = ssb_chipco_serial_init(&bus->chipco, mcore->serial_ports); else mcore->nr_serial_ports = 0; -@@ -189,17 +210,42 @@ static void ssb_mips_serial_init(struct +@@ -189,17 +210,42 @@ static void ssb_mips_serial_init(struct static void ssb_mips_flash_detect(struct ssb_mipscore *mcore) { struct ssb_bus *bus = mcore->dev->bus; @@ -1980,7 +1980,7 @@ sprom_extract_r458(out, in); /* TODO - get remaining rev 8 stuff needed */ -@@ -641,7 +753,7 @@ static int sprom_extract(struct ssb_bus +@@ -641,7 +753,7 @@ static int sprom_extract(struct ssb_bus memset(out, 0, sizeof(*out)); out->revision = in[size - 1] & 0x00FF; @@ -1989,7 +1989,7 @@ memset(out->et0mac, 0xFF, 6); /* preset et0 and et1 mac */ memset(out->et1mac, 0xFF, 6); -@@ -650,7 +762,7 @@ static int sprom_extract(struct ssb_bus +@@ -650,7 +762,7 @@ static int sprom_extract(struct ssb_bus * number stored in the SPROM. * Always extract r1. */ out->revision = 1; @@ -1998,7 +1998,7 @@ } switch (out->revision) { -@@ -667,9 +779,8 @@ static int sprom_extract(struct ssb_bus +@@ -667,9 +779,8 @@ static int sprom_extract(struct ssb_bus sprom_extract_r8(out, in); break; default: @@ -2494,7 +2494,7 @@ #include -@@ -16,19 +18,28 @@ struct pcmcia_device; +@@ -16,19 +18,29 @@ struct pcmcia_device; struct ssb_bus; struct ssb_driver; @@ -2516,6 +2516,7 @@ u8 et1phyaddr; /* MII address for enet1 */ u8 et0mdcport; /* MDIO for enet0 */ u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ @@ -2528,7 +2529,7 @@ u8 ant_available_a; /* 2GHz antenna available bits (up to 4) */ u8 ant_available_bg; /* 5GHz antenna available bits (up to 4) */ u16 pa0b0; -@@ -47,10 +58,10 @@ struct ssb_sprom { +@@ -47,10 +59,10 @@ struct ssb_sprom { u8 gpio1; /* GPIO pin 1 */ u8 gpio2; /* GPIO pin 2 */ u8 gpio3; /* GPIO pin 3 */ @@ -2543,7 +2544,7 @@ u8 itssi_a; /* Idle TSSI Target for A-PHY */ u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ u8 tri2g; /* 2.4GHz TX isolation */ -@@ -61,8 +72,8 @@ struct ssb_sprom { +@@ -61,8 +73,8 @@ struct ssb_sprom { u8 txpid5gl[4]; /* 4.9 - 5.1GHz TX power index */ u8 txpid5g[4]; /* 5.1 - 5.5GHz TX power index */ u8 txpid5gh[4]; /* 5.5 - ...GHz TX power index */ @@ -2554,7 +2555,7 @@ u8 rssisav2g; /* 2GHz RSSI params */ u8 rssismc2g; u8 rssismf2g; -@@ -82,16 +93,13 @@ struct ssb_sprom { +@@ -82,16 +94,13 @@ struct ssb_sprom { u16 boardflags2_hi; /* Board flags (bits 48-63) */ /* TODO store board flags in a single u64 */ @@ -2574,7 +2575,7 @@ } antenna_gain; struct { -@@ -103,14 +111,85 @@ struct ssb_sprom { +@@ -103,14 +112,85 @@ struct ssb_sprom { } ghz5; } fem; @@ -2662,7 +2663,7 @@ }; -@@ -166,6 +245,7 @@ struct ssb_bus_ops { +@@ -166,6 +246,7 @@ struct ssb_bus_ops { #define SSB_DEV_MINI_MACPHY 0x823 #define SSB_DEV_ARM_1176 0x824 #define SSB_DEV_ARM_7TDMI 0x825 @@ -2670,7 +2671,7 @@ /* Vendor-ID values */ #define SSB_VENDOR_BROADCOM 0x4243 -@@ -260,13 +340,61 @@ enum ssb_bustype { +@@ -260,13 +341,61 @@ enum ssb_bustype { #define SSB_BOARDVENDOR_DELL 0x1028 /* Dell */ #define SSB_BOARDVENDOR_HP 0x0E11 /* HP */ /* board_type */ @@ -2735,7 +2736,7 @@ /* chip_package */ #define SSB_CHIPPACK_BCM4712S 1 /* Small 200pin 4712 */ #define SSB_CHIPPACK_BCM4712M 2 /* Medium 225pin 4712 */ -@@ -354,7 +482,11 @@ struct ssb_bus { +@@ -354,7 +483,11 @@ struct ssb_bus { #ifdef CONFIG_SSB_EMBEDDED /* Lock for GPIO register access. */ spinlock_t gpio_lock; diff --git a/target/linux/generic/patches-3.6/020-ssb_update.patch b/target/linux/generic/patches-3.6/020-ssb_update.patch index d6b2f35f02..ffce49c483 100644 --- a/target/linux/generic/patches-3.6/020-ssb_update.patch +++ b/target/linux/generic/patches-3.6/020-ssb_update.patch @@ -417,7 +417,7 @@ } if (updown_tab) { -@@ -523,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon +@@ -523,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon pmucap = chipco_read32(cc, SSB_CHIPCO_PMU_CAP); cc->pmu.rev = (pmucap & SSB_CHIPCO_PMU_CAP_REVISION); @@ -1075,7 +1075,7 @@ } static void dump_irq(struct ssb_bus *bus) -@@ -178,9 +199,9 @@ static void ssb_mips_serial_init(struct +@@ -178,9 +199,9 @@ static void ssb_mips_serial_init(struct { struct ssb_bus *bus = mcore->dev->bus; @@ -1087,7 +1087,7 @@ mcore->nr_serial_ports = ssb_chipco_serial_init(&bus->chipco, mcore->serial_ports); else mcore->nr_serial_ports = 0; -@@ -189,17 +210,42 @@ static void ssb_mips_serial_init(struct +@@ -189,17 +210,42 @@ static void ssb_mips_serial_init(struct static void ssb_mips_flash_detect(struct ssb_mipscore *mcore) { struct ssb_bus *bus = mcore->dev->bus; @@ -1715,7 +1715,7 @@ SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8); SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0); SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0); -@@ -743,7 +753,7 @@ static int sprom_extract(struct ssb_bus +@@ -743,7 +753,7 @@ static int sprom_extract(struct ssb_bus memset(out, 0, sizeof(*out)); out->revision = in[size - 1] & 0x00FF; @@ -1724,7 +1724,7 @@ memset(out->et0mac, 0xFF, 6); /* preset et0 and et1 mac */ memset(out->et1mac, 0xFF, 6); -@@ -752,7 +762,7 @@ static int sprom_extract(struct ssb_bus +@@ -752,7 +762,7 @@ static int sprom_extract(struct ssb_bus * number stored in the SPROM. * Always extract r1. */ out->revision = 1; @@ -1733,7 +1733,7 @@ } switch (out->revision) { -@@ -769,9 +779,8 @@ static int sprom_extract(struct ssb_bus +@@ -769,9 +779,8 @@ static int sprom_extract(struct ssb_bus sprom_extract_r8(out, in); break; default: @@ -2172,7 +2172,7 @@ #include -@@ -24,9 +26,9 @@ struct ssb_sprom_core_pwr_info { +@@ -24,13 +26,14 @@ struct ssb_sprom_core_pwr_info { struct ssb_sprom { u8 revision; @@ -2185,7 +2185,12 @@ u8 et0phyaddr; /* MII address for enet0 */ u8 et1phyaddr; /* MII address for enet1 */ u8 et0mdcport; /* MDIO for enet0 */ -@@ -338,13 +340,61 @@ enum ssb_bustype { + u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ + u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ +@@ -338,13 +341,61 @@ enum ssb_bustype { #define SSB_BOARDVENDOR_DELL 0x1028 /* Dell */ #define SSB_BOARDVENDOR_HP 0x0E11 /* HP */ /* board_type */ @@ -2250,7 +2255,7 @@ /* chip_package */ #define SSB_CHIPPACK_BCM4712S 1 /* Small 200pin 4712 */ #define SSB_CHIPPACK_BCM4712M 2 /* Medium 225pin 4712 */ -@@ -432,7 +482,11 @@ struct ssb_bus { +@@ -432,7 +483,11 @@ struct ssb_bus { #ifdef CONFIG_SSB_EMBEDDED /* Lock for GPIO register access. */ spinlock_t gpio_lock; diff --git a/target/linux/generic/patches-3.8/020-ssb_update.patch b/target/linux/generic/patches-3.8/020-ssb_update.patch index 95a224600b..4dd5dad169 100644 --- a/target/linux/generic/patches-3.8/020-ssb_update.patch +++ b/target/linux/generic/patches-3.8/020-ssb_update.patch @@ -104,7 +104,7 @@ } if (updown_tab) { -@@ -526,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon +@@ -526,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon pmucap = chipco_read32(cc, SSB_CHIPCO_PMU_CAP); cc->pmu.rev = (pmucap & SSB_CHIPCO_PMU_CAP_REVISION); @@ -151,7 +151,7 @@ return 0; } } -@@ -692,8 +687,23 @@ void ssb_pmu_spuravoid_pllupdate(struct +@@ -692,8 +687,23 @@ void ssb_pmu_spuravoid_pllupdate(struct pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; break; case 43222: @@ -346,7 +346,7 @@ +} --- a/drivers/ssb/driver_gpio.c +++ b/drivers/ssb/driver_gpio.c -@@ -74,6 +74,16 @@ static void ssb_gpio_chipco_free(struct +@@ -74,6 +74,16 @@ static void ssb_gpio_chipco_free(struct ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0); } @@ -465,7 +465,7 @@ } static void dump_irq(struct ssb_bus *bus) -@@ -189,34 +210,43 @@ static void ssb_mips_serial_init(struct +@@ -189,34 +210,43 @@ static void ssb_mips_serial_init(struct static void ssb_mips_flash_detect(struct ssb_mipscore *mcore) { struct ssb_bus *bus = mcore->dev->bus; @@ -993,7 +993,7 @@ SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8); SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0); SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0); -@@ -743,7 +753,7 @@ static int sprom_extract(struct ssb_bus +@@ -743,7 +753,7 @@ static int sprom_extract(struct ssb_bus memset(out, 0, sizeof(*out)); out->revision = in[size - 1] & 0x00FF; @@ -1002,7 +1002,7 @@ memset(out->et0mac, 0xFF, 6); /* preset et0 and et1 mac */ memset(out->et1mac, 0xFF, 6); -@@ -752,7 +762,7 @@ static int sprom_extract(struct ssb_bus +@@ -752,7 +762,7 @@ static int sprom_extract(struct ssb_bus * number stored in the SPROM. * Always extract r1. */ out->revision = 1; @@ -1011,7 +1011,7 @@ } switch (out->revision) { -@@ -769,9 +779,8 @@ static int sprom_extract(struct ssb_bus +@@ -769,9 +779,8 @@ static int sprom_extract(struct ssb_bus sprom_extract_r8(out, in); break; default: @@ -1382,7 +1382,7 @@ extern u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms); --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h -@@ -26,9 +26,9 @@ struct ssb_sprom_core_pwr_info { +@@ -26,13 +26,14 @@ struct ssb_sprom_core_pwr_info { struct ssb_sprom { u8 revision; @@ -1395,7 +1395,12 @@ u8 et0phyaddr; /* MII address for enet0 */ u8 et1phyaddr; /* MII address for enet1 */ u8 et0mdcport; /* MDIO for enet0 */ -@@ -340,13 +340,61 @@ enum ssb_bustype { + u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ + u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ +@@ -340,13 +341,61 @@ enum ssb_bustype { #define SSB_BOARDVENDOR_DELL 0x1028 /* Dell */ #define SSB_BOARDVENDOR_HP 0x0E11 /* HP */ /* board_type */ @@ -1572,3 +1577,13 @@ #define SSB_SPROM4_AGAIN01 0x005E /* Antenna Gain (in dBm Q5.2) */ #define SSB_SPROM4_AGAIN0 0x00FF /* Antenna 0 */ #define SSB_SPROM4_AGAIN0_SHIFT 0 +--- a/arch/mips/bcm47xx/sprom.c ++++ b/arch/mips/bcm47xx/sprom.c +@@ -168,6 +168,7 @@ static void nvram_read_alpha2(const char + static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, + const char *prefix, bool fallback) + { ++ nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback); + nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback); diff --git a/target/linux/generic/patches-3.9/020-ssb_update.patch b/target/linux/generic/patches-3.9/020-ssb_update.patch index 0bd050b0ab..6d871866d6 100644 --- a/target/linux/generic/patches-3.9/020-ssb_update.patch +++ b/target/linux/generic/patches-3.9/020-ssb_update.patch @@ -93,7 +93,7 @@ } if (updown_tab) { -@@ -526,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon +@@ -526,8 +524,8 @@ void ssb_pmu_init(struct ssb_chipcommon pmucap = chipco_read32(cc, SSB_CHIPCO_PMU_CAP); cc->pmu.rev = (pmucap & SSB_CHIPCO_PMU_CAP_REVISION); @@ -140,7 +140,7 @@ return 0; } } -@@ -692,8 +687,23 @@ void ssb_pmu_spuravoid_pllupdate(struct +@@ -692,8 +687,23 @@ void ssb_pmu_spuravoid_pllupdate(struct pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; break; case 43222: @@ -751,7 +751,7 @@ SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8); SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0); SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0); -@@ -743,7 +753,7 @@ static int sprom_extract(struct ssb_bus +@@ -743,7 +753,7 @@ static int sprom_extract(struct ssb_bus memset(out, 0, sizeof(*out)); out->revision = in[size - 1] & 0x00FF; @@ -760,7 +760,7 @@ memset(out->et0mac, 0xFF, 6); /* preset et0 and et1 mac */ memset(out->et1mac, 0xFF, 6); -@@ -752,7 +762,7 @@ static int sprom_extract(struct ssb_bus +@@ -752,7 +762,7 @@ static int sprom_extract(struct ssb_bus * number stored in the SPROM. * Always extract r1. */ out->revision = 1; @@ -769,7 +769,7 @@ } switch (out->revision) { -@@ -769,9 +779,8 @@ static int sprom_extract(struct ssb_bus +@@ -769,9 +779,8 @@ static int sprom_extract(struct ssb_bus sprom_extract_r8(out, in); break; default: @@ -1125,7 +1125,7 @@ extern u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms); --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h -@@ -26,9 +26,9 @@ struct ssb_sprom_core_pwr_info { +@@ -26,13 +26,14 @@ struct ssb_sprom_core_pwr_info { struct ssb_sprom { u8 revision; @@ -1138,7 +1138,12 @@ u8 et0phyaddr; /* MII address for enet0 */ u8 et1phyaddr; /* MII address for enet1 */ u8 et0mdcport; /* MDIO for enet0 */ -@@ -340,13 +340,61 @@ enum ssb_bustype { + u8 et1mdcport; /* MDIO for enet1 */ ++ u16 dev_id; /* Device ID overriding e.g. PCI ID */ + u16 board_rev; /* Board revision number from SPROM. */ + u16 board_num; /* Board number from SPROM. */ + u16 board_type; /* Board type from SPROM. */ +@@ -340,13 +341,61 @@ enum ssb_bustype { #define SSB_BOARDVENDOR_DELL 0x1028 /* Dell */ #define SSB_BOARDVENDOR_HP 0x0E11 /* HP */ /* board_type */ @@ -1261,3 +1266,13 @@ #define SSB_SPROM4_AGAIN01 0x005E /* Antenna Gain (in dBm Q5.2) */ #define SSB_SPROM4_AGAIN0 0x00FF /* Antenna 0 */ #define SSB_SPROM4_AGAIN0_SHIFT 0 +--- a/arch/mips/bcm47xx/sprom.c ++++ b/arch/mips/bcm47xx/sprom.c +@@ -168,6 +168,7 @@ static void nvram_read_alpha2(const char + static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom, + const char *prefix, bool fallback) + { ++ nvram_read_u16(prefix, NULL, "devid", &sprom->dev_id, 0, fallback); + nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff, fallback); + nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff, fallback);