...
 
Commits (731)
subdir-y := accounting auxdisplay blackfin connector \ subdir-y := accounting auxdisplay blackfin connector \
filesystems filesystems ia64 laptops misc-devices \ filesystems filesystems ia64 laptops misc-devices \
networking pcmcia prctl ptp spi timers vDSO video4linux \ pcmcia prctl ptp spi timers vDSO video4linux watchdog
watchdog
...@@ -466,7 +466,9 @@ manner. The codes are the following: ...@@ -466,7 +466,9 @@ manner. The codes are the following:
Note that there is no guarantee that every flag and associated mnemonic will Note that there is no guarantee that every flag and associated mnemonic will
be present in all further kernel releases. Things get changed, the flags may be present in all further kernel releases. Things get changed, the flags may
be vanished or the reverse -- new added. be vanished or the reverse -- new added. Interpretation of their meaning
might change in future as well. So each consumer of these flags has to
follow each specific kernel version for the exact semantic.
This file is only present if the CONFIG_MMU kernel configuration option is This file is only present if the CONFIG_MMU kernel configuration option is
enabled. enabled.
......
...@@ -112,14 +112,11 @@ min_adv_mss - INTEGER ...@@ -112,14 +112,11 @@ min_adv_mss - INTEGER
IP Fragmentation: IP Fragmentation:
ipfrag_high_thresh - INTEGER ipfrag_high_thresh - LONG INTEGER
Maximum memory used to reassemble IP fragments. When Maximum memory used to reassemble IP fragments.
ipfrag_high_thresh bytes of memory is allocated for this purpose,
the fragment handler will toss packets until ipfrag_low_thresh ipfrag_low_thresh - LONG INTEGER
is reached. This also serves as a maximum limit to namespaces (Obsolete since linux-4.4.174, backported from linux-4.17)
different from the initial one.
ipfrag_low_thresh - INTEGER
Maximum memory used to reassemble IP fragments before the kernel Maximum memory used to reassemble IP fragments before the kernel
begins to remove incomplete fragment queues to free up resources. begins to remove incomplete fragment queues to free up resources.
The kernel still accepts new fragments for defragmentation. The kernel still accepts new fragments for defragmentation.
......
# To compile, from the source root
#
# make headers_install
# make M=documentation
# List of programs to build
hostprogs-y := hwtstamp_config timestamping txtimestamp
# Tell kbuild to always build the programs
always := $(hostprogs-y)
HOSTCFLAGS_timestamping.o += -I$(objtree)/usr/include
HOSTCFLAGS_txtimestamp.o += -I$(objtree)/usr/include
HOSTCFLAGS_hwtstamp_config.o += -I$(objtree)/usr/include
VERSION = 4 VERSION = 4
PATCHLEVEL = 4 PATCHLEVEL = 4
SUBLEVEL = 166 SUBLEVEL = 176
EXTRAVERSION = EXTRAVERSION =
NAME = Blurry Fish Butt NAME = Blurry Fish Butt
...@@ -793,6 +793,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) ...@@ -793,6 +793,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
# disable pointer signed / unsigned warnings in gcc 4.0 # disable pointer signed / unsigned warnings in gcc 4.0
KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign) KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
# disable invalid "can't wrap" optimizations for signed / pointers # disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
......
...@@ -55,15 +55,15 @@ ...@@ -55,15 +55,15 @@
#elif defined(CONFIG_ALPHA_DP264) || \ #elif defined(CONFIG_ALPHA_DP264) || \
defined(CONFIG_ALPHA_LYNX) || \ defined(CONFIG_ALPHA_LYNX) || \
defined(CONFIG_ALPHA_SHARK) || \ defined(CONFIG_ALPHA_SHARK)
defined(CONFIG_ALPHA_EIGER)
# define NR_IRQS 64 # define NR_IRQS 64
#elif defined(CONFIG_ALPHA_TITAN) #elif defined(CONFIG_ALPHA_TITAN)
#define NR_IRQS 80 #define NR_IRQS 80
#elif defined(CONFIG_ALPHA_RAWHIDE) || \ #elif defined(CONFIG_ALPHA_RAWHIDE) || \
defined(CONFIG_ALPHA_TAKARA) defined(CONFIG_ALPHA_TAKARA) || \
defined(CONFIG_ALPHA_EIGER)
# define NR_IRQS 128 # define NR_IRQS 128
#elif defined(CONFIG_ALPHA_WILDFIRE) #elif defined(CONFIG_ALPHA_WILDFIRE)
......
...@@ -77,7 +77,7 @@ __load_new_mm_context(struct mm_struct *next_mm) ...@@ -77,7 +77,7 @@ __load_new_mm_context(struct mm_struct *next_mm)
/* Macro for exception fixup code to access integer registers. */ /* Macro for exception fixup code to access integer registers. */
#define dpf_reg(r) \ #define dpf_reg(r) \
(((unsigned long *)regs)[(r) <= 8 ? (r) : (r) <= 15 ? (r)-16 : \ (((unsigned long *)regs)[(r) <= 8 ? (r) : (r) <= 15 ? (r)-16 : \
(r) <= 18 ? (r)+8 : (r)-10]) (r) <= 18 ? (r)+10 : (r)-10])
asmlinkage void asmlinkage void
do_page_fault(unsigned long address, unsigned long mmcsr, do_page_fault(unsigned long address, unsigned long mmcsr,
......
...@@ -96,7 +96,7 @@ endmenu ...@@ -96,7 +96,7 @@ endmenu
choice choice
prompt "ARC Instruction Set" prompt "ARC Instruction Set"
default ISA_ARCOMPACT default ISA_ARCV2
config ISA_ARCOMPACT config ISA_ARCOMPACT
bool "ARCompact ISA" bool "ARCompact ISA"
......
...@@ -12,7 +12,7 @@ ifeq ($(CROSS_COMPILE),) ...@@ -12,7 +12,7 @@ ifeq ($(CROSS_COMPILE),)
CROSS_COMPILE := arc-linux- CROSS_COMPILE := arc-linux-
endif endif
KBUILD_DEFCONFIG := nsim_700_defconfig KBUILD_DEFCONFIG := nsim_hs_defconfig
cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__ cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__
cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7 cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7
......
...@@ -17,6 +17,7 @@ CONFIG_PERF_EVENTS=y ...@@ -17,6 +17,7 @@ CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
# CONFIG_SLUB_DEBUG is not set # CONFIG_SLUB_DEBUG is not set
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
CONFIG_ISA_ARCOMPACT=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_PARTITION_ADVANCED=y CONFIG_PARTITION_ADVANCED=y
CONFIG_ARC_PLAT_AXS10X=y CONFIG_ARC_PLAT_AXS10X=y
...@@ -97,6 +98,7 @@ CONFIG_NTFS_FS=y ...@@ -97,6 +98,7 @@ CONFIG_NTFS_FS=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
......
...@@ -103,6 +103,7 @@ CONFIG_NTFS_FS=y ...@@ -103,6 +103,7 @@ CONFIG_NTFS_FS=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
......
...@@ -104,6 +104,7 @@ CONFIG_NTFS_FS=y ...@@ -104,6 +104,7 @@ CONFIG_NTFS_FS=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
......
...@@ -16,6 +16,7 @@ CONFIG_KALLSYMS_ALL=y ...@@ -16,6 +16,7 @@ CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
# CONFIG_SLUB_DEBUG is not set # CONFIG_SLUB_DEBUG is not set
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
CONFIG_ISA_ARCOMPACT=y
CONFIG_KPROBES=y CONFIG_KPROBES=y
CONFIG_MODULES=y CONFIG_MODULES=y
# CONFIG_LBDAF is not set # CONFIG_LBDAF is not set
......
...@@ -17,6 +17,7 @@ CONFIG_KALLSYMS_ALL=y ...@@ -17,6 +17,7 @@ CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
# CONFIG_SLUB_DEBUG is not set # CONFIG_SLUB_DEBUG is not set
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
CONFIG_ISA_ARCOMPACT=y
CONFIG_KPROBES=y CONFIG_KPROBES=y
CONFIG_MODULES=y CONFIG_MODULES=y
# CONFIG_LBDAF is not set # CONFIG_LBDAF is not set
...@@ -69,5 +70,6 @@ CONFIG_EXT2_FS_XATTR=y ...@@ -69,5 +70,6 @@ CONFIG_EXT2_FS_XATTR=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
# CONFIG_MISC_FILESYSTEMS is not set # CONFIG_MISC_FILESYSTEMS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_ENABLE_MUST_CHECK is not set # CONFIG_ENABLE_MUST_CHECK is not set
...@@ -69,5 +69,6 @@ CONFIG_EXT2_FS_XATTR=y ...@@ -69,5 +69,6 @@ CONFIG_EXT2_FS_XATTR=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
# CONFIG_MISC_FILESYSTEMS is not set # CONFIG_MISC_FILESYSTEMS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_ENABLE_MUST_CHECK is not set # CONFIG_ENABLE_MUST_CHECK is not set
...@@ -88,6 +88,7 @@ CONFIG_EXT2_FS_XATTR=y ...@@ -88,6 +88,7 @@ CONFIG_EXT2_FS_XATTR=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
# CONFIG_MISC_FILESYSTEMS is not set # CONFIG_MISC_FILESYSTEMS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_ENABLE_MUST_CHECK is not set # CONFIG_ENABLE_MUST_CHECK is not set
CONFIG_FTRACE=y CONFIG_FTRACE=y
...@@ -19,6 +19,7 @@ CONFIG_KALLSYMS_ALL=y ...@@ -19,6 +19,7 @@ CONFIG_KALLSYMS_ALL=y
# CONFIG_AIO is not set # CONFIG_AIO is not set
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
CONFIG_ISA_ARCOMPACT=y
CONFIG_SLAB=y CONFIG_SLAB=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y CONFIG_MODULE_FORCE_LOAD=y
......
...@@ -89,6 +89,7 @@ CONFIG_NTFS_FS=y ...@@ -89,6 +89,7 @@ CONFIG_NTFS_FS=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
......
...@@ -91,6 +91,7 @@ CONFIG_NTFS_FS=y ...@@ -91,6 +91,7 @@ CONFIG_NTFS_FS=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_WARN_DEPRECATED is not set
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/unaligned.h>
#ifdef CONFIG_ISA_ARCV2 #ifdef CONFIG_ISA_ARCV2
#include <asm/barrier.h> #include <asm/barrier.h>
...@@ -85,6 +86,42 @@ static inline u32 __raw_readl(const volatile void __iomem *addr) ...@@ -85,6 +86,42 @@ static inline u32 __raw_readl(const volatile void __iomem *addr)
return w; return w;
} }
/*
* {read,write}s{b,w,l}() repeatedly access the same IO address in
* native endianness in 8-, 16-, 32-bit chunks {into,from} memory,
* @count times
*/
#define __raw_readsx(t,f) \
static inline void __raw_reads##f(const volatile void __iomem *addr, \
void *ptr, unsigned int count) \
{ \
bool is_aligned = ((unsigned long)ptr % ((t) / 8)) == 0; \
u##t *buf = ptr; \
\
if (!count) \
return; \
\
/* Some ARC CPU's don't support unaligned accesses */ \
if (is_aligned) { \
do { \
u##t x = __raw_read##f(addr); \
*buf++ = x; \
} while (--count); \
} else { \
do { \
u##t x = __raw_read##f(addr); \
put_unaligned(x, buf++); \
} while (--count); \
} \
}
#define __raw_readsb __raw_readsb
__raw_readsx(8, b)
#define __raw_readsw __raw_readsw
__raw_readsx(16, w)
#define __raw_readsl __raw_readsl
__raw_readsx(32, l)
#define __raw_writeb __raw_writeb #define __raw_writeb __raw_writeb
static inline void __raw_writeb(u8 b, volatile void __iomem *addr) static inline void __raw_writeb(u8 b, volatile void __iomem *addr)
{ {
...@@ -117,6 +154,35 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr) ...@@ -117,6 +154,35 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr)
} }
#define __raw_writesx(t,f) \
static inline void __raw_writes##f(volatile void __iomem *addr, \
const void *ptr, unsigned int count) \
{ \
bool is_aligned = ((unsigned long)ptr % ((t) / 8)) == 0; \
const u##t *buf = ptr; \
\
if (!count) \
return; \
\
/* Some ARC CPU's don't support unaligned accesses */ \
if (is_aligned) { \
do { \
__raw_write##f(*buf++, addr); \
} while (--count); \
} else { \
do { \
__raw_write##f(get_unaligned(buf++), addr); \
} while (--count); \
} \
}
#define __raw_writesb __raw_writesb
__raw_writesx(8, b)
#define __raw_writesw __raw_writesw
__raw_writesx(16, w)
#define __raw_writesl __raw_writesl
__raw_writesx(32, l)
/* /*
* MMIO can also get buffered/optimized in micro-arch, so barriers needed * MMIO can also get buffered/optimized in micro-arch, so barriers needed
* Based on ARM model for the typical use case * Based on ARM model for the typical use case
...@@ -132,10 +198,16 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr) ...@@ -132,10 +198,16 @@ static inline void __raw_writel(u32 w, volatile void __iomem *addr)
#define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; }) #define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; })
#define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; }) #define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; })
#define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; })
#define readsb(p,d,l) ({ __raw_readsb(p,d,l); __iormb(); })
#define readsw(p,d,l) ({ __raw_readsw(p,d,l); __iormb(); })
#define readsl(p,d,l) ({ __raw_readsl(p,d,l); __iormb(); })
#define writeb(v,c) ({ __iowmb(); writeb_relaxed(v,c); }) #define writeb(v,c) ({ __iowmb(); writeb_relaxed(v,c); })
#define writew(v,c) ({ __iowmb(); writew_relaxed(v,c); }) #define writew(v,c) ({ __iowmb(); writew_relaxed(v,c); })
#define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); }) #define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); })
#define writesb(p,d,l) ({ __iowmb(); __raw_writesb(p,d,l); })
#define writesw(p,d,l) ({ __iowmb(); __raw_writesw(p,d,l); })
#define writesl(p,d,l) ({ __iowmb(); __raw_writesl(p,d,l); })
/* /*
* Relaxed API for drivers which can handle barrier ordering themselves * Relaxed API for drivers which can handle barrier ordering themselves
......
...@@ -103,7 +103,8 @@ static const char * const arc_pmu_ev_hw_map[] = { ...@@ -103,7 +103,8 @@ static const char * const arc_pmu_ev_hw_map[] = {
/* counts condition */ /* counts condition */
[PERF_COUNT_HW_INSTRUCTIONS] = "iall", [PERF_COUNT_HW_INSTRUCTIONS] = "iall",
[PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = "ijmp", /* Excludes ZOL jumps */ /* All jump instructions that are taken */
[PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = "ijmptak",
[PERF_COUNT_ARC_BPOK] = "bpok", /* NP-NT, PT-T, PNT-NT */ [PERF_COUNT_ARC_BPOK] = "bpok", /* NP-NT, PT-T, PNT-NT */
#ifdef CONFIG_ISA_ARCV2 #ifdef CONFIG_ISA_ARCV2
[PERF_COUNT_HW_BRANCH_MISSES] = "bpmp", [PERF_COUNT_HW_BRANCH_MISSES] = "bpmp",
......
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
sound { sound {
compatible = "simple-audio-card"; compatible = "simple-audio-card";
simple-audio-card,name = "DA850/OMAP-L138 EVM"; simple-audio-card,name = "DA850-OMAPL138 EVM";
simple-audio-card,widgets = simple-audio-card,widgets =
"Line", "Line In", "Line", "Line In",
"Line", "Line Out"; "Line", "Line Out";
......
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
compatible = "gpio-fan"; compatible = "gpio-fan";
pinctrl-0 = <&pmx_fan_high_speed &pmx_fan_low_speed>; pinctrl-0 = <&pmx_fan_high_speed &pmx_fan_low_speed>;
pinctrl-names = "default"; pinctrl-names = "default";
gpios = <&gpio1 14 GPIO_ACTIVE_LOW gpios = <&gpio1 14 GPIO_ACTIVE_HIGH
&gpio1 13 GPIO_ACTIVE_LOW>; &gpio1 13 GPIO_ACTIVE_HIGH>;
gpio-fan,speed-map = <0 0 gpio-fan,speed-map = <0 0
3000 1 3000 1
6000 2>; 6000 2>;
......
...@@ -220,12 +220,15 @@ ...@@ -220,12 +220,15 @@
status = "disabled"; status = "disabled";
}; };
twsi2: i2c@d4025000 { twsi2: i2c@d4031000 {
compatible = "mrvl,mmp-twsi"; compatible = "mrvl,mmp-twsi";
reg = <0xd4025000 0x1000>; reg = <0xd4031000 0x1000>;
interrupts = <58>; interrupt-parent = <&intcmux17>;
interrupts = <0>;
clocks = <&soc_clocks MMP2_CLK_TWSI1>; clocks = <&soc_clocks MMP2_CLK_TWSI1>;
resets = <&soc_clocks MMP2_CLK_TWSI1>; resets = <&soc_clocks MMP2_CLK_TWSI1>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled"; status = "disabled";
}; };
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
gpio = <&gpio2 16 GPIO_ACTIVE_HIGH>; /* gpio line 48 */ gpio = <&gpio2 16 GPIO_ACTIVE_HIGH>; /* gpio line 48 */
enable-active-high; enable-active-high;
regulator-boot-on; regulator-boot-on;
startup-delay-us = <25000>;
}; };
vbat: fixedregulator-vbat { vbat: fixedregulator-vbat {
......
...@@ -796,6 +796,21 @@ void smp_send_stop(void) ...@@ -796,6 +796,21 @@ void smp_send_stop(void)
pr_warn("SMP: failed to stop secondary CPUs\n"); pr_warn("SMP: failed to stop secondary CPUs\n");
} }
/* In case panic() and panic() called at the same time on CPU1 and CPU2,
* and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop()
* CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online,
* kdump fails. So split out the panic_smp_self_stop() and add
* set_cpu_online(smp_processor_id(), false).
*/
void panic_smp_self_stop(void)
{
pr_debug("CPU %u will stop doing anything useful since another CPU has paniced\n",
smp_processor_id());
set_cpu_online(smp_processor_id(), false);
while (1)
cpu_relax();
}
/* /*
* not supported here * not supported here
*/ */
......
...@@ -118,6 +118,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run) ...@@ -118,6 +118,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
vcpu_set_reg(vcpu, vcpu->arch.mmio_decode.rt, data); vcpu_set_reg(vcpu, vcpu->arch.mmio_decode.rt, data);
} }
/*
* The MMIO instruction is emulated and should not be re-executed
* in the guest.
*/
kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
return 0; return 0;
} }
...@@ -151,11 +157,6 @@ static int decode_hsr(struct kvm_vcpu *vcpu, bool *is_write, int *len) ...@@ -151,11 +157,6 @@ static int decode_hsr(struct kvm_vcpu *vcpu, bool *is_write, int *len)
vcpu->arch.mmio_decode.sign_extend = sign_extend; vcpu->arch.mmio_decode.sign_extend = sign_extend;
vcpu->arch.mmio_decode.rt = rt; vcpu->arch.mmio_decode.rt = rt;
/*
* The MMIO instruction is emulated and should not be re-executed
* in the guest.
*/
kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
return 0; return 0;
} }
......
...@@ -83,7 +83,7 @@ static void __iomem *cns3xxx_pci_map_bus(struct pci_bus *bus, ...@@ -83,7 +83,7 @@ static void __iomem *cns3xxx_pci_map_bus(struct pci_bus *bus,
} else /* remote PCI bus */ } else /* remote PCI bus */
base = cnspci->cfg1_regs + ((busno & 0xf) << 20); base = cnspci->cfg1_regs + ((busno & 0xf) << 20);
return base + (where & 0xffc) + (devfn << 12); return base + where + (devfn << 12);
} }
static int cns3xxx_pci_read_config(struct pci_bus *bus, unsigned int devfn, static int cns3xxx_pci_read_config(struct pci_bus *bus, unsigned int devfn,
......
...@@ -97,7 +97,7 @@ int __init imx6sx_cpuidle_init(void) ...@@ -97,7 +97,7 @@ int __init imx6sx_cpuidle_init(void)
* except for power up sw2iso which need to be * except for power up sw2iso which need to be
* larger than LDO ramp up time. * larger than LDO ramp up time.
*/ */
imx_gpc_set_arm_power_up_timing(2, 1); imx_gpc_set_arm_power_up_timing(0xf, 1);
imx_gpc_set_arm_power_down_timing(1, 1); imx_gpc_set_arm_power_down_timing(1, 1);
return cpuidle_register(&imx6sx_cpuidle_driver, NULL); return cpuidle_register(&imx6sx_cpuidle_driver, NULL);
......
...@@ -394,7 +394,11 @@ static int __init_refok impd1_probe(struct lm_device *dev) ...@@ -394,7 +394,11 @@ static int __init_refok impd1_probe(struct lm_device *dev)
sizeof(*lookup) + 3 * sizeof(struct gpiod_lookup), sizeof(*lookup) + 3 * sizeof(struct gpiod_lookup),
GFP_KERNEL); GFP_KERNEL);
chipname = devm_kstrdup(&dev->dev, devname, GFP_KERNEL); chipname = devm_kstrdup(&dev->dev, devname, GFP_KERNEL);
mmciname = kasprintf(GFP_KERNEL, "lm%x:00700", dev->id); mmciname = devm_kasprintf(&dev->dev, GFP_KERNEL,
"lm%x:00700", dev->id);
if (!lookup || !chipname || !mmciname)
return -ENOMEM;
lookup->dev_id = mmciname; lookup->dev_id = mmciname;
/* /*
* Offsets on GPIO block 1: * Offsets on GPIO block 1:
......
...@@ -75,8 +75,7 @@ void __init n2100_map_io(void) ...@@ -75,8 +75,7 @@ void __init n2100_map_io(void)
/* /*
* N2100 PCI. * N2100 PCI.
*/ */
static int __init static int n2100_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
n2100_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{ {
int irq; int irq;
......
...@@ -511,6 +511,9 @@ static void modem_pm(struct uart_port *port, unsigned int state, unsigned old) ...@@ -511,6 +511,9 @@ static void modem_pm(struct uart_port *port, unsigned int state, unsigned old)
{ {
struct modem_private_data *priv = port->private_data; struct modem_private_data *priv = port->private_data;
if (!priv)
return;
if (IS_ERR(priv->regulator)) if (IS_ERR(priv->regulator))
return; return;
......
...@@ -2526,7 +2526,7 @@ static int __init _init(struct omap_hwmod *oh, void *data) ...@@ -2526,7 +2526,7 @@ static int __init _init(struct omap_hwmod *oh, void *data)
* a stub; implementing this properly requires iclk autoidle usecounting in * a stub; implementing this properly requires iclk autoidle usecounting in
* the clock code. No return value. * the clock code. No return value.
*/ */
static void __init _setup_iclk_autoidle(struct omap_hwmod *oh) static void _setup_iclk_autoidle(struct omap_hwmod *oh)
{ {
struct omap_hwmod_ocp_if *os; struct omap_hwmod_ocp_if *os;
struct list_head *p; struct list_head *p;
...@@ -2561,7 +2561,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh) ...@@ -2561,7 +2561,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)
* reset. Returns 0 upon success or a negative error code upon * reset. Returns 0 upon success or a negative error code upon
* failure. * failure.
*/ */
static int __init _setup_reset(struct omap_hwmod *oh) static int _setup_reset(struct omap_hwmod *oh)
{ {
int r; int r;
...@@ -2622,7 +2622,7 @@ static int __init _setup_reset(struct omap_hwmod *oh) ...@@ -2622,7 +2622,7 @@ static int __init _setup_reset(struct omap_hwmod *oh)
* *
* No return value. * No return value.
*/ */
static void __init _setup_postsetup(struct omap_hwmod *oh) static void _setup_postsetup(struct omap_hwmod *oh)
{ {
u8 postsetup_state; u8 postsetup_state;
......
...@@ -344,7 +344,7 @@ static void omap44xx_prm_reconfigure_io_chain(void) ...@@ -344,7 +344,7 @@ static void omap44xx_prm_reconfigure_io_chain(void)
* to occur, WAKEUPENABLE bits must be set in the pad mux registers, and * to occur, WAKEUPENABLE bits must be set in the pad mux registers, and
* omap44xx_prm_reconfigure_io_chain() must be called. No return value. * omap44xx_prm_reconfigure_io_chain() must be called. No return value.
*/ */
static void __init omap44xx_prm_enable_io_wakeup(void) static void omap44xx_prm_enable_io_wakeup(void)
{ {
s32 inst = omap4_prmst_get_prm_dev_inst(); s32 inst = omap4_prmst_get_prm_dev_inst();
......
...@@ -547,7 +547,7 @@ static struct pxa3xx_u2d_platform_data cm_x300_u2d_platform_data = { ...@@ -547,7 +547,7 @@ static struct pxa3xx_u2d_platform_data cm_x300_u2d_platform_data = {
.exit = cm_x300_u2d_exit, .exit = cm_x300_u2d_exit,
}; };
static void cm_x300_init_u2d(void) static void __init cm_x300_init_u2d(void)
{ {
pxa3xx_set_u2d_info(&cm_x300_u2d_platform_data); pxa3xx_set_u2d_info(&cm_x300_u2d_platform_data);
} }
......
...@@ -183,7 +183,7 @@ static struct pxafb_mach_info littleton_lcd_info = { ...@@ -183,7 +183,7 @@ static struct pxafb_mach_info littleton_lcd_info = {
.lcd_conn = LCD_COLOR_TFT_16BPP, .lcd_conn = LCD_COLOR_TFT_16BPP,
}; };
static void littleton_init_lcd(void) static void __init littleton_init_lcd(void)
{ {
pxa_set_fb_info(NULL, &littleton_lcd_info); pxa_set_fb_info(NULL, &littleton_lcd_info);
} }
......
...@@ -558,7 +558,7 @@ static struct pxaohci_platform_data zeus_ohci_platform_data = { ...@@ -558,7 +558,7 @@ static struct pxaohci_platform_data zeus_ohci_platform_data = {
.flags = ENABLE_PORT_ALL | POWER_SENSE_LOW, .flags = ENABLE_PORT_ALL | POWER_SENSE_LOW,
}; };
static void zeus_register_ohci(void) static void __init zeus_register_ohci(void)
{ {
/* Port 2 is shared between host and client interface. */ /* Port 2 is shared between host and client interface. */
UP2OCR = UP2OCR_HXOE | UP2OCR_HXS | UP2OCR_DMPDE | UP2OCR_DPPDE; UP2OCR = UP2OCR_HXOE | UP2OCR_HXS | UP2OCR_DMPDE | UP2OCR_DPPDE;
......
...@@ -359,14 +359,16 @@ v7_dma_inv_range: ...@@ -359,14 +359,16 @@ v7_dma_inv_range:
ALT_UP(W(nop)) ALT_UP(W(nop))
#endif #endif
mcrne p15, 0, r0, c7, c14, 1 @ clean & invalidate D / U line mcrne p15, 0, r0, c7, c14, 1 @ clean & invalidate D / U line
addne r0, r0, r2
tst r1, r3 tst r1, r3
bic r1, r1, r3 bic r1, r1, r3
mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D / U line mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D / U line
1:
mcr p15, 0, r0, c7, c6, 1 @ invalidate D / U line
add r0, r0, r2
cmp r0, r1 cmp r0, r1
1:
mcrlo p15, 0, r0, c7, c6, 1 @ invalidate D / U line
addlo r0, r0, r2
cmplo r0, r1
blo 1b blo 1b
dsb st dsb st
ret lr ret lr
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#include <asm/types.h> #include <asm/types.h>
/* Hyp Configuration Register (HCR) bits */ /* Hyp Configuration Register (HCR) bits */
#define HCR_API (UL(1) << 41)
#define HCR_APK (UL(1) << 40)
#define HCR_ID (UL(1) << 33) #define HCR_ID (UL(1) << 33)
#define HCR_CD (UL(1) << 32) #define HCR_CD (UL(1) << 32)
#define HCR_RW_SHIFT 31 #define HCR_RW_SHIFT 31
...@@ -81,6 +83,7 @@ ...@@ -81,6 +83,7 @@
HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW) HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW)
#define HCR_VIRT_EXCP_MASK (HCR_VA | HCR_VI | HCR_VF) #define HCR_VIRT_EXCP_MASK (HCR_VA | HCR_VI | HCR_VF)
#define HCR_INT_OVERRIDE (HCR_FMO | HCR_IMO) #define HCR_INT_OVERRIDE (HCR_FMO | HCR_IMO)
#define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK)
/* Hyp System Control Register (SCTLR_EL2) bits */ /* Hyp System Control Register (SCTLR_EL2) bits */
......
...@@ -78,7 +78,6 @@ ...@@ -78,7 +78,6 @@
.macro mcount_get_lr reg .macro mcount_get_lr reg
ldr \reg, [x29] ldr \reg, [x29]
ldr \reg, [\reg, #8] ldr \reg, [\reg, #8]
mcount_adjust_addr \reg, \reg
.endm .endm
.macro mcount_get_lr_addr reg .macro mcount_get_lr_addr reg
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <asm/cache.h> #include <asm/cache.h>
#include <asm/cputype.h> #include <asm/cputype.h>
#include <asm/kernel-pgtable.h> #include <asm/kernel-pgtable.h>
#include <asm/kvm_arm.h>
#include <asm/memory.h> #include <asm/memory.h>
#include <asm/pgtable-hwdef.h> #include <asm/pgtable-hwdef.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
...@@ -464,7 +465,7 @@ CPU_LE( bic x0, x0, #(3 << 24) ) // Clear the EE and E0E bits for EL1 ...@@ -464,7 +465,7 @@ CPU_LE( bic x0, x0, #(3 << 24) ) // Clear the EE and E0E bits for EL1
ret ret
/* Hyp configuration. */ /* Hyp configuration. */
2: mov x0, #(1 << 31) // 64-bit EL1 2: mov_q x0, HCR_HOST_NVHE_FLAGS
msr hcr_el2, x0 msr hcr_el2, x0
/* Generic timers. */ /* Generic timers. */
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
#include <asm/virt.h> #include <asm/virt.h>
.text .text
.pushsection .hyp.text, "ax"
.align 11 .align 11
ENTRY(__hyp_stub_vectors) ENTRY(__hyp_stub_vectors)
......
...@@ -670,6 +670,7 @@ static struct platform_driver armv8_pmu_driver = { ...@@ -670,6 +670,7 @@ static struct platform_driver armv8_pmu_driver = {
.driver = { .driver = {
.name = "armv8-pmu", .name = "armv8-pmu",
.of_match_table = armv8_pmu_of_device_ids, .of_match_table = armv8_pmu_of_device_ids,
.suppress_bind_attrs = true,
}, },
.probe = armv8_pmu_device_probe, .probe = armv8_pmu_device_probe,
}; };
......
...@@ -494,7 +494,7 @@ ...@@ -494,7 +494,7 @@
.endm .endm
.macro deactivate_traps .macro deactivate_traps
mov x2, #HCR_RW mov_q x2, HCR_HOST_NVHE_FLAGS
msr hcr_el2, x2 msr hcr_el2, x2
msr hstr_el2, xzr msr hstr_el2, xzr
......
...@@ -70,10 +70,6 @@ void __sync_icache_dcache(pte_t pte, unsigned long addr) ...@@ -70,10 +70,6 @@ void __sync_icache_dcache(pte_t pte, unsigned long addr)
{ {
struct page *page = pte_page(pte); struct page *page = pte_page(pte);
/* no flushing needed for anonymous pages */
if (!page_mapping(page))
return;
if (!test_and_set_bit(PG_dcache_clean, &page->flags)) { if (!test_and_set_bit(PG_dcache_clean, &page->flags)) {
__flush_dcache_area(page_address(page), __flush_dcache_area(page_address(page),
PAGE_SIZE << compound_order(page)); PAGE_SIZE << compound_order(page));
......
...@@ -2724,7 +2724,6 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig ...@@ -2724,7 +2724,6 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig
(unsigned long int)(oper.indata + prev_ix), (unsigned long int)(oper.indata + prev_ix),
noinpages, noinpages,
0, /* read access only for in data */ 0, /* read access only for in data */
0, /* no force */
inpages, inpages,
NULL); NULL);
...@@ -2740,8 +2739,7 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig ...@@ -2740,8 +2739,7 @@ static int cryptocop_ioctl_process(struct inode *inode, struct file *filp, unsig
current->mm, current->mm,
(unsigned long int)oper.cipher_outdata, (unsigned long int)oper.cipher_outdata,
nooutpages, nooutpages,
1, /* write access for out data */ FOLL_WRITE, /* write access for out data */
0, /* no force */
outpages, outpages,
NULL); NULL);
up_read(&current->mm->mmap_sem); up_read(&current->mm->mmap_sem);
......
...@@ -143,7 +143,7 @@ store_virtual_to_phys(struct device *dev, struct device_attribute *attr, ...@@ -143,7 +143,7 @@ store_virtual_to_phys(struct device *dev, struct device_attribute *attr,
int ret; int ret;
ret = get_user_pages(current, current->mm, virt_addr, ret = get_user_pages(current, current->mm, virt_addr,
1, VM_READ, 0, NULL, NULL); 1, FOLL_WRITE, NULL, NULL);
if (ret<=0) { if (ret<=0) {
#ifdef ERR_INJ_DEBUG #ifdef ERR_INJ_DEBUG
printk("Virtual address %lx is n