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:
Коммит
98e8d2e094
|
@ -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
|
||||||
|
|
||||||
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 @@
|
||||||
#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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
*
|
*
|
||||||
* 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 @@
|
||||||
#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:
|
||||||
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)
|
||||||
jr ra
|
jr ra
|
||||||
|
|
||||||
END(bmips_enable_xks01)
|
END(bmips_enable_xks01)
|
||||||
|
|
||||||
.previous
|
|
||||||
|
|
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
* 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;
|
||||||
|
|
||||||
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)
|
||||||
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
|
||||||
# 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,
|
||||||
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 @@
|
||||||
*
|
*
|
||||||
* 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)
|
||||||
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");
|
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче