Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6: serial: Fix sh-sci break interrupt/sysrq handling. sh: Fix bogus regs pointer in do_IRQ(). sh: Fix SH-3 cache entry_mask and way_size calculation. sh: Convert struct ioctls to static defines. sh: Define missing __NR_readahead. sh: Fix PCI BAR address-space wraparound.
This commit is contained in:
commit
fbeb1f1922
10 changed files with 53 additions and 46 deletions
|
@ -214,6 +214,12 @@ pciauto_setup_bars(struct pci_channel *hose,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (bar_value < *lower_limit || (bar_value + bar_size) >= *upper_limit) {
|
||||
DBG(" unavailable -- skipping, value %x size %x\n",
|
||||
bar_value, bar_size);
|
||||
continue;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PCI_AUTO_UPDATE_RESOURCES
|
||||
/* Write it out and update our limit */
|
||||
early_write_config_dword(hose, top_bus, current_bus, pci_devfn,
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* CPU init code
|
||||
*
|
||||
* Copyright (C) 2002 - 2006 Paul Mundt
|
||||
* Copyright (C) 2002 - 2007 Paul Mundt
|
||||
* Copyright (C) 2003 Richard Curnow
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
|
@ -48,8 +48,19 @@ static void __init cache_init(void)
|
|||
{
|
||||
unsigned long ccr, flags;
|
||||
|
||||
if (current_cpu_data.type == CPU_SH_NONE)
|
||||
panic("Unknown CPU");
|
||||
/* First setup the rest of the I-cache info */
|
||||
current_cpu_data.icache.entry_mask = current_cpu_data.icache.way_incr -
|
||||
current_cpu_data.icache.linesz;
|
||||
|
||||
current_cpu_data.icache.way_size = current_cpu_data.icache.sets *
|
||||
current_cpu_data.icache.linesz;
|
||||
|
||||
/* And the D-cache too */
|
||||
current_cpu_data.dcache.entry_mask = current_cpu_data.dcache.way_incr -
|
||||
current_cpu_data.dcache.linesz;
|
||||
|
||||
current_cpu_data.dcache.way_size = current_cpu_data.dcache.sets *
|
||||
current_cpu_data.dcache.linesz;
|
||||
|
||||
jump_to_P2();
|
||||
ccr = ctrl_inl(CCR);
|
||||
|
@ -200,6 +211,9 @@ asmlinkage void __init sh_cpu_init(void)
|
|||
/* First, probe the CPU */
|
||||
detect_cpu_and_cache_system();
|
||||
|
||||
if (current_cpu_data.type == CPU_SH_NONE)
|
||||
panic("Unknown CPU");
|
||||
|
||||
/* Init the cache */
|
||||
cache_init();
|
||||
|
||||
|
|
|
@ -165,6 +165,7 @@ ENTRY(exception_handler)
|
|||
|
||||
interrupt_entry:
|
||||
mov r9,r4
|
||||
mov r15,r5
|
||||
mov.l 6f,r9
|
||||
mov.l 7f,r8
|
||||
jmp @r8
|
||||
|
|
|
@ -514,13 +514,16 @@ skip_save:
|
|||
|
||||
interrupt_exception:
|
||||
mov.l 1f, r9
|
||||
mov.l 2f, r4
|
||||
mov.l @r4, r4
|
||||
jmp @r9
|
||||
nop
|
||||
mov r15, r5
|
||||
rts
|
||||
nop
|
||||
|
||||
.align 2
|
||||
1: .long do_IRQ
|
||||
2: .long INTEVT
|
||||
|
||||
.align 2
|
||||
ENTRY(exception_none)
|
||||
|
|
|
@ -195,13 +195,6 @@ int __init detect_cpu_and_cache_system(void)
|
|||
|
||||
}
|
||||
|
||||
/* Setup the rest of the I-cache info */
|
||||
current_cpu_data.icache.entry_mask = current_cpu_data.icache.way_incr -
|
||||
current_cpu_data.icache.linesz;
|
||||
|
||||
current_cpu_data.icache.way_size = current_cpu_data.icache.sets *
|
||||
current_cpu_data.icache.linesz;
|
||||
|
||||
/* And the rest of the D-cache */
|
||||
if (current_cpu_data.dcache.ways > 1) {
|
||||
size = sizes[(cvr >> 16) & 0xf];
|
||||
|
@ -209,12 +202,6 @@ int __init detect_cpu_and_cache_system(void)
|
|||
current_cpu_data.dcache.sets = (size >> 6);
|
||||
}
|
||||
|
||||
current_cpu_data.dcache.entry_mask = current_cpu_data.dcache.way_incr -
|
||||
current_cpu_data.dcache.linesz;
|
||||
|
||||
current_cpu_data.dcache.way_size = current_cpu_data.dcache.sets *
|
||||
current_cpu_data.dcache.linesz;
|
||||
|
||||
/*
|
||||
* Setup the L2 cache desc
|
||||
*
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
@ -82,13 +81,9 @@ static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly;
|
|||
static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly;
|
||||
#endif
|
||||
|
||||
asmlinkage int do_IRQ(unsigned long r4, unsigned long r5,
|
||||
unsigned long r6, unsigned long r7,
|
||||
struct pt_regs __regs)
|
||||
asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs)
|
||||
{
|
||||
struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
|
||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||
int irq;
|
||||
#ifdef CONFIG_4KSTACKS
|
||||
union irq_ctx *curctx, *irqctx;
|
||||
#endif
|
||||
|
@ -111,13 +106,7 @@ asmlinkage int do_IRQ(unsigned long r4, unsigned long r5,
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_HAS_INTEVT
|
||||
irq = evt2irq(ctrl_inl(INTEVT));
|
||||
#else
|
||||
irq = r4;
|
||||
#endif
|
||||
|
||||
irq = irq_demux(irq);
|
||||
irq = irq_demux(evt2irq(irq));
|
||||
|
||||
#ifdef CONFIG_4KSTACKS
|
||||
curctx = (union irq_ctx *)current_thread_info();
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
|
||||
#define SUPPORT_SYSRQ
|
||||
#endif
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
|
@ -49,11 +52,6 @@
|
|||
#endif
|
||||
|
||||
#include <asm/sci.h>
|
||||
|
||||
#if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
|
||||
#define SUPPORT_SYSRQ
|
||||
#endif
|
||||
|
||||
#include "sh-sci.h"
|
||||
|
||||
struct sci_port {
|
||||
|
@ -645,6 +643,9 @@ static inline int sci_handle_breaks(struct uart_port *port)
|
|||
struct tty_struct *tty = port->info->tty;
|
||||
struct sci_port *s = &sci_ports[port->line];
|
||||
|
||||
if (uart_handle_break(port))
|
||||
return 0;
|
||||
|
||||
if (!s->break_flag && status & SCxSR_BRK(port)) {
|
||||
#if defined(CONFIG_CPU_SH3)
|
||||
/* Debounce break */
|
||||
|
|
|
@ -16,17 +16,17 @@
|
|||
#define TCSETSW 0x5403
|
||||
#define TCSETSF 0x5404
|
||||
|
||||
#define TCGETA _IOR('t', 23, struct termio)
|
||||
#define TCSETA _IOW('t', 24, struct termio)
|
||||
#define TCSETAW _IOW('t', 25, struct termio)
|
||||
#define TCSETAF _IOW('t', 28, struct termio)
|
||||
#define TCGETA 0x80127417 /* _IOR('t', 23, struct termio) */
|
||||
#define TCSETA 0x40127418 /* _IOW('t', 24, struct termio) */
|
||||
#define TCSETAW 0x40127419 /* _IOW('t', 25, struct termio) */
|
||||
#define TCSETAF 0x4012741C /* _IOW('t', 28, struct termio) */
|
||||
|
||||
#define TCSBRK _IO('t', 29)
|
||||
#define TCXONC _IO('t', 30)
|
||||
#define TCFLSH _IO('t', 31)
|
||||
|
||||
#define TIOCSWINSZ _IOW('t', 103, struct winsize)
|
||||
#define TIOCGWINSZ _IOR('t', 104, struct winsize)
|
||||
#define TIOCSWINSZ 0x40087467 /* _IOW('t', 103, struct winsize) */
|
||||
#define TIOCGWINSZ 0x80087468 /* _IOR('t', 104, struct winsize) */
|
||||
#define TIOCSTART _IO('t', 110) /* start output, like ^Q */
|
||||
#define TIOCSTOP _IO('t', 111) /* stop output, like ^S */
|
||||
#define TIOCOUTQ _IOR('t', 115, int) /* output queue size */
|
||||
|
@ -59,8 +59,8 @@
|
|||
#define TIOCSSOFTCAR _IOW('T', 26, unsigned int) /* 0x541A */
|
||||
#define TIOCLINUX _IOW('T', 28, char) /* 0x541C */
|
||||
#define TIOCCONS _IO('T', 29) /* 0x541D */
|
||||
#define TIOCGSERIAL _IOR('T', 30, struct serial_struct) /* 0x541E */
|
||||
#define TIOCSSERIAL _IOW('T', 31, struct serial_struct) /* 0x541F */
|
||||
#define TIOCGSERIAL 0x803C541E /* _IOR('T', 30, struct serial_struct) 0x541E */
|
||||
#define TIOCSSERIAL 0x403C541F /* _IOW('T', 31, struct serial_struct) 0x541F */
|
||||
#define TIOCPKT _IOW('T', 32, int) /* 0x5420 */
|
||||
# define TIOCPKT_DATA 0
|
||||
# define TIOCPKT_FLUSHREAD 1
|
||||
|
@ -86,12 +86,12 @@
|
|||
#define TIOCSERSWILD _IOW('T', 85, int) /* 0x5455 */
|
||||
#define TIOCGLCKTRMIOS 0x5456
|
||||
#define TIOCSLCKTRMIOS 0x5457
|
||||
#define TIOCSERGSTRUCT _IOR('T', 88, struct async_struct) /* 0x5458 */ /* For debugging only */
|
||||
#define TIOCSERGSTRUCT 0x80d85458 /* _IOR('T', 88, struct async_struct) 0x5458 */ /* For debugging only */
|
||||
#define TIOCSERGETLSR _IOR('T', 89, unsigned int) /* 0x5459 */ /* Get line status register */
|
||||
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
|
||||
# define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
|
||||
#define TIOCSERGETMULTI _IOR('T', 90, struct serial_multiport_struct) /* 0x545A */ /* Get multiport config */
|
||||
#define TIOCSERSETMULTI _IOW('T', 91, struct serial_multiport_struct) /* 0x545B */ /* Set multiport config */
|
||||
#define TIOCSERGETMULTI 0x80A8545A /* _IOR('T', 90, struct serial_multiport_struct) 0x545A */ /* Get multiport config */
|
||||
#define TIOCSERSETMULTI 0x40A8545B /* _IOW('T', 91, struct serial_multiport_struct) 0x545B */ /* Set multiport config */
|
||||
|
||||
#define TIOCMIWAIT _IO('T', 92) /* 0x545C */ /* wait for a change on serial input line(s) */
|
||||
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
|
||||
|
|
|
@ -94,8 +94,13 @@
|
|||
/*
|
||||
* Convert back and forth between INTEVT and IRQ values.
|
||||
*/
|
||||
#ifdef CONFIG_CPU_HAS_INTEVT
|
||||
#define evt2irq(evt) (((evt) >> 5) - 16)
|
||||
#define irq2evt(irq) (((irq) + 16) << 5)
|
||||
#else
|
||||
#define evt2irq(evt) (evt)
|
||||
#define irq2evt(irq) (irq)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Simple Mask Register Support
|
||||
|
|
|
@ -233,6 +233,7 @@
|
|||
#define __NR_fcntl64 221
|
||||
/* 223 is unused */
|
||||
#define __NR_gettid 224
|
||||
#define __NR_readahead 225
|
||||
#define __NR_setxattr 226
|
||||
#define __NR_lsetxattr 227
|
||||
#define __NR_fsetxattr 228
|
||||
|
|
Loading…
Reference in a new issue