Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS fixes from Ralf Baechle: "Another round of MIPS fixes for 4.2. Things are looking quite decent at this stage but the recent work on the FPU support took its toll: - fix an incorrect overly restrictive ifdef - select O32 64-bit FP support for O32 binary compatibility - remove workarounds for Sibyte SB1250 Pass1 parts. There are rare fixing the workarounds is not worth the effort. - patch up an outdated and now incorrect comment" * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: MIPS: fpu.h: Allow 64-bit FPU on a 64-bit MIPS R6 CPU MIPS: SB1: Remove support for Pass 1 parts. MIPS: Require O32 FP64 support for MIPS64 with O32 compat MIPS: asm-offset.c: Patch up various comments refering to the old filename.
This commit is contained in:
Коммит
8bff839927
|
@ -1427,6 +1427,7 @@ config CPU_MIPS64_R6
|
||||||
select CPU_SUPPORTS_HIGHMEM
|
select CPU_SUPPORTS_HIGHMEM
|
||||||
select CPU_SUPPORTS_MSA
|
select CPU_SUPPORTS_MSA
|
||||||
select GENERIC_CSUM
|
select GENERIC_CSUM
|
||||||
|
select MIPS_O32_FP64_SUPPORT if MIPS32_O32
|
||||||
help
|
help
|
||||||
Choose this option to build a kernel for release 6 or later of the
|
Choose this option to build a kernel for release 6 or later of the
|
||||||
MIPS64 architecture. New MIPS processors, starting with the Warrior
|
MIPS64 architecture. New MIPS processors, starting with the Warrior
|
||||||
|
@ -2262,11 +2263,6 @@ config MIPS_CM
|
||||||
config MIPS_CPC
|
config MIPS_CPC
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config SB1_PASS_1_WORKAROUNDS
|
|
||||||
bool
|
|
||||||
depends on CPU_SB1_PASS_1
|
|
||||||
default y
|
|
||||||
|
|
||||||
config SB1_PASS_2_WORKAROUNDS
|
config SB1_PASS_2_WORKAROUNDS
|
||||||
bool
|
bool
|
||||||
depends on CPU_SB1 && (CPU_SB1_PASS_2_2 || CPU_SB1_PASS_2)
|
depends on CPU_SB1 && (CPU_SB1_PASS_2_2 || CPU_SB1_PASS_2)
|
||||||
|
|
|
@ -181,13 +181,6 @@ cflags-$(CONFIG_CPU_R4000_WORKAROUNDS) += $(call cc-option,-mfix-r4000,)
|
||||||
cflags-$(CONFIG_CPU_R4400_WORKAROUNDS) += $(call cc-option,-mfix-r4400,)
|
cflags-$(CONFIG_CPU_R4400_WORKAROUNDS) += $(call cc-option,-mfix-r4400,)
|
||||||
cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS) += $(call cc-option,-mno-daddi,)
|
cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS) += $(call cc-option,-mno-daddi,)
|
||||||
|
|
||||||
ifdef CONFIG_CPU_SB1
|
|
||||||
ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
|
|
||||||
KBUILD_AFLAGS_MODULE += -msb1-pass1-workarounds
|
|
||||||
KBUILD_CFLAGS_MODULE += -msb1-pass1-workarounds
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# For smartmips configurations, there are hundreds of warnings due to ISA overrides
|
# For smartmips configurations, there are hundreds of warnings due to ISA overrides
|
||||||
# in assembly and header files. smartmips is only supported for MIPS32r1 onwards
|
# in assembly and header files. smartmips is only supported for MIPS32r1 onwards
|
||||||
# and there is no support for 64-bit. Various '.set mips2' or '.set mips3' or
|
# and there is no support for 64-bit. Various '.set mips2' or '.set mips3' or
|
||||||
|
|
|
@ -74,7 +74,7 @@ static inline int __enable_fpu(enum fpu_mode mode)
|
||||||
goto fr_common;
|
goto fr_common;
|
||||||
|
|
||||||
case FPU_64BIT:
|
case FPU_64BIT:
|
||||||
#if !(defined(CONFIG_CPU_MIPS32_R2) || defined(CONFIG_CPU_MIPS32_R6) \
|
#if !(defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6) \
|
||||||
|| defined(CONFIG_64BIT))
|
|| defined(CONFIG_64BIT))
|
||||||
/* we only have a 32-bit FPU */
|
/* we only have a 32-bit FPU */
|
||||||
return SIGFPE;
|
return SIGFPE;
|
||||||
|
|
|
@ -13,8 +13,7 @@
|
||||||
#define R4600_V2_HIT_CACHEOP_WAR 0
|
#define R4600_V2_HIT_CACHEOP_WAR 0
|
||||||
#define R5432_CP0_INTERRUPT_WAR 0
|
#define R5432_CP0_INTERRUPT_WAR 0
|
||||||
|
|
||||||
#if defined(CONFIG_SB1_PASS_1_WORKAROUNDS) || \
|
#if defined(CONFIG_SB1_PASS_2_WORKAROUNDS)
|
||||||
defined(CONFIG_SB1_PASS_2_WORKAROUNDS)
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
extern int sb1250_m3_workaround_needed(void);
|
extern int sb1250_m3_workaround_needed(void);
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keep this struct definition in sync with the sigcontext fragment
|
* Keep this struct definition in sync with the sigcontext fragment
|
||||||
* in arch/mips/tools/offset.c
|
* in arch/mips/kernel/asm-offsets.c
|
||||||
*/
|
*/
|
||||||
struct sigcontext {
|
struct sigcontext {
|
||||||
unsigned int sc_regmask; /* Unused */
|
unsigned int sc_regmask; /* Unused */
|
||||||
|
@ -46,7 +46,7 @@ struct sigcontext {
|
||||||
#include <linux/posix_types.h>
|
#include <linux/posix_types.h>
|
||||||
/*
|
/*
|
||||||
* Keep this struct definition in sync with the sigcontext fragment
|
* Keep this struct definition in sync with the sigcontext fragment
|
||||||
* in arch/mips/tools/offset.c
|
* in arch/mips/kernel/asm-offsets.c
|
||||||
*
|
*
|
||||||
* Warning: this structure illdefined with sc_badvaddr being just an unsigned
|
* Warning: this structure illdefined with sc_badvaddr being just an unsigned
|
||||||
* int so it was changed to unsigned long in 2.6.0-test1. This may break
|
* int so it was changed to unsigned long in 2.6.0-test1. This may break
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* offset.c: Calculate pt_regs and task_struct offsets.
|
* asm-offsets.c: Calculate pt_regs and task_struct offsets.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1996 David S. Miller
|
* Copyright (C) 1996 David S. Miller
|
||||||
* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Ralf Baechle
|
* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Ralf Baechle
|
||||||
|
|
|
@ -81,11 +81,6 @@ choice
|
||||||
prompt "SiByte SOC Stepping"
|
prompt "SiByte SOC Stepping"
|
||||||
depends on SIBYTE_SB1xxx_SOC
|
depends on SIBYTE_SB1xxx_SOC
|
||||||
|
|
||||||
config CPU_SB1_PASS_1
|
|
||||||
bool "1250 Pass1"
|
|
||||||
depends on SIBYTE_SB1250
|
|
||||||
select CPU_HAS_PREFETCH
|
|
||||||
|
|
||||||
config CPU_SB1_PASS_2_1250
|
config CPU_SB1_PASS_2_1250
|
||||||
bool "1250 An"
|
bool "1250 An"
|
||||||
depends on SIBYTE_SB1250
|
depends on SIBYTE_SB1250
|
||||||
|
|
|
@ -81,10 +81,7 @@ void check_bus_watcher(void)
|
||||||
{
|
{
|
||||||
u32 status, l2_err, memio_err;
|
u32 status, l2_err, memio_err;
|
||||||
|
|
||||||
#ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
|
#if defined(CONFIG_SIBYTE_BCM112X) || defined(CONFIG_SIBYTE_SB1250)
|
||||||
/* Destructive read, clears register and interrupt */
|
|
||||||
status = csr_in32(IOADDR(A_SCD_BUS_ERR_STATUS));
|
|
||||||
#elif defined(CONFIG_SIBYTE_BCM112X) || defined(CONFIG_SIBYTE_SB1250)
|
|
||||||
/* Use non-destructive register */
|
/* Use non-destructive register */
|
||||||
status = csr_in32(IOADDR(A_SCD_BUS_ERR_STATUS_DEBUG));
|
status = csr_in32(IOADDR(A_SCD_BUS_ERR_STATUS_DEBUG));
|
||||||
#elif defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
|
#elif defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
|
||||||
|
|
|
@ -202,12 +202,10 @@ void __init sb1250_setup(void)
|
||||||
|
|
||||||
switch (war_pass) {
|
switch (war_pass) {
|
||||||
case K_SYS_REVISION_BCM1250_PASS1:
|
case K_SYS_REVISION_BCM1250_PASS1:
|
||||||
#ifndef CONFIG_SB1_PASS_1_WORKAROUNDS
|
|
||||||
printk("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, "
|
printk("@@@@ This is a BCM1250 A0-A2 (Pass 1) board, "
|
||||||
"and the kernel doesn't have the proper "
|
"and the kernel doesn't have the proper "
|
||||||
"workarounds compiled in. @@@@\n");
|
"workarounds compiled in. @@@@\n");
|
||||||
bad_config = 1;
|
bad_config = 1;
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case K_SYS_REVISION_BCM1250_PASS2:
|
case K_SYS_REVISION_BCM1250_PASS2:
|
||||||
/* Pass 2 - easiest as default for now - so many numbers */
|
/* Pass 2 - easiest as default for now - so many numbers */
|
||||||
|
|
|
@ -1508,16 +1508,7 @@ static void sbmac_channel_start(struct sbmac_softc *s)
|
||||||
__raw_writeq(reg, port);
|
__raw_writeq(reg, port);
|
||||||
port = s->sbm_base + R_MAC_ETHERNET_ADDR;
|
port = s->sbm_base + R_MAC_ETHERNET_ADDR;
|
||||||
|
|
||||||
#ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
|
|
||||||
/*
|
|
||||||
* Pass1 SOCs do not receive packets addressed to the
|
|
||||||
* destination address in the R_MAC_ETHERNET_ADDR register.
|
|
||||||
* Set the value to zero.
|
|
||||||
*/
|
|
||||||
__raw_writeq(0, port);
|
|
||||||
#else
|
|
||||||
__raw_writeq(reg, port);
|
__raw_writeq(reg, port);
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the receive filter for no packets, and write values
|
* Set the receive filter for no packets, and write values
|
||||||
|
|
Загрузка…
Ссылка в новой задаче