Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+141 -91
-2
arch/arm/Kconfig
··· 150 150 151 151 config ARCH_IXP4XX 152 152 bool "IXP4xx-based" 153 - select DMABOUNCE 154 - select PCI 155 153 help 156 154 Support for Intel's IXP4XX (XScale) family of processors. 157 155
+2 -2
arch/arm/boot/compressed/misc.c
··· 38 38 if (--i < 0) 39 39 return; 40 40 41 - asm("mrc p14, 0, %0, c0, c0, 0" : "=r" (status)); 41 + asm volatile ("mrc p14, 0, %0, c0, c0, 0" : "=r" (status)); 42 42 } while (status & 2); 43 43 44 - asm("mcr p15, 0, %0, c1, c0, 0" : : "r" (ch)); 44 + asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch)); 45 45 } 46 46 47 47 #define putc(ch) icedcc_putc(ch)
-52
arch/arm/mach-imx/generic.c
··· 195 195 } 196 196 EXPORT_SYMBOL(imx_set_mmc_info); 197 197 198 - static struct resource imx_uart1_resources[] = { 199 - [0] = { 200 - .start = 0x00206000, 201 - .end = 0x002060FF, 202 - .flags = IORESOURCE_MEM, 203 - }, 204 - [1] = { 205 - .start = (UART1_MINT_RX), 206 - .end = (UART1_MINT_RX), 207 - .flags = IORESOURCE_IRQ, 208 - }, 209 - [2] = { 210 - .start = (UART1_MINT_TX), 211 - .end = (UART1_MINT_TX), 212 - .flags = IORESOURCE_IRQ, 213 - }, 214 - }; 215 - 216 - static struct platform_device imx_uart1_device = { 217 - .name = "imx-uart", 218 - .id = 0, 219 - .num_resources = ARRAY_SIZE(imx_uart1_resources), 220 - .resource = imx_uart1_resources, 221 - }; 222 - 223 - static struct resource imx_uart2_resources[] = { 224 - [0] = { 225 - .start = 0x00207000, 226 - .end = 0x002070FF, 227 - .flags = IORESOURCE_MEM, 228 - }, 229 - [1] = { 230 - .start = (UART2_MINT_RX), 231 - .end = (UART2_MINT_RX), 232 - .flags = IORESOURCE_IRQ, 233 - }, 234 - [2] = { 235 - .start = (UART2_MINT_TX), 236 - .end = (UART2_MINT_TX), 237 - .flags = IORESOURCE_IRQ, 238 - }, 239 - }; 240 - 241 - static struct platform_device imx_uart2_device = { 242 - .name = "imx-uart", 243 - .id = 1, 244 - .num_resources = ARRAY_SIZE(imx_uart2_resources), 245 - .resource = imx_uart2_resources, 246 - }; 247 - 248 198 static struct imxfb_mach_info imx_fb_info; 249 199 250 200 void __init set_imx_fb_info(struct imxfb_mach_info *hard_imx_fb_info) ··· 233 283 static struct platform_device *devices[] __initdata = { 234 284 &imx_mmc_device, 235 285 &imxfb_device, 236 - &imx_uart1_device, 237 - &imx_uart2_device, 238 286 }; 239 287 240 288 static struct map_desc imx_io_desc[] __initdata = {
+74
arch/arm/mach-imx/mx1ads.c
··· 26 26 27 27 #include <asm/mach/arch.h> 28 28 #include <asm/arch/mmc.h> 29 + #include <asm/arch/imx-uart.h> 29 30 #include <linux/interrupt.h> 30 31 #include "generic.h" 31 32 ··· 49 48 .resource = cs89x0_resources, 50 49 }; 51 50 51 + static struct imxuart_platform_data uart_pdata = { 52 + .flags = IMXUART_HAVE_RTSCTS, 53 + }; 54 + 55 + static struct resource imx_uart1_resources[] = { 56 + [0] = { 57 + .start = 0x00206000, 58 + .end = 0x002060FF, 59 + .flags = IORESOURCE_MEM, 60 + }, 61 + [1] = { 62 + .start = (UART1_MINT_RX), 63 + .end = (UART1_MINT_RX), 64 + .flags = IORESOURCE_IRQ, 65 + }, 66 + [2] = { 67 + .start = (UART1_MINT_TX), 68 + .end = (UART1_MINT_TX), 69 + .flags = IORESOURCE_IRQ, 70 + }, 71 + }; 72 + 73 + static struct platform_device imx_uart1_device = { 74 + .name = "imx-uart", 75 + .id = 0, 76 + .num_resources = ARRAY_SIZE(imx_uart1_resources), 77 + .resource = imx_uart1_resources, 78 + .dev = { 79 + .platform_data = &uart_pdata, 80 + } 81 + }; 82 + 83 + static struct resource imx_uart2_resources[] = { 84 + [0] = { 85 + .start = 0x00207000, 86 + .end = 0x002070FF, 87 + .flags = IORESOURCE_MEM, 88 + }, 89 + [1] = { 90 + .start = (UART2_MINT_RX), 91 + .end = (UART2_MINT_RX), 92 + .flags = IORESOURCE_IRQ, 93 + }, 94 + [2] = { 95 + .start = (UART2_MINT_TX), 96 + .end = (UART2_MINT_TX), 97 + .flags = IORESOURCE_IRQ, 98 + }, 99 + }; 100 + 101 + static struct platform_device imx_uart2_device = { 102 + .name = "imx-uart", 103 + .id = 1, 104 + .num_resources = ARRAY_SIZE(imx_uart2_resources), 105 + .resource = imx_uart2_resources, 106 + .dev = { 107 + .platform_data = &uart_pdata, 108 + } 109 + }; 110 + 52 111 static struct platform_device *devices[] __initdata = { 53 112 &cs89x0_device, 113 + &imx_uart1_device, 114 + &imx_uart2_device, 54 115 }; 55 116 56 117 #ifdef CONFIG_MMC_IMX ··· 138 75 imx_gpio_mode(GPIO_PORTB | GPIO_GIUS | GPIO_IN | 20); 139 76 imx_set_mmc_info(&mx1ads_mmc_info); 140 77 #endif 78 + 79 + imx_gpio_mode(PC9_PF_UART1_CTS); 80 + imx_gpio_mode(PC10_PF_UART1_RTS); 81 + imx_gpio_mode(PC11_PF_UART1_TXD); 82 + imx_gpio_mode(PC12_PF_UART1_RXD); 83 + 84 + imx_gpio_mode(PB28_PF_UART2_CTS); 85 + imx_gpio_mode(PB29_PF_UART2_RTS); 86 + imx_gpio_mode(PB30_PF_UART2_TXD); 87 + imx_gpio_mode(PB31_PF_UART2_RXD); 88 + 141 89 platform_add_devices(devices, ARRAY_SIZE(devices)); 142 90 } 143 91
+14 -1
arch/arm/mach-ixp4xx/Kconfig
··· 11 11 config MACH_NSLU2 12 12 bool 13 13 prompt "Linksys NSLU2" 14 + select PCI 14 15 help 15 16 Say 'Y' here if you want your kernel to support Linksys's 16 17 NSLU2 NAS device. For more information on this platform, ··· 19 18 20 19 config ARCH_AVILA 21 20 bool "Avila" 21 + select PCI 22 22 help 23 23 Say 'Y' here if you want your kernel to support the Gateworks 24 24 Avila Network Platform. For more information on this platform, ··· 27 25 28 26 config ARCH_ADI_COYOTE 29 27 bool "Coyote" 28 + select PCI 30 29 help 31 30 Say 'Y' here if you want your kernel to support the ADI 32 31 Engineering Coyote Gateway Reference Platform. For more ··· 35 32 36 33 config ARCH_IXDP425 37 34 bool "IXDP425" 35 + select PCI 38 36 help 39 37 Say 'Y' here if you want your kernel to support Intel's 40 38 IXDP425 Development Platform (Also known as Richfield). ··· 43 39 44 40 config MACH_IXDPG425 45 41 bool "IXDPG425" 42 + select PCI 46 43 help 47 44 Say 'Y' here if you want your kernel to support Intel's 48 45 IXDPG425 Development Platform (Also known as Montajade). ··· 51 46 52 47 config MACH_IXDP465 53 48 bool "IXDP465" 49 + select PCI 54 50 help 55 51 Say 'Y' here if you want your kernel to support Intel's 56 52 IXDP465 Development Platform (Also known as BMP). ··· 78 72 config MACH_NAS100D 79 73 bool 80 74 prompt "NAS100D" 75 + select PCI 81 76 help 82 77 Say 'Y' here if you want your kernel to support Iomega's 83 78 NAS 100d device. For more information on this platform, ··· 103 96 config MACH_GTWX5715 104 97 bool "Gemtek WX5715 (Linksys WRV54G)" 105 98 depends on ARCH_IXP4XX 99 + select PCI 106 100 help 107 101 This board is currently inside the Linksys WRV54G Gateways. 108 102 ··· 118 110 "High Speed" UART is n/c (as far as I can tell) 119 111 20 Pin ARM/Xscale JTAG interface on J2 120 112 121 - 122 113 comment "IXP4xx Options" 114 + 115 + config DMABOUNCE 116 + bool 117 + default y 118 + depends on PCI 123 119 124 120 config IXP4XX_INDIRECT_PCI 125 121 bool "Use indirect PCI memory access" 122 + depends on PCI 126 123 help 127 124 IXP4xx provides two methods of accessing PCI memory space: 128 125
+2 -1
arch/arm/mach-ixp4xx/Makefile
··· 2 2 # Makefile for the linux kernel. 3 3 # 4 4 5 - obj-y += common.o common-pci.o 5 + obj-y += common.o 6 6 7 + obj-$(CONFIG_PCI) += common-pci.o 7 8 obj-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pci.o ixdp425-setup.o 8 9 obj-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o coyote-setup.o 9 10 obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o
+1 -1
drivers/input/touchscreen/corgi_ts.c
··· 17 17 #include <linux/interrupt.h> 18 18 #include <linux/module.h> 19 19 #include <linux/slab.h> 20 - #include <asm/irq.h> 20 + //#include <asm/irq.h> 21 21 22 22 #include <asm/arch/sharpsl.h> 23 23 #include <asm/arch/hardware.h>
+16 -24
drivers/serial/imx.c
··· 45 45 #include <asm/io.h> 46 46 #include <asm/irq.h> 47 47 #include <asm/hardware.h> 48 + #include <asm/arch/imx-uart.h> 48 49 49 50 /* We've been assigned a range on the "Low-density serial ports" major */ 50 51 #define SERIAL_IMX_MAJOR 204 ··· 74 73 struct uart_port port; 75 74 struct timer_list timer; 76 75 unsigned int old_status; 77 - int txirq,rxirq,rtsirq; 76 + int txirq,rxirq,rtsirq; 77 + int have_rtscts:1; 78 78 }; 79 79 80 80 /* ··· 493 491 ucr2 = UCR2_SRST | UCR2_IRTS; 494 492 495 493 if (termios->c_cflag & CRTSCTS) { 496 - ucr2 &= ~UCR2_IRTS; 497 - ucr2 |= UCR2_CTSC; 494 + if( sport->have_rtscts ) { 495 + ucr2 &= ~UCR2_IRTS; 496 + ucr2 |= UCR2_CTSC; 497 + } else { 498 + termios->c_cflag &= ~CRTSCTS; 499 + } 498 500 } 499 501 500 502 if (termios->c_cflag & CSTOPB) ··· 725 719 imx_ports[i].timer.function = imx_timeout; 726 720 imx_ports[i].timer.data = (unsigned long)&imx_ports[i]; 727 721 } 728 - 729 - imx_gpio_mode(PC9_PF_UART1_CTS); 730 - imx_gpio_mode(PC10_PF_UART1_RTS); 731 - imx_gpio_mode(PC11_PF_UART1_TXD); 732 - imx_gpio_mode(PC12_PF_UART1_RXD); 733 - imx_gpio_mode(PB28_PF_UART2_CTS); 734 - imx_gpio_mode(PB29_PF_UART2_RTS); 735 - 736 - imx_gpio_mode(PB30_PF_UART2_TXD); 737 - imx_gpio_mode(PB31_PF_UART2_RXD); 738 - 739 - #if 0 /* We don't need these, on the mx1 the _modem_ side of the uart 740 - * is implemented. 741 - */ 742 - imx_gpio_mode(PD7_AF_UART2_DTR); 743 - imx_gpio_mode(PD8_AF_UART2_DCD); 744 - imx_gpio_mode(PD9_AF_UART2_RI); 745 - imx_gpio_mode(PD10_AF_UART2_DSR); 746 - #endif 747 - 748 - 749 722 } 750 723 751 724 #ifdef CONFIG_SERIAL_IMX_CONSOLE ··· 917 932 918 933 static int serial_imx_probe(struct platform_device *dev) 919 934 { 935 + struct imxuart_platform_data *pdata; 936 + 920 937 imx_ports[dev->id].port.dev = &dev->dev; 938 + 939 + pdata = (struct imxuart_platform_data *)dev->dev.platform_data; 940 + if(pdata && (pdata->flags & IMXUART_HAVE_RTSCTS)) 941 + imx_ports[dev->id].have_rtscts = 1; 942 + 921 943 uart_add_one_port(&imx_reg, &imx_ports[dev->id].port); 922 944 platform_set_drvdata(dev, &imx_ports[dev->id]); 923 945 return 0;
+10
include/asm-arm/arch-imx/imx-uart.h
··· 1 + #ifndef ASMARM_ARCH_UART_H 2 + #define ASMARM_ARCH_UART_H 3 + 4 + #define IMXUART_HAVE_RTSCTS (1<<0) 5 + 6 + struct imxuart_platform_data { 7 + unsigned int flags; 8 + }; 9 + 10 + #endif
+7
include/asm-arm/arch-ixp4xx/io.h
··· 260 260 261 261 #endif 262 262 263 + #ifndef CONFIG_PCI 264 + 265 + #define __io(v) v 266 + 267 + #else 268 + 263 269 /* 264 270 * IXP4xx does not have a transparent cpu -> PCI I/O translation 265 271 * window. Instead, it has a set of registers that must be tweaked ··· 584 578 585 579 #define ioport_map(port, nr) ((void __iomem*)(port + PIO_OFFSET)) 586 580 #define ioport_unmap(addr) 581 + #endif // !CONFIG_PCI 587 582 588 583 #endif // __ASM_ARM_ARCH_IO_H 589 584
+1 -1
include/asm-arm/arch-ixp4xx/memory.h
··· 14 14 */ 15 15 #define PHYS_OFFSET UL(0x00000000) 16 16 17 - #ifndef __ASSEMBLY__ 17 + #if !defined(__ASSEMBLY__) && defined(CONFIG_PCI) 18 18 19 19 void ixp4xx_adjust_zones(int node, unsigned long *size, unsigned long *holes); 20 20
+14 -7
include/asm-arm/unistd.h
··· 410 410 __asm__ __volatile__ ( \ 411 411 __syscall(name) \ 412 412 : "=r" (__res_r0) \ 413 - : __SYS_REG_LIST() ); \ 413 + : __SYS_REG_LIST() \ 414 + : "memory" ); \ 414 415 __res = __res_r0; \ 415 416 __syscall_return(type,__res); \ 416 417 } ··· 425 424 __asm__ __volatile__ ( \ 426 425 __syscall(name) \ 427 426 : "=r" (__res_r0) \ 428 - : __SYS_REG_LIST( "0" (__r0) ) ); \ 427 + : __SYS_REG_LIST( "0" (__r0) ) \ 428 + : "memory" ); \ 429 429 __res = __res_r0; \ 430 430 __syscall_return(type,__res); \ 431 431 } ··· 441 439 __asm__ __volatile__ ( \ 442 440 __syscall(name) \ 443 441 : "=r" (__res_r0) \ 444 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) ); \ 442 + : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) \ 443 + : "memory" ); \ 445 444 __res = __res_r0; \ 446 445 __syscall_return(type,__res); \ 447 446 } ··· 459 456 __asm__ __volatile__ ( \ 460 457 __syscall(name) \ 461 458 : "=r" (__res_r0) \ 462 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) ); \ 459 + : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) \ 460 + : "memory" ); \ 463 461 __res = __res_r0; \ 464 462 __syscall_return(type,__res); \ 465 463 } ··· 478 474 __asm__ __volatile__ ( \ 479 475 __syscall(name) \ 480 476 : "=r" (__res_r0) \ 481 - : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) ); \ 477 + : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) \ 478 + : "memory" ); \ 482 479 __res = __res_r0; \ 483 480 __syscall_return(type,__res); \ 484 481 } ··· 499 494 __syscall(name) \ 500 495 : "=r" (__res_r0) \ 501 496 : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ 502 - "r" (__r3), "r" (__r4) ) ); \ 497 + "r" (__r3), "r" (__r4) ) \ 498 + : "memory" ); \ 503 499 __res = __res_r0; \ 504 500 __syscall_return(type,__res); \ 505 501 } ··· 520 514 __syscall(name) \ 521 515 : "=r" (__res_r0) \ 522 516 : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ 523 - "r" (__r3), "r" (__r4), "r" (__r5) ) ); \ 517 + "r" (__r3), "r" (__r4), "r" (__r5) ) \ 518 + : "memory" ); \ 524 519 __res = __res_r0; \ 525 520 __syscall_return(type,__res); \ 526 521 }