diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2015-12-18 07:25:13 +0000 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2015-12-18 07:25:13 +0000 |
commit | 7caa9411e750279839ac0d253ecac778619412b5 (patch) | |
tree | 93ba95e6f438eb7f0b0b3a2d01cd0d3f387d24d6 /target/linux/brcm47xx/patches-4.4/160-kmap_coherent.patch | |
parent | 4afe0fc2b2ce174f4e9e227e80064c1be77230ca (diff) | |
download | upstream-7caa9411e750279839ac0d253ecac778619412b5.tar.gz upstream-7caa9411e750279839ac0d253ecac778619412b5.tar.bz2 upstream-7caa9411e750279839ac0d253ecac778619412b5.zip |
brcm47xx: add kernel 4.4 support
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
SVN-Revision: 47930
Diffstat (limited to 'target/linux/brcm47xx/patches-4.4/160-kmap_coherent.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-4.4/160-kmap_coherent.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-4.4/160-kmap_coherent.patch b/target/linux/brcm47xx/patches-4.4/160-kmap_coherent.patch new file mode 100644 index 0000000000..3d65fdfd62 --- /dev/null +++ b/target/linux/brcm47xx/patches-4.4/160-kmap_coherent.patch @@ -0,0 +1,78 @@ +From: Jeff Hansen <jhansen@cardaccess-inc.com> +Subject: [PATCH] kmap_coherent + +On ASUS WL-500gP there are some "Data bus error"s when executing simple +commands liks "ps" or "cat /proc/1/cmdline". + +This fixes OpenWrt ticket #1485: https://dev.openwrt.org/ticket/1485 +--- +--- a/arch/mips/include/asm/cpu-features.h ++++ b/arch/mips/include/asm/cpu-features.h +@@ -160,6 +160,9 @@ + #ifndef cpu_has_local_ebase + #define cpu_has_local_ebase 1 + #endif ++#ifndef cpu_use_kmap_coherent ++#define cpu_use_kmap_coherent 1 ++#endif + + /* + * I-Cache snoops remote store. This only matters on SMP. Some multiprocessors +--- a/arch/mips/include/asm/mach-bcm47xx/cpu-feature-overrides.h ++++ b/arch/mips/include/asm/mach-bcm47xx/cpu-feature-overrides.h +@@ -79,4 +79,6 @@ + #define cpu_scache_line_size() 0 + #define cpu_has_vz 0 + ++#define cpu_use_kmap_coherent 0 ++ + #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 + */ + map_coherent = (cpu_has_dc_aliases && + page_mapped(page) && !Page_dcache_dirty(page)); +- if (map_coherent) ++ if (map_coherent && cpu_use_kmap_coherent) + vaddr = kmap_coherent(page, addr); + else + vaddr = kmap_atomic(page); +@@ -625,7 +625,7 @@ static inline void local_r4k_flush_cache + } + + if (vaddr) { +- if (map_coherent) ++ if (map_coherent && cpu_use_kmap_coherent) + kunmap_coherent(); + else + kunmap_atomic(vaddr); +--- a/arch/mips/mm/init.c ++++ b/arch/mips/mm/init.c +@@ -164,7 +164,7 @@ void copy_user_highpage(struct page *to, + void *vfrom, *vto; + + vto = kmap_atomic(to); +- if (cpu_has_dc_aliases && ++ if (cpu_has_dc_aliases && cpu_use_kmap_coherent && + page_mapped(from) && !Page_dcache_dirty(from)) { + vfrom = kmap_coherent(from, vaddr); + copy_page(vto, vfrom); +@@ -186,7 +186,7 @@ void copy_to_user_page(struct vm_area_st + struct page *page, unsigned long vaddr, void *dst, const void *src, + unsigned long len) + { +- if (cpu_has_dc_aliases && ++ if (cpu_has_dc_aliases && cpu_use_kmap_coherent && + page_mapped(page) && !Page_dcache_dirty(page)) { + void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); + memcpy(vto, src, len); +@@ -204,7 +204,7 @@ void copy_from_user_page(struct vm_area_ + struct page *page, unsigned long vaddr, void *dst, const void *src, + unsigned long len) + { +- if (cpu_has_dc_aliases && ++ if (cpu_has_dc_aliases && cpu_use_kmap_coherent && + page_mapped(page) && !Page_dcache_dirty(page)) { + void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); + memcpy(dst, vfrom, len); |