diff --git a/arch/h8300/kernel/ints.c b/arch/h8300/kernel/ints.c index 4a70da2b1e34a28b785b41522512cbe511da9d1d..7246e29ea01d3907a459210b006f19e964e6eea3 100644 --- a/arch/h8300/kernel/ints.c +++ b/arch/h8300/kernel/ints.c @@ -93,7 +93,7 @@ void __init init_IRQ(void) if (ramvec == NULL) panic("interrupt vector serup failed."); else - printk("virtual vector at 0x%08lx\n",(unsigned long)ramvec); + printk(KERN_INFO "virtual vector at 0x%08lx\n",(unsigned long)ramvec); /* create redirect table */ ramvec_p = ramvec; @@ -118,11 +118,11 @@ void __init init_IRQ(void) ramvec_p = ramvec; for (i = 0; i < NR_IRQS; i++) { if ((i % 8) == 0) - printk("\n%p: ",ramvec_p); - printk("%p ",*ramvec_p); + printk(KERN_DEBUG "\n%p: ",ramvec_p); + printk(KERN_DEBUG "%p ",*ramvec_p); ramvec_p++; } - printk("\n"); + printk(KERN_DEBUG "\n"); #endif #endif } @@ -133,9 +133,10 @@ int request_irq(unsigned int irq, { irq_handler_t *irq_handle; if (irq < 0 || irq >= NR_IRQS) { - printk("Incorrect IRQ %d from %s\n", irq, devname); + printk(KERN_ERR "Incorrect IRQ %d from %s\n", irq, devname); return -EINVAL; } + if (irq_list[irq] || (h8300_enable_irq_pin(irq) == -EBUSY)) return -EBUSY; @@ -156,6 +157,11 @@ int request_irq(unsigned int irq, irq_handle->dev_id = dev_id; irq_handle->devname = devname; irq_list[irq] = irq_handle; + + if (irq_handle->flags & SA_SAMPLE_RANDOM) + rand_initialize_irq(irq); + + enable_irq(irq); return 0; } @@ -163,12 +169,13 @@ EXPORT_SYMBOL(request_irq); void free_irq(unsigned int irq, void *dev_id) { - if (irq >= NR_IRQS) { + if (irq >= NR_IRQS) return; - } + if (!irq_list[irq] || irq_list[irq]->dev_id != dev_id) - printk("Removing probably wrong IRQ %d from %s\n", + printk(KERN_WARNING "Removing probably wrong IRQ %d from %s\n", irq, irq_list[irq]->devname); + disable_irq(irq); h8300_disable_irq_pin(irq); if (((unsigned long)irq_list[irq] & 0x80000000) == 0) { kfree(irq_list[irq]); diff --git a/arch/h8300/kernel/traps.c b/arch/h8300/kernel/traps.c index 4cc723eb36514de59a637d497216a77e7a964dda..300e3279ca5abb5b25c3afab13fd8748dba41382 100644 --- a/arch/h8300/kernel/traps.c +++ b/arch/h8300/kernel/traps.c @@ -16,9 +16,10 @@ #include <linux/types.h> #include <linux/sched.h> -#include <linux/kernel_stat.h> +#include <linux/kernel.h> #include <linux/errno.h> #include <linux/init.h> +#include <linux/module.h> #include <asm/system.h> #include <asm/irq.h> @@ -41,7 +42,7 @@ void __init trap_init (void) asmlinkage void set_esp0 (unsigned long ssp) { - current->thread.esp0 = ssp; + current->thread.esp0 = ssp; } /* @@ -55,14 +56,6 @@ static void dump(struct pt_regs *fp) int i; printk("\nCURRENT PROCESS:\n\n"); -#if 0 -{ - extern int swt_lastjiffies, swt_reference; - printk("WATCHDOG: jiffies=%d lastjiffies=%d [%d] reference=%d\n", - jiffies, swt_lastjiffies, (swt_lastjiffies - jiffies), - swt_reference); -} -#endif printk("COMM=%s PID=%d\n", current->comm, current->pid); if (current->mm) { printk("TEXT=%08x-%08x DATA=%08x-%08x BSS=%08x-%08x\n", @@ -77,12 +70,7 @@ static void dump(struct pt_regs *fp) (int) PAGE_SIZE+(unsigned long)current); } - printk("PC: %08lx\n", (long)fp->pc); - printk("CCR: %02x SP: %08lx\n", fp->ccr, (long) fp); - printk("ER0: %08lx ER1: %08lx ER2: %08lx ER3: %08lx\n", - fp->er0, fp->er1, fp->er2, fp->er3); - printk("ER4: %08lx ER5: %08lx ER6: %08lx\n", - fp->er4, fp->er5, fp->er6); + show_regs(fp); printk("\nCODE:"); tp = ((unsigned char *) fp->pc) - 0x20; for (sp = (unsigned long *) tp, i = 0; (i < 0x40); i += 4) { @@ -106,12 +94,6 @@ static void dump(struct pt_regs *fp) printk("\n\n"); } -void show_trace_task(struct task_struct *tsk) -{ - /* DAVIDM: we can do better, need a proper stack dump */ - printk("STACK ksp=0x%lx, usp=0x%lx\n", tsk->thread.ksp, tsk->thread.usp); -} - void die_if_kernel (char *str, struct pt_regs *fp, int nr) { extern int console_loglevel; @@ -174,3 +156,14 @@ void show_stack(struct task_struct *task, unsigned long *esp) printk("\n"); } +void show_trace_task(struct task_struct *tsk) +{ + show_stack(tsk,(unsigned long *)tsk->thread.esp0); +} + +void dump_stack(void) +{ + show_stack(NULL,NULL); +} + +EXPORT_SYMBOL(dump_stack); diff --git a/arch/h8300/platform/h8s/entry.S b/arch/h8300/platform/h8s/entry.S index ddb04b46d42336bbf76b59ecccb4e83f4941b0d6..ab73e30cd8ff9f745111564ba93efc100a44f28d 100644 --- a/arch/h8300/platform/h8s/entry.S +++ b/arch/h8300/platform/h8s/entry.S @@ -166,7 +166,7 @@ SYMBOL_NAME_LABEL(interrupt_entry) mov.l sp,er1 subs #4,er1 /* adjust ret_pc */ jsr @SYMBOL_NAME(process_int) - mov.l @SYMBOL_NAME(irq_stat)+CPU_SOFTIRQ_PENDING,er0 + mov.l @SYMBOL_NAME(irq_stat)+CPUSTAT_SOFTIRQ_PENDING,er0 beq 1f jsr @SYMBOL_NAME(do_softirq) 1: diff --git a/arch/h8300/platform/h8s/ints_h8s.c b/arch/h8300/platform/h8s/ints_h8s.c index 61d14597728f71208a42d4db8a40bd80dac8acad..f53de493e3e80c0107d44430351ca27bd603ac2e 100644 --- a/arch/h8300/platform/h8s/ints_h8s.c +++ b/arch/h8300/platform/h8s/ints_h8s.c @@ -9,6 +9,7 @@ #include <linux/config.h> #include <linux/init.h> #include <linux/errno.h> +#include <linux/kernel.h> #include <asm/ptrace.h> #include <asm/traps.h> @@ -80,12 +81,13 @@ int h8300_enable_irq_pin(unsigned int irq) if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15) { unsigned short ptn = 1 << (irq - EXT_IRQ0); unsigned int port_no,bit_no; - IRQ_GPIO_MAP(ptn,irq,port_no,bit_no); + IRQ_GPIO_MAP(ptn, irq, port_no, bit_no); if (H8300_GPIO_RESERVE(port_no, bit_no) == 0) return -EBUSY; /* pin already use */ H8300_GPIO_DDR(port_no, bit_no, H8300_GPIO_INPUT); *(volatile unsigned short *)ISR &= ~ptn; /* ISR clear */ - } + } + return 0; } @@ -97,7 +99,7 @@ void h8300_disable_irq_pin(unsigned int irq) unsigned short port_no,bit_no; *(volatile unsigned short *)ISR &= ~ptn; *(volatile unsigned short *)IER &= ~ptn; - IRQ_GPIO_MAP(ptn,port_no,bit_no); + IRQ_GPIO_MAP(ptn, irq, port_no, bit_no); H8300_GPIO_FREE(port_no, bit_no); } } diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c index ea827607de398573685e1126d3267c8f4466c55d..15fb5ddf783a971db31c5275e2211cd0af4dcdc6 100644 --- a/drivers/serial/sh-sci.c +++ b/drivers/serial/sh-sci.c @@ -297,10 +297,10 @@ static void kgdb_break_interrupt(int irq, void *ptr, struct pt_regs *regs) #if defined(__H8300S__) enum { sci_disable, sci_enable }; -static void h8300_sci_enable(struct sci_port* port, unsigned int ctrl) +static void h8300_sci_enable(struct uart_port* port, unsigned int ctrl) { volatile unsigned char *mstpcrl=(volatile unsigned char *)MSTPCRL; - int ch = (port->base - SMR0) >> 3; + int ch = (port->mapbase - SMR0) >> 3; unsigned char mask = 1 << (ch+1); if (ctrl == sci_disable) { @@ -1276,7 +1276,7 @@ static struct sci_port sci_ports[SCI_NPORTS] = { .line = 1, }, .type = PORT_SCI, - .irqs = H8S_IRQS1, + .irqs = H8S_SCI_IRQS1, .init_pins = sci_init_pins_sci, }, { @@ -1290,7 +1290,7 @@ static struct sci_port sci_ports[SCI_NPORTS] = { .line = 2, }, .type = PORT_SCI, - .irqs = H8S_IRQS2, + .irqs = H8S_SCI_IRQS2, .init_pins = sci_init_pins_sci, }, #else diff --git a/include/asm-h8300/io.h b/include/asm-h8300/io.h index 2962f90304135b5a10372cbe7aa3f286e438b19d..662ca869856ab1e060bb4f95d05005492da903f0 100644 --- a/include/asm-h8300/io.h +++ b/include/asm-h8300/io.h @@ -9,7 +9,7 @@ #if defined(CONFIG_H83007) || defined(CONFIG_H83068) #include <asm/regs306x.h> #elif defined(CONFIG_H8S2678) -#include <asm/regs2678.h> +#include <asm/regs267x.h> #else #error UNKNOWN CPU TYPE #endif @@ -73,7 +73,7 @@ static inline unsigned int _swapl(volatile unsigned long v) static inline int h8300_buswidth(unsigned int addr) { - return (*(volatile unsigned char *)ABWCR & (1 << (addr >> 21) & 7)) == 0; + return (*(volatile unsigned char *)ABWCR & (1 << ((addr >> 21) & 7))) == 0; } static inline void io_outsb(unsigned int addr, void *buf, int len) @@ -145,10 +145,10 @@ static inline void io_insl(unsigned int addr, void *buf, int len) #define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c)) #define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c)) -#define inb(addr) ((h8300_buswidth(addr))?readb(addr ^ 1) & 0xff:readb(addr)) +#define inb(addr) ((h8300_buswidth(addr))?readb((addr) ^ 1) & 0xff:readb(addr)) #define inw(addr) _swapw(readw(addr)) #define inl(addr) _swapl(readl(addr)) -#define outb(x,addr) ((void)((h8300_buswidth(addr) && (addr & 1))?writew(x,addr):writeb(x,addr))) +#define outb(x,addr) ((void)((h8300_buswidth(addr) && ((addr) & 1))?writew(x,addr):writeb(x,addr))) #define outw(x,addr) ((void) writew(_swapw(x),addr)) #define outl(x,addr) ((void) writel(_swapl(x),addr))