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.
This commit is contained in:
commit
6cd236e005
|
@ -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
|
||||||
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
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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 = {
|
||||||
.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
|
||||||
# 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)
|
||||||
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)
|
||||||
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 @@
|
||||||
|
|
||||||
#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 {
|
||||||
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 {
|
||||||
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,
|
||||||
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)
|
||||||
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 @@
|
||||||
|
|
||||||
#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,
|
||||||
|
|
||||||
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 @@
|
||||||
|
|
||||||
#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)
|
||||||
#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 */
|
||||||
|
|
Loading…
Reference in New Issue