mirror of https://gitee.com/openkylin/linux.git
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
This commit is contained in:
commit
98e8d2e094
|
@ -2101,9 +2101,17 @@ config 64BIT_PHYS_ADDR
|
|||
config ARCH_PHYS_ADDR_T_64BIT
|
||||
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
|
||||
depends on SYS_SUPPORTS_SMARTMIPS
|
||||
bool "Support for the SmartMIPS ASE"
|
||||
bool "SmartMIPS"
|
||||
help
|
||||
SmartMIPS is a extension of the MIPS32 architecture aimed at
|
||||
increased security at both hardware and software level for
|
||||
|
@ -2115,11 +2123,13 @@ config CPU_HAS_SMARTMIPS
|
|||
|
||||
config CPU_MICROMIPS
|
||||
depends on SYS_SUPPORTS_MICROMIPS
|
||||
bool "Build kernel using microMIPS ISA"
|
||||
bool "microMIPS"
|
||||
help
|
||||
When this option is enabled the kernel will be built using the
|
||||
microMIPS ISA
|
||||
|
||||
endchoice
|
||||
|
||||
config CPU_HAS_MSA
|
||||
bool "Support for the MIPS SIMD Architecture (EXPERIMENTAL)"
|
||||
depends on CPU_SUPPORTS_MSA
|
||||
|
|
|
@ -661,6 +661,8 @@
|
|||
#define MIPS_CONF6_SYND (_ULCAST_(1) << 13)
|
||||
/* proAptiv FTLB on/off bit */
|
||||
#define MIPS_CONF6_FTLBEN (_ULCAST_(1) << 15)
|
||||
/* FTLB probability bits */
|
||||
#define MIPS_CONF6_FTLBP_SHIFT (16)
|
||||
|
||||
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
|
||||
|
||||
|
|
|
@ -257,7 +257,11 @@ static inline void protected_flush_icache_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);
|
||||
#endif
|
||||
}
|
||||
|
||||
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)
|
|||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* Context: User context only. This function may sleep.
|
||||
|
@ -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.
|
||||
* On exception, returns 0.
|
||||
*
|
||||
* If there is a limit on the length of a valid string, you may wish to
|
||||
* consider using strnlen_user() instead.
|
||||
* If the string is too long, returns a value greater than @n.
|
||||
*/
|
||||
static inline long strnlen_user(const char __user *s, long n)
|
||||
{
|
||||
|
|
|
@ -1045,7 +1045,7 @@
|
|||
#define __NR_seccomp (__NR_Linux + 316)
|
||||
#define __NR_getrandom (__NR_Linux + 317)
|
||||
#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
|
||||
|
|
|
@ -208,7 +208,6 @@ bmips_reset_nmi_vec_end:
|
|||
END(bmips_reset_nmi_vec)
|
||||
|
||||
.set pop
|
||||
.previous
|
||||
|
||||
/***********************************************************************
|
||||
* CPU1 warm restart vector (used for second and subsequent boots).
|
||||
|
@ -281,5 +280,3 @@ LEAF(bmips_enable_xks01)
|
|||
jr ra
|
||||
|
||||
END(bmips_enable_xks01)
|
||||
|
||||
.previous
|
||||
|
|
|
@ -229,6 +229,7 @@ LEAF(mips_cps_core_init)
|
|||
nop
|
||||
|
||||
.set push
|
||||
.set mips32r2
|
||||
.set mt
|
||||
|
||||
/* Only allow 1 TC per VPE to execute... */
|
||||
|
@ -345,6 +346,7 @@ LEAF(mips_cps_boot_vpes)
|
|||
nop
|
||||
|
||||
.set push
|
||||
.set mips32r2
|
||||
.set mt
|
||||
|
||||
1: /* Enter VPE configuration state */
|
||||
|
|
|
@ -193,6 +193,32 @@ static void set_isa(struct cpuinfo_mips *c, unsigned int isa)
|
|||
static char unknown_isa[] = KERN_ERR \
|
||||
"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)
|
||||
{
|
||||
unsigned int config6;
|
||||
|
@ -203,9 +229,14 @@ static void set_ftlb_enable(struct cpuinfo_mips *c, int enable)
|
|||
case CPU_P5600:
|
||||
/* proAptiv & related cores use Config6 to enable the FTLB */
|
||||
config6 = read_c0_config6();
|
||||
/* Clear the old probability value */
|
||||
config6 &= ~(3 << MIPS_CONF6_FTLBP_SHIFT);
|
||||
if (enable)
|
||||
/* 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
|
||||
/* Disable FTLB */
|
||||
write_c0_config6(config6 & ~MIPS_CONF6_FTLBEN);
|
||||
|
|
|
@ -94,12 +94,12 @@ int rtlx_open(int index, int can_sleep)
|
|||
int ret = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
goto out_fail;
|
||||
}
|
||||
|
|
|
@ -485,7 +485,7 @@ static void __init bootmem_init(void)
|
|||
* NOTE: historically plat_mem_setup did the entire platform initialization.
|
||||
* 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
|
||||
* 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.
|
||||
*/
|
||||
|
||||
|
@ -493,7 +493,7 @@ static int usermem __initdata;
|
|||
|
||||
static int __init early_parse_mem(char *p)
|
||||
{
|
||||
unsigned long start, size;
|
||||
phys_t start, size;
|
||||
|
||||
/*
|
||||
* If a user specifies memory size, we
|
||||
|
|
|
@ -658,13 +658,13 @@ static int signal_setup(void)
|
|||
save_fp_context = _save_fp_context;
|
||||
restore_fp_context = _restore_fp_context;
|
||||
} else {
|
||||
save_fp_context = copy_fp_from_sigcontext;
|
||||
restore_fp_context = copy_fp_to_sigcontext;
|
||||
save_fp_context = copy_fp_to_sigcontext;
|
||||
restore_fp_context = copy_fp_from_sigcontext;
|
||||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
#else
|
||||
save_fp_context = copy_fp_from_sigcontext;;
|
||||
restore_fp_context = copy_fp_to_sigcontext;
|
||||
save_fp_context = copy_fp_to_sigcontext;
|
||||
restore_fp_context = copy_fp_from_sigcontext;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -11,7 +11,8 @@ obj-$(CONFIG_PCI) += pci.o
|
|||
# Serial port support
|
||||
#
|
||||
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_MC146818) += rtc.o
|
||||
|
||||
|
|
|
@ -1872,8 +1872,16 @@ build_r4000_tlbchange_handler_head(u32 **p, struct uasm_label **l,
|
|||
uasm_l_smp_pgtable_change(l, *p);
|
||||
#endif
|
||||
iPTE_LW(p, wr.r1, wr.r2); /* get even pte */
|
||||
if (!m4kc_tlbp_war())
|
||||
if (!m4kc_tlbp_war()) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*
|
||||
* Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
|
@ -76,8 +76,4 @@ static int __init led_init(void)
|
|||
return platform_device_register(&fled_device);
|
||||
}
|
||||
|
||||
module_init(led_init);
|
||||
|
||||
MODULE_AUTHOR("Chris Dearman <chris@mips.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("LED probe driver for SEAD-3");
|
||||
device_initcall(led_init);
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
obj-y += setup.o nlm_hal.o cop2-ex.o dt.o
|
||||
obj-$(CONFIG_SMP) += wakeup.o
|
||||
obj-$(CONFIG_USB) += usb-init.o
|
||||
obj-$(CONFIG_USB) += usb-init-xlp2.o
|
||||
obj-$(CONFIG_SATA_AHCI) += ahci-init.o
|
||||
obj-$(CONFIG_SATA_AHCI) += ahci-init-xlp2.o
|
||||
ifdef CONFIG_USB
|
||||
obj-y += usb-init.o
|
||||
obj-y += usb-init-xlp2.o
|
||||
endif
|
||||
ifdef CONFIG_SATA_AHCI
|
||||
obj-y += ahci-init.o
|
||||
obj-y += ahci-init-xlp2.o
|
||||
endif
|
||||
|
|
Loading…
Reference in New Issue