Ignore:
Timestamp:
2011-07-22T18:30:42+02:00 (5 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
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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); 
Note: See TracChangeset for help on using the changeset viewer.