Commit 98e8d2e0 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus

Pull mips fixes from Ralf Baechle:
 "The hopefully final round of fixes for 3.18:

   - Fix a number of build errors affecting particular configurations.
   - Handle EVA correctly when flushing a signal trampoline and dcache
     lines.
   - Fix printks printing jibberish.
   - Handle 64 bit memory addresses correctly when adding memory chunk
     on 32 bit kernels.
   - Fix a race condition in the hardware tablewalker code"

* 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus:
  MIPS: tlbex: Fix potential HTW race on TLBL/M/S handlers
  MIPS: Fix address type used for early memory detection.
  MIPS: Kconfig: Don't allow both microMIPS and SmartMIPS to be selected.
  MIPS: kernel: cps-vec: Set ISA level to mips32r2 for the MIPS MT ASE
  MIPS: Netlogic: handle modular AHCI builds
  MIPS: Netlogic: handle modular USB case
  MIPS: Loongson: Make platform serial setup always built-in.
  MIPS: fix EVA & non-SMP non-FPU FP context signal handling
  MIPS: cpu-probe: Set the FTLB probability bit on supported cores
  MIPS: BMIPS: Fix ".previous without corresponding .section" warnings
  MIPS: uaccess.h: Fix strnlen_user comment.
  MIPS: r4kcache: Add EVA case for protected_writeback_dcache_line
  MIPS: Fix info about plat_setup in arch_mem_init comment
  MIPS: rtlx: Remove KERN_DEBUG from pr_debug() arguments in rtlx.c
  MIPS: SEAD3: Fix LED device registration.
  MIPS: Fix a copy & paste error in unistd.h
