diff options
| -rw-r--r-- | arch/arm/kernel/dma.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-at91/at91sam9260_devices.c | 8 | ||||
| -rw-r--r-- | drivers/net/irda/pxaficp_ir.c | 30 | ||||
| -rw-r--r-- | include/asm-arm/arch-ixp4xx/io.h | 17 | ||||
| -rw-r--r-- | include/asm-arm/system.h | 34 | ||||
| -rw-r--r-- | include/asm-arm/unistd.h | 2 |
6 files changed, 49 insertions, 43 deletions
diff --git a/arch/arm/kernel/dma.c b/arch/arm/kernel/dma.c index 5a0f4bc5da95..ba99a2035523 100644 --- a/arch/arm/kernel/dma.c +++ b/arch/arm/kernel/dma.c | |||
| @@ -228,6 +228,7 @@ int dma_channel_active(dmach_t channel) | |||
| 228 | { | 228 | { |
| 229 | return dma_chan[channel].active; | 229 | return dma_chan[channel].active; |
| 230 | } | 230 | } |
| 231 | EXPORT_SYMBOL(dma_channel_active); | ||
| 231 | 232 | ||
| 232 | void set_dma_page(dmach_t channel, char pagenr) | 233 | void set_dma_page(dmach_t channel, char pagenr) |
| 233 | { | 234 | { |
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index f7d342ccbebf..40586e22cd38 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
| @@ -320,16 +320,16 @@ void __init at91_add_device_nand(struct at91_nand_data *data) | |||
| 320 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(0) | AT91_SMC_NCS_WRSETUP_(0) | 320 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(0) | AT91_SMC_NCS_WRSETUP_(0) |
| 321 | | AT91_SMC_NRDSETUP_(0) | AT91_SMC_NCS_RDSETUP_(0)); | 321 | | AT91_SMC_NRDSETUP_(0) | AT91_SMC_NCS_RDSETUP_(0)); |
| 322 | 322 | ||
| 323 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(2) | AT91_SMC_NCS_WRPULSE_(5) | 323 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) |
| 324 | | AT91_SMC_NRDPULSE_(2) | AT91_SMC_NCS_RDPULSE_(5)); | 324 | | AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); |
| 325 | 325 | ||
| 326 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7)); | 326 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); |
| 327 | 327 | ||
| 328 | if (data->bus_width_16) | 328 | if (data->bus_width_16) |
| 329 | mode = AT91_SMC_DBW_16; | 329 | mode = AT91_SMC_DBW_16; |
| 330 | else | 330 | else |
| 331 | mode = AT91_SMC_DBW_8; | 331 | mode = AT91_SMC_DBW_8; |
| 332 | at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(1)); | 332 | at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(2)); |
| 333 | 333 | ||
| 334 | /* enable pin */ | 334 | /* enable pin */ |
| 335 | if (data->enable_pin) | 335 | if (data->enable_pin) |
diff --git a/drivers/net/irda/pxaficp_ir.c b/drivers/net/irda/pxaficp_ir.c index 9137e239fac2..2272156af31e 100644 --- a/drivers/net/irda/pxaficp_ir.c +++ b/drivers/net/irda/pxaficp_ir.c | |||
| @@ -321,15 +321,22 @@ static void pxa_irda_fir_dma_tx_irq(int channel, void *data) | |||
| 321 | pxa_irda_set_speed(si, si->newspeed); | 321 | pxa_irda_set_speed(si, si->newspeed); |
| 322 | si->newspeed = 0; | 322 | si->newspeed = 0; |
| 323 | } else { | 323 | } else { |
| 324 | int i = 64; | ||
| 325 | |||
| 324 | ICCR0 = 0; | 326 | ICCR0 = 0; |
| 325 | pxa_irda_fir_dma_rx_start(si); | 327 | pxa_irda_fir_dma_rx_start(si); |
| 328 | while ((ICSR1 & ICSR1_RNE) && i--) | ||
| 329 | (void)ICDR; | ||
| 326 | ICCR0 = ICCR0_ITR | ICCR0_RXE; | 330 | ICCR0 = ICCR0_ITR | ICCR0_RXE; |
| 331 | |||
| 332 | if (i < 0) | ||
| 333 | printk(KERN_ERR "pxa_ir: cannot clear Rx FIFO!\n"); | ||
| 327 | } | 334 | } |
| 328 | netif_wake_queue(dev); | 335 | netif_wake_queue(dev); |
| 329 | } | 336 | } |
| 330 | 337 | ||
| 331 | /* EIF(Error in FIFO/End in Frame) handler for FIR */ | 338 | /* EIF(Error in FIFO/End in Frame) handler for FIR */ |
| 332 | static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev) | 339 | static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev, int icsr0) |
| 333 | { | 340 | { |
| 334 | unsigned int len, stat, data; | 341 | unsigned int len, stat, data; |
| 335 | 342 | ||
| @@ -350,7 +357,7 @@ static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev) | |||
| 350 | } | 357 | } |
| 351 | if (stat & ICSR1_ROR) { | 358 | if (stat & ICSR1_ROR) { |
| 352 | printk(KERN_DEBUG "pxa_ir: fir receive overrun\n"); | 359 | printk(KERN_DEBUG "pxa_ir: fir receive overrun\n"); |
| 353 | si->stats.rx_frame_errors++; | 360 | si->stats.rx_over_errors++; |
| 354 | } | 361 | } |
| 355 | } else { | 362 | } else { |
| 356 | si->dma_rx_buff[len++] = data; | 363 | si->dma_rx_buff[len++] = data; |
| @@ -362,7 +369,15 @@ static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev) | |||
| 362 | 369 | ||
| 363 | if (stat & ICSR1_EOF) { | 370 | if (stat & ICSR1_EOF) { |
| 364 | /* end of frame. */ | 371 | /* end of frame. */ |
| 365 | struct sk_buff *skb = alloc_skb(len+1,GFP_ATOMIC); | 372 | struct sk_buff *skb; |
| 373 | |||
| 374 | if (icsr0 & ICSR0_FRE) { | ||
| 375 | printk(KERN_ERR "pxa_ir: dropping erroneous frame\n"); | ||
| 376 | si->stats.rx_dropped++; | ||
| 377 | return; | ||
| 378 | } | ||
| 379 | |||
| 380 | skb = alloc_skb(len+1,GFP_ATOMIC); | ||
| 366 | if (!skb) { | 381 | if (!skb) { |
| 367 | printk(KERN_ERR "pxa_ir: fir out of memory for receive skb\n"); | 382 | printk(KERN_ERR "pxa_ir: fir out of memory for receive skb\n"); |
| 368 | si->stats.rx_dropped++; | 383 | si->stats.rx_dropped++; |
| @@ -392,7 +407,7 @@ static irqreturn_t pxa_irda_fir_irq(int irq, void *dev_id) | |||
| 392 | { | 407 | { |
| 393 | struct net_device *dev = dev_id; | 408 | struct net_device *dev = dev_id; |
| 394 | struct pxa_irda *si = netdev_priv(dev); | 409 | struct pxa_irda *si = netdev_priv(dev); |
| 395 | int icsr0; | 410 | int icsr0, i = 64; |
| 396 | 411 | ||
| 397 | /* stop RX DMA */ | 412 | /* stop RX DMA */ |
| 398 | DCSR(si->rxdma) &= ~DCSR_RUN; | 413 | DCSR(si->rxdma) &= ~DCSR_RUN; |
| @@ -412,13 +427,18 @@ static irqreturn_t pxa_irda_fir_irq(int irq, void *dev_id) | |||
| 412 | 427 | ||
| 413 | if (icsr0 & ICSR0_EIF) { | 428 | if (icsr0 & ICSR0_EIF) { |
| 414 | /* An error in FIFO occured, or there is a end of frame */ | 429 | /* An error in FIFO occured, or there is a end of frame */ |
| 415 | pxa_irda_fir_irq_eif(si, dev); | 430 | pxa_irda_fir_irq_eif(si, dev, icsr0); |
| 416 | } | 431 | } |
| 417 | 432 | ||
| 418 | ICCR0 = 0; | 433 | ICCR0 = 0; |
| 419 | pxa_irda_fir_dma_rx_start(si); | 434 | pxa_irda_fir_dma_rx_start(si); |
| 435 | while ((ICSR1 & ICSR1_RNE) && i--) | ||
| 436 | (void)ICDR; | ||
| 420 | ICCR0 = ICCR0_ITR | ICCR0_RXE; | 437 | ICCR0 = ICCR0_ITR | ICCR0_RXE; |
| 421 | 438 | ||
| 439 | if (i < 0) | ||
| 440 | printk(KERN_ERR "pxa_ir: cannot clear Rx FIFO!\n"); | ||
| 441 | |||
| 422 | return IRQ_HANDLED; | 442 | return IRQ_HANDLED; |
| 423 | } | 443 | } |
| 424 | 444 | ||
diff --git a/include/asm-arm/arch-ixp4xx/io.h b/include/asm-arm/arch-ixp4xx/io.h index b7b5414d9320..a41ba229c564 100644 --- a/include/asm-arm/arch-ixp4xx/io.h +++ b/include/asm-arm/arch-ixp4xx/io.h | |||
| @@ -238,23 +238,6 @@ __ixp4xx_readsl(const volatile void __iomem *bus_addr, u32 *vaddr, u32 count) | |||
| 238 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),(c),(l)) | 238 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),(c),(l)) |
| 239 | #define memcpy_toio(c,a,l) _memcpy_toio((c),(a),(l)) | 239 | #define memcpy_toio(c,a,l) _memcpy_toio((c),(a),(l)) |
| 240 | 240 | ||
| 241 | static inline int | ||
| 242 | check_signature(const unsigned char __iomem *bus_addr, const unsigned char *signature, | ||
| 243 | int length) | ||
| 244 | { | ||
| 245 | int retval = 0; | ||
| 246 | do { | ||
| 247 | if (readb(bus_addr) != *signature) | ||
| 248 | goto out; | ||
| 249 | bus_addr++; | ||
| 250 | signature++; | ||
| 251 | length--; | ||
| 252 | } while (length); | ||
| 253 | retval = 1; | ||
| 254 | out: | ||
| 255 | return retval; | ||
| 256 | } | ||
| 257 | |||
| 258 | #endif | 241 | #endif |
| 259 | 242 | ||
| 260 | #ifndef CONFIG_PCI | 243 | #ifndef CONFIG_PCI |
diff --git a/include/asm-arm/system.h b/include/asm-arm/system.h index f06d8a43fdee..69134c7518c1 100644 --- a/include/asm-arm/system.h +++ b/include/asm-arm/system.h | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
| 5 | 5 | ||
| 6 | #include <asm/memory.h> | ||
| 6 | 7 | ||
| 7 | #define CPU_ARCH_UNKNOWN 0 | 8 | #define CPU_ARCH_UNKNOWN 0 |
| 8 | #define CPU_ARCH_ARMv3 1 | 9 | #define CPU_ARCH_ARMv3 1 |
| @@ -154,7 +155,7 @@ extern unsigned int user_debug; | |||
| 154 | #define vectors_high() (0) | 155 | #define vectors_high() (0) |
| 155 | #endif | 156 | #endif |
| 156 | 157 | ||
| 157 | #if __LINUX_ARM_ARCH__ >= 6 | 158 | #if defined(CONFIG_CPU_XSC3) || __LINUX_ARM_ARCH__ >= 6 |
| 158 | #define isb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ | 159 | #define isb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ |
| 159 | : : "r" (0) : "memory") | 160 | : : "r" (0) : "memory") |
| 160 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ | 161 | #define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" \ |
| @@ -168,22 +169,23 @@ extern unsigned int user_debug; | |||
| 168 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | 169 | #define dmb() __asm__ __volatile__ ("" : : : "memory") |
| 169 | #endif | 170 | #endif |
| 170 | 171 | ||
| 171 | #define mb() barrier() | 172 | #ifndef CONFIG_SMP |
| 172 | #define rmb() barrier() | 173 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
| 173 | #define wmb() barrier() | 174 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
| 174 | #define read_barrier_depends() do { } while(0) | 175 | #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
| 175 | 176 | #define smp_mb() barrier() | |
| 176 | #ifdef CONFIG_SMP | 177 | #define smp_rmb() barrier() |
| 177 | #define smp_mb() dmb() | 178 | #define smp_wmb() barrier() |
| 178 | #define smp_rmb() dmb() | ||
| 179 | #define smp_wmb() dmb() | ||
| 180 | #define smp_read_barrier_depends() read_barrier_depends() | ||
| 181 | #else | 179 | #else |
| 182 | #define smp_mb() barrier() | 180 | #define mb() dmb() |
| 183 | #define smp_rmb() barrier() | 181 | #define rmb() dmb() |
| 184 | #define smp_wmb() barrier() | 182 | #define wmb() dmb() |
| 185 | #define smp_read_barrier_depends() read_barrier_depends() | 183 | #define smp_mb() dmb() |
| 186 | #endif /* CONFIG_SMP */ | 184 | #define smp_rmb() dmb() |
| 185 | #define smp_wmb() dmb() | ||
| 186 | #endif | ||
| 187 | #define read_barrier_depends() do { } while(0) | ||
| 188 | #define smp_read_barrier_depends() do { } while(0) | ||
| 187 | 189 | ||
| 188 | #define set_mb(var, value) do { var = value; smp_mb(); } while (0) | 190 | #define set_mb(var, value) do { var = value; smp_mb(); } while (0) |
| 189 | #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); | 191 | #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); |
diff --git a/include/asm-arm/unistd.h b/include/asm-arm/unistd.h index 0991b7bc3f78..c025ab47e4b9 100644 --- a/include/asm-arm/unistd.h +++ b/include/asm-arm/unistd.h | |||
| @@ -372,7 +372,7 @@ | |||
| 372 | #define __NR_move_pages (__NR_SYSCALL_BASE+344) | 372 | #define __NR_move_pages (__NR_SYSCALL_BASE+344) |
| 373 | #define __NR_getcpu (__NR_SYSCALL_BASE+345) | 373 | #define __NR_getcpu (__NR_SYSCALL_BASE+345) |
| 374 | /* 346 for epoll_pwait */ | 374 | /* 346 for epoll_pwait */ |
| 375 | #define __NR_sys_kexec_load (__NR_SYSCALL_BASE+347) | 375 | #define __NR_kexec_load (__NR_SYSCALL_BASE+347) |
| 376 | 376 | ||
| 377 | /* | 377 | /* |
| 378 | * The following SWIs are ARM private. | 378 | * The following SWIs are ARM private. |
