Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu: m68knommu: set flow handler for secondary interrupt controller of 5249 m68knommu: remove use of IRQ_FLG_LOCK from 68360 platform support m68knommu: fix dereference of port.tty m68knommu: add missing linker __modver section m68knommu: fix mis-named variable int set_irq_chip loop m68knommu: add optimize memmove() function m68k: remove arch specific non-optimized memcmp() m68knommu: fix use of un-defined _TIF_WORK_MASK m68knommu: Rename m548x_wdt.c to m54xx_wdt.c m68knommu: fix m548x_wdt.c compilation after headers renaming m68knommu: Remove dependencies on nonexistent M68KNOMMU
This commit is contained in:
commit
048f039f3e
|
@ -99,14 +99,12 @@ static inline int strcmp(const char *cs, const char *ct)
|
|||
: "+a" (cs), "+a" (ct), "=d" (res));
|
||||
return res;
|
||||
}
|
||||
#endif /* CONFIG_COLDFIRE */
|
||||
|
||||
#define __HAVE_ARCH_MEMMOVE
|
||||
extern void *memmove(void *, const void *, __kernel_size_t);
|
||||
|
||||
#define __HAVE_ARCH_MEMCMP
|
||||
extern int memcmp(const void *, const void *, __kernel_size_t);
|
||||
#define memcmp(d, s, n) __builtin_memcmp(d, s, n)
|
||||
#endif /* CONFIG_COLDFIRE */
|
||||
|
||||
#define __HAVE_ARCH_MEMSET
|
||||
extern void *memset(void *, int, __kernel_size_t);
|
||||
|
|
|
@ -243,14 +243,3 @@ void *memmove(void *dest, const void *src, size_t n)
|
|||
return xdest;
|
||||
}
|
||||
EXPORT_SYMBOL(memmove);
|
||||
|
||||
int memcmp(const void *cs, const void *ct, size_t count)
|
||||
{
|
||||
const unsigned char *su1, *su2;
|
||||
|
||||
for (su1 = cs, su2 = ct; count > 0; ++su1, ++su2, count--)
|
||||
if (*su1 != *su2)
|
||||
return *su1 < *su2 ? -1 : +1;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(memcmp);
|
||||
|
|
|
@ -141,6 +141,12 @@ SECTIONS {
|
|||
*(__param)
|
||||
__stop___param = .;
|
||||
|
||||
/* Built-in module versions */
|
||||
. = ALIGN(4) ;
|
||||
__start___modver = .;
|
||||
*(__modver)
|
||||
__stop___modver = .;
|
||||
|
||||
. = ALIGN(4) ;
|
||||
_etext = . ;
|
||||
} > TEXT
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
|
||||
lib-y := ashldi3.o ashrdi3.o lshrdi3.o \
|
||||
muldi3.o mulsi3.o divsi3.o udivsi3.o modsi3.o umodsi3.o \
|
||||
checksum.o memcpy.o memset.o delay.o
|
||||
checksum.o memcpy.o memmove.o memset.o delay.o
|
||||
|
|
105
arch/m68knommu/lib/memmove.c
Normal file
105
arch/m68knommu/lib/memmove.c
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file COPYING in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#define __IN_STRING_C
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
void *memmove(void *dest, const void *src, size_t n)
|
||||
{
|
||||
void *xdest = dest;
|
||||
size_t temp;
|
||||
|
||||
if (!n)
|
||||
return xdest;
|
||||
|
||||
if (dest < src) {
|
||||
if ((long)dest & 1) {
|
||||
char *cdest = dest;
|
||||
const char *csrc = src;
|
||||
*cdest++ = *csrc++;
|
||||
dest = cdest;
|
||||
src = csrc;
|
||||
n--;
|
||||
}
|
||||
if (n > 2 && (long)dest & 2) {
|
||||
short *sdest = dest;
|
||||
const short *ssrc = src;
|
||||
*sdest++ = *ssrc++;
|
||||
dest = sdest;
|
||||
src = ssrc;
|
||||
n -= 2;
|
||||
}
|
||||
temp = n >> 2;
|
||||
if (temp) {
|
||||
long *ldest = dest;
|
||||
const long *lsrc = src;
|
||||
temp--;
|
||||
do
|
||||
*ldest++ = *lsrc++;
|
||||
while (temp--);
|
||||
dest = ldest;
|
||||
src = lsrc;
|
||||
}
|
||||
if (n & 2) {
|
||||
short *sdest = dest;
|
||||
const short *ssrc = src;
|
||||
*sdest++ = *ssrc++;
|
||||
dest = sdest;
|
||||
src = ssrc;
|
||||
}
|
||||
if (n & 1) {
|
||||
char *cdest = dest;
|
||||
const char *csrc = src;
|
||||
*cdest = *csrc;
|
||||
}
|
||||
} else {
|
||||
dest = (char *)dest + n;
|
||||
src = (const char *)src + n;
|
||||
if ((long)dest & 1) {
|
||||
char *cdest = dest;
|
||||
const char *csrc = src;
|
||||
*--cdest = *--csrc;
|
||||
dest = cdest;
|
||||
src = csrc;
|
||||
n--;
|
||||
}
|
||||
if (n > 2 && (long)dest & 2) {
|
||||
short *sdest = dest;
|
||||
const short *ssrc = src;
|
||||
*--sdest = *--ssrc;
|
||||
dest = sdest;
|
||||
src = ssrc;
|
||||
n -= 2;
|
||||
}
|
||||
temp = n >> 2;
|
||||
if (temp) {
|
||||
long *ldest = dest;
|
||||
const long *lsrc = src;
|
||||
temp--;
|
||||
do
|
||||
*--ldest = *--lsrc;
|
||||
while (temp--);
|
||||
dest = ldest;
|
||||
src = lsrc;
|
||||
}
|
||||
if (n & 2) {
|
||||
short *sdest = dest;
|
||||
const short *ssrc = src;
|
||||
*--sdest = *--ssrc;
|
||||
dest = sdest;
|
||||
src = ssrc;
|
||||
}
|
||||
if (n & 1) {
|
||||
char *cdest = dest;
|
||||
const char *csrc = src;
|
||||
*--cdest = *--csrc;
|
||||
}
|
||||
}
|
||||
return xdest;
|
||||
}
|
||||
EXPORT_SYMBOL(memmove);
|
|
@ -50,8 +50,10 @@ static int __init mcf_intc2_init(void)
|
|||
int irq;
|
||||
|
||||
/* GPIO interrupt sources */
|
||||
for (irq = MCFINTC2_GPIOIRQ0; (irq <= MCFINTC2_GPIOIRQ7); irq++)
|
||||
for (irq = MCFINTC2_GPIOIRQ0; (irq <= MCFINTC2_GPIOIRQ7); irq++) {
|
||||
irq_desc[irq].chip = &intc2_irq_gpio_chip;
|
||||
set_irq_handler(irq, handle_edge_irq);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -108,7 +108,6 @@ Luser_return:
|
|||
movel %d1,%a2
|
||||
1:
|
||||
move %a2@(TI_FLAGS),%d1 /* thread_info->flags */
|
||||
andl #_TIF_WORK_MASK,%d1
|
||||
jne Lwork_to_do
|
||||
RESTORE_ALL
|
||||
|
||||
|
|
|
@ -210,7 +210,7 @@ void
|
|||
cpm_install_handler(int vec, void (*handler)(), void *dev_id)
|
||||
{
|
||||
|
||||
request_irq(vec, handler, IRQ_FLG_LOCK, "timer", dev_id);
|
||||
request_irq(vec, handler, 0, "timer", dev_id);
|
||||
|
||||
/* if (cpm_vecs[vec].handler != 0) */
|
||||
/* printk(KERN_INFO "CPM interrupt %x replacing %x\n", */
|
||||
|
|
|
@ -75,7 +75,7 @@ void hw_timer_init(void)
|
|||
/* Set compare register 32Khz / 32 / 10 = 100 */
|
||||
TCMP = 10;
|
||||
|
||||
request_irq(IRQ_MACHSPEC | 1, timer_routine, IRQ_FLG_LOCK, "timer", NULL);
|
||||
request_irq(IRQ_MACHSPEC | 1, timer_routine, 0, "timer", NULL);
|
||||
#endif
|
||||
|
||||
/* General purpose quicc timers: MC68360UM p7-20 */
|
||||
|
|
|
@ -104,7 +104,6 @@ Luser_return:
|
|||
movel %d1,%a2
|
||||
1:
|
||||
move %a2@(TI_FLAGS),%d1 /* thread_info->flags */
|
||||
andl #_TIF_WORK_MASK,%d1
|
||||
jne Lwork_to_do
|
||||
RESTORE_ALL
|
||||
|
||||
|
|
|
@ -132,8 +132,8 @@ void init_IRQ(void)
|
|||
pquicc->intr_cimr = 0x00000000;
|
||||
|
||||
for (i = 0; (i < NR_IRQS); i++) {
|
||||
set_irq_chip(irq, &intc_irq_chip);
|
||||
set_irq_handler(irq, handle_level_irq);
|
||||
set_irq_chip(i, &intc_irq_chip);
|
||||
set_irq_handler(i, handle_level_irq);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -138,7 +138,6 @@ Luser_return:
|
|||
andl #-THREAD_SIZE,%d1 /* at base of kernel stack */
|
||||
movel %d1,%a0
|
||||
movel %a0@(TI_FLAGS),%d1 /* get thread_info->flags */
|
||||
andl #0xefff,%d1
|
||||
jne Lwork_to_do /* still work to do */
|
||||
|
||||
Lreturn:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
config CAN_MSCAN
|
||||
depends on CAN_DEV && (PPC || M68K || M68KNOMMU)
|
||||
depends on CAN_DEV && (PPC || M68K)
|
||||
tristate "Support for Freescale MSCAN based chips"
|
||||
---help---
|
||||
The Motorola Scalable Controller Area Network (MSCAN) definition
|
||||
|
|
|
@ -262,7 +262,7 @@ static void status_handle(struct m68k_serial *info, unsigned short status)
|
|||
|
||||
static void receive_chars(struct m68k_serial *info, unsigned short rx)
|
||||
{
|
||||
struct tty_struct *tty = info->port.tty;
|
||||
struct tty_struct *tty = info->tty;
|
||||
m68328_uart *uart = &uart_addr[info->line];
|
||||
unsigned char ch, flag;
|
||||
|
||||
|
@ -329,7 +329,7 @@ static void transmit_chars(struct m68k_serial *info)
|
|||
goto clear_and_return;
|
||||
}
|
||||
|
||||
if((info->xmit_cnt <= 0) || info->port.tty->stopped) {
|
||||
if((info->xmit_cnt <= 0) || info->tty->stopped) {
|
||||
/* That's peculiar... TX ints off */
|
||||
uart->ustcnt &= ~USTCNT_TX_INTR_MASK;
|
||||
goto clear_and_return;
|
||||
|
@ -383,7 +383,7 @@ static void do_softint(struct work_struct *work)
|
|||
struct m68k_serial *info = container_of(work, struct m68k_serial, tqueue);
|
||||
struct tty_struct *tty;
|
||||
|
||||
tty = info->port.tty;
|
||||
tty = info->tty;
|
||||
if (!tty)
|
||||
return;
|
||||
#if 0
|
||||
|
@ -407,7 +407,7 @@ static void do_serial_hangup(struct work_struct *work)
|
|||
struct m68k_serial *info = container_of(work, struct m68k_serial, tqueue_hangup);
|
||||
struct tty_struct *tty;
|
||||
|
||||
tty = info->port.tty;
|
||||
tty = info->tty;
|
||||
if (!tty)
|
||||
return;
|
||||
|
||||
|
@ -451,8 +451,8 @@ static int startup(struct m68k_serial * info)
|
|||
uart->ustcnt = USTCNT_UEN | USTCNT_RXEN | USTCNT_RX_INTR_MASK;
|
||||
#endif
|
||||
|
||||
if (info->port.tty)
|
||||
clear_bit(TTY_IO_ERROR, &info->port.tty->flags);
|
||||
if (info->tty)
|
||||
clear_bit(TTY_IO_ERROR, &info->tty->flags);
|
||||
info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
|
||||
|
||||
/*
|
||||
|
@ -486,8 +486,8 @@ static void shutdown(struct m68k_serial * info)
|
|||
info->xmit_buf = 0;
|
||||
}
|
||||
|
||||
if (info->port.tty)
|
||||
set_bit(TTY_IO_ERROR, &info->port.tty->flags);
|
||||
if (info->tty)
|
||||
set_bit(TTY_IO_ERROR, &info->tty->flags);
|
||||
|
||||
info->flags &= ~S_INITIALIZED;
|
||||
local_irq_restore(flags);
|
||||
|
@ -553,9 +553,9 @@ static void change_speed(struct m68k_serial *info)
|
|||
unsigned cflag;
|
||||
int i;
|
||||
|
||||
if (!info->port.tty || !info->port.tty->termios)
|
||||
if (!info->tty || !info->tty->termios)
|
||||
return;
|
||||
cflag = info->port.tty->termios->c_cflag;
|
||||
cflag = info->tty->termios->c_cflag;
|
||||
if (!(port = info->port))
|
||||
return;
|
||||
|
||||
|
@ -970,7 +970,6 @@ static void send_break(struct m68k_serial * info, unsigned int duration)
|
|||
static int rs_ioctl(struct tty_struct *tty, struct file * file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int error;
|
||||
struct m68k_serial * info = (struct m68k_serial *)tty->driver_data;
|
||||
int retval;
|
||||
|
||||
|
@ -1104,7 +1103,7 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
|
|||
tty_ldisc_flush(tty);
|
||||
tty->closing = 0;
|
||||
info->event = 0;
|
||||
info->port.tty = NULL;
|
||||
info->tty = NULL;
|
||||
#warning "This is not and has never been valid so fix it"
|
||||
#if 0
|
||||
if (tty->ldisc.num != ldiscs[N_TTY].num) {
|
||||
|
@ -1142,7 +1141,7 @@ void rs_hangup(struct tty_struct *tty)
|
|||
info->event = 0;
|
||||
info->count = 0;
|
||||
info->flags &= ~S_NORMAL_ACTIVE;
|
||||
info->port.tty = NULL;
|
||||
info->tty = NULL;
|
||||
wake_up_interruptible(&info->open_wait);
|
||||
}
|
||||
|
||||
|
@ -1261,7 +1260,7 @@ int rs_open(struct tty_struct *tty, struct file * filp)
|
|||
|
||||
info->count++;
|
||||
tty->driver_data = info;
|
||||
info->port.tty = tty;
|
||||
info->tty = tty;
|
||||
|
||||
/*
|
||||
* Start up serial port
|
||||
|
@ -1338,7 +1337,7 @@ rs68328_init(void)
|
|||
info = &m68k_soft[i];
|
||||
info->magic = SERIAL_MAGIC;
|
||||
info->port = (int) &uart_addr[i];
|
||||
info->port.tty = NULL;
|
||||
info->tty = NULL;
|
||||
info->irq = uart_irqs[i];
|
||||
info->custom_divisor = 16;
|
||||
info->close_delay = 50;
|
||||
|
|
|
@ -862,12 +862,12 @@ config SBC_EPX_C3_WATCHDOG
|
|||
|
||||
# M68K Architecture
|
||||
|
||||
config M548x_WATCHDOG
|
||||
tristate "MCF548x watchdog support"
|
||||
config M54xx_WATCHDOG
|
||||
tristate "MCF54xx watchdog support"
|
||||
depends on M548x
|
||||
help
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called m548x_wdt.
|
||||
module will be called m54xx_wdt.
|
||||
|
||||
# MIPS Architecture
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ obj-$(CONFIG_SBC_EPX_C3_WATCHDOG) += sbc_epx_c3.o
|
|||
# M32R Architecture
|
||||
|
||||
# M68K Architecture
|
||||
obj-$(CONFIG_M548x_WATCHDOG) += m548x_wdt.o
|
||||
obj-$(CONFIG_M54xx_WATCHDOG) += m54xx_wdt.o
|
||||
|
||||
# MIPS Architecture
|
||||
obj-$(CONFIG_ATH79_WDT) += ath79_wdt.o
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* drivers/watchdog/m548x_wdt.c
|
||||
* drivers/watchdog/m54xx_wdt.c
|
||||
*
|
||||
* Watchdog driver for ColdFire MCF548x processors
|
||||
* Watchdog driver for ColdFire MCF547x & MCF548x processors
|
||||
* Copyright 2010 (c) Philippe De Muyter <phdm@macqel.be>
|
||||
*
|
||||
* Adapted from the IXP4xx watchdog driver, which carries these notices:
|
||||
|
@ -29,8 +29,8 @@
|
|||
#include <linux/uaccess.h>
|
||||
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/m548xsim.h>
|
||||
#include <asm/m548xgpt.h>
|
||||
#include <asm/m54xxsim.h>
|
||||
#include <asm/m54xxgpt.h>
|
||||
|
||||
static int nowayout = WATCHDOG_NOWAYOUT;
|
||||
static unsigned int heartbeat = 30; /* (secs) Default is 0.5 minute */
|
||||
|
@ -76,7 +76,7 @@ static void wdt_keepalive(void)
|
|||
__raw_writel(gms0, MCF_MBAR + MCF_GPT_GMS0);
|
||||
}
|
||||
|
||||
static int m548x_wdt_open(struct inode *inode, struct file *file)
|
||||
static int m54xx_wdt_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
if (test_and_set_bit(WDT_IN_USE, &wdt_status))
|
||||
return -EBUSY;
|
||||
|
@ -86,7 +86,7 @@ static int m548x_wdt_open(struct inode *inode, struct file *file)
|
|||
return nonseekable_open(inode, file);
|
||||
}
|
||||
|
||||
static ssize_t m548x_wdt_write(struct file *file, const char *data,
|
||||
static ssize_t m54xx_wdt_write(struct file *file, const char *data,
|
||||
size_t len, loff_t *ppos)
|
||||
{
|
||||
if (len) {
|
||||
|
@ -112,10 +112,10 @@ static ssize_t m548x_wdt_write(struct file *file, const char *data,
|
|||
static const struct watchdog_info ident = {
|
||||
.options = WDIOF_MAGICCLOSE | WDIOF_SETTIMEOUT |
|
||||
WDIOF_KEEPALIVEPING,
|
||||
.identity = "Coldfire M548x Watchdog",
|
||||
.identity = "Coldfire M54xx Watchdog",
|
||||
};
|
||||
|
||||
static long m548x_wdt_ioctl(struct file *file, unsigned int cmd,
|
||||
static long m54xx_wdt_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
int ret = -ENOTTY;
|
||||
|
@ -161,7 +161,7 @@ static long m548x_wdt_ioctl(struct file *file, unsigned int cmd,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int m548x_wdt_release(struct inode *inode, struct file *file)
|
||||
static int m54xx_wdt_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
if (test_bit(WDT_OK_TO_CLOSE, &wdt_status))
|
||||
wdt_disable();
|
||||
|
@ -177,45 +177,45 @@ static int m548x_wdt_release(struct inode *inode, struct file *file)
|
|||
}
|
||||
|
||||
|
||||
static const struct file_operations m548x_wdt_fops = {
|
||||
static const struct file_operations m54xx_wdt_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = no_llseek,
|
||||
.write = m548x_wdt_write,
|
||||
.unlocked_ioctl = m548x_wdt_ioctl,
|
||||
.open = m548x_wdt_open,
|
||||
.release = m548x_wdt_release,
|
||||
.write = m54xx_wdt_write,
|
||||
.unlocked_ioctl = m54xx_wdt_ioctl,
|
||||
.open = m54xx_wdt_open,
|
||||
.release = m54xx_wdt_release,
|
||||
};
|
||||
|
||||
static struct miscdevice m548x_wdt_miscdev = {
|
||||
static struct miscdevice m54xx_wdt_miscdev = {
|
||||
.minor = WATCHDOG_MINOR,
|
||||
.name = "watchdog",
|
||||
.fops = &m548x_wdt_fops,
|
||||
.fops = &m54xx_wdt_fops,
|
||||
};
|
||||
|
||||
static int __init m548x_wdt_init(void)
|
||||
static int __init m54xx_wdt_init(void)
|
||||
{
|
||||
if (!request_mem_region(MCF_MBAR + MCF_GPT_GCIR0, 4,
|
||||
"Coldfire M548x Watchdog")) {
|
||||
"Coldfire M54xx Watchdog")) {
|
||||
printk(KERN_WARNING
|
||||
"Coldfire M548x Watchdog : I/O region busy\n");
|
||||
"Coldfire M54xx Watchdog : I/O region busy\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
printk(KERN_INFO "ColdFire watchdog driver is loaded.\n");
|
||||
|
||||
return misc_register(&m548x_wdt_miscdev);
|
||||
return misc_register(&m54xx_wdt_miscdev);
|
||||
}
|
||||
|
||||
static void __exit m548x_wdt_exit(void)
|
||||
static void __exit m54xx_wdt_exit(void)
|
||||
{
|
||||
misc_deregister(&m548x_wdt_miscdev);
|
||||
misc_deregister(&m54xx_wdt_miscdev);
|
||||
release_mem_region(MCF_MBAR + MCF_GPT_GCIR0, 4);
|
||||
}
|
||||
|
||||
module_init(m548x_wdt_init);
|
||||
module_exit(m548x_wdt_exit);
|
||||
module_init(m54xx_wdt_init);
|
||||
module_exit(m54xx_wdt_exit);
|
||||
|
||||
MODULE_AUTHOR("Philippe De Muyter <phdm@macqel.be>");
|
||||
MODULE_DESCRIPTION("Coldfire M548x Watchdog");
|
||||
MODULE_DESCRIPTION("Coldfire M54xx Watchdog");
|
||||
|
||||
module_param(heartbeat, int, 0);
|
||||
MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds (default 30s)");
|
|
@ -805,7 +805,7 @@ config ARCH_WANT_FRAME_POINTERS
|
|||
config FRAME_POINTER
|
||||
bool "Compile the kernel with frame pointers"
|
||||
depends on DEBUG_KERNEL && \
|
||||
(CRIS || M68K || M68KNOMMU || FRV || UML || \
|
||||
(CRIS || M68K || FRV || UML || \
|
||||
AVR32 || SUPERH || BLACKFIN || MN10300) || \
|
||||
ARCH_WANT_FRAME_POINTERS
|
||||
default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS
|
||||
|
|
Loading…
Reference in a new issue