parents 21f122f4 070e76cb
...@@ -2101,9 +2101,17 @@ config 64BIT_PHYS_ADDR ...@@ -2101,9 +2101,17 @@ config 64BIT_PHYS_ADDR
config ARCH_PHYS_ADDR_T_64BIT config ARCH_PHYS_ADDR_T_64BIT
def_bool 64BIT_PHYS_ADDR def_bool 64BIT_PHYS_ADDR
choice
prompt "SmartMIPS or microMIPS ASE support"
config CPU_NEEDS_NO_SMARTMIPS_OR_MICROMIPS
bool "None"
help
Select this if you want neither microMIPS nor SmartMIPS support
config CPU_HAS_SMARTMIPS config CPU_HAS_SMARTMIPS
depends on SYS_SUPPORTS_SMARTMIPS depends on SYS_SUPPORTS_SMARTMIPS
bool "Support for the SmartMIPS ASE" bool "SmartMIPS"
help help
SmartMIPS is a extension of the MIPS32 architecture aimed at SmartMIPS is a extension of the MIPS32 architecture aimed at
increased security at both hardware and software level for increased security at both hardware and software level for
...@@ -2115,11 +2123,13 @@ config CPU_HAS_SMARTMIPS ...@@ -2115,11 +2123,13 @@ config CPU_HAS_SMARTMIPS
config CPU_MICROMIPS config CPU_MICROMIPS
depends on SYS_SUPPORTS_MICROMIPS depends on SYS_SUPPORTS_MICROMIPS
bool "Build kernel using microMIPS ISA" bool "microMIPS"
help help
When this option is enabled the kernel will be built using the When this option is enabled the kernel will be built using the
microMIPS ISA microMIPS ISA
endchoice
config CPU_HAS_MSA config CPU_HAS_MSA
bool "Support for the MIPS SIMD Architecture (EXPERIMENTAL)" bool "Support for the MIPS SIMD Architecture (EXPERIMENTAL)"
depends on CPU_SUPPORTS_MSA depends on CPU_SUPPORTS_MSA
......
...@@ -661,6 +661,8 @@ ...@@ -661,6 +661,8 @@
#define MIPS_CONF6_SYND (_ULCAST_(1) << 13) #define MIPS_CONF6_SYND (_ULCAST_(1) << 13)
/* proAptiv FTLB on/off bit */ /* proAptiv FTLB on/off bit */
#define MIPS_CONF6_FTLBEN (_ULCAST_(1) << 15) #define MIPS_CONF6_FTLBEN (_ULCAST_(1) << 15)
/* FTLB probability bits */
#define MIPS_CONF6_FTLBP_SHIFT (16)
#define MIPS_CONF7_WII (_ULCAST_(1) << 31) #define MIPS_CONF7_WII (_ULCAST_(1) << 31)
......
...@@ -257,7 +257,11 @@ static inline void protected_flush_icache_line(unsigned long addr) ...@@ -257,7 +257,11 @@ static inline void protected_flush_icache_line(unsigned long addr)
*/ */
static inline void protected_writeback_dcache_line(unsigned long addr) static inline void protected_writeback_dcache_line(unsigned long addr)
{ {
#ifdef CONFIG_EVA
protected_cachee_op(Hit_Writeback_Inv_D, addr);
#else
protected_cache_op(Hit_Writeback_Inv_D, addr); protected_cache_op(Hit_Writeback_Inv_D, addr);
#endif
} }
static inline void protected_writeback_scache_line(unsigned long addr) static inline void protected_writeback_scache_line(unsigned long addr)
......
...@@ -1422,7 +1422,7 @@ static inline long __strnlen_user(const char __user *s, long n) ...@@ -1422,7 +1422,7 @@ static inline long __strnlen_user(const char __user *s, long n)
} }
/* /*
* strlen_user: - Get the size of a string in user space. * strnlen_user: - Get the size of a string in user space.
* @str: The string to measure. * @str: The string to measure.
* *
* Context: User context only. This function may sleep. * Context: User context only. This function may sleep.
...@@ -1431,9 +1431,7 @@ static inline long __strnlen_user(const char __user *s, long n) ...@@ -1431,9 +1431,7 @@ static inline long __strnlen_user(const char __user *s, long n)
* *
* Returns the size of the string INCLUDING the terminating NUL. * Returns the size of the string INCLUDING the terminating NUL.
* On exception, returns 0. * On exception, returns 0.
* * If the string is too long, returns a value greater than @n.
* If there is a limit on the length of a valid string, you may wish to
* consider using strnlen_user() instead.
*/ */
static inline long strnlen_user(const char __user *s, long n) static inline long strnlen_user(const char __user *s, long n)
{ {
......
...@@ -1045,7 +1045,7 @@ ...@@ -1045,7 +1045,7 @@
#define __NR_seccomp (__NR_Linux + 316) #define __NR_seccomp (__NR_Linux + 316)
#define __NR_getrandom (__NR_Linux + 317) #define __NR_getrandom (__NR_Linux + 317)
#define __NR_memfd_create (__NR_Linux + 318) #define __NR_memfd_create (__NR_Linux + 318)
#define __NR_memfd_create (__NR_Linux + 319) #define __NR_bpf (__NR_Linux + 319)
/* /*
* Offset of the last N32 flavoured syscall * Offset of the last N32 flavoured syscall
......
...@@ -208,7 +208,6 @@ bmips_reset_nmi_vec_end: ...@@ -208,7 +208,6 @@ bmips_reset_nmi_vec_end:
END(bmips_reset_nmi_vec) END(bmips_reset_nmi_vec)
.set pop .set pop
.previous
/*********************************************************************** /***********************************************************************
* CPU1 warm restart vector (used for second and subsequent boots). * CPU1 warm restart vector (used for second and subsequent boots).
...@@ -281,5 +280,3 @@ LEAF(bmips_enable_xks01) ...@@ -281,5 +280,3 @@ LEAF(bmips_enable_xks01)
jr ra jr ra
END(bmips_enable_xks01) END(bmips_enable_xks01)
.previous
...@@ -229,6 +229,7 @@ LEAF(mips_cps_core_init) ...@@ -229,6 +229,7 @@ LEAF(mips_cps_core_init)
nop nop
.set push .set push
.set mips32r2
.set mt .set mt
/* Only allow 1 TC per VPE to execute... */ /* Only allow 1 TC per VPE to execute... */
...@@ -345,6 +346,7 @@ LEAF(mips_cps_boot_vpes) ...@@ -345,6 +346,7 @@ LEAF(mips_cps_boot_vpes)
nop nop
.set push .set push
.set mips32r2
.set mt .set mt
1: /* Enter VPE configuration state */ 1: /* Enter VPE configuration state */
......
...@@ -193,6 +193,32 @@ static void set_isa(struct cpuinfo_mips *c, unsigned int isa) ...@@ -193,6 +193,32 @@ static void set_isa(struct cpuinfo_mips *c, unsigned int isa)
static char unknown_isa[] = KERN_ERR \ static char unknown_isa[] = KERN_ERR \
"Unsupported ISA type, c0.config0: %d."; "Unsupported ISA type, c0.config0: %d.";
static unsigned int calculate_ftlb_probability(struct cpuinfo_mips *c)
{
unsigned int probability = c->tlbsize / c->tlbsizevtlb;
/*
* 0 = All TLBWR instructions go to FTLB
* 1 = 15:1: For every 16 TBLWR instructions, 15 go to the
* FTLB and 1 goes to the VTLB.
* 2 = 7:1: As above with 7:1 ratio.
* 3 = 3:1: As above with 3:1 ratio.
*
* Use the linear midpoint as the probability threshold.
*/
if (probability >= 12)
return 1;
else if (probability >= 6)
return 2;
else
/*
* So FTLB is less than 4 times bigger than VTLB.
* A 3:1 ratio can still be useful though.
*/
return 3;
}
static void set_ftlb_enable(struct cpuinfo_mips *c, int enable) static void set_ftlb_enable(struct cpuinfo_mips *c, int enable)
{ {
unsigned int config6; unsigned int config6;
...@@ -203,9 +229,14 @@ static void set_ftlb_enable(struct cpuinfo_mips *c, int enable) ...@@ -203,9 +229,14 @@ static void set_ftlb_enable(struct cpuinfo_mips *c, int enable)
case CPU_P5600: case CPU_P5600:
/* proAptiv & related cores use Config6 to enable the FTLB */ /* proAptiv & related cores use Config6 to enable the FTLB */
config6 = read_c0_config6(); config6 = read_c0_config6();
/* Clear the old probability value */
config6 &= ~(3 << MIPS_CONF6_FTLBP_SHIFT);
if (enable) if (enable)
/* Enable FTLB */ /* Enable FTLB */
write_c0_config6(config6 | MIPS_CONF6_FTLBEN); write_c0_config6(config6 |
(calculate_ftlb_probability(c)
<< MIPS_CONF6_FTLBP_SHIFT)
| MIPS_CONF6_FTLBEN);
else else
/* Disable FTLB */ /* Disable FTLB */
write_c0_config6(config6 & ~MIPS_CONF6_FTLBEN); write_c0_config6(config6 & ~MIPS_CONF6_FTLBEN);
......
...@@ -94,12 +94,12 @@ int rtlx_open(int index, int can_sleep) ...@@ -94,12 +94,12 @@ int rtlx_open(int index, int can_sleep)
int ret = 0; int ret = 0;
if (index >= RTLX_CHANNELS) { if (index >= RTLX_CHANNELS) {
pr_debug(KERN_DEBUG "rtlx_open index out of range\n"); pr_debug("rtlx_open index out of range\n");
return -ENOSYS; return -ENOSYS;
} }
if (atomic_inc_return(&channel_wqs[index].in_open) > 1) { if (atomic_inc_return(&channel_wqs[index].in_open) > 1) {
pr_debug(KERN_DEBUG "rtlx_open channel %d already opened\n", index); pr_debug("rtlx_open channel %d already opened\n", index);
ret = -EBUSY; ret = -EBUSY;
goto out_fail; goto out_fail;
} }
......
...@@ -485,7 +485,7 @@ static void __init bootmem_init(void) ...@@ -485,7 +485,7 @@ static void __init bootmem_init(void)
* NOTE: historically plat_mem_setup did the entire platform initialization. * NOTE: historically plat_mem_setup did the entire platform initialization.
* This was rather impractical because it meant plat_mem_setup had to * This was rather impractical because it meant plat_mem_setup had to
* get away without any kind of memory allocator. To keep old code from * get away without any kind of memory allocator. To keep old code from
* breaking plat_setup was just renamed to plat_setup and a second platform * breaking plat_setup was just renamed to plat_mem_setup and a second platform
* initialization hook for anything else was introduced. * initialization hook for anything else was introduced.
*/ */
...@@ -493,7 +493,7 @@ static int usermem __initdata; ...@@ -493,7 +493,7 @@ static int usermem __initdata;
static int __init early_parse_mem(char *p) static int __init early_parse_mem(char *p)
{ {
unsigned long start, size; phys_t start, size;
/* /*
* If a user specifies memory size, we * If a user specifies memory size, we
......
...@@ -658,13 +658,13 @@ static int signal_setup(void) ...@@ -658,13 +658,13 @@ static int signal_setup(void)
save_fp_context = _save_fp_context; save_fp_context = _save_fp_context;
restore_fp_context = _restore_fp_context; restore_fp_context = _restore_fp_context;
} else { } else {
save_fp_context = copy_fp_from_sigcontext; save_fp_context = copy_fp_to_sigcontext;
restore_fp_context = copy_fp_to_sigcontext; restore_fp_context = copy_fp_from_sigcontext;
} }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#else #else
save_fp_context = copy_fp_from_sigcontext;; save_fp_context = copy_fp_to_sigcontext;
restore_fp_context = copy_fp_to_sigcontext; restore_fp_context = copy_fp_from_sigcontext;
#endif #endif
return 0; return 0;
......
...@@ -11,7 +11,8 @@ obj-$(CONFIG_PCI) += pci.o ...@@ -11,7 +11,8 @@ obj-$(CONFIG_PCI) += pci.o
# Serial port support # Serial port support
# #
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-$(CONFIG_SERIAL_8250) += serial.o loongson-serial-$(CONFIG_SERIAL_8250) := serial.o
obj-y += $(loongson-serial-m) $(loongson-serial-y)
obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o
obj-$(CONFIG_LOONGSON_MC146818) += rtc.o obj-$(CONFIG_LOONGSON_MC146818) += rtc.o
......
...@@ -1872,8 +1872,16 @@ build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l, ...@@ -1872,8 +1872,16 @@ build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l,
uasm_l_smp_pgtable_change(l, *p); uasm_l_smp_pgtable_change(l, *p);
#endif #endif
iPTE_LW(p, wr.r1, wr.r2); /* get even pte */ iPTE_LW(p, wr.r1, wr.r2); /* get even pte */
if (!m4kc_tlbp_war()) if (!m4kc_tlbp_war()) {
build_tlb_probe_entry(p); build_tlb_probe_entry(p);
if (cpu_has_htw) {
/* race condition happens, leaving */
uasm_i_ehb(p);
uasm_i_mfc0(p, wr.r3, C0_INDEX);
uasm_il_bltz(p, r, wr.r3, label_leave);
uasm_i_nop(p);
}
}
return wr; return wr;
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved. * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved.
*/ */
#include <linux/module.h> #include <linux/init.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
...@@ -76,8 +76,4 @@ static int __init led_init(void) ...@@ -76,8 +76,4 @@ static int __init led_init(void)
return platform_device_register(&fled_device); return platform_device_register(&fled_device);
} }
module_init(led_init); device_initcall(led_init);
MODULE_AUTHOR("Chris Dearman <chris@mips.com>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("LED probe driver for SEAD-3");
obj-y += setup.o nlm_hal.o cop2-ex.o dt.o obj-y += setup.o nlm_hal.o cop2-ex.o dt.o
obj-$(CONFIG_SMP) += wakeup.o obj-$(CONFIG_SMP) += wakeup.o
obj-$(CONFIG_USB) += usb-init.o ifdef CONFIG_USB
obj-$(CONFIG_USB) += usb-init-xlp2.o obj-y += usb-init.o
obj-$(CONFIG_SATA_AHCI) += ahci-init.o obj-y += usb-init-xlp2.o
obj-$(CONFIG_SATA_AHCI) += ahci-init-xlp2.o endif
ifdef CONFIG_SATA_AHCI
obj-y += ahci-init.o
obj-y += ahci-init-xlp2.o
endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment