Commit 34bac238 authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.23

* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.23:
  sh: fix defconfigs for sh7751r boards
  sh: fix cf support on r2d boards
  sh: update r2d defconfig
  sh: update snapgear defconfig.
  sh: Fix SH-X3 FPU exception handling.
  sh: Fix pgd mismatch from cached TTB in unhandled fault.
  sh: Don't include fault-nommu on SH-2/SH-2A.
  sh: Fix irqflags tracing for SH-3/4 nommu.
  sh: Fix lockdep debugging oops on SH-3/4.
parents 24728448 cc6f33db
...@@ -140,12 +140,19 @@ static struct platform_device sm501_device = { ...@@ -140,12 +140,19 @@ static struct platform_device sm501_device = {
static struct platform_device *rts7751r2d_devices[] __initdata = { static struct platform_device *rts7751r2d_devices[] __initdata = {
&uart_device, &uart_device,
&heartbeat_device, &heartbeat_device,
&cf_ide_device,
&sm501_device, &sm501_device,
}; };
static int __init rts7751r2d_devices_setup(void) static int __init rts7751r2d_devices_setup(void)
{ {
int ret;
if (ctrl_inw(PA_BVERREG) == 0x10) { /* only working on R2D-PLUS */
ret = platform_device_register(&cf_ide_device);
if (ret)
return ret;
}
return platform_add_devices(rts7751r2d_devices, return platform_add_devices(rts7751r2d_devices,
ARRAY_SIZE(rts7751r2d_devices)); ARRAY_SIZE(rts7751r2d_devices));
} }
......
...@@ -145,7 +145,7 @@ CONFIG_CPU_SH4=y ...@@ -145,7 +145,7 @@ CONFIG_CPU_SH4=y
# CONFIG_CPU_SUBTYPE_SH7091 is not set # CONFIG_CPU_SUBTYPE_SH7091 is not set
# CONFIG_CPU_SUBTYPE_SH7750R is not set # CONFIG_CPU_SUBTYPE_SH7750R is not set
# CONFIG_CPU_SUBTYPE_SH7750S is not set # CONFIG_CPU_SUBTYPE_SH7750S is not set
CONFIG_CPU_SUBTYPE_SH7751=y # CONFIG_CPU_SUBTYPE_SH7751 is not set
CONFIG_CPU_SUBTYPE_SH7751R=y CONFIG_CPU_SUBTYPE_SH7751R=y
# CONFIG_CPU_SUBTYPE_SH7760 is not set # CONFIG_CPU_SUBTYPE_SH7760 is not set
# CONFIG_CPU_SUBTYPE_SH4_202 is not set # CONFIG_CPU_SUBTYPE_SH4_202 is not set
......
...@@ -156,7 +156,7 @@ CONFIG_CPU_SH4=y ...@@ -156,7 +156,7 @@ CONFIG_CPU_SH4=y
# CONFIG_CPU_SUBTYPE_SH7091 is not set # CONFIG_CPU_SUBTYPE_SH7091 is not set
# CONFIG_CPU_SUBTYPE_SH7750R is not set # CONFIG_CPU_SUBTYPE_SH7750R is not set
# CONFIG_CPU_SUBTYPE_SH7750S is not set # CONFIG_CPU_SUBTYPE_SH7750S is not set
CONFIG_CPU_SUBTYPE_SH7751=y # CONFIG_CPU_SUBTYPE_SH7751 is not set
CONFIG_CPU_SUBTYPE_SH7751R=y CONFIG_CPU_SUBTYPE_SH7751R=y
# CONFIG_CPU_SUBTYPE_SH7760 is not set # CONFIG_CPU_SUBTYPE_SH7760 is not set
# CONFIG_CPU_SUBTYPE_SH4_202 is not set # CONFIG_CPU_SUBTYPE_SH4_202 is not set
......
...@@ -159,7 +159,7 @@ CONFIG_CPU_SH4=y ...@@ -159,7 +159,7 @@ CONFIG_CPU_SH4=y
# CONFIG_CPU_SUBTYPE_SH7091 is not set # CONFIG_CPU_SUBTYPE_SH7091 is not set
# CONFIG_CPU_SUBTYPE_SH7750R is not set # CONFIG_CPU_SUBTYPE_SH7750R is not set
# CONFIG_CPU_SUBTYPE_SH7750S is not set # CONFIG_CPU_SUBTYPE_SH7750S is not set
CONFIG_CPU_SUBTYPE_SH7751=y # CONFIG_CPU_SUBTYPE_SH7751 is not set
CONFIG_CPU_SUBTYPE_SH7751R=y CONFIG_CPU_SUBTYPE_SH7751R=y
# CONFIG_CPU_SUBTYPE_SH7760 is not set # CONFIG_CPU_SUBTYPE_SH7760 is not set
# CONFIG_CPU_SUBTYPE_SH4_202 is not set # CONFIG_CPU_SUBTYPE_SH4_202 is not set
......
...@@ -243,8 +243,8 @@ CONFIG_SH_PCLK_FREQ=60000000 ...@@ -243,8 +243,8 @@ CONFIG_SH_PCLK_FREQ=60000000
# #
# DMA support # DMA support
# #
CONFIG_SH_DMA=y # CONFIG_SH_DMA is not set
CONFIG_NR_ONCHIP_DMA_CHANNELS=8 # CONFIG_NR_ONCHIP_DMA_CHANNELS is not set
# CONFIG_NR_DMA_CHANNELS_BOOL is not set # CONFIG_NR_DMA_CHANNELS_BOOL is not set
# #
...@@ -280,7 +280,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00010000 ...@@ -280,7 +280,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00010000
CONFIG_BOOT_LINK_OFFSET=0x00800000 CONFIG_BOOT_LINK_OFFSET=0x00800000
# CONFIG_UBC_WAKEUP is not set # CONFIG_UBC_WAKEUP is not set
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=tty0 console=ttySC0,115200 root=/dev/sda1 earlyprintk=bios" CONFIG_CMDLINE="console=tty0 console=ttySC0,115200 root=/dev/sda1 earlyprintk=serial"
# #
# Bus options # Bus options
...@@ -1323,7 +1323,7 @@ CONFIG_ENABLE_MUST_CHECK=y ...@@ -1323,7 +1323,7 @@ CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_DEBUG_KERNEL is not set # CONFIG_DEBUG_KERNEL is not set
CONFIG_LOG_BUF_SHIFT=14 CONFIG_LOG_BUF_SHIFT=14
# CONFIG_DEBUG_BUGVERBOSE is not set # CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_SH_STANDARD_BIOS=y # CONFIG_SH_STANDARD_BIOS is not set
CONFIG_EARLY_SCIF_CONSOLE=y CONFIG_EARLY_SCIF_CONSOLE=y
CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000 CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000
CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK=y
......
This diff is collapsed.
...@@ -141,7 +141,7 @@ CONFIG_CPU_SH4=y ...@@ -141,7 +141,7 @@ CONFIG_CPU_SH4=y
# CONFIG_CPU_SUBTYPE_SH7091 is not set # CONFIG_CPU_SUBTYPE_SH7091 is not set
# CONFIG_CPU_SUBTYPE_SH7750R is not set # CONFIG_CPU_SUBTYPE_SH7750R is not set
# CONFIG_CPU_SUBTYPE_SH7750S is not set # CONFIG_CPU_SUBTYPE_SH7750S is not set
CONFIG_CPU_SUBTYPE_SH7751=y # CONFIG_CPU_SUBTYPE_SH7751 is not set
CONFIG_CPU_SUBTYPE_SH7751R=y CONFIG_CPU_SUBTYPE_SH7751R=y
# CONFIG_CPU_SUBTYPE_SH7760 is not set # CONFIG_CPU_SUBTYPE_SH7760 is not set
# CONFIG_CPU_SUBTYPE_SH4_202 is not set # CONFIG_CPU_SUBTYPE_SH4_202 is not set
......
...@@ -147,7 +147,7 @@ CONFIG_CPU_SH4=y ...@@ -147,7 +147,7 @@ CONFIG_CPU_SH4=y
# CONFIG_CPU_SUBTYPE_SH7091 is not set # CONFIG_CPU_SUBTYPE_SH7091 is not set
# CONFIG_CPU_SUBTYPE_SH7750R is not set # CONFIG_CPU_SUBTYPE_SH7750R is not set
# CONFIG_CPU_SUBTYPE_SH7750S is not set # CONFIG_CPU_SUBTYPE_SH7750S is not set
CONFIG_CPU_SUBTYPE_SH7751=y # CONFIG_CPU_SUBTYPE_SH7751 is not set
CONFIG_CPU_SUBTYPE_SH7751R=y CONFIG_CPU_SUBTYPE_SH7751R=y
# CONFIG_CPU_SUBTYPE_SH7760 is not set # CONFIG_CPU_SUBTYPE_SH7760 is not set
# CONFIG_CPU_SUBTYPE_SH4_202 is not set # CONFIG_CPU_SUBTYPE_SH4_202 is not set
......
...@@ -149,8 +149,7 @@ call_dpf: ...@@ -149,8 +149,7 @@ call_dpf:
lds r10, pr lds r10, pr
rts rts
nop nop
0: sti 0: mov.l 3f, r0
mov.l 3f, r0
mov r9, r6 mov r9, r6
mov r8, r5 mov r8, r5
jmp @r0 jmp @r0
......
...@@ -854,9 +854,14 @@ void __init trap_init(void) ...@@ -854,9 +854,14 @@ void __init trap_init(void)
set_exception_table_evt(0x800, do_reserved_inst); set_exception_table_evt(0x800, do_reserved_inst);
set_exception_table_evt(0x820, do_illegal_slot_inst); set_exception_table_evt(0x820, do_illegal_slot_inst);
#elif defined(CONFIG_SH_FPU) #elif defined(CONFIG_SH_FPU)
#ifdef CONFIG_CPU_SUBTYPE_SHX3
set_exception_table_evt(0xd80, do_fpu_state_restore);
set_exception_table_evt(0xda0, do_fpu_state_restore);
#else
set_exception_table_evt(0x800, do_fpu_state_restore); set_exception_table_evt(0x800, do_fpu_state_restore);
set_exception_table_evt(0x820, do_fpu_state_restore); set_exception_table_evt(0x820, do_fpu_state_restore);
#endif #endif
#endif
#ifdef CONFIG_CPU_SH2 #ifdef CONFIG_CPU_SH2
set_exception_table_vec(TRAP_ADDRESS_ERROR, address_error_handler); set_exception_table_vec(TRAP_ADDRESS_ERROR, address_error_handler);
......
...@@ -8,7 +8,9 @@ obj-$(CONFIG_CPU_SH2) += cache-sh2.o ...@@ -8,7 +8,9 @@ obj-$(CONFIG_CPU_SH2) += cache-sh2.o
obj-$(CONFIG_CPU_SH3) += cache-sh3.o obj-$(CONFIG_CPU_SH3) += cache-sh3.o
obj-$(CONFIG_CPU_SH4) += cache-sh4.o obj-$(CONFIG_CPU_SH4) += cache-sh4.o
mmu-y := fault-nommu.o tlb-nommu.o pg-nommu.o mmu-y := tlb-nommu.o pg-nommu.o
mmu-$(CONFIG_CPU_SH3) += fault-nommu.o
mmu-$(CONFIG_CPU_SH4) += fault-nommu.o
mmu-$(CONFIG_MMU) := fault.o clear_page.o copy_page.o tlb-flush.o \ mmu-$(CONFIG_MMU) := fault.o clear_page.o copy_page.o tlb-flush.o \
ioremap.o ioremap.o
......
/* /*
* arch/sh/mm/fault-nommu.c * arch/sh/mm/fault-nommu.c
* *
* Copyright (C) 2002 Paul Mundt * Copyright (C) 2002 - 2007 Paul Mundt
* *
* Based on linux/arch/sh/mm/fault.c: * Based on linux/arch/sh/mm/fault.c:
* Copyright (C) 1999 Niibe Yutaka * Copyright (C) 1999 Niibe Yutaka
* *
* Released under the terms of the GNU GPL v2.0. * Released under the terms of the GNU GPL v2.0.
*/ */
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/types.h>
#include <linux/ptrace.h>
#include <linux/mman.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/smp.h> #include <linux/hardirq.h>
#include <linux/interrupt.h> #include <linux/kprobes.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/io.h> #include <asm/ptrace.h>
#include <asm/uaccess.h>
#include <asm/pgalloc.h>
#include <asm/mmu_context.h>
#include <asm/cacheflush.h>
#if defined(CONFIG_SH_KGDB)
#include <asm/kgdb.h> #include <asm/kgdb.h>
#endif
extern void die(const char *,struct pt_regs *,long);
/* /*
* This routine handles page faults. It determines the address, * This routine handles page faults. It determines the address,
* and the problem, and then passes it off to one of the appropriate * and the problem, and then passes it off to one of the appropriate
* routines. * routines.
*/ */
asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long writeaccess, asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
unsigned long address) unsigned long writeaccess,
unsigned long address)
{ {
trace_hardirqs_on();
local_irq_enable();
#if defined(CONFIG_SH_KGDB) #if defined(CONFIG_SH_KGDB)
if (kgdb_nofault && kgdb_bus_err_hook) if (kgdb_nofault && kgdb_bus_err_hook)
kgdb_bus_err_hook(); kgdb_bus_err_hook();
...@@ -65,17 +51,14 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long writeaccess, ...@@ -65,17 +51,14 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long writeaccess,
do_exit(SIGKILL); do_exit(SIGKILL);
} }
asmlinkage int __do_page_fault(struct pt_regs *regs, unsigned long writeaccess, asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs,
unsigned long address) unsigned long writeaccess,
unsigned long address)
{ {
#if defined(CONFIG_SH_KGDB) #if defined(CONFIG_SH_KGDB)
if (kgdb_nofault && kgdb_bus_err_hook) if (kgdb_nofault && kgdb_bus_err_hook)
kgdb_bus_err_hook(); kgdb_bus_err_hook();
#endif #endif
if (address >= TASK_SIZE) return (address >= TASK_SIZE);
return 1;
return 0;
} }
...@@ -184,8 +184,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, ...@@ -184,8 +184,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
printk(KERN_ALERT "pc = %08lx\n", regs->pc); printk(KERN_ALERT "pc = %08lx\n", regs->pc);
page = (unsigned long)get_TTB(); page = (unsigned long)get_TTB();
if (page) { if (page) {
page = ((__typeof__(page) *) __va(page))[address >> page = ((__typeof__(page) *)page)[address >> PGDIR_SHIFT];
PGDIR_SHIFT];
printk(KERN_ALERT "*pde = %08lx\n", page); printk(KERN_ALERT "*pde = %08lx\n", page);
if (page & _PAGE_PRESENT) { if (page & _PAGE_PRESENT) {
page &= PAGE_MASK; page &= PAGE_MASK;
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#define PA_VERREG 0xa4000032 /* FPGA Version Register */ #define PA_VERREG 0xa4000032 /* FPGA Version Register */
#define PA_INPORT 0xa4000034 /* KEY Input Port control */ #define PA_INPORT 0xa4000034 /* KEY Input Port control */
#define PA_OUTPORT 0xa4000036 /* LED control */ #define PA_OUTPORT 0xa4000036 /* LED control */
#define PA_DMPORT 0xa4000038 /* DM270 Output Port control */ #define PA_BVERREG 0xa4000038 /* Board Revision Register */
#define PA_AX88796L 0xaa000400 /* AX88796L Area */ #define PA_AX88796L 0xaa000400 /* AX88796L Area */
#define PA_VOYAGER 0xab000000 /* VOYAGER GX Area */ #define PA_VOYAGER 0xab000000 /* VOYAGER GX Area */
......
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