Commit 6cd236e0 authored by Linus Torvalds's avatar Linus Torvalds

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

* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
  [MIPS] Count timer interrupts correctly.
  [MIPS] SMTC and non-SMTC kernel and modules are incompatible
  [MIPS] EMMA2RH: Disable GEN_RTC, it can't possibly work.
  [MIPS] Remove a duplicated local variable in test_and_clear_bit()
  [MIPS] use compat_siginfo in rt_sigframe_n32
  [MIPS] 20K: Handle WAIT related bugs according to errata information
  [MIPS] AP/SP requires shadow registers, auto enable support.
  [MIPS] Fix pb1500 reg B access
  [MIPS] Alchemy: Fix wrong cast
  [MIPS] remove "support for" from system type entry
  [MIPS] add io_map_base to pci_controller on Cobalt
  [MIPS] __ucmpdi2 arguments are unsigned long long.
parents 2c9dbda3 8e15a0e3
...@@ -317,7 +317,7 @@ config PNX8550_JBS ...@@ -317,7 +317,7 @@ config PNX8550_JBS
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
config PNX8550_STB810 config PNX8550_STB810
bool "Support for Philips PNX8550 based STB810 board" bool "Philips PNX8550 based STB810 board"
select PNX8550 select PNX8550
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
...@@ -392,7 +392,7 @@ config QEMU ...@@ -392,7 +392,7 @@ config QEMU
can be found at http://www.linux-mips.org/wiki/Qemu. can be found at http://www.linux-mips.org/wiki/Qemu.
config MARKEINS config MARKEINS
bool "Support for NEC EMMA2RH Mark-eins" bool "NEC EMMA2RH Mark-eins"
select DMA_NONCOHERENT select DMA_NONCOHERENT
select HW_HAS_PCI select HW_HAS_PCI
select IRQ_CPU select IRQ_CPU
...@@ -1392,6 +1392,7 @@ config MIPS_VPE_LOADER ...@@ -1392,6 +1392,7 @@ config MIPS_VPE_LOADER
depends on SYS_SUPPORTS_MULTITHREADING depends on SYS_SUPPORTS_MULTITHREADING
select CPU_MIPSR2_IRQ_VI select CPU_MIPSR2_IRQ_VI
select CPU_MIPSR2_IRQ_EI select CPU_MIPSR2_IRQ_EI
select CPU_MIPSR2_SRS
select MIPS_MT select MIPS_MT
help help
Includes a loader for loading an elf relocatable object Includes a loader for loading an elf relocatable object
......
...@@ -53,7 +53,7 @@ void __init prom_init(void) ...@@ -53,7 +53,7 @@ void __init prom_init(void)
prom_argc = fw_arg0; prom_argc = fw_arg0;
prom_argv = (char **) fw_arg1; prom_argv = (char **) fw_arg1;
prom_envp = (int *) fw_arg3; prom_envp = (char **) fw_arg3;
mips_machgroup = MACH_GROUP_ALCHEMY; mips_machgroup = MACH_GROUP_ALCHEMY;
mips_machtype = MACH_PB1100; mips_machtype = MACH_PB1100;
......
...@@ -125,7 +125,7 @@ void __init board_setup(void) ...@@ -125,7 +125,7 @@ void __init board_setup(void)
au_writel((au_readl(0xac000028) | 0x20), 0xac000028); au_writel((au_readl(0xac000028) | 0x20), 0xac000028);
} }
/* Put the clock in BCD mode */ /* Put the clock in BCD mode */
if (readl(0xac00002C) & 0x4) { /* reg B */ if (au_readl(0xac00002C) & 0x4) { /* reg B */
au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c);
au_sync(); au_sync();
} }
......
...@@ -35,6 +35,7 @@ static struct pci_controller cobalt_pci_controller = { ...@@ -35,6 +35,7 @@ static struct pci_controller cobalt_pci_controller = {
.mem_resource = &cobalt_mem_resource, .mem_resource = &cobalt_mem_resource,
.io_resource = &cobalt_io_resource, .io_resource = &cobalt_io_resource,
.io_offset = 0 - GT_DEF_PCI0_IO_BASE, .io_offset = 0 - GT_DEF_PCI0_IO_BASE,
.io_map_base = CKSEG1ADDR(GT_DEF_PCI0_IO_BASE),
}; };
static int __init cobalt_pci_init(void) static int __init cobalt_pci_init(void)
......
...@@ -951,8 +951,7 @@ CONFIG_LEGACY_PTY_COUNT=256 ...@@ -951,8 +951,7 @@ CONFIG_LEGACY_PTY_COUNT=256
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
# CONFIG_HW_RANDOM is not set # CONFIG_HW_RANDOM is not set
CONFIG_RTC=m CONFIG_RTC=m
CONFIG_GEN_RTC=m # CONFIG_GEN_RTC is not set
CONFIG_GEN_RTC_X=y
# CONFIG_DTLK is not set # CONFIG_DTLK is not set
# CONFIG_R3964 is not set # CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set # CONFIG_APPLICOM is not set
......
...@@ -137,7 +137,6 @@ static inline void check_wait(void) ...@@ -137,7 +137,6 @@ static inline void check_wait(void)
case CPU_4KEC: case CPU_4KEC:
case CPU_4KSC: case CPU_4KSC:
case CPU_5KC: case CPU_5KC:
/* case CPU_20KC:*/
case CPU_24K: case CPU_24K:
case CPU_25KF: case CPU_25KF:
case CPU_34K: case CPU_34K:
...@@ -156,6 +155,17 @@ static inline void check_wait(void) ...@@ -156,6 +155,17 @@ static inline void check_wait(void)
if (allow_au1k_wait) if (allow_au1k_wait)
cpu_wait = au1k_wait; cpu_wait = au1k_wait;
break; break;
case CPU_20KC:
/*
* WAIT on Rev1.0 has E1, E2, E3 and E16.
* WAIT on Rev2.0 and Rev3.0 has E16.
* Rev3.1 WAIT is nop, why bother
*/
if ((c->processor_id & 0xff) <= 0x64)
break;
cpu_wait = r4k_wait;
break;
case CPU_RM9000: case CPU_RM9000:
if ((c->processor_id & 0x00ff) >= 0x40) if ((c->processor_id & 0x00ff) >= 0x40)
cpu_wait = r4k_wait; cpu_wait = r4k_wait;
......
...@@ -36,68 +36,6 @@ ...@@ -36,68 +36,6 @@
#include "signal-common.h" #include "signal-common.h"
#define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef struct compat_siginfo {
int si_signo;
int si_code;
int si_errno;
union {
int _pad[SI_PAD_SIZE32];
/* kill() */
struct {
compat_pid_t _pid; /* sender's pid */
compat_uid_t _uid; /* sender's uid */
} _kill;
/* SIGCHLD */
struct {
compat_pid_t _pid; /* which child */
compat_uid_t _uid; /* sender's uid */
int _status; /* exit code */
compat_clock_t _utime;
compat_clock_t _stime;
} _sigchld;
/* IRIX SIGCHLD */
struct {
compat_pid_t _pid; /* which child */
compat_clock_t _utime;
int _status; /* exit code */
compat_clock_t _stime;
} _irix_sigchld;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct {
s32 _addr; /* faulting insn/memory ref. */
} _sigfault;
/* SIGPOLL, SIGXFSZ (To do ...) */
struct {
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
int _fd;
} _sigpoll;
/* POSIX.1b timers */
struct {
timer_t _tid; /* timer id */
int _overrun; /* overrun count */
compat_sigval_t _sigval;/* same as below */
int _sys_private; /* not to be passed to user */
} _timer;
/* POSIX.1b signals */
struct {
compat_pid_t _pid; /* sender's pid */
compat_uid_t _uid; /* sender's uid */
compat_sigval_t _sigval;
} _rt;
} _sifields;
} compat_siginfo_t;
/* /*
* Including <asm/unistd.h> would give use the 64-bit syscall numbers ... * Including <asm/unistd.h> would give use the 64-bit syscall numbers ...
*/ */
......
...@@ -72,7 +72,7 @@ struct ucontextn32 { ...@@ -72,7 +72,7 @@ struct ucontextn32 {
struct rt_sigframe_n32 { struct rt_sigframe_n32 {
u32 rs_ass[4]; /* argument save space for o32 */ u32 rs_ass[4]; /* argument save space for o32 */
u32 rs_code[2]; /* signal trampoline */ u32 rs_code[2]; /* signal trampoline */
struct siginfo rs_info; struct compat_siginfo rs_info;
struct ucontextn32 rs_uc; struct ucontextn32 rs_uc;
}; };
...@@ -81,7 +81,7 @@ struct rt_sigframe_n32 { ...@@ -81,7 +81,7 @@ struct rt_sigframe_n32 {
struct rt_sigframe_n32 { struct rt_sigframe_n32 {
u32 rs_ass[4]; /* argument save space for o32 */ u32 rs_ass[4]; /* argument save space for o32 */
u32 rs_pad[2]; u32 rs_pad[2];
struct siginfo rs_info; struct compat_siginfo rs_info;
struct ucontextn32 rs_uc; struct ucontextn32 rs_uc;
u32 rs_code[8] ____cacheline_aligned; /* signal trampoline */ u32 rs_code[8] ____cacheline_aligned; /* signal trampoline */
}; };
...@@ -187,7 +187,7 @@ static int setup_rt_frame_n32(struct k_sigaction * ka, ...@@ -187,7 +187,7 @@ static int setup_rt_frame_n32(struct k_sigaction * ka,
install_sigtramp(frame->rs_code, __NR_N32_rt_sigreturn); install_sigtramp(frame->rs_code, __NR_N32_rt_sigreturn);
/* Create siginfo. */ /* Create siginfo. */
err |= copy_siginfo_to_user(&frame->rs_info, info); err |= copy_siginfo_to_user32(&frame->rs_info, info);
/* Create the ucontext. */ /* Create the ucontext. */
err |= __put_user(0, &frame->rs_uc.uc_flags); err |= __put_user(0, &frame->rs_uc.uc_flags);
......
...@@ -822,7 +822,7 @@ void ipi_decode(struct smtc_ipi *pipi) ...@@ -822,7 +822,7 @@ void ipi_decode(struct smtc_ipi *pipi)
switch (type_copy) { switch (type_copy) {
case SMTC_CLOCK_TICK: case SMTC_CLOCK_TICK:
irq_enter(); irq_enter();
kstat_this_cpu.irqs[MIPS_CPU_IRQ_BASE + cp0_perfcount_irq]++; kstat_this_cpu.irqs[MIPS_CPU_IRQ_BASE + cp0_compare_irq]++;
/* Invoke Clock "Interrupt" */ /* Invoke Clock "Interrupt" */
ipi_timer_latch[dest_copy] = 0; ipi_timer_latch[dest_copy] = 0;
#ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG #ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include "libgcc.h" #include "libgcc.h"
word_type __ucmpdi2 (unsigned long a, unsigned long b) word_type __ucmpdi2 (unsigned long long a, unsigned long long b)
{ {
const DWunion au = {.ll = a}; const DWunion au = {.ll = a};
const DWunion bu = {.ll = b}; const DWunion bu = {.ll = b};
......
...@@ -310,7 +310,7 @@ static inline int test_and_clear_bit(unsigned long nr, ...@@ -310,7 +310,7 @@ static inline int test_and_clear_bit(unsigned long nr,
if (cpu_has_llsc && R10000_LLSC_WAR) { if (cpu_has_llsc && R10000_LLSC_WAR) {
unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG); unsigned long *m = ((unsigned long *) addr) + (nr >> SZLONG_LOG);
unsigned long temp, res; unsigned long temp;
__asm__ __volatile__( __asm__ __volatile__(
" .set mips3 \n" " .set mips3 \n"
......
...@@ -10,6 +10,68 @@ ...@@ -10,6 +10,68 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
typedef struct compat_siginfo {
int si_signo;
int si_code;
int si_errno;
union {
int _pad[SI_PAD_SIZE32];
/* kill() */
struct {
compat_pid_t _pid; /* sender's pid */
compat_uid_t _uid; /* sender's uid */
} _kill;
/* SIGCHLD */
struct {
compat_pid_t _pid; /* which child */
compat_uid_t _uid; /* sender's uid */
int _status; /* exit code */
compat_clock_t _utime;
compat_clock_t _stime;
} _sigchld;
/* IRIX SIGCHLD */
struct {
compat_pid_t _pid; /* which child */
compat_clock_t _utime;
int _status; /* exit code */
compat_clock_t _stime;
} _irix_sigchld;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct {
s32 _addr; /* faulting insn/memory ref. */
} _sigfault;
/* SIGPOLL, SIGXFSZ (To do ...) */
struct {
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
int _fd;
} _sigpoll;
/* POSIX.1b timers */
struct {
timer_t _tid; /* timer id */
int _overrun; /* overrun count */
compat_sigval_t _sigval;/* same as below */
int _sys_private; /* not to be passed to user */
} _timer;
/* POSIX.1b signals */
struct {
compat_pid_t _pid; /* sender's pid */
compat_uid_t _uid; /* sender's uid */
compat_sigval_t _sigval;
} _rt;
} _sifields;
} compat_siginfo_t;
static inline int __copy_conv_sigset_to_user(compat_sigset_t __user *d, static inline int __copy_conv_sigset_to_user(compat_sigset_t __user *d,
const sigset_t *s) const sigset_t *s)
{ {
......
...@@ -122,6 +122,13 @@ search_module_dbetables(unsigned long addr) ...@@ -122,6 +122,13 @@ search_module_dbetables(unsigned long addr)
#define MODULE_KERNEL_TYPE "64BIT " #define MODULE_KERNEL_TYPE "64BIT "
#endif #endif
#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_KERNEL_TYPE #ifdef CONFIG_MIPS_MT_SMTC
#define MODULE_KERNEL_SMTC "MT_SMTC "
#else
#define MODULE_KERNEL_SMTC ""
#endif
#define MODULE_ARCH_VERMAGIC \
MODULE_PROC_FAMILY MODULE_KERNEL_TYPE MODULE_KERNEL_SMTC
#endif /* _ASM_MODULE_H */ #endif /* _ASM_MODULE_H */
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