Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
This commit is contained in:
@@ -1471,7 +1471,7 @@ config SB1_PASS_2_1_WORKAROUNDS
|
||||
|
||||
config 64BIT_PHYS_ADDR
|
||||
bool "Support for 64-bit physical address space"
|
||||
depends on (CPU_R4X00 || CPU_R5000 || CPU_RM7000 || CPU_RM9000 || CPU_R10000 || CPU_SB1 || CPU_MIPS32_R1 || CPU_MIPS64_R1) && 32BIT
|
||||
depends on (CPU_R4X00 || CPU_R5000 || CPU_RM7000 || CPU_RM9000 || CPU_R10000 || CPU_SB1 || CPU_MIPS32 || CPU_MIPS64) && 32BIT
|
||||
|
||||
config CPU_ADVANCED
|
||||
bool "Override CPU Options"
|
||||
@@ -1492,14 +1492,6 @@ config CPU_HAS_LLSC
|
||||
for better performance, N if you don't know. You must say Y here
|
||||
for multiprocessor machines.
|
||||
|
||||
config CPU_HAS_LLDSCD
|
||||
bool "lld/scd Instructions available" if CPU_ADVANCED
|
||||
default y if !CPU_ADVANCED && !CPU_R3000 && !CPU_VR41XX && !CPU_TX39XX && !CPU_MIPS32_R1
|
||||
help
|
||||
Say Y here if your CPU has the lld and scd instructions, the 64-bit
|
||||
equivalents of ll and sc. Say Y here for better performance, N if
|
||||
you don't know. You must say Y here for multiprocessor machines.
|
||||
|
||||
config CPU_HAS_WB
|
||||
bool "Writeback Buffer available" if CPU_ADVANCED
|
||||
default y if !CPU_ADVANCED && CPU_R3000 && MACH_DECSTATION
|
||||
|
@@ -93,7 +93,6 @@ endif
|
||||
#
|
||||
cflags-y += -I $(TOPDIR)/include/asm/gcc
|
||||
cflags-y += -G 0 -mno-abicalls -fno-pic -pipe
|
||||
cflags-y += $(call cc-option, -finline-limit=100000)
|
||||
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
|
||||
MODFLAGS += -mlong-calls
|
||||
|
||||
|
@@ -130,7 +130,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_SIBYTE_DMA_PAGEOPS is not set
|
||||
# CONFIG_MIPS_MT is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -115,7 +115,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -116,7 +116,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -116,7 +116,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -118,7 +118,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -121,7 +121,6 @@ CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -123,7 +123,6 @@ CONFIG_IP22_CPU_SCACHE=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -119,7 +119,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -121,7 +121,6 @@ CONFIG_R5000_CPU_SCACHE=y
|
||||
CONFIG_RM7000_CPU_SCACHE=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -117,7 +117,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -114,7 +114,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -124,7 +124,6 @@ CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -121,7 +121,6 @@ CONFIG_R5000_CPU_SCACHE=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc2
|
||||
# Thu Nov 24 01:06:35 2005
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Fri Dec 23 02:21:03 2005
|
||||
#
|
||||
CONFIG_MIPS=y
|
||||
|
||||
@@ -87,8 +87,8 @@ CONFIG_HAVE_STD_PC_SERIAL_PORT=y
|
||||
#
|
||||
# CPU selection
|
||||
#
|
||||
CONFIG_CPU_MIPS32_R1=y
|
||||
# CONFIG_CPU_MIPS32_R2 is not set
|
||||
# CONFIG_CPU_MIPS32_R1 is not set
|
||||
CONFIG_CPU_MIPS32_R2=y
|
||||
# CONFIG_CPU_MIPS64_R1 is not set
|
||||
# CONFIG_CPU_MIPS64_R2 is not set
|
||||
# CONFIG_CPU_R3000 is not set
|
||||
@@ -112,7 +112,7 @@ CONFIG_SYS_HAS_CPU_MIPS64_R1=y
|
||||
CONFIG_SYS_HAS_CPU_NEVADA=y
|
||||
CONFIG_SYS_HAS_CPU_RM7000=y
|
||||
CONFIG_CPU_MIPS32=y
|
||||
CONFIG_CPU_MIPSR1=y
|
||||
CONFIG_CPU_MIPSR2=y
|
||||
CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
|
||||
CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y
|
||||
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
|
||||
|
@@ -122,7 +122,6 @@ CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -118,7 +118,6 @@ CONFIG_RM7000_CPU_SCACHE=y
|
||||
CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -123,7 +123,6 @@ CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -121,7 +121,6 @@ CONFIG_RM7000_CPU_SCACHE=y
|
||||
CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -116,7 +116,6 @@ CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
CONFIG_CPU_ADVANCED=y
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
# CONFIG_CPU_HAS_LLDSCD is not set
|
||||
# CONFIG_CPU_HAS_WB is not set
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
|
@@ -124,7 +124,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
CONFIG_CPU_ADVANCED=y
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_WB=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
|
@@ -124,7 +124,6 @@ CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -133,7 +133,6 @@ CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_MIPS_MT is not set
|
||||
CONFIG_SB1_PASS_1_WORKAROUNDS=y
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -118,7 +118,6 @@ CONFIG_CPU_HAS_PREFETCH=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -123,7 +123,6 @@ CONFIG_IP22_CPU_SCACHE=y
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
# CONFIG_CPU_ADVANCED is not set
|
||||
CONFIG_CPU_HAS_LLSC=y
|
||||
CONFIG_CPU_HAS_LLDSCD=y
|
||||
CONFIG_CPU_HAS_SYNC=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
@@ -435,6 +435,9 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c)
|
||||
}
|
||||
}
|
||||
|
||||
static char unknown_isa[] __initdata = KERN_ERR \
|
||||
"Unsupported ISA type, c0.config0: %d.";
|
||||
|
||||
static inline unsigned int decode_config0(struct cpuinfo_mips *c)
|
||||
{
|
||||
unsigned int config0;
|
||||
@@ -447,16 +450,37 @@ static inline unsigned int decode_config0(struct cpuinfo_mips *c)
|
||||
isa = (config0 & MIPS_CONF_AT) >> 13;
|
||||
switch (isa) {
|
||||
case 0:
|
||||
c->isa_level = MIPS_CPU_ISA_M32;
|
||||
switch ((config0 >> 10) & 7) {
|
||||
case 0:
|
||||
c->isa_level = MIPS_CPU_ISA_M32R1;
|
||||
break;
|
||||
case 1:
|
||||
c->isa_level = MIPS_CPU_ISA_M32R2;
|
||||
break;
|
||||
default:
|
||||
goto unknown;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
c->isa_level = MIPS_CPU_ISA_M64;
|
||||
switch ((config0 >> 10) & 7) {
|
||||
case 0:
|
||||
c->isa_level = MIPS_CPU_ISA_M64R1;
|
||||
break;
|
||||
case 1:
|
||||
c->isa_level = MIPS_CPU_ISA_M64R2;
|
||||
break;
|
||||
default:
|
||||
goto unknown;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
panic("Unsupported ISA type, cp0.config0.at: %d.", isa);
|
||||
goto unknown;
|
||||
}
|
||||
|
||||
return config0 & MIPS_CONF_M;
|
||||
|
||||
unknown:
|
||||
panic(unknown_isa, config0);
|
||||
}
|
||||
|
||||
static inline unsigned int decode_config1(struct cpuinfo_mips *c)
|
||||
@@ -568,7 +592,6 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c)
|
||||
break;
|
||||
case PRID_IMP_34K:
|
||||
c->cputype = CPU_34K;
|
||||
c->isa_level = MIPS_CPU_ISA_M32;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -647,7 +670,7 @@ static inline void cpu_probe_philips(struct cpuinfo_mips *c)
|
||||
switch (c->processor_id & 0xff00) {
|
||||
case PRID_IMP_PR4450:
|
||||
c->cputype = CPU_PR4450;
|
||||
c->isa_level = MIPS_CPU_ISA_M32;
|
||||
c->isa_level = MIPS_CPU_ISA_M32R1;
|
||||
break;
|
||||
default:
|
||||
panic("Unknown Philips Core!"); /* REVISIT: die? */
|
||||
@@ -690,8 +713,10 @@ __init void cpu_probe(void)
|
||||
if (c->options & MIPS_CPU_FPU) {
|
||||
c->fpu_id = cpu_get_fpu_id();
|
||||
|
||||
if (c->isa_level == MIPS_CPU_ISA_M32 ||
|
||||
c->isa_level == MIPS_CPU_ISA_M64) {
|
||||
if (c->isa_level == MIPS_CPU_ISA_M32R1 ||
|
||||
c->isa_level == MIPS_CPU_ISA_M32R2 ||
|
||||
c->isa_level == MIPS_CPU_ISA_M64R1 ||
|
||||
c->isa_level == MIPS_CPU_ISA_M64R2) {
|
||||
if (c->fpu_id & MIPS_FPIR_3D)
|
||||
c->ases |= MIPS_ASE_MIPS3D;
|
||||
}
|
||||
|
@@ -205,7 +205,7 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *r)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void dump_regs(elf_greg_t *gp, struct pt_regs *regs)
|
||||
void elf_dump_regs(elf_greg_t *gp, struct pt_regs *regs)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -231,7 +231,7 @@ int dump_task_regs (struct task_struct *tsk, elf_gregset_t *regs)
|
||||
{
|
||||
struct thread_info *ti = tsk->thread_info;
|
||||
long ksp = (unsigned long)ti + THREAD_SIZE - 32;
|
||||
dump_regs(&(*regs)[0], (struct pt_regs *) ksp - 1);
|
||||
elf_dump_regs(&(*regs)[0], (struct pt_regs *) ksp - 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@@ -280,12 +280,8 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
if (child->thread.dsp.used_dsp) {
|
||||
dregs = __get_dsp_regs(child);
|
||||
tmp = (unsigned long) (dregs[addr - DSP_BASE]);
|
||||
} else {
|
||||
tmp = -1; /* DSP registers yet used */
|
||||
}
|
||||
dregs = __get_dsp_regs(child);
|
||||
tmp = (unsigned long) (dregs[addr - DSP_BASE]);
|
||||
break;
|
||||
}
|
||||
case DSP_CONTROL:
|
||||
|
@@ -201,12 +201,8 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
|
||||
ret = -EIO;
|
||||
goto out_tsk;
|
||||
}
|
||||
if (child->thread.dsp.used_dsp) {
|
||||
dspreg_t *dregs = __get_dsp_regs(child);
|
||||
tmp = (unsigned long) (dregs[addr - DSP_BASE]);
|
||||
} else {
|
||||
tmp = -1; /* DSP registers yet used */
|
||||
}
|
||||
dspreg_t *dregs = __get_dsp_regs(child);
|
||||
tmp = (unsigned long) (dregs[addr - DSP_BASE]);
|
||||
break;
|
||||
case DSP_CONTROL:
|
||||
if (!cpu_has_dsp) {
|
||||
|
@@ -588,7 +588,7 @@ static inline int setup_sigcontext32(struct pt_regs *regs,
|
||||
err |= __put_user(regs->hi, &sc->sc_mdhi);
|
||||
err |= __put_user(regs->lo, &sc->sc_mdlo);
|
||||
if (cpu_has_dsp) {
|
||||
err |= __put_user(rddsp(DSP_MASK), &sc->sc_hi1);
|
||||
err |= __put_user(rddsp(DSP_MASK), &sc->sc_dsp);
|
||||
err |= __put_user(mfhi1(), &sc->sc_hi1);
|
||||
err |= __put_user(mflo1(), &sc->sc_lo1);
|
||||
err |= __put_user(mfhi2(), &sc->sc_hi2);
|
||||
|
@@ -507,14 +507,38 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
int null_perf_irq(struct pt_regs *regs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int (*perf_irq)(struct pt_regs *regs) = null_perf_irq;
|
||||
|
||||
EXPORT_SYMBOL(null_perf_irq);
|
||||
EXPORT_SYMBOL(perf_irq);
|
||||
|
||||
asmlinkage void ll_timer_interrupt(int irq, struct pt_regs *regs)
|
||||
{
|
||||
int r2 = cpu_has_mips_r2;
|
||||
|
||||
irq_enter();
|
||||
kstat_this_cpu.irqs[irq]++;
|
||||
|
||||
/* we keep interrupt disabled all the time */
|
||||
timer_interrupt(irq, NULL, regs);
|
||||
/*
|
||||
* Suckage alert:
|
||||
* Before R2 of the architecture there was no way to see if a
|
||||
* performance counter interrupt was pending, so we have to run the
|
||||
* performance counter interrupt handler anyway.
|
||||
*/
|
||||
if (!r2 || (read_c0_cause() & (1 << 26)))
|
||||
if (perf_irq(regs))
|
||||
goto out;
|
||||
|
||||
/* we keep interrupt disabled all the time */
|
||||
if (!r2 || (read_c0_cause() & (1 << 30)))
|
||||
timer_interrupt(irq, NULL, regs);
|
||||
|
||||
out:
|
||||
irq_exit();
|
||||
}
|
||||
|
||||
@@ -628,9 +652,9 @@ void __init time_init(void)
|
||||
mips_hpt_init = c0_hpt_init;
|
||||
}
|
||||
|
||||
if ((current_cpu_data.isa_level == MIPS_CPU_ISA_M32) ||
|
||||
(current_cpu_data.isa_level == MIPS_CPU_ISA_I) ||
|
||||
(current_cpu_data.isa_level == MIPS_CPU_ISA_II))
|
||||
if (cpu_has_mips32r1 || cpu_has_mips32r2 ||
|
||||
(current_cpu_data.isa_level == MIPS_CPU_ISA_I) ||
|
||||
(current_cpu_data.isa_level == MIPS_CPU_ISA_II))
|
||||
/*
|
||||
* We need to calibrate the counter but we don't have
|
||||
* 64-bit division.
|
||||
|
@@ -99,9 +99,9 @@ struct vpe {
|
||||
|
||||
/* elfloader stuff */
|
||||
void *load_addr;
|
||||
u32 len;
|
||||
unsigned long len;
|
||||
char *pbuffer;
|
||||
u32 plen;
|
||||
unsigned long plen;
|
||||
|
||||
unsigned long __start;
|
||||
|
||||
@@ -253,11 +253,11 @@ void dump_mtregs(void)
|
||||
}
|
||||
|
||||
/* Find some VPE program space */
|
||||
static void *alloc_progmem(u32 len)
|
||||
static void *alloc_progmem(unsigned long len)
|
||||
{
|
||||
#ifdef CONFIG_MIPS_VPE_LOADER_TOM
|
||||
/* this means you must tell linux to use less memory than you physically have */
|
||||
return (void *)((max_pfn * PAGE_SIZE) + KSEG0);
|
||||
return pfn_to_kaddr(max_pfn);
|
||||
#else
|
||||
// simple grab some mem for now
|
||||
return kmalloc(len, GFP_KERNEL);
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* This code is based on lib/iomap.c, by Linus Torvalds.
|
||||
*
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -33,8 +33,6 @@ ieee754dp ieee754dp_fint(int x)
|
||||
|
||||
CLEARCX;
|
||||
|
||||
xc = ( 0 ? xc : xc );
|
||||
|
||||
if (x == 0)
|
||||
return ieee754dp_zero(0);
|
||||
if (x == 1 || x == -1)
|
||||
|
@@ -33,8 +33,6 @@ ieee754dp ieee754dp_flong(s64 x)
|
||||
|
||||
CLEARCX;
|
||||
|
||||
xc = ( 0 ? xc : xc );
|
||||
|
||||
if (x == 0)
|
||||
return ieee754dp_zero(0);
|
||||
if (x == 1 || x == -1)
|
||||
|
@@ -33,8 +33,6 @@ ieee754sp ieee754sp_fint(int x)
|
||||
|
||||
CLEARCX;
|
||||
|
||||
xc = ( 0 ? xc : xc );
|
||||
|
||||
if (x == 0)
|
||||
return ieee754sp_zero(0);
|
||||
if (x == 1 || x == -1)
|
||||
|
@@ -33,8 +33,6 @@ ieee754sp ieee754sp_flong(s64 x)
|
||||
|
||||
CLEARCX;
|
||||
|
||||
xc = ( 0 ? xc : xc );
|
||||
|
||||
if (x == 0)
|
||||
return ieee754sp_zero(0);
|
||||
if (x == 1 || x == -1)
|
||||
|
@@ -75,20 +75,31 @@ static void mips_timer_dispatch (struct pt_regs *regs)
|
||||
do_IRQ (mips_cpu_timer_irq, regs);
|
||||
}
|
||||
|
||||
extern int null_perf_irq(struct pt_regs *regs);
|
||||
|
||||
extern int (*perf_irq)(struct pt_regs *regs);
|
||||
|
||||
irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
int r2 = cpu_has_mips_r2;
|
||||
int cpu = smp_processor_id();
|
||||
|
||||
if (cpu == 0) {
|
||||
/*
|
||||
* CPU 0 handles the global timer interrupt job and process accounting
|
||||
* resets count/compare registers to trigger next timer int.
|
||||
* CPU 0 handles the global timer interrupt job and process
|
||||
* accounting resets count/compare registers to trigger next
|
||||
* timer int.
|
||||
*/
|
||||
(void) timer_interrupt(irq, dev_id, regs);
|
||||
if (!r2 || (read_c0_cause() & (1 << 26)))
|
||||
if (perf_irq(regs))
|
||||
goto out;
|
||||
|
||||
/* we keep interrupt disabled all the time */
|
||||
if (!r2 || (read_c0_cause() & (1 << 30)))
|
||||
timer_interrupt(irq, NULL, regs);
|
||||
|
||||
scroll_display_message();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
/* Everyone else needs to reset the timer int here as
|
||||
ll_local_timer_interrupt doesn't */
|
||||
/*
|
||||
@@ -103,16 +114,8 @@ irqreturn_t mips_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
local_timer_interrupt (irq, dev_id, regs);
|
||||
}
|
||||
|
||||
out:
|
||||
return IRQ_HANDLED;
|
||||
#else
|
||||
irqreturn_t r;
|
||||
|
||||
r = timer_interrupt(irq, dev_id, regs);
|
||||
|
||||
scroll_display_message();
|
||||
|
||||
return r;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -1183,8 +1183,8 @@ static void __init setup_scache(void)
|
||||
if (!sc_present)
|
||||
return;
|
||||
|
||||
if ((c->isa_level == MIPS_CPU_ISA_M32 ||
|
||||
c->isa_level == MIPS_CPU_ISA_M64) &&
|
||||
if ((c->isa_level == MIPS_CPU_ISA_M32R1 ||
|
||||
c->isa_level == MIPS_CPU_ISA_M64R1) &&
|
||||
!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
|
||||
panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
|
||||
|
||||
|
@@ -75,7 +75,10 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
|
||||
int res;
|
||||
|
||||
switch (current_cpu_data.cputype) {
|
||||
case CPU_5KC:
|
||||
case CPU_20KC:
|
||||
case CPU_24K:
|
||||
case CPU_25KF:
|
||||
lmodel = &op_model_mipsxx;
|
||||
break;
|
||||
|
||||
|
@@ -12,8 +12,8 @@
|
||||
|
||||
struct pt_regs;
|
||||
|
||||
extern void null_perf_irq(struct pt_regs *regs);
|
||||
extern void (*perf_irq)(struct pt_regs *regs);
|
||||
extern int null_perf_irq(struct pt_regs *regs);
|
||||
extern int (*perf_irq)(struct pt_regs *regs);
|
||||
|
||||
/* Per-counter configuration as set via oprofilefs. */
|
||||
struct op_counter_config {
|
||||
|
@@ -114,11 +114,12 @@ static void mipsxx_cpu_stop(void *args)
|
||||
}
|
||||
}
|
||||
|
||||
static void mipsxx_perfcount_handler(struct pt_regs *regs)
|
||||
static int mipsxx_perfcount_handler(struct pt_regs *regs)
|
||||
{
|
||||
unsigned int counters = op_model_mipsxx.num_counters;
|
||||
unsigned int control;
|
||||
unsigned int counter;
|
||||
int handled = 0;
|
||||
|
||||
switch (counters) {
|
||||
#define HANDLE_COUNTER(n) \
|
||||
@@ -129,12 +130,15 @@ static void mipsxx_perfcount_handler(struct pt_regs *regs)
|
||||
(counter & M_COUNTER_OVERFLOW)) { \
|
||||
oprofile_add_sample(regs, n); \
|
||||
write_c0_perfcntr ## n(reg.counter[n]); \
|
||||
handled = 1; \
|
||||
}
|
||||
HANDLE_COUNTER(3)
|
||||
HANDLE_COUNTER(2)
|
||||
HANDLE_COUNTER(1)
|
||||
HANDLE_COUNTER(0)
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
#define M_CONFIG1_PC (1 << 4)
|
||||
@@ -176,17 +180,31 @@ static int __init mipsxx_init(void)
|
||||
int counters;
|
||||
|
||||
counters = n_counters();
|
||||
if (counters == 0)
|
||||
if (counters == 0) {
|
||||
printk(KERN_ERR "Oprofile: CPU has no performance counters\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
reset_counters(counters);
|
||||
|
||||
op_model_mipsxx.num_counters = counters;
|
||||
switch (current_cpu_data.cputype) {
|
||||
case CPU_20KC:
|
||||
op_model_mipsxx.cpu_type = "mips/20K";
|
||||
break;
|
||||
|
||||
case CPU_24K:
|
||||
op_model_mipsxx.cpu_type = "mips/24K";
|
||||
break;
|
||||
|
||||
case CPU_25KF:
|
||||
op_model_mipsxx.cpu_type = "mips/25K";
|
||||
break;
|
||||
|
||||
case CPU_5KC:
|
||||
op_model_mipsxx.cpu_type = "mips/5K";
|
||||
break;
|
||||
|
||||
default:
|
||||
printk(KERN_ERR "Profiling unsupported for this CPU\n");
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* fixup-cappcela.c, The ZAO Networks Capcella specific PCI fixups.
|
||||
*
|
||||
* Copyright (C) 2002,2004 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2002,2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* fixup-mpc30x.c, The Victor MP-C303/304 specific PCI fixups.
|
||||
*
|
||||
* Copyright (C) 2002,2004 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2002,2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups.
|
||||
*
|
||||
* Copyright (C) 2003 Megasolution Inc. <matsu@megasolution.jp>
|
||||
* Copyright (C) 2004 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* fixup-tb0226.c, The TANBAC TB0226 specific PCI fixups.
|
||||
*
|
||||
* Copyright (C) 2002-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2002-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* fixup-tb0287.c, The TANBAC TB0287 specific PCI fixups.
|
||||
*
|
||||
* Copyright (C) 2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2001-2003 MontaVista Software Inc.
|
||||
* Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2001-2003 MontaVista Software Inc.
|
||||
* Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
* Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2002 MontaVista Software Inc.
|
||||
* Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2004-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* setup.c, Setup for the CASIO CASSIOPEIA E-11/15/55/65.
|
||||
*
|
||||
* Copyright (C) 2002-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2002-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2002 MontaVista Software Inc.
|
||||
* Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com>
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -25,7 +25,7 @@
|
||||
* - New creation, NEC VR4122 and VR4131 are supported.
|
||||
* - Added support for NEC VR4111 and VR4121.
|
||||
*
|
||||
* Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
* - Added support for NEC VR4133.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2001-2002 MontaVista Software Inc.
|
||||
* Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
|
||||
* Copuright (C) 2003-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copuright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -25,7 +25,7 @@
|
||||
* - New creation, NEC VR4122 and VR4131 are supported.
|
||||
* - Added support for NEC VR4111 and VR4121.
|
||||
*
|
||||
* Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
* - Added support for NEC VR4133.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2001-2002 MontaVista Software Inc.
|
||||
* Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -25,7 +25,7 @@
|
||||
* - New creation, NEC VR4122 and VR4131 are supported.
|
||||
* - Added support for NEC VR4111 and VR4121.
|
||||
*
|
||||
* Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
* - Coped with INTASSIGN of NEC VR4133.
|
||||
*/
|
||||
#include <linux/errno.h>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* init.c, Common initialization routines for NEC VR4100 series.
|
||||
*
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -35,7 +35,7 @@
|
||||
* MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com>
|
||||
* - New creation, NEC VR4100 series are supported.
|
||||
*
|
||||
* Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
* - Coped with INTASSIGN of NEC VR4133.
|
||||
*/
|
||||
#include <asm/asm.h>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Interrupt handing routines for NEC VR4100 series.
|
||||
*
|
||||
* Copyright (C) 2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* pmu.c, Power Management Unit routines for NEC VR4100 series.
|
||||
*
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* type.c, System type for NEC VR4100 series.
|
||||
*
|
||||
* Copyright (C) 2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2001-2003 MontaVista Software Inc.
|
||||
* Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com>
|
||||
* Copyright (C) 2004 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2004 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
* Copyright (C) 2005 Ralf Baechle (ralf@linux-mips.org)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* setup.c, Setup for the IBM WorkPad z50.
|
||||
*
|
||||
* Copyright (C) 2002-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2002-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
Reference in New Issue
Block a user