brcm63xx: add initial support for BCM6318
authorjogo <jogo@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 13 Jan 2014 12:14:02 +0000 (12:14 +0000)
committerjogo <jogo@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 13 Jan 2014 12:14:02 +0000 (12:14 +0000)
Add inital support for BCM6318, but keep it disabled for now until
most things are supported.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39272 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/brcm63xx/config-3.10
target/linux/brcm63xx/patches-3.10/341-MIPS-BCM63XX-add-support-for-BCM6318.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.10/342-MIPS-BCM63XX-split-PCIe-reset-signals.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.10/343-MIPS-BCM63XX-add-PCIe-support-for-BCM6318.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-3.10/403-6358-enet1-external-mii-clk.patch
target/linux/brcm63xx/patches-3.10/408-bcm63xx_enet-enable-rgmii-clock-on-external-ports.patch
target/linux/brcm63xx/patches-3.10/411-MIPS-BCM63XX-Register-SPI-flash-if-present.patch
target/linux/brcm63xx/patches-3.10/415-MIPS-BCM63XX-store-the-flash-type-in-global-variable.patch
target/linux/brcm63xx/patches-3.10/418-MIPS-BCM63XX-pass-caldata-info-to-flash.patch
target/linux/brcm63xx/patches-3.10/422-BCM63XX-add-a-fixup-for-rt2x00-devices.patch
target/linux/brcm63xx/patches-3.10/511-board_V2500V.patch

index 5935136..ad548e7 100644 (file)
@@ -16,6 +16,7 @@ CONFIG_B53_SPI_DRIVER=y
 # CONFIG_B53_SRAB_DRIVER is not set
 CONFIG_BCM63XX=y
 CONFIG_BCM63XX_CPU_3368=y
+# CONFIG_BCM63XX_CPU_6318 is not set
 # CONFIG_BCM63XX_CPU_63268 is not set
 CONFIG_BCM63XX_CPU_6328=y
 CONFIG_BCM63XX_CPU_6338=y
