kernel: update to version 4.4.14
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 26 Jun 2016 12:45:12 +0000 (14:45 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 26 Jun 2016 16:20:37 +0000 (18:20 +0200)
Changelog: https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.14

Some manual changes to target/linux/generic/patches-4.4/610-
netfilter_match_bypass_default_checks.patch were needed.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
47 files changed:
include/kernel-version.mk
target/linux/ar71xx/patches-4.4/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
target/linux/brcm2708/patches-4.4/0027-Main-bcm2708-bcm2709-linux-port.patch
target/linux/brcm47xx/patches-4.4/159-cpu_fixes.patch
target/linux/brcm47xx/patches-4.4/160-kmap_coherent.patch
target/linux/generic/patches-4.4/046-ubifs-silence-error-output-if-MS_SILENT-is-set.patch
target/linux/generic/patches-4.4/271-uapi-libc-compat.h-do-not-rely-on-__GLIBC__.patch
target/linux/generic/patches-4.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch
target/linux/generic/patches-4.4/531-debloat_lzma.patch
target/linux/generic/patches-4.4/610-netfilter_match_bypass_default_checks.patch
target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch
target/linux/generic/patches-4.4/834-ledtrig-libata.patch
target/linux/ipq806x/patches-4.4/022-add-db149-dts.patch
target/linux/ipq806x/patches-4.4/023-ARM-dts-ipq806x-Disable-i2c-device-on-gsbi4.patch
target/linux/ipq806x/patches-4.4/037-mtd-add-SMEM-parser-for-QCOM-platforms.patch
target/linux/ipq806x/patches-4.4/100-usb-phy-Add-Qualcomm-DWC3-HS-SS-PHY-drivers.patch
target/linux/ipq806x/patches-4.4/111-PCI-qcom-Add-Qualcomm-PCIe-controller-driver.patch
target/linux/ipq806x/patches-4.4/133-ARM-Add-Krait-L2-register-accessor-functions.patch
target/linux/ipq806x/patches-4.4/134-clk-mux-Split-out-register-accessors-for-reuse.patch
target/linux/ipq806x/patches-4.4/135-clk-Avoid-sending-high-rates-to-downstream-clocks-du.patch
target/linux/ipq806x/patches-4.4/136-clk-Add-safe-switch-hook.patch
target/linux/ipq806x/patches-4.4/137-clk-qcom-Add-support-for-High-Frequency-PLLs-HFPLLs.patch
target/linux/ipq806x/patches-4.4/138-clk-qcom-Add-HFPLL-driver.patch
target/linux/ipq806x/patches-4.4/139-clk-qcom-Add-IPQ806X-s-HFPLLs.patch
target/linux/ipq806x/patches-4.4/140-clk-qcom-Add-support-for-Krait-clocks.patch
target/linux/ipq806x/patches-4.4/141-clk-qcom-Add-KPSS-ACC-GCC-driver.patch
target/linux/ipq806x/patches-4.4/142-clk-qcom-Add-Krait-clock-controller-driver.patch
target/linux/ipq806x/patches-4.4/143-cpufreq-Add-module-to-register-cpufreq-on-Krait-CPUs.patch
target/linux/ipq806x/patches-4.4/145-cpufreq-Add-a-cpufreq-krait-based-on-cpufre.patch
target/linux/ipq806x/patches-4.4/156-dmaengine-Add-ADM-driver.patch
target/linux/ipq806x/patches-4.4/161-mtd-nand-Create-a-BBT-flag-to-access-bad-block-markers-in-raw-mode.patch
target/linux/ipq806x/patches-4.4/162-mtd-nand-Qualcomm-NAND-controller-driver.patch
target/linux/ipq806x/patches-4.4/168-ARM-qcom-add-smb208-DT.patch
target/linux/ipq806x/patches-4.4/300-arch-arm-force-ZRELADDR-on-arch-qcom.patch
target/linux/ipq806x/patches-4.4/400-dsa-add-qca.patch
target/linux/ipq806x/patches-4.4/708-ARM-dts-qcom-add-gmac-nodes-to-ipq806x-platforms.patch
target/linux/ipq806x/patches-4.4/709-spi-qup-Fix-fifo-and-dma-support-for-IPQ806x.patch
target/linux/ipq806x/patches-4.4/710-watchdog-qcom-set-WDT_BARK_TIME-register-offset-to-o.patch
target/linux/ipq806x/patches-4.4/711-stmmac-fix-ipq806x-DMA-configuration.patch
target/linux/ipq806x/patches-4.4/800-devicetree.patch
target/linux/ipq806x/patches-4.4/996-ATAG_DTB_COMPAT_CMDLINE_MANGLE.patch
target/linux/lantiq/patches-4.4/0028-NET-lantiq-various-etop-fixes.patch
target/linux/lantiq/patches-4.4/0160-owrt-lantiq-multiple-flash.patch
target/linux/mediatek/patches-4.4/0103-nand_fixes.patch
target/linux/octeon/patches-4.4/170-cisco-hack.patch
target/linux/oxnas/patches-4.4/300-introduce-oxnas-platform.patch
target/linux/ramips/patches-4.4/0720-arch-mips-ralink-add-i2c-clocks.patch

index fe3afde8d1431f36b0f8428f7ad62df0f65ca00c..5304c652f6967b1261008ec29bf5bac6a861524c 100644 (file)
@@ -4,11 +4,11 @@ LINUX_RELEASE?=1
 
 LINUX_VERSION-3.18 = .29
 LINUX_VERSION-4.1 = .20
 
 LINUX_VERSION-3.18 = .29
 LINUX_VERSION-4.1 = .20
-LINUX_VERSION-4.4 = .13
+LINUX_VERSION-4.4 = .14
 
 LINUX_KERNEL_MD5SUM-3.18.29 = b25737a0bc98e80d12200de93f239c28
 LINUX_KERNEL_MD5SUM-4.1.20 = 075c38a3a23ca5bc80437b13606df00a
 
 LINUX_KERNEL_MD5SUM-3.18.29 = b25737a0bc98e80d12200de93f239c28
 LINUX_KERNEL_MD5SUM-4.1.20 = 075c38a3a23ca5bc80437b13606df00a
-LINUX_KERNEL_MD5SUM-4.4.13 = d70b6959d8db61bcea7070c089aace9b
+LINUX_KERNEL_MD5SUM-4.4.14 = 59e99c3bf5d495f1f95d26257962ca3e
 
 ifdef KERNEL_PATCHVER
   LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
 
 ifdef KERNEL_PATCHVER
   LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
index 2bfd58d4e8d179538aa6a0431a21ce585e0e7e54..b33db4dd0d1c6ba8751de2f52128325ba44993c6 100644 (file)
@@ -2,7 +2,7 @@
 +++ b/arch/mips/ath79/Kconfig
 @@ -68,12 +68,16 @@ config ATH79_MACH_PB44
          Atheros PB44 reference board.
 +++ b/arch/mips/ath79/Kconfig
 @@ -68,12 +68,16 @@ config ATH79_MACH_PB44
          Atheros PB44 reference board.
-
  config ATH79_MACH_UBNT_XM
 -      bool "Ubiquiti Networks XM (rev 1.0) board"
 +      bool "Ubiquiti Networks XM/UniFi boards"
  config ATH79_MACH_UBNT_XM
 -      bool "Ubiquiti Networks XM (rev 1.0) board"
 +      bool "Ubiquiti Networks XM/UniFi boards"
index 249716c2b645f9f899579a0c457ba2a75275ef58..47bf84cb80c09382302719671399d0cfea277730 100644 (file)
@@ -75,7 +75,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -317,6 +317,52 @@ choice
+@@ -318,6 +318,52 @@ choice
        default ARCH_VERSATILE if !MMU
        default ARCH_MULTIPLATFORM if MMU
  
        default ARCH_VERSATILE if !MMU
        default ARCH_MULTIPLATFORM if MMU
  
@@ -128,7 +128,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
  config ARCH_MULTIPLATFORM
        bool "Allow multiple platforms to be selected"
        depends on MMU
  config ARCH_MULTIPLATFORM
        bool "Allow multiple platforms to be selected"
        depends on MMU
-@@ -808,6 +854,9 @@ config ARCH_VIRT
+@@ -809,6 +855,9 @@ config ARCH_VIRT
  # Kconfigs may be included either alphabetically (according to the
  # plat- suffix) or along side the corresponding mach-* source.
  #
  # Kconfigs may be included either alphabetically (according to the
  # plat- suffix) or along side the corresponding mach-* source.
  #
index 50df04f1e0d4e8f91085842972314e27853ff3ef..1a3e0a60f9fcf6186898e7d6758de5b937a6f54e 100644 (file)
 +int bcm4710 = 0;
 +
  /*
 +int bcm4710 = 0;
 +
  /*
-  * Special Variant of smp_call_function for use by cache functions:
+  * Bits describing what cache ops an IPI callback function may perform.
   *
   *
-@@ -157,6 +160,9 @@ static void r4k_blast_dcache_user_page_s
+@@ -202,6 +205,9 @@ static void r4k_blast_dcache_user_page_s
  {
        unsigned long  dc_lsize = cpu_dcache_line_size();
  
  {
        unsigned long  dc_lsize = cpu_dcache_line_size();
  
        if (dc_lsize == 0)
                r4k_blast_dcache_user_page = (void *)cache_noop;
        else if (dc_lsize == 16)
        if (dc_lsize == 0)
                r4k_blast_dcache_user_page = (void *)cache_noop;
        else if (dc_lsize == 16)
-@@ -175,6 +181,9 @@ static void r4k_blast_dcache_page_indexe
+@@ -220,6 +226,9 @@ static void r4k_blast_dcache_page_indexe
  {
        unsigned long dc_lsize = cpu_dcache_line_size();
  
  {
        unsigned long dc_lsize = cpu_dcache_line_size();
  
        if (dc_lsize == 0)
                r4k_blast_dcache_page_indexed = (void *)cache_noop;
        else if (dc_lsize == 16)
        if (dc_lsize == 0)
                r4k_blast_dcache_page_indexed = (void *)cache_noop;
        else if (dc_lsize == 16)
-@@ -194,6 +203,9 @@ static void r4k_blast_dcache_setup(void)
+@@ -239,6 +248,9 @@ static void r4k_blast_dcache_setup(void)
  {
        unsigned long dc_lsize = cpu_dcache_line_size();
  
  {
        unsigned long dc_lsize = cpu_dcache_line_size();
  
        if (dc_lsize == 0)
                r4k_blast_dcache = (void *)cache_noop;
        else if (dc_lsize == 16)
        if (dc_lsize == 0)
                r4k_blast_dcache = (void *)cache_noop;
        else if (dc_lsize == 16)
-@@ -793,6 +805,8 @@ static void local_r4k_flush_cache_sigtra
+@@ -880,6 +892,8 @@ static void local_r4k_flush_cache_sigtra
        unsigned long addr = (unsigned long) arg;
  
        R4600_HIT_CACHEOP_WAR_IMPL;
        unsigned long addr = (unsigned long) arg;
  
        R4600_HIT_CACHEOP_WAR_IMPL;
        if (dc_lsize)
                protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
        if (!cpu_icache_snoops_remote_store && scache_size)
        if (dc_lsize)
                protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
        if (!cpu_icache_snoops_remote_store && scache_size)
-@@ -1602,6 +1616,17 @@ static void coherency_setup(void)
+@@ -1704,6 +1718,17 @@ static void coherency_setup(void)
         * silly idea of putting something else there ...
         */
        switch (current_cpu_type()) {
         * silly idea of putting something else there ...
         */
        switch (current_cpu_type()) {
        case CPU_R4000PC:
        case CPU_R4000SC:
        case CPU_R4000MC:
        case CPU_R4000PC:
        case CPU_R4000SC:
        case CPU_R4000MC:
-@@ -1648,6 +1673,15 @@ void r4k_cache_init(void)
+@@ -1750,6 +1775,15 @@ void r4k_cache_init(void)
        extern void build_copy_page(void);
        struct cpuinfo_mips *c = &current_cpu_data;
  
        extern void build_copy_page(void);
        struct cpuinfo_mips *c = &current_cpu_data;
  
        probe_pcache();
        setup_scache();
  
        probe_pcache();
        setup_scache();
  
-@@ -1717,7 +1751,15 @@ void r4k_cache_init(void)
+@@ -1819,7 +1853,15 @@ void r4k_cache_init(void)
         */
        local_r4k___flush_cache_all(NULL);
  
         */
        local_r4k___flush_cache_all(NULL);
  
index 3d65fdfd62847ee41effca9cc5445e6959a98610..af8c27a674cc7883cd9796c2c745649c26b864c8 100644 (file)
@@ -29,7 +29,7 @@ This fixes OpenWrt ticket #1485: https://dev.openwrt.org/ticket/1485
  #endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */
 --- a/arch/mips/mm/c-r4k.c
 +++ b/arch/mips/mm/c-r4k.c
  #endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */
 --- a/arch/mips/mm/c-r4k.c
 +++ b/arch/mips/mm/c-r4k.c
-@@ -600,7 +600,7 @@ static inline void local_r4k_flush_cache
+@@ -645,7 +645,7 @@ static inline void local_r4k_flush_cache
                 */
                map_coherent = (cpu_has_dc_aliases &&
                                page_mapped(page) && !Page_dcache_dirty(page));
                 */
                map_coherent = (cpu_has_dc_aliases &&
                                page_mapped(page) && !Page_dcache_dirty(page));
@@ -38,7 +38,7 @@ This fixes OpenWrt ticket #1485: https://dev.openwrt.org/ticket/1485
                        vaddr = kmap_coherent(page, addr);
                else
                        vaddr = kmap_atomic(page);
                        vaddr = kmap_coherent(page, addr);
                else
                        vaddr = kmap_atomic(page);
-@@ -625,7 +625,7 @@ static inline void local_r4k_flush_cache
+@@ -670,7 +670,7 @@ static inline void local_r4k_flush_cache
        }
  
        if (vaddr) {
        }
  
        if (vaddr) {
index 7c01d77a18385b574a31e1197078d818d4a2b91e..ee679fa7558070723d969df69e797c47b9417e99 100644 (file)
@@ -21,11 +21,9 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  fs/ubifs/super.c | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)
 
  fs/ubifs/super.c | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)
 
-diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
-index 7034995..736dd58 100644
 --- a/fs/ubifs/super.c
 +++ b/fs/ubifs/super.c
 --- a/fs/ubifs/super.c
 +++ b/fs/ubifs/super.c
-@@ -2108,8 +2108,9 @@ static struct dentry *ubifs_mount(struct file_system_type *fs_type, int flags,
+@@ -2107,8 +2107,9 @@ static struct dentry *ubifs_mount(struct
         */
        ubi = open_ubi(name, UBI_READONLY);
        if (IS_ERR(ubi)) {
         */
        ubi = open_ubi(name, UBI_READONLY);
        if (IS_ERR(ubi)) {
@@ -37,6 +35,3 @@ index 7034995..736dd58 100644
                return ERR_CAST(ubi);
        }
  
                return ERR_CAST(ubi);
        }
  
--- 
-2.8.3
-
index b8e6a3a88204fde259e10d84d4110e5b7c6ae20f..2a29535eeda0d19385000a2e91cb10eaa19d223b 100644 (file)
@@ -28,7 +28,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  
 -/* Coordinate with glibc net/if.h header. */
 +/* Coordinate with libc net/if.h header. */
  
 -/* Coordinate with glibc net/if.h header. */
 +/* Coordinate with libc net/if.h header. */
- #if defined(_NET_IF_H)
+ #if defined(_NET_IF_H) && defined(__USE_MISC)
  
 -/* GLIBC headers included first so don't define anything
 +/* LIBC headers included first so don't define anything
  
 -/* GLIBC headers included first so don't define anything
 +/* LIBC headers included first so don't define anything
index 4a056c8bb9dd34ae904602487758383ed267240c..a69d197e626644450930db1256b9e0522eefc653 100644 (file)
@@ -284,15 +284,15 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
 +      EXPORT(kexec_argv_buf)
 +      .skip           KEXEC_COMMAND_LINE_SIZE
 +      .size           kexec_argv_buf, KEXEC_COMMAND_LINE_SIZE
 +      EXPORT(kexec_argv_buf)
 +      .skip           KEXEC_COMMAND_LINE_SIZE
 +      .size           kexec_argv_buf, KEXEC_COMMAND_LINE_SIZE
++
++kexec_argv:
++      EXPORT(kexec_argv)
++      .skip           KEXEC_ARGV_SIZE
++      .size           kexec_argv, KEXEC_ARGV_SIZE
  
 -relocate_new_kernel_size:
 -      EXPORT(relocate_new_kernel_size)
 -      PTR             relocate_new_kernel_end - relocate_new_kernel
 -      .size           relocate_new_kernel_size, PTRSIZE
  
 -relocate_new_kernel_size:
 -      EXPORT(relocate_new_kernel_size)
 -      PTR             relocate_new_kernel_end - relocate_new_kernel
 -      .size           relocate_new_kernel_size, PTRSIZE
-+kexec_argv:
-+      EXPORT(kexec_argv)
-+      .skip           KEXEC_ARGV_SIZE
-+      .size           kexec_argv, KEXEC_ARGV_SIZE
-+
 +kexec_relocate_new_kernel_end:
 +      EXPORT(kexec_relocate_new_kernel_end)
 +kexec_relocate_new_kernel_end:
 +      EXPORT(kexec_relocate_new_kernel_end)
index bbf2b75304c46d79a7b15f418ab6825ae99962ba..aa3c49801636fef05b5bcc429ce31feccb43ef44 100644 (file)
  {
    UInt32 dicSize;
    Byte d;
  {
    UInt32 dicSize;
    Byte d;
-@@ -935,33 +883,11 @@ static SRes LzmaDec_AllocateProbs2(CLzma
+@@ -935,7 +883,7 @@ static SRes LzmaDec_AllocateProbs2(CLzma
    return SZ_OK;
  }
  
 -SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
    return SZ_OK;
  }
  
 -SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
--{
--  CLzmaProps propNew;
--  RINOK(LzmaProps_Decode(&propNew, props, propsSize));
--  RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
--  p->prop = propNew;
--  return SZ_OK;
--}
--
--SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
 +static SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
  {
    CLzmaProps propNew;
 +static SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
  {
    CLzmaProps propNew;
--  SizeT dicBufSize;
    RINOK(LzmaProps_Decode(&propNew, props, propsSize));
    RINOK(LzmaProps_Decode(&propNew, props, propsSize));
-   RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
+@@ -943,28 +891,6 @@ SRes LzmaDec_AllocateProbs(CLzmaDec *p,
+   p->prop = propNew;
+   return SZ_OK;
+ }
+-
+-SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc)
+-{
+-  CLzmaProps propNew;
+-  SizeT dicBufSize;
+-  RINOK(LzmaProps_Decode(&propNew, props, propsSize));
+-  RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
 -  dicBufSize = propNew.dicSize;
 -  if (p->dic == 0 || dicBufSize != p->dicBufSize)
 -  {
 -  dicBufSize = propNew.dicSize;
 -  if (p->dic == 0 || dicBufSize != p->dicBufSize)
 -  {
 -    }
 -  }
 -  p->dicBufSize = dicBufSize;
 -    }
 -  }
 -  p->dicBufSize = dicBufSize;
-   p->prop = propNew;
-   return SZ_OK;
- }
+-  p->prop = propNew;
+-  return SZ_OK;
+-}
+ SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
+     const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
 --- a/include/linux/lzma/LzmaEnc.h
 +++ b/include/linux/lzma/LzmaEnc.h
 @@ -31,9 +31,6 @@ typedef struct _CLzmaEncProps
 --- a/include/linux/lzma/LzmaEnc.h
 +++ b/include/linux/lzma/LzmaEnc.h
 @@ -31,9 +31,6 @@ typedef struct _CLzmaEncProps
index eccad944ea5baf9fed6fff34adc187aa81258964..ea9558fccfb44dacdf9accb38a9c962c81e06c3c 100644 (file)
  static bool
  ip_checkentry(const struct ipt_ip *ip)
  {
  static bool
  ip_checkentry(const struct ipt_ip *ip)
  {
-@@ -569,7 +595,7 @@ static void cleanup_match(struct xt_entr
- }
- static int
--check_entry(const struct ipt_entry *e, const char *name)
-+check_entry(struct ipt_entry *e, const char *name)
- {
-       const struct xt_entry_target *t;
-@@ -578,6 +604,8 @@ check_entry(const struct ipt_entry *e, c
-               return -EINVAL;
-       }
+@@ -664,6 +690,8 @@ find_check_entry(struct ipt_entry *e, st
+       struct xt_mtchk_param mtpar;
+       struct xt_entry_match *ematch;
  
 +      ip_checkdefault(&e->ip);
 +
  
 +      ip_checkdefault(&e->ip);
 +
-       if (e->target_offset + sizeof(struct xt_entry_target) >
-           e->next_offset)
-               return -EINVAL;
-@@ -944,6 +972,7 @@ copy_entries_to_user(unsigned int total_
+       e->counters.pcnt = xt_percpu_counter_alloc();
+       if (IS_ERR_VALUE(e->counters.pcnt))
+               return -ENOMEM;
+@@ -948,6 +976,7 @@ copy_entries_to_user(unsigned int total_
        const struct xt_table_info *private = table->private;
        int ret = 0;
        const void *loc_cpu_entry;
        const struct xt_table_info *private = table->private;
        int ret = 0;
        const void *loc_cpu_entry;
@@ -76,7 +67,7 @@
  
        counters = alloc_counters(table);
        if (IS_ERR(counters))
  
        counters = alloc_counters(table);
        if (IS_ERR(counters))
-@@ -970,6 +999,14 @@ copy_entries_to_user(unsigned int total_
+@@ -974,6 +1003,14 @@ copy_entries_to_user(unsigned int total_
                        ret = -EFAULT;
                        goto free_counters;
                }
                        ret = -EFAULT;
                        goto free_counters;
                }
index a6e974c5ad5ab8c7f4438d9160dba86f8e847f74..bab091262c86d7f66c03ccc7a45738cf19b61424 100644 (file)
@@ -382,6 +382,8 @@ Implement optinal multicast->unicast conversion for igmp snooping
  
 -              port = (unsigned long)lport > (unsigned long)rport ?
 -                     lport : rport;
  
 -              port = (unsigned long)lport > (unsigned long)rport ?
 -                     lport : rport;
+-
+-              prev = maybe_deliver(prev, port, skb, __packet_hook);
 +              if ((unsigned long)lport > (unsigned long)rport) {
 +                      port = lport;
 +                      addr = p->unicast ? p->eth_addr : NULL;
 +              if ((unsigned long)lport > (unsigned long)rport) {
 +                      port = lport;
 +                      addr = p->unicast ? p->eth_addr : NULL;
@@ -389,8 +391,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
 +                      port = rport;
 +                      addr = NULL;
 +              }
 +                      port = rport;
 +                      addr = NULL;
 +              }
--              prev = maybe_deliver(prev, port, skb, __packet_hook);
++
 +              if (addr)
 +                      prev = maybe_deliver_addr(prev, port, skb, addr,
 +                                                __packet_hook);
 +              if (addr)
 +                      prev = maybe_deliver_addr(prev, port, skb, addr,
 +                                                __packet_hook);
index 9a9203b1403b9fffcd397561a7c6ae91335bf77e..c60fc1a51510020f39aefedff9e7df333c46e994 100644 (file)
@@ -110,11 +110,11 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 +      for (i = 0; i < host->n_ports; i++) {
 +              if (unlikely(!host->ports[i]->ledtrig))
 +                      continue;
 +      for (i = 0; i < host->n_ports; i++) {
 +              if (unlikely(!host->ports[i]->ledtrig))
 +                      continue;
-+
 +              snprintf(host->ports[i]->ledtrig_name,
 +                      sizeof(host->ports[i]->ledtrig_name), "ata%u",
 +                      host->ports[i]->print_id);
 +              snprintf(host->ports[i]->ledtrig_name,
 +                      sizeof(host->ports[i]->ledtrig_name), "ata%u",
 +                      host->ports[i]->print_id);
++
 +              host->ports[i]->ledtrig->name = host->ports[i]->ledtrig_name;
 +
 +              if (led_trigger_register(host->ports[i]->ledtrig)) {
 +              host->ports[i]->ledtrig->name = host->ports[i]->ledtrig_name;
 +
 +              if (led_trigger_register(host->ports[i]->ledtrig)) {
index 4d3e827b51b16ece8682ac1a3609d8c54ffda2a0..0845d3f213a81d899e0d30c17b7b1be9c14be296 100644 (file)
@@ -15,7 +15,7 @@ Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -506,6 +506,7 @@
+@@ -506,6 +506,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \
        qcom-apq8084-ifc6540.dtb \
        qcom-apq8084-mtp.dtb \
        qcom-ipq8064-ap148.dtb \
        qcom-apq8084-ifc6540.dtb \
        qcom-apq8084-mtp.dtb \
        qcom-ipq8064-ap148.dtb \
index b8c527b6aee1051a7c3c861ac141918c90f165c9..705306d9f0481dd09a5872ae978cdf025ebea1a7 100644 (file)
@@ -23,7 +23,7 @@
                gsbi5: gsbi@1a200000 {
 --- a/drivers/clk/qcom/gcc-ipq806x.c
 +++ b/drivers/clk/qcom/gcc-ipq806x.c
                gsbi5: gsbi@1a200000 {
 --- a/drivers/clk/qcom/gcc-ipq806x.c
 +++ b/drivers/clk/qcom/gcc-ipq806x.c
-@@ -294,7 +294,7 @@
+@@ -294,7 +294,7 @@ static struct clk_rcg gsbi1_uart_src = {
                        .parent_names = gcc_pxo_pll8,
                        .num_parents = 2,
                        .ops = &clk_rcg_ops,
                        .parent_names = gcc_pxo_pll8,
                        .num_parents = 2,
                        .ops = &clk_rcg_ops,
@@ -32,7 +32,7 @@
                },
        },
  };
                },
        },
  };
-@@ -312,7 +312,7 @@
+@@ -312,7 +312,7 @@ static struct clk_branch gsbi1_uart_clk
                        },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
                        },
                        .num_parents = 1,
                        .ops = &clk_branch_ops,
@@ -41,7 +41,7 @@
                },
        },
  };
                },
        },
  };
-@@ -890,7 +890,7 @@
+@@ -890,7 +890,7 @@ static struct clk_branch gsbi1_h_clk = {
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi1_h_clk",
                        .ops = &clk_branch_ops,
                .hw.init = &(struct clk_init_data){
                        .name = "gsbi1_h_clk",
                        .ops = &clk_branch_ops,
index d80eb8605603a31a21bd5cef99b06a6238ec485e..7c0c8035652a9b7a89d4623e6689027c88b9ac41 100644 (file)
@@ -16,11 +16,9 @@ Signed-off-by: Ram Chandra Jangir <rjangi@codeaurora.org>
  3 files changed, 236 insertions(+)
  create mode 100644 drivers/mtd/qcom_smem_part.c
 
  3 files changed, 236 insertions(+)
  create mode 100644 drivers/mtd/qcom_smem_part.c
 
-diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig
-index a03ad29..debc887 100644
 --- a/drivers/mtd/Kconfig
 +++ b/drivers/mtd/Kconfig
 --- a/drivers/mtd/Kconfig
 +++ b/drivers/mtd/Kconfig
-@@ -190,6 +190,13 @@
+@@ -190,6 +190,13 @@ config MTD_MYLOADER_PARTS
          You will still need the parsing functions to be called by the driver
          for your particular device. It won't happen automatically.
  
          You will still need the parsing functions to be called by the driver
          for your particular device. It won't happen automatically.
  
@@ -34,11 +32,9 @@ index a03ad29..debc887 100644
  comment "User Modules And Translation Layers"
  
  #
  comment "User Modules And Translation Layers"
  
  #
-diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile
-index 99bb9a1..2a44a64 100644
 --- a/drivers/mtd/Makefile
 +++ b/drivers/mtd/Makefile
 --- a/drivers/mtd/Makefile
 +++ b/drivers/mtd/Makefile
-@@ -16,6 +16,7 @@
+@@ -16,6 +16,7 @@ obj-$(CONFIG_MTD_AR7_PARTS)  += ar7part.o
  obj-$(CONFIG_MTD_BCM63XX_PARTS)       += bcm63xxpart.o
  obj-$(CONFIG_MTD_BCM47XX_PARTS)       += bcm47xxpart.o
  obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
  obj-$(CONFIG_MTD_BCM63XX_PARTS)       += bcm63xxpart.o
  obj-$(CONFIG_MTD_BCM47XX_PARTS)       += bcm47xxpart.o
  obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
@@ -46,9 +42,6 @@ index 99bb9a1..2a44a64 100644
  
  # 'Users' - code which presents functionality to userspace.
  obj-$(CONFIG_MTD_BLKDEVS)     += mtd_blkdevs.o
  
  # 'Users' - code which presents functionality to userspace.
  obj-$(CONFIG_MTD_BLKDEVS)     += mtd_blkdevs.o
-diff --git a/drivers/mtd/qcom_smem_part.c b/drivers/mtd/qcom_smem_part.c
-new file mode 100644
-index 0000000..f9c1bca
 --- /dev/null
 +++ b/drivers/mtd/qcom_smem_part.c
 @@ -0,0 +1,228 @@
 --- /dev/null
 +++ b/drivers/mtd/qcom_smem_part.c
 @@ -0,0 +1,228 @@
index 68f2b39813d5103de25deaaafcea0327ebb8aa2d..4bba0ac557c5356f0ee0e11a061bf4a2510786b4 100644 (file)
@@ -1,8 +1,8 @@
 --- a/drivers/phy/Kconfig
 +++ b/drivers/phy/Kconfig
 --- a/drivers/phy/Kconfig
 +++ b/drivers/phy/Kconfig
-@@ -390,4 +390,15 @@
-         Enable this to support the Broadcom Cygnus PCIe PHY.
-         If unsure, say N.
+@@ -390,4 +390,15 @@ config PHY_CYGNUS_PCIE
+         Enable this to support the Broadcom Cygnus PCIe PHY.
+         If unsure, say N.
  
 +config PHY_QCOM_DWC3
 +      tristate "QCOM DWC3 USB PHY support"
  
 +config PHY_QCOM_DWC3
 +      tristate "QCOM DWC3 USB PHY support"
@@ -18,7 +18,7 @@
  endmenu
 --- a/drivers/phy/Makefile
 +++ b/drivers/phy/Makefile
  endmenu
 --- a/drivers/phy/Makefile
 +++ b/drivers/phy/Makefile
-@@ -48,3 +48,4 @@ obj-$(CONFIG_PHY_TUSB1210)   +=
+@@ -48,3 +48,4 @@ obj-$(CONFIG_PHY_TUSB1210)           += phy-tusb1
  obj-$(CONFIG_PHY_BRCMSTB_SATA)                += phy-brcmstb-sata.o
  obj-$(CONFIG_PHY_PISTACHIO_USB)               += phy-pistachio-usb.o
  obj-$(CONFIG_PHY_CYGNUS_PCIE)         += phy-bcm-cygnus-pcie.o
  obj-$(CONFIG_PHY_BRCMSTB_SATA)                += phy-brcmstb-sata.o
  obj-$(CONFIG_PHY_PISTACHIO_USB)               += phy-pistachio-usb.o
  obj-$(CONFIG_PHY_CYGNUS_PCIE)         += phy-bcm-cygnus-pcie.o
index ad1a1b9cb37d307e670eaaa5fe93f2af81c5cd17..4d907988fb5e2ad897fc1cfd2d0469a19ca11dfd 100644 (file)
@@ -34,7 +34,7 @@ MAINTAINERS                  |    7 +
 
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
 
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -8253,6 +8253,13 @@
+@@ -8253,6 +8253,13 @@ S:      Maintained
  F:    Documentation/devicetree/bindings/pci/hisilicon-pcie.txt
  F:    drivers/pci/host/pcie-hisi.c
  
  F:    Documentation/devicetree/bindings/pci/hisilicon-pcie.txt
  F:    drivers/pci/host/pcie-hisi.c
  
@@ -50,7 +50,7 @@ MAINTAINERS                  |    7 +
  L:    linux-pcmcia@lists.infradead.org
 --- a/drivers/pci/host/Kconfig
 +++ b/drivers/pci/host/Kconfig
  L:    linux-pcmcia@lists.infradead.org
 --- a/drivers/pci/host/Kconfig
 +++ b/drivers/pci/host/Kconfig
-@@ -173,4 +173,13 @@
+@@ -173,4 +173,13 @@ config PCI_HISI
        help
          Say Y here if you want PCIe controller support on HiSilicon HIP05 SoC
  
        help
          Say Y here if you want PCIe controller support on HiSilicon HIP05 SoC
  
@@ -745,7 +745,7 @@ MAINTAINERS                  |    7 +
 +MODULE_ALIAS("platform:qcom-pcie");
 --- a/drivers/pci/host/Makefile
 +++ b/drivers/pci/host/Makefile
 +MODULE_ALIAS("platform:qcom-pcie");
 --- a/drivers/pci/host/Makefile
 +++ b/drivers/pci/host/Makefile
-@@ -20,3 +20,4 @@
+@@ -20,3 +20,4 @@ obj-$(CONFIG_PCIE_IPROC_BCMA) += pcie-ip
  obj-$(CONFIG_PCIE_ALTERA) += pcie-altera.o
  obj-$(CONFIG_PCIE_ALTERA_MSI) += pcie-altera-msi.o
  obj-$(CONFIG_PCI_HISI) += pcie-hisi.o
  obj-$(CONFIG_PCIE_ALTERA) += pcie-altera.o
  obj-$(CONFIG_PCIE_ALTERA_MSI) += pcie-altera-msi.o
  obj-$(CONFIG_PCI_HISI) += pcie-hisi.o
index 01bd7497d11b6745f56d5266296f3e7ed1ba8b76..36a92c858aeb669bd84e202c59ef715686ef65ba 100644 (file)
@@ -38,7 +38,7 @@ arch/arm/common/Kconfig                   |  3 ++
 
 --- a/arch/arm/common/Kconfig
 +++ b/arch/arm/common/Kconfig
 
 --- a/arch/arm/common/Kconfig
 +++ b/arch/arm/common/Kconfig
-@@ -9,6 +9,9 @@
+@@ -9,6 +9,9 @@ config DMABOUNCE
        bool
        select ZONE_DMA
  
        bool
        select ZONE_DMA
  
@@ -50,7 +50,7 @@ arch/arm/common/Kconfig                   |  3 ++
  
 --- a/arch/arm/common/Makefile
 +++ b/arch/arm/common/Makefile
  
 --- a/arch/arm/common/Makefile
 +++ b/arch/arm/common/Makefile
-@@ -7,6 +7,7 @@
+@@ -7,6 +7,7 @@ obj-y                          += firmware.o
  obj-$(CONFIG_ICST)            += icst.o
  obj-$(CONFIG_SA1111)          += sa1111.o
  obj-$(CONFIG_DMABOUNCE)               += dmabounce.o
  obj-$(CONFIG_ICST)            += icst.o
  obj-$(CONFIG_SA1111)          += sa1111.o
  obj-$(CONFIG_DMABOUNCE)               += dmabounce.o
index acf5820e6ceffd7a33c873abaf21d66646b63d3a..6efa5d8045fec3c00c73ae239c2d115750250de3 100644 (file)
@@ -18,8 +18,6 @@ Signed-off-by: Ram Chandra Jangir <rjangi@codeaurora.org>
  include/linux/clk-provider.h |  9 ++++--
  2 files changed, 53 insertions(+), 30 deletions(-)
 
  include/linux/clk-provider.h |  9 ++++--
  2 files changed, 53 insertions(+), 30 deletions(-)
 
-diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c
-index 7129c86..b03a34d 100644
 --- a/drivers/clk/clk-mux.c
 +++ b/drivers/clk/clk-mux.c
 @@ -28,35 +28,24 @@
 --- a/drivers/clk/clk-mux.c
 +++ b/drivers/clk/clk-mux.c
 @@ -28,35 +28,24 @@
@@ -64,7 +62,7 @@ index 7129c86..b03a34d 100644
                val--;
  
        if (val >= num_parents)
                val--;
  
        if (val >= num_parents)
-@@ -64,24 +53,53 @@ static u8 clk_mux_get_parent(struct clk_hw *hw)
+@@ -64,24 +53,53 @@ static u8 clk_mux_get_parent(struct clk_
  
        return val;
  }
  
        return val;
  }
@@ -127,7 +125,7 @@ index 7129c86..b03a34d 100644
        if (mux->lock)
                spin_lock_irqsave(mux->lock, flags);
        else
        if (mux->lock)
                spin_lock_irqsave(mux->lock, flags);
        else
-@@ -105,7 +123,7 @@ static int clk_mux_set_parent(struct clk_hw *hw, u8 index)
+@@ -105,7 +123,7 @@ static int clk_mux_set_parent(struct clk
  }
  
  const struct clk_ops clk_mux_ops = {
  }
  
  const struct clk_ops clk_mux_ops = {
@@ -136,7 +134,7 @@ index 7129c86..b03a34d 100644
        .set_parent = clk_mux_set_parent,
        .determine_rate = __clk_mux_determine_rate,
  };
        .set_parent = clk_mux_set_parent,
        .determine_rate = __clk_mux_determine_rate,
  };
-@@ -120,7 +138,7 @@ struct clk *clk_register_mux_table(struct device *dev, const char *name,
+@@ -120,7 +138,7 @@ struct clk *clk_register_mux_table(struc
                const char * const *parent_names, u8 num_parents,
                unsigned long flags,
                void __iomem *reg, u8 shift, u32 mask,
                const char * const *parent_names, u8 num_parents,
                unsigned long flags,
                void __iomem *reg, u8 shift, u32 mask,
@@ -145,11 +143,9 @@ index 7129c86..b03a34d 100644
  {
        struct clk_mux *mux;
        struct clk *clk;
  {
        struct clk_mux *mux;
        struct clk *clk;
-diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
-index c56988a..b6b17b5 100644
 --- a/include/linux/clk-provider.h
 +++ b/include/linux/clk-provider.h
 --- a/include/linux/clk-provider.h
 +++ b/include/linux/clk-provider.h
-@@ -432,7 +432,7 @@ void clk_unregister_divider(struct clk *clk);
+@@ -433,7 +433,7 @@ void clk_unregister_divider(struct clk *
  struct clk_mux {
        struct clk_hw   hw;
        void __iomem    *reg;
  struct clk_mux {
        struct clk_hw   hw;
        void __iomem    *reg;
@@ -158,7 +154,7 @@ index c56988a..b6b17b5 100644
        u32             mask;
        u8              shift;
        u8              flags;
        u32             mask;
        u8              shift;
        u8              flags;
-@@ -448,6 +448,11 @@ struct clk_mux {
+@@ -449,6 +449,11 @@ struct clk_mux {
  extern const struct clk_ops clk_mux_ops;
  extern const struct clk_ops clk_mux_ro_ops;
  
  extern const struct clk_ops clk_mux_ops;
  extern const struct clk_ops clk_mux_ro_ops;
  
@@ -170,7 +166,7 @@ index c56988a..b6b17b5 100644
  struct clk *clk_register_mux(struct device *dev, const char *name,
                const char * const *parent_names, u8 num_parents,
                unsigned long flags,
  struct clk *clk_register_mux(struct device *dev, const char *name,
                const char * const *parent_names, u8 num_parents,
                unsigned long flags,
-@@ -458,7 +463,7 @@ struct clk *clk_register_mux_table(struct device *dev, const char *name,
+@@ -459,7 +464,7 @@ struct clk *clk_register_mux_table(struc
                const char * const *parent_names, u8 num_parents,
                unsigned long flags,
                void __iomem *reg, u8 shift, u32 mask,
                const char * const *parent_names, u8 num_parents,
                unsigned long flags,
                void __iomem *reg, u8 shift, u32 mask,
@@ -179,6 +175,3 @@ index c56988a..b6b17b5 100644
  
  void clk_unregister_mux(struct clk *clk);
  
  
  void clk_unregister_mux(struct clk *clk);
  
--- 
-2.7.2
-
index 5df0a5613e702b5bfc5e32ca85d719843541652f..5015d32d864d31f060c78e7e781118ca5f622a2e 100644 (file)
@@ -37,11 +37,9 @@ Signed-off-by: Ram Chandra Jangir <rjangi@codeaurora.org>
  drivers/clk/clk.c | 34 ++++++++++++++++++++++------------
  1 file changed, 22 insertions(+), 12 deletions(-)
 
  drivers/clk/clk.c | 34 ++++++++++++++++++++++------------
  1 file changed, 22 insertions(+), 12 deletions(-)
 
-diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
-index f13c3f4..8404c3c 100644
 --- a/drivers/clk/clk.c
 +++ b/drivers/clk/clk.c
 --- a/drivers/clk/clk.c
 +++ b/drivers/clk/clk.c
-@@ -1427,21 +1427,24 @@ static struct clk_core *clk_propagate_rate_change(struct clk_core *core,
+@@ -1427,21 +1427,24 @@ static struct clk_core *clk_propagate_ra
   * walk down a subtree and set the new rates notifying the rate
   * change on the way
   */
   * walk down a subtree and set the new rates notifying the rate
   * change on the way
   */
@@ -73,7 +71,7 @@ index f13c3f4..8404c3c 100644
  
        if (core->new_parent && core->new_parent != core->parent) {
                old_parent = __clk_set_parent_before(core, core->new_parent);
  
        if (core->new_parent && core->new_parent != core->parent) {
                old_parent = __clk_set_parent_before(core, core->new_parent);
-@@ -1467,7 +1470,7 @@ static void clk_change_rate(struct clk_core *core)
+@@ -1467,7 +1470,7 @@ static void clk_change_rate(struct clk_c
  
        trace_clk_set_rate_complete(core, core->new_rate);
  
  
        trace_clk_set_rate_complete(core, core->new_rate);
  
@@ -82,7 +80,7 @@ index f13c3f4..8404c3c 100644
  
        if (core->notifier_count && old_rate != core->rate)
                __clk_notify(core, POST_RATE_CHANGE, old_rate, core->rate);
  
        if (core->notifier_count && old_rate != core->rate)
                __clk_notify(core, POST_RATE_CHANGE, old_rate, core->rate);
-@@ -1483,12 +1486,13 @@ static void clk_change_rate(struct clk_core *core)
+@@ -1483,12 +1486,13 @@ static void clk_change_rate(struct clk_c
                /* Skip children who will be reparented to another clock */
                if (child->new_parent && child->new_parent != core)
                        continue;
                /* Skip children who will be reparented to another clock */
                if (child->new_parent && child->new_parent != core)
                        continue;
@@ -99,7 +97,7 @@ index f13c3f4..8404c3c 100644
  }
  
  static int clk_core_set_rate_nolock(struct clk_core *core,
  }
  
  static int clk_core_set_rate_nolock(struct clk_core *core,
-@@ -1497,6 +1501,7 @@ static int clk_core_set_rate_nolock(struct clk_core *core,
+@@ -1497,6 +1501,7 @@ static int clk_core_set_rate_nolock(stru
        struct clk_core *top, *fail_clk;
        unsigned long rate = req_rate;
        int ret = 0;
        struct clk_core *top, *fail_clk;
        unsigned long rate = req_rate;
        int ret = 0;
@@ -107,7 +105,7 @@ index f13c3f4..8404c3c 100644
  
        if (!core)
                return 0;
  
        if (!core)
                return 0;
-@@ -1522,8 +1527,13 @@ static int clk_core_set_rate_nolock(struct clk_core *core,
+@@ -1522,8 +1527,13 @@ static int clk_core_set_rate_nolock(stru
                return -EBUSY;
        }
  
                return -EBUSY;
        }
  
@@ -122,6 +120,3 @@ index f13c3f4..8404c3c 100644
  
        core->req_rate = req_rate;
  
  
        core->req_rate = req_rate;
  
--- 
-2.7.2
-
index e969f6bca466efcf367c2d01fffc3debf8b925ca..de3ac7d14c088101eb2a6505e4b019e90fe6a90f 100644 (file)
@@ -19,8 +19,6 @@ Signed-off-by: Ram Chandra Jangir <rjangi@codeaurora.org>
  include/linux/clk-provider.h |  1 +
  2 files changed, 54 insertions(+), 8 deletions(-)
 
  include/linux/clk-provider.h |  1 +
  2 files changed, 54 insertions(+), 8 deletions(-)
 
-diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
-index 8404c3c..a29319a 100644
 --- a/drivers/clk/clk.c
 +++ b/drivers/clk/clk.c
 @@ -51,9 +51,12 @@ struct clk_core {
 --- a/drivers/clk/clk.c
 +++ b/drivers/clk/clk.c
 @@ -51,9 +51,12 @@ struct clk_core {
@@ -46,7 +44,7 @@ index 8404c3c..a29319a 100644
  
        core->new_rate = new_rate;
        core->new_parent = new_parent;
  
        core->new_rate = new_rate;
        core->new_parent = new_parent;
-@@ -1281,6 +1285,18 @@ static void clk_calc_subtree(struct clk_core *core, unsigned long new_rate,
+@@ -1281,6 +1285,18 @@ static void clk_calc_subtree(struct clk_
        if (new_parent && new_parent != core->parent)
                new_parent->new_child = core;
  
        if (new_parent && new_parent != core->parent)
                new_parent->new_child = core;
  
@@ -65,7 +63,7 @@ index 8404c3c..a29319a 100644
        hlist_for_each_entry(child, &core->children, child_node) {
                child->new_rate = clk_recalc(child, new_rate);
                clk_calc_subtree(child, child->new_rate, NULL, 0);
        hlist_for_each_entry(child, &core->children, child_node) {
                child->new_rate = clk_recalc(child, new_rate);
                clk_calc_subtree(child, child->new_rate, NULL, 0);
-@@ -1393,14 +1409,43 @@ static struct clk_core *clk_propagate_rate_change(struct clk_core *core,
+@@ -1393,14 +1409,43 @@ static struct clk_core *clk_propagate_ra
                                                  unsigned long event)
  {
        struct clk_core *child, *tmp_clk, *fail_clk = NULL;
                                                  unsigned long event)
  {
        struct clk_core *child, *tmp_clk, *fail_clk = NULL;
@@ -112,7 +110,7 @@ index 8404c3c..a29319a 100644
                        fail_clk = core;
        }
  
                        fail_clk = core;
        }
  
-@@ -1446,7 +1491,8 @@ clk_change_rate(struct clk_core *core, unsigned long best_parent_rate)
+@@ -1446,7 +1491,8 @@ clk_change_rate(struct clk_core *core, u
  
        old_rate = core->rate;
  
  
        old_rate = core->rate;
  
@@ -122,7 +120,7 @@ index 8404c3c..a29319a 100644
                old_parent = __clk_set_parent_before(core, core->new_parent);
                trace_clk_set_parent(core, core->new_parent);
  
                old_parent = __clk_set_parent_before(core, core->new_parent);
                trace_clk_set_parent(core, core->new_parent);
  
-@@ -1472,9 +1518,6 @@ clk_change_rate(struct clk_core *core, unsigned long best_parent_rate)
+@@ -1472,9 +1518,6 @@ clk_change_rate(struct clk_core *core, u
  
        core->rate = core->new_rate;
  
  
        core->rate = core->new_rate;
  
@@ -132,7 +130,7 @@ index 8404c3c..a29319a 100644
        if (core->flags & CLK_RECALC_NEW_RATES)
                (void)clk_calc_new_rates(core, core->new_rate);
  
        if (core->flags & CLK_RECALC_NEW_RATES)
                (void)clk_calc_new_rates(core, core->new_rate);
  
-@@ -1537,6 +1580,8 @@ static int clk_core_set_rate_nolock(struct clk_core *core,
+@@ -1537,6 +1580,8 @@ static int clk_core_set_rate_nolock(stru
  
        core->req_rate = req_rate;
  
  
        core->req_rate = req_rate;
  
@@ -141,8 +139,6 @@ index 8404c3c..a29319a 100644
        return ret;
  }
  
        return ret;
  }
  
-diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
-index b6b17b5..5d49262 100644
 --- a/include/linux/clk-provider.h
 +++ b/include/linux/clk-provider.h
 @@ -202,6 +202,7 @@ struct clk_ops {
 --- a/include/linux/clk-provider.h
 +++ b/include/linux/clk-provider.h
 @@ -202,6 +202,7 @@ struct clk_ops {
@@ -153,6 +149,3 @@ index b6b17b5..5d49262 100644
        int             (*set_rate)(struct clk_hw *hw, unsigned long rate,
                                    unsigned long parent_rate);
        int             (*set_rate_and_parent)(struct clk_hw *hw,
        int             (*set_rate)(struct clk_hw *hw, unsigned long rate,
                                    unsigned long parent_rate);
        int             (*set_rate_and_parent)(struct clk_hw *hw,
--- 
-2.7.2
-
index a1b1f4b1f7930429343f78a31ce1246a00526341..4924e5ff4ba5d682e7172ca152ecc63db47a8cf4 100644 (file)
@@ -28,7 +28,7 @@ I'd really like to get rid of __clk_hfpll_init_once() if possible...
 
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
 
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
-@@ -8,6 +8,7 @@
+@@ -8,6 +8,7 @@ clk-qcom-y += clk-rcg2.o
  clk-qcom-y += clk-branch.o
  clk-qcom-y += clk-regmap-divider.o
  clk-qcom-y += clk-regmap-mux.o
  clk-qcom-y += clk-branch.o
  clk-qcom-y += clk-regmap-divider.o
  clk-qcom-y += clk-regmap-mux.o
index 5a452dbcbccab194549415d3d41b5e8fd42fd960..cc7c4cd177df2b9cfd6cef0d3d979611cd8261f4 100644 (file)
@@ -73,7 +73,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 +      };
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
 +      };
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
-@@ -106,3 +106,11 @@
+@@ -106,3 +106,11 @@ config MSM_MMCC_8974
          Support for the multimedia clock controller on msm8974 devices.
          Say Y if you want to support multimedia devices such as display,
          graphics, video encode/decode, camera, etc.
          Support for the multimedia clock controller on msm8974 devices.
          Say Y if you want to support multimedia devices such as display,
          graphics, video encode/decode, camera, etc.
@@ -87,7 +87,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 +        such as MSM8974, APQ8084, etc.
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
 +        such as MSM8974, APQ8084, etc.
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
-@@ -23,3 +23,4 @@
+@@ -23,3 +23,4 @@ obj-$(CONFIG_MSM_LCC_8960) += lcc-msm896
  obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o
  obj-$(CONFIG_MSM_MMCC_8960) += mmcc-msm8960.o
  obj-$(CONFIG_MSM_MMCC_8974) += mmcc-msm8974.o
  obj-$(CONFIG_MSM_GCC_8974) += gcc-msm8974.o
  obj-$(CONFIG_MSM_MMCC_8960) += mmcc-msm8960.o
  obj-$(CONFIG_MSM_MMCC_8974) += mmcc-msm8974.o
index 5b191b55976c64f039f18e2a74b8c7a6204df971..a01decfd8b09cc251208d5cf99e13a8e285553ca 100644 (file)
@@ -29,7 +29,7 @@ drivers/clk/qcom/gcc-ipq806x.c | 83 ++++++++++++++++++++++++++++++++++++++++++
  #include "reset.h"
  
  static struct clk_pll pll0 = {
  #include "reset.h"
  
  static struct clk_pll pll0 = {
-@@ -113,6 +114,85 @@
+@@ -113,6 +114,85 @@ static struct clk_regmap pll8_vote = {
        },
  };
  
        },
  };
  
@@ -115,7 +115,7 @@ drivers/clk/qcom/gcc-ipq806x.c | 83 ++++++++++++++++++++++++++++++++++++++++++
  static struct clk_pll pll14 = {
        .l_reg = 0x31c4,
        .m_reg = 0x31c8,
  static struct clk_pll pll14 = {
        .l_reg = 0x31c4,
        .m_reg = 0x31c8,
-@@ -2837,6 +2917,9 @@
+@@ -2837,6 +2917,9 @@ static struct clk_regmap *gcc_ipq806x_cl
        [UBI32_CORE2_CLK_SRC] = &ubi32_core2_src_clk.clkr,
        [NSSTCM_CLK_SRC] = &nss_tcm_src.clkr,
        [NSSTCM_CLK] = &nss_tcm_clk.clkr,
        [UBI32_CORE2_CLK_SRC] = &ubi32_core2_src_clk.clkr,
        [NSSTCM_CLK_SRC] = &nss_tcm_src.clkr,
        [NSSTCM_CLK] = &nss_tcm_clk.clkr,
index 522482d841d21e89798b76e0e7e40abfd49c4baf..ecf1ef589cdcd32b399071c820a7236992447bae 100644 (file)
@@ -30,7 +30,7 @@ drivers/clk/qcom/Kconfig     |   4 ++
 
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
 
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
-@@ -114,3 +114,7 @@
+@@ -114,3 +114,7 @@ config QCOM_HFPLL
          Support for the high-frequency PLLs present on Qualcomm devices.
          Say Y if you want to support CPU frequency scaling on devices
          such as MSM8974, APQ8084, etc.
          Support for the high-frequency PLLs present on Qualcomm devices.
          Say Y if you want to support CPU frequency scaling on devices
          such as MSM8974, APQ8084, etc.
@@ -40,7 +40,7 @@ drivers/clk/qcom/Kconfig     |   4 ++
 +      select KRAIT_L2_ACCESSORS
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
 +      select KRAIT_L2_ACCESSORS
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
-@@ -8,6 +8,7 @@
+@@ -8,6 +8,7 @@ clk-qcom-y += clk-rcg2.o
  clk-qcom-y += clk-branch.o
  clk-qcom-y += clk-regmap-divider.o
  clk-qcom-y += clk-regmap-mux.o
  clk-qcom-y += clk-branch.o
  clk-qcom-y += clk-regmap-divider.o
  clk-qcom-y += clk-regmap-mux.o
@@ -48,7 +48,6 @@ drivers/clk/qcom/Kconfig     |   4 ++
  clk-qcom-y += clk-hfpll.o
  clk-qcom-y += reset.o
  clk-qcom-$(CONFIG_QCOM_GDSC) += gdsc.o
  clk-qcom-y += clk-hfpll.o
  clk-qcom-y += reset.o
  clk-qcom-$(CONFIG_QCOM_GDSC) += gdsc.o
 --- /dev/null
 +++ b/drivers/clk/qcom/clk-krait.c
 @@ -0,0 +1,166 @@
 --- /dev/null
 +++ b/drivers/clk/qcom/clk-krait.c
 @@ -0,0 +1,166 @@
index b2ddbc8a68ab5d680f01392abb9aacedb02af3be..2b0bbb01a353173e0a5a8366cb27ab8b4ea9e85a 100644 (file)
@@ -31,7 +31,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 
 --- a/Documentation/devicetree/bindings/arm/msm/qcom,kpss-acc.txt
 +++ b/Documentation/devicetree/bindings/arm/msm/qcom,kpss-acc.txt
 
 --- a/Documentation/devicetree/bindings/arm/msm/qcom,kpss-acc.txt
 +++ b/Documentation/devicetree/bindings/arm/msm/qcom,kpss-acc.txt
-@@ -21,10 +21,17 @@
+@@ -21,10 +21,17 @@ PROPERTIES
                    the register region. An optional second element specifies
                    the base address and size of the alias register region.
  
                    the register region. An optional second element specifies
                    the base address and size of the alias register region.
  
@@ -82,7 +82,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 +      };
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
 +      };
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
-@@ -115,6 +115,14 @@
+@@ -115,6 +115,14 @@ config QCOM_HFPLL
          Say Y if you want to support CPU frequency scaling on devices
          such as MSM8974, APQ8084, etc.
  
          Say Y if you want to support CPU frequency scaling on devices
          such as MSM8974, APQ8084, etc.
  
@@ -99,7 +99,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
        select KRAIT_L2_ACCESSORS
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
        select KRAIT_L2_ACCESSORS
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
-@@ -9,6 +9,7 @@
+@@ -9,6 +9,7 @@ clk-qcom-y += clk-branch.o
  clk-qcom-y += clk-regmap-divider.o
  clk-qcom-y += clk-regmap-mux.o
  clk-qcom-$(CONFIG_KRAIT_CLOCKS) += clk-krait.o
  clk-qcom-y += clk-regmap-divider.o
  clk-qcom-y += clk-regmap-mux.o
  clk-qcom-$(CONFIG_KRAIT_CLOCKS) += clk-krait.o
index f0e946781b209d9e26083a0bd2b372bd2c27fc2b..813366fdca1c6d808c76638755733b85687d488d 100644 (file)
@@ -56,7 +56,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 +      };
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
 +      };
 --- a/drivers/clk/qcom/Kconfig
 +++ b/drivers/clk/qcom/Kconfig
-@@ -123,6 +123,14 @@
+@@ -123,6 +123,14 @@ config KPSS_XCC
          if you want to support CPU frequency scaling on devices such
          as MSM8960, APQ8064, etc.
  
          if you want to support CPU frequency scaling on devices such
          as MSM8960, APQ8064, etc.
  
@@ -73,7 +73,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
        select KRAIT_L2_ACCESSORS
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
        select KRAIT_L2_ACCESSORS
 --- a/drivers/clk/qcom/Makefile
 +++ b/drivers/clk/qcom/Makefile
-@@ -26,3 +26,4 @@
+@@ -26,3 +26,4 @@ obj-$(CONFIG_MSM_GCC_8974) += gcc-msm897
  obj-$(CONFIG_MSM_MMCC_8960) += mmcc-msm8960.o
  obj-$(CONFIG_MSM_MMCC_8974) += mmcc-msm8974.o
  obj-$(CONFIG_QCOM_HFPLL) += hfpll.o
  obj-$(CONFIG_MSM_MMCC_8960) += mmcc-msm8960.o
  obj-$(CONFIG_MSM_MMCC_8974) += mmcc-msm8974.o
  obj-$(CONFIG_QCOM_HFPLL) += hfpll.o
index d4c43f412a73c6adb6d9c4d96c149e1e6b11c0c7..e8d8ddf6744aa8a5b9f3b0e9f54cc76c2f2b4545 100644 (file)
@@ -69,7 +69,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 +      };
 --- a/drivers/cpufreq/Kconfig.arm
 +++ b/drivers/cpufreq/Kconfig.arm
 +      };
 --- a/drivers/cpufreq/Kconfig.arm
 +++ b/drivers/cpufreq/Kconfig.arm
-@@ -95,6 +95,15 @@
+@@ -95,6 +95,15 @@ config ARM_OMAP2PLUS_CPUFREQ
        depends on ARCH_OMAP2PLUS
        default ARCH_OMAP2PLUS
  
        depends on ARCH_OMAP2PLUS
        default ARCH_OMAP2PLUS
  
@@ -87,7 +87,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
        help
 --- a/drivers/cpufreq/Makefile
 +++ b/drivers/cpufreq/Makefile
        help
 --- a/drivers/cpufreq/Makefile
 +++ b/drivers/cpufreq/Makefile
-@@ -61,6 +61,7 @@
+@@ -61,6 +61,7 @@ obj-$(CONFIG_ARM_MT8173_CPUFREQ)     += mt81
  obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ)   += omap-cpufreq.o
  obj-$(CONFIG_ARM_PXA2xx_CPUFREQ)      += pxa2xx-cpufreq.o
  obj-$(CONFIG_PXA3xx)                  += pxa3xx-cpufreq.o
  obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ)   += omap-cpufreq.o
  obj-$(CONFIG_ARM_PXA2xx_CPUFREQ)      += pxa2xx-cpufreq.o
  obj-$(CONFIG_PXA3xx)                  += pxa3xx-cpufreq.o
index f33c9e0d8cf3ae2e34d5423fd635dc403202794c..67770e8ce9f3f402513bab8cb21e2eecc18e6a80 100644 (file)
@@ -21,7 +21,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 
 --- a/drivers/cpufreq/Kconfig
 +++ b/drivers/cpufreq/Kconfig
 
 --- a/drivers/cpufreq/Kconfig
 +++ b/drivers/cpufreq/Kconfig
-@@ -198,6 +198,19 @@
+@@ -198,6 +198,19 @@ config CPUFREQ_DT
  
          If in doubt, say N.
  
  
          If in doubt, say N.
  
@@ -43,7 +43,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
  endif
 --- a/drivers/cpufreq/Makefile
 +++ b/drivers/cpufreq/Makefile
  endif
 --- a/drivers/cpufreq/Makefile
 +++ b/drivers/cpufreq/Makefile
-@@ -13,6 +13,7 @@
+@@ -13,6 +13,7 @@ obj-$(CONFIG_CPU_FREQ_GOV_CONSERVATIVE)
  obj-$(CONFIG_CPU_FREQ_GOV_COMMON)             += cpufreq_governor.o
  
  obj-$(CONFIG_CPUFREQ_DT)              += cpufreq-dt.o
  obj-$(CONFIG_CPU_FREQ_GOV_COMMON)             += cpufreq_governor.o
  
  obj-$(CONFIG_CPUFREQ_DT)              += cpufreq-dt.o
@@ -446,7 +446,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
 +MODULE_LICENSE("GPL v2");
 --- a/drivers/cpufreq/qcom-cpufreq.c
 +++ b/drivers/cpufreq/qcom-cpufreq.c
 +MODULE_LICENSE("GPL v2");
 --- a/drivers/cpufreq/qcom-cpufreq.c
 +++ b/drivers/cpufreq/qcom-cpufreq.c
-@@ -168,11 +168,8 @@
+@@ -168,11 +168,8 @@ static int __init qcom_cpufreq_populate_
  
  static int __init qcom_cpufreq_driver_init(void)
  {
  
  static int __init qcom_cpufreq_driver_init(void)
  {
index 805f28f323c11cbd53050a1d0890c84d4bc43750..02038aa9429a0682743f1b974ad64e8326509520 100644 (file)
@@ -35,7 +35,7 @@ drivers/dma/Kconfig    |   10 +
 
 --- a/drivers/dma/Kconfig
 +++ b/drivers/dma/Kconfig
 
 --- a/drivers/dma/Kconfig
 +++ b/drivers/dma/Kconfig
-@@ -558,4 +558,14 @@
+@@ -558,4 +558,14 @@ config DMATEST
  config DMA_ENGINE_RAID
        bool
  
  config DMA_ENGINE_RAID
        bool
  
@@ -955,7 +955,7 @@ drivers/dma/Kconfig    |   10 +
 +MODULE_LICENSE("GPL v2");
 --- a/drivers/dma/Makefile
 +++ b/drivers/dma/Makefile
 +MODULE_LICENSE("GPL v2");
 --- a/drivers/dma/Makefile
 +++ b/drivers/dma/Makefile
-@@ -65,5 +65,6 @@
+@@ -65,5 +65,6 @@ obj-$(CONFIG_TI_DMA_CROSSBAR) += ti-dma-
  obj-$(CONFIG_TI_EDMA) += edma.o
  obj-$(CONFIG_XGENE_DMA) += xgene-dma.o
  obj-$(CONFIG_ZX_DMA) += zx296702_dma.o
  obj-$(CONFIG_TI_EDMA) += edma.o
  obj-$(CONFIG_XGENE_DMA) += xgene-dma.o
  obj-$(CONFIG_ZX_DMA) += zx296702_dma.o
index 21fe405b9045168af4bd3e016dcda6067ff551a5..154649dca68ccdda5aa29f4043336d426bd95d73 100644 (file)
@@ -38,7 +38,7 @@ drivers/mtd/nand/nand_base.c | 6 +++++-
 
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
 
 --- a/drivers/mtd/nand/nand_base.c
 +++ b/drivers/mtd/nand/nand_base.c
-@@ -394,7 +394,11 @@
+@@ -394,7 +394,11 @@ static int nand_default_block_markbad(st
        } else {
                ops.len = ops.ooblen = 1;
        }
        } else {
                ops.len = ops.ooblen = 1;
        }
@@ -53,7 +53,7 @@ drivers/mtd/nand/nand_base.c | 6 +++++-
        if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
 --- a/drivers/mtd/nand/nand_bbt.c
 +++ b/drivers/mtd/nand/nand_bbt.c
        if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
 --- a/drivers/mtd/nand/nand_bbt.c
 +++ b/drivers/mtd/nand/nand_bbt.c
-@@ -420,7 +420,11 @@
+@@ -420,7 +420,11 @@ static int scan_block_fast(struct mtd_in
        ops.oobbuf = buf;
        ops.ooboffs = 0;
        ops.datbuf = NULL;
        ops.oobbuf = buf;
        ops.ooboffs = 0;
        ops.datbuf = NULL;
@@ -68,7 +68,7 @@ drivers/mtd/nand/nand_base.c | 6 +++++-
                /*
 --- a/include/linux/mtd/bbm.h
 +++ b/include/linux/mtd/bbm.h
                /*
 --- a/include/linux/mtd/bbm.h
 +++ b/include/linux/mtd/bbm.h
-@@ -116,6 +116,12 @@
+@@ -116,6 +116,12 @@ struct nand_bbt_descr {
  #define NAND_BBT_NO_OOB_BBM   0x00080000
  
  /*
  #define NAND_BBT_NO_OOB_BBM   0x00080000
  
  /*
index 19e5f918122b0fa98f17be7e653b967cd0c11ab0..84ff6e74e0051ebd4fe1a1305ac04fdb9ef184cc 100644 (file)
@@ -80,7 +80,7 @@ drivers/mtd/nand/Kconfig      |    7 +
 
 --- a/drivers/mtd/nand/Kconfig
 +++ b/drivers/mtd/nand/Kconfig
 
 --- a/drivers/mtd/nand/Kconfig
 +++ b/drivers/mtd/nand/Kconfig
-@@ -546,4 +546,11 @@
+@@ -546,4 +546,11 @@ config MTD_NAND_HISI504
        help
          Enables support for NAND controller on Hisilicon SoC Hip04.
  
        help
          Enables support for NAND controller on Hisilicon SoC Hip04.
  
@@ -2015,7 +2015,7 @@ drivers/mtd/nand/Kconfig      |    7 +
 +MODULE_LICENSE("GPL v2");
 --- a/drivers/mtd/nand/Makefile
 +++ b/drivers/mtd/nand/Makefile
 +MODULE_LICENSE("GPL v2");
 --- a/drivers/mtd/nand/Makefile
 +++ b/drivers/mtd/nand/Makefile
-@@ -55,5 +55,6 @@
+@@ -55,5 +55,6 @@ obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) +=
  obj-$(CONFIG_MTD_NAND_SUNXI)          += sunxi_nand.o
  obj-$(CONFIG_MTD_NAND_HISI504)                += hisi504_nand.o
  obj-$(CONFIG_MTD_NAND_BRCMNAND)               += brcmnand/
  obj-$(CONFIG_MTD_NAND_SUNXI)          += sunxi_nand.o
  obj-$(CONFIG_MTD_NAND_HISI504)                += hisi504_nand.o
  obj-$(CONFIG_MTD_NAND_BRCMNAND)               += brcmnand/
index ef81ed2e55e9e1680a13d1ad52d5eb988a6d38e3..0ad0508a9de0fe5dd198a4f9b9510caff1fd4c7d 100644 (file)
@@ -11,31 +11,31 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
 -                      smb208_s1a: smb208-s1a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1a>;
 -                      smb208_s1a: smb208-s1a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1a>;
--
--                              regulator-min-microvolt = <1050000>;
--                              regulator-max-microvolt = <1150000>;
 +                      regulators {
 +                              compatible = "qcom,rpm-smb208-regulators";
  
 +                      regulators {
 +                              compatible = "qcom,rpm-smb208-regulators";
  
--                              qcom,switch-mode-frequency = <1200000>;
--
--                      };
+-                              regulator-min-microvolt = <1050000>;
+-                              regulator-max-microvolt = <1150000>;
 +                              smb208_s1a: s1a {
 +                                      regulator-min-microvolt = <1050000>;
 +                                      regulator-max-microvolt = <1150000>;
  
 +                              smb208_s1a: s1a {
 +                                      regulator-min-microvolt = <1050000>;
 +                                      regulator-max-microvolt = <1150000>;
  
+-                              qcom,switch-mode-frequency = <1200000>;
++                                      qcom,switch-mode-frequency = <1200000>;
+-                      };
+-
 -                      smb208_s1b: smb208-s1b {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1b>;
 -                      smb208_s1b: smb208-s1b {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1b>;
-+                                      qcom,switch-mode-frequency = <1200000>;
+-
 -                              regulator-min-microvolt = <1050000>;
 -                              regulator-max-microvolt = <1150000>;
 -                              regulator-min-microvolt = <1050000>;
 -                              regulator-max-microvolt = <1150000>;
--
--                              qcom,switch-mode-frequency = <1200000>;
--                      };
 +                              };
  
 +                              };
  
+-                              qcom,switch-mode-frequency = <1200000>;
+-                      };
+-
 -                      smb208_s2a: smb208-s2a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S2a>;
 -                      smb208_s2a: smb208-s2a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S2a>;
@@ -71,7 +71,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
 +                              };
                        };
                };
 +                              };
                        };
                };
-
 --- a/arch/arm/boot/dts/qcom-ipq8065.dtsi
 +++ b/arch/arm/boot/dts/qcom-ipq8065.dtsi
 @@ -311,45 +311,37 @@
 --- a/arch/arm/boot/dts/qcom-ipq8065.dtsi
 +++ b/arch/arm/boot/dts/qcom-ipq8065.dtsi
 @@ -311,45 +311,37 @@
@@ -81,31 +81,31 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
 -                      smb208_s1a: smb208-s1a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1a>;
 -                      smb208_s1a: smb208-s1a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1a>;
--
--                              regulator-min-microvolt = <1050000>;
--                              regulator-max-microvolt = <1150000>;
 +                      regulators {
 +                              compatible = "qcom,rpm-smb208-regulators";
  
 +                      regulators {
 +                              compatible = "qcom,rpm-smb208-regulators";
  
--                              qcom,switch-mode-frequency = <1200000>;
--
--                      };
+-                              regulator-min-microvolt = <1050000>;
+-                              regulator-max-microvolt = <1150000>;
 +                              smb208_s1a: s1a {
 +                                      regulator-min-microvolt = <1050000>;
 +                                      regulator-max-microvolt = <1150000>;
  
 +                              smb208_s1a: s1a {
 +                                      regulator-min-microvolt = <1050000>;
 +                                      regulator-max-microvolt = <1150000>;
  
+-                              qcom,switch-mode-frequency = <1200000>;
++                                      qcom,switch-mode-frequency = <1200000>;
+-                      };
+-
 -                      smb208_s1b: smb208-s1b {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1b>;
 -                      smb208_s1b: smb208-s1b {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S1b>;
-+                                      qcom,switch-mode-frequency = <1200000>;
+-
 -                              regulator-min-microvolt = <1050000>;
 -                              regulator-max-microvolt = <1150000>;
 -                              regulator-min-microvolt = <1050000>;
 -                              regulator-max-microvolt = <1150000>;
--
--                              qcom,switch-mode-frequency = <1200000>;
--                      };
 +                              };
  
 +                              };
  
+-                              qcom,switch-mode-frequency = <1200000>;
+-                      };
+-
 -                      smb208_s2a: smb208-s2a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S2a>;
 -                      smb208_s2a: smb208-s2a {
 -                              compatible = "qcom,rpm-smb208";
 -                              reg = <QCOM_RPM_SMB208_S2a>;
@@ -140,4 +140,5 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
 +                                      qcom,switch-mode-frequency = <1400000>;
 +                              };
                        };
 +                                      qcom,switch-mode-frequency = <1400000>;
 +                              };
                        };
-               };
+                       cxo_clk: cxo-clk {
index c0281ff07017b0243849893d0dab6f0efe2c4185..35ba6fbb2201e9c22d8917ebc108977b5b42f74d 100644 (file)
@@ -33,7 +33,7 @@ Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -323,7 +323,7 @@
+@@ -324,7 +324,7 @@ config ARCH_MULTIPLATFORM
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select ARM_HAS_SG_CHAIN
        select ARM_PATCH_PHYS_VIRT
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select ARM_HAS_SG_CHAIN
        select ARM_PATCH_PHYS_VIRT
@@ -44,7 +44,7 @@ Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
        select GENERIC_CLOCKEVENTS
 --- a/arch/arm/Makefile
 +++ b/arch/arm/Makefile
        select GENERIC_CLOCKEVENTS
 --- a/arch/arm/Makefile
 +++ b/arch/arm/Makefile
-@@ -256,9 +256,11 @@
+@@ -256,9 +256,11 @@ MACHINE  := arch/arm/mach-$(word 1,$(mac
  else
  MACHINE  :=
  endif
  else
  MACHINE  :=
  endif
index 9457e1d8ad0e60b7309d0190acc0c8a411921adf..c369ab914a946e4774f3b25bc3b1826b819ca9e9 100644 (file)
@@ -40,24 +40,22 @@ Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
  create mode 100644 drivers/net/dsa/ar8xxx.c
  create mode 100644 drivers/net/dsa/ar8xxx.h
 
  create mode 100644 drivers/net/dsa/ar8xxx.c
  create mode 100644 drivers/net/dsa/ar8xxx.h
 
-diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig
-index 7ad0a4d..2aae541 100644
 --- a/drivers/net/dsa/Kconfig
 +++ b/drivers/net/dsa/Kconfig
 --- a/drivers/net/dsa/Kconfig
 +++ b/drivers/net/dsa/Kconfig
-@@ -65,4 +65,11 @@ config NET_DSA_BCM_SF2
+@@ -65,4 +65,13 @@ config NET_DSA_BCM_SF2
          This enables support for the Broadcom Starfighter 2 Ethernet
          switch chips.
  
 +config NET_DSA_AR8XXX
 +      tristate "Qualcomm Atheros AR8XXX Ethernet switch family support"
 +      depends on NET_DSA
          This enables support for the Broadcom Starfighter 2 Ethernet
          switch chips.
  
 +config NET_DSA_AR8XXX
 +      tristate "Qualcomm Atheros AR8XXX Ethernet switch family support"
 +      depends on NET_DSA
++      select NET_DSA_TAG_QCA
++      select REGMAP
 +      ---help---
 +        This enables support for the Qualcomm Atheros AR8XXX Ethernet
 +        switch chips.
 +
  endmenu
 +      ---help---
 +        This enables support for the Qualcomm Atheros AR8XXX Ethernet
 +        switch chips.
 +
  endmenu
-diff --git a/drivers/net/dsa/Makefile b/drivers/net/dsa/Makefile
-index e2d51c4..7647687 100644
 --- a/drivers/net/dsa/Makefile
 +++ b/drivers/net/dsa/Makefile
 @@ -14,3 +14,4 @@ ifdef CONFIG_NET_DSA_MV88E6171
 --- a/drivers/net/dsa/Makefile
 +++ b/drivers/net/dsa/Makefile
 @@ -14,3 +14,4 @@ ifdef CONFIG_NET_DSA_MV88E6171
@@ -65,12 +63,9 @@ index e2d51c4..7647687 100644
  endif
  obj-$(CONFIG_NET_DSA_BCM_SF2) += bcm_sf2.o
 +obj-$(CONFIG_NET_DSA_AR8XXX)  += ar8xxx.o
  endif
  obj-$(CONFIG_NET_DSA_BCM_SF2) += bcm_sf2.o
 +obj-$(CONFIG_NET_DSA_AR8XXX)  += ar8xxx.o
-diff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c
-new file mode 100644
-index 0000000..4ce3ffc
 --- /dev/null
 +++ b/drivers/net/dsa/ar8xxx.c
 --- /dev/null
 +++ b/drivers/net/dsa/ar8xxx.c
-@@ -0,0 +1,303 @@
+@@ -0,0 +1,529 @@
 +/*
 + * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
 + * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
 +/*
 + * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
 + * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
@@ -92,9 +87,59 @@ index 0000000..4ce3ffc
 +#include <net/dsa.h>
 +#include <linux/phy.h>
 +#include <linux/of_net.h>
 +#include <net/dsa.h>
 +#include <linux/phy.h>
 +#include <linux/of_net.h>
++#include <linux/of_platform.h>
 +
 +#include "ar8xxx.h"
 +
 +
 +#include "ar8xxx.h"
 +
++#define MIB_DESC(_s, _o, _n)  \
++      {                       \
++              .size = (_s),   \
++              .offset = (_o), \
++              .name = (_n),   \
++      }
++
++static const struct ar8xxx_mib_desc ar8327_mib[] = {
++      MIB_DESC(1, 0x00, "RxBroad"),
++      MIB_DESC(1, 0x04, "RxPause"),
++      MIB_DESC(1, 0x08, "RxMulti"),
++      MIB_DESC(1, 0x0c, "RxFcsErr"),
++      MIB_DESC(1, 0x10, "RxAlignErr"),
++      MIB_DESC(1, 0x14, "RxRunt"),
++      MIB_DESC(1, 0x18, "RxFragment"),
++      MIB_DESC(1, 0x1c, "Rx64Byte"),
++      MIB_DESC(1, 0x20, "Rx128Byte"),
++      MIB_DESC(1, 0x24, "Rx256Byte"),
++      MIB_DESC(1, 0x28, "Rx512Byte"),
++      MIB_DESC(1, 0x2c, "Rx1024Byte"),
++      MIB_DESC(1, 0x30, "Rx1518Byte"),
++      MIB_DESC(1, 0x34, "RxMaxByte"),
++      MIB_DESC(1, 0x38, "RxTooLong"),
++      MIB_DESC(2, 0x3c, "RxGoodByte"),
++      MIB_DESC(2, 0x44, "RxBadByte"),
++      MIB_DESC(1, 0x4c, "RxOverFlow"),
++      MIB_DESC(1, 0x50, "Filtered"),
++      MIB_DESC(1, 0x54, "TxBroad"),
++      MIB_DESC(1, 0x58, "TxPause"),
++      MIB_DESC(1, 0x5c, "TxMulti"),
++      MIB_DESC(1, 0x60, "TxUnderRun"),
++      MIB_DESC(1, 0x64, "Tx64Byte"),
++      MIB_DESC(1, 0x68, "Tx128Byte"),
++      MIB_DESC(1, 0x6c, "Tx256Byte"),
++      MIB_DESC(1, 0x70, "Tx512Byte"),
++      MIB_DESC(1, 0x74, "Tx1024Byte"),
++      MIB_DESC(1, 0x78, "Tx1518Byte"),
++      MIB_DESC(1, 0x7c, "TxMaxByte"),
++      MIB_DESC(1, 0x80, "TxOverSize"),
++      MIB_DESC(2, 0x84, "TxByte"),
++      MIB_DESC(1, 0x8c, "TxCollision"),
++      MIB_DESC(1, 0x90, "TxAbortCol"),
++      MIB_DESC(1, 0x94, "TxMultiCol"),
++      MIB_DESC(1, 0x98, "TxSingleCol"),
++      MIB_DESC(1, 0x9c, "TxExcDefer"),
++      MIB_DESC(1, 0xa0, "TxDefer"),
++      MIB_DESC(1, 0xa4, "TxLateCol"),
++};
++
 +u32
 +ar8xxx_mii_read32(struct mii_bus *bus, int phy_id, int regnum)
 +{
 +u32
 +ar8xxx_mii_read32(struct mii_bus *bus, int phy_id, int regnum)
 +{
@@ -200,6 +245,57 @@ index 0000000..4ce3ffc
 +      }
 +}
 +
 +      }
 +}
 +
++static int ar8xxx_regmap_read(void *ctx, uint32_t reg, uint32_t *val)
++{
++      struct dsa_switch *ds = (struct dsa_switch *)ctx;
++
++      *val = ar8xxx_read(ds, reg);
++
++      return 0;
++}
++
++static int ar8xxx_regmap_write(void *ctx, uint32_t reg, uint32_t val)
++{
++      struct dsa_switch *ds = (struct dsa_switch *)ctx;
++
++      ar8xxx_write(ds, reg, val);
++
++      return 0;
++}
++
++static const struct regmap_range ar8xxx_readable_ranges[] = {
++      regmap_reg_range(0x0000, 0x00e4), /* Global control */
++      regmap_reg_range(0x0100, 0x0168), /* EEE control */
++      regmap_reg_range(0x0200, 0x0270), /* Parser control */
++      regmap_reg_range(0x0400, 0x0454), /* ACL */
++      regmap_reg_range(0x0600, 0x0718), /* Lookup */
++      regmap_reg_range(0x0800, 0x0b70), /* QM */
++      regmap_reg_range(0x0C00, 0x0c80), /* PKT */
++      regmap_reg_range(0x1000, 0x10ac), /* MIB - Port0 */
++      regmap_reg_range(0x1100, 0x11ac), /* MIB - Port1 */
++      regmap_reg_range(0x1200, 0x12ac), /* MIB - Port2 */
++      regmap_reg_range(0x1300, 0x13ac), /* MIB - Port3 */
++      regmap_reg_range(0x1400, 0x14ac), /* MIB - Port4 */
++      regmap_reg_range(0x1500, 0x15ac), /* MIB - Port5 */
++      regmap_reg_range(0x1600, 0x16ac), /* MIB - Port6 */
++
++};
++
++static struct regmap_access_table ar8xxx_readable_table = {
++      .yes_ranges = ar8xxx_readable_ranges,
++      .n_yes_ranges = ARRAY_SIZE(ar8xxx_readable_ranges),
++};
++
++struct regmap_config ar8xxx_regmap_config = {
++      .reg_bits = 16,
++      .val_bits = 32,
++      .reg_stride = 4,
++      .max_register = 0x16ac, /* end MIB - Port6 range */
++      .reg_read = ar8xxx_regmap_read,
++      .reg_write = ar8xxx_regmap_write,
++      .rd_table = &ar8xxx_readable_table,
++};
++
 +static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
 +{
 +      int reg;
 +static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
 +{
 +      int reg;
@@ -233,6 +329,9 @@ index 0000000..4ce3ffc
 +              ar8xxx_write(ds, AR8327_REG_PORT5_PAD_CTRL,
 +                           AR8327_PORT_PAD_RGMII_RX_DELAY_EN);
 +              break;
 +              ar8xxx_write(ds, AR8327_REG_PORT5_PAD_CTRL,
 +                           AR8327_PORT_PAD_RGMII_RX_DELAY_EN);
 +              break;
++      case PHY_INTERFACE_MODE_SGMII:
++              ar8xxx_write(ds, reg, AR8327_PORT_PAD_SGMII_EN);
++              break;
 +      default:
 +              pr_err("xMII mode %d not supported\n", mode);
 +              return -EINVAL;
 +      default:
 +              pr_err("xMII mode %d not supported\n", mode);
 +              return -EINVAL;
@@ -241,11 +340,61 @@ index 0000000..4ce3ffc
 +      return 0;
 +}
 +
 +      return 0;
 +}
 +
++static int ar8xxx_of_setup(struct dsa_switch *ds)
++{
++      struct device_node *dn = ds->pd->of_node;
++      const char *s_phymode;
++      int ret, mode;
++      u32 phy_id, ctrl;
++
++      /* If port6-phy-mode property exists, configure it accordingly */
++      if (!of_property_read_string(dn, "qca,port6-phy-mode", &s_phymode)) {
++              for (mode = 0; mode < PHY_INTERFACE_MODE_MAX; mode++)
++                      if (!strcasecmp(s_phymode, phy_modes(mode)))
++                              break;
++
++              if (mode == PHY_INTERFACE_MODE_MAX)
++                      pr_err("Unknown phy-mode: \"%s\"\n", s_phymode);
++
++              ret = ar8xxx_set_pad_ctrl(ds, 6, mode);
++              if (ret < 0)
++                      return ret;
++      }
++
++      /* If a phy ID is specified for PORT6 mac, connect them together */
++      if (!of_property_read_u32(dn, "qca,port6-phy-id", &phy_id)) {
++              ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(6),
++                         AR8327_PORT_LOOKUP_MEMBER, BIT(phy_to_port(phy_id)));
++              ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy_to_port(phy_id)),
++                         AR8327_PORT_LOOKUP_MEMBER, BIT(6));
++
++              /* We want the switch to be pass-through and act like a PHY on
++               * these ports. So BC/MC/UC & IGMP frames need to be accepted
++               */
++              ctrl = BIT(phy_to_port(phy_id)) | BIT(6);
++              ar8xxx_reg_set(ds, AR8327_REG_GLOBAL_FW_CTRL1,
++                             ctrl << AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S |
++                             ctrl << AR8327_GLOBAL_FW_CTRL1_BC_DP_S |
++                             ctrl << AR8327_GLOBAL_FW_CTRL1_MC_DP_S |
++                             ctrl << AR8327_GLOBAL_FW_CTRL1_UC_DP_S);
++      }
++
++      return 0;
++}
++
 +static int ar8xxx_setup(struct dsa_switch *ds)
 +{
 +static int ar8xxx_setup(struct dsa_switch *ds)
 +{
++      struct ar8xxx_priv *priv = ds_to_priv(ds);
 +      struct net_device *netdev = ds->dst->pd->of_netdev;
 +      int ret, i, phy_mode;
 +
 +      struct net_device *netdev = ds->dst->pd->of_netdev;
 +      int ret, i, phy_mode;
 +
++      /* Start by setting up the register mapping */
++      priv->regmap = devm_regmap_init(ds->master_dev, NULL, ds,
++                                      &ar8xxx_regmap_config);
++
++      if (IS_ERR(priv->regmap))
++              pr_warn("regmap initialization failed");
++
 +      /* Initialize CPU port pad mode (xMII type, delays...) */
 +      phy_mode = of_get_phy_mode(netdev->dev.parent->of_node);
 +      if (phy_mode < 0) {
 +      /* Initialize CPU port pad mode (xMII type, delays...) */
 +      phy_mode = of_get_phy_mode(netdev->dev.parent->of_node);
 +      if (phy_mode < 0) {
@@ -257,11 +406,31 @@ index 0000000..4ce3ffc
 +      if (ret < 0)
 +              return ret;
 +
 +      if (ret < 0)
 +              return ret;
 +
++      /* Enable CPU Port */
++      ar8xxx_reg_set(ds, AR8327_REG_GLOBAL_FW_CTRL0,
++                     AR8327_GLOBAL_FW_CTRL0_CPU_PORT_EN);
++
++      /* Enable MIB counters */
++      ar8xxx_reg_set(ds, AR8327_REG_MIB, AR8327_MIB_CPU_KEEP);
++      ar8xxx_write(ds, AR8327_REG_MODULE_EN, AR8327_MODULE_EN_MIB);
++
++      /* Enable QCA header mode on Port 0 */
++      ar8xxx_write(ds, AR8327_REG_PORT_HDR_CTRL(0),
++                   AR8327_PORT_HDR_CTRL_ALL << AR8327_PORT_HDR_CTRL_TX_S |
++                   AR8327_PORT_HDR_CTRL_ALL << AR8327_PORT_HDR_CTRL_RX_S);
++
 +      /* Disable forwarding by default on all ports */
 +      for (i = 0; i < AR8327_NUM_PORTS; i++)
 +              ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(i),
 +                         AR8327_PORT_LOOKUP_MEMBER, 0);
 +
 +      /* Disable forwarding by default on all ports */
 +      for (i = 0; i < AR8327_NUM_PORTS; i++)
 +              ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(i),
 +                         AR8327_PORT_LOOKUP_MEMBER, 0);
 +
++      /* Forward all unknown frames to CPU port for Linux processing */
++      ar8xxx_write(ds, AR8327_REG_GLOBAL_FW_CTRL1,
++                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S |
++                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_BC_DP_S |
++                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_MC_DP_S |
++                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_UC_DP_S);
++
 +      /* Setup connection between CPU ports & PHYs */
 +      for (i = 0; i < DSA_MAX_PORTS; i++) {
 +              /* CPU port gets connected to all PHYs in the switch */
 +      /* Setup connection between CPU ports & PHYs */
 +      for (i = 0; i < DSA_MAX_PORTS; i++) {
 +              /* CPU port gets connected to all PHYs in the switch */
@@ -273,11 +442,23 @@ index 0000000..4ce3ffc
 +
 +              /* Invividual PHYs gets connected to CPU port only */
 +              if (ds->phys_port_mask & BIT(i)) {
 +
 +              /* Invividual PHYs gets connected to CPU port only */
 +              if (ds->phys_port_mask & BIT(i)) {
-+                      ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy_to_port(i)),
++                      int phy = phy_to_port(i);
++
++                      ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy),
 +                                 AR8327_PORT_LOOKUP_MEMBER, BIT(0));
 +                                 AR8327_PORT_LOOKUP_MEMBER, BIT(0));
++
++                      /* Disable Auto-learning by default so the switch
++                       * doesn't try to forward the frame to another port
++                       */
++                      ar8xxx_reg_clear(ds, AR8327_PORT_LOOKUP_CTRL(phy),
++                                       AR8327_PORT_LOOKUP_LEARN);
 +              }
 +      }
 +
 +              }
 +      }
 +
++      ret = ar8xxx_of_setup(ds);
++      if (ret < 0)
++              return ret;
++
 +      return 0;
 +}
 +
 +      return 0;
 +}
 +
@@ -301,6 +482,42 @@ index 0000000..4ce3ffc
 +      return mdiobus_write(bus, phy, regnum, val);
 +}
 +
 +      return mdiobus_write(bus, phy, regnum, val);
 +}
 +
++static void ar8xxx_get_strings(struct dsa_switch *ds, int phy, uint8_t *data)
++{
++      int i;
++
++      for (i = 0; i < ARRAY_SIZE(ar8327_mib); i++) {
++              strncpy(data + i * ETH_GSTRING_LEN, ar8327_mib[i].name,
++                      ETH_GSTRING_LEN);
++      }
++}
++
++static void ar8xxx_get_ethtool_stats(struct dsa_switch *ds, int phy,
++                                   uint64_t *data)
++{
++      const struct ar8xxx_mib_desc *mib;
++      uint32_t reg, i, port;
++      u64 hi;
++
++      port = phy_to_port(phy);
++
++      for (i = 0; i < ARRAY_SIZE(ar8327_mib); i++) {
++              mib = &ar8327_mib[i];
++              reg = AR8327_PORT_MIB_COUNTER(port) + mib->offset;
++
++              data[i] = ar8xxx_read(ds, reg);
++              if (mib->size == 2) {
++                      hi = ar8xxx_read(ds, reg + 4);
++                      data[i] |= hi << 32;
++              }
++      }
++}
++
++static int ar8xxx_get_sset_count(struct dsa_switch *ds)
++{
++      return ARRAY_SIZE(ar8327_mib);
++}
++
 +static void ar8xxx_poll_link(struct dsa_switch *ds)
 +{
 +      int i = 0;
 +static void ar8xxx_poll_link(struct dsa_switch *ds)
 +{
 +      int i = 0;
@@ -348,13 +565,17 @@ index 0000000..4ce3ffc
 +}
 +
 +static struct dsa_switch_driver ar8xxx_switch_driver = {
 +}
 +
 +static struct dsa_switch_driver ar8xxx_switch_driver = {
-+      .tag_protocol   = DSA_TAG_PROTO_NONE,
-+      .probe          = ar8xxx_probe,
-+      .setup          = ar8xxx_setup,
-+      .set_addr       = ar8xxx_set_addr,
-+      .poll_link      = ar8xxx_poll_link,
-+      .phy_read       = ar8xxx_phy_read,
-+      .phy_write      = ar8xxx_phy_write,
++      .tag_protocol           = DSA_TAG_PROTO_QCA,
++      .priv_size              = sizeof(struct ar8xxx_priv),
++      .probe                  = ar8xxx_probe,
++      .setup                  = ar8xxx_setup,
++      .set_addr               = ar8xxx_set_addr,
++      .poll_link              = ar8xxx_poll_link,
++      .phy_read               = ar8xxx_phy_read,
++      .phy_write              = ar8xxx_phy_write,
++      .get_strings            = ar8xxx_get_strings,
++      .get_ethtool_stats      = ar8xxx_get_ethtool_stats,
++      .get_sset_count         = ar8xxx_get_sset_count,
 +};
 +
 +static int __init ar8xxx_init(void)
 +};
 +
 +static int __init ar8xxx_init(void)
@@ -374,12 +595,9 @@ index 0000000..4ce3ffc
 +MODULE_DESCRIPTION("Driver for AR8XXX ethernet switch family");
 +MODULE_LICENSE("GPL");
 +MODULE_ALIAS("platform:ar8xxx");
 +MODULE_DESCRIPTION("Driver for AR8XXX ethernet switch family");
 +MODULE_LICENSE("GPL");
 +MODULE_ALIAS("platform:ar8xxx");
-diff --git a/drivers/net/dsa/ar8xxx.h b/drivers/net/dsa/ar8xxx.h
-new file mode 100644
-index 0000000..a29b6d3
 --- /dev/null
 +++ b/drivers/net/dsa/ar8xxx.h
 --- /dev/null
 +++ b/drivers/net/dsa/ar8xxx.h
-@@ -0,0 +1,82 @@
+@@ -0,0 +1,156 @@
 +/*
 + * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
 + * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
 +/*
 + * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
 + * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
@@ -399,6 +617,17 @@ index 0000000..a29b6d3
 +#define __AR8XXX_H
 +
 +#include <linux/delay.h>
 +#define __AR8XXX_H
 +
 +#include <linux/delay.h>
++#include <linux/regmap.h>
++
++struct ar8xxx_priv {
++      struct regmap *regmap;
++};
++
++struct ar8xxx_mib_desc {
++      unsigned int size;
++      unsigned int offset;
++      const char *name;
++};
 +
 +#define AR8327_NUM_PORTS              7
 +
 +
 +#define AR8327_NUM_PORTS              7
 +
@@ -413,6 +642,14 @@ index 0000000..a29b6d3
 +#define   AR8327_PORT_PAD_RGMII_RX_DELAY_EN   BIT(24)
 +#define   AR8327_PORT_PAD_SGMII_EN            BIT(7)
 +
 +#define   AR8327_PORT_PAD_RGMII_RX_DELAY_EN   BIT(24)
 +#define   AR8327_PORT_PAD_SGMII_EN            BIT(7)
 +
++#define AR8327_REG_MODULE_EN                  0x030
++#define   AR8327_MODULE_EN_MIB                        BIT(0)
++#define         AR8327_MODULE_EN_ACL                  BIT(1)
++#define         AR8327_MODULE_EN_L3                   BIT(2)
++
++#define AR8327_REG_MIB                                0x034
++#define   AR8327_MIB_CPU_KEEP                 BIT(20)
++
 +#define AR8327_REG_PORT_STATUS(_i)            (0x07c + (_i) * 4)
 +#define   AR8XXX_PORT_STATUS_SPEED    GENMASK(2, 0)
 +#define   AR8XXX_PORT_STATUS_SPEED_S  0
 +#define AR8327_REG_PORT_STATUS(_i)            (0x07c + (_i) * 4)
 +#define   AR8XXX_PORT_STATUS_SPEED    GENMASK(2, 0)
 +#define   AR8XXX_PORT_STATUS_SPEED_S  0
@@ -425,7 +662,29 @@ index 0000000..a29b6d3
 +#define   AR8XXX_PORT_STATUS_LINK_AUTO        BIT(9)
 +#define   AR8XXX_PORT_STATUS_LINK_PAUSE       BIT(10)
 +
 +#define   AR8XXX_PORT_STATUS_LINK_AUTO        BIT(9)
 +#define   AR8XXX_PORT_STATUS_LINK_PAUSE       BIT(10)
 +
-+#define AR8327_PORT_LOOKUP_CTRL(_i)           (0x660 + (_i) * 0xc)
++#define AR8327_REG_PORT_HDR_CTRL(_i)          (0x9c + (_i * 4))
++#define   AR8327_PORT_HDR_CTRL_RX_MASK                GENMASK(3, 2)
++#define   AR8327_PORT_HDR_CTRL_RX_S           2
++#define   AR8327_PORT_HDR_CTRL_TX_MASK                GENMASK(1, 0)
++#define   AR8327_PORT_HDR_CTRL_TX_S           0
++#define   AR8327_PORT_HDR_CTRL_ALL            2
++#define   AR8327_PORT_HDR_CTRL_MGMT           1
++#define   AR8327_PORT_HDR_CTRL_NONE           0
++
++#define AR8327_REG_GLOBAL_FW_CTRL0            0x620
++#define   AR8327_GLOBAL_FW_CTRL0_CPU_PORT_EN  BIT(10)
++
++#define AR8327_REG_GLOBAL_FW_CTRL1            0x624
++#define   AR8327_GLOBAL_FW_CTRL1_IGMP_DP_MASK GENMASK(30, 24)
++#define   AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S    24
++#define   AR8327_GLOBAL_FW_CTRL1_BC_DP_MASK   GENMASK(22, 16)
++#define   AR8327_GLOBAL_FW_CTRL1_BC_DP_S      16
++#define   AR8327_GLOBAL_FW_CTRL1_MC_DP_MASK   GENMASK(14, 8)
++#define   AR8327_GLOBAL_FW_CTRL1_MC_DP_S      8
++#define   AR8327_GLOBAL_FW_CTRL1_UC_DP_MASK   GENMASK(6, 0)
++#define   AR8327_GLOBAL_FW_CTRL1_UC_DP_S      0
++
++#define AR8327_PORT_LOOKUP_CTRL(_i)           (0x660 + (_i) * 0xc)
 +#define   AR8327_PORT_LOOKUP_MEMBER           GENMASK(6, 0)
 +#define   AR8327_PORT_LOOKUP_IN_MODE          GENMASK(9, 8)
 +#define   AR8327_PORT_LOOKUP_IN_MODE_S                8
 +#define   AR8327_PORT_LOOKUP_MEMBER           GENMASK(6, 0)
 +#define   AR8327_PORT_LOOKUP_IN_MODE          GENMASK(9, 8)
 +#define   AR8327_PORT_LOOKUP_IN_MODE_S                8
@@ -434,6 +693,8 @@ index 0000000..a29b6d3
 +#define   AR8327_PORT_LOOKUP_LEARN            BIT(20)
 +#define   AR8327_PORT_LOOKUP_ING_MIRROR_EN    BIT(25)
 +
 +#define   AR8327_PORT_LOOKUP_LEARN            BIT(20)
 +#define   AR8327_PORT_LOOKUP_ING_MIRROR_EN    BIT(25)
 +
++#define AR8327_PORT_MIB_COUNTER(_i)           (0x1000 + (_i) * 0x100)
++
 +/* port speed */
 +enum {
 +      AR8XXX_PORT_SPEED_10M = 0,
 +/* port speed */
 +enum {
 +      AR8XXX_PORT_SPEED_10M = 0,
@@ -442,251 +703,6 @@ index 0000000..a29b6d3
 +      AR8XXX_PORT_SPEED_ERR = 3,
 +};
 +
 +      AR8XXX_PORT_SPEED_ERR = 3,
 +};
 +
-+static inline void
-+split_addr(u32 regaddr, u16 *r1, u16 *r2, u16 *page)
-+{
-+      regaddr >>= 1;
-+      *r1 = regaddr & 0x1e;
-+
-+      regaddr >>= 5;
-+      *r2 = regaddr & 0x7;
-+
-+      regaddr >>= 3;
-+      *page = regaddr & 0x1ff;
-+}
-+
-+static inline void
-+wait_for_page_switch(void)
-+{
-+      udelay(5);
-+}
-+
-+#endif /* __AR8XXX_H */
-diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
-index e6f6cc3..fffb9aa 100644
---- a/net/dsa/dsa.c
-+++ b/net/dsa/dsa.c
-@@ -893,6 +893,7 @@ static SIMPLE_DEV_PM_OPS(dsa_pm_ops, dsa_suspend, dsa_resume);
- static const struct of_device_id dsa_of_match_table[] = {
-       { .compatible = "brcm,bcm7445-switch-v4.0" },
-+      { .compatible = "qca,ar8xxx", },
-       { .compatible = "marvell,dsa", },
-       {}
- };
-
-From patchwork Fri May 29 01:42:17 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [2/7] net: dsa: ar8xxx: add ethtool hw statistics support
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477524
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-3-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:17 -0700
-
-MIB counters can now be reported through each switch port by using
-"ethtool -S".
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- drivers/net/dsa/ar8xxx.c | 106 +++++++++++++++++++++++++++++++++++++++++++----
- drivers/net/dsa/ar8xxx.h |  47 +++++++++++++++++++++
- 2 files changed, 146 insertions(+), 7 deletions(-)
-
-diff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c
-index 4ce3ffc..2f0fa4d 100644
---- a/drivers/net/dsa/ar8xxx.c
-+++ b/drivers/net/dsa/ar8xxx.c
-@@ -22,6 +22,55 @@
- #include "ar8xxx.h"
-+#define MIB_DESC(_s, _o, _n)  \
-+      {                       \
-+              .size = (_s),   \
-+              .offset = (_o), \
-+              .name = (_n),   \
-+      }
-+
-+static const struct ar8xxx_mib_desc ar8327_mib[] = {
-+      MIB_DESC(1, 0x00, "RxBroad"),
-+      MIB_DESC(1, 0x04, "RxPause"),
-+      MIB_DESC(1, 0x08, "RxMulti"),
-+      MIB_DESC(1, 0x0c, "RxFcsErr"),
-+      MIB_DESC(1, 0x10, "RxAlignErr"),
-+      MIB_DESC(1, 0x14, "RxRunt"),
-+      MIB_DESC(1, 0x18, "RxFragment"),
-+      MIB_DESC(1, 0x1c, "Rx64Byte"),
-+      MIB_DESC(1, 0x20, "Rx128Byte"),
-+      MIB_DESC(1, 0x24, "Rx256Byte"),
-+      MIB_DESC(1, 0x28, "Rx512Byte"),
-+      MIB_DESC(1, 0x2c, "Rx1024Byte"),
-+      MIB_DESC(1, 0x30, "Rx1518Byte"),
-+      MIB_DESC(1, 0x34, "RxMaxByte"),
-+      MIB_DESC(1, 0x38, "RxTooLong"),
-+      MIB_DESC(2, 0x3c, "RxGoodByte"),
-+      MIB_DESC(2, 0x44, "RxBadByte"),
-+      MIB_DESC(1, 0x4c, "RxOverFlow"),
-+      MIB_DESC(1, 0x50, "Filtered"),
-+      MIB_DESC(1, 0x54, "TxBroad"),
-+      MIB_DESC(1, 0x58, "TxPause"),
-+      MIB_DESC(1, 0x5c, "TxMulti"),
-+      MIB_DESC(1, 0x60, "TxUnderRun"),
-+      MIB_DESC(1, 0x64, "Tx64Byte"),
-+      MIB_DESC(1, 0x68, "Tx128Byte"),
-+      MIB_DESC(1, 0x6c, "Tx256Byte"),
-+      MIB_DESC(1, 0x70, "Tx512Byte"),
-+      MIB_DESC(1, 0x74, "Tx1024Byte"),
-+      MIB_DESC(1, 0x78, "Tx1518Byte"),
-+      MIB_DESC(1, 0x7c, "TxMaxByte"),
-+      MIB_DESC(1, 0x80, "TxOverSize"),
-+      MIB_DESC(2, 0x84, "TxByte"),
-+      MIB_DESC(1, 0x8c, "TxCollision"),
-+      MIB_DESC(1, 0x90, "TxAbortCol"),
-+      MIB_DESC(1, 0x94, "TxMultiCol"),
-+      MIB_DESC(1, 0x98, "TxSingleCol"),
-+      MIB_DESC(1, 0x9c, "TxExcDefer"),
-+      MIB_DESC(1, 0xa0, "TxDefer"),
-+      MIB_DESC(1, 0xa4, "TxLateCol"),
-+};
-+
- u32
- ar8xxx_mii_read32(struct mii_bus *bus, int phy_id, int regnum)
- {
-@@ -184,6 +233,10 @@ static int ar8xxx_setup(struct dsa_switch *ds)
-       if (ret < 0)
-               return ret;
-+      /* Enable MIB counters */
-+      ar8xxx_reg_set(ds, AR8327_REG_MIB, AR8327_MIB_CPU_KEEP);
-+      ar8xxx_write(ds, AR8327_REG_MODULE_EN, AR8327_MODULE_EN_MIB);
-+
-       /* Disable forwarding by default on all ports */
-       for (i = 0; i < AR8327_NUM_PORTS; i++)
-               ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(i),
-@@ -228,6 +281,42 @@ ar8xxx_phy_write(struct dsa_switch *ds, int phy, int regnum, u16 val)
-       return mdiobus_write(bus, phy, regnum, val);
- }
-+static void ar8xxx_get_strings(struct dsa_switch *ds, int phy, uint8_t *data)
-+{
-+      int i;
-+
-+      for (i = 0; i < ARRAY_SIZE(ar8327_mib); i++) {
-+              strncpy(data + i * ETH_GSTRING_LEN, ar8327_mib[i].name,
-+                      ETH_GSTRING_LEN);
-+      }
-+}
-+
-+static void ar8xxx_get_ethtool_stats(struct dsa_switch *ds, int phy,
-+                                   uint64_t *data)
-+{
-+      const struct ar8xxx_mib_desc *mib;
-+      uint32_t reg, i, port;
-+      u64 hi;
-+
-+      port = phy_to_port(phy);
-+
-+      for (i = 0; i < ARRAY_SIZE(ar8327_mib); i++) {
-+              mib = &ar8327_mib[i];
-+              reg = AR8327_PORT_MIB_COUNTER(port) + mib->offset;
-+
-+              data[i] = ar8xxx_read(ds, reg);
-+              if (mib->size == 2) {
-+                      hi = ar8xxx_read(ds, reg + 4);
-+                      data[i] |= hi << 32;
-+              }
-+      }
-+}
-+
-+static int ar8xxx_get_sset_count(struct dsa_switch *ds)
-+{
-+      return ARRAY_SIZE(ar8327_mib);
-+}
-+
- static void ar8xxx_poll_link(struct dsa_switch *ds)
- {
-       int i = 0;
-@@ -275,13 +364,16 @@ static void ar8xxx_poll_link(struct dsa_switch *ds)
- }
- static struct dsa_switch_driver ar8xxx_switch_driver = {
--      .tag_protocol   = DSA_TAG_PROTO_NONE,
--      .probe          = ar8xxx_probe,
--      .setup          = ar8xxx_setup,
--      .set_addr       = ar8xxx_set_addr,
--      .poll_link      = ar8xxx_poll_link,
--      .phy_read       = ar8xxx_phy_read,
--      .phy_write      = ar8xxx_phy_write,
-+      .tag_protocol           = DSA_TAG_PROTO_NONE,
-+      .probe                  = ar8xxx_probe,
-+      .setup                  = ar8xxx_setup,
-+      .set_addr               = ar8xxx_set_addr,
-+      .poll_link              = ar8xxx_poll_link,
-+      .phy_read               = ar8xxx_phy_read,
-+      .phy_write              = ar8xxx_phy_write,
-+      .get_strings            = ar8xxx_get_strings,
-+      .get_ethtool_stats      = ar8xxx_get_ethtool_stats,
-+      .get_sset_count         = ar8xxx_get_sset_count,
- };
- static int __init ar8xxx_init(void)
-diff --git a/drivers/net/dsa/ar8xxx.h b/drivers/net/dsa/ar8xxx.h
-index a29b6d3..7c7a125 100644
---- a/drivers/net/dsa/ar8xxx.h
-+++ b/drivers/net/dsa/ar8xxx.h
-@@ -18,6 +18,12 @@
- #include <linux/delay.h>
-+struct ar8xxx_mib_desc {
-+      unsigned int size;
-+      unsigned int offset;
-+      const char *name;
-+};
-+
- #define AR8327_NUM_PORTS              7
- #define PHY_ID_QCA8337                        0x004dd036
-@@ -31,6 +37,14 @@
- #define   AR8327_PORT_PAD_RGMII_RX_DELAY_EN   BIT(24)
- #define   AR8327_PORT_PAD_SGMII_EN            BIT(7)
-+#define AR8327_REG_MODULE_EN                  0x030
-+#define   AR8327_MODULE_EN_MIB                        BIT(0)
-+#define         AR8327_MODULE_EN_ACL                  BIT(1)
-+#define         AR8327_MODULE_EN_L3                   BIT(2)
-+
-+#define AR8327_REG_MIB                                0x034
-+#define   AR8327_MIB_CPU_KEEP                 BIT(20)
-+
- #define AR8327_REG_PORT_STATUS(_i)            (0x07c + (_i) * 4)
- #define   AR8XXX_PORT_STATUS_SPEED    GENMASK(2, 0)
- #define   AR8XXX_PORT_STATUS_SPEED_S  0
-@@ -52,6 +66,8 @@
- #define   AR8327_PORT_LOOKUP_LEARN            BIT(20)
- #define   AR8327_PORT_LOOKUP_ING_MIRROR_EN    BIT(25)
-+#define AR8327_PORT_MIB_COUNTER(_i)           (0x1000 + (_i) * 0x100)
-+
- /* port speed */
- enum {
-       AR8XXX_PORT_SPEED_10M = 0,
-@@ -60,6 +76,25 @@ enum {
-       AR8XXX_PORT_SPEED_ERR = 3,
- };
 +static inline int port_to_phy(int port)
 +{
 +      if (port >= 1 && port <= 6)
 +static inline int port_to_phy(int port)
 +{
 +      if (port >= 1 && port <= 6)
@@ -705,216 +721,61 @@ index a29b6d3..7c7a125 100644
 +
 +u32
 +ar8xxx_rmw(struct dsa_switch *ds, int reg, u32 mask, u32 val);
 +
 +u32
 +ar8xxx_rmw(struct dsa_switch *ds, int reg, u32 mask, u32 val);
-+
- static inline void
- split_addr(u32 regaddr, u16 *r1, u16 *r2, u16 *page)
- {
-@@ -79,4 +114,16 @@ wait_for_page_switch(void)
-       udelay(5);
- }
-+static inline void
-+ar8xxx_reg_set(struct dsa_switch *ds, int reg, u32 val)
-+{
-+      ar8xxx_rmw(ds, reg, 0, val);
-+}
 +
 +static inline void
 +
 +static inline void
-+ar8xxx_reg_clear(struct dsa_switch *ds, int reg, u32 val)
-+{
-+      ar8xxx_rmw(ds, reg, val, 0);
-+}
-+
- #endif /* __AR8XXX_H */
-
-From patchwork Fri May 29 01:42:18 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [3/7] net: dsa: ar8xxx: add regmap support
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477522
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-4-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:18 -0700
-
-All switch registers can now be dumped using regmap/debugfs.
-
-\# cat /sys/kernel/debug/regmap/<mdiobus>/registers
-0000: 00001302
-0004: ...
-...
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- drivers/net/dsa/Kconfig  |  1 +
- drivers/net/dsa/ar8xxx.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++
- drivers/net/dsa/ar8xxx.h |  5 ++++
- 3 files changed, 66 insertions(+)
-
-diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig
-index 2aae541..17fb296 100644
---- a/drivers/net/dsa/Kconfig
-+++ b/drivers/net/dsa/Kconfig
-@@ -68,6 +68,7 @@ config NET_DSA_BCM_SF2
- config NET_DSA_AR8XXX
-       tristate "Qualcomm Atheros AR8XXX Ethernet switch family support"
-       depends on NET_DSA
-+      select REGMAP
-       ---help---
-         This enables support for the Qualcomm Atheros AR8XXX Ethernet
-         switch chips.
-diff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c
-index 2f0fa4d..327abd4 100644
---- a/drivers/net/dsa/ar8xxx.c
-+++ b/drivers/net/dsa/ar8xxx.c
-@@ -176,6 +176,57 @@ static char *ar8xxx_probe(struct device *host_dev, int sw_addr)
-       }
- }
-+static int ar8xxx_regmap_read(void *ctx, uint32_t reg, uint32_t *val)
-+{
-+      struct dsa_switch *ds = (struct dsa_switch *)ctx;
-+
-+      *val = ar8xxx_read(ds, reg);
-+
-+      return 0;
-+}
-+
-+static int ar8xxx_regmap_write(void *ctx, uint32_t reg, uint32_t val)
++split_addr(u32 regaddr, u16 *r1, u16 *r2, u16 *page)
 +{
 +{
-+      struct dsa_switch *ds = (struct dsa_switch *)ctx;
++      regaddr >>= 1;
++      *r1 = regaddr & 0x1e;
 +
 +
-+      ar8xxx_write(ds, reg, val);
++      regaddr >>= 5;
++      *r2 = regaddr & 0x7;
 +
 +
-+      return 0;
++      regaddr >>= 3;
++      *page = regaddr & 0x1ff;
 +}
 +
 +}
 +
-+static const struct regmap_range ar8xxx_readable_ranges[] = {
-+      regmap_reg_range(0x0000, 0x00e4), /* Global control */
-+      regmap_reg_range(0x0100, 0x0168), /* EEE control */
-+      regmap_reg_range(0x0200, 0x0270), /* Parser control */
-+      regmap_reg_range(0x0400, 0x0454), /* ACL */
-+      regmap_reg_range(0x0600, 0x0718), /* Lookup */
-+      regmap_reg_range(0x0800, 0x0b70), /* QM */
-+      regmap_reg_range(0x0C00, 0x0c80), /* PKT */
-+      regmap_reg_range(0x1000, 0x10ac), /* MIB - Port0 */
-+      regmap_reg_range(0x1100, 0x11ac), /* MIB - Port1 */
-+      regmap_reg_range(0x1200, 0x12ac), /* MIB - Port2 */
-+      regmap_reg_range(0x1300, 0x13ac), /* MIB - Port3 */
-+      regmap_reg_range(0x1400, 0x14ac), /* MIB - Port4 */
-+      regmap_reg_range(0x1500, 0x15ac), /* MIB - Port5 */
-+      regmap_reg_range(0x1600, 0x16ac), /* MIB - Port6 */
-+
-+};
-+
-+static struct regmap_access_table ar8xxx_readable_table = {
-+      .yes_ranges = ar8xxx_readable_ranges,
-+      .n_yes_ranges = ARRAY_SIZE(ar8xxx_readable_ranges),
-+};
-+
-+struct regmap_config ar8xxx_regmap_config = {
-+      .reg_bits = 16,
-+      .val_bits = 32,
-+      .reg_stride = 4,
-+      .max_register = 0x16ac, /* end MIB - Port6 range */
-+      .reg_read = ar8xxx_regmap_read,
-+      .reg_write = ar8xxx_regmap_write,
-+      .rd_table = &ar8xxx_readable_table,
-+};
-+
- static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
- {
-       int reg;
-@@ -219,9 +270,17 @@ static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
- static int ar8xxx_setup(struct dsa_switch *ds)
- {
-+      struct ar8xxx_priv *priv = ds_to_priv(ds);
-       struct net_device *netdev = ds->dst->pd->of_netdev;
-       int ret, i, phy_mode;
-+      /* Start by setting up the register mapping */
-+      priv->regmap = devm_regmap_init(ds->master_dev, NULL, ds,
-+                                      &ar8xxx_regmap_config);
++static inline void
++wait_for_page_switch(void)
++{
++      udelay(5);
++}
 +
 +
-+      if (IS_ERR(priv->regmap))
-+              pr_warn("regmap initialization failed");
++static inline void
++ar8xxx_reg_set(struct dsa_switch *ds, int reg, u32 val)
++{
++      ar8xxx_rmw(ds, reg, 0, val);
++}
 +
 +
-       /* Initialize CPU port pad mode (xMII type, delays...) */
-       phy_mode = of_get_phy_mode(netdev->dev.parent->of_node);
-       if (phy_mode < 0) {
-@@ -365,6 +424,7 @@ static void ar8xxx_poll_link(struct dsa_switch *ds)
- static struct dsa_switch_driver ar8xxx_switch_driver = {
-       .tag_protocol           = DSA_TAG_PROTO_NONE,
-+      .priv_size              = sizeof(struct ar8xxx_priv),
-       .probe                  = ar8xxx_probe,
-       .setup                  = ar8xxx_setup,
-       .set_addr               = ar8xxx_set_addr,
-diff --git a/drivers/net/dsa/ar8xxx.h b/drivers/net/dsa/ar8xxx.h
-index 7c7a125..98cc7ed 100644
---- a/drivers/net/dsa/ar8xxx.h
-+++ b/drivers/net/dsa/ar8xxx.h
-@@ -17,6 +17,11 @@
- #define __AR8XXX_H
- #include <linux/delay.h>
-+#include <linux/regmap.h>
++static inline void
++ar8xxx_reg_clear(struct dsa_switch *ds, int reg, u32 val)
++{
++      ar8xxx_rmw(ds, reg, val, 0);
++}
 +
 +
-+struct ar8xxx_priv {
-+      struct regmap *regmap;
-+};
++#endif /* __AR8XXX_H */
+--- a/net/dsa/dsa.c
++++ b/net/dsa/dsa.c
+@@ -285,6 +285,11 @@ static int dsa_switch_setup_one(struct d
+                       dst->rcv = brcm_netdev_ops.rcv;
+                       break;
+ #endif
++#ifdef CONFIG_NET_DSA_TAG_QCA
++              case DSA_TAG_PROTO_QCA:
++                      dst->rcv = qca_netdev_ops.rcv;
++                      break;
++#endif
+               case DSA_TAG_PROTO_NONE:
+                       break;
+               default:
+@@ -1041,6 +1046,7 @@ static SIMPLE_DEV_PM_OPS(dsa_pm_ops, dsa
  
  
- struct ar8xxx_mib_desc {
-       unsigned int size;
-
-From patchwork Fri May 29 01:42:19 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [4/7] net: dsa: add QCA tag support
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477521
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-5-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:19 -0700
-
-QCA tags are used on QCA ar8xxx switch family. This change adds support
-for encap/decap using 2 bytes header mode.
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- include/net/dsa.h  |   1 +
- net/dsa/Kconfig    |   3 +
- net/dsa/Makefile   |   1 +
- net/dsa/dsa.c      |   5 ++
- net/dsa/dsa_priv.h |   2 +
- net/dsa/slave.c    |   5 ++
- net/dsa/tag_qca.c  | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 7 files changed, 175 insertions(+)
- create mode 100644 net/dsa/tag_qca.c
-
-diff --git a/include/net/dsa.h b/include/net/dsa.h
-index fbca63b..64ddf6f 100644
+ static const struct of_device_id dsa_of_match_table[] = {
+       { .compatible = "brcm,bcm7445-switch-v4.0" },
++      { .compatible = "qca,ar8xxx", },
+       { .compatible = "marvell,dsa", },
+       {}
+ };
 --- a/include/net/dsa.h
 +++ b/include/net/dsa.h
 @@ -26,6 +26,7 @@ enum dsa_tag_protocol {
 --- a/include/net/dsa.h
 +++ b/include/net/dsa.h
 @@ -26,6 +26,7 @@ enum dsa_tag_protocol {
@@ -925,8 +786,6 @@ index fbca63b..64ddf6f 100644
  };
  
  #define DSA_MAX_SWITCHES      4
  };
  
  #define DSA_MAX_SWITCHES      4
-diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig
-index ff7736f..4f3cce1 100644
 --- a/net/dsa/Kconfig
 +++ b/net/dsa/Kconfig
 @@ -26,6 +26,9 @@ config NET_DSA_HWMON
 --- a/net/dsa/Kconfig
 +++ b/net/dsa/Kconfig
 @@ -26,6 +26,9 @@ config NET_DSA_HWMON
@@ -939,8 +798,6 @@ index ff7736f..4f3cce1 100644
  config NET_DSA_TAG_BRCM
        bool
  
  config NET_DSA_TAG_BRCM
        bool
  
-diff --git a/net/dsa/Makefile b/net/dsa/Makefile
-index da06ed1..9feb86c 100644
 --- a/net/dsa/Makefile
 +++ b/net/dsa/Makefile
 @@ -3,6 +3,7 @@ obj-$(CONFIG_NET_DSA) += dsa_core.o
 --- a/net/dsa/Makefile
 +++ b/net/dsa/Makefile
 @@ -3,6 +3,7 @@ obj-$(CONFIG_NET_DSA) += dsa_core.o
@@ -951,27 +808,9 @@ index da06ed1..9feb86c 100644
  dsa_core-$(CONFIG_NET_DSA_TAG_BRCM) += tag_brcm.o
  dsa_core-$(CONFIG_NET_DSA_TAG_DSA) += tag_dsa.o
  dsa_core-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o
  dsa_core-$(CONFIG_NET_DSA_TAG_BRCM) += tag_brcm.o
  dsa_core-$(CONFIG_NET_DSA_TAG_DSA) += tag_dsa.o
  dsa_core-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o
-diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
-index fffb9aa..6010a7d 100644
---- a/net/dsa/dsa.c
-+++ b/net/dsa/dsa.c
-@@ -249,6 +249,11 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct device *parent)
-                       dst->rcv = brcm_netdev_ops.rcv;
-                       break;
- #endif
-+#ifdef CONFIG_NET_DSA_TAG_QCA
-+              case DSA_TAG_PROTO_QCA:
-+                      dst->rcv = qca_netdev_ops.rcv;
-+                      break;
-+#endif
-               case DSA_TAG_PROTO_NONE:
-                       break;
-               default:
-diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h
-index d5f1f9b..350c94b 100644
 --- a/net/dsa/dsa_priv.h
 +++ b/net/dsa/dsa_priv.h
 --- a/net/dsa/dsa_priv.h
 +++ b/net/dsa/dsa_priv.h
-@@ -74,5 +74,7 @@ extern const struct dsa_device_ops trailer_netdev_ops;
+@@ -78,5 +78,7 @@ extern const struct dsa_device_ops trail
  /* tag_brcm.c */
  extern const struct dsa_device_ops brcm_netdev_ops;
  
  /* tag_brcm.c */
  extern const struct dsa_device_ops brcm_netdev_ops;
  
@@ -979,11 +818,9 @@ index d5f1f9b..350c94b 100644
 +extern const struct dsa_device_ops qca_netdev_ops;
  
  #endif
 +extern const struct dsa_device_ops qca_netdev_ops;
  
  #endif
-diff --git a/net/dsa/slave.c b/net/dsa/slave.c
-index 04ffad3..cd8f552 100644
 --- a/net/dsa/slave.c
 +++ b/net/dsa/slave.c
 --- a/net/dsa/slave.c
 +++ b/net/dsa/slave.c
-@@ -925,6 +925,11 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
+@@ -1180,6 +1180,11 @@ int dsa_slave_create(struct dsa_switch *
                p->xmit = brcm_netdev_ops.xmit;
                break;
  #endif
                p->xmit = brcm_netdev_ops.xmit;
                break;
  #endif
@@ -995,9 +832,6 @@ index 04ffad3..cd8f552 100644
        default:
                p->xmit = dsa_slave_notag_xmit;
                break;
        default:
                p->xmit = dsa_slave_notag_xmit;
                break;
-diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c
-new file mode 100644
-index 0000000..8f02196
 --- /dev/null
 +++ b/net/dsa/tag_qca.c
 @@ -0,0 +1,158 @@
 --- /dev/null
 +++ b/net/dsa/tag_qca.c
 @@ -0,0 +1,158 @@
@@ -1159,293 +993,6 @@ index 0000000..8f02196
 +      .xmit   = qca_tag_xmit,
 +      .rcv    = qca_tag_rcv,
 +};
 +      .xmit   = qca_tag_xmit,
 +      .rcv    = qca_tag_rcv,
 +};
-
-From patchwork Fri May 29 01:42:20 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [5/7] net: dsa: ar8xxx: enable QCA header support on AR8xxx
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477527
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-6-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:20 -0700
-
-This change enable support for the QCA headers in QCA83337 driver.
-A 2 bytes header will be added by the switch on every incoming packet
-to identify the ingress port, and the DSA tagging code will add a
-similar 2 bytes header to control which port is used to send a
-particular packet.
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- drivers/net/dsa/Kconfig  |  1 +
- drivers/net/dsa/ar8xxx.c | 28 ++++++++++++++++++++++++++--
- drivers/net/dsa/ar8xxx.h | 22 ++++++++++++++++++++++
- 3 files changed, 49 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig
-index 17fb296..fa8b484 100644
---- a/drivers/net/dsa/Kconfig
-+++ b/drivers/net/dsa/Kconfig
-@@ -68,6 +68,7 @@ config NET_DSA_BCM_SF2
- config NET_DSA_AR8XXX
-       tristate "Qualcomm Atheros AR8XXX Ethernet switch family support"
-       depends on NET_DSA
-+      select NET_DSA_TAG_QCA
-       select REGMAP
-       ---help---
-         This enables support for the Qualcomm Atheros AR8XXX Ethernet
-diff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c
-index 327abd4..4044614 100644
---- a/drivers/net/dsa/ar8xxx.c
-+++ b/drivers/net/dsa/ar8xxx.c
-@@ -292,15 +292,31 @@ static int ar8xxx_setup(struct dsa_switch *ds)
-       if (ret < 0)
-               return ret;
-+      /* Enable CPU Port */
-+      ar8xxx_reg_set(ds, AR8327_REG_GLOBAL_FW_CTRL0,
-+                     AR8327_GLOBAL_FW_CTRL0_CPU_PORT_EN);
-+
-       /* Enable MIB counters */
-       ar8xxx_reg_set(ds, AR8327_REG_MIB, AR8327_MIB_CPU_KEEP);
-       ar8xxx_write(ds, AR8327_REG_MODULE_EN, AR8327_MODULE_EN_MIB);
-+      /* Enable QCA header mode on Port 0 */
-+      ar8xxx_write(ds, AR8327_REG_PORT_HDR_CTRL(0),
-+                   AR8327_PORT_HDR_CTRL_ALL << AR8327_PORT_HDR_CTRL_TX_S |
-+                   AR8327_PORT_HDR_CTRL_ALL << AR8327_PORT_HDR_CTRL_RX_S);
-+
-       /* Disable forwarding by default on all ports */
-       for (i = 0; i < AR8327_NUM_PORTS; i++)
-               ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(i),
-                          AR8327_PORT_LOOKUP_MEMBER, 0);
-+      /* Forward all unknown frames to CPU port for Linux processing */
-+      ar8xxx_write(ds, AR8327_REG_GLOBAL_FW_CTRL1,
-+                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S |
-+                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_BC_DP_S |
-+                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_MC_DP_S |
-+                   BIT(0) << AR8327_GLOBAL_FW_CTRL1_UC_DP_S);
-+
-       /* Setup connection between CPU ports & PHYs */
-       for (i = 0; i < DSA_MAX_PORTS; i++) {
-               /* CPU port gets connected to all PHYs in the switch */
-@@ -312,8 +328,16 @@ static int ar8xxx_setup(struct dsa_switch *ds)
-               /* Invividual PHYs gets connected to CPU port only */
-               if (ds->phys_port_mask & BIT(i)) {
--                      ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy_to_port(i)),
-+                      int phy = phy_to_port(i);
-+
-+                      ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy),
-                                  AR8327_PORT_LOOKUP_MEMBER, BIT(0));
-+
-+                      /* Disable Auto-learning by default so the switch
-+                       * doesn't try to forward the frame to another port
-+                       */
-+                      ar8xxx_reg_clear(ds, AR8327_PORT_LOOKUP_CTRL(phy),
-+                                       AR8327_PORT_LOOKUP_LEARN);
-               }
-       }
-@@ -423,7 +447,7 @@ static void ar8xxx_poll_link(struct dsa_switch *ds)
- }
- static struct dsa_switch_driver ar8xxx_switch_driver = {
--      .tag_protocol           = DSA_TAG_PROTO_NONE,
-+      .tag_protocol           = DSA_TAG_PROTO_QCA,
-       .priv_size              = sizeof(struct ar8xxx_priv),
-       .probe                  = ar8xxx_probe,
-       .setup                  = ar8xxx_setup,
-diff --git a/drivers/net/dsa/ar8xxx.h b/drivers/net/dsa/ar8xxx.h
-index 98cc7ed..e68b92a 100644
---- a/drivers/net/dsa/ar8xxx.h
-+++ b/drivers/net/dsa/ar8xxx.h
-@@ -62,6 +62,28 @@ struct ar8xxx_mib_desc {
- #define   AR8XXX_PORT_STATUS_LINK_AUTO        BIT(9)
- #define   AR8XXX_PORT_STATUS_LINK_PAUSE       BIT(10)
-+#define AR8327_REG_PORT_HDR_CTRL(_i)          (0x9c + (_i * 4))
-+#define   AR8327_PORT_HDR_CTRL_RX_MASK                GENMASK(3, 2)
-+#define   AR8327_PORT_HDR_CTRL_RX_S           2
-+#define   AR8327_PORT_HDR_CTRL_TX_MASK                GENMASK(1, 0)
-+#define   AR8327_PORT_HDR_CTRL_TX_S           0
-+#define   AR8327_PORT_HDR_CTRL_ALL            2
-+#define   AR8327_PORT_HDR_CTRL_MGMT           1
-+#define   AR8327_PORT_HDR_CTRL_NONE           0
-+
-+#define AR8327_REG_GLOBAL_FW_CTRL0            0x620
-+#define   AR8327_GLOBAL_FW_CTRL0_CPU_PORT_EN  BIT(10)
-+
-+#define AR8327_REG_GLOBAL_FW_CTRL1            0x624
-+#define   AR8327_GLOBAL_FW_CTRL1_IGMP_DP_MASK GENMASK(30, 24)
-+#define   AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S    24
-+#define   AR8327_GLOBAL_FW_CTRL1_BC_DP_MASK   GENMASK(22, 16)
-+#define   AR8327_GLOBAL_FW_CTRL1_BC_DP_S      16
-+#define   AR8327_GLOBAL_FW_CTRL1_MC_DP_MASK   GENMASK(14, 8)
-+#define   AR8327_GLOBAL_FW_CTRL1_MC_DP_S      8
-+#define   AR8327_GLOBAL_FW_CTRL1_UC_DP_MASK   GENMASK(6, 0)
-+#define   AR8327_GLOBAL_FW_CTRL1_UC_DP_S      0
-+
- #define AR8327_PORT_LOOKUP_CTRL(_i)           (0x660 + (_i) * 0xc)
- #define   AR8327_PORT_LOOKUP_MEMBER           GENMASK(6, 0)
- #define   AR8327_PORT_LOOKUP_IN_MODE          GENMASK(9, 8)
-
-From patchwork Fri May 29 01:42:21 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [6/7] net: dsa: ar8xxx: add support for second xMII interfaces
- through DT
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477525
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-7-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:21 -0700
-
-This patch is adding support for port6 specific options to device tree.
-They can be used to setup the second xMII interface, and connect it to
-one of the switch port.
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- drivers/net/dsa/ar8xxx.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 50 insertions(+)
-
-diff --git a/drivers/net/dsa/ar8xxx.c b/drivers/net/dsa/ar8xxx.c
-index 4044614..7559249 100644
---- a/drivers/net/dsa/ar8xxx.c
-+++ b/drivers/net/dsa/ar8xxx.c
-@@ -19,6 +19,7 @@
- #include <net/dsa.h>
- #include <linux/phy.h>
- #include <linux/of_net.h>
-+#include <linux/of_platform.h>
- #include "ar8xxx.h"
-@@ -260,6 +261,9 @@ static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
-               ar8xxx_write(ds, AR8327_REG_PORT5_PAD_CTRL,
-                            AR8327_PORT_PAD_RGMII_RX_DELAY_EN);
-               break;
-+      case PHY_INTERFACE_MODE_SGMII:
-+              ar8xxx_write(ds, reg, AR8327_PORT_PAD_SGMII_EN);
-+              break;
-       default:
-               pr_err("xMII mode %d not supported\n", mode);
-               return -EINVAL;
-@@ -268,6 +272,48 @@ static int ar8xxx_set_pad_ctrl(struct dsa_switch *ds, int port, int mode)
-       return 0;
- }
-+static int ar8xxx_of_setup(struct dsa_switch *ds)
-+{
-+      struct device_node *dn = ds->pd->of_node;
-+      const char *s_phymode;
-+      int ret, mode;
-+      u32 phy_id, ctrl;
-+
-+      /* If port6-phy-mode property exists, configure it accordingly */
-+      if (!of_property_read_string(dn, "qca,port6-phy-mode", &s_phymode)) {
-+              for (mode = 0; mode < PHY_INTERFACE_MODE_MAX; mode++)
-+                      if (!strcasecmp(s_phymode, phy_modes(mode)))
-+                              break;
-+
-+              if (mode == PHY_INTERFACE_MODE_MAX)
-+                      pr_err("Unknown phy-mode: \"%s\"\n", s_phymode);
-+
-+              ret = ar8xxx_set_pad_ctrl(ds, 6, mode);
-+              if (ret < 0)
-+                      return ret;
-+      }
-+
-+      /* If a phy ID is specified for PORT6 mac, connect them together */
-+      if (!of_property_read_u32(dn, "qca,port6-phy-id", &phy_id)) {
-+              ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(6),
-+                         AR8327_PORT_LOOKUP_MEMBER, BIT(phy_to_port(phy_id)));
-+              ar8xxx_rmw(ds, AR8327_PORT_LOOKUP_CTRL(phy_to_port(phy_id)),
-+                         AR8327_PORT_LOOKUP_MEMBER, BIT(6));
-+
-+              /* We want the switch to be pass-through and act like a PHY on
-+               * these ports. So BC/MC/UC & IGMP frames need to be accepted
-+               */
-+              ctrl = BIT(phy_to_port(phy_id)) | BIT(6);
-+              ar8xxx_reg_set(ds, AR8327_REG_GLOBAL_FW_CTRL1,
-+                             ctrl << AR8327_GLOBAL_FW_CTRL1_IGMP_DP_S |
-+                             ctrl << AR8327_GLOBAL_FW_CTRL1_BC_DP_S |
-+                             ctrl << AR8327_GLOBAL_FW_CTRL1_MC_DP_S |
-+                             ctrl << AR8327_GLOBAL_FW_CTRL1_UC_DP_S);
-+      }
-+
-+      return 0;
-+}
-+
- static int ar8xxx_setup(struct dsa_switch *ds)
- {
-       struct ar8xxx_priv *priv = ds_to_priv(ds);
-@@ -341,6 +387,10 @@ static int ar8xxx_setup(struct dsa_switch *ds)
-               }
-       }
-+      ret = ar8xxx_of_setup(ds);
-+      if (ret < 0)
-+              return ret;
-+
-       return 0;
- }
-
-From patchwork Fri May 29 01:42:22 2015
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [7/7] Documentation: devicetree: add ar8xxx binding
-From: Mathieu Olivari <mathieu@codeaurora.org>
-X-Patchwork-Id: 477528
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <1432863742-18427-8-git-send-email-mathieu@codeaurora.org>
-To: robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
- ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
- davem@davemloft.net, mathieu@codeaurora.org, andrew@lunn.ch,
- f.fainelli@gmail.com, linux@roeck-us.net, gang.chen.5i5j@gmail.com,
- jiri@resnulli.us, leitec@staticky.com, fabf@skynet.be,
- alexander.h.duyck@intel.com, pavel.nakonechny@skitlab.ru,
- joe@perches.com, sfeldma@gmail.com, nbd@nbd.name, juhosg@openwrt.org
-Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
- netdev@vger.kernel.org
-Date: Thu, 28 May 2015 18:42:22 -0700
-
-Add device-tree binding for ar8xxx switch families.
-
-Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
----
- .../devicetree/bindings/net/dsa/qca-ar8xxx.txt     | 70 ++++++++++++++++++++++
- 1 file changed, 70 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt
-
-diff --git a/Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt b/Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt
-new file mode 100644
-index 0000000..f4fd3f1
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt
 @@ -0,0 +1,70 @@
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/net/dsa/qca-ar8xxx.txt
 @@ -0,0 +1,70 @@
index 691ebb66baef2387e6c794b88e3e0c705661f8ec..d85d8b02aa62b8752a98b209e5d70d64b10da97e 100644 (file)
@@ -121,7 +121,7 @@ Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
  };
 --- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
 +++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
  };
 --- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
 +++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
