Changeset 27723


Ignore:
Timestamp:
2011-07-22T18:30:42+02:00 (7 years ago)
Author:
hauke
Message:

brcm47xx: update bcma and ssb to master-2011-07-21

  • add new patches for bcm4716 SoC
  • add support for serial flash on bcma bus
Location:
trunk/target/linux
Files:
13 added
10 deleted
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/config-3.0

    r27301 r27723  
    1919CONFIG_BCM47XX_WDT=y 
    2020CONFIG_BCMA=y 
     21CONFIG_BCMA_BLOCKIO=y 
    2122CONFIG_BCMA_DEBUG=y 
    2223CONFIG_BCMA_DRIVER_MIPS=y 
     
    2627CONFIG_BCMA_HOST_SOC=y 
    2728CONFIG_BCMA_POSSIBLE=y 
     29CONFIG_BCMA_SFLASH=y 
    2830# CONFIG_BRCMUTIL is not set 
    2931# CONFIG_BSD_PROCESS_ACCT is not set 
     
    9496# CONFIG_MIPS_MACHINE is not set 
    9597CONFIG_MIPS_MT_DISABLED=y 
    96 CONFIG_MTD_BCM47XX=y 
     98CONFIG_MTD_BCM47XX_PARTS=y 
     99CONFIG_MTD_BCM47XX_PFLASH=y 
     100CONFIG_MTD_BCM47XX_SFLASH=y 
    97101CONFIG_NEED_DMA_MAP_STATE=y 
    98102CONFIG_NEED_PER_CPU_KM=y 
  • trunk/target/linux/brcm47xx/patches-2.6.39/951-brcm4716-defines.patch

    r26127 r27723  
    2626--- a/include/linux/ssb/ssb.h 
    2727+++ b/include/linux/ssb/ssb.h 
    28 @@ -155,9 +155,16 @@ struct ssb_bus_ops { 
     28@@ -157,9 +157,16 @@ struct ssb_bus_ops { 
    2929 #define SSB_DEV_MINI_MACPHY    0x823 
    3030 #define SSB_DEV_ARM_1176       0x824 
  • trunk/target/linux/brcm47xx/patches-3.0/0001-bcma-move-parsing-of-EEPROM-into-own-function.patch

    r27301 r27723  
    1 From c4fb5adbe45b3a1cfc509a64bb92429ab0d6fc37 Mon Sep 17 00:00:00 2001 
     1From e6defe46ea936ebb309c9cab4f7fd14bdc0c5416 Mon Sep 17 00:00:00 2001 
    22From: Hauke Mehrtens <hauke@hauke-m.de> 
    33Date: Sat, 11 Jun 2011 16:47:38 +0200 
    4 Subject: [PATCH 01/14] bcma: move parsing of EEPROM into own function. 
     4Subject: [PATCH 01/22] bcma: move parsing of EEPROM into own function. 
     5MIME-Version: 1.0 
     6Content-Type: text/plain; charset=UTF-8 
     7Content-Transfer-Encoding: 8bit 
    58 
    69Move the parsing of the EEPROM data in scan function for one core into 
     
    811as well. 
    912 
     13Acked-by: Rafał Miłecki <zajec5@gmail.com> 
    1014Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> 
    1115--- 
  • trunk/target/linux/brcm47xx/patches-3.0/0002-bcma-move-initializing-of-struct-bcma_bus-to-own-fun.patch

    r27301 r27723  
    1 From dd6cbe9b9e2ae563659b34184f4cd9d905dc90d5 Mon Sep 17 00:00:00 2001 
     1From 47b0447e18f72724caf57ba7e4573e309fb2bfae Mon Sep 17 00:00:00 2001 
    22From: Hauke Mehrtens <hauke@hauke-m.de> 
    33Date: Sat, 18 Jun 2011 11:55:47 +0200 
    4 Subject: [PATCH 02/14] bcma: move initializing of struct bcma_bus to own function. 
     4Subject: [PATCH 02/22] bcma: move initializing of struct bcma_bus to own function. 
     5MIME-Version: 1.0 
     6Content-Type: text/plain; charset=UTF-8 
     7Content-Transfer-Encoding: 8bit 
    58 
    69This makes it possible to use this code in some other method. 
    710 
     11Acked-by: Rafał Miłecki <zajec5@gmail.com> 
    812Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> 
    913--- 
  • trunk/target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch

    r27301 r27723  
    1 From 9a920f4d8eed485f7b73e9b13dab0e49c64d3ff8 Mon Sep 17 00:00:00 2001 
     1From beb36a1a49227ca6c5778a667aefc8cd3fd56a4f Mon Sep 17 00:00:00 2001 
    22From: Hauke Mehrtens <hauke@hauke-m.de> 
    33Date: Sat, 18 Jun 2011 14:30:55 +0200 
    4 Subject: [PATCH 03/14] bcma: add functions to scan cores needed on SoCs 
     4Subject: [PATCH 03/22] bcma: add functions to scan cores needed on SoCs 
     5MIME-Version: 1.0 
     6Content-Type: text/plain; charset=UTF-8 
     7Content-Transfer-Encoding: 8bit 
    58 
    69The chip common and mips core have to be setup early in the boot 
     
    1114just have to run bcma_bus_register() and it will search for the other 
    1215cores, initialize and register them. 
     16The cores are getting the same numbers as before. 
    1317 
     18Acked-by: Rafał Miłecki <zajec5@gmail.com> 
    1419Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> 
    1520--- 
    1621 drivers/bcma/bcma_private.h                 |    7 ++ 
    1722 drivers/bcma/driver_chipcommon.c            |    5 ++ 
    18  drivers/bcma/driver_pci.c                   |    3 + 
    19  drivers/bcma/main.c                         |   45 +++++++++++++ 
     23 drivers/bcma/driver_pci.c                   |    5 ++ 
     24 drivers/bcma/main.c                         |   46 +++++++++++++ 
    2025 drivers/bcma/scan.c                         |   95 +++++++++++++++++++++++++-- 
    2126 include/linux/bcma/bcma.h                   |    1 + 
    2227 include/linux/bcma/bcma_driver_chipcommon.h |    1 + 
    23  7 files changed, 151 insertions(+), 6 deletions(-) 
     28 7 files changed, 154 insertions(+), 6 deletions(-) 
    2429 
    2530--- a/drivers/bcma/bcma_private.h 
     
    4449--- a/drivers/bcma/driver_chipcommon.c 
    4550+++ b/drivers/bcma/driver_chipcommon.c 
    46 @@ -23,6 +23,9 @@ static inline u32 bcma_cc_write32_masked 
    47   
    48  void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) 
    49  { 
     51@@ -26,6 +26,9 @@ void bcma_core_chipcommon_init(struct bc 
     52        u32 leddc_on = 10; 
     53        u32 leddc_off = 90; 
     54  
    5055+       if (cc->setup_done) 
    5156+               return; 
     
    5459                cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT); 
    5560        cc->capabilities = bcma_cc_read32(cc, BCMA_CC_CAP); 
    56 @@ -38,6 +41,8 @@ void bcma_core_chipcommon_init(struct bc 
    57                 bcma_pmu_init(cc); 
    58         if (cc->capabilities & BCMA_CC_CAP_PCTL) 
    59                 pr_err("Power control not implemented!\n"); 
     61@@ -52,6 +55,8 @@ void bcma_core_chipcommon_init(struct bc 
     62                        ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | 
     63                         (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT))); 
     64        } 
    6065+ 
    6166+       cc->setup_done = true; 
     
    6570--- a/drivers/bcma/driver_pci.c 
    6671+++ b/drivers/bcma/driver_pci.c 
    67 @@ -159,7 +159,10 @@ static void bcma_pcicore_serdes_workarou 
     72@@ -187,6 +187,9 @@ static bool bcma_core_pci_is_in_hostmode 
    6873  
    6974 void bcma_core_pci_init(struct bcma_drv_pci *pc) 
     
    7176+       if (pc->setup_done) 
    7277+               return; 
    73         bcma_pcicore_serdes_workaround(pc); 
     78+ 
     79        if (bcma_core_pci_is_in_hostmode(pc)) { 
     80 #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     81                bcma_core_pci_hostmode_init(pc); 
     82@@ -196,6 +199,8 @@ void bcma_core_pci_init(struct bcma_drv_ 
     83        } else { 
     84                bcma_core_pci_clientmode_init(pc); 
     85        } 
     86+ 
    7487+       pc->setup_done = true; 
    7588 } 
     
    7891--- a/drivers/bcma/main.c 
    7992+++ b/drivers/bcma/main.c 
    80 @@ -167,6 +167,51 @@ void bcma_bus_unregister(struct bcma_bus 
     93@@ -169,6 +169,52 @@ void bcma_bus_unregister(struct bcma_bus 
    8194        bcma_unregister_cores(bus); 
    8295 } 
     
    97110+       match.rev = BCMA_ANY_REV; 
    98111+ 
    99 +       /* Scan for devices (cores) */ 
     112+       /* Scan for chip common core */ 
    100113+       err = bcma_bus_scan_early(bus, &match, core_cc); 
    101114+       if (err) { 
     
    109122+       match.rev = BCMA_ANY_REV; 
    110123+ 
     124+       /* Scan for mips core */ 
    111125+       err = bcma_bus_scan_early(bus, &match, core_mips); 
    112126+       if (err) { 
     
    288302--- a/include/linux/bcma/bcma.h 
    289303+++ b/include/linux/bcma/bcma.h 
    290 @@ -185,6 +185,7 @@ struct bcma_bus { 
     304@@ -190,6 +190,7 @@ struct bcma_bus { 
    291305        struct bcma_device *mapped_core; 
    292306        struct list_head cores; 
     
    298312--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    299313+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    300 @@ -259,6 +259,7 @@ struct bcma_drv_cc { 
     314@@ -252,6 +252,7 @@ struct bcma_drv_cc { 
    301315        u32 status; 
    302316        u32 capabilities; 
  • trunk/target/linux/brcm47xx/patches-3.0/0004-bcma-add-SOC-bus.patch

    r27301 r27723  
    1 From a807b2fb233af60028ed38ba237953bcffdf33e9 Mon Sep 17 00:00:00 2001 
     1From 22573303ad477fa07c948a9944e9c18fea9af724 Mon Sep 17 00:00:00 2001 
    22From: Hauke Mehrtens <hauke@hauke-m.de> 
    33Date: Sat, 18 Jun 2011 14:31:53 +0200 
    4 Subject: [PATCH 04/14] bcma: add SOC bus 
     4Subject: [PATCH 04/22] bcma: add SOC bus 
     5MIME-Version: 1.0 
     6Content-Type: text/plain; charset=UTF-8 
     7Content-Transfer-Encoding: 8bit 
    58 
    6 This patch adds support for using bcma on an embedded bus. An embedded 
    7 system like the bcm4716 could register this bus and it searches for the 
    8 bcma cores then. 
     9This patch adds support for using bcma on a Broadcom SoC as the system 
     10bus. An SoC like the bcm4716 could register this bus and use it to 
     11searches for the bcma cores and register the devices on this bus. 
    912 
     13BCMA_HOSTTYPE_NONE was intended for SoCs at first but BCMA_HOSTTYPE_SOC 
     14is a better name. 
     15 
     16Acked-by: Rafał Miłecki <zajec5@gmail.com> 
    1017Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> 
    1118--- 
    12  drivers/bcma/Kconfig          |    5 + 
     19 drivers/bcma/Kconfig          |    4 + 
    1320 drivers/bcma/Makefile         |    1 + 
    14  drivers/bcma/host_soc.c       |  178 +++++++++++++++++++++++++++++++++++++++++ 
    15  drivers/bcma/main.c           |    1 + 
    16  drivers/bcma/scan.c           |   24 +++++- 
    17  include/linux/bcma/bcma.h     |    4 + 
     21 drivers/bcma/host_soc.c       |  183 +++++++++++++++++++++++++++++++++++++++++ 
     22 drivers/bcma/main.c           |    6 +- 
     23 drivers/bcma/scan.c           |   42 ++++++++- 
     24 include/linux/bcma/bcma.h     |    5 +- 
    1825 include/linux/bcma/bcma_soc.h |   16 ++++ 
    19  7 files changed, 227 insertions(+), 2 deletions(-) 
     26 7 files changed, 250 insertions(+), 7 deletions(-) 
    2027 create mode 100644 drivers/bcma/host_soc.c 
    2128 create mode 100644 include/linux/bcma/bcma_soc.h 
     
    2330--- a/drivers/bcma/Kconfig 
    2431+++ b/drivers/bcma/Kconfig 
    25 @@ -27,6 +27,11 @@ config BCMA_HOST_PCI 
    26         bool "Support for BCMA on PCI-host bus" 
    27         depends on BCMA_HOST_PCI_POSSIBLE 
     32@@ -34,6 +34,10 @@ config BCMA_DRIVER_PCI_HOSTMODE 
     33        help 
     34          PCI core hostmode operation (external PCI bus). 
    2835  
    2936+config BCMA_HOST_SOC 
    3037+       bool 
    3138+       depends on BCMA && MIPS 
    32 +       default n 
    3339+ 
    3440 config BCMA_DEBUG 
     
    3743--- a/drivers/bcma/Makefile 
    3844+++ b/drivers/bcma/Makefile 
    39 @@ -2,6 +2,7 @@ bcma-y                                  += main.o scan.o core.o sprom 
    40  bcma-y                                 += driver_chipcommon.o driver_chipcommon_pmu.o 
     45@@ -3,6 +3,7 @@ bcma-y                                  += driver_chipcommon.o driver 
    4146 bcma-y                                 += driver_pci.o 
     47 bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE)        += driver_pci_host.o 
    4248 bcma-$(CONFIG_BCMA_HOST_PCI)           += host_pci.o 
    4349+bcma-$(CONFIG_BCMA_HOST_SOC)           += host_soc.o 
     
    4753--- /dev/null 
    4854+++ b/drivers/bcma/host_soc.c 
    49 @@ -0,0 +1,178 @@ 
     55@@ -0,0 +1,183 @@ 
    5056+/* 
    5157+ * Broadcom specific AMBA 
     
    211217+{ 
    212218+       struct bcma_bus *bus = &soc->bus; 
     219+       int err; 
    213220+ 
    214221+       /* iomap only first core. We have to read some register on this core 
    215222+        * to scan the bus. 
    216223+        */ 
    217 +       bus->mmio = ioremap(BCMA_ADDR_BASE, BCMA_CORE_SIZE * 1); 
     224+       bus->mmio = ioremap_nocache(BCMA_ADDR_BASE, BCMA_CORE_SIZE * 1); 
    218225+       if (!bus->mmio) 
    219226+               return -ENOMEM; 
     
    224231+ 
    225232+       /* Register */ 
    226 +       return bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips); 
     233+       err = bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips); 
     234+       if (err) 
     235+               iounmap(bus->mmio); 
     236+ 
     237+       return err; 
    227238+} 
    228239--- a/drivers/bcma/main.c 
    229240+++ b/drivers/bcma/main.c 
    230 @@ -95,6 +95,7 @@ static int bcma_register_cores(struct bc 
     241@@ -66,6 +66,10 @@ static struct bcma_device *bcma_find_cor 
     242 static void bcma_release_core_dev(struct device *dev) 
     243 { 
     244        struct bcma_device *core = container_of(dev, struct bcma_device, dev); 
     245+       if (core->io_addr) 
     246+               iounmap(core->io_addr); 
     247+       if (core->io_wrap) 
     248+               iounmap(core->io_wrap); 
     249        kfree(core); 
     250 } 
     251  
     252@@ -93,8 +97,8 @@ static int bcma_register_cores(struct bc 
     253                        core->dma_dev = &bus->host_pci->dev; 
     254                        core->irq = bus->host_pci->irq; 
    231255                        break; 
    232                 case BCMA_HOSTTYPE_NONE: 
     256-               case BCMA_HOSTTYPE_NONE: 
    233257                case BCMA_HOSTTYPE_SDIO: 
    234258+               case BCMA_HOSTTYPE_SOC: 
     
    238262--- a/drivers/bcma/scan.c 
    239263+++ b/drivers/bcma/scan.c 
    240 @@ -337,6 +337,14 @@ static int bcma_get_next_core(struct bcm 
     264@@ -337,6 +337,16 @@ static int bcma_get_next_core(struct bcm 
    241265                        } 
    242266                } 
    243267        } 
    244268+       if (bus->hosttype == BCMA_HOSTTYPE_SOC) { 
    245 +               core->io_addr = ioremap(core->addr, BCMA_CORE_SIZE); 
     269+               core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE); 
    246270+               if (!core->io_addr) 
    247271+                       return -ENOMEM; 
    248 +               core->io_wrap = ioremap(core->wrap, BCMA_CORE_SIZE); 
    249 +               if (!core->io_wrap) 
     272+               core->io_wrap = ioremap_nocache(core->wrap, BCMA_CORE_SIZE); 
     273+               if (!core->io_wrap) { 
     274+                       iounmap(core->io_addr); 
    250275+                       return -ENOMEM; 
     276+               } 
    251277+       } 
    252278        return 0; 
    253279 } 
    254280  
    255 @@ -369,7 +377,13 @@ int bcma_bus_scan(struct bcma_bus *bus) 
     281@@ -369,7 +379,14 @@ int bcma_bus_scan(struct bcma_bus *bus) 
    256282        bcma_init_bus(bus); 
    257283  
     
    259285-       eromptr = bus->mmio; 
    260286+       if (bus->hosttype == BCMA_HOSTTYPE_SOC) { 
    261 +               eromptr = ioremap(erombase, BCMA_CORE_SIZE); 
     287+               eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE); 
    262288+               if (!eromptr) 
    263289+                       return -ENOMEM; 
    264 +       } else 
     290+       } else { 
    265291+               eromptr = bus->mmio; 
     292+       } 
    266293+ 
    267294        eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32); 
    268295  
    269296        bcma_scan_switch_core(bus, erombase); 
    270 @@ -417,7 +431,13 @@ int __init bcma_bus_scan_early(struct bc 
    271         int err, core_num = 0; 
     297@@ -404,6 +421,9 @@ int bcma_bus_scan(struct bcma_bus *bus) 
     298                list_add(&core->list, &bus->cores); 
     299        } 
     300  
     301+       if (bus->hosttype == BCMA_HOSTTYPE_SOC) 
     302+               iounmap(eromptr); 
     303+ 
     304        return 0; 
     305 } 
     306  
     307@@ -414,10 +434,18 @@ int __init bcma_bus_scan_early(struct bc 
     308        u32 erombase; 
     309        u32 __iomem *eromptr, *eromend; 
     310  
     311-       int err, core_num = 0; 
     312+       int err = -ENODEV; 
     313+       int core_num = 0; 
    272314  
    273315        erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM); 
    274316-       eromptr = bus->mmio; 
    275317+       if (bus->hosttype == BCMA_HOSTTYPE_SOC) { 
    276 +               eromptr = ioremap(erombase, BCMA_CORE_SIZE); 
     318+               eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE); 
    277319+               if (!eromptr) 
    278320+                       return -ENOMEM; 
    279 +       } else 
     321+       } else { 
    280322+               eromptr = bus->mmio; 
     323+       } 
    281324+ 
    282325        eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32); 
    283326  
    284327        bcma_scan_switch_core(bus, erombase); 
     328@@ -447,8 +475,12 @@ int __init bcma_bus_scan_early(struct bc 
     329                        core->id.class); 
     330  
     331                list_add(&core->list, &bus->cores); 
     332-               return 0; 
     333+               err = 0; 
     334+               break; 
     335        } 
     336  
     337-       return -ENODEV; 
     338+       if (bus->hosttype == BCMA_HOSTTYPE_SOC) 
     339+               iounmap(eromptr); 
     340+ 
     341+       return err; 
     342 } 
    285343--- a/include/linux/bcma/bcma.h 
    286344+++ b/include/linux/bcma/bcma.h 
    287 @@ -17,6 +17,7 @@ enum bcma_hosttype { 
    288         BCMA_HOSTTYPE_NONE, 
     345@@ -14,9 +14,9 @@ struct bcma_device; 
     346 struct bcma_bus; 
     347  
     348 enum bcma_hosttype { 
     349-       BCMA_HOSTTYPE_NONE, 
    289350        BCMA_HOSTTYPE_PCI, 
    290351        BCMA_HOSTTYPE_SDIO, 
     
    293354  
    294355 struct bcma_chipinfo { 
    295 @@ -133,6 +134,9 @@ struct bcma_device { 
     356@@ -138,6 +138,9 @@ struct bcma_device { 
    296357        u32 addr; 
    297358        u32 wrap; 
  • trunk/target/linux/brcm47xx/patches-3.0/0005-bcma-add-mips-driver.patch

    r27301 r27723  
    1 From 0a1a5fd8aab864e7b531ab88fd317ff7278d884d Mon Sep 17 00:00:00 2001 
     1From 5961a1401605cd1941d5260a03b1dc2e8ae80619 Mon Sep 17 00:00:00 2001 
    22From: Hauke Mehrtens <hauke@hauke-m.de> 
    33Date: Mon, 6 Jun 2011 00:07:32 +0200 
    4 Subject: [PATCH 05/14] bcma: add mips driver 
     4Subject: [PATCH 05/22] bcma: add mips driver 
    55 
    66This adds a mips driver to bcma. This is only found on embedded 
     
    1010Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> 
    1111--- 
    12  drivers/bcma/Kconfig                  |   11 ++- 
    13  drivers/bcma/Makefile                 |    1 + 
    14  drivers/bcma/driver_mips.c            |  234 +++++++++++++++++++++++++++++++++ 
    15  drivers/bcma/main.c                   |   19 +++ 
    16  include/linux/bcma/bcma.h             |    2 + 
    17  include/linux/bcma/bcma_driver_mips.h |   49 +++++++ 
    18  6 files changed, 315 insertions(+), 1 deletions(-) 
     12 drivers/bcma/Kconfig                        |    9 + 
     13 drivers/bcma/Makefile                       |    1 + 
     14 drivers/bcma/driver_mips.c                  |  243 +++++++++++++++++++++++++++ 
     15 drivers/bcma/main.c                         |   15 ++ 
     16 include/linux/bcma/bcma.h                   |    3 + 
     17 include/linux/bcma/bcma_driver_chipcommon.h |   13 ++ 
     18 include/linux/bcma/bcma_driver_mips.h       |   49 ++++++ 
     19 7 files changed, 333 insertions(+), 0 deletions(-) 
    1920 create mode 100644 drivers/bcma/driver_mips.c 
    2021 create mode 100644 include/linux/bcma/bcma_driver_mips.h 
     
    2223--- a/drivers/bcma/Kconfig 
    2324+++ b/drivers/bcma/Kconfig 
    24 @@ -29,9 +29,18 @@ config BCMA_HOST_PCI 
     25@@ -36,7 +36,16 @@ config BCMA_DRIVER_PCI_HOSTMODE 
    2526  
    2627 config BCMA_HOST_SOC 
    2728        bool 
    28 -       depends on BCMA && MIPS 
    2929+       depends on BCMA_DRIVER_MIPS 
    30         default n 
    31   
     30+ 
    3231+config BCMA_DRIVER_MIPS 
    3332+       bool "BCMA Broadcom MIPS core driver" 
    34 +       depends on BCMA && MIPS 
     33        depends on BCMA && MIPS 
    3534+       help 
    3635+         Driver for the Broadcom MIPS core attached to Broadcom specific 
     
    3837+ 
    3938+         If unsure, say N 
    40 + 
     39  
    4140 config BCMA_DEBUG 
    4241        bool "BCMA debugging" 
    43         depends on BCMA 
    4442--- a/drivers/bcma/Makefile 
    4543+++ b/drivers/bcma/Makefile 
    46 @@ -1,6 +1,7 @@ 
    47  bcma-y                                 += main.o scan.o core.o sprom.o 
     44@@ -2,6 +2,7 @@ bcma-y                                  += main.o scan.o core.o sprom 
    4845 bcma-y                                 += driver_chipcommon.o driver_chipcommon_pmu.o 
    4946 bcma-y                                 += driver_pci.o 
     47 bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE)        += driver_pci_host.o 
    5048+bcma-$(CONFIG_BCMA_DRIVER_MIPS)                += driver_mips.o 
    5149 bcma-$(CONFIG_BCMA_HOST_PCI)           += host_pci.o 
     
    5452--- /dev/null 
    5553+++ b/drivers/bcma/driver_mips.c 
    56 @@ -0,0 +1,234 @@ 
     54@@ -0,0 +1,243 @@ 
    5755+/* 
    5856+ * Broadcom specific AMBA 
     
    7674+#include <linux/time.h> 
    7775+ 
    78 +/* The 47162a0 hangs when reading its registers */ 
     76+/* The 47162a0 hangs when reading MIPS DMP registers registers */ 
    7977+static inline bool bcma_core_mips_bcm47162a0_quirk(struct bcma_device *dev) 
    8078+{ 
    8179+       return dev->bus->chipinfo.id == 47162 && dev->bus->chipinfo.rev == 0 && 
    8280+              dev->id.id == BCMA_CORE_MIPS_74K; 
     81+} 
     82+ 
     83+/* The 5357b0 hangs when reading USB20H DMP registers */ 
     84+static inline bool bcma_core_mips_bcm5357b0_quirk(struct bcma_device *dev) 
     85+{ 
     86+       return (dev->bus->chipinfo.id == 0x5357 || 
     87+               dev->bus->chipinfo.id == 0x4749) && 
     88+              dev->bus->chipinfo.pkg == 11 && 
     89+              dev->id.id == BCMA_CORE_USB20_HOST; 
    8390+} 
    8491+ 
     
    118125+       if (bcma_core_mips_bcm47162a0_quirk(dev)) 
    119126+               return dev->core_index; 
     127+       if (bcma_core_mips_bcm5357b0_quirk(dev)) 
     128+               return dev->core_index; 
    120129+       flag = bcma_aread32(dev, BCMA_MIPS_OOBSELOUTA30); 
    121130+ 
    122131+       return flag & 0x1F; 
    123132+} 
    124 + 
    125133+ 
    126134+/* Get the MIPS IRQ assignment for a specified device. 
    127135+ * If unassigned, 0 is returned. 
    128 + * If disabled, 5 is returned. 
    129136+ */ 
    130137+unsigned int bcma_core_mips_irq(struct bcma_device *dev) 
     
    218225+       struct bcma_bus *bus = mcore->core->bus; 
    219226+ 
    220 +       mcore->flash_buswidth = 2; 
    221 +       if (bus->drv_cc.core) { 
    222 +               mcore->flash_window = 0x1c000000; 
    223 +               mcore->flash_window_size = 0x02000000; 
    224 +               switch (bus->drv_cc.capabilities & BCMA_CC_CAP_FLASHT) { 
    225 +               case BCMA_CC_FLASHT_STSER: 
    226 +               case BCMA_CC_FLASHT_ATSER: 
    227 +                       pr_err("Serial flash not supported.\n"); 
    228 +                       break; 
    229 +               case BCMA_CC_FLASHT_PARA: 
    230 +                       if ((bcma_read32(bus->drv_cc.core, BCMA_CC_FLASH_CFG) & 
    231 +                            BCMA_CC_OTPS) == 0) 
    232 +                               mcore->flash_buswidth = 1; 
    233 +                       break; 
    234 +               } 
    235 +       } else { 
    236 +               mcore->flash_window = 0x1fc00000; 
    237 +               mcore->flash_window_size = 0x00400000; 
     227+       switch (bus->drv_cc.capabilities & BCMA_CC_CAP_FLASHT) { 
     228+       case BCMA_CC_FLASHT_STSER: 
     229+       case BCMA_CC_FLASHT_ATSER: 
     230+               pr_err("Serial flash not supported.\n"); 
     231+               break; 
     232+       case BCMA_CC_FLASHT_PARA: 
     233+               pr_info("found parallel flash.\n"); 
     234+               bus->drv_cc.pflash.window = 0x1c000000; 
     235+               bus->drv_cc.pflash.window_size = 0x02000000; 
     236+ 
     237+               if ((bcma_read32(bus->drv_cc.core, BCMA_CC_FLASH_CFG) & 
     238+                    BCMA_CC_FLASH_CFG_DS) == 0) 
     239+                       bus->drv_cc.pflash.buswidth = 1; 
     240+               else 
     241+                       bus->drv_cc.pflash.buswidth = 2; 
     242+               break; 
     243+       default: 
     244+               pr_err("flash not supported.\n"); 
    238245+       } 
    239246+} 
     
    291298--- a/drivers/bcma/main.c 
    292299+++ b/drivers/bcma/main.c 
    293 @@ -80,6 +80,7 @@ static int bcma_register_cores(struct bc 
     300@@ -84,6 +84,7 @@ static int bcma_register_cores(struct bc 
    294301                case BCMA_CORE_CHIPCOMMON: 
    295302                case BCMA_CORE_PCI: 
     
    299306                } 
    300307  
    301 @@ -141,6 +142,15 @@ int bcma_bus_register(struct bcma_bus *b 
     308@@ -144,6 +145,13 @@ int bcma_bus_register(struct bcma_bus *b 
    302309                bcma_core_chipcommon_init(&bus->drv_cc); 
    303310        } 
    304311  
    305 +#ifdef CONFIG_BCMA_DRIVER_MIPS 
    306312+       /* Init MIPS core */ 
    307313+       core = bcma_find_core(bus, BCMA_CORE_MIPS_74K); 
     
    310316+               bcma_core_mips_init(&bus->drv_mips); 
    311317+       } 
    312 +#endif 
    313318+ 
    314319        /* Init PCIE core */ 
    315320        core = bcma_find_core(bus, BCMA_CORE_PCIE); 
    316321        if (core) { 
    317 @@ -208,6 +218,15 @@ int __init bcma_bus_early_register(struc 
     322@@ -214,6 +222,13 @@ int __init bcma_bus_early_register(struc 
    318323                bcma_core_chipcommon_init(&bus->drv_cc); 
    319324        } 
    320325  
    321 +#ifdef CONFIG_BCMA_DRIVER_MIPS 
    322326+       /* Init MIPS core */ 
    323327+       core = bcma_find_core(bus, BCMA_CORE_MIPS_74K); 
     
    326330+               bcma_core_mips_init(&bus->drv_mips); 
    327331+       } 
    328 +#endif 
    329332+ 
    330333        pr_info("Early bus registered\n"); 
     
    341344  
    342345 #include "bcma_regs.h" 
    343 @@ -193,6 +194,7 @@ struct bcma_bus { 
     346@@ -130,6 +131,7 @@ struct bcma_device { 
     347  
     348        struct device dev; 
     349        struct device *dma_dev; 
     350+ 
     351        unsigned int irq; 
     352        bool dev_registered; 
     353  
     354@@ -197,6 +199,7 @@ struct bcma_bus { 
    344355  
    345356        struct bcma_drv_cc drv_cc; 
     
    349360        /* We decided to share SPROM struct with SSB as long as we do not need 
    350361         * any hacks for BCMA. This simplifies drivers code. */ 
     362--- a/include/linux/bcma/bcma_driver_chipcommon.h 
     363+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
     364@@ -24,6 +24,7 @@ 
     365 #define   BCMA_CC_FLASHT_NONE          0x00000000      /* No flash */ 
     366 #define   BCMA_CC_FLASHT_STSER         0x00000100      /* ST serial flash */ 
     367 #define   BCMA_CC_FLASHT_ATSER         0x00000200      /* Atmel serial flash */ 
     368+#define   BCMA_CC_FLASHT_NFLASH                0x00000200 
     369 #define          BCMA_CC_FLASHT_PARA           0x00000700      /* Parallel flash */ 
     370 #define  BCMA_CC_CAP_PLLT              0x00038000      /* PLL Type */ 
     371 #define   BCMA_PLLTYPE_NONE            0x00000000 
     372@@ -178,6 +179,7 @@ 
     373 #define BCMA_CC_PROG_CFG               0x0120 
     374 #define BCMA_CC_PROG_WAITCNT           0x0124 
     375 #define BCMA_CC_FLASH_CFG              0x0128 
     376+#define  BCMA_CC_FLASH_CFG_DS          0x0010  /* Data size, 0=8bit, 1=16bit */ 
     377 #define BCMA_CC_FLASH_WAITCNT          0x012C 
     378 /* 0x1E0 is defined as shared BCMA_CLKCTLST */ 
     379 #define BCMA_CC_HW_WORKAROUND          0x01E4 /* Hardware workaround (rev >= 20) */ 
     380@@ -247,6 +249,14 @@ struct bcma_chipcommon_pmu { 
     381        u32 crystalfreq;        /* The active crystal frequency (in kHz) */ 
     382 }; 
     383  
     384+#ifdef CONFIG_BCMA_DRIVER_MIPS 
     385+struct bcma_pflash { 
     386+       u8 buswidth; 
     387+       u32 window; 
     388+       u32 window_size; 
     389+}; 
     390+#endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     391+ 
     392 struct bcma_drv_cc { 
     393        struct bcma_device *core; 
     394        u32 status; 
     395@@ -256,6 +266,9 @@ struct bcma_drv_cc { 
     396        /* Fast Powerup Delay constant */ 
     397        u16 fast_pwrup_delay; 
     398        struct bcma_chipcommon_pmu pmu; 
     399+#ifdef CONFIG_BCMA_DRIVER_MIPS 
     400+       struct bcma_pflash pflash; 
     401+#endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     402 }; 
     403  
     404 /* Register access */ 
    351405--- /dev/null 
    352406+++ b/include/linux/bcma/bcma_driver_mips.h 
     
    357411+#define BCMA_MIPS_IPSFLAG              0x0F08 
    358412+/* which sbflags get routed to mips interrupt 1 */ 
    359 +#define        BCMA_MIPS_IPSFLAG_IRQ1         0x0000003F 
    360 +#define        BCMA_MIPS_IPSFLAG_IRQ1_SHIFT   0 
     413+#define  BCMA_MIPS_IPSFLAG_IRQ1                0x0000003F 
     414+#define  BCMA_MIPS_IPSFLAG_IRQ1_SHIFT  0 
    361415+/* which sbflags get routed to mips interrupt 2 */ 
    362 +#define        BCMA_MIPS_IPSFLAG_IRQ2         0x00003F00 
    363 +#define        BCMA_MIPS_IPSFLAG_IRQ2_SHIFT   8 
     416+#define  BCMA_MIPS_IPSFLAG_IRQ2                0x00003F00 
     417+#define  BCMA_MIPS_IPSFLAG_IRQ2_SHIFT  8 
    364418+/* which sbflags get routed to mips interrupt 3 */ 
    365 +#define        BCMA_MIPS_IPSFLAG_IRQ3         0x003F0000 
    366 +#define        BCMA_MIPS_IPSFLAG_IRQ3_SHIFT   16 
     419+#define  BCMA_MIPS_IPSFLAG_IRQ3                0x003F0000 
     420+#define  BCMA_MIPS_IPSFLAG_IRQ3_SHIFT  16 
    367421+/* which sbflags get routed to mips interrupt 4 */ 
    368 +#define        BCMA_MIPS_IPSFLAG_IRQ4         0x3F000000 
    369 +#define        BCMA_MIPS_IPSFLAG_IRQ4_SHIFT   24 
     422+#define  BCMA_MIPS_IPSFLAG_IRQ4                0x3F000000 
     423+#define  BCMA_MIPS_IPSFLAG_IRQ4_SHIFT  24 
    370424+ 
    371425+/* MIPS 74K core registers */ 
     
    390444+       u8 setup_done:1; 
    391445+       unsigned int assigned_irqs; 
    392 + 
    393 +       u8 flash_buswidth; 
    394 +       u32 flash_window; 
    395 +       u32 flash_window_size; 
    396446+}; 
    397447+ 
     448+#ifdef CONFIG_BCMA_DRIVER_MIPS 
    398449+extern void bcma_core_mips_init(struct bcma_drv_mips *mcore); 
     450+#else 
     451+static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { } 
     452+#endif 
    399453+ 
    400454+extern unsigned int bcma_core_mips_irq(struct bcma_device *dev); 
  • trunk/target/linux/brcm47xx/patches-3.0/0006-bcma-add-serial-console-support.patch

    r27301 r27723  
    1 From b7c100827012ba588089807475affe0c69a3f817 Mon Sep 17 00:00:00 2001 
     1From 5088e81ecc5c953df7de84eeedd0817326bc4be4 Mon Sep 17 00:00:00 2001 
    22From: Hauke Mehrtens <hauke@hauke-m.de> 
    33Date: Mon, 6 Jun 2011 00:07:33 +0200 
    4 Subject: [PATCH 06/14] bcma: add serial console support 
     4Subject: [PATCH 06/22] bcma: add serial console support 
    55 
    6 This adds support for serial console to bcma, when operating on an 
    7 embedded device. 
     6This adds support for serial console to bcma, when operating on an SoC. 
    87 
    98Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> 
    109--- 
    11  drivers/bcma/bcma_private.h           |    6 +++ 
    12  drivers/bcma/driver_chipcommon.c      |   64 +++++++++++++++++++++++++++++++++ 
    13  drivers/bcma/driver_mips.c            |    9 +++++ 
    14  include/linux/bcma/bcma_driver_mips.h |   11 ++++++ 
    15  4 files changed, 90 insertions(+), 0 deletions(-) 
     10 drivers/bcma/bcma_private.h                 |    8 ++++ 
     11 drivers/bcma/driver_chipcommon.c            |   48 +++++++++++++++++++++++++++ 
     12 drivers/bcma/driver_chipcommon_pmu.c        |   26 ++++++++++++++ 
     13 drivers/bcma/driver_mips.c                  |    1 + 
     14 include/linux/bcma/bcma_driver_chipcommon.h |   14 ++++++++ 
     15 5 files changed, 97 insertions(+), 0 deletions(-) 
    1616 
    1717--- a/drivers/bcma/bcma_private.h 
    1818+++ b/drivers/bcma/bcma_private.h 
    19 @@ -29,6 +29,12 @@ void bcma_init_bus(struct bcma_bus *bus) 
     19@@ -29,6 +29,14 @@ void bcma_init_bus(struct bcma_bus *bus) 
    2020 /* sprom.c */ 
    2121 int bcma_sprom_get(struct bcma_bus *bus); 
     
    2323+/* driver_chipcommon.c */ 
    2424+#ifdef CONFIG_BCMA_DRIVER_MIPS 
    25 +extern int bcma_chipco_serial_init(struct bcma_drv_cc *cc, 
    26 +                                  struct bcma_drv_mips_serial_port *ports); 
     25+void bcma_chipco_serial_init(struct bcma_drv_cc *cc); 
    2726+#endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     27+ 
     28+/* driver_chipcommon_pmu.c */ 
     29+u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc); 
    2830+ 
    2931 #ifdef CONFIG_BCMA_HOST_PCI 
     
    3234--- a/drivers/bcma/driver_chipcommon.c 
    3335+++ b/drivers/bcma/driver_chipcommon.c 
    34 @@ -92,3 +92,67 @@ u32 bcma_chipco_gpio_polarity(struct bcm 
     36@@ -106,3 +106,51 @@ u32 bcma_chipco_gpio_polarity(struct bcm 
    3537 { 
    3638        return bcma_cc_write32_masked(cc, BCMA_CC_GPIOPOL, mask, value); 
     
    3840+ 
    3941+#ifdef CONFIG_BCMA_DRIVER_MIPS 
    40 +int bcma_chipco_serial_init(struct bcma_drv_cc *cc, 
    41 +                           struct bcma_drv_mips_serial_port *ports) 
     42+void bcma_chipco_serial_init(struct bcma_drv_cc *cc) 
    4243+{ 
    43 +       int nr_ports = 0; 
    44 +       u32 plltype; 
    4544+       unsigned int irq; 
    46 +       u32 baud_base, div; 
    47 +       u32 i, n; 
     45+       u32 baud_base; 
     46+       u32 i; 
    4847+       unsigned int ccrev = cc->core->id.rev; 
     48+       struct bcma_serial_port *ports = cc->serial_ports; 
    4949+ 
    50 +       plltype = (cc->capabilities & BCMA_CC_CAP_PLLT); 
    51 +       irq = bcma_core_mips_irq(cc->core); 
    52 + 
    53 +       if ((ccrev >= 11) && (ccrev != 15) && (ccrev != 20)) { 
     50+       if (ccrev >= 11 && ccrev != 15) { 
    5451+               /* Fixed ALP clock */ 
    55 +               baud_base = 20000000; 
    56 +               if (cc->capabilities & BCMA_CC_CAP_PMU) { 
    57 +                       /* FIXME: baud_base is different for devices with a PMU */ 
    58 +                       WARN_ON(1); 
    59 +               } 
    60 +               div = 1; 
     52+               baud_base = bcma_pmu_alp_clock(cc); 
    6153+               if (ccrev >= 21) { 
    6254+                       /* Turn off UART clock before switching clocksource. */ 
     
    7567+                                      | BCMA_CC_CORECTL_UARTCLKEN); 
    7668+               } 
    77 +       } else 
     69+       } else { 
    7870+               pr_err("serial not supported on this device ccrev: 0x%x\n", 
    7971+                      ccrev); 
     72+               return; 
     73+       } 
     74+ 
     75+       irq = bcma_core_mips_irq(cc->core); 
    8076+ 
    8177+       /* Determine the registers of the UARTs */ 
    82 +       n = (cc->capabilities & BCMA_CC_CAP_NRUART); 
    83 +       for (i = 0; i < n; i++) { 
    84 +               void __iomem *cc_mmio; 
    85 +               void __iomem *uart_regs; 
    86 + 
    87 +               cc_mmio = cc->core->bus->mmio + 
    88 +                         (cc->core->core_index * BCMA_CORE_SIZE); 
    89 +               uart_regs = cc_mmio + BCMA_CC_UART0_DATA; 
    90 +               uart_regs += (i * 256); 
    91 + 
    92 +               nr_ports++; 
    93 +               ports[i].regs = uart_regs; 
     78+       cc->nr_serial_ports = (cc->capabilities & BCMA_CC_CAP_NRUART); 
     79+       for (i = 0; i < cc->nr_serial_ports; i++) { 
     80+               ports[i].regs = cc->core->io_addr + BCMA_CC_UART0_DATA + 
     81+                               (i * 256); 
    9482+               ports[i].irq = irq; 
    9583+               ports[i].baud_base = baud_base; 
    9684+               ports[i].reg_shift = 0; 
    9785+       } 
    98 + 
    99 +       return nr_ports; 
    10086+} 
    10187+#endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     88--- a/drivers/bcma/driver_chipcommon_pmu.c 
     89+++ b/drivers/bcma/driver_chipcommon_pmu.c 
     90@@ -136,3 +136,29 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
     91        bcma_pmu_swreg_init(cc); 
     92        bcma_pmu_workarounds(cc); 
     93 } 
     94+ 
     95+u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc) 
     96+{ 
     97+       struct bcma_bus *bus = cc->core->bus; 
     98+ 
     99+       switch (bus->chipinfo.id) { 
     100+       case 0x4716: 
     101+       case 0x4748: 
     102+       case 47162: 
     103+       case 0x4313: 
     104+       case 0x5357: 
     105+       case 0x4749: 
     106+       case 53572: 
     107+               /* always 20Mhz */ 
     108+               return 20000 * 1000; 
     109+       case 0x5356: 
     110+       case 0x5300: 
     111+               /* always 25Mhz */ 
     112+               return 25000 * 1000; 
     113+       default: 
     114+               pr_warn("No ALP clock specified for %04X device, " 
     115+                       "pmu rev. %d, using default %d Hz\n", 
     116+                       bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
     117+       } 
     118+       return BCMA_CC_PMU_ALP_CLOCK; 
     119+} 
    102120--- a/drivers/bcma/driver_mips.c 
    103121+++ b/drivers/bcma/driver_mips.c 
    104 @@ -157,6 +157,14 @@ static void bcma_core_mips_dump_irq(stru 
    105         } 
    106  } 
    107   
    108 +static void bcma_core_mips_serial_init(struct bcma_drv_mips *mcore) 
    109 +{ 
    110 +       struct bcma_bus *bus = mcore->core->bus; 
    111 + 
    112 +       mcore->nr_serial_ports = bcma_chipco_serial_init(&bus->drv_cc, 
    113 +                                                        mcore->serial_ports); 
    114 +} 
    115 + 
    116  static void bcma_core_mips_flash_detect(struct bcma_drv_mips *mcore) 
    117  { 
    118         struct bcma_bus *bus = mcore->core->bus; 
    119 @@ -229,6 +237,7 @@ void bcma_core_mips_init(struct bcma_drv 
     122@@ -238,6 +238,7 @@ void bcma_core_mips_init(struct bcma_drv 
    120123        if (mcore->setup_done) 
    121124                return; 
    122125  
    123 +       bcma_core_mips_serial_init(mcore); 
     126+       bcma_chipco_serial_init(&bus->drv_cc); 
    124127        bcma_core_mips_flash_detect(mcore); 
    125128        mcore->setup_done = true; 
    126129 } 
    127 --- a/include/linux/bcma/bcma_driver_mips.h 
    128 +++ b/include/linux/bcma/bcma_driver_mips.h 
    129 @@ -32,11 +32,22 @@ 
     130--- a/include/linux/bcma/bcma_driver_chipcommon.h 
     131+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
     132@@ -241,6 +241,9 @@ 
     133 #define BCMA_CC_SPROM                  0x0800 /* SPROM beginning */ 
     134 #define BCMA_CC_SPROM_PCIE6            0x0830 /* SPROM beginning on PCIe rev >= 6 */ 
    130135  
    131  struct bcma_device; 
    132   
    133 +struct bcma_drv_mips_serial_port { 
     136+/* ALP clock on pre-PMU chips */ 
     137+#define BCMA_CC_PMU_ALP_CLOCK          20000000 
     138+ 
     139 /* Data for the PMU, if available. 
     140  * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) 
     141  */ 
     142@@ -255,6 +258,14 @@ struct bcma_pflash { 
     143        u32 window; 
     144        u32 window_size; 
     145 }; 
     146+ 
     147+struct bcma_serial_port { 
    134148+       void *regs; 
    135149+       unsigned long clockspeed; 
     
    138152+       unsigned int reg_shift; 
    139153+}; 
     154 #endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     155  
     156 struct bcma_drv_cc { 
     157@@ -268,6 +279,9 @@ struct bcma_drv_cc { 
     158        struct bcma_chipcommon_pmu pmu; 
     159 #ifdef CONFIG_BCMA_DRIVER_MIPS 
     160        struct bcma_pflash pflash; 
    140161+ 
    141  struct bcma_drv_mips { 
    142         struct bcma_device *core; 
    143         u8 setup_done:1; 
    144         unsigned int assigned_irqs; 
     162+       int nr_serial_ports; 
     163+       struct bcma_serial_port serial_ports[4]; 
     164 #endif /* CONFIG_BCMA_DRIVER_MIPS */ 
     165 }; 
    145166  
    146 +       int nr_serial_ports; 
    147 +       struct bcma_drv_mips_serial_port serial_ports[4]; 
    148 + 
    149         u8 flash_buswidth; 
    150         u32 flash_window; 
    151         u32 flash_window_size; 
  • trunk/target/linux/brcm47xx/patches-3.0/0007-bcma-get-CPU-clock.patch

    r27301 r27723  
    1 From 257d5fe12600f08df764cac0abc17bef7b6fae9b Mon Sep 17 00:00:00 2001 
     1From e993e8342e660f29a048be872522eedabaa177e1 Mon Sep 17 00:00:00 2001 
    22From: Hauke Mehrtens <hauke@hauke-m.de> 
    3 Date: Sun, 19 Jun 2011 17:51:30 +0200 
    4 Subject: [PATCH 07/14] bcma: get CPU clock 
     3Date: Sat, 16 Jul 2011 15:19:38 +0200 
     4Subject: [PATCH 07/22] bcma: get CPU clock 
    55 
    66Add method to return the clock of the CPU. This is needed by the arch 
     
    99Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> 
    1010--- 
    11  drivers/bcma/bcma_private.h                 |    3 + 
    12  drivers/bcma/driver_chipcommon_pmu.c        |   87 +++++++++++++++++++++++++++ 
    13  drivers/bcma/driver_mips.c                  |   12 ++++ 
    14  include/linux/bcma/bcma_driver_chipcommon.h |   35 +++++++++++ 
    15  include/linux/bcma/bcma_driver_mips.h       |    1 + 
    16  5 files changed, 138 insertions(+), 0 deletions(-) 
     11 drivers/bcma/bcma_private.h                 |    1 + 
     12 drivers/bcma/driver_chipcommon_pmu.c        |  107 +++++++++++++++++++++++++++ 
     13 drivers/bcma/driver_mips.c                  |   12 +++ 
     14 include/linux/bcma/bcma_driver_chipcommon.h |   39 ++++++++++ 
     15 include/linux/bcma/bcma_driver_mips.h       |    2 + 
     16 5 files changed, 161 insertions(+), 0 deletions(-) 
    1717 
    1818--- a/drivers/bcma/bcma_private.h 
    1919+++ b/drivers/bcma/bcma_private.h 
    20 @@ -29,6 +29,9 @@ void bcma_init_bus(struct bcma_bus *bus) 
    21  /* sprom.c */ 
    22  int bcma_sprom_get(struct bcma_bus *bus); 
    23   
    24 +/* driver_chipcommon_pmu.c */ 
    25 +extern u32 bcma_pmu_get_clockcpu(struct bcma_drv_cc *cc); 
    26 + 
    27  /* driver_chipcommon.c */ 
    28  #ifdef CONFIG_BCMA_DRIVER_MIPS 
    29  extern int bcma_chipco_serial_init(struct bcma_drv_cc *cc, 
     20@@ -36,6 +36,7 @@ void bcma_chipco_serial_init(struct bcma 
     21  
     22 /* driver_chipcommon_pmu.c */ 
     23 u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc); 
     24+u32 bcma_pmu_get_clockcpu(struct bcma_drv_cc *cc); 
     25  
     26 #ifdef CONFIG_BCMA_HOST_PCI 
     27 /* host_pci.c */ 
    3028--- a/drivers/bcma/driver_chipcommon_pmu.c 
    3129+++ b/drivers/bcma/driver_chipcommon_pmu.c 
     
    4442                                        u32 offset, u32 mask, u32 set) 
    4543 { 
    46 @@ -136,3 +143,83 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
    47         bcma_pmu_swreg_init(cc); 
    48         bcma_pmu_workarounds(cc); 
     44@@ -162,3 +169,103 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c 
     45        } 
     46        return BCMA_CC_PMU_ALP_CLOCK; 
    4947 } 
    50 + 
    51 +static u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc) 
    52 +{ 
    53 +       struct bcma_bus *bus = cc->core->bus; 
    54 + 
    55 +       switch (bus->chipinfo.id) { 
    56 +       case 0x4716: 
    57 +       case 0x4748: 
    58 +       case 47162: 
    59 +               /* always 20Mhz */ 
    60 +               return 20000 * 1000; 
    61 +       default: 
    62 +               pr_warn("No ALP clock specified for %04X device, " 
    63 +                       "pmu rev. %d, using default %d Hz\n", 
    64 +                       bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
    65 +       } 
    66 +       return BCMA_CC_PMU_ALP_CLOCK; 
    67 +} 
    6848+ 
    6949+/* Find the output of the "m" pll divider given pll controls that start with 
     
    7353+{ 
    7454+       u32 tmp, div, ndiv, p1, p2, fc; 
     55+       struct bcma_bus *bus = cc->core->bus; 
     56+ 
     57+       BUG_ON((pll0 & 3) || (pll0 > BCMA_CC_PMU4716_MAINPLL_PLL0)); 
    7558+ 
    7659+       BUG_ON(!m || m > 4); 
    7760+ 
    78 +       BUG_ON((pll0 & 3) || (pll0 > BCMA_CC_PMU4716_MAINPLL_PLL0)); 
     61+       if (bus->chipinfo.id == 0x5357 || bus->chipinfo.id == 0x4749) { 
     62+               /* Detect failure in clock setting */ 
     63+               tmp = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT); 
     64+               if (tmp & 0x40000) 
     65+                       return 133 * 1000000; 
     66+       } 
    7967+ 
    8068+       tmp = bcma_chipco_pll_read(cc, pll0 + BCMA_CC_PPL_P1P2_OFF); 
     
    10896+               return bcma_pmu_clock(cc, BCMA_CC_PMU4716_MAINPLL_PLL0, 
    10997+                                     BCMA_CC_PMU5_MAINPLL_SSB); 
     98+       case 0x5356: 
     99+               return bcma_pmu_clock(cc, BCMA_CC_PMU5356_MAINPLL_PLL0, 
     100+                                     BCMA_CC_PMU5_MAINPLL_SSB); 
     101+       case 0x5357: 
     102+       case 0x4749: 
     103+               return bcma_pmu_clock(cc, BCMA_CC_PMU5357_MAINPLL_PLL0, 
     104+                                     BCMA_CC_PMU5_MAINPLL_SSB); 
     105+       case 0x5300: 
     106+               return bcma_pmu_clock(cc, BCMA_CC_PMU4706_MAINPLL_PLL0, 
     107+                                     BCMA_CC_PMU5_MAINPLL_SSB); 
     108+       case 53572: 
     109+               return 75000000; 
    110110+       default: 
    111111+               pr_warn("No backplane clock specified for %04X device, " 
     
    121121+       struct bcma_bus *bus = cc->core->bus; 
    122122+ 
    123 +       if ((cc->pmu.rev == 5 || cc->pmu.rev == 6 || cc->pmu.rev == 7) && 
    124 +           (bus->chipinfo.id != 0x4319)) 
    125 +               return bcma_pmu_clock(cc, BCMA_CC_PMU4716_MAINPLL_PLL0, 
    126 +                                     BCMA_CC_PMU5_MAINPLL_CPU); 
     123+       if (bus->chipinfo.id == 53572) 
     124+               return 300000000; 
     125+ 
     126+       if (cc->pmu.rev >= 5) { 
     127+               u32 pll; 
     128+               switch (bus->chipinfo.id) { 
     129+               case 0x5356: 
     130+                       pll = BCMA_CC_PMU5356_MAINPLL_PLL0; 
     131+                       break; 
     132+               case 0x5357: 
     133+               case 0x4749: 
     134+                       pll = BCMA_CC_PMU5357_MAINPLL_PLL0; 
     135+                       break; 
     136+               default: 
     137+                       pll = BCMA_CC_PMU4716_MAINPLL_PLL0; 
     138+                       break; 
     139+               } 
     140+ 
     141+               /* TODO: if (bus->chipinfo.id == 0x5300) 
     142+                 return si_4706_pmu_clock(sih, osh, cc, PMU4706_MAINPLL_PLL0, PMU5_MAINPLL_CPU); */ 
     143+               return bcma_pmu_clock(cc, pll, BCMA_CC_PMU5_MAINPLL_CPU); 
     144+       } 
    127145+ 
    128146+       return bcma_pmu_get_clockcontrol(cc); 
     
    130148--- a/drivers/bcma/driver_mips.c 
    131149+++ b/drivers/bcma/driver_mips.c 
    132 @@ -157,6 +157,18 @@ static void bcma_core_mips_dump_irq(stru 
     150@@ -166,6 +166,18 @@ static void bcma_core_mips_dump_irq(stru 
    133151        } 
    134152 } 
     
    146164+EXPORT_SYMBOL(bcma_cpu_clock); 
    147165+ 
    148  static void bcma_core_mips_serial_init(struct bcma_drv_mips *mcore) 
     166 static void bcma_core_mips_flash_detect(struct bcma_drv_mips *mcore) 
    149167 { 
    150168        struct bcma_bus *bus = mcore->core->bus; 
    151169--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    152170+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    153 @@ -246,6 +246,41 @@ 
    154  #define BCMA_CC_PLLCTL_DATA            0x0664 
    155  #define BCMA_CC_SPROM                  0x0830 /* SPROM beginning */ 
     171@@ -241,8 +241,47 @@ 
     172 #define BCMA_CC_SPROM                  0x0800 /* SPROM beginning */ 
     173 #define BCMA_CC_SPROM_PCIE6            0x0830 /* SPROM beginning on PCIe rev >= 6 */ 
    156174  
    157175+/* Divider allocation in 4716/47162/5356 */ 
     
    163181+#define BCMA_CC_PMU4716_MAINPLL_PLL0   12 
    164182+ 
    165 +/* ALP clock on pre-PMU chips */ 
    166 +#define BCMA_CC_PMU_ALP_CLOCK          20000000 
     183+/* PLL usage in 5356/5357 */ 
     184+#define BCMA_CC_PMU5356_MAINPLL_PLL0   0 
     185+#define BCMA_CC_PMU5357_MAINPLL_PLL0   0 
     186+ 
     187+/* 4706 PMU */ 
     188+#define BCMA_CC_PMU4706_MAINPLL_PLL0   0 
     189+ 
     190 /* ALP clock on pre-PMU chips */ 
     191 #define BCMA_CC_PMU_ALP_CLOCK          20000000 
    167192+/* HT clock for systems with PMU-enabled chipcommon */ 
    168193+#define BCMA_CC_PMU_HT_CLOCK           80000000 
    169194+ 
    170195+/* PMU rev 5 (& 6) */ 
    171 +#define        BCMA_CC_PPL_P1P2_OFF            0 
    172 +#define        BCMA_CC_PPL_P1_MASK             0x0f000000 
    173 +#define        BCMA_CC_PPL_P1_SHIFT            24 
    174 +#define        BCMA_CC_PPL_P2_MASK             0x00f00000 
    175 +#define        BCMA_CC_PPL_P2_SHIFT            20 
    176 +#define        BCMA_CC_PPL_M14_OFF             1 
    177 +#define        BCMA_CC_PPL_MDIV_MASK           0x000000ff 
    178 +#define        BCMA_CC_PPL_MDIV_WIDTH          8 
    179 +#define        BCMA_CC_PPL_NM5_OFF             2 
    180 +#define        BCMA_CC_PPL_NDIV_MASK           0xfff00000 
    181 +#define        BCMA_CC_PPL_NDIV_SHIFT          20 
    182 +#define        BCMA_CC_PPL_FMAB_OFF            3 
    183 +#define        BCMA_CC_PPL_MRAT_MASK           0xf0000000 
    184 +#define        BCMA_CC_PPL_MRAT_SHIFT          28 
    185 +#define        BCMA_CC_PPL_ABRAT_MASK          0x08000000 
    186 +#define        BCMA_CC_PPL_ABRAT_SHIFT         27 
    187 +#define        BCMA_CC_PPL_FDIV_MASK           0x07ffffff 
    188 +#define        BCMA_CC_PPL_PLLCTL_OFF          4 
    189 +#define        BCMA_CC_PPL_PCHI_OFF            5 
    190 +#define        BCMA_CC_PPL_PCHI_MASK           0x0000003f 
    191 + 
     196+#define BCMA_CC_PPL_P1P2_OFF           0 
     197+#define BCMA_CC_PPL_P1_MASK            0x0f000000 
     198+#define BCMA_CC_PPL_P1_SHIFT           24 
     199+#define BCMA_CC_PPL_P2_MASK            0x00f00000 
     200+#define BCMA_CC_PPL_P2_SHIFT           20 
     201+#define BCMA_CC_PPL_M14_OFF            1 
     202+#define BCMA_CC_PPL_MDIV_MASK          0x000000ff 
     203+#define BCMA_CC_PPL_MDIV_WIDTH         8 
     204+#define BCMA_CC_PPL_NM5_OFF            2 
     205+#define BCMA_CC_PPL_NDIV_MASK          0xfff00000 
     206+#define BCMA_CC_PPL_NDIV_SHIFT         20 
     207+#define BCMA_CC_PPL_FMAB_OFF           3 
     208+#define BCMA_CC_PPL_MRAT_MASK          0xf0000000 
     209+#define BCMA_CC_PPL_MRAT_SHIFT         28 
     210+#define BCMA_CC_PPL_ABRAT_MASK         0x08000000 
     211+#define BCMA_CC_PPL_ABRAT_SHIFT                27 
     212+#define BCMA_CC_PPL_FDIV_MASK          0x07ffffff 
     213+#define BCMA_CC_PPL_PLLCTL_OFF         4 
     214+#define BCMA_CC_PPL_PCHI_OFF           5 
     215+#define BCMA_CC_PPL_PCHI_MASK          0x0000003f 
     216  
    192217 /* Data for the PMU, if available. 
    193218  * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) 
    194   */ 
    195219--- a/include/linux/bcma/bcma_driver_mips.h 
    196220+++ b/include/linux/bcma/bcma_driver_mips.h 
    197 @@ -54,6 +54,7 @@ struct bcma_drv_mips { 
    198  }; 
    199   
    200  extern void bcma_core_mips_init(struct bcma_drv_mips *mcore); 
     221@@ -44,6 +44,8 @@ extern void bcma_core_mips_init(struct b 
     222 static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { } 
     223 #endif 
     224  
    201225+extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore); 
    202   
     226+ 
    203227 extern unsigned int bcma_core_mips_irq(struct bcma_device *dev); 
    204228  
     229 #endif /* LINUX_BCMA_DRIVER_MIPS_H_ */ 
  • trunk/target/linux/brcm47xx/patches-3.0/014-MIPS-BCM47xx-Setup-and-register-serial-early.patch

    r27301 r27723  
    1616--- a/arch/mips/bcm47xx/setup.c 
    1717+++ b/arch/mips/bcm47xx/setup.c 
    18 @@ -30,6 +30,8 @@ 
    19  #include <linux/ssb/ssb.h> 
     18@@ -31,6 +31,8 @@ 
    2019 #include <linux/ssb/ssb_embedded.h> 
    2120 #include <linux/bcma/bcma_soc.h> 
     21 #include <linux/platform_device.h> 
    2222+#include <linux/serial.h> 
    2323+#include <linux/serial_8250.h> 
     
    2525 #include <asm/reboot.h> 
    2626 #include <asm/time.h> 
    27 @@ -274,6 +276,31 @@ static int bcm47xx_get_invariants(struct 
     27@@ -275,6 +277,31 @@ static int bcm47xx_get_invariants(struct 
    2828        return 0; 
    2929 } 
     
    5757 { 
    5858        int err; 
    59 @@ -303,6 +330,10 @@ static void __init bcm47xx_register_ssb( 
     59@@ -304,6 +331,10 @@ static void __init bcm47xx_register_ssb( 
    6060                        memcpy(&mcore->serial_ports[1], &port, sizeof(port)); 
    6161                } 
  • trunk/target/linux/brcm47xx/patches-3.0/400-arch-bcm47xx.patch

    r27301 r27723  
    11--- a/arch/mips/bcm47xx/nvram.c 
    22+++ b/arch/mips/bcm47xx/nvram.c 
    3 @@ -114,3 +114,30 @@ int nvram_getenv(char *name, char *val, 
     3@@ -117,3 +117,30 @@ int nvram_getenv(char *name, char *val, 
    44        return NVRAM_ERR_ENVNOTFOUND; 
    55 } 
     
    3434--- a/arch/mips/bcm47xx/setup.c 
    3535+++ b/arch/mips/bcm47xx/setup.c 
    36 @@ -388,3 +388,20 @@ static int __init bcm47xx_register_bus_c 
     36@@ -438,3 +438,20 @@ static int __init bcm47xx_register_flash 
    3737        return 0; 
    3838 } 
    39  device_initcall(bcm47xx_register_bus_complete); 
     39 fs_initcall(bcm47xx_register_flash); 
    4040+ 
    4141+static int __init bcm47xx_register_gpiodev(void) 
  • trunk/target/linux/brcm47xx/patches-3.0/812-disable_wgt634u_crap.patch

    r27301 r27723  
    88--- a/arch/mips/bcm47xx/wgt634u.c 
    99+++ /dev/null 
    10 @@ -1,169 +0,0 @@ 
     10@@ -1,170 +0,0 @@ 
    1111-/* 
    1212- * This file is subject to the terms and conditions of the GNU General Public 
     
    143143-        * been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx. 
    144144-        */ 
     145-       u8 *et0mac; 
    145146- 
    146147-       if (bcm47xx_active_bus_type != BCM47XX_BUS_TYPE_SSB) 
    147148-               return -ENODEV; 
    148149- 
    149 -       u8 *et0mac = bcm47xx_bus.ssb.sprom.et0mac; 
     150-       et0mac = bcm47xx_bus.ssb.sprom.et0mac; 
    150151- 
    151152-       if (et0mac[0] == 0x00 && 
  • trunk/target/linux/brcm47xx/patches-3.0/820-wgt634u-nvram-fix.patch

    r27301 r27723  
    255255 /* Probe for NVRAM header */ 
    256256 static void early_nvram_init(void) 
    257 @@ -55,6 +57,25 @@ static void early_nvram_init(void) 
     257@@ -58,6 +60,25 @@ static void early_nvram_init(void) 
    258258                break; 
    259259 #endif 
     
    281281        off = FLASH_MIN; 
    282282        while (off <= lim) { 
    283 @@ -96,6 +117,12 @@ int nvram_getenv(char *name, char *val, 
     283@@ -99,6 +120,12 @@ int nvram_getenv(char *name, char *val, 
    284284        if (!nvram_buf[0]) 
    285285                early_nvram_init(); 
     
    294294        var = &nvram_buf[sizeof(struct nvram_header)]; 
    295295        end = nvram_buf + sizeof(nvram_buf) - 2; 
    296 @@ -125,6 +152,9 @@ char *nvram_get(const char *name) 
     296@@ -128,6 +155,9 @@ char *nvram_get(const char *name) 
    297297        if (!nvram_buf[0]) 
    298298                early_nvram_init(); 
  • trunk/target/linux/brcm47xx/patches-3.0/951-brcm4716-defines.patch

    r26127 r27723  
    2626--- a/include/linux/ssb/ssb.h 
    2727+++ b/include/linux/ssb/ssb.h 
    28 @@ -155,9 +155,16 @@ struct ssb_bus_ops { 
     28@@ -157,9 +157,16 @@ struct ssb_bus_ops { 
    2929 #define SSB_DEV_MINI_MACPHY    0x823 
    3030 #define SSB_DEV_ARM_1176       0x824 
  • trunk/target/linux/brcm47xx/patches-3.0/980-wnr834b_no_cardbus_invariant.patch

    r27301 r27723  
    11--- a/arch/mips/bcm47xx/setup.c 
    22+++ b/arch/mips/bcm47xx/setup.c 
    3 @@ -273,6 +273,10 @@ static int bcm47xx_get_invariants(struct 
     3@@ -274,6 +274,10 @@ static int bcm47xx_get_invariants(struct 
    44        if (nvram_getenv("cardbus", buf, sizeof(buf)) >= 0) 
    55                iv->has_cardbus_slot = !!simple_strtoul(buf, NULL, 10); 
  • trunk/target/linux/generic/patches-2.6.39/020-ssb_update.patch

    r27299 r27723  
    186186        struct ssb_bus *bus = pc->dev->bus; 
    187187        u16 chipid_top; 
    188 @@ -403,28 +408,129 @@ static int pcicore_is_in_hostmode(struct 
     188@@ -403,25 +408,133 @@ static int pcicore_is_in_hostmode(struct 
    189189 } 
    190190 #endif /* CONFIG_SSB_PCICORE_HOSTMODE */ 
     
    299299+static void __devinit ssb_pcicore_init_clientmode(struct ssb_pcicore *pc) 
    300300 { 
     301+       ssb_pcicore_fix_sprom_core_index(pc); 
     302+ 
    301303        /* Disable PCI interrupts. */ 
    302304        ssb_write32(pc->dev, SSB_INTVEC, 0); 
     305+ 
     306+       /* Additional PCIe always once-executed workarounds */ 
     307+       if (pc->dev->id.coreid == SSB_DEV_PCIE) { 
     308+               ssb_pcicore_serdes_workaround(pc); 
     309+               /* TODO: ASPM */ 
     310+               /* TODO: Clock Request Update */ 
     311+       } 
    303312 } 
    304313  
     
    315324                ssb_device_enable(dev, 0); 
    316325  
    317 +       ssb_pcicore_fix_sprom_core_index(pc); 
    318 + 
    319  #ifdef CONFIG_SSB_PCICORE_HOSTMODE 
    320         pc->hostmode = pcicore_is_in_hostmode(pc); 
    321         if (pc->hostmode) 
    322 @@ -432,6 +538,13 @@ void ssb_pcicore_init(struct ssb_pcicore 
    323  #endif /* CONFIG_SSB_PCICORE_HOSTMODE */ 
    324         if (!pc->hostmode) 
    325                 ssb_pcicore_init_clientmode(pc); 
    326 + 
    327 +       /* Additional PCIe always once-executed workarounds */ 
    328 +       if (dev->id.coreid == SSB_DEV_PCIE) { 
    329 +               ssb_pcicore_serdes_workaround(pc); 
    330 +               /* TODO: ASPM */ 
    331 +               /* TODO: Clock Request Update */ 
    332 +       } 
    333  } 
    334   
    335  static u32 ssb_pcie_read(struct ssb_pcicore *pc, u32 address) 
    336326@@ -446,11 +559,35 @@ static void ssb_pcie_write(struct ssb_pc 
    337327        pcicore_write32(pc, 0x134, data); 
     
    630620  
    631621 int ssb_device_is_enabled(struct ssb_device *dev) 
    632 @@ -1309,20 +1309,20 @@ EXPORT_SYMBOL(ssb_bus_may_powerdown); 
     622@@ -1266,7 +1266,10 @@ u32 ssb_dma_translation(struct ssb_devic 
     623        case SSB_BUSTYPE_SSB: 
     624                return 0; 
     625        case SSB_BUSTYPE_PCI: 
     626-               return SSB_PCI_DMA; 
     627+               if (ssb_read32(dev, SSB_TMSHIGH) & SSB_TMSHIGH_DMA64) 
     628+                       return SSB_PCIE_DMA_H32; 
     629+               else 
     630+                       return SSB_PCI_DMA; 
     631        default: 
     632                __ssb_dma_not_implemented(dev); 
     633        } 
     634@@ -1309,20 +1312,20 @@ EXPORT_SYMBOL(ssb_bus_may_powerdown); 
    633635  
    634636 int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl) 
     
    655657 error: 
    656658        ssb_printk(KERN_ERR PFX "Bus powerup failed\n"); 
    657 @@ -1330,6 +1330,37 @@ error: 
     659@@ -1330,6 +1333,37 @@ error: 
    658660 } 
    659661 EXPORT_SYMBOL(ssb_bus_powerup); 
     
    725727                                goto out_free; 
    726728                        } 
     729@@ -728,12 +734,9 @@ out_free: 
     730 static void ssb_pci_get_boardinfo(struct ssb_bus *bus, 
     731                                  struct ssb_boardinfo *bi) 
     732 { 
     733-       pci_read_config_word(bus->host_pci, PCI_SUBSYSTEM_VENDOR_ID, 
     734-                            &bi->vendor); 
     735-       pci_read_config_word(bus->host_pci, PCI_SUBSYSTEM_ID, 
     736-                            &bi->type); 
     737-       pci_read_config_word(bus->host_pci, PCI_REVISION_ID, 
     738-                            &bi->rev); 
     739+       bi->vendor = bus->host_pci->subsystem_vendor; 
     740+       bi->type = bus->host_pci->subsystem_device; 
     741+       bi->rev = bus->host_pci->revision; 
     742 } 
     743  
     744 int ssb_pci_get_invariants(struct ssb_bus *bus, 
    727745--- a/drivers/ssb/pcihost_wrapper.c 
    728746+++ b/drivers/ssb/pcihost_wrapper.c 
     
    857875--- a/include/linux/ssb/ssb.h 
    858876+++ b/include/linux/ssb/ssb.h 
    859 @@ -308,7 +308,7 @@ struct ssb_bus { 
     877@@ -27,6 +27,8 @@ struct ssb_sprom { 
     878        u8 et1mdcport;          /* MDIO for enet1 */ 
     879        u8 board_rev;           /* Board revision number from SPROM. */ 
     880        u8 country_code;        /* Country Code */ 
     881+       u16 leddc_on_time;      /* LED Powersave Duty Cycle On Count */ 
     882+       u16 leddc_off_time;     /* LED Powersave Duty Cycle Off Count */ 
     883        u8 ant_available_a;     /* 2GHz antenna available bits (up to 4) */ 
     884        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
     885        u16 pa0b0; 
     886@@ -99,7 +101,7 @@ struct ssb_sprom { 
     887 struct ssb_boardinfo { 
     888        u16 vendor; 
     889        u16 type; 
     890-       u16 rev; 
     891+       u8  rev; 
     892 }; 
     893  
     894  
     895@@ -308,7 +310,7 @@ struct ssb_bus { 
    860896  
    861897        /* ID information about the Chip. */ 
     
    866902        u16 sprom_size;         /* number of words in sprom */ 
    867903        u8 chip_package; 
    868 @@ -404,7 +404,9 @@ extern bool ssb_is_sprom_available(struc 
     904@@ -404,7 +406,9 @@ extern bool ssb_is_sprom_available(struc 
    869905  
    870906 /* Set a fallback SPROM. 
     
    877913 /* Suspend a SSB bus. 
    878914  * Call this from the parent bus suspend routine. */ 
    879 @@ -518,6 +520,7 @@ extern int ssb_bus_may_powerdown(struct 
     915@@ -518,6 +522,7 @@ extern int ssb_bus_may_powerdown(struct 
    880916  * Otherwise static always-on powercontrol will be used. */ 
    881917 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
  • trunk/target/linux/generic/patches-2.6.39/025-bcma_backport.patch

    r27299 r27723  
    7272--- /dev/null 
    7373+++ b/drivers/bcma/Kconfig 
    74 @@ -0,0 +1,38 @@ 
     74@@ -0,0 +1,44 @@ 
    7575+config BCMA_POSSIBLE 
    7676+       bool 
     
    102102+       depends on BCMA_HOST_PCI_POSSIBLE 
    103103+ 
     104+config BCMA_DRIVER_PCI_HOSTMODE 
     105+       bool "Driver for PCI core working in hostmode" 
     106+       depends on BCMA && MIPS 
     107+       help 
     108+         PCI core hostmode operation (external PCI bus). 
     109+ 
    104110+config BCMA_DEBUG 
    105111+       bool "BCMA debugging" 
     
    113119--- /dev/null 
    114120+++ b/drivers/bcma/Makefile 
    115 @@ -0,0 +1,7 @@ 
     121@@ -0,0 +1,8 @@ 
    116122+bcma-y                                 += main.o scan.o core.o sprom.o 
    117123+bcma-y                                 += driver_chipcommon.o driver_chipcommon_pmu.o 
    118124+bcma-y                                 += driver_pci.o 
     125+bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE)        += driver_pci_host.o 
    119126+bcma-$(CONFIG_BCMA_HOST_PCI)           += host_pci.o 
    120127+obj-$(CONFIG_BCMA)                     += bcma.o 
     
    151158--- /dev/null 
    152159+++ b/drivers/bcma/bcma_private.h 
    153 @@ -0,0 +1,31 @@ 
     160@@ -0,0 +1,35 @@ 
    154161+#ifndef LINUX_BCMA_PRIVATE_H_ 
    155162+#define LINUX_BCMA_PRIVATE_H_ 
     
    182189+#endif /* CONFIG_BCMA_HOST_PCI */ 
    183190+ 
     191+#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     192+void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc); 
     193+#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */ 
     194+ 
    184195+#endif 
    185196--- /dev/null 
    186197+++ b/drivers/bcma/core.c 
    187 @@ -0,0 +1,52 @@ 
     198@@ -0,0 +1,124 @@ 
    188199+/* 
    189200+ * Broadcom specific AMBA 
     
    238249+} 
    239250+EXPORT_SYMBOL_GPL(bcma_core_enable); 
     251+ 
     252+void bcma_core_set_clockmode(struct bcma_device *core, 
     253+                            enum bcma_clkmode clkmode) 
     254+{ 
     255+       u16 i; 
     256+ 
     257+       WARN_ON(core->id.id != BCMA_CORE_CHIPCOMMON && 
     258+               core->id.id != BCMA_CORE_PCIE && 
     259+               core->id.id != BCMA_CORE_80211); 
     260+ 
     261+       switch (clkmode) { 
     262+       case BCMA_CLKMODE_FAST: 
     263+               bcma_set32(core, BCMA_CLKCTLST, BCMA_CLKCTLST_FORCEHT); 
     264+               udelay(64); 
     265+               for (i = 0; i < 1500; i++) { 
     266+                       if (bcma_read32(core, BCMA_CLKCTLST) & 
     267+                           BCMA_CLKCTLST_HAVEHT) { 
     268+                               i = 0; 
     269+                               break; 
     270+                       } 
     271+                       udelay(10); 
     272+               } 
     273+               if (i) 
     274+                       pr_err("HT force timeout\n"); 
     275+               break; 
     276+       case BCMA_CLKMODE_DYNAMIC: 
     277+               pr_warn("Dynamic clockmode not supported yet!\n"); 
     278+               break; 
     279+       } 
     280+} 
     281+EXPORT_SYMBOL_GPL(bcma_core_set_clockmode); 
     282+ 
     283+void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, bool on) 
     284+{ 
     285+       u16 i; 
     286+ 
     287+       WARN_ON(req & ~BCMA_CLKCTLST_EXTRESREQ); 
     288+       WARN_ON(status & ~BCMA_CLKCTLST_EXTRESST); 
     289+ 
     290+       if (on) { 
     291+               bcma_set32(core, BCMA_CLKCTLST, req); 
     292+               for (i = 0; i < 10000; i++) { 
     293+                       if ((bcma_read32(core, BCMA_CLKCTLST) & status) == 
     294+                           status) { 
     295+                               i = 0; 
     296+                               break; 
     297+                       } 
     298+                       udelay(10); 
     299+               } 
     300+               if (i) 
     301+                       pr_err("PLL enable timeout\n"); 
     302+       } else { 
     303+               pr_warn("Disabling PLL not supported yet!\n"); 
     304+       } 
     305+} 
     306+EXPORT_SYMBOL_GPL(bcma_core_pll_ctl); 
     307+ 
     308+u32 bcma_core_dma_translation(struct bcma_device *core) 
     309+{ 
     310+       switch (core->bus->hosttype) { 
     311+       case BCMA_HOSTTYPE_PCI: 
     312+               if (bcma_aread32(core, BCMA_IOST) & BCMA_IOST_DMA64) 
     313+                       return BCMA_DMA_TRANSLATION_DMA64_CMT; 
     314+               else 
     315+                       return BCMA_DMA_TRANSLATION_DMA32_CMT; 
     316+       default: 
     317+               pr_err("DMA translation unknown for host %d\n", 
     318+                      core->bus->hosttype); 
     319+       } 
     320+       return BCMA_DMA_TRANSLATION_NONE; 
     321+} 
     322+EXPORT_SYMBOL(bcma_core_dma_translation); 
    240323--- /dev/null 
    241324+++ b/drivers/bcma/driver_chipcommon.c 
    242 @@ -0,0 +1,89 @@ 
     325@@ -0,0 +1,103 @@ 
    243326+/* 
    244327+ * Broadcom specific AMBA 
     
    266349+void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) 
    267350+{ 
     351+       u32 leddc_on = 10; 
     352+       u32 leddc_off = 90; 
     353+ 
    268354+       if (cc->core->id.rev >= 11) 
    269355+               cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT); 
     
    281367+       if (cc->capabilities & BCMA_CC_CAP_PCTL) 
    282368+               pr_err("Power control not implemented!\n"); 
     369+ 
     370+       if (cc->core->id.rev >= 16) { 
     371+               if (cc->core->bus->sprom.leddc_on_time && 
     372+                   cc->core->bus->sprom.leddc_off_time) { 
     373+                       leddc_on = cc->core->bus->sprom.leddc_on_time; 
     374+                       leddc_off = cc->core->bus->sprom.leddc_off_time; 
     375+               } 
     376+               bcma_cc_write32(cc, BCMA_CC_GPIOTIMER, 
     377+                       ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | 
     378+                        (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT))); 
     379+       } 
    283380+} 
    284381+ 
     
    473570--- /dev/null 
    474571+++ b/drivers/bcma/driver_pci.c 
    475 @@ -0,0 +1,187 @@ 
     572@@ -0,0 +1,223 @@ 
    476573+/* 
    477574+ * Broadcom specific AMBA 
     
    633730+ **************************************************/ 
    634731+ 
     732+static void bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) 
     733+{ 
     734+       bcma_pcicore_serdes_workaround(pc); 
     735+} 
     736+ 
     737+static bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc) 
     738+{ 
     739+       struct bcma_bus *bus = pc->core->bus; 
     740+       u16 chipid_top; 
     741+ 
     742+       chipid_top = (bus->chipinfo.id & 0xFF00); 
     743+       if (chipid_top != 0x4700 && 
     744+           chipid_top != 0x5300) 
     745+               return false; 
     746+ 
     747+       if (bus->sprom.boardflags_lo & SSB_PCICORE_BFL_NOPCI) 
     748+               return false; 
     749+ 
     750+#if 0 
     751+       /* TODO: on BCMA we use address from EROM instead of magic formula */ 
     752+       u32 tmp; 
     753+       return !mips_busprobe32(tmp, (bus->mmio + 
     754+               (pc->core->core_index * BCMA_CORE_SIZE))); 
     755+#endif 
     756+ 
     757+       return true; 
     758+} 
     759+ 
    635760+void bcma_core_pci_init(struct bcma_drv_pci *pc) 
    636761+{ 
    637 +       bcma_pcicore_serdes_workaround(pc); 
     762+       if (bcma_core_pci_is_in_hostmode(pc)) { 
     763+#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     764+               bcma_core_pci_hostmode_init(pc); 
     765+#else 
     766+               pr_err("Driver compiled without support for hostmode PCI\n"); 
     767+#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */ 
     768+       } else { 
     769+               bcma_core_pci_clientmode_init(pc); 
     770+       } 
    638771+} 
    639772+ 
     
    9171050--- /dev/null 
    9181051+++ b/drivers/bcma/main.c 
    919 @@ -0,0 +1,255 @@ 
     1052@@ -0,0 +1,257 @@ 
    9201053+/* 
    9211054+ * Broadcom specific AMBA 
     
    10691202+       /* Try to get SPROM */ 
    10701203+       err = bcma_sprom_get(bus); 
    1071 +       if (err) { 
     1204+       if (err == -ENOENT) { 
     1205+               pr_err("No SPROM available\n"); 
     1206+       } else if (err) { 
    10721207+               pr_err("Failed to get SPROM: %d\n", err); 
    10731208+               return -ENOENT; 
     
    15971732--- /dev/null 
    15981733+++ b/include/linux/bcma/bcma.h 
    1599 @@ -0,0 +1,250 @@ 
     1734@@ -0,0 +1,271 @@ 
    16001735+#ifndef LINUX_BCMA_H_ 
    16011736+#define LINUX_BCMA_H_ 
     
    16231758+       u8 rev; 
    16241759+       u8 pkg; 
     1760+}; 
     1761+ 
     1762+enum bcma_clkmode { 
     1763+       BCMA_CLKMODE_FAST, 
     1764+       BCMA_CLKMODE_DYNAMIC, 
    16251765+}; 
    16261766+ 
     
    18431983+} 
    18441984+ 
     1985+#define bcma_mask32(cc, offset, mask) \ 
     1986+       bcma_write32(cc, offset, bcma_read32(cc, offset) & (mask)) 
     1987+#define bcma_set32(cc, offset, set) \ 
     1988+       bcma_write32(cc, offset, bcma_read32(cc, offset) | (set)) 
     1989+#define bcma_maskset32(cc, offset, mask, set) \ 
     1990+       bcma_write32(cc, offset, (bcma_read32(cc, offset) & (mask)) | (set)) 
     1991+ 
    18451992+extern bool bcma_core_is_enabled(struct bcma_device *core); 
    18461993+extern void bcma_core_disable(struct bcma_device *core, u32 flags); 
    18471994+extern int bcma_core_enable(struct bcma_device *core, u32 flags); 
     1995+extern void bcma_core_set_clockmode(struct bcma_device *core, 
     1996+                                   enum bcma_clkmode clkmode); 
     1997+extern void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, 
     1998+                             bool on); 
     1999+#define BCMA_DMA_TRANSLATION_MASK      0xC0000000 
     2000+#define  BCMA_DMA_TRANSLATION_NONE     0x00000000 
     2001+#define  BCMA_DMA_TRANSLATION_DMA32_CMT        0x40000000 /* Client Mode Translation for 32-bit DMA */ 
     2002+#define  BCMA_DMA_TRANSLATION_DMA64_CMT        0x80000000 /* Client Mode Translation for 64-bit DMA */ 
     2003+extern u32 bcma_core_dma_translation(struct bcma_device *core); 
    18482004+ 
    18492005+#endif /* LINUX_BCMA_H_ */ 
    18502006--- /dev/null 
    18512007+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    1852 @@ -0,0 +1,303 @@ 
     2008@@ -0,0 +1,296 @@ 
    18532009+#ifndef LINUX_BCMA_DRIVER_CC_H_ 
    18542010+#define LINUX_BCMA_DRIVER_CC_H_ 
     
    20322188+#define BCMA_CC_FLASH_CFG              0x0128 
    20332189+#define BCMA_CC_FLASH_WAITCNT          0x012C 
    2034 +#define BCMA_CC_CLKCTLST               0x01E0 /* Clock control and status (rev >= 20) */ 
    2035 +#define  BCMA_CC_CLKCTLST_FORCEALP     0x00000001 /* Force ALP request */ 
    2036 +#define  BCMA_CC_CLKCTLST_FORCEHT      0x00000002 /* Force HT request */ 
    2037 +#define  BCMA_CC_CLKCTLST_FORCEILP     0x00000004 /* Force ILP request */ 
    2038 +#define  BCMA_CC_CLKCTLST_HAVEALPREQ   0x00000008 /* ALP available request */ 
    2039 +#define  BCMA_CC_CLKCTLST_HAVEHTREQ    0x00000010 /* HT available request */ 
    2040 +#define  BCMA_CC_CLKCTLST_HWCROFF      0x00000020 /* Force HW clock request off */ 
    2041 +#define  BCMA_CC_CLKCTLST_HAVEHT       0x00010000 /* HT available */ 
    2042 +#define  BCMA_CC_CLKCTLST_HAVEALP      0x00020000 /* APL available */ 
     2190+/* 0x1E0 is defined as shared BCMA_CLKCTLST */ 
    20432191+#define BCMA_CC_HW_WORKAROUND          0x01E4 /* Hardware workaround (rev >= 20) */ 
    20442192+#define BCMA_CC_UART0_DATA             0x0300 
     
    20972245+#define BCMA_CC_PLLCTL_ADDR            0x0660 
    20982246+#define BCMA_CC_PLLCTL_DATA            0x0664 
    2099 +#define BCMA_CC_SPROM                  0x0830 /* SPROM beginning */ 
     2247+#define BCMA_CC_SPROM                  0x0800 /* SPROM beginning */ 
     2248+#define BCMA_CC_SPROM_PCIE6            0x0830 /* SPROM beginning on PCIe rev >= 6 */ 
    21002249+ 
    21012250+/* Data for the PMU, if available. 
     
    22502399--- /dev/null 
    22512400+++ b/include/linux/bcma/bcma_regs.h 
    2252 @@ -0,0 +1,34 @@ 
     2401@@ -0,0 +1,59 @@ 
    22532402+#ifndef LINUX_BCMA_REGS_H_ 
    22542403+#define LINUX_BCMA_REGS_H_ 
    22552404+ 
     2405+/* Some single registers are shared between many cores */ 
     2406+/* BCMA_CLKCTLST: ChipCommon (rev >= 20), PCIe, 80211 */ 
     2407+#define BCMA_CLKCTLST                  0x01E0 /* Clock control and status */ 
     2408+#define  BCMA_CLKCTLST_FORCEALP                0x00000001 /* Force ALP request */ 
     2409+#define  BCMA_CLKCTLST_FORCEHT         0x00000002 /* Force HT request */ 
     2410+#define  BCMA_CLKCTLST_FORCEILP                0x00000004 /* Force ILP request */ 
     2411+#define  BCMA_CLKCTLST_HAVEALPREQ      0x00000008 /* ALP available request */ 
     2412+#define  BCMA_CLKCTLST_HAVEHTREQ       0x00000010 /* HT available request */ 
     2413+#define  BCMA_CLKCTLST_HWCROFF         0x00000020 /* Force HW clock request off */ 
     2414+#define  BCMA_CLKCTLST_EXTRESREQ       0x00000700 /* Mask of external resource requests */ 
     2415+#define  BCMA_CLKCTLST_HAVEALP         0x00010000 /* ALP available */ 
     2416+#define  BCMA_CLKCTLST_HAVEHT          0x00020000 /* HT available */ 
     2417+#define  BCMA_CLKCTLST_BP_ON_ALP       0x00040000 /* RO: running on ALP clock */ 
     2418+#define  BCMA_CLKCTLST_BP_ON_HT                0x00080000 /* RO: running on HT clock */ 
     2419+#define  BCMA_CLKCTLST_EXTRESST                0x07000000 /* Mask of external resource status */ 
     2420+/* Is there any BCM4328 on BCMA bus? */ 
     2421+#define  BCMA_CLKCTLST_4328A0_HAVEHT   0x00010000 /* 4328a0 has reversed bits */ 
     2422+#define  BCMA_CLKCTLST_4328A0_HAVEALP  0x00020000 /* 4328a0 has reversed bits */ 
     2423+ 
    22562424+/* Agent registers (common for every core) */ 
    2257 +#define BCMA_IOCTL                     0x0408 
     2425+#define BCMA_IOCTL                     0x0408 /* IO control */ 
    22582426+#define  BCMA_IOCTL_CLK                        0x0001 
    22592427+#define  BCMA_IOCTL_FGC                        0x0002 
     
    22612429+#define  BCMA_IOCTL_PME_EN             0x4000 
    22622430+#define  BCMA_IOCTL_BIST_EN            0x8000 
     2431+#define BCMA_IOST                      0x0500 /* IO status */ 
     2432+#define  BCMA_IOST_CORE_BITS           0x0FFF 
     2433+#define  BCMA_IOST_DMA64               0x1000 
     2434+#define  BCMA_IOST_GATED_CLK           0x2000 
     2435+#define  BCMA_IOST_BIST_ERROR          0x4000 
     2436+#define  BCMA_IOST_BIST_DONE           0x8000 
    22632437+#define BCMA_RESET_CTL                 0x0800 
    22642438+#define  BCMA_RESET_CTL_RESET          0x0001 
     
    23512525--- /dev/null 
    23522526+++ b/drivers/bcma/sprom.c 
    2353 @@ -0,0 +1,162 @@ 
     2527@@ -0,0 +1,171 @@ 
    23542528+/* 
    23552529+ * Broadcom specific AMBA 
     
    23742548+ **************************************************/ 
    23752549+ 
    2376 +static void bcma_sprom_read(struct bcma_bus *bus, u16 *sprom) 
     2550+static void bcma_sprom_read(struct bcma_bus *bus, u16 offset, u16 *sprom) 
    23772551+{ 
    23782552+       int i; 
    23792553+       for (i = 0; i < SSB_SPROMSIZE_WORDS_R4; i++) 
    23802554+               sprom[i] = bcma_read16(bus->drv_cc.core, 
    2381 +                                      BCMA_CC_SPROM + (i * 2)); 
     2555+                                      offset + (i * 2)); 
    23822556+} 
    23832557+ 
     
    24662640+ 
    24672641+       revision = sprom[SSB_SPROMSIZE_WORDS_R4 - 1] & SSB_SPROM_REVISION_REV; 
    2468 +       if (revision != 8) { 
     2642+       if (revision != 8 && revision != 9) { 
    24692643+               pr_err("Unsupported SPROM revision: %d\n", revision); 
    24702644+               return -ENOENT; 
     
    24912665+int bcma_sprom_get(struct bcma_bus *bus) 
    24922666+{ 
     2667+       u16 offset; 
    24932668+       u16 *sprom; 
    24942669+       int err = 0; 
     
    24962671+       if (!bus->drv_cc.core) 
    24972672+               return -EOPNOTSUPP; 
     2673+ 
     2674+       if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM)) 
     2675+               return -ENOENT; 
    24982676+ 
    24992677+       sprom = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 
     
    25022680+               return -ENOMEM; 
    25032681+ 
    2504 +       bcma_sprom_read(bus, sprom); 
     2682+       /* Most cards have SPROM moved by additional offset 0x30 (48 dwords). 
     2683+        * According to brcm80211 this applies to cards with PCIe rev >= 6 
     2684+        * TODO: understand this condition and use it */ 
     2685+       offset = (bus->chipinfo.id == 0x4331) ? BCMA_CC_SPROM : 
     2686+               BCMA_CC_SPROM_PCIE6; 
     2687+       bcma_sprom_read(bus, offset, sprom); 
    25052688+ 
    25062689+       err = bcma_sprom_valid(sprom); 
     
    25142697+       return err; 
    25152698+} 
     2699--- /dev/null 
     2700+++ b/drivers/bcma/driver_pci_host.c 
     2701@@ -0,0 +1,14 @@ 
     2702+/* 
     2703+ * Broadcom specific AMBA 
     2704+ * PCI Core in hostmode 
     2705+ * 
     2706+ * Licensed under the GNU/GPL. See COPYING for details. 
     2707+ */ 
     2708+ 
     2709+#include "bcma_private.h" 
     2710+#include <linux/bcma/bcma.h> 
     2711+ 
     2712+void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc) 
     2713+{ 
     2714+       pr_err("No support for PCI core in hostmode yet\n"); 
     2715+} 
  • trunk/target/linux/generic/patches-2.6.39/040-backport_tmpfs_xattr.patch

    r27691 r27723  
    410410 static struct dentry *shmem_get_parent(struct dentry *child) 
    411411 { 
    412 @@ -2402,8 +2606,10 @@ int shmem_fill_super(struct super_block  
     412@@ -2402,8 +2606,10 @@ int shmem_fill_super(struct super_block 
    413413        sb->s_magic = TMPFS_MAGIC; 
    414414        sb->s_op = &shmem_ops; 
  • trunk/target/linux/generic/patches-2.6.39/253-ssb_b43_default_on.patch

    r26691 r27723  
    1818 config SSB_PCMCIAHOST_POSSIBLE 
    1919        bool 
     20--- a/drivers/bcma/Kconfig 
     21+++ b/drivers/bcma/Kconfig 
     22@@ -17,6 +17,7 @@ config BCMA 
     23 config BCMA_BLOCKIO 
     24        bool 
     25        depends on BCMA 
     26+       default y 
     27  
     28 config BCMA_HOST_PCI_POSSIBLE 
     29        bool 
  • trunk/target/linux/generic/patches-2.6.39/502-yaffs_git_2010_10_20.patch

    r27009 r27723  
    99 endif # BLOCK 
    1010  
    11 @@ -177,6 +176,10 @@ source "fs/hfsplus/Kconfig" 
     11@@ -193,6 +192,10 @@ source "fs/hfsplus/Kconfig" 
    1212 source "fs/befs/Kconfig" 
    1313 source "fs/bfs/Kconfig" 
  • trunk/target/linux/generic/patches-3.0/020-ssb_update.patch

    r27722 r27723  
    180180        case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */ 
    181181        case SSB_PLLTYPE_4: /* 48Mhz, 4 dividers */ 
     182@@ -1265,7 +1266,10 @@ u32 ssb_dma_translation(struct ssb_devic 
     183        case SSB_BUSTYPE_SSB: 
     184                return 0; 
     185        case SSB_BUSTYPE_PCI: 
     186-               return SSB_PCI_DMA; 
     187+               if (ssb_read32(dev, SSB_TMSHIGH) & SSB_TMSHIGH_DMA64) 
     188+                       return SSB_PCIE_DMA_H32; 
     189+               else 
     190+                       return SSB_PCI_DMA; 
     191        default: 
     192                __ssb_dma_not_implemented(dev); 
     193        } 
     194--- a/drivers/ssb/pci.c 
     195+++ b/drivers/ssb/pci.c 
     196@@ -734,12 +734,9 @@ out_free: 
     197 static void ssb_pci_get_boardinfo(struct ssb_bus *bus, 
     198                                  struct ssb_boardinfo *bi) 
     199 { 
     200-       pci_read_config_word(bus->host_pci, PCI_SUBSYSTEM_VENDOR_ID, 
     201-                            &bi->vendor); 
     202-       pci_read_config_word(bus->host_pci, PCI_SUBSYSTEM_ID, 
     203-                            &bi->type); 
     204-       pci_read_config_word(bus->host_pci, PCI_REVISION_ID, 
     205-                            &bi->rev); 
     206+       bi->vendor = bus->host_pci->subsystem_vendor; 
     207+       bi->type = bus->host_pci->subsystem_device; 
     208+       bi->rev = bus->host_pci->revision; 
     209 } 
     210  
     211 int ssb_pci_get_invariants(struct ssb_bus *bus, 
    182212--- a/drivers/ssb/pcihost_wrapper.c 
    183213+++ b/drivers/ssb/pcihost_wrapper.c 
     
    214244                } else { 
    215245                        bus->chip_id = 0x4710; 
     246--- a/include/linux/ssb/ssb.h 
     247+++ b/include/linux/ssb/ssb.h 
     248@@ -27,6 +27,8 @@ struct ssb_sprom { 
     249        u8 et1mdcport;          /* MDIO for enet1 */ 
     250        u8 board_rev;           /* Board revision number from SPROM. */ 
     251        u8 country_code;        /* Country Code */ 
     252+       u16 leddc_on_time;      /* LED Powersave Duty Cycle On Count */ 
     253+       u16 leddc_off_time;     /* LED Powersave Duty Cycle Off Count */ 
     254        u8 ant_available_a;     /* 2GHz antenna available bits (up to 4) */ 
     255        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
     256        u16 pa0b0; 
     257@@ -99,7 +101,7 @@ struct ssb_sprom { 
     258 struct ssb_boardinfo { 
     259        u16 vendor; 
     260        u16 type; 
     261-       u16 rev; 
     262+       u8  rev; 
     263 }; 
     264  
     265  
  • trunk/target/linux/generic/patches-3.0/025-bcma_backport.patch

    r27299 r27723  
    1313        bool 
    1414        depends on BCMA && PCI = y 
     15@@ -22,6 +27,12 @@ config BCMA_HOST_PCI 
     16        bool "Support for BCMA on PCI-host bus" 
     17        depends on BCMA_HOST_PCI_POSSIBLE 
     18  
     19+config BCMA_DRIVER_PCI_HOSTMODE 
     20+       bool "Driver for PCI core working in hostmode" 
     21+       depends on BCMA && MIPS 
     22+       help 
     23+         PCI core hostmode operation (external PCI bus). 
     24+ 
     25 config BCMA_DEBUG 
     26        bool "BCMA debugging" 
     27        depends on BCMA 
    1528--- a/drivers/bcma/Makefile 
    1629+++ b/drivers/bcma/Makefile 
    17 @@ -1,4 +1,4 @@ 
     30@@ -1,6 +1,7 @@ 
    1831-bcma-y                                 += main.o scan.o core.o 
    1932+bcma-y                                 += main.o scan.o core.o sprom.o 
    2033 bcma-y                                 += driver_chipcommon.o driver_chipcommon_pmu.o 
    2134 bcma-y                                 += driver_pci.o 
     35+bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE)        += driver_pci_host.o 
    2236 bcma-$(CONFIG_BCMA_HOST_PCI)           += host_pci.o 
     37 obj-$(CONFIG_BCMA)                     += bcma.o 
     38  
    2339--- a/drivers/bcma/bcma_private.h 
    2440+++ b/drivers/bcma/bcma_private.h 
    25 @@ -13,12 +13,15 @@ 
     41@@ -13,16 +13,23 @@ 
    2642 struct bcma_bus; 
    2743  
     
    4157 /* host_pci.c */ 
    4258 extern int __init bcma_host_pci_init(void); 
     59 extern void __exit bcma_host_pci_exit(void); 
     60 #endif /* CONFIG_BCMA_HOST_PCI */ 
     61  
     62+#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     63+void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc); 
     64+#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */ 
     65+ 
     66 #endif 
    4367--- a/drivers/bcma/core.c 
    4468+++ b/drivers/bcma/core.c 
     
    6084 int bcma_core_enable(struct bcma_device *core, u32 flags) 
    6185 { 
     86@@ -49,3 +50,75 @@ int bcma_core_enable(struct bcma_device 
     87        return 0; 
     88 } 
     89 EXPORT_SYMBOL_GPL(bcma_core_enable); 
     90+ 
     91+void bcma_core_set_clockmode(struct bcma_device *core, 
     92+                            enum bcma_clkmode clkmode) 
     93+{ 
     94+       u16 i; 
     95+ 
     96+       WARN_ON(core->id.id != BCMA_CORE_CHIPCOMMON && 
     97+               core->id.id != BCMA_CORE_PCIE && 
     98+               core->id.id != BCMA_CORE_80211); 
     99+ 
     100+       switch (clkmode) { 
     101+       case BCMA_CLKMODE_FAST: 
     102+               bcma_set32(core, BCMA_CLKCTLST, BCMA_CLKCTLST_FORCEHT); 
     103+               udelay(64); 
     104+               for (i = 0; i < 1500; i++) { 
     105+                       if (bcma_read32(core, BCMA_CLKCTLST) & 
     106+                           BCMA_CLKCTLST_HAVEHT) { 
     107+                               i = 0; 
     108+                               break; 
     109+                       } 
     110+                       udelay(10); 
     111+               } 
     112+               if (i) 
     113+                       pr_err("HT force timeout\n"); 
     114+               break; 
     115+       case BCMA_CLKMODE_DYNAMIC: 
     116+               pr_warn("Dynamic clockmode not supported yet!\n"); 
     117+               break; 
     118+       } 
     119+} 
     120+EXPORT_SYMBOL_GPL(bcma_core_set_clockmode); 
     121+ 
     122+void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, bool on) 
     123+{ 
     124+       u16 i; 
     125+ 
     126+       WARN_ON(req & ~BCMA_CLKCTLST_EXTRESREQ); 
     127+       WARN_ON(status & ~BCMA_CLKCTLST_EXTRESST); 
     128+ 
     129+       if (on) { 
     130+               bcma_set32(core, BCMA_CLKCTLST, req); 
     131+               for (i = 0; i < 10000; i++) { 
     132+                       if ((bcma_read32(core, BCMA_CLKCTLST) & status) == 
     133+                           status) { 
     134+                               i = 0; 
     135+                               break; 
     136+                       } 
     137+                       udelay(10); 
     138+               } 
     139+               if (i) 
     140+                       pr_err("PLL enable timeout\n"); 
     141+       } else { 
     142+               pr_warn("Disabling PLL not supported yet!\n"); 
     143+       } 
     144+} 
     145+EXPORT_SYMBOL_GPL(bcma_core_pll_ctl); 
     146+ 
     147+u32 bcma_core_dma_translation(struct bcma_device *core) 
     148+{ 
     149+       switch (core->bus->hosttype) { 
     150+       case BCMA_HOSTTYPE_PCI: 
     151+               if (bcma_aread32(core, BCMA_IOST) & BCMA_IOST_DMA64) 
     152+                       return BCMA_DMA_TRANSLATION_DMA64_CMT; 
     153+               else 
     154+                       return BCMA_DMA_TRANSLATION_DMA32_CMT; 
     155+       default: 
     156+               pr_err("DMA translation unknown for host %d\n", 
     157+                      core->bus->hosttype); 
     158+       } 
     159+       return BCMA_DMA_TRANSLATION_NONE; 
     160+} 
     161+EXPORT_SYMBOL(bcma_core_dma_translation); 
    62162--- a/drivers/bcma/driver_chipcommon_pmu.c 
    63163+++ b/drivers/bcma/driver_chipcommon_pmu.c 
     
    95195--- a/drivers/bcma/driver_pci.c 
    96196+++ b/drivers/bcma/driver_pci.c 
    97 @@ -161,3 +161,27 @@ void bcma_core_pci_init(struct bcma_drv_ 
     197@@ -157,7 +157,67 @@ static void bcma_pcicore_serdes_workarou 
     198  * Init. 
     199  **************************************************/ 
     200  
     201-void bcma_core_pci_init(struct bcma_drv_pci *pc) 
     202+static void bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc) 
    98203 { 
    99204        bcma_pcicore_serdes_workaround(pc); 
    100205 } 
     206+ 
     207+static bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc) 
     208+{ 
     209+       struct bcma_bus *bus = pc->core->bus; 
     210+       u16 chipid_top; 
     211+ 
     212+       chipid_top = (bus->chipinfo.id & 0xFF00); 
     213+       if (chipid_top != 0x4700 && 
     214+           chipid_top != 0x5300) 
     215+               return false; 
     216+ 
     217+       if (bus->sprom.boardflags_lo & SSB_PCICORE_BFL_NOPCI) 
     218+               return false; 
     219+ 
     220+#if 0 
     221+       /* TODO: on BCMA we use address from EROM instead of magic formula */ 
     222+       u32 tmp; 
     223+       return !mips_busprobe32(tmp, (bus->mmio + 
     224+               (pc->core->core_index * BCMA_CORE_SIZE))); 
     225+#endif 
     226+ 
     227+       return true; 
     228+} 
     229+ 
     230+void bcma_core_pci_init(struct bcma_drv_pci *pc) 
     231+{ 
     232+       if (bcma_core_pci_is_in_hostmode(pc)) { 
     233+#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE 
     234+               bcma_core_pci_hostmode_init(pc); 
     235+#else 
     236+               pr_err("Driver compiled without support for hostmode PCI\n"); 
     237+#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */ 
     238+       } else { 
     239+               bcma_core_pci_clientmode_init(pc); 
     240+       } 
     241+} 
    101242+ 
    102243+int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core, 
     
    218359                case BCMA_HOSTTYPE_NONE: 
    219360                case BCMA_HOSTTYPE_SDIO: 
    220 @@ -144,6 +147,13 @@ int bcma_bus_register(struct bcma_bus *b 
     361@@ -144,6 +147,15 @@ int bcma_bus_register(struct bcma_bus *b 
    221362                bcma_core_pci_init(&bus->drv_pci); 
    222363        } 
     
    224365+       /* Try to get SPROM */ 
    225366+       err = bcma_sprom_get(bus); 
    226 +       if (err) { 
     367+       if (err == -ENOENT) { 
     368+               pr_err("No SPROM available\n"); 
     369+       } else if (err) { 
    227370+               pr_err("Failed to get SPROM: %d\n", err); 
    228371+               return -ENOENT; 
     
    232375        bcma_register_cores(bus); 
    233376  
    234 @@ -151,13 +161,11 @@ int bcma_bus_register(struct bcma_bus *b 
     377@@ -151,13 +163,11 @@ int bcma_bus_register(struct bcma_bus *b 
    235378  
    236379        return 0; 
     
    248391--- /dev/null 
    249392+++ b/drivers/bcma/sprom.c 
    250 @@ -0,0 +1,162 @@ 
     393@@ -0,0 +1,171 @@ 
    251394+/* 
    252395+ * Broadcom specific AMBA 
     
    271414+ **************************************************/ 
    272415+ 
    273 +static void bcma_sprom_read(struct bcma_bus *bus, u16 *sprom) 
     416+static void bcma_sprom_read(struct bcma_bus *bus, u16 offset, u16 *sprom) 
    274417+{ 
    275418+       int i; 
    276419+       for (i = 0; i < SSB_SPROMSIZE_WORDS_R4; i++) 
    277420+               sprom[i] = bcma_read16(bus->drv_cc.core, 
    278 +                                      BCMA_CC_SPROM + (i * 2)); 
     421+                                      offset + (i * 2)); 
    279422+} 
    280423+ 
     
    363506+ 
    364507+       revision = sprom[SSB_SPROMSIZE_WORDS_R4 - 1] & SSB_SPROM_REVISION_REV; 
    365 +       if (revision != 8) { 
     508+       if (revision != 8 && revision != 9) { 
    366509+               pr_err("Unsupported SPROM revision: %d\n", revision); 
    367510+               return -ENOENT; 
     
    388531+int bcma_sprom_get(struct bcma_bus *bus) 
    389532+{ 
     533+       u16 offset; 
    390534+       u16 *sprom; 
    391535+       int err = 0; 
     
    393537+       if (!bus->drv_cc.core) 
    394538+               return -EOPNOTSUPP; 
     539+ 
     540+       if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM)) 
     541+               return -ENOENT; 
    395542+ 
    396543+       sprom = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 
     
    399546+               return -ENOMEM; 
    400547+ 
    401 +       bcma_sprom_read(bus, sprom); 
     548+       /* Most cards have SPROM moved by additional offset 0x30 (48 dwords). 
     549+        * According to brcm80211 this applies to cards with PCIe rev >= 6 
     550+        * TODO: understand this condition and use it */ 
     551+       offset = (bus->chipinfo.id == 0x4331) ? BCMA_CC_SPROM : 
     552+               BCMA_CC_SPROM_PCIE6; 
     553+       bcma_sprom_read(bus, offset, sprom); 
    402554+ 
    403555+       err = bcma_sprom_valid(sprom); 
     
    421573 #include "bcma_regs.h" 
    422574  
    423 @@ -31,6 +32,12 @@ struct bcma_host_ops { 
     575@@ -24,6 +25,11 @@ struct bcma_chipinfo { 
     576        u8 pkg; 
     577 }; 
     578  
     579+enum bcma_clkmode { 
     580+       BCMA_CLKMODE_FAST, 
     581+       BCMA_CLKMODE_DYNAMIC, 
     582+}; 
     583+ 
     584 struct bcma_host_ops { 
     585        u8 (*read8)(struct bcma_device *core, u16 offset); 
     586        u16 (*read16)(struct bcma_device *core, u16 offset); 
     587@@ -31,6 +37,12 @@ struct bcma_host_ops { 
    424588        void (*write8)(struct bcma_device *core, u16 offset, u8 value); 
    425589        void (*write16)(struct bcma_device *core, u16 offset, u16 value); 
     
    434598        u32 (*aread32)(struct bcma_device *core, u16 offset); 
    435599        void (*awrite32)(struct bcma_device *core, u16 offset, u32 value); 
    436 @@ -117,6 +124,8 @@ struct bcma_device { 
     600@@ -117,6 +129,8 @@ struct bcma_device { 
    437601        struct bcma_device_id id; 
    438602  
     
    443607  
    444608        u8 core_index; 
    445 @@ -179,6 +188,10 @@ struct bcma_bus { 
     609@@ -179,6 +193,10 @@ struct bcma_bus { 
    446610  
    447611        struct bcma_drv_cc drv_cc; 
     
    454618  
    455619 extern inline u32 bcma_read8(struct bcma_device *core, u16 offset) 
    456 @@ -208,6 +221,18 @@ void bcma_write32(struct bcma_device *co 
     620@@ -208,6 +226,18 @@ void bcma_write32(struct bcma_device *co 
    457621 { 
    458622        core->bus->ops->write32(core, offset, value); 
     
    473637 { 
    474638        return core->bus->ops->aread32(core, offset); 
    475 @@ -219,6 +244,7 @@ void bcma_awrite32(struct bcma_device *c 
    476  } 
    477   
     639@@ -218,7 +248,24 @@ void bcma_awrite32(struct bcma_device *c 
     640        core->bus->ops->awrite32(core, offset, value); 
     641 } 
     642  
     643+#define bcma_mask32(cc, offset, mask) \ 
     644+       bcma_write32(cc, offset, bcma_read32(cc, offset) & (mask)) 
     645+#define bcma_set32(cc, offset, set) \ 
     646+       bcma_write32(cc, offset, bcma_read32(cc, offset) | (set)) 
     647+#define bcma_maskset32(cc, offset, mask, set) \ 
     648+       bcma_write32(cc, offset, (bcma_read32(cc, offset) & (mask)) | (set)) 
     649+ 
    478650 extern bool bcma_core_is_enabled(struct bcma_device *core); 
    479651+extern void bcma_core_disable(struct bcma_device *core, u32 flags); 
    480652 extern int bcma_core_enable(struct bcma_device *core, u32 flags); 
     653+extern void bcma_core_set_clockmode(struct bcma_device *core, 
     654+                                   enum bcma_clkmode clkmode); 
     655+extern void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, 
     656+                             bool on); 
     657+#define BCMA_DMA_TRANSLATION_MASK      0xC0000000 
     658+#define  BCMA_DMA_TRANSLATION_NONE     0x00000000 
     659+#define  BCMA_DMA_TRANSLATION_DMA32_CMT        0x40000000 /* Client Mode Translation for 32-bit DMA */ 
     660+#define  BCMA_DMA_TRANSLATION_DMA64_CMT        0x80000000 /* Client Mode Translation for 64-bit DMA */ 
     661+extern u32 bcma_core_dma_translation(struct bcma_device *core); 
    481662  
    482663 #endif /* LINUX_BCMA_H_ */ 
    483664--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    484665+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    485 @@ -244,6 +244,7 @@ 
     666@@ -179,15 +179,7 @@ 
     667 #define BCMA_CC_PROG_WAITCNT           0x0124 
     668 #define BCMA_CC_FLASH_CFG              0x0128 
     669 #define BCMA_CC_FLASH_WAITCNT          0x012C 
     670-#define BCMA_CC_CLKCTLST               0x01E0 /* Clock control and status (rev >= 20) */ 
     671-#define  BCMA_CC_CLKCTLST_FORCEALP     0x00000001 /* Force ALP request */ 
     672-#define  BCMA_CC_CLKCTLST_FORCEHT      0x00000002 /* Force HT request */ 
     673-#define  BCMA_CC_CLKCTLST_FORCEILP     0x00000004 /* Force ILP request */ 
     674-#define  BCMA_CC_CLKCTLST_HAVEALPREQ   0x00000008 /* ALP available request */ 
     675-#define  BCMA_CC_CLKCTLST_HAVEHTREQ    0x00000010 /* HT available request */ 
     676-#define  BCMA_CC_CLKCTLST_HWCROFF      0x00000020 /* Force HW clock request off */ 
     677-#define  BCMA_CC_CLKCTLST_HAVEHT       0x00010000 /* HT available */ 
     678-#define  BCMA_CC_CLKCTLST_HAVEALP      0x00020000 /* APL available */ 
     679+/* 0x1E0 is defined as shared BCMA_CLKCTLST */ 
     680 #define BCMA_CC_HW_WORKAROUND          0x01E4 /* Hardware workaround (rev >= 20) */ 
     681 #define BCMA_CC_UART0_DATA             0x0300 
     682 #define BCMA_CC_UART0_IMR              0x0304 
     683@@ -244,6 +236,8 @@ 
    486684 #define BCMA_CC_REGCTL_DATA            0x065C 
    487685 #define BCMA_CC_PLLCTL_ADDR            0x0660 
    488686 #define BCMA_CC_PLLCTL_DATA            0x0664 
    489 +#define BCMA_CC_SPROM                  0x0830 /* SPROM beginning */ 
     687+#define BCMA_CC_SPROM                  0x0800 /* SPROM beginning */ 
     688+#define BCMA_CC_SPROM_PCIE6            0x0830 /* SPROM beginning on PCIe rev >= 6 */ 
    490689  
    491690 /* Data for the PMU, if available. 
     
    501700  
    502701 #endif /* LINUX_BCMA_DRIVER_PCI_H_ */ 
     702--- a/drivers/bcma/driver_chipcommon.c 
     703+++ b/drivers/bcma/driver_chipcommon.c 
     704@@ -23,6 +23,9 @@ static inline u32 bcma_cc_write32_masked 
     705  
     706 void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) 
     707 { 
     708+       u32 leddc_on = 10; 
     709+       u32 leddc_off = 90; 
     710+ 
     711        if (cc->core->id.rev >= 11) 
     712                cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT); 
     713        cc->capabilities = bcma_cc_read32(cc, BCMA_CC_CAP); 
     714@@ -38,6 +41,17 @@ void bcma_core_chipcommon_init(struct bc 
     715                bcma_pmu_init(cc); 
     716        if (cc->capabilities & BCMA_CC_CAP_PCTL) 
     717                pr_err("Power control not implemented!\n"); 
     718+ 
     719+       if (cc->core->id.rev >= 16) { 
     720+               if (cc->core->bus->sprom.leddc_on_time && 
     721+                   cc->core->bus->sprom.leddc_off_time) { 
     722+                       leddc_on = cc->core->bus->sprom.leddc_on_time; 
     723+                       leddc_off = cc->core->bus->sprom.leddc_off_time; 
     724+               } 
     725+               bcma_cc_write32(cc, BCMA_CC_GPIOTIMER, 
     726+                       ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | 
     727+                        (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT))); 
     728+       } 
     729 } 
     730  
     731 /* Set chip watchdog reset timer to fire in 'ticks' backplane cycles */ 
     732--- /dev/null 
     733+++ b/drivers/bcma/driver_pci_host.c 
     734@@ -0,0 +1,14 @@ 
     735+/* 
     736+ * Broadcom specific AMBA 
     737+ * PCI Core in hostmode 
     738+ * 
     739+ * Licensed under the GNU/GPL. See COPYING for details. 
     740+ */ 
     741+ 
     742+#include "bcma_private.h" 
     743+#include <linux/bcma/bcma.h> 
     744+ 
     745+void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc) 
     746+{ 
     747+       pr_err("No support for PCI core in hostmode yet\n"); 
     748+} 
     749--- a/include/linux/bcma/bcma_regs.h 
     750+++ b/include/linux/bcma/bcma_regs.h 
     751@@ -1,13 +1,38 @@ 
     752 #ifndef LINUX_BCMA_REGS_H_ 
     753 #define LINUX_BCMA_REGS_H_ 
     754  
     755+/* Some single registers are shared between many cores */ 
     756+/* BCMA_CLKCTLST: ChipCommon (rev >= 20), PCIe, 80211 */ 
     757+#define BCMA_CLKCTLST                  0x01E0 /* Clock control and status */ 
     758+#define  BCMA_CLKCTLST_FORCEALP                0x00000001 /* Force ALP request */ 
     759+#define  BCMA_CLKCTLST_FORCEHT         0x00000002 /* Force HT request */ 
     760+#define  BCMA_CLKCTLST_FORCEILP                0x00000004 /* Force ILP request */ 
     761+#define  BCMA_CLKCTLST_HAVEALPREQ      0x00000008 /* ALP available request */ 
     762+#define  BCMA_CLKCTLST_HAVEHTREQ       0x00000010 /* HT available request */ 
     763+#define  BCMA_CLKCTLST_HWCROFF         0x00000020 /* Force HW clock request off */ 
     764+#define  BCMA_CLKCTLST_EXTRESREQ       0x00000700 /* Mask of external resource requests */ 
     765+#define  BCMA_CLKCTLST_HAVEALP         0x00010000 /* ALP available */ 
     766+#define  BCMA_CLKCTLST_HAVEHT          0x00020000 /* HT available */ 
     767+#define  BCMA_CLKCTLST_BP_ON_ALP       0x00040000 /* RO: running on ALP clock */ 
     768+#define  BCMA_CLKCTLST_BP_ON_HT                0x00080000 /* RO: running on HT clock */ 
     769+#define  BCMA_CLKCTLST_EXTRESST                0x07000000 /* Mask of external resource status */ 
     770+/* Is there any BCM4328 on BCMA bus? */ 
     771+#define  BCMA_CLKCTLST_4328A0_HAVEHT   0x00010000 /* 4328a0 has reversed bits */ 
     772+#define  BCMA_CLKCTLST_4328A0_HAVEALP  0x00020000 /* 4328a0 has reversed bits */ 
     773+ 
     774 /* Agent registers (common for every core) */ 
     775-#define BCMA_IOCTL                     0x0408 
     776+#define BCMA_IOCTL                     0x0408 /* IO control */ 
     777 #define  BCMA_IOCTL_CLK                        0x0001 
     778 #define  BCMA_IOCTL_FGC                        0x0002 
     779 #define  BCMA_IOCTL_CORE_BITS          0x3FFC 
     780 #define  BCMA_IOCTL_PME_EN             0x4000 
     781 #define  BCMA_IOCTL_BIST_EN            0x8000 
     782+#define BCMA_IOST                      0x0500 /* IO status */ 
     783+#define  BCMA_IOST_CORE_BITS           0x0FFF 
     784+#define  BCMA_IOST_DMA64               0x1000 
     785+#define  BCMA_IOST_GATED_CLK           0x2000 
     786+#define  BCMA_IOST_BIST_ERROR          0x4000 
     787+#define  BCMA_IOST_BIST_DONE           0x8000 
     788 #define BCMA_RESET_CTL                 0x0800 
     789 #define  BCMA_RESET_CTL_RESET          0x0001 
     790  
  • trunk/target/linux/generic/patches-3.0/253-ssb_b43_default_on.patch

    r26691 r27723  
    1818 config SSB_PCMCIAHOST_POSSIBLE 
    1919        bool 
     20--- a/drivers/bcma/Kconfig 
     21+++ b/drivers/bcma/Kconfig 
     22@@ -17,6 +17,7 @@ config BCMA 
     23 config BCMA_BLOCKIO 
     24        bool 
     25        depends on BCMA 
     26+       default y 
     27  
     28 config BCMA_HOST_PCI_POSSIBLE 
     29        bool 
Note: See TracChangeset for help on using the changeset viewer.