diff --git a/target/linux/brcm63xx/patches-3.10/341-MIPS-BCM63XX-add-support-for-BCM6318.patch b/target/linux/brcm63xx/patches-3.10/341-MIPS-BCM63XX-add-support-for-BCM6318.patch
new file mode 100644 (file)
index 0000000..b0c9efb
--- /dev/null
@@ -0,0 +1,592 @@
+From 60c29522a8c77d96145d965589c56befda7d4c3d Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Sun, 8 Dec 2013 01:24:09 +0100
+Subject: [PATCH 51/53] MIPS: BCM63XX: add support for BCM6318
+
+---
+ arch/mips/bcm63xx/Kconfig                         |   5 +
+ arch/mips/bcm63xx/boards/board_bcm963xx.c         |   2 +-
+ arch/mips/bcm63xx/clk.c                           |   8 +-
+ arch/mips/bcm63xx/cpu.c                           |  53 +++++++++++
+ arch/mips/bcm63xx/dev-flash.c                     |   3 +
+ arch/mips/bcm63xx/dev-spi.c                       |   2 +-
+ arch/mips/bcm63xx/irq.c                           |  10 ++
+ arch/mips/bcm63xx/prom.c                          |   2 +-
+ arch/mips/bcm63xx/reset.c                         |  24 +++++
+ arch/mips/bcm63xx/setup.c                         |   5 +-
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h  | 107 ++++++++++++++++++++++
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h |  75 ++++++++++++++-
+ arch/mips/include/asm/mach-bcm63xx/ioremap.h      |   1 +
+ 13 files changed, 291 insertions(+), 6 deletions(-)
+
+--- a/arch/mips/bcm63xx/Kconfig
++++ b/arch/mips/bcm63xx/Kconfig
+@@ -18,6 +18,11 @@ config BCM63XX_EHCI
+       select USB_EHCI_BIG_ENDIAN_DESC if USB_EHCI_HCD
+       select USB_EHCI_BIG_ENDIAN_MMIO if USB_EHCI_HCD
++config BCM63XX_CPU_6318
++      bool "support 6318 CPU"
++      select SYS_HAS_CPU_BMIPS32_3300
++      select HW_HAS_PCI
++
+ config BCM63XX_CPU_6328
+       bool "support 6328 CPU"
+       select SYS_HAS_CPU_BMIPS4350
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -825,7 +825,7 @@ void __init board_prom_init(void)
+       /* read base address of boot chip select (0)
+        * 6328/6362 do not have MPI but boot from a fixed address
+        */
+-      if (BCMCPU_IS_6328() || BCMCPU_IS_6362() || BCMCPU_IS_63268()) {
++      if (BCMCPU_IS_6318() || BCMCPU_IS_6328() || BCMCPU_IS_6362() || BCMCPU_IS_63268()) {
+               val = 0x18000000;
+       } else {
+               val = bcm_mpi_readl(MPI_CSBASE_REG(0));
+--- a/arch/mips/bcm63xx/clk.c
++++ b/arch/mips/bcm63xx/clk.c
+@@ -252,7 +252,9 @@ static void hsspi_set(struct clk *clk, i
+ {
+       u32 mask;
+-      if (BCMCPU_IS_6328())
++      if (BCMCPU_IS_6318())
++              mask = CKCTL_6318_HSSPI_EN;
++      else if (BCMCPU_IS_6328())
+               mask = CKCTL_6328_HSSPI_EN;
+       else if (BCMCPU_IS_6362())
+               mask = CKCTL_6362_HSSPI_EN;
+@@ -405,12 +407,16 @@ void clk_put(struct clk *clk)
+ EXPORT_SYMBOL(clk_put);
++#define HSSPI_PLL_HZ_6318     250000000
+ #define HSSPI_PLL_HZ_6328     133333333
+ #define HSSPI_PLL_HZ_6362     400000000
+ static int __init bcm63xx_clk_init(void)
+ {
+       switch (bcm63xx_get_cpu_id()) {
++      case BCM6318_CPU_ID:
++              clk_hsspi.rate = HSSPI_PLL_HZ_6318;
++              break;
+       case BCM6328_CPU_ID:
+               clk_hsspi.rate = HSSPI_PLL_HZ_6328;
+               break;
+--- a/arch/mips/bcm63xx/cpu.c
++++ b/arch/mips/bcm63xx/cpu.c
+@@ -41,6 +41,14 @@ static const int bcm3368_irqs[] = {
+       __GEN_CPU_IRQ_TABLE(3368)
+ };
++static const unsigned long bcm6318_regs_base[] = {
++      __GEN_CPU_REGS_TABLE(6318)
++};
++
++static const int bcm6318_irqs[] = {
++      __GEN_CPU_IRQ_TABLE(6318)
++};
++
+ static const unsigned long bcm6328_regs_base[] = {
+       __GEN_CPU_REGS_TABLE(6328)
+ };
+@@ -134,12 +142,38 @@ unsigned int bcm63xx_get_memory_size(voi
+       return bcm63xx_memory_size;
+ }
++#define STRAP_OVERRIDE_BUS_REG                0x0
++#define OVERRIDE_BUS_MIPS_FREQ_SHIFT  23
++#define OVERRIDE_BUS_MIPS_FREQ_MASK   (0x3 << OVERRIDE_BUS_MIPS_FREQ_SHIFT)
++
+ static unsigned int detect_cpu_clock(void)
+ {
+       switch (bcm63xx_get_cpu_id()) {
+       case BCM3368_CPU_ID:
+               return 300000000;
++      case BCM6318_CPU_ID:
++      {
++              unsigned int tmp, mips_pll_fcvo;
++
++              tmp = bcm_readl(BCM_6318_STRAP_BASE + STRAP_OVERRIDE_BUS_REG);
++
++              pr_info("strap_override_bus = %08x\n", tmp);
++
++              mips_pll_fcvo = (tmp & OVERRIDE_BUS_MIPS_FREQ_MASK)
++                              >> OVERRIDE_BUS_MIPS_FREQ_SHIFT;
++
++              switch (mips_pll_fcvo) {
++              case 0:
++                      return 166000000;
++              case 1:
++                      return 400000000;
++              case 2:
++                      return 250000000;
++              case 3:
++                      return 333000000;
++              };
++      }
+       case BCM6328_CPU_ID:
+       {
+               unsigned int tmp, mips_pll_fcvo;
+@@ -295,6 +329,13 @@ static unsigned int detect_memory_size(v
+       unsigned int cols = 0, rows = 0, is_32bits = 0, banks = 0;
+       u32 val;
++      if (BCMCPU_IS_6318()) {
++              val = bcm_sdram_readl(SDRAM_CFG_REG);
++              val = val & SDRAM_CFG_6318_SPACE_MASK;
++              val >>= SDRAM_CFG_6318_SPACE_SHIFT;
++              return 1 << (val + 20);
++      }
++
+       if (BCMCPU_IS_6328() || BCMCPU_IS_6362() || BCMCPU_IS_63268())
+               return bcm_ddr_readl(DDR_CSEND_REG) << 24;
+@@ -342,6 +383,12 @@ void __init bcm63xx_cpu_init(void)
+       switch (c->cputype) {
+       case CPU_BMIPS3300:
++              if ((read_c0_prid() & 0xff) >= 0x33) {
++                      /* BCM6318 */
++                      chipid_reg = BCM_6368_PERF_BASE;
++                      break;
++              }
++
+               if ((read_c0_prid() & 0xff00) != PRID_IMP_BMIPS3300_ALT)
+                       __cpu_name[cpu] = "Broadcom BCM6338";
+               /* fall-through */
+@@ -389,6 +436,10 @@ void __init bcm63xx_cpu_init(void)
+       bcm63xx_cpu_variant = bcm63xx_cpu_id;
+       switch (bcm63xx_cpu_id) {
++      case BCM6318_CPU_ID:
++              bcm63xx_regs_base = bcm6318_regs_base;
++              bcm63xx_irqs = bcm6318_irqs;
++              break;
+       case BCM3368_CPU_ID:
+               bcm63xx_regs_base = bcm3368_regs_base;
+               bcm63xx_irqs = bcm3368_irqs;
+--- a/arch/mips/bcm63xx/dev-flash.c
++++ b/arch/mips/bcm63xx/dev-flash.c
+@@ -60,6 +60,9 @@ static int __init bcm63xx_detect_flash_t
+       u32 val;
+       switch (bcm63xx_get_cpu_id()) {
++      case BCM6318_CPU_ID:
++              /* only support serial flash */
++              return BCM63XX_FLASH_TYPE_SERIAL;
+       case BCM6328_CPU_ID:
+               val = bcm_misc_readl(MISC_STRAPBUS_6328_REG);
+               if (val & STRAPBUS_6328_BOOT_SEL_SERIAL)
+--- a/arch/mips/bcm63xx/dev-spi.c
++++ b/arch/mips/bcm63xx/dev-spi.c
+@@ -70,7 +70,7 @@ static struct platform_device bcm63xx_sp
+ int __init bcm63xx_spi_register(void)
+ {
+-      if (BCMCPU_IS_6328() || BCMCPU_IS_6345())
++      if (BCMCPU_IS_6318() || BCMCPU_IS_6328() || BCMCPU_IS_6345())
+               return -ENODEV;
+       spi_resources[0].start = bcm63xx_regset_address(RSET_SPI);
+--- a/arch/mips/bcm63xx/irq.c
++++ b/arch/mips/bcm63xx/irq.c
+@@ -441,6 +441,16 @@ static void bcm63xx_init_irq(void)
+               ext_irq_count = 4;
+               ext_irq_cfg_reg1 = PERF_EXTIRQ_CFG_REG_3368;
+               break;
++      case BCM6318_CPU_ID:
++              irq_stat_addr[0] += PERF_IRQSTAT_6318_REG;
++              irq_mask_addr[0] += PERF_IRQMASK_6318_REG;
++              irq_bits = 128;
++              ext_irq_count = 4;
++              is_ext_irq_cascaded = 1;
++              ext_irq_start = BCM_6318_EXT_IRQ0 - IRQ_INTERNAL_BASE;
++              ext_irq_end = BCM_6318_EXT_IRQ3 - IRQ_INTERNAL_BASE;
++              ext_irq_cfg_reg1 = PERF_EXTIRQ_CFG_REG_6318;
++              break;
+       case BCM6328_CPU_ID:
+               irq_stat_addr[0] += PERF_IRQSTAT_6328_REG(0);
+               irq_mask_addr[0] += PERF_IRQMASK_6328_REG(0);
+--- a/arch/mips/bcm63xx/prom.c
++++ b/arch/mips/bcm63xx/prom.c
+@@ -72,7 +72,7 @@ void __init prom_init(void)
+                       if (reg & OTP_6328_REG3_TP1_DISABLED)
+                               bmips_smp_enabled = 0;
+-              } else if (BCMCPU_IS_3368() || BCMCPU_IS_6358()) {
++              } else if (BCMCPU_IS_6318() || BCMCPU_IS_3368() || BCMCPU_IS_6358()) {
+                       bmips_smp_enabled = 0;
+               }
+--- a/arch/mips/bcm63xx/reset.c
++++ b/arch/mips/bcm63xx/reset.c
+@@ -43,6 +43,23 @@
+ #define BCM3368_RESET_PCIE    0
+ #define BCM3368_RESET_PCIE_EXT        0
++
++#define BCM6318_RESET_SPI     SOFTRESET_6318_SPI_MASK
++#define BCM6318_RESET_ENET    0
++#define BCM6318_RESET_USBH    SOFTRESET_6318_USBH_MASK
++#define BCM6318_RESET_USBD    SOFTRESET_6318_USBS_MASK
++#define BCM6318_RESET_DSL     0
++#define BCM6318_RESET_SAR     SOFTRESET_6318_SAR_MASK
++#define BCM6318_RESET_EPHY    SOFTRESET_6318_EPHY_MASK
++#define BCM6318_RESET_ENETSW  SOFTRESET_6318_ENETSW_MASK
++#define BCM6318_RESET_PCM     0
++#define BCM6318_RESET_MPI     0
++#define BCM6318_RESET_PCIE    \
++                              (SOFTRESET_6318_PCIE_MASK |             \
++                               SOFTRESET_6318_PCIE_CORE_MASK |        \
++                               SOFTRESET_6318_PCIE_HARD_MASK)
++#define BCM6318_RESET_PCIE_EXT        SOFTRESET_6318_PCIE_EXT_MASK
++
+ #define BCM6328_RESET_SPI     SOFTRESET_6328_SPI_MASK
+ #define BCM6328_RESET_ENET    0
+ #define BCM6328_RESET_USBH    SOFTRESET_6328_USBH_MASK
+@@ -147,6 +164,10 @@ static const u32 bcm3368_reset_bits[] =
+       __GEN_RESET_BITS_TABLE(3368)
+ };
++static const u32 bcm6318_reset_bits[] = {
++      __GEN_RESET_BITS_TABLE(6318)
++};
++
+ static const u32 bcm6328_reset_bits[] = {
+       __GEN_RESET_BITS_TABLE(6328)
+ };
+@@ -183,6 +204,9 @@ static int __init bcm63xx_reset_bits_ini
+       if (BCMCPU_IS_3368()) {
+               reset_reg = PERF_SOFTRESET_6358_REG;
+               bcm63xx_reset_bits = bcm3368_reset_bits;
++      } else if (BCMCPU_IS_6318()) {
++              reset_reg = PERF_SOFTRESET_6318_REG;
++              bcm63xx_reset_bits = bcm6318_reset_bits;
+       } else if (BCMCPU_IS_6328()) {
+               reset_reg = PERF_SOFTRESET_6328_REG;
+               bcm63xx_reset_bits = bcm6328_reset_bits;
+--- a/arch/mips/bcm63xx/setup.c
++++ b/arch/mips/bcm63xx/setup.c
+@@ -71,6 +71,9 @@ void bcm63xx_machine_reboot(void)
+       case BCM3368_CPU_ID:
+               perf_regs[0] = PERF_EXTIRQ_CFG_REG_3368;
+               break;
++      case BCM6318_CPU_ID:
++              perf_regs[0] = PERF_EXTIRQ_CFG_REG_6318;
++              break;
+       case BCM6328_CPU_ID:
+               perf_regs[0] = PERF_EXTIRQ_CFG_REG_6328;
+               break;
+@@ -110,7 +113,7 @@ void bcm63xx_machine_reboot(void)
+               bcm6348_a1_reboot();
+       printk(KERN_INFO "triggering watchdog soft-reset...\n");
+-      if (BCMCPU_IS_6328()) {
++      if (BCMCPU_IS_6318() || BCMCPU_IS_6328()) {
+               bcm_wdt_writel(1, WDT_SOFTRESET_REG);
+       } else {
+               reg = bcm_perf_readl(PERF_SYS_PLL_CTL_REG);
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h
+@@ -10,6 +10,7 @@
+  * arm mach-types)
+  */
+ #define BCM3368_CPU_ID                0x3368
++#define BCM6318_CPU_ID                0x6318
+ #define BCM6328_CPU_ID                0x6328
+ #define BCM63281_CPU_ID               0x63281
+ #define BCM63283_CPU_ID               0x63283
+@@ -38,6 +39,10 @@ static inline u32 __pure __bcm63xx_get_c
+               case BCM3368_CPU_ID:
+ #endif
++#ifdef CONFIG_BCM63XX_CPU_6318
++              case BCM6318_CPU_ID:
++#endif
++
+ #ifdef CONFIG_BCM63XX_CPU_6328
+               case BCM6328_CPU_ID:
+ #endif
+@@ -87,6 +92,7 @@ static inline u32 __pure bcm63xx_get_cpu
+ }
+ #define BCMCPU_IS_3368()      (bcm63xx_get_cpu_id() == BCM3368_CPU_ID)
++#define BCMCPU_IS_6318()      (bcm63xx_get_cpu_id() == BCM6318_CPU_ID)
+ #define BCMCPU_IS_6328()      (bcm63xx_get_cpu_id() == BCM6328_CPU_ID)
+ #define BCMCPU_IS_6338()      (bcm63xx_get_cpu_id() == BCM6338_CPU_ID)
+ #define BCMCPU_IS_6345()      (bcm63xx_get_cpu_id() == BCM6345_CPU_ID)
+@@ -98,6 +104,8 @@ static inline u32 __pure bcm63xx_get_cpu
+ #define BCMCPU_VARIANT_IS_3368() \
+       (bcm63xx_get_cpu_variant() == BCM3368_CPU_ID)
++#define BCMCPU_VARIANT_IS_6318() \
++      (bcm63xx_get_cpu_variant() == BCM6318_CPU_ID)
+ #define BCMCPU_VARIANT_IS_63281() \
+       (bcm63xx_get_cpu_variant() == BCM63281_CPU_ID)
+ #define BCMCPU_VARIANT_IS_63283() \
+@@ -252,6 +260,56 @@ enum bcm63xx_regs_set {
+ #define BCM_3368_MISC_BASE            (0xdeadbeef)
+ /*
++ * 6318 register sets base address
++ */
++#define BCM_6318_DSL_LMEM_BASE                (0xdeadbeef)
++#define BCM_6318_PERF_BASE            (0xb0000000)
++#define BCM_6318_TIMER_BASE           (0xb0000040)
++#define BCM_6318_WDT_BASE             (0xb0000068)
++#define BCM_6318_UART0_BASE           (0xb0000100)
++#define BCM_6318_UART1_BASE           (0xdeadbeef)
++#define BCM_6318_GPIO_BASE            (0xb0000080)
++#define BCM_6318_SPI_BASE             (0xdeadbeef)
++#define BCM_6318_HSSPI_BASE           (0xb0003000)
++#define BCM_6318_UDC0_BASE            (0xdeadbeef)
++#define BCM_6318_USBDMA_BASE          (0xdeadbeef)
++#define BCM_6318_OHCI0_BASE           (0xb0005100)
++#define BCM_6318_OHCI_PRIV_BASE               (0xdeadbeef)
++#define BCM_6318_USBH_PRIV_BASE               (0xb0005200)
++#define BCM_6318_USBD_BASE            (0xb0006000)
++#define BCM_6318_MPI_BASE             (0xdeadbeef)
++#define BCM_6318_PCMCIA_BASE          (0xdeadbeef)
++#define BCM_6318_PCIE_BASE            (0xb0010000)
++#define BCM_6318_SDRAM_REGS_BASE      (0xdeadbeef)
++#define BCM_6318_DSL_BASE             (0xdeadbeef)
++#define BCM_6318_UBUS_BASE            (0xdeadbeef)
++#define BCM_6318_ENET0_BASE           (0xdeadbeef)
++#define BCM_6318_ENET1_BASE           (0xdeadbeef)
++#define BCM_6318_ENETDMA_BASE         (0xb0088000)
++#define BCM_6318_ENETDMAC_BASE                (0xb0088200)
++#define BCM_6318_ENETDMAS_BASE                (0xb0088400)
++#define BCM_6318_ENETSW_BASE          (0xb0080000)
++#define BCM_6318_EHCI0_BASE           (0xb0005000)
++#define BCM_6318_SDRAM_BASE           (0xb0004000)
++#define BCM_6318_MEMC_BASE            (0xdeadbeef)
++#define BCM_6318_DDR_BASE             (0xdeadbeef)
++#define BCM_6318_M2M_BASE             (0xdeadbeef)
++#define BCM_6318_ATM_BASE             (0xdeadbeef)
++#define BCM_6318_XTM_BASE             (0xdeadbeef)
++#define BCM_6318_XTMDMA_BASE          (0xb000c000)
++#define BCM_6318_XTMDMAC_BASE         (0xdeadbeef)
++#define BCM_6318_XTMDMAS_BASE         (0xdeadbeef)
++#define BCM_6318_PCM_BASE             (0xdeadbeef)
++#define BCM_6318_PCMDMA_BASE          (0xdeadbeef)
++#define BCM_6318_PCMDMAC_BASE         (0xdeadbeef)
++#define BCM_6318_PCMDMAS_BASE         (0xdeadbeef)
++#define BCM_6318_RNG_BASE             (0xdeadbeef)
++#define BCM_6318_MISC_BASE            (0xb0000280)
++#define BCM_6318_OTP_BASE             (0xdeadbeef)
++
++#define BCM_6318_STRAP_BASE           (0xb0000900)
++
++/*
+  * 6328 register sets base address
+  */
+ #define BCM_6328_DSL_LMEM_BASE                (0xdeadbeef)
+@@ -819,6 +877,55 @@ enum bcm63xx_irq {
+ #define BCM_3368_EXT_IRQ2             (IRQ_INTERNAL_BASE + 27)
+ #define BCM_3368_EXT_IRQ3             (IRQ_INTERNAL_BASE + 28)
++/*
++ * 6318 irqs
++ */
++#define BCM_6318_HIGH_IRQ_BASE                (IRQ_INTERNAL_BASE + 32)
++#define BCM_6318_VERY_HIGH_IRQ_BASE   (BCM_6318_HIGH_IRQ_BASE + 32)
++
++#define BCM_6318_TIMER_IRQ            (IRQ_INTERNAL_BASE + 31)
++#define BCM_6318_SPI_IRQ              0
++#define BCM_6318_UART0_IRQ            (IRQ_INTERNAL_BASE + 28)
++#define BCM_6318_UART1_IRQ            0
++#define BCM_6318_DSL_IRQ              (IRQ_INTERNAL_BASE + 21)
++#define BCM_6318_UDC0_IRQ             0
++#define BCM_6318_ENET0_IRQ            0
++#define BCM_6318_ENET1_IRQ            0
++#define BCM_6318_ENET_PHY_IRQ         (IRQ_INTERNAL_BASE + 12)
++#define BCM_6318_HSSPI_IRQ            (IRQ_INTERNAL_BASE + 29)
++#define BCM_6318_OHCI0_IRQ            (BCM_6318_HIGH_IRQ_BASE + 9)
++#define BCM_6318_EHCI0_IRQ            (BCM_6318_HIGH_IRQ_BASE + 10)
++#define BCM_6318_USBD_IRQ             (IRQ_INTERNAL_BASE + 4)
++#define BCM_6318_USBD_RXDMA0_IRQ      (IRQ_INTERNAL_BASE + 5)
++#define BCM_6318_USBD_TXDMA0_IRQ      (IRQ_INTERNAL_BASE + 6)
++#define BCM_6318_USBD_RXDMA1_IRQ      (IRQ_INTERNAL_BASE + 7)
++#define BCM_6318_USBD_TXDMA1_IRQ      (IRQ_INTERNAL_BASE + 8)
++#define BCM_6318_USBD_RXDMA2_IRQ      (IRQ_INTERNAL_BASE + 9)
++#define BCM_6318_USBD_TXDMA2_IRQ      (IRQ_INTERNAL_BASE + 10)
++#define BCM_6318_PCMCIA_IRQ           0
++#define BCM_6318_ENET0_RXDMA_IRQ      0
++#define BCM_6318_ENET0_TXDMA_IRQ      0
++#define BCM_6318_ENET1_RXDMA_IRQ      0
++#define BCM_6318_ENET1_TXDMA_IRQ      0
++#define BCM_6318_PCI_IRQ              (IRQ_INTERNAL_BASE + 23)
++#define BCM_6318_ATM_IRQ              0
++#define BCM_6318_ENETSW_RXDMA0_IRQ    (BCM_6318_HIGH_IRQ_BASE + 0)
++#define BCM_6318_ENETSW_RXDMA1_IRQ    (BCM_6318_HIGH_IRQ_BASE + 1)
++#define BCM_6318_ENETSW_RXDMA2_IRQ    (BCM_6318_HIGH_IRQ_BASE + 2)
++#define BCM_6318_ENETSW_RXDMA3_IRQ    (BCM_6318_HIGH_IRQ_BASE + 3)
++#define BCM_6318_ENETSW_TXDMA0_IRQ    (BCM_6318_VERY_HIGH_IRQ_BASE + 10)
++#define BCM_6318_ENETSW_TXDMA1_IRQ    (BCM_6318_VERY_HIGH_IRQ_BASE + 11)
++#define BCM_6318_ENETSW_TXDMA2_IRQ    (BCM_6318_VERY_HIGH_IRQ_BASE + 12)
++#define BCM_6318_ENETSW_TXDMA3_IRQ    (BCM_6318_VERY_HIGH_IRQ_BASE + 13)
++#define BCM_6318_XTM_IRQ              (BCM_6318_HIGH_IRQ_BASE + 31)
++#define BCM_6318_XTM_DMA0_IRQ         (BCM_6318_HIGH_IRQ_BASE + 11)
++
++#define BCM_6318_PCM_DMA0_IRQ         (IRQ_INTERNAL_BASE + 2)
++#define BCM_6318_PCM_DMA1_IRQ         (IRQ_INTERNAL_BASE + 3)
++#define BCM_6318_EXT_IRQ0             (IRQ_INTERNAL_BASE + 24)
++#define BCM_6318_EXT_IRQ1             (IRQ_INTERNAL_BASE + 25)
++#define BCM_6318_EXT_IRQ2             (IRQ_INTERNAL_BASE + 26)
++#define BCM_6318_EXT_IRQ3             (IRQ_INTERNAL_BASE + 27)
+ /*
+  * 6328 irqs
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
+@@ -52,6 +52,39 @@
+                                        CKCTL_3368_EMUSB_EN | \
+                                        CKCTL_3368_USBU_EN)
++#define CKCTL_6318_ADSL_ASB_EN                (1 << 0)
++#define CKCTL_6318_USB_ASB_EN         (1 << 1)
++#define CKCTL_6318_MIPS_ASB_EN                (1 << 2)
++#define CKCTL_6318_PCIE_ASB_EN                (1 << 3)
++#define CKCTL_6318_PHYMIPS_ASB_EN     (1 << 4)
++#define CKCTL_6318_ROBOSW_ASB_EN      (1 << 5)
++#define CKCTL_6318_SAR_ASB_EN         (1 << 6)
++#define CKCTL_6318_SDR_ASB_EN         (1 << 7)
++#define CKCTL_6318_SWREG_ASB_EN               (1 << 8)
++#define CKCTL_6318_PERIPH_ASB_EN      (1 << 9)
++#define CKCTL_6318_CPUBUS160_EN               (1 << 10)
++#define CKCTL_6318_ADSL_EN            (1 << 11)
++#define CKCTL_6318_SAR125_EN          (1 << 12)
++#define CKCTL_6318_MIPS_EN            (1 << 13)
++#define CKCTL_6318_PCIE_EN            (1 << 14)
++#define CKCTL_6318_ROBOSW250_EN               (1 << 16)
++#define CKCTL_6318_ROBOSW025_EN               (1 << 17)
++#define CKCTL_6318_SDR_EN             (1 << 19)
++#define CKCTL_6318_USB_EN             (1 << 20) /* both device and host */
++#define CKCTL_6318_HSSPI_EN           (1 << 25)
++#define CKCTL_6318_PCIE25_EN          (1 << 27)
++#define CKCTL_6318_PHYMIPS_EN         (1 << 28)
++#define CKCTL_6318_ADSL_AFE_EN                (1 << 29)
++#define CKCTL_6318_ADSL_QPROC_EN      (1 << 30)
++
++#define CKCTL_6318_ALL_SAFE_EN                (CKCTL_6318_PHYMIPS_EN |        \
++                                      CKCTL_6318_ADSL_QPROC_EN |      \
++                                      CKCTL_6318_ADSL_AFE_EN |        \
++                                      CKCTL_6318_ADSL_EN |            \
++                                      CKCTL_6318_SAR_EN  |            \
++                                      CKCTL_6318_USB_EN |             \
++                                      CKCTL_6318_PCIE_EN)
++
+ #define CKCTL_6328_PHYMIPS_EN         (1 << 0)
+ #define CKCTL_6328_ADSL_QPROC_EN      (1 << 1)
+ #define CKCTL_6328_ADSL_AFE_EN                (1 << 2)
+@@ -259,12 +292,27 @@
+                                       CKCTL_63268_TBUS_EN |           \
+                                       CKCTL_63268_ROBOSW250_EN)
++/* UBUS Clock Control register */
++#define PERF_UB_CKCTL_REG             0x10
++
++#define UB_CKCTL_6318_ADSL_EN         (1 << 0)
++#define UB_CKCTL_6318_ARB_EN          (1 << 1)
++#define UB_CKCTL_6318_MIPS_EN         (1 << 2)
++#define UB_CKCTL_6318_PCIE_EN         (1 << 3)
++#define UB_CKCTL_6318_PERIPH_EN               (1 << 4)
++#define UB_CKCTL_6318_PHYMIPS_EN      (1 << 5)
++#define UB_CKCTL_6318_ROBOSW_EN               (1 << 6)
++#define UB_CKCTL_6318_SAR_EN          (1 << 7)
++#define UB_CKCTL_6318_SDR_EN          (1 << 8)
++#define UB_CKCTL_6318_USB_EN          (1 << 9)
++
+ /* System PLL Control register        */
+ #define PERF_SYS_PLL_CTL_REG          0x8
+ #define SYS_PLL_SOFT_RESET            0x1
+ /* Interrupt Mask register */
+ #define PERF_IRQMASK_3368_REG         0xc
++#define PERF_IRQMASK_6318_REG         0x20
+ #define PERF_IRQMASK_6328_REG(x)      (0x20 + (x) * 0x10)
+ #define PERF_IRQMASK_6338_REG         0xc
+ #define PERF_IRQMASK_6345_REG         0xc
+@@ -276,6 +324,7 @@
+ /* Interrupt Status register */
+ #define PERF_IRQSTAT_3368_REG         0x10
++#define PERF_IRQSTAT_6318_REG         0x30
+ #define PERF_IRQSTAT_6328_REG(x)      (0x28 + (x) * 0x10)
+ #define PERF_IRQSTAT_6338_REG         0x10
+ #define PERF_IRQSTAT_6345_REG         0x10
+@@ -287,6 +336,7 @@
+ /* External Interrupt Configuration register */
+ #define PERF_EXTIRQ_CFG_REG_3368      0x14
++#define PERF_EXTIRQ_CFG_REG_6318      0x18
+ #define PERF_EXTIRQ_CFG_REG_6328      0x18
+ #define PERF_EXTIRQ_CFG_REG_6338      0x14
+ #define PERF_EXTIRQ_CFG_REG_6345      0x14
+@@ -320,6 +370,7 @@
+ /* Soft Reset register */
+ #define PERF_SOFTRESET_REG            0x28
++#define PERF_SOFTRESET_6318_REG               0x10
+ #define PERF_SOFTRESET_6328_REG               0x10
+ #define PERF_SOFTRESET_6358_REG               0x34
+ #define PERF_SOFTRESET_6362_REG               0x10
+@@ -333,6 +384,18 @@
+ #define SOFTRESET_3368_USBS_MASK      (1 << 11)
+ #define SOFTRESET_3368_PCM_MASK               (1 << 13)
++#define SOFTRESET_6318_SPI_MASK               (1 << 0)
++#define SOFTRESET_6318_EPHY_MASK      (1 << 1)
++#define SOFTRESET_6318_SAR_MASK               (1 << 2)
++#define SOFTRESET_6318_ENETSW_MASK    (1 << 3)
++#define SOFTRESET_6318_USBS_MASK      (1 << 4)
++#define SOFTRESET_6318_USBH_MASK      (1 << 5)
++#define SOFTRESET_6318_PCIE_CORE_MASK (1 << 6)
++#define SOFTRESET_6318_PCIE_MASK      (1 << 7)
++#define SOFTRESET_6318_PCIE_EXT_MASK  (1 << 8)
++#define SOFTRESET_6318_PCIE_HARD_MASK (1 << 9)
++#define SOFTRESET_6318_ADSL_MASK      (1 << 10)
++
+ #define SOFTRESET_6328_SPI_MASK               (1 << 0)
+ #define SOFTRESET_6328_EPHY_MASK      (1 << 1)
+ #define SOFTRESET_6328_SAR_MASK               (1 << 2)
+@@ -504,8 +567,17 @@
+ #define TIMER_IRQSTAT_TIMER1_IR_EN    (1 << 9)
+ #define TIMER_IRQSTAT_TIMER2_IR_EN    (1 << 10)
++#define TIMER_IRQMASK_6318_REG                0x0
++#define TIMER_IRQSTAT_6318_REG                0x4
++#define IRQSTATMASK_TIMER0            (1 << 0)
++#define IRQSTATMASK_TIMER1            (1 << 1)
++#define IRQSTATMASK_TIMER2            (1 << 2)
++#define IRQSTATMASK_TIMER3            (1 << 3)
++#define IRQSTATMASK_WDT                       (1 << 4)
++
+ /* Timer control register */
+ #define TIMER_CTLx_REG(x)             (0x4 + (x * 4))
++#define TIMER_CTRx_6318_REG(x)                (0x8 + (x * 4))
+ #define TIMER_CTL0_REG                        0x4
+ #define TIMER_CTL1_REG                        0x8
+ #define TIMER_CTL2_REG                        0xC
+@@ -1372,6 +1444,8 @@
+ #define SDRAM_CFG_32B_MASK            (1 << SDRAM_CFG_32B_SHIFT)
+ #define SDRAM_CFG_BANK_SHIFT          13
+ #define SDRAM_CFG_BANK_MASK           (1 << SDRAM_CFG_BANK_SHIFT)
++#define SDRAM_CFG_6318_SPACE_SHIFT    4
++#define SDRAM_CFG_6318_SPACE_MASK     (0xf << SDRAM_CFG_6318_SPACE_SHIFT)
+ #define SDRAM_MBASE_REG                       0xc
+--- a/arch/mips/include/asm/mach-bcm63xx/ioremap.h
++++ b/arch/mips/include/asm/mach-bcm63xx/ioremap.h
+@@ -22,6 +22,7 @@ static inline int is_bcm63xx_internal_re
+               if (offset >= 0xfff00000)
+                       return 1;
+               break;
++      case BCM6318_CPU_ID:
+       case BCM6328_CPU_ID:
+       case BCM6362_CPU_ID:
+       case BCM6368_CPU_ID:
diff --git a/target/linux/brcm63xx/patches-3.10/342-MIPS-BCM63XX-split-PCIe-reset-signals.patch b/target/linux/brcm63xx/patches-3.10/342-MIPS-BCM63XX-split-PCIe-reset-signals.patch
new file mode 100644 (file)
index 0000000..71044f8
--- /dev/null
@@ -0,0 +1,156 @@
+From 4bdfacdeaf3c988c4f3256c88118893eac640b03 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Sun, 8 Dec 2013 14:17:50 +0100
+Subject: [PATCH 52/53] MIPS: BCM63XX: split PCIE reset signals
+
+---
+ arch/mips/bcm63xx/reset.c                          | 39 ++++++++++++++--------
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_reset.h |  2 ++
+ arch/mips/pci/pci-bcm63xx.c                        |  7 ++++
+ 3 files changed, 34 insertions(+), 14 deletions(-)
+
+--- a/arch/mips/bcm63xx/reset.c
++++ b/arch/mips/bcm63xx/reset.c
+@@ -28,7 +28,9 @@
+       [BCM63XX_RESET_PCM]             = BCM## __cpu ##_RESET_PCM,     \
+       [BCM63XX_RESET_MPI]             = BCM## __cpu ##_RESET_MPI,     \
+       [BCM63XX_RESET_PCIE]            = BCM## __cpu ##_RESET_PCIE,    \
+-      [BCM63XX_RESET_PCIE_EXT]        = BCM## __cpu ##_RESET_PCIE_EXT,
++      [BCM63XX_RESET_PCIE_EXT]        = BCM## __cpu ##_RESET_PCIE_EXT, \
++      [BCM63XX_RESET_PCIE_CORE]       = BCM## __cpu ##_RESET_PCIE_CORE, \
++      [BCM63XX_RESET_PCIE_HARD]       = BCM## __cpu ##_RESET_PCIE_HARD,
+ #define BCM3368_RESET_SPI     SOFTRESET_3368_SPI_MASK
+ #define BCM3368_RESET_ENET    SOFTRESET_3368_ENET_MASK
+@@ -42,6 +44,8 @@
+ #define BCM3368_RESET_MPI     SOFTRESET_3368_MPI_MASK
+ #define BCM3368_RESET_PCIE    0
+ #define BCM3368_RESET_PCIE_EXT        0
++#define BCM3368_RESET_PCIE_CORE       0
++#define BCM3368_RESET_PCIE_HARD       0
+ #define BCM6318_RESET_SPI     SOFTRESET_6318_SPI_MASK
+@@ -54,11 +58,10 @@
+ #define BCM6318_RESET_ENETSW  SOFTRESET_6318_ENETSW_MASK
+ #define BCM6318_RESET_PCM     0
+ #define BCM6318_RESET_MPI     0
+-#define BCM6318_RESET_PCIE    \
+-                              (SOFTRESET_6318_PCIE_MASK |             \
+-                               SOFTRESET_6318_PCIE_CORE_MASK |        \
+-                               SOFTRESET_6318_PCIE_HARD_MASK)
++#define BCM6318_RESET_PCIE    SOFTRESET_6318_PCIE_MASK
+ #define BCM6318_RESET_PCIE_EXT        SOFTRESET_6318_PCIE_EXT_MASK
++#define BCM6318_RESET_PCIE_CORE       SOFTRESET_6318_PCIE_CORE_MASK
++#define BCM6318_RESET_PCIE_HARD       SOFTRESET_6318_PCIE_HARD_MASK
+ #define BCM6328_RESET_SPI     SOFTRESET_6328_SPI_MASK
+ #define BCM6328_RESET_ENET    0
+@@ -70,11 +73,10 @@
+ #define BCM6328_RESET_ENETSW  SOFTRESET_6328_ENETSW_MASK
+ #define BCM6328_RESET_PCM     SOFTRESET_6328_PCM_MASK
+ #define BCM6328_RESET_MPI     0
+-#define BCM6328_RESET_PCIE    \
+-                              (SOFTRESET_6328_PCIE_MASK |             \
+-                               SOFTRESET_6328_PCIE_CORE_MASK |        \
+-                               SOFTRESET_6328_PCIE_HARD_MASK)
++#define BCM6328_RESET_PCIE    SOFTRESET_6328_PCIE_MASK
+ #define BCM6328_RESET_PCIE_EXT        SOFTRESET_6328_PCIE_EXT_MASK
++#define BCM6328_RESET_PCIE_CORE       SOFTRESET_6328_PCIE_CORE_MASK
++#define BCM6328_RESET_PCIE_HARD       SOFTRESET_6328_PCIE_HARD_MASK
+ #define BCM6338_RESET_SPI     SOFTRESET_6338_SPI_MASK
+ #define BCM6338_RESET_ENET    SOFTRESET_6338_ENET_MASK
+@@ -88,6 +90,8 @@
+ #define BCM6338_RESET_MPI     0
+ #define BCM6338_RESET_PCIE    0
+ #define BCM6338_RESET_PCIE_EXT        0
++#define BCM6338_RESET_PCIE_CORE       0
++#define BCM6338_RESET_PCIE_HARD       0
+ #define BCM6348_RESET_SPI     SOFTRESET_6348_SPI_MASK
+ #define BCM6348_RESET_ENET    SOFTRESET_6348_ENET_MASK
+@@ -101,6 +105,8 @@
+ #define BCM6348_RESET_MPI     0
+ #define BCM6348_RESET_PCIE    0
+ #define BCM6348_RESET_PCIE_EXT        0
++#define BCM6348_RESET_PCIE_CORE       0
++#define BCM6348_RESET_PCIE_HARD       0
+ #define BCM6358_RESET_SPI     SOFTRESET_6358_SPI_MASK
+ #define BCM6358_RESET_ENET    SOFTRESET_6358_ENET_MASK
+@@ -114,6 +120,8 @@
+ #define BCM6358_RESET_MPI     SOFTRESET_6358_MPI_MASK
+ #define BCM6358_RESET_PCIE    0
+ #define BCM6358_RESET_PCIE_EXT        0
++#define BCM6358_RESET_PCIE_CORE       0
++#define BCM6358_RESET_PCIE_HARD       0
+ #define BCM6362_RESET_SPI     SOFTRESET_6362_SPI_MASK
+ #define BCM6362_RESET_ENET    0
+@@ -125,9 +133,10 @@
+ #define BCM6362_RESET_ENETSW  SOFTRESET_6362_ENETSW_MASK
+ #define BCM6362_RESET_PCM     SOFTRESET_6362_PCM_MASK
+ #define BCM6362_RESET_MPI     0
+-#define BCM6362_RESET_PCIE      (SOFTRESET_6362_PCIE_MASK | \
+-                               SOFTRESET_6362_PCIE_CORE_MASK)
++#define BCM6362_RESET_PCIE      SOFTRESET_6362_PCIE_MASK
+ #define BCM6362_RESET_PCIE_EXT        SOFTRESET_6362_PCIE_EXT_MASK
++#define BCM6362_RESET_PCIE_CORE       SOFTRESET_6362_PCIE_CORE_MASK
++#define BCM6362_RESET_PCIE_HARD       0
+ #define BCM6368_RESET_SPI     SOFTRESET_6368_SPI_MASK
+ #define BCM6368_RESET_ENET    0
+@@ -141,6 +150,8 @@
+ #define BCM6368_RESET_MPI     SOFTRESET_6368_MPI_MASK
+ #define BCM6368_RESET_PCIE    0
+ #define BCM6368_RESET_PCIE_EXT        0
++#define BCM6368_RESET_PCIE_CORE       0
++#define BCM6368_RESET_PCIE_HARD       0
+ #define BCM63268_RESET_SPI    SOFTRESET_63268_SPI_MASK
+ #define BCM63268_RESET_ENET   0
+@@ -152,10 +163,10 @@
+ #define BCM63268_RESET_ENETSW SOFTRESET_63268_ENETSW_MASK
+ #define BCM63268_RESET_PCM    SOFTRESET_63268_PCM_MASK
+ #define BCM63268_RESET_MPI    0
+-#define BCM63268_RESET_PCIE   (SOFTRESET_63268_PCIE_MASK | \
+-                               SOFTRESET_63268_PCIE_CORE_MASK | \
+-                               SOFTRESET_63268_PCIE_HARD_MASK)
++#define BCM63268_RESET_PCIE   SOFTRESET_63268_PCIE_MASK
+ #define BCM63268_RESET_PCIE_EXT       SOFTRESET_63268_PCIE_EXT_MASK
++#define BCM63268_RESET_PCIE_CORE      SOFTRESET_63268_PCIE_CORE_MASK
++#define BCM63268_RESET_PCIE_HARD      SOFTRESET_63268_PCIE_HARD_MASK
+ /*
+  * core reset bits
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_reset.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_reset.h
+@@ -14,6 +14,8 @@ enum bcm63xx_core_reset {
+       BCM63XX_RESET_MPI,
+       BCM63XX_RESET_PCIE,
+       BCM63XX_RESET_PCIE_EXT,
++      BCM63XX_RESET_PCIE_CORE,
++      BCM63XX_RESET_PCIE_HARD,
+ };
+ void bcm63xx_core_set_reset(enum bcm63xx_core_reset, int reset);
+--- a/arch/mips/pci/pci-bcm63xx.c
++++ b/arch/mips/pci/pci-bcm63xx.c
+@@ -135,9 +135,16 @@ static void __init bcm63xx_reset_pcie(vo
+       /* reset the PCIe core */
+       bcm63xx_core_set_reset(BCM63XX_RESET_PCIE, 1);
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_CORE, 1);
+       bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_EXT, 1);
++      if (BCMCPU_IS_6328() || BCMCPU_IS_63268()) {
++              bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_HARD, 1);
++              mdelay(10);
++              bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_HARD, 0);
++      }
+       mdelay(10);
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_CORE, 0);
+       bcm63xx_core_set_reset(BCM63XX_RESET_PCIE, 0);
+       mdelay(10);
diff --git a/target/linux/brcm63xx/patches-3.10/343-MIPS-BCM63XX-add-PCIe-support-for-BCM6318.patch b/target/linux/brcm63xx/patches-3.10/343-MIPS-BCM63XX-add-PCIe-support-for-BCM6318.patch
new file mode 100644 (file)
index 0000000..86637ef
--- /dev/null
@@ -0,0 +1,342 @@
+From 11a8ab8dac4ef5d0d70199843043927edce1d4db Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jogo@openwrt.org>
+Date: Sun, 15 Dec 2013 20:47:34 +0100
+Subject: [PATCH 53/53] MIPS: BCM63XX: add PCIe support for BCM6318
+
+---
+ arch/mips/bcm63xx/clk.c                           |  25 ++++-
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_io.h   |   6 ++
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h |  60 +++++++++++-
+ arch/mips/pci/ops-bcm63xx.c                       |  16 +++-
+ arch/mips/pci/pci-bcm63xx.c                       | 106 ++++++++++++++++++----
+ 5 files changed, 184 insertions(+), 29 deletions(-)
+
+--- a/arch/mips/bcm63xx/clk.c
++++ b/arch/mips/bcm63xx/clk.c
+@@ -50,6 +50,18 @@ static void bcm_hwclock_set(u32 mask, in
+       bcm_perf_writel(reg, PERF_CKCTL_REG);
+ }
++static void bcm_ub_hwclock_set(u32 mask, int enable)
++{
++      u32 reg;
++
++      reg = bcm_perf_readl(PERF_UB_CKCTL_REG);
++      if (enable)
++              reg |= mask;
++      else
++              reg &= ~mask;
++      bcm_perf_writel(reg, PERF_UB_CKCTL_REG);
++}
++
+ /*
+  * Ethernet MAC "misc" clock: dma clocks and main clock on 6348
+  */
+@@ -317,12 +329,17 @@ static struct clk clk_ipsec = {
+ static void pcie_set(struct clk *clk, int enable)
+ {
+-      if (BCMCPU_IS_6328())
++      if (BCMCPU_IS_6318()) {
++              bcm_hwclock_set(CKCTL_6318_PCIE_EN, enable);
++              bcm_hwclock_set(CKCTL_6318_PCIE25_EN, enable);
++              bcm_ub_hwclock_set(UB_CKCTL_6318_PCIE_EN, enable);
++      } else if (BCMCPU_IS_6328()) {
+               bcm_hwclock_set(CKCTL_6328_PCIE_EN, enable);
+-      else if (BCMCPU_IS_6362())
++      } else if (BCMCPU_IS_6362()) {
+               bcm_hwclock_set(CKCTL_6362_PCIE_EN, enable);
+-      else if (BCMCPU_IS_63268())
++      } else if (BCMCPU_IS_63268()) {
+               bcm_hwclock_set(CKCTL_63268_PCIE_EN, enable);
++      }
+ }
+ static struct clk clk_pcie = {
+@@ -393,7 +410,7 @@ struct clk *clk_get(struct device *dev,
+       if ((BCMCPU_IS_6362() || BCMCPU_IS_6368() || BCMCPU_IS_63268()) &&
+           !strcmp(id, "ipsec"))
+               return &clk_ipsec;
+-      if ((BCMCPU_IS_6328() || BCMCPU_IS_6362() || BCMCPU_IS_63268()) &&
++      if ((BCMCPU_IS_6318() || BCMCPU_IS_6328() || BCMCPU_IS_6362() || BCMCPU_IS_63268()) &&
+           !strcmp(id, "pcie"))
+               return &clk_pcie;
+       return ERR_PTR(-ENOENT);
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_io.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_io.h
+@@ -40,6 +40,12 @@
+ #define BCM_CB_MEM_END_PA             (BCM_CB_MEM_BASE_PA +           \
+                                       BCM_CB_MEM_SIZE - 1)
++#define BCM_PCIE_MEM_BASE_PA_6318     0x10200000
++#define BCM_PCIE_MEM_SIZE_6318                (1 * 1024 * 1024)
++#define BCM_PCIE_MEM_END_PA_6318      (BCM_PCIE_MEM_BASE_PA_6318 +    \
++                                      BCM_PCIE_MEM_SIZE_6318 - 1)
++
++
+ #define BCM_PCIE_MEM_BASE_PA_6328     0x10f00000
+ #define BCM_PCIE_MEM_SIZE_6328                (1 * 1024 * 1024)
+ #define BCM_PCIE_MEM_END_PA_6328      (BCM_PCIE_MEM_BASE_PA_6328 +    \
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
+@@ -1661,6 +1661,17 @@
+  * _REG relative to RSET_PCIE
+  *************************************************************************/
++#define PCIE_SPECIFIC_REG             0x188
++#define SPECIFIC_ENDIAN_MODE_BAR1_SHIFT       0
++#define SPECIFIC_ENDIAN_MODE_BAR1_MASK        (0x3 << SPECIFIC_ENDIAN_MODE_BAR1_SHIFT)
++#define SPECIFIC_ENDIAN_MODE_BAR2_SHIFT       2
++#define SPECIFIC_ENDIAN_MODE_BAR2_MASK        (0x3 << SPECIFIC_ENDIAN_MODE_BAR1_SHIFT)
++#define SPECIFIC_ENDIAN_MODE_BAR3_SHIFT       4
++#define SPECIFIC_ENDIAN_MODE_BAR3_MASK        (0x3 << SPECIFIC_ENDIAN_MODE_BAR1_SHIFT)
++#define SPECIFIC_ENDIAN_MODE_WORD_ALIGN       0
++#define SPECIFIC_ENDIAN_MODE_HALFWORD_ALIGN 1
++#define SPECIFIC_ENDIAN_MODE_BYTE_ALIGN       2
++
+ #define PCIE_CONFIG2_REG              0x408
+ #define CONFIG2_BAR1_SIZE_EN          1
+ #define CONFIG2_BAR1_SIZE_MASK                0xf
+@@ -1706,7 +1717,54 @@
+ #define PCIE_RC_INT_C                 (1 << 2)
+ #define PCIE_RC_INT_D                 (1 << 3)
+-#define PCIE_DEVICE_OFFSET            0x8000
++#define PCIE_CPU_2_PCIE_MEM_WIN0_LO_REG       0x400c
++#define C2P_MEM_WIN_ENDIAN_MODE_MASK  0x3
++#define C2P_MEM_WIN_ENDIAN_NO_SWAP    0
++#define C2P_MEM_WIN_ENDIAN_HALF_WORD_SWAP 1
++#define C2P_MEM_WIN_ENDIAN_HALF_BYTE_SWAP 2
++#define C2P_MEM_WIN_BASE_ADDR_SHIFT   20
++#define C2P_MEM_WIN_BASE_ADDR_MASK    (0xfff << C2P_MEM_WIN_BASE_ADDR_SHIFT)
++
++#define PCIE_RC_BAR1_CONFIG_LO_REG    0x402c
++#define RC_BAR_CFG_LO_SIZE_256MB      0xd
++#define RC_BAR_CFG_LO_MATCH_ADDR_SHIFT        20
++#define RC_BAR_CFG_LO_MATCH_ADDR_MASK (0xfff << RC_BAR_CFG_LO_MATCH_ADDR_SHIFT)
++
++#define PCIE_CPU_2_PCIE_MEM_WIN0_BASELIMIT_REG 0x4070
++#define C2P_BASELIMIT_LIMIT_SHIFT     20
++#define C2P_BASELIMIT_LIMIT_MASK      (0xfff << C2P_BASELIMIT_LIMIT_SHIFT)
++#define C2P_BASELIMIT_BASE_SHIFT      4
++#define C2P_BASELIMIT_BASE_MASK               (0xfff << C2P_BASELIMIT_BASE_SHIFT)
++
++#define PCIE_UBUS_BAR1_CFG_REMAP_REG  0x4088
++#define BAR1_CFG_REMAP_OFFSET_SHIFT   20
++#define BAR1_CFG_REMAP_OFFSET_MASK    (0xfff << BAR1_CFG_REMAP_OFFSET_SHIFT)
++#define BAR1_CFG_REMAP_ACCESS_EN      1
++
++#define PCIE_HARD_DEBUG_REG           0x4204
++#define HARD_DEBUG_SERDES_IDDQ                (1 << 23)
++
++#define PCIE_CPU_INT1_MASK_CLEAR_REG  0x830c
++#define CPU_INT_PCIE_ERR_ATTN_CPU     (1 << 0)
++#define CPU_INT_PCIE_INTA             (1 << 1)
++#define CPU_INT_PCIE_INTB             (1 << 2)
++#define CPU_INT_PCIE_INTC             (1 << 3)
++#define CPU_INT_PCIE_INTD             (1 << 4)
++#define CPU_INT_PCIE_INTR             (1 << 5)
++#define CPU_INT_PCIE_NMI              (1 << 6)
++#define CPU_INT_PCIE_UBUS             (1 << 7)
++#define CPU_INT_IPI                   (1 << 8)
++
++#define PCIE_EXT_CFG_INDEX_REG                0x8400
++#define EXT_CFG_FUNC_NUM_SHIFT                12
++#define EXT_CFG_FUNC_NUM_MASK         (0x7 << EXT_CFG_FUNC_NUM_SHIFT)
++#define EXT_CFG_DEV_NUM_SHIFT         15
++#define EXT_CFG_DEV_NUM_MASK          (0xf << EXT_CFG_DEV_NUM_SHIFT)
++#define EXT_CFG_BUS_NUM_SHIFT         20
++#define EXT_CFG_BUS_NUM_MASK          (0xff << EXT_CFG_BUS_NUM_SHIFT)
++
++#define PCIE_DEVICE_OFFSET_6318               0x9000
++#define PCIE_DEVICE_OFFSET_6328               0x8000
+ /*************************************************************************
+  * _REG relative to RSET_OTP
+--- a/arch/mips/pci/ops-bcm63xx.c
++++ b/arch/mips/pci/ops-bcm63xx.c
+@@ -489,8 +489,12 @@ static int bcm63xx_pcie_read(struct pci_
+       if (!bcm63xx_pcie_can_access(bus, devfn))
+               return PCIBIOS_DEVICE_NOT_FOUND;
+-      if (bus->number == PCIE_BUS_DEVICE)
+-              reg += PCIE_DEVICE_OFFSET;
++      if (bus->number == PCIE_BUS_DEVICE) {
++              if (BCMCPU_IS_6318())
++                      reg += PCIE_DEVICE_OFFSET_6318;
++              else
++                      reg += PCIE_DEVICE_OFFSET_6328;
++      }
+       data = bcm_pcie_readl(reg);
+@@ -509,8 +513,12 @@ static int bcm63xx_pcie_write(struct pci
+       if (!bcm63xx_pcie_can_access(bus, devfn))
+               return PCIBIOS_DEVICE_NOT_FOUND;
+-      if (bus->number == PCIE_BUS_DEVICE)
+-              reg += PCIE_DEVICE_OFFSET;
++      if (bus->number == PCIE_BUS_DEVICE) {
++              if (BCMCPU_IS_6318())
++                      reg += PCIE_DEVICE_OFFSET_6318;
++              else
++                      reg += PCIE_DEVICE_OFFSET_6328;
++      }
+       data = bcm_pcie_readl(reg);
+--- a/arch/mips/pci/pci-bcm63xx.c
++++ b/arch/mips/pci/pci-bcm63xx.c
+@@ -118,7 +118,7 @@ static void bcm63xx_int_cfg_writel(u32 v
+ void __iomem *pci_iospace_start;
+-static void __init bcm63xx_reset_pcie(void)
++static void __init bcm63xx_reset_pcie_gen1(void)
+ {
+       u32 val;
+       u32 reg;
+@@ -152,20 +152,32 @@ static void __init bcm63xx_reset_pcie(vo
+       mdelay(200);
+ }
+-static struct clk *pcie_clk;
+-
+-static int __init bcm63xx_register_pcie(void)
++static void __init bcm63xx_reset_pcie_gen2(void)
+ {
+       u32 val;
+-      /* enable clock */
+-      pcie_clk = clk_get(NULL, "pcie");
+-      if (IS_ERR_OR_NULL(pcie_clk))
+-              return -ENODEV;
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_HARD, 0);
+-      clk_prepare_enable(pcie_clk);
++      /* reset the PCIe core */
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE, 1);
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_EXT, 1);
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_CORE, 1);
++      mdelay(10);
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_EXT, 0);
++      mdelay(10);
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE, 0);
++      mdelay(10);
++      val = bcm_pcie_readl(PCIE_HARD_DEBUG_REG);
++      val &= ~HARD_DEBUG_SERDES_IDDQ;
++      bcm_pcie_writel(val, PCIE_HARD_DEBUG_REG);
++      mdelay(10);
++      bcm63xx_core_set_reset(BCM63XX_RESET_PCIE_CORE, 0);
++      mdelay(200);
++}
+-      bcm63xx_reset_pcie();
++static void __init bcm63xx_init_pcie_gen1(void)
++{
++      u32 val;
+       /* configure the PCIe bridge */
+       val = bcm_pcie_readl(PCIE_BRIDGE_OPT1_REG);
+@@ -190,6 +202,65 @@ static int __init bcm63xx_register_pcie(
+       val |= OPT2_CFG_TYPE1_BD_SEL;
+       bcm_pcie_writel(val, PCIE_BRIDGE_OPT2_REG);
++      /* set bar0 to little endian */
++      val = (bcm_pcie_mem_resource.start >> 20) << BASEMASK_BASE_SHIFT;
++      val |= (bcm_pcie_mem_resource.end >> 20) << BASEMASK_MASK_SHIFT;
++      val |= BASEMASK_REMAP_EN;
++      bcm_pcie_writel(val, PCIE_BRIDGE_BAR0_BASEMASK_REG);
++
++      val = (bcm_pcie_mem_resource.start >> 20) << REBASE_ADDR_BASE_SHIFT;
++      bcm_pcie_writel(val, PCIE_BRIDGE_BAR0_REBASE_ADDR_REG);
++}
++
++static void __init bcm63xx_init_pcie_gen2(void)
++{
++      u32 val;
++
++      bcm_pcie_writel(CPU_INT_PCIE_INTA | CPU_INT_PCIE_INTB |
++                      CPU_INT_PCIE_INTC | CPU_INT_PCIE_INTD,
++                      PCIE_CPU_INT1_MASK_CLEAR_REG);
++
++      val = bcm_pcie_mem_resource.end & C2P_BASELIMIT_LIMIT_MASK;
++      val |= (bcm_pcie_mem_resource.start >> C2P_BASELIMIT_LIMIT_SHIFT) <<
++             C2P_BASELIMIT_BASE_SHIFT;
++
++      bcm_pcie_writel(val, PCIE_CPU_2_PCIE_MEM_WIN0_BASELIMIT_REG);
++
++      /* set bar0 to little endian */
++      val = bcm_pcie_readl(PCIE_CPU_2_PCIE_MEM_WIN0_LO_REG);
++      val |= bcm_pcie_mem_resource.start & C2P_MEM_WIN_BASE_ADDR_MASK;
++      val |= C2P_MEM_WIN_ENDIAN_HALF_BYTE_SWAP;
++      bcm_pcie_writel(val, PCIE_CPU_2_PCIE_MEM_WIN0_LO_REG);
++
++      bcm_pcie_writel(SPECIFIC_ENDIAN_MODE_BYTE_ALIGN, PCIE_SPECIFIC_REG);
++      bcm_pcie_writel(RC_BAR_CFG_LO_SIZE_256MB, PCIE_RC_BAR1_CONFIG_LO_REG);
++      bcm_pcie_writel(BAR1_CFG_REMAP_ACCESS_EN, PCIE_UBUS_BAR1_CFG_REMAP_REG);
++
++      bcm_pcie_writel(PCIE_BUS_DEVICE << EXT_CFG_BUS_NUM_SHIFT,
++                      PCIE_EXT_CFG_INDEX_REG);
++}
++
++static struct clk *pcie_clk;
++
++static int __init bcm63xx_register_pcie(void)
++{
++      u32 val;
++
++      /* enable clock */
++      pcie_clk = clk_get(NULL, "pcie");
++      if (IS_ERR_OR_NULL(pcie_clk))
++              return -ENODEV;
++
++      clk_prepare_enable(pcie_clk);
++
++      if (BCMCPU_IS_6328() || BCMCPU_IS_6362() || BCMCPU_IS_63268()) {
++              bcm63xx_reset_pcie_gen1();
++              bcm63xx_init_pcie_gen1();
++      } else {
++              bcm63xx_reset_pcie_gen2();
++              bcm63xx_init_pcie_gen2();
++      }
++
+       /* setup class code as bridge */
+       val = bcm_pcie_readl(PCIE_IDVAL3_REG);
+       val &= ~IDVAL3_CLASS_CODE_MASK;
+@@ -201,15 +272,6 @@ static int __init bcm63xx_register_pcie(
+       val &= ~CONFIG2_BAR1_SIZE_MASK;
+       bcm_pcie_writel(val, PCIE_CONFIG2_REG);
+-      /* set bar0 to little endian */
+-      val = (bcm_pcie_mem_resource.start >> 20) << BASEMASK_BASE_SHIFT;
+-      val |= (bcm_pcie_mem_resource.end >> 20) << BASEMASK_MASK_SHIFT;
+-      val |= BASEMASK_REMAP_EN;
+-      bcm_pcie_writel(val, PCIE_BRIDGE_BAR0_BASEMASK_REG);
+-
+-      val = (bcm_pcie_mem_resource.start >> 20) << REBASE_ADDR_BASE_SHIFT;
+-      bcm_pcie_writel(val, PCIE_BRIDGE_BAR0_REBASE_ADDR_REG);
+-
+       register_pci_controller(&bcm63xx_pcie_controller);
+       return 0;
+@@ -341,7 +403,10 @@ static int __init bcm63xx_pci_init(void)
+       if (!bcm63xx_pci_enabled)
+               return -ENODEV;
+-      if (BCMCPU_IS_6328() || BCMCPU_IS_6362()) {
++      if (BCMCPU_IS_6318()) {
++              bcm_pcie_mem_resource.start = BCM_PCIE_MEM_BASE_PA_6318;
++              bcm_pcie_mem_resource.end = BCM_PCIE_MEM_END_PA_6318;
++      } if (BCMCPU_IS_6328() || BCMCPU_IS_6362()) {
+               bcm_pcie_mem_resource.start = BCM_PCIE_MEM_BASE_PA_6328;
+               bcm_pcie_mem_resource.end = BCM_PCIE_MEM_END_PA_6328;
+       } else if (BCMCPU_IS_63268()) {
+@@ -350,6 +415,7 @@ static int __init bcm63xx_pci_init(void)
+       }
+       switch (bcm63xx_get_cpu_id()) {
++      case BCM6318_CPU_ID:
+       case BCM6328_CPU_ID:
+       case BCM6362_CPU_ID:
+       case BCM63268_CPU_ID:
index c84af56..6c0c1f4 100644 (file)
@@ -11,7 +11,7 @@
        bcm_gpio_writel(val, GPIO_MODE_REG);
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
-@@ -695,6 +695,8 @@
+@@ -767,6 +767,8 @@
  #define GPIO_MODE_6358_EXTRA_SPI_SS   (1 << 7)
  #define GPIO_MODE_6358_SERIAL_LED     (1 << 10)
  #define GPIO_MODE_6358_UTOPIA         (1 << 12)
index 0d69d98..e7b3a40 100644 (file)
@@ -10,7 +10,7 @@ Subject: [PATCH 54/81] bcm63xx_enet: enable rgmii clock on external ports
 
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
-@@ -1005,6 +1005,19 @@
+@@ -1077,6 +1077,19 @@
  #define ENETSW_PORTOV_FDX_MASK                (1 << 1)
  #define ENETSW_PORTOV_LINKUP_MASK     (1 << 0)
  
index 1c2f1b5..1c99f28 100644 (file)
@@ -46,8 +46,12 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
  static int __init bcm63xx_detect_flash_type(void)
  {
        u32 val;
-@@ -62,6 +80,11 @@ static int __init bcm63xx_detect_flash_t
+@@ -62,9 +80,15 @@ static int __init bcm63xx_detect_flash_t
        switch (bcm63xx_get_cpu_id()) {
+       case BCM6318_CPU_ID:
+               /* only support serial flash */
++              bcm63xx_spi_flash_info[0].max_speed_hz = 62500000;
+               return BCM63XX_FLASH_TYPE_SERIAL;
        case BCM6328_CPU_ID:
                val = bcm_misc_readl(MISC_STRAPBUS_6328_REG);
 +              if (val & STRAPBUS_6328_HSSPI_CLK_FAST)
@@ -58,7 +62,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
                if (val & STRAPBUS_6328_BOOT_SEL_SERIAL)
                        return BCM63XX_FLASH_TYPE_SERIAL;
                else
-@@ -80,12 +103,20 @@ static int __init bcm63xx_detect_flash_t
+@@ -83,12 +107,20 @@ static int __init bcm63xx_detect_flash_t
                        return BCM63XX_FLASH_TYPE_SERIAL;
        case BCM6362_CPU_ID:
                val = bcm_misc_readl(MISC_STRAPBUS_6362_REG);
@@ -79,7 +83,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
                switch (val & STRAPBUS_6368_BOOT_SEL_MASK) {
                case STRAPBUS_6368_BOOT_SEL_NAND:
                        return BCM63XX_FLASH_TYPE_NAND;
-@@ -96,6 +127,11 @@ static int __init bcm63xx_detect_flash_t
+@@ -99,6 +131,11 @@ static int __init bcm63xx_detect_flash_t
                }
        case BCM63268_CPU_ID:
                val = bcm_misc_readl(MISC_STRAPBUS_63268_REG);
@@ -91,13 +95,14 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
                if (val & STRAPBUS_63268_BOOT_SEL_SERIAL)
                        return BCM63XX_FLASH_TYPE_SERIAL;
                else
-@@ -123,8 +159,14 @@ int __init bcm63xx_flash_register(void)
+@@ -126,8 +163,15 @@ int __init bcm63xx_flash_register(void)
  
                return platform_device_register(&mtd_dev);
        case BCM63XX_FLASH_TYPE_SERIAL:
 -              pr_warn("unsupported serial flash detected\n");
 -              return -ENODEV;
-+              if (BCMCPU_IS_6328() || BCMCPU_IS_6362() || BCMCPU_IS_63268())
++              if (BCMCPU_IS_6318() || BCMCPU_IS_6328() || BCMCPU_IS_6362() ||
++                  BCMCPU_IS_63268())
 +                      bcm63xx_spi_flash_info[0].bus_num = 1;
 +
 +              if (BCMCPU_IS_6358() || BCMCPU_IS_6368())
@@ -110,7 +115,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
                return -ENODEV;
 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
-@@ -746,6 +746,7 @@
+@@ -818,6 +818,7 @@
  #define GPIO_STRAPBUS_REG             0x40
  #define STRAPBUS_6358_BOOT_SEL_PARALLEL (1 << 1)
  #define STRAPBUS_6358_BOOT_SEL_SERIAL (0 << 1)
@@ -118,7 +123,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
  #define STRAPBUS_6368_BOOT_SEL_MASK   0x3
  #define STRAPBUS_6368_BOOT_SEL_NAND   0
  #define STRAPBUS_6368_BOOT_SEL_SERIAL 1
-@@ -1594,6 +1595,7 @@
+@@ -1667,6 +1668,7 @@
  #define STRAPBUS_63268_FCVO_MASK      (0xf << STRAPBUS_63268_FCVO_SHIFT)
  
  #define MISC_STRAPBUS_6328_REG                0x240
index 18f6033..31071f9 100644 (file)
@@ -19,7 +19,17 @@ Subject: [PATCH 38/59] MIPS: BCM63XX: store the flash type in global variable
  static struct mtd_partition mtd_partitions[] = {
        {
                .name           = "cfe",
-@@ -86,21 +88,24 @@ static int __init bcm63xx_detect_flash_t
+@@ -81,7 +83,8 @@ static int __init bcm63xx_detect_flash_t
+       case BCM6318_CPU_ID:
+               /* only support serial flash */
+               bcm63xx_spi_flash_info[0].max_speed_hz = 62500000;
+-              return BCM63XX_FLASH_TYPE_SERIAL;
++              bcm63xx_attached_flash = BCM63XX_FLASH_TYPE_SERIAL;
++              break;
+       case BCM6328_CPU_ID:
+               val = bcm_misc_readl(MISC_STRAPBUS_6328_REG);
+               if (val & STRAPBUS_6328_HSSPI_CLK_FAST)
+@@ -90,21 +93,24 @@ static int __init bcm63xx_detect_flash_t
                        bcm63xx_spi_flash_info[0].max_speed_hz = 16666667;
  
                if (val & STRAPBUS_6328_BOOT_SEL_SERIAL)
@@ -49,7 +59,7 @@ Subject: [PATCH 38/59] MIPS: BCM63XX: store the flash type in global variable
        case BCM6362_CPU_ID:
                val = bcm_misc_readl(MISC_STRAPBUS_6362_REG);
                if (val & STRAPBUS_6362_HSSPI_CLK_FAST)
-@@ -109,9 +114,10 @@ static int __init bcm63xx_detect_flash_t
+@@ -113,9 +119,10 @@ static int __init bcm63xx_detect_flash_t
                        bcm63xx_spi_flash_info[0].max_speed_hz = 20000000;
  
                if (val & STRAPBUS_6362_BOOT_SEL_SERIAL)
@@ -62,7 +72,7 @@ Subject: [PATCH 38/59] MIPS: BCM63XX: store the flash type in global variable
        case BCM6368_CPU_ID:
                val = bcm_gpio_readl(GPIO_STRAPBUS_REG);
                if (val & STRAPBUS_6368_SPI_CLK_FAST)
-@@ -119,11 +125,16 @@ static int __init bcm63xx_detect_flash_t
+@@ -123,11 +130,16 @@ static int __init bcm63xx_detect_flash_t
  
                switch (val & STRAPBUS_6368_BOOT_SEL_MASK) {
                case STRAPBUS_6368_BOOT_SEL_NAND:
@@ -82,7 +92,7 @@ Subject: [PATCH 38/59] MIPS: BCM63XX: store the flash type in global variable
                }
        case BCM63268_CPU_ID:
                val = bcm_misc_readl(MISC_STRAPBUS_63268_REG);
-@@ -133,22 +144,24 @@ static int __init bcm63xx_detect_flash_t
+@@ -137,22 +149,24 @@ static int __init bcm63xx_detect_flash_t
                        bcm63xx_spi_flash_info[0].max_speed_hz = 20000000;
  
                if (val & STRAPBUS_63268_BOOT_SEL_SERIAL)
@@ -112,7 +122,7 @@ Subject: [PATCH 38/59] MIPS: BCM63XX: store the flash type in global variable
        case BCM63XX_FLASH_TYPE_PARALLEL:
                /* read base address of boot chip select (0) */
                val = bcm_mpi_readl(MPI_CSBASE_REG(0));
-@@ -172,7 +185,7 @@ int __init bcm63xx_flash_register(void)
+@@ -177,7 +191,7 @@ int __init bcm63xx_flash_register(void)
                return -ENODEV;
        default:
                pr_err("flash detection failed for BCM%x: %d\n",
index 6f5b0ce..4b07060 100644 (file)
@@ -46,7 +46,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
  };
  
  static struct spi_board_info bcm63xx_spi_flash_info[] = {
-@@ -154,10 +158,13 @@ static int __init bcm63xx_detect_flash_t
+@@ -159,10 +163,13 @@ static int __init bcm63xx_detect_flash_t
        return 0;
  }
  
index 851ab28..68bab8f 100644 (file)
@@ -61,7 +61,7 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
  }
 --- a/arch/mips/bcm63xx/dev-flash.c
 +++ b/arch/mips/bcm63xx/dev-flash.c
-@@ -158,7 +158,7 @@ static int __init bcm63xx_detect_flash_t
+@@ -163,7 +163,7 @@ static int __init bcm63xx_detect_flash_t
        return 0;
  }
  
index 2dfe772..05c366f 100644 (file)
  #include <bcm63xx_cpu.h>
  #include <bcm63xx_dev_flash.h>
  #include <bcm63xx_dev_hsspi.h>
-@@ -174,6 +175,13 @@ int __init bcm63xx_flash_register(int nu
+@@ -179,6 +180,13 @@ int __init bcm63xx_flash_register(int nu
                val = bcm_mpi_readl(MPI_CSBASE_REG(0));
                val &= MPI_CSBASE_BASE_MASK;