-@@ -763,6 +763,92 @@
+@@ -755,6 +755,92 @@
  
                        status = "disabled";
                };
  
                        status = "disabled";
                };
index 8c4718e2a62564451ad50480f4e7f9410644a84b..fa78a0aedad9447ed3de4a203c55c3e3e79e6bc2 100644 (file)
@@ -8,8 +8,6 @@ Signed-off-by: Ram Chandra Jangir <rjangi@codeaurora.org>
  drivers/spi/spi-qup.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++--
  1 file changed, 52 insertions(+), 2 deletions(-)
 
  drivers/spi/spi-qup.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++--
  1 file changed, 52 insertions(+), 2 deletions(-)
 
-diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
-index 810a7fa..0808017 100644
 --- a/drivers/spi/spi-qup.c
 +++ b/drivers/spi/spi-qup.c
 @@ -24,6 +24,7 @@
 --- a/drivers/spi/spi-qup.c
 +++ b/drivers/spi/spi-qup.c
 @@ -24,6 +24,7 @@
@@ -28,7 +26,7 @@ index 810a7fa..0808017 100644
  };
  
  
  };
  
  
-@@ -370,7 +372,8 @@ static int spi_qup_do_pio(struct spi_master *master, struct spi_transfer *xfer)
+@@ -370,7 +372,8 @@ static int spi_qup_do_pio(struct spi_mas
                return ret;
        }
  
                return ret;
        }
  
@@ -38,7 +36,7 @@ index 810a7fa..0808017 100644
  
        return 0;
  }
  
        return 0;
  }
-@@ -448,6 +451,7 @@ spi_qup_get_mode(struct spi_master *master, struct spi_transfer *xfer)
+@@ -448,6 +451,7 @@ spi_qup_get_mode(struct spi_master *mast
  {
        struct spi_qup *qup = spi_master_get_devdata(master);
        u32 mode;
  {
        struct spi_qup *qup = spi_master_get_devdata(master);
        u32 mode;
@@ -46,7 +44,7 @@ index 810a7fa..0808017 100644
  
        qup->w_size = 4;
  
  
        qup->w_size = 4;
  
-@@ -458,6 +462,14 @@ spi_qup_get_mode(struct spi_master *master, struct spi_transfer *xfer)
+@@ -458,6 +462,14 @@ spi_qup_get_mode(struct spi_master *mast
  
        qup->n_words = xfer->len / qup->w_size;
  
  
        qup->n_words = xfer->len / qup->w_size;
  
@@ -61,7 +59,7 @@ index 810a7fa..0808017 100644
        if (qup->n_words <= (qup->in_fifo_sz / sizeof(u32)))
                mode = QUP_IO_M_MODE_FIFO;
        else
        if (qup->n_words <= (qup->in_fifo_sz / sizeof(u32)))
                mode = QUP_IO_M_MODE_FIFO;
        else
-@@ -491,7 +503,7 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
+@@ -491,7 +503,7 @@ static int spi_qup_io_config(struct spi_
                return -EIO;
        }
  
                return -EIO;
        }
  
@@ -70,7 +68,7 @@ index 810a7fa..0808017 100644
        n_words = controller->n_words;
  
        if (mode == QUP_IO_M_MODE_FIFO) {
        n_words = controller->n_words;
  
        if (mode == QUP_IO_M_MODE_FIFO) {
-@@ -500,6 +512,7 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
+@@ -500,6 +512,7 @@ static int spi_qup_io_config(struct spi_
                /* must be zero for FIFO */
                writel_relaxed(0, controller->base + QUP_MX_INPUT_CNT);
                writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
                /* must be zero for FIFO */
                writel_relaxed(0, controller->base + QUP_MX_INPUT_CNT);
                writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
@@ -117,7 +115,7 @@ index 810a7fa..0808017 100644
  static int spi_qup_probe(struct platform_device *pdev)
  {
        struct spi_master *master;
  static int spi_qup_probe(struct platform_device *pdev)
  {
        struct spi_master *master;
-@@ -846,6 +891,11 @@ static int spi_qup_probe(struct platform_device *pdev)
+@@ -846,6 +891,11 @@ static int spi_qup_probe(struct platform
        if (of_device_is_compatible(dev->of_node, "qcom,spi-qup-v1.1.1"))
                controller->qup_v1 = 1;
  
        if (of_device_is_compatible(dev->of_node, "qcom,spi-qup-v1.1.1"))
                controller->qup_v1 = 1;
  
@@ -129,6 +127,3 @@ index 810a7fa..0808017 100644
        spin_lock_init(&controller->lock);
        init_completion(&controller->done);
  
        spin_lock_init(&controller->lock);
        init_completion(&controller->done);
  
--- 
-2.7.2
-
index 7573c963a721892695959d319ce32ede75aa5380..dde5822f16cbdeb115a1dd78d0d2a224a0931790 100644 (file)
@@ -18,8 +18,6 @@ Signed-off-by: Ram Chandra Jangir <rjangi@codeaurora.org>
  drivers/watchdog/qcom-wdt.c | 2 ++
  1 file changed, 2 insertions(+)
 
  drivers/watchdog/qcom-wdt.c | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c
-index 773dcfa..002274a 100644
 --- a/drivers/watchdog/qcom-wdt.c
 +++ b/drivers/watchdog/qcom-wdt.c
 @@ -22,6 +22,7 @@
 --- a/drivers/watchdog/qcom-wdt.c
 +++ b/drivers/watchdog/qcom-wdt.c
 @@ -22,6 +22,7 @@
@@ -30,7 +28,7 @@ index 773dcfa..002274a 100644
  #define WDT_BITE_TIME 0x5C
  
  struct qcom_wdt {
  #define WDT_BITE_TIME 0x5C
  
  struct qcom_wdt {
-@@ -44,6 +45,7 @@ static int qcom_wdt_start(struct watchdog_device *wdd)
+@@ -44,6 +45,7 @@ static int qcom_wdt_start(struct watchdo
  
        writel(0, wdt->base + WDT_EN);
        writel(1, wdt->base + WDT_RST);
  
        writel(0, wdt->base + WDT_EN);
        writel(1, wdt->base + WDT_RST);
@@ -38,6 +36,3 @@ index 773dcfa..002274a 100644
        writel(wdd->timeout * wdt->rate, wdt->base + WDT_BITE_TIME);
        writel(1, wdt->base + WDT_EN);
        return 0;
        writel(wdd->timeout * wdt->rate, wdt->base + WDT_BITE_TIME);
        writel(1, wdt->base + WDT_EN);
        return 0;
--- 
-2.7.2
-
index c99f60768f2814ec4466dde736c3c45715c5b6f4..58400314c75b9dbd5cd1048580b98ef62db78469 100644 (file)
@@ -94,7 +94,7 @@
        int limit;
 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
        int limit;
 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-@@ -1639,9 +1639,11 @@ static int stmmac_init_dma_engine(struct
+@@ -1641,9 +1641,11 @@ static int stmmac_init_dma_engine(struct
        int pbl = DEFAULT_DMA_PBL, fixed_burst = 0, burst_len = 0;
        int mixed_burst = 0;
        int atds = 0;
        int pbl = DEFAULT_DMA_PBL, fixed_burst = 0, burst_len = 0;
        int mixed_burst = 0;
        int atds = 0;
                fixed_burst = priv->plat->dma_cfg->fixed_burst;
                mixed_burst = priv->plat->dma_cfg->mixed_burst;
                burst_len = priv->plat->dma_cfg->burst_len;
                fixed_burst = priv->plat->dma_cfg->fixed_burst;
                mixed_burst = priv->plat->dma_cfg->mixed_burst;
                burst_len = priv->plat->dma_cfg->burst_len;
-@@ -1652,7 +1654,7 @@ static int stmmac_init_dma_engine(struct
+@@ -1654,7 +1656,7 @@ static int stmmac_init_dma_engine(struct
  
        return priv->hw->dma->init(priv->ioaddr, pbl, fixed_burst, mixed_burst,
                                   burst_len, priv->dma_tx_phy,
  
        return priv->hw->dma->init(priv->ioaddr, pbl, fixed_burst, mixed_burst,
                                   burst_len, priv->dma_tx_phy,
index 0081a28885efed5facb9ddf64d4af757fb726db7..39f59d36c8c9c3074983c2a0388ed09eef1d6948 100644 (file)
@@ -12,7 +12,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -506,7 +506,12 @@
+@@ -506,7 +506,12 @@ dtb-$(CONFIG_ARCH_QCOM) += \
        qcom-apq8084-ifc6540.dtb \
        qcom-apq8084-mtp.dtb \
        qcom-ipq8064-ap148.dtb \
        qcom-apq8084-ifc6540.dtb \
        qcom-apq8084-mtp.dtb \
        qcom-ipq8064-ap148.dtb \
index 490886ee44daf43d803b02b4789d6bace94b3bab..8d5cbf9102a7052680232251d1e36445fef1eb91 100644 (file)
@@ -18,7 +18,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1927,6 +1927,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
+@@ -1928,6 +1928,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
          The command-line arguments provided by the boot loader will be
          appended to the the device tree bootargs property.
  
          The command-line arguments provided by the boot loader will be
          appended to the the device tree bootargs property.
  
@@ -107,7 +107,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
  static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
  {
        char cmdline[COMMAND_LINE_SIZE];
  static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
  {
        char cmdline[COMMAND_LINE_SIZE];
-@@ -85,12 +134,21 @@ static void merge_fdt_bootargs(void *fdt
+@@ -85,12 +140,21 @@ static void merge_fdt_bootargs(void *fdt
  
        /* and append the ATAG_CMDLINE */
        if (fdt_cmdline) {
  
        /* and append the ATAG_CMDLINE */
        if (fdt_cmdline) {
@@ -129,7 +129,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
        }
        *ptr = '\0';
  
        }
        *ptr = '\0';
  
-@@ -147,7 +205,9 @@ int atags_to_fdt(void *atag_list, void *
+@@ -147,7 +211,9 @@ int atags_to_fdt(void *atag_list, void *
                        else
                                setprop_string(fdt, "/chosen", "bootargs",
                                               atag->u.cmdline.cmdline);
                        else
                                setprop_string(fdt, "/chosen", "bootargs",
                                               atag->u.cmdline.cmdline);
@@ -140,7 +140,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
                        if (memcount >= sizeof(mem_reg_property)/4)
                                continue;
                        if (!atag->u.mem.size)
                        if (memcount >= sizeof(mem_reg_property)/4)
                                continue;
                        if (!atag->u.mem.size)
-@@ -186,6 +246,10 @@ int atags_to_fdt(void *atag_list, void *
+@@ -186,6 +252,10 @@ int atags_to_fdt(void *atag_list, void *
                setprop(fdt, "/memory", "reg", mem_reg_property,
                        4 * memcount * memsize);
        }
                setprop(fdt, "/memory", "reg", mem_reg_property,
                        4 * memcount * memsize);
        }
@@ -164,7 +164,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
  static int kernel_init(void *);
  
  extern void init_IRQ(void);
  static int kernel_init(void *);
  
  extern void init_IRQ(void);
-@@ -585,6 +589,18 @@ asmlinkage __visible void __init start_k
+@@ -560,6 +564,18 @@ asmlinkage __visible void __init start_k
        page_alloc_init();
  
        pr_notice("Kernel command line: %s\n", boot_command_line);
        page_alloc_init();
  
        pr_notice("Kernel command line: %s\n", boot_command_line);
index a236da1efae24ace3322afbd29f74f9b837de7f2..81eccf24bcc56752f2f71efb6285cc0b600aba2f 100644 (file)
@@ -104,7 +104,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +
 +#define PMAC_HD_CTL_AS                (1 << 19)
 +#define PMAC_HD_CTL_RXSH      (1 << 22)
 +
 +#define PMAC_HD_CTL_AS                (1 << 19)
 +#define PMAC_HD_CTL_RXSH      (1 << 22)
++
 +/* Switch Enable (0=disable, 1=enable) */
 +#define GCTL0_SE              0x80000000
 +/* Disable MDIO auto polling (0=disable, 1=enable) */
 +/* Switch Enable (0=disable, 1=enable) */
 +#define GCTL0_SE              0x80000000
 +/* Disable MDIO auto polling (0=disable, 1=enable) */
@@ -124,7 +124,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +#define MDIO_XR9_REG_OFFSET   0
 +#define MDIO_XR9_ADDR_OFFSET  5
 +#define MDIO_XR9_WR_OFFSET    16
 +#define MDIO_XR9_REG_OFFSET   0
 +#define MDIO_XR9_ADDR_OFFSET  5
 +#define MDIO_XR9_WR_OFFSET    16
-+
 +#define LTQ_DMA_ETOP  ((of_machine_is_compatible("lantiq,ase")) ? \
 +                      (INT_NUM_IM3_IRL0) : (INT_NUM_IM2_IRL0))
 +
 +#define LTQ_DMA_ETOP  ((of_machine_is_compatible("lantiq,ase")) ? \
 +                      (INT_NUM_IM3_IRL0) : (INT_NUM_IM2_IRL0))
 +
@@ -333,8 +333,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
 -      ltq_pmu_enable(PMU_PPE);
 +      clk_enable(priv->clk_ppe);
  
 -      ltq_pmu_enable(PMU_PPE);
 +      clk_enable(priv->clk_ppe);
--      switch (priv->pldata->mii_mode) {
++
 +      if (of_machine_is_compatible("lantiq,ar9")) {
 +              ltq_etop_gbit_init(dev);
 +              /* force the etops link to the gbit to MII */
 +      if (of_machine_is_compatible("lantiq,ar9")) {
 +              ltq_etop_gbit_init(dev);
 +              /* force the etops link to the gbit to MII */
@@ -343,7 +342,8 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +      ltq_etop_w32_mask(MDIO_CFG_MASK, 0, LTQ_ETOP_MDIO_CFG);
 +      ltq_etop_w32_mask(MAC_CFG_MASK, MAC_CFG_CGEN | MAC_CFG_DUPLEX |
 +                      MAC_CFG_SPEED | MAC_CFG_LINK, LTQ_ETOP_MAC_CFG);
 +      ltq_etop_w32_mask(MDIO_CFG_MASK, 0, LTQ_ETOP_MDIO_CFG);
 +      ltq_etop_w32_mask(MAC_CFG_MASK, MAC_CFG_CGEN | MAC_CFG_DUPLEX |
 +                      MAC_CFG_SPEED | MAC_CFG_LINK, LTQ_ETOP_MAC_CFG);
-+
+-      switch (priv->pldata->mii_mode) {
 +      switch (mii_mode) {
        case PHY_INTERFACE_MODE_RMII:
 -              ltq_etop_w32_mask(ETOP_MII_MASK,
 +      switch (mii_mode) {
        case PHY_INTERFACE_MODE_RMII:
 -              ltq_etop_w32_mask(ETOP_MII_MASK,
@@ -382,8 +382,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 -      ltq_etop_w32(PPE32_CGEN, LQ_PPE32_ENET_MAC_CFG);
 +      return 0;
 +}
 -      ltq_etop_w32(PPE32_CGEN, LQ_PPE32_ENET_MAC_CFG);
 +      return 0;
 +}
--      ltq_dma_init_port(DMA_PORT_ETOP);
++
 +static int
 +ltq_etop_dma_init(struct net_device *dev)
 +{
 +static int
 +ltq_etop_dma_init(struct net_device *dev)
 +{
@@ -392,21 +391,14 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +      int rx = priv->rx_irq - LTQ_DMA_ETOP;
 +      int err;
  
 +      int rx = priv->rx_irq - LTQ_DMA_ETOP;
 +      int err;
  
+       ltq_dma_init_port(DMA_PORT_ETOP);
 -      for (i = 0; i < MAX_DMA_CHAN; i++) {
 -              int irq = LTQ_DMA_CH0_INT + i;
 -              struct ltq_etop_chan *ch = &priv->ch[i];
 -      for (i = 0; i < MAX_DMA_CHAN; i++) {
 -              int irq = LTQ_DMA_CH0_INT + i;
 -              struct ltq_etop_chan *ch = &priv->ch[i];
-+      ltq_dma_init_port(DMA_PORT_ETOP);
+-
 -              ch->idx = ch->dma.nr = i;
 -              ch->idx = ch->dma.nr = i;
-+      priv->txch.dma.nr = tx;
-+      ltq_dma_alloc_tx(&priv->txch.dma);
-+      err = request_irq(priv->tx_irq, ltq_etop_dma_irq, 0, "eth_tx", priv);
-+      if (err) {
-+              netdev_err(dev, "failed to allocate tx irq\n");
-+              goto err_out;
-+      }
-+      priv->txch.dma.irq = priv->tx_irq;
+-
 -              if (IS_TX(i)) {
 -                      ltq_dma_alloc_tx(&ch->dma);
 -                      request_irq(irq, ltq_etop_dma_irq, 0, "etop_tx", priv);
 -              if (IS_TX(i)) {
 -                      ltq_dma_alloc_tx(&ch->dma);
 -                      request_irq(irq, ltq_etop_dma_irq, 0, "etop_tx", priv);
@@ -418,6 +410,15 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 -                                      return -ENOMEM;
 -                      ch->dma.desc = 0;
 -                      request_irq(irq, ltq_etop_dma_irq, 0, "etop_rx", priv);
 -                                      return -ENOMEM;
 -                      ch->dma.desc = 0;
 -                      request_irq(irq, ltq_etop_dma_irq, 0, "etop_rx", priv);
++      priv->txch.dma.nr = tx;
++      ltq_dma_alloc_tx(&priv->txch.dma);
++      err = request_irq(priv->tx_irq, ltq_etop_dma_irq, 0, "eth_tx", priv);
++      if (err) {
++              netdev_err(dev, "failed to allocate tx irq\n");
++              goto err_out;
++      }
++      priv->txch.dma.irq = priv->tx_irq;
++
 +      priv->rxch.dma.nr = rx;
 +      ltq_dma_alloc_rx(&priv->rxch.dma);
 +      for (priv->rxch.dma.desc = 0; priv->rxch.dma.desc < LTQ_DESC_NUM;
 +      priv->rxch.dma.nr = rx;
 +      ltq_dma_alloc_rx(&priv->rxch.dma);
 +      for (priv->rxch.dma.desc = 0; priv->rxch.dma.desc < LTQ_DESC_NUM;
@@ -655,6 +656,12 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 -      phy_stop(priv->phydev);
 -      for (i = 0; i < MAX_DMA_CHAN; i++) {
 -              struct ltq_etop_chan *ch = &priv->ch[i];
 -      phy_stop(priv->phydev);
 -      for (i = 0; i < MAX_DMA_CHAN; i++) {
 -              struct ltq_etop_chan *ch = &priv->ch[i];
+-
+-              if (!IS_RX(i) && !IS_TX(i))
+-                      continue;
+-              napi_disable(&ch->napi);
+-              ltq_dma_close(&ch->dma);
+-      }
 +      if (priv->phydev)
 +              phy_stop(priv->phydev);
 +      napi_disable(&priv->txch.napi);
 +      if (priv->phydev)
 +              phy_stop(priv->phydev);
 +      napi_disable(&priv->txch.napi);
@@ -664,12 +671,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +      ltq_dma_close(&priv->txch.dma);
 +      ltq_dma_close(&priv->rxch.dma);
 +      spin_unlock_irqrestore(&priv->lock, flags);
 +      ltq_dma_close(&priv->txch.dma);
 +      ltq_dma_close(&priv->rxch.dma);
 +      spin_unlock_irqrestore(&priv->lock, flags);
--              if (!IS_RX(i) && !IS_TX(i))
--                      continue;
--              napi_disable(&ch->napi);
--              ltq_dma_close(&ch->dma);
--      }
++
        return 0;
  }
  
        return 0;
  }
  
@@ -789,7 +791,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!res) {
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!res) {
-@@ -733,31 +943,62 @@ ltq_etop_probe(struct platform_device *p
+@@ -733,30 +943,61 @@ ltq_etop_probe(struct platform_device *p
                goto err_out;
        }
  
                goto err_out;
        }
  
@@ -823,19 +825,10 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
        priv->pdev = pdev;
 -      priv->pldata = dev_get_platdata(&pdev->dev);
        priv->netdev = dev;
        priv->pdev = pdev;
 -      priv->pldata = dev_get_platdata(&pdev->dev);
        priv->netdev = dev;
--      spin_lock_init(&priv->lock);
 +      priv->tx_irq = irqres[0].start;
 +      priv->rx_irq = irqres[1].start;
 +      priv->mii_mode = of_get_phy_mode(pdev->dev.of_node);
 +      priv->tx_irq = irqres[0].start;
 +      priv->rx_irq = irqres[1].start;
 +      priv->mii_mode = of_get_phy_mode(pdev->dev.of_node);
--      for (i = 0; i < MAX_DMA_CHAN; i++) {
--              if (IS_TX(i))
--                      netif_napi_add(dev, &priv->ch[i].napi,
--                              ltq_etop_poll_tx, 8);
--              else if (IS_RX(i))
--                      netif_napi_add(dev, &priv->ch[i].napi,
--                              ltq_etop_poll_rx, 32);
--              priv->ch[i].netdev = dev;
++
 +      mac = of_get_mac_address(pdev->dev.of_node);
 +      if (mac)
 +              memcpy(priv->mac, mac, ETH_ALEN);
 +      mac = of_get_mac_address(pdev->dev.of_node);
 +      if (mac)
 +              memcpy(priv->mac, mac, ETH_ALEN);
@@ -855,18 +848,26 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +              priv->clk_ephycgu = clk_get(&pdev->dev, "ephycgu");
 +              if (IS_ERR(priv->clk_ephycgu))
 +                      return PTR_ERR(priv->clk_ephycgu);
 +              priv->clk_ephycgu = clk_get(&pdev->dev, "ephycgu");
 +              if (IS_ERR(priv->clk_ephycgu))
 +                      return PTR_ERR(priv->clk_ephycgu);
-       }
-+      spin_lock_init(&priv->lock);
++      }
 +
 +
+       spin_lock_init(&priv->lock);
+-      for (i = 0; i < MAX_DMA_CHAN; i++) {
+-              if (IS_TX(i))
+-                      netif_napi_add(dev, &priv->ch[i].napi,
+-                              ltq_etop_poll_tx, 8);
+-              else if (IS_RX(i))
+-                      netif_napi_add(dev, &priv->ch[i].napi,
+-                              ltq_etop_poll_rx, 32);
+-              priv->ch[i].netdev = dev;
+-      }
 +      netif_napi_add(dev, &priv->txch.napi, ltq_etop_poll_tx, 8);
 +      netif_napi_add(dev, &priv->rxch.napi, ltq_etop_poll_rx, 32);
 +      priv->txch.netdev = dev;
 +      priv->rxch.netdev = dev;
 +      netif_napi_add(dev, &priv->txch.napi, ltq_etop_poll_tx, 8);
 +      netif_napi_add(dev, &priv->rxch.napi, ltq_etop_poll_rx, 32);
 +      priv->txch.netdev = dev;
 +      priv->rxch.netdev = dev;
-+
        err = register_netdev(dev);
        if (err)
        err = register_netdev(dev);
        if (err)
-               goto err_free;
 @@ -785,31 +1026,22 @@ ltq_etop_remove(struct platform_device *
        return 0;
  }
 @@ -785,31 +1026,22 @@ ltq_etop_remove(struct platform_device *
        return 0;
  }
index 4c45e4f8a1438a45cc6f8fdf8968f97ff330aa9d..087d923f7d7ba30badbfcc12c6cee5982c0b3048 100644 (file)
@@ -82,7 +82,6 @@
 -      if (!ltq_mtd->res) {
 -              dev_err(&pdev->dev, "failed to get memory resource\n");
 -              return -ENOENT;
 -      if (!ltq_mtd->res) {
 -              dev_err(&pdev->dev, "failed to get memory resource\n");
 -              return -ENOENT;
--      }
 +      for (i = 0; i < pdev->num_resources; i++) {
 +              printk(KERN_NOTICE "lantiq nor flash device: %.8llx at %.8llx\n",
 +                     (unsigned long long)resource_size(&pdev->resource[i]),
 +      for (i = 0; i < pdev->num_resources; i++) {
 +              printk(KERN_NOTICE "lantiq nor flash device: %.8llx at %.8llx\n",
 +                     (unsigned long long)resource_size(&pdev->resource[i]),
 +                      dev_err(&pdev->dev, "Could not reserve memory region\n");
 +                      return -ENOMEM;
 +              }
 +                      dev_err(&pdev->dev, "Could not reserve memory region\n");
 +                      return -ENOMEM;
 +              }
--      ltq_mtd->map = devm_kzalloc(&pdev->dev, sizeof(struct map_info),
--                                  GFP_KERNEL);
--      if (!ltq_mtd->map)
--              return -ENOMEM;
++
 +              ltq_mtd->map[i].name = ltq_map_name;
 +              ltq_mtd->map[i].bankwidth = 2;
 +              ltq_mtd->map[i].read = ltq_read16;
 +              ltq_mtd->map[i].write = ltq_write16;
 +              ltq_mtd->map[i].copy_from = ltq_copy_from;
 +              ltq_mtd->map[i].copy_to = ltq_copy_to;
 +              ltq_mtd->map[i].name = ltq_map_name;
 +              ltq_mtd->map[i].bankwidth = 2;
 +              ltq_mtd->map[i].read = ltq_read16;
 +              ltq_mtd->map[i].write = ltq_write16;
 +              ltq_mtd->map[i].copy_from = ltq_copy_from;
 +              ltq_mtd->map[i].copy_to = ltq_copy_to;
--      if (of_find_property(pdev->dev.of_node, "lantiq,noxip", NULL))
--              ltq_mtd->map->phys = NO_XIP;
--      else
--              ltq_mtd->map->phys = ltq_mtd->res->start;
--      ltq_mtd->res->start;
--      ltq_mtd->map->size = resource_size(ltq_mtd->res);
--      ltq_mtd->map->virt = devm_ioremap_resource(&pdev->dev, ltq_mtd->res);
--      if (IS_ERR(ltq_mtd->map->virt))
--              return PTR_ERR(ltq_mtd->map->virt);
++
 +              if (of_find_property(pdev->dev.of_node, "lantiq,noxip", NULL))
 +                      ltq_mtd->map[i].phys = NO_XIP;
 +              else
 +              if (of_find_property(pdev->dev.of_node, "lantiq,noxip", NULL))
 +                      ltq_mtd->map[i].phys = NO_XIP;
 +              else
 +                                               ltq_mtd->map[i].size);
 +              if (IS_ERR(ltq_mtd->map[i].virt))
 +                      return PTR_ERR(ltq_mtd->map[i].virt);
 +                                               ltq_mtd->map[i].size);
 +              if (IS_ERR(ltq_mtd->map[i].virt))
 +                      return PTR_ERR(ltq_mtd->map[i].virt);
--      ltq_mtd->map->name = ltq_map_name;
--      ltq_mtd->map->bankwidth = 2;
--      ltq_mtd->map->read = ltq_read16;
--      ltq_mtd->map->write = ltq_write16;
--      ltq_mtd->map->copy_from = ltq_copy_from;
--      ltq_mtd->map->copy_to = ltq_copy_to;
++
 +              if (ltq_mtd->map[i].virt == NULL) {
 +                      dev_err(&pdev->dev, "Failed to ioremap flash region\n");
 +                      err = PTR_ERR(ltq_mtd->map[i].virt);
 +                      goto err_out;
 +              }
 +              if (ltq_mtd->map[i].virt == NULL) {
 +                      dev_err(&pdev->dev, "Failed to ioremap flash region\n");
 +                      err = PTR_ERR(ltq_mtd->map[i].virt);
 +                      goto err_out;
 +              }
--      ltq_mtd->map->map_priv_1 = LTQ_NOR_PROBING;
--      ltq_mtd->mtd = do_map_probe("cfi_probe", ltq_mtd->map);
--      ltq_mtd->map->map_priv_1 = LTQ_NOR_NORMAL;
++
 +              ltq_mtd->map[i].map_priv_1 = LTQ_NOR_PROBING;
 +              for (type = rom_probe_types; !ltq_mtd->mtd[i] && *type; type++)
 +                      ltq_mtd->mtd[i] = do_map_probe(*type, &ltq_mtd->map[i]);
 +              ltq_mtd->map[i].map_priv_1 = LTQ_NOR_NORMAL;
 +              ltq_mtd->map[i].map_priv_1 = LTQ_NOR_PROBING;
 +              for (type = rom_probe_types; !ltq_mtd->mtd[i] && *type; type++)
 +                      ltq_mtd->mtd[i] = do_map_probe(*type, &ltq_mtd->map[i]);
 +              ltq_mtd->map[i].map_priv_1 = LTQ_NOR_NORMAL;
--      if (!ltq_mtd->mtd) {
--              dev_err(&pdev->dev, "probing failed\n");
--              return -ENXIO;
++
 +              if (!ltq_mtd->mtd[i]) {
 +                      dev_err(&pdev->dev, "probing failed\n");
 +                      return -ENXIO;
 +              if (!ltq_mtd->mtd[i]) {
 +                      dev_err(&pdev->dev, "probing failed\n");
 +                      return -ENXIO;
 +              cfi->addr_unlock2 ^= 1;
        }
  
 +              cfi->addr_unlock2 ^= 1;
        }
  
--      ltq_mtd->mtd->dev.parent = &pdev->dev;
+-      ltq_mtd->map = devm_kzalloc(&pdev->dev, sizeof(struct map_info),
+-                                  GFP_KERNEL);
+-      if (!ltq_mtd->map)
+-              return -ENOMEM;
 +      if (devices_found == 1) {
 +              ltq_mtd->cmtd = ltq_mtd->mtd[0];
 +      } else if (devices_found > 1) {
 +      if (devices_found == 1) {
 +              ltq_mtd->cmtd = ltq_mtd->mtd[0];
 +      } else if (devices_found > 1) {
 +                      err = -ENXIO;
 +      }
  
 +                      err = -ENXIO;
 +      }
  
+-      if (of_find_property(pdev->dev.of_node, "lantiq,noxip", NULL))
+-              ltq_mtd->map->phys = NO_XIP;
+-      else
+-              ltq_mtd->map->phys = ltq_mtd->res->start;
+-      ltq_mtd->res->start;
+-      ltq_mtd->map->size = resource_size(ltq_mtd->res);
+-      ltq_mtd->map->virt = devm_ioremap_resource(&pdev->dev, ltq_mtd->res);
+-      if (IS_ERR(ltq_mtd->map->virt))
+-              return PTR_ERR(ltq_mtd->map->virt);
+-
+-      ltq_mtd->map->name = ltq_map_name;
+-      ltq_mtd->map->bankwidth = 2;
+-      ltq_mtd->map->read = ltq_read16;
+-      ltq_mtd->map->write = ltq_write16;
+-      ltq_mtd->map->copy_from = ltq_copy_from;
+-      ltq_mtd->map->copy_to = ltq_copy_to;
+-
+-      ltq_mtd->map->map_priv_1 = LTQ_NOR_PROBING;
+-      ltq_mtd->mtd = do_map_probe("cfi_probe", ltq_mtd->map);
+-      ltq_mtd->map->map_priv_1 = LTQ_NOR_NORMAL;
+-
+-      if (!ltq_mtd->mtd) {
+-              dev_err(&pdev->dev, "probing failed\n");
+-              return -ENXIO;
+-      }
+-
+-      ltq_mtd->mtd->dev.parent = &pdev->dev;
+-
 -      cfi = ltq_mtd->map->fldrv_priv;
 -      cfi->addr_unlock1 ^= 1;
 -      cfi->addr_unlock2 ^= 1;
 -      cfi = ltq_mtd->map->fldrv_priv;
 -      cfi->addr_unlock1 ^= 1;
 -      cfi->addr_unlock2 ^= 1;
index 5e18fb4760173686f6ec33b40bcf70d67cae1716..92f34c5fc2fae211b6e0466414714993ad38cefb 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/mtd/nand/mtk_nand.c
 +++ b/drivers/mtd/nand/mtk_nand.c
 --- a/drivers/mtd/nand/mtk_nand.c
 +++ b/drivers/mtd/nand/mtk_nand.c
-@@ -1017,8 +1017,8 @@
+@@ -1017,8 +1017,8 @@ static int mtk_nfc_ooblayout_free(struct
        if (section >= eccsteps)
                return -ERANGE;
  
        if (section >= eccsteps)
                return -ERANGE;
  
@@ -11,7 +11,7 @@
  
        return 0;
  }
  
        return 0;
  }
-@@ -1058,7 +1058,7 @@
+@@ -1058,7 +1058,7 @@ static void mtk_nfc_set_fdm(struct mtk_n
                fdm->reg_size = NFI_FDM_MAX_SIZE;
  
        /* bad block mark storage */
                fdm->reg_size = NFI_FDM_MAX_SIZE;
  
        /* bad block mark storage */
index 6e49100e6a5d6667205bef895076f7e3790c7cea..b975eef5f09d6c2dd8a002ed2acfed645897a4c6 100644 (file)
@@ -18,7 +18,7 @@ Signed-off-by: Michał Osowiecki <michal.osowiecki@gmail.com>
 
 --- a/arch/mips/cavium-octeon/setup.c
 +++ b/arch/mips/cavium-octeon/setup.c
 
 --- a/arch/mips/cavium-octeon/setup.c
 +++ b/arch/mips/cavium-octeon/setup.c
-@@ -944,6 +944,10 @@
+@@ -944,6 +944,10 @@ void __init plat_mem_setup(void)
        if (mem_alloc_size > MAX_MEMORY)
                mem_alloc_size = MAX_MEMORY;
  
        if (mem_alloc_size > MAX_MEMORY)
                mem_alloc_size = MAX_MEMORY;
  
index b3a8dc0f90daeef56f65260332763ef17c947404..a88d5d94b5c9b255558dc9360c55d62e267c57ab 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -602,6 +602,19 @@ config ARCH_LPC32XX
+@@ -603,6 +603,19 @@ config ARCH_LPC32XX
        help
          Support for the NXP LPC32XX family of processors
  
        help
          Support for the NXP LPC32XX family of processors
  
@@ -20,7 +20,7 @@
  config ARCH_PXA
        bool "PXA2xx/PXA3xx-based"
        depends on MMU
  config ARCH_PXA
        bool "PXA2xx/PXA3xx-based"
        depends on MMU
-@@ -882,6 +895,8 @@ source "arch/arm/mach-omap2/Kconfig"
+@@ -883,6 +896,8 @@ source "arch/arm/mach-omap2/Kconfig"
  
  source "arch/arm/mach-orion5x/Kconfig"
  
  
  source "arch/arm/mach-orion5x/Kconfig"
  
index ae262ac97daf4a857682b2ddddf6e386687a9244..500625b4e5a556d7518bdc5084fceb8c0d69a9a8 100644 (file)
@@ -1,6 +1,6 @@
 --- a/arch/mips/ralink/mt7620.c
 +++ b/arch/mips/ralink/mt7620.c
 --- a/arch/mips/ralink/mt7620.c
 +++ b/arch/mips/ralink/mt7620.c
-@@ -389,6 +389,7 @@ void __init ralink_clk_init(void)
+@@ -509,6 +509,7 @@ void __init ralink_clk_init(void)
        unsigned long sys_rate;
        unsigned long dram_rate;
        unsigned long periph_rate;
        unsigned long sys_rate;
        unsigned long dram_rate;
        unsigned long periph_rate;
@@ -8,7 +8,7 @@
  
        xtal_rate = mt7620_get_xtal_rate();
  
  
        xtal_rate = mt7620_get_xtal_rate();
  
-@@ -403,6 +404,7 @@ void __init ralink_clk_init(void)
+@@ -523,6 +524,7 @@ void __init ralink_clk_init(void)
                        cpu_rate = MHZ(575);
                dram_rate = sys_rate = cpu_rate / 3;
                periph_rate = MHZ(40);
                        cpu_rate = MHZ(575);
                dram_rate = sys_rate = cpu_rate / 3;
                periph_rate = MHZ(40);
@@ -16,7 +16,7 @@
  
                ralink_clk_add("10000d00.uartlite", periph_rate);
                ralink_clk_add("10000e00.uartlite", periph_rate);
  
                ralink_clk_add("10000d00.uartlite", periph_rate);
                ralink_clk_add("10000e00.uartlite", periph_rate);
-@@ -414,6 +416,7 @@ void __init ralink_clk_init(void)
+@@ -534,6 +536,7 @@ void __init ralink_clk_init(void)
                dram_rate = mt7620_get_dram_rate(pll_rate);
                sys_rate = mt7620_get_sys_rate(cpu_rate);
                periph_rate = mt7620_get_periph_rate(xtal_rate);
                dram_rate = mt7620_get_dram_rate(pll_rate);
                sys_rate = mt7620_get_sys_rate(cpu_rate);
                periph_rate = mt7620_get_periph_rate(xtal_rate);
@@ -24,7 +24,7 @@
  
                pr_debug(RFMT("XTAL") RFMT("CPU_PLL") RFMT("PLL"),
                         RINT(xtal_rate), RFRAC(xtal_rate),
  
                pr_debug(RFMT("XTAL") RFMT("CPU_PLL") RFMT("PLL"),
                         RINT(xtal_rate), RFRAC(xtal_rate),
-@@ -435,6 +438,8 @@ void __init ralink_clk_init(void)
+@@ -555,6 +558,8 @@ void __init ralink_clk_init(void)
        ralink_clk_add("cpu", cpu_rate);
        ralink_clk_add("10000100.timer", periph_rate);
        ralink_clk_add("10000120.watchdog", periph_rate);
        ralink_clk_add("cpu", cpu_rate);
        ralink_clk_add("10000100.timer", periph_rate);
        ralink_clk_add("10000120.watchdog", periph_rate);