mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 02:19:51 +00:00
Merge master.kernel.org:/home/rmk/linux-2.6-arm
* master.kernel.org:/home/rmk/linux-2.6-arm: [ARM] 3490/1: i.MX: move uart resources to board files [ARM] 3488/1: make icedcc_putc do the right thing [ARM] 3487/1: IXP4xx: Support non-PCI systems [ARM] 3486/1: Mark memory as clobbered by the ARM _syscallX() macros
This commit is contained in:
commit
f9cc8475e7
12 changed files with 141 additions and 91 deletions
|
@ -150,8 +150,6 @@ config ARCH_IOP3XX
|
|||
|
||||
config ARCH_IXP4XX
|
||||
bool "IXP4xx-based"
|
||||
select DMABOUNCE
|
||||
select PCI
|
||||
help
|
||||
Support for Intel's IXP4XX (XScale) family of processors.
|
||||
|
||||
|
|
|
@ -38,10 +38,10 @@ static void icedcc_putc(int ch)
|
|||
if (--i < 0)
|
||||
return;
|
||||
|
||||
asm("mrc p14, 0, %0, c0, c0, 0" : "=r" (status));
|
||||
asm volatile ("mrc p14, 0, %0, c0, c0, 0" : "=r" (status));
|
||||
} while (status & 2);
|
||||
|
||||
asm("mcr p15, 0, %0, c1, c0, 0" : : "r" (ch));
|
||||
asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch));
|
||||
}
|
||||
|
||||
#define putc(ch) icedcc_putc(ch)
|
||||
|
|
|
@ -195,56 +195,6 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info)
|
|||
}
|
||||
EXPORT_SYMBOL(imx_set_mmc_info);
|
||||
|
||||
static struct resource imx_uart1_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00206000,
|
||||
.end = 0x002060FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART1_MINT_RX),
|
||||
.end = (UART1_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART1_MINT_TX),
|
||||
.end = (UART1_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart1_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(imx_uart1_resources),
|
||||
.resource = imx_uart1_resources,
|
||||
};
|
||||
|
||||
static struct resource imx_uart2_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00207000,
|
||||
.end = 0x002070FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART2_MINT_RX),
|
||||
.end = (UART2_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART2_MINT_TX),
|
||||
.end = (UART2_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart2_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(imx_uart2_resources),
|
||||
.resource = imx_uart2_resources,
|
||||
};
|
||||
|
||||
static struct imxfb_mach_info imx_fb_info;
|
||||
|
||||
void __init set_imx_fb_info(struct imxfb_mach_info *hard_imx_fb_info)
|
||||
|
@ -283,8 +233,6 @@ static struct platform_device imxfb_device = {
|
|||
static struct platform_device *devices[] __initdata = {
|
||||
&imx_mmc_device,
|
||||
&imxfb_device,
|
||||
&imx_uart1_device,
|
||||
&imx_uart2_device,
|
||||
};
|
||||
|
||||
static struct map_desc imx_io_desc[] __initdata = {
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/arch/mmc.h>
|
||||
#include <asm/arch/imx-uart.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include "generic.h"
|
||||
|
||||
|
@ -48,8 +49,70 @@ static struct platform_device cs89x0_device = {
|
|||
.resource = cs89x0_resources,
|
||||
};
|
||||
|
||||
static struct imxuart_platform_data uart_pdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct resource imx_uart1_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00206000,
|
||||
.end = 0x002060FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART1_MINT_RX),
|
||||
.end = (UART1_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART1_MINT_TX),
|
||||
.end = (UART1_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart1_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(imx_uart1_resources),
|
||||
.resource = imx_uart1_resources,
|
||||
.dev = {
|
||||
.platform_data = &uart_pdata,
|
||||
}
|
||||
};
|
||||
|
||||
static struct resource imx_uart2_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00207000,
|
||||
.end = 0x002070FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART2_MINT_RX),
|
||||
.end = (UART2_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART2_MINT_TX),
|
||||
.end = (UART2_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart2_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(imx_uart2_resources),
|
||||
.resource = imx_uart2_resources,
|
||||
.dev = {
|
||||
.platform_data = &uart_pdata,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&cs89x0_device,
|
||||
&imx_uart1_device,
|
||||
&imx_uart2_device,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MMC_IMX
|
||||
|
@ -75,6 +138,17 @@ mx1ads_init(void)
|
|||
imx_gpio_mode(GPIO_PORTB | GPIO_GIUS | GPIO_IN | 20);
|
||||
imx_set_mmc_info(&mx1ads_mmc_info);
|
||||
#endif
|
||||
|
||||
imx_gpio_mode(PC9_PF_UART1_CTS);
|
||||
imx_gpio_mode(PC10_PF_UART1_RTS);
|
||||
imx_gpio_mode(PC11_PF_UART1_TXD);
|
||||
imx_gpio_mode(PC12_PF_UART1_RXD);
|
||||
|
||||
imx_gpio_mode(PB28_PF_UART2_CTS);
|
||||
imx_gpio_mode(PB29_PF_UART2_RTS);
|
||||
imx_gpio_mode(PB30_PF_UART2_TXD);
|
||||
imx_gpio_mode(PB31_PF_UART2_RXD);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ comment "IXP4xx Platforms"
|
|||
config MACH_NSLU2
|
||||
bool
|
||||
prompt "Linksys NSLU2"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Linksys's
|
||||
NSLU2 NAS device. For more information on this platform,
|
||||
|
@ -18,6 +19,7 @@ config MACH_NSLU2
|
|||
|
||||
config ARCH_AVILA
|
||||
bool "Avila"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support the Gateworks
|
||||
Avila Network Platform. For more information on this platform,
|
||||
|
@ -25,6 +27,7 @@ config ARCH_AVILA
|
|||
|
||||
config ARCH_ADI_COYOTE
|
||||
bool "Coyote"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support the ADI
|
||||
Engineering Coyote Gateway Reference Platform. For more
|
||||
|
@ -32,6 +35,7 @@ config ARCH_ADI_COYOTE
|
|||
|
||||
config ARCH_IXDP425
|
||||
bool "IXDP425"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Intel's
|
||||
IXDP425 Development Platform (Also known as Richfield).
|
||||
|
@ -39,6 +43,7 @@ config ARCH_IXDP425
|
|||
|
||||
config MACH_IXDPG425
|
||||
bool "IXDPG425"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Intel's
|
||||
IXDPG425 Development Platform (Also known as Montajade).
|
||||
|
@ -46,6 +51,7 @@ config MACH_IXDPG425
|
|||
|
||||
config MACH_IXDP465
|
||||
bool "IXDP465"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Intel's
|
||||
IXDP465 Development Platform (Also known as BMP).
|
||||
|
@ -72,6 +78,7 @@ config ARCH_PRPMC1100
|
|||
config MACH_NAS100D
|
||||
bool
|
||||
prompt "NAS100D"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Iomega's
|
||||
NAS 100d device. For more information on this platform,
|
||||
|
@ -96,6 +103,7 @@ config CPU_IXP46X
|
|||
config MACH_GTWX5715
|
||||
bool "Gemtek WX5715 (Linksys WRV54G)"
|
||||
depends on ARCH_IXP4XX
|
||||
select PCI
|
||||
help
|
||||
This board is currently inside the Linksys WRV54G Gateways.
|
||||
|
||||
|
@ -110,11 +118,16 @@ config MACH_GTWX5715
|
|||
"High Speed" UART is n/c (as far as I can tell)
|
||||
20 Pin ARM/Xscale JTAG interface on J2
|
||||
|
||||
|
||||
comment "IXP4xx Options"
|
||||
|
||||
config DMABOUNCE
|
||||
bool
|
||||
default y
|
||||
depends on PCI
|
||||
|
||||
config IXP4XX_INDIRECT_PCI
|
||||
bool "Use indirect PCI memory access"
|
||||
depends on PCI
|
||||
help
|
||||
IXP4xx provides two methods of accessing PCI memory space:
|
||||
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
# Makefile for the linux kernel.
|
||||
#
|
||||
|
||||
obj-y += common.o common-pci.o
|
||||
obj-y += common.o
|
||||
|
||||
obj-$(CONFIG_PCI) += common-pci.o
|
||||
obj-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pci.o ixdp425-setup.o
|
||||
obj-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o coyote-setup.o
|
||||
obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/irq.h>
|
||||
//#include <asm/irq.h>
|
||||
|
||||
#include <asm/arch/sharpsl.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/arch/imx-uart.h>
|
||||
|
||||
/* We've been assigned a range on the "Low-density serial ports" major */
|
||||
#define SERIAL_IMX_MAJOR 204
|
||||
|
@ -73,7 +74,8 @@ struct imx_port {
|
|||
struct uart_port port;
|
||||
struct timer_list timer;
|
||||
unsigned int old_status;
|
||||
int txirq,rxirq,rtsirq;
|
||||
int txirq,rxirq,rtsirq;
|
||||
int have_rtscts:1;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -491,8 +493,12 @@ imx_set_termios(struct uart_port *port, struct termios *termios,
|
|||
ucr2 = UCR2_SRST | UCR2_IRTS;
|
||||
|
||||
if (termios->c_cflag & CRTSCTS) {
|
||||
ucr2 &= ~UCR2_IRTS;
|
||||
ucr2 |= UCR2_CTSC;
|
||||
if( sport->have_rtscts ) {
|
||||
ucr2 &= ~UCR2_IRTS;
|
||||
ucr2 |= UCR2_CTSC;
|
||||
} else {
|
||||
termios->c_cflag &= ~CRTSCTS;
|
||||
}
|
||||
}
|
||||
|
||||
if (termios->c_cflag & CSTOPB)
|
||||
|
@ -719,27 +725,6 @@ static void __init imx_init_ports(void)
|
|||
imx_ports[i].timer.function = imx_timeout;
|
||||
imx_ports[i].timer.data = (unsigned long)&imx_ports[i];
|
||||
}
|
||||
|
||||
imx_gpio_mode(PC9_PF_UART1_CTS);
|
||||
imx_gpio_mode(PC10_PF_UART1_RTS);
|
||||
imx_gpio_mode(PC11_PF_UART1_TXD);
|
||||
imx_gpio_mode(PC12_PF_UART1_RXD);
|
||||
imx_gpio_mode(PB28_PF_UART2_CTS);
|
||||
imx_gpio_mode(PB29_PF_UART2_RTS);
|
||||
|
||||
imx_gpio_mode(PB30_PF_UART2_TXD);
|
||||
imx_gpio_mode(PB31_PF_UART2_RXD);
|
||||
|
||||
#if 0 /* We don't need these, on the mx1 the _modem_ side of the uart
|
||||
* is implemented.
|
||||
*/
|
||||
imx_gpio_mode(PD7_AF_UART2_DTR);
|
||||
imx_gpio_mode(PD8_AF_UART2_DCD);
|
||||
imx_gpio_mode(PD9_AF_UART2_RI);
|
||||
imx_gpio_mode(PD10_AF_UART2_DSR);
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SERIAL_IMX_CONSOLE
|
||||
|
@ -932,7 +917,14 @@ static int serial_imx_resume(struct platform_device *dev)
|
|||
|
||||
static int serial_imx_probe(struct platform_device *dev)
|
||||
{
|
||||
struct imxuart_platform_data *pdata;
|
||||
|
||||
imx_ports[dev->id].port.dev = &dev->dev;
|
||||
|
||||
pdata = (struct imxuart_platform_data *)dev->dev.platform_data;
|
||||
if(pdata && (pdata->flags & IMXUART_HAVE_RTSCTS))
|
||||
imx_ports[dev->id].have_rtscts = 1;
|
||||
|
||||
uart_add_one_port(&imx_reg, &imx_ports[dev->id].port);
|
||||
platform_set_drvdata(dev, &imx_ports[dev->id]);
|
||||
return 0;
|
||||
|
|
10
include/asm-arm/arch-imx/imx-uart.h
Normal file
10
include/asm-arm/arch-imx/imx-uart.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#ifndef ASMARM_ARCH_UART_H
|
||||
#define ASMARM_ARCH_UART_H
|
||||
|
||||
#define IMXUART_HAVE_RTSCTS (1<<0)
|
||||
|
||||
struct imxuart_platform_data {
|
||||
unsigned int flags;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -260,6 +260,12 @@ check_signature(const unsigned char __iomem *bus_addr, const unsigned char *sign
|
|||
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_PCI
|
||||
|
||||
#define __io(v) v
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
* IXP4xx does not have a transparent cpu -> PCI I/O translation
|
||||
* window. Instead, it has a set of registers that must be tweaked
|
||||
|
@ -578,6 +584,7 @@ __ixp4xx_iowrite32_rep(void __iomem *addr, const void *vaddr, u32 count)
|
|||
|
||||
#define ioport_map(port, nr) ((void __iomem*)(port + PIO_OFFSET))
|
||||
#define ioport_unmap(addr)
|
||||
#endif // !CONFIG_PCI
|
||||
|
||||
#endif // __ASM_ARM_ARCH_IO_H
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*/
|
||||
#define PHYS_OFFSET UL(0x00000000)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#if !defined(__ASSEMBLY__) && defined(CONFIG_PCI)
|
||||
|
||||
void ixp4xx_adjust_zones(int node, unsigned long *size, unsigned long *holes);
|
||||
|
||||
|
|
|
@ -410,7 +410,8 @@ type name(void) { \
|
|||
__asm__ __volatile__ ( \
|
||||
__syscall(name) \
|
||||
: "=r" (__res_r0) \
|
||||
: __SYS_REG_LIST() ); \
|
||||
: __SYS_REG_LIST() \
|
||||
: "memory" ); \
|
||||
__res = __res_r0; \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
|
@ -424,7 +425,8 @@ type name(type1 arg1) { \
|
|||
__asm__ __volatile__ ( \
|
||||
__syscall(name) \
|
||||
: "=r" (__res_r0) \
|
||||
: __SYS_REG_LIST( "0" (__r0) ) ); \
|
||||
: __SYS_REG_LIST( "0" (__r0) ) \
|
||||
: "memory" ); \
|
||||
__res = __res_r0; \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
|
@ -439,7 +441,8 @@ type name(type1 arg1,type2 arg2) { \
|
|||
__asm__ __volatile__ ( \
|
||||
__syscall(name) \
|
||||
: "=r" (__res_r0) \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) ); \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) \
|
||||
: "memory" ); \
|
||||
__res = __res_r0; \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
|
@ -456,7 +459,8 @@ type name(type1 arg1,type2 arg2,type3 arg3) { \
|
|||
__asm__ __volatile__ ( \
|
||||
__syscall(name) \
|
||||
: "=r" (__res_r0) \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) ); \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) \
|
||||
: "memory" ); \
|
||||
__res = __res_r0; \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
|
@ -474,7 +478,8 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \
|
|||
__asm__ __volatile__ ( \
|
||||
__syscall(name) \
|
||||
: "=r" (__res_r0) \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) ); \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) \
|
||||
: "memory" ); \
|
||||
__res = __res_r0; \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
|
@ -494,7 +499,8 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \
|
|||
__syscall(name) \
|
||||
: "=r" (__res_r0) \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \
|
||||
"r" (__r3), "r" (__r4) ) ); \
|
||||
"r" (__r3), "r" (__r4) ) \
|
||||
: "memory" ); \
|
||||
__res = __res_r0; \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
|
@ -514,7 +520,8 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6
|
|||
__syscall(name) \
|
||||
: "=r" (__res_r0) \
|
||||
: __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \
|
||||
"r" (__r3), "r" (__r4), "r" (__r5) ) ); \
|
||||
"r" (__r3), "r" (__r4), "r" (__r5) ) \
|
||||
: "memory" ); \
|
||||
__res = __res_r0; \
|
||||
__syscall_return(type,__res); \
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue