diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-06-16 12:08:13 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-06-16 12:08:13 -0400 |
commit | f1bbbb6912662b9f6070c5bfc4ca9eb1f06a9d5b (patch) | |
tree | c2c130a74be25b0b2dff992e1a195e2728bdaadd /arch/cris | |
parent | fd0961ff67727482bb20ca7e8ea97b83e9de2ddb (diff) | |
parent | 7e27d6e778cd87b6f2415515d7127eba53fe5d02 (diff) |
Merge branch 'master' into for-next
Diffstat (limited to 'arch/cris')
-rw-r--r-- | arch/cris/arch-v10/drivers/ds1302.c | 20 | ||||
-rw-r--r-- | arch/cris/arch-v10/drivers/eeprom.c | 48 | ||||
-rw-r--r-- | arch/cris/arch-v10/drivers/pcf8563.c | 19 | ||||
-rw-r--r-- | arch/cris/arch-v10/kernel/irq.c | 8 | ||||
-rw-r--r-- | arch/cris/arch-v10/lib/dmacopy.c | 15 | ||||
-rw-r--r-- | arch/cris/arch-v10/lib/hw_settings.S | 14 | ||||
-rw-r--r-- | arch/cris/arch-v32/drivers/Kconfig | 16 | ||||
-rw-r--r-- | arch/cris/arch-v32/drivers/i2c.c | 22 | ||||
-rw-r--r-- | arch/cris/arch-v32/drivers/pcf8563.c | 21 | ||||
-rw-r--r-- | arch/cris/arch-v32/kernel/crisksyms.c | 4 | ||||
-rw-r--r-- | arch/cris/arch-v32/kernel/irq.c | 14 | ||||
-rw-r--r-- | arch/cris/arch-v32/kernel/smp.c | 4 | ||||
-rw-r--r-- | arch/cris/include/arch-v10/arch/irq.h | 9 | ||||
-rw-r--r-- | arch/cris/include/arch-v32/arch/irq.h | 4 | ||||
-rw-r--r-- | arch/cris/include/asm/param.h | 17 | ||||
-rw-r--r-- | arch/cris/include/asm/scatterlist.h | 17 |
16 files changed, 113 insertions, 139 deletions
diff --git a/arch/cris/arch-v10/drivers/ds1302.c b/arch/cris/arch-v10/drivers/ds1302.c index 77630df94343..884275629ef7 100644 --- a/arch/cris/arch-v10/drivers/ds1302.c +++ b/arch/cris/arch-v10/drivers/ds1302.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/miscdevice.h> | 20 | #include <linux/miscdevice.h> |
21 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
22 | #include <linux/smp_lock.h> | ||
22 | #include <linux/bcd.h> | 23 | #include <linux/bcd.h> |
23 | #include <linux/capability.h> | 24 | #include <linux/capability.h> |
24 | 25 | ||
@@ -238,9 +239,7 @@ static unsigned char days_in_mo[] = | |||
238 | 239 | ||
239 | /* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */ | 240 | /* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */ |
240 | 241 | ||
241 | static int | 242 | static int rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
242 | rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | ||
243 | unsigned long arg) | ||
244 | { | 243 | { |
245 | unsigned long flags; | 244 | unsigned long flags; |
246 | 245 | ||
@@ -354,6 +353,17 @@ rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | |||
354 | } | 353 | } |
355 | } | 354 | } |
356 | 355 | ||
356 | static long rtc_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | ||
357 | { | ||
358 | int ret; | ||
359 | |||
360 | lock_kernel(); | ||
361 | ret = rtc_ioctl(file, cmd, arg); | ||
362 | unlock_kernel(); | ||
363 | |||
364 | return ret; | ||
365 | } | ||
366 | |||
357 | static void | 367 | static void |
358 | print_rtc_status(void) | 368 | print_rtc_status(void) |
359 | { | 369 | { |
@@ -375,8 +385,8 @@ print_rtc_status(void) | |||
375 | /* The various file operations we support. */ | 385 | /* The various file operations we support. */ |
376 | 386 | ||
377 | static const struct file_operations rtc_fops = { | 387 | static const struct file_operations rtc_fops = { |
378 | .owner = THIS_MODULE, | 388 | .owner = THIS_MODULE, |
379 | .ioctl = rtc_ioctl, | 389 | .unlocked_ioctl = rtc_unlocked_ioctl, |
380 | }; | 390 | }; |
381 | 391 | ||
382 | /* Probe for the chip by writing something to its RAM and try reading it back. */ | 392 | /* Probe for the chip by writing something to its RAM and try reading it back. */ |
diff --git a/arch/cris/arch-v10/drivers/eeprom.c b/arch/cris/arch-v10/drivers/eeprom.c index 1f2ae909d3e6..c3405507a3d1 100644 --- a/arch/cris/arch-v10/drivers/eeprom.c +++ b/arch/cris/arch-v10/drivers/eeprom.c | |||
@@ -73,8 +73,7 @@ struct eeprom_type | |||
73 | int adapt_state; /* 1 = To high , 0 = Even, -1 = To low */ | 73 | int adapt_state; /* 1 = To high , 0 = Even, -1 = To low */ |
74 | 74 | ||
75 | /* this one is to keep the read/write operations atomic */ | 75 | /* this one is to keep the read/write operations atomic */ |
76 | wait_queue_head_t wait_q; | 76 | struct mutex lock; |
77 | volatile int busy; | ||
78 | int retry_cnt_addr; /* Used to keep track of number of retries for | 77 | int retry_cnt_addr; /* Used to keep track of number of retries for |
79 | adaptive timing adjustments */ | 78 | adaptive timing adjustments */ |
80 | int retry_cnt_read; | 79 | int retry_cnt_read; |
@@ -115,8 +114,7 @@ const struct file_operations eeprom_fops = | |||
115 | 114 | ||
116 | int __init eeprom_init(void) | 115 | int __init eeprom_init(void) |
117 | { | 116 | { |
118 | init_waitqueue_head(&eeprom.wait_q); | 117 | mutex_init(&eeprom.lock); |
119 | eeprom.busy = 0; | ||
120 | 118 | ||
121 | #ifdef CONFIG_ETRAX_I2C_EEPROM_PROBE | 119 | #ifdef CONFIG_ETRAX_I2C_EEPROM_PROBE |
122 | #define EETEXT "Found" | 120 | #define EETEXT "Found" |
@@ -439,10 +437,7 @@ static loff_t eeprom_lseek(struct file * file, loff_t offset, int orig) | |||
439 | 437 | ||
440 | static int eeprom_read_buf(loff_t addr, char * buf, int count) | 438 | static int eeprom_read_buf(loff_t addr, char * buf, int count) |
441 | { | 439 | { |
442 | struct file f; | 440 | return eeprom_read(NULL, buf, count, &addr); |
443 | |||
444 | f.f_pos = addr; | ||
445 | return eeprom_read(&f, buf, count, &addr); | ||
446 | } | 441 | } |
447 | 442 | ||
448 | 443 | ||
@@ -452,7 +447,7 @@ static int eeprom_read_buf(loff_t addr, char * buf, int count) | |||
452 | static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t *off) | 447 | static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t *off) |
453 | { | 448 | { |
454 | int read=0; | 449 | int read=0; |
455 | unsigned long p = file->f_pos; | 450 | unsigned long p = *off; |
456 | 451 | ||
457 | unsigned char page; | 452 | unsigned char page; |
458 | 453 | ||
@@ -461,12 +456,9 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t | |||
461 | return -EFAULT; | 456 | return -EFAULT; |
462 | } | 457 | } |
463 | 458 | ||
464 | wait_event_interruptible(eeprom.wait_q, !eeprom.busy); | 459 | if (mutex_lock_interruptible(&eeprom.lock)) |
465 | if (signal_pending(current)) | ||
466 | return -EINTR; | 460 | return -EINTR; |
467 | 461 | ||
468 | eeprom.busy++; | ||
469 | |||
470 | page = (unsigned char) (p >> 8); | 462 | page = (unsigned char) (p >> 8); |
471 | 463 | ||
472 | if(!eeprom_address(p)) | 464 | if(!eeprom_address(p)) |
@@ -476,8 +468,7 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t | |||
476 | i2c_stop(); | 468 | i2c_stop(); |
477 | 469 | ||
478 | /* don't forget to wake them up */ | 470 | /* don't forget to wake them up */ |
479 | eeprom.busy--; | 471 | mutex_unlock(&eeprom.lock); |
480 | wake_up_interruptible(&eeprom.wait_q); | ||
481 | return -EFAULT; | 472 | return -EFAULT; |
482 | } | 473 | } |
483 | 474 | ||
@@ -501,11 +492,10 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t | |||
501 | 492 | ||
502 | if(read > 0) | 493 | if(read > 0) |
503 | { | 494 | { |
504 | file->f_pos += read; | 495 | *off += read; |
505 | } | 496 | } |
506 | 497 | ||
507 | eeprom.busy--; | 498 | mutex_unlock(&eeprom.lock); |
508 | wake_up_interruptible(&eeprom.wait_q); | ||
509 | return read; | 499 | return read; |
510 | } | 500 | } |
511 | 501 | ||
@@ -513,11 +503,7 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t | |||
513 | 503 | ||
514 | static int eeprom_write_buf(loff_t addr, const char * buf, int count) | 504 | static int eeprom_write_buf(loff_t addr, const char * buf, int count) |
515 | { | 505 | { |
516 | struct file f; | 506 | return eeprom_write(NULL, buf, count, &addr); |
517 | |||
518 | f.f_pos = addr; | ||
519 | |||
520 | return eeprom_write(&f, buf, count, &addr); | ||
521 | } | 507 | } |
522 | 508 | ||
523 | 509 | ||
@@ -534,16 +520,14 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count, | |||
534 | return -EFAULT; | 520 | return -EFAULT; |
535 | } | 521 | } |
536 | 522 | ||
537 | wait_event_interruptible(eeprom.wait_q, !eeprom.busy); | ||
538 | /* bail out if we get interrupted */ | 523 | /* bail out if we get interrupted */ |
539 | if (signal_pending(current)) | 524 | if (mutex_lock_interruptible(&eeprom.lock)) |
540 | return -EINTR; | 525 | return -EINTR; |
541 | eeprom.busy++; | ||
542 | for(i = 0; (i < EEPROM_RETRIES) && (restart > 0); i++) | 526 | for(i = 0; (i < EEPROM_RETRIES) && (restart > 0); i++) |
543 | { | 527 | { |
544 | restart = 0; | 528 | restart = 0; |
545 | written = 0; | 529 | written = 0; |
546 | p = file->f_pos; | 530 | p = *off; |
547 | 531 | ||
548 | 532 | ||
549 | while( (written < count) && (p < eeprom.size)) | 533 | while( (written < count) && (p < eeprom.size)) |
@@ -556,8 +540,7 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count, | |||
556 | i2c_stop(); | 540 | i2c_stop(); |
557 | 541 | ||
558 | /* don't forget to wake them up */ | 542 | /* don't forget to wake them up */ |
559 | eeprom.busy--; | 543 | mutex_unlock(&eeprom.lock); |
560 | wake_up_interruptible(&eeprom.wait_q); | ||
561 | return -EFAULT; | 544 | return -EFAULT; |
562 | } | 545 | } |
563 | #ifdef EEPROM_ADAPTIVE_TIMING | 546 | #ifdef EEPROM_ADAPTIVE_TIMING |
@@ -669,12 +652,11 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count, | |||
669 | } /* while */ | 652 | } /* while */ |
670 | } /* for */ | 653 | } /* for */ |
671 | 654 | ||
672 | eeprom.busy--; | 655 | mutex_unlock(&eeprom.lock); |
673 | wake_up_interruptible(&eeprom.wait_q); | 656 | if (written == 0 && p >= eeprom.size){ |
674 | if (written == 0 && file->f_pos >= eeprom.size){ | ||
675 | return -ENOSPC; | 657 | return -ENOSPC; |
676 | } | 658 | } |
677 | file->f_pos += written; | 659 | *off = p; |
678 | return written; | 660 | return written; |
679 | } | 661 | } |
680 | 662 | ||
diff --git a/arch/cris/arch-v10/drivers/pcf8563.c b/arch/cris/arch-v10/drivers/pcf8563.c index 1e90c1a9c849..7dcb1f85f42b 100644 --- a/arch/cris/arch-v10/drivers/pcf8563.c +++ b/arch/cris/arch-v10/drivers/pcf8563.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
28 | #include <linux/bcd.h> | 28 | #include <linux/bcd.h> |
29 | #include <linux/mutex.h> | 29 | #include <linux/mutex.h> |
30 | #include <linux/smp_lock.h> | ||
30 | 31 | ||
31 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
32 | #include <asm/system.h> | 33 | #include <asm/system.h> |
@@ -53,7 +54,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */ | |||
53 | static const unsigned char days_in_month[] = | 54 | static const unsigned char days_in_month[] = |
54 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; | 55 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; |
55 | 56 | ||
56 | int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); | 57 | static long pcf8563_unlocked_ioctl(struct file *, unsigned int, unsigned long); |
57 | 58 | ||
58 | /* Cache VL bit value read at driver init since writing the RTC_SECOND | 59 | /* Cache VL bit value read at driver init since writing the RTC_SECOND |
59 | * register clears the VL status. | 60 | * register clears the VL status. |
@@ -62,7 +63,7 @@ static int voltage_low; | |||
62 | 63 | ||
63 | static const struct file_operations pcf8563_fops = { | 64 | static const struct file_operations pcf8563_fops = { |
64 | .owner = THIS_MODULE, | 65 | .owner = THIS_MODULE, |
65 | .ioctl = pcf8563_ioctl, | 66 | .unlocked_ioctl = pcf8563_unlocked_ioctl, |
66 | }; | 67 | }; |
67 | 68 | ||
68 | unsigned char | 69 | unsigned char |
@@ -212,8 +213,7 @@ pcf8563_exit(void) | |||
212 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because | 213 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because |
213 | * POSIX says so! | 214 | * POSIX says so! |
214 | */ | 215 | */ |
215 | int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | 216 | static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
216 | unsigned long arg) | ||
217 | { | 217 | { |
218 | /* Some sanity checks. */ | 218 | /* Some sanity checks. */ |
219 | if (_IOC_TYPE(cmd) != RTC_MAGIC) | 219 | if (_IOC_TYPE(cmd) != RTC_MAGIC) |
@@ -339,6 +339,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
339 | return 0; | 339 | return 0; |
340 | } | 340 | } |
341 | 341 | ||
342 | static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | ||
343 | { | ||
344 | int ret; | ||
345 | |||
346 | lock_kernel(); | ||
347 | return pcf8563_ioctl(filp, cmd, arg); | ||
348 | unlock_kernel(); | ||
349 | |||
350 | return ret; | ||
351 | } | ||
352 | |||
342 | static int __init pcf8563_register(void) | 353 | static int __init pcf8563_register(void) |
343 | { | 354 | { |
344 | if (pcf8563_init() < 0) { | 355 | if (pcf8563_init() < 0) { |
diff --git a/arch/cris/arch-v10/kernel/irq.c b/arch/cris/arch-v10/kernel/irq.c index 1a61efc13982..a0c0df8be9c8 100644 --- a/arch/cris/arch-v10/kernel/irq.c +++ b/arch/cris/arch-v10/kernel/irq.c | |||
@@ -17,8 +17,8 @@ | |||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | 19 | ||
20 | #define mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr)); | 20 | #define crisv10_mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr)); |
21 | #define unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr)); | 21 | #define crisv10_unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr)); |
22 | 22 | ||
23 | /* don't use set_int_vector, it bypasses the linux interrupt handlers. it is | 23 | /* don't use set_int_vector, it bypasses the linux interrupt handlers. it is |
24 | * global just so that the kernel gdb can use it. | 24 | * global just so that the kernel gdb can use it. |
@@ -116,12 +116,12 @@ static unsigned int startup_crisv10_irq(unsigned int irq) | |||
116 | 116 | ||
117 | static void enable_crisv10_irq(unsigned int irq) | 117 | static void enable_crisv10_irq(unsigned int irq) |
118 | { | 118 | { |
119 | unmask_irq(irq); | 119 | crisv10_unmask_irq(irq); |
120 | } | 120 | } |
121 | 121 | ||
122 | static void disable_crisv10_irq(unsigned int irq) | 122 | static void disable_crisv10_irq(unsigned int irq) |
123 | { | 123 | { |
124 | mask_irq(irq); | 124 | crisv10_mask_irq(irq); |
125 | } | 125 | } |
126 | 126 | ||
127 | static void ack_crisv10_irq(unsigned int irq) | 127 | static void ack_crisv10_irq(unsigned int irq) |
diff --git a/arch/cris/arch-v10/lib/dmacopy.c b/arch/cris/arch-v10/lib/dmacopy.c index e5fb44f505c5..49f5b8ca5b47 100644 --- a/arch/cris/arch-v10/lib/dmacopy.c +++ b/arch/cris/arch-v10/lib/dmacopy.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: dmacopy.c,v 1.1 2001/12/17 13:59:27 bjornw Exp $ | 1 | /* |
2 | * | ||
3 | * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax | 2 | * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax |
4 | */ | 3 | */ |
5 | 4 | ||
@@ -13,11 +12,11 @@ void *dma_memcpy(void *pdst, | |||
13 | unsigned int pn) | 12 | unsigned int pn) |
14 | { | 13 | { |
15 | static etrax_dma_descr indma, outdma; | 14 | static etrax_dma_descr indma, outdma; |
16 | 15 | ||
17 | D(printk("dma_memcpy %d bytes... ", pn)); | 16 | D(printk(KERN_DEBUG "dma_memcpy %d bytes... ", pn)); |
18 | 17 | ||
19 | #if 0 | 18 | #if 0 |
20 | *R_GEN_CONFIG = genconfig_shadow = | 19 | *R_GEN_CONFIG = genconfig_shadow = |
21 | (genconfig_shadow & ~0x3c0000) | | 20 | (genconfig_shadow & ~0x3c0000) | |
22 | IO_STATE(R_GEN_CONFIG, dma6, intdma7) | | 21 | IO_STATE(R_GEN_CONFIG, dma6, intdma7) | |
23 | IO_STATE(R_GEN_CONFIG, dma7, intdma6); | 22 | IO_STATE(R_GEN_CONFIG, dma7, intdma6); |
@@ -32,11 +31,11 @@ void *dma_memcpy(void *pdst, | |||
32 | *R_DMA_CH7_FIRST = &outdma; | 31 | *R_DMA_CH7_FIRST = &outdma; |
33 | *R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start); | 32 | *R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start); |
34 | *R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start); | 33 | *R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start); |
35 | |||
36 | while(*R_DMA_CH7_CMD == 1) /* wait for completion */ ; | ||
37 | 34 | ||
38 | D(printk("done\n")); | 35 | while (*R_DMA_CH7_CMD == 1) |
36 | /* wait for completion */; | ||
39 | 37 | ||
38 | D(printk(KERN_DEBUG "done\n")); | ||
40 | } | 39 | } |
41 | 40 | ||
42 | 41 | ||
diff --git a/arch/cris/arch-v10/lib/hw_settings.S b/arch/cris/arch-v10/lib/hw_settings.S index 56905aaa7b6e..c09f19f478a5 100644 --- a/arch/cris/arch-v10/lib/hw_settings.S +++ b/arch/cris/arch-v10/lib/hw_settings.S | |||
@@ -1,13 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: hw_settings.S,v 1.1 2001/12/17 13:59:27 bjornw Exp $ | ||
3 | * | ||
4 | * This table is used by some tools to extract hardware parameters. | 2 | * This table is used by some tools to extract hardware parameters. |
5 | * The table should be included in the kernel and the decompressor. | 3 | * The table should be included in the kernel and the decompressor. |
6 | * Don't forget to update the tools if you change this table. | 4 | * Don't forget to update the tools if you change this table. |
7 | * | 5 | * |
8 | * Copyright (C) 2001 Axis Communications AB | 6 | * Copyright (C) 2001 Axis Communications AB |
9 | * | 7 | * |
10 | * Authors: Mikael Starvik (starvik@axis.com) | 8 | * Authors: Mikael Starvik (starvik@axis.com) |
11 | */ | 9 | */ |
12 | 10 | ||
13 | #define PA_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PA_DIR << 8) | \ | 11 | #define PA_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PA_DIR << 8) | \ |
@@ -15,13 +13,13 @@ | |||
15 | #define PB_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG << 16) | \ | 13 | #define PB_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG << 16) | \ |
16 | (CONFIG_ETRAX_DEF_R_PORT_PB_DIR << 8) | \ | 14 | (CONFIG_ETRAX_DEF_R_PORT_PB_DIR << 8) | \ |
17 | (CONFIG_ETRAX_DEF_R_PORT_PB_DATA)) | 15 | (CONFIG_ETRAX_DEF_R_PORT_PB_DATA)) |
18 | 16 | ||
19 | .ascii "HW_PARAM_MAGIC" ; Magic number | 17 | .ascii "HW_PARAM_MAGIC" ; Magic number |
20 | .dword 0xc0004000 ; Kernel start address | 18 | .dword 0xc0004000 ; Kernel start address |
21 | 19 | ||
22 | ; Debug port | 20 | ; Debug port |
23 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 | 21 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 |
24 | .dword 0 | 22 | .dword 0 |
25 | #elif defined(CONFIG_ETRAX_DEBUG_PORT1) | 23 | #elif defined(CONFIG_ETRAX_DEBUG_PORT1) |
26 | .dword 1 | 24 | .dword 1 |
27 | #elif defined(CONFIG_ETRAX_DEBUG_PORT2) | 25 | #elif defined(CONFIG_ETRAX_DEBUG_PORT2) |
@@ -30,7 +28,7 @@ | |||
30 | .dword 3 | 28 | .dword 3 |
31 | #else | 29 | #else |
32 | .dword 4 ; No debug | 30 | .dword 4 ; No debug |
33 | #endif | 31 | #endif |
34 | 32 | ||
35 | ; SDRAM or EDO DRAM? | 33 | ; SDRAM or EDO DRAM? |
36 | #ifdef CONFIG_ETRAX_SDRAM | 34 | #ifdef CONFIG_ETRAX_SDRAM |
@@ -39,7 +37,7 @@ | |||
39 | .dword 0 | 37 | .dword 0 |
40 | #endif | 38 | #endif |
41 | 39 | ||
42 | ; Register values | 40 | ; Register values |
43 | .dword R_WAITSTATES | 41 | .dword R_WAITSTATES |
44 | .dword CONFIG_ETRAX_DEF_R_WAITSTATES | 42 | .dword CONFIG_ETRAX_DEF_R_WAITSTATES |
45 | .dword R_BUS_CONFIG | 43 | .dword R_BUS_CONFIG |
@@ -56,7 +54,7 @@ | |||
56 | .dword CONFIG_ETRAX_DEF_R_DRAM_TIMING | 54 | .dword CONFIG_ETRAX_DEF_R_DRAM_TIMING |
57 | #endif | 55 | #endif |
58 | .dword R_PORT_PA_SET | 56 | .dword R_PORT_PA_SET |
59 | .dword PA_SET_VALUE | 57 | .dword PA_SET_VALUE |
60 | .dword R_PORT_PB_SET | 58 | .dword R_PORT_PB_SET |
61 | .dword PB_SET_VALUE | 59 | .dword PB_SET_VALUE |
62 | .dword 0 ; No more register values | 60 | .dword 0 ; No more register values |
diff --git a/arch/cris/arch-v32/drivers/Kconfig b/arch/cris/arch-v32/drivers/Kconfig index b9e328e688be..a2dd740c5907 100644 --- a/arch/cris/arch-v32/drivers/Kconfig +++ b/arch/cris/arch-v32/drivers/Kconfig | |||
@@ -360,24 +360,10 @@ config ETRAX_SER4_DSR_BIT | |||
360 | string "Ser 4 DSR bit (empty = not used)" | 360 | string "Ser 4 DSR bit (empty = not used)" |
361 | depends on ETRAX_SERIAL_PORT4 | 361 | depends on ETRAX_SERIAL_PORT4 |
362 | 362 | ||
363 | config ETRAX_SER3_CD_BIT | 363 | config ETRAX_SER4_CD_BIT |
364 | string "Ser 4 CD bit (empty = not used)" | 364 | string "Ser 4 CD bit (empty = not used)" |
365 | depends on ETRAX_SERIAL_PORT4 | 365 | depends on ETRAX_SERIAL_PORT4 |
366 | 366 | ||
367 | config ETRAX_RS485 | ||
368 | bool "RS-485 support" | ||
369 | depends on ETRAXFS_SERIAL | ||
370 | help | ||
371 | Enables support for RS-485 serial communication. For a primer on | ||
372 | RS-485, see <http://www.hw.cz/english/docs/rs485/rs485.html>. | ||
373 | |||
374 | config ETRAX_RS485_DISABLE_RECEIVER | ||
375 | bool "Disable serial receiver" | ||
376 | depends on ETRAX_RS485 | ||
377 | help | ||
378 | It is necessary to disable the serial receiver to avoid serial | ||
379 | loopback. Not all products are able to do this in software only. | ||
380 | |||
381 | config ETRAX_SYNCHRONOUS_SERIAL | 367 | config ETRAX_SYNCHRONOUS_SERIAL |
382 | bool "Synchronous serial-port support" | 368 | bool "Synchronous serial-port support" |
383 | depends on ETRAX_ARCH_V32 | 369 | depends on ETRAX_ARCH_V32 |
diff --git a/arch/cris/arch-v32/drivers/i2c.c b/arch/cris/arch-v32/drivers/i2c.c index 506826399ae7..2fd6a740d895 100644 --- a/arch/cris/arch-v32/drivers/i2c.c +++ b/arch/cris/arch-v32/drivers/i2c.c | |||
@@ -649,10 +649,10 @@ i2c_release(struct inode *inode, struct file *filp) | |||
649 | /* Main device API. ioctl's to write or read to/from i2c registers. | 649 | /* Main device API. ioctl's to write or read to/from i2c registers. |
650 | */ | 650 | */ |
651 | 651 | ||
652 | static int | 652 | static long |
653 | i2c_ioctl(struct inode *inode, struct file *file, | 653 | i2c_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
654 | unsigned int cmd, unsigned long arg) | ||
655 | { | 654 | { |
655 | int ret; | ||
656 | if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) { | 656 | if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) { |
657 | return -ENOTTY; | 657 | return -ENOTTY; |
658 | } | 658 | } |
@@ -665,9 +665,13 @@ i2c_ioctl(struct inode *inode, struct file *file, | |||
665 | I2C_ARGREG(arg), | 665 | I2C_ARGREG(arg), |
666 | I2C_ARGVALUE(arg))); | 666 | I2C_ARGVALUE(arg))); |
667 | 667 | ||
668 | return i2c_writereg(I2C_ARGSLAVE(arg), | 668 | lock_kernel(); |
669 | ret = i2c_writereg(I2C_ARGSLAVE(arg), | ||
669 | I2C_ARGREG(arg), | 670 | I2C_ARGREG(arg), |
670 | I2C_ARGVALUE(arg)); | 671 | I2C_ARGVALUE(arg)); |
672 | unlock_kernel(); | ||
673 | return ret; | ||
674 | |||
671 | case I2C_READREG: | 675 | case I2C_READREG: |
672 | { | 676 | { |
673 | unsigned char val; | 677 | unsigned char val; |
@@ -675,7 +679,9 @@ i2c_ioctl(struct inode *inode, struct file *file, | |||
675 | D(printk("i2cr %d %d ", | 679 | D(printk("i2cr %d %d ", |
676 | I2C_ARGSLAVE(arg), | 680 | I2C_ARGSLAVE(arg), |
677 | I2C_ARGREG(arg))); | 681 | I2C_ARGREG(arg))); |
682 | lock_kernel(); | ||
678 | val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg)); | 683 | val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg)); |
684 | unlock_kernel(); | ||
679 | D(printk("= %d\n", val)); | 685 | D(printk("= %d\n", val)); |
680 | return val; | 686 | return val; |
681 | } | 687 | } |
@@ -688,10 +694,10 @@ i2c_ioctl(struct inode *inode, struct file *file, | |||
688 | } | 694 | } |
689 | 695 | ||
690 | static const struct file_operations i2c_fops = { | 696 | static const struct file_operations i2c_fops = { |
691 | .owner = THIS_MODULE, | 697 | .owner = THIS_MODULE, |
692 | .ioctl = i2c_ioctl, | 698 | .unlocked_ioctl = i2c_ioctl, |
693 | .open = i2c_open, | 699 | .open = i2c_open, |
694 | .release = i2c_release, | 700 | .release = i2c_release, |
695 | }; | 701 | }; |
696 | 702 | ||
697 | static int __init i2c_init(void) | 703 | static int __init i2c_init(void) |
diff --git a/arch/cris/arch-v32/drivers/pcf8563.c b/arch/cris/arch-v32/drivers/pcf8563.c index f4478506e52c..bef6eb53b153 100644 --- a/arch/cris/arch-v32/drivers/pcf8563.c +++ b/arch/cris/arch-v32/drivers/pcf8563.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/fs.h> | 25 | #include <linux/fs.h> |
26 | #include <linux/ioctl.h> | 26 | #include <linux/ioctl.h> |
27 | #include <linux/smp_lock.h> | ||
27 | #include <linux/delay.h> | 28 | #include <linux/delay.h> |
28 | #include <linux/bcd.h> | 29 | #include <linux/bcd.h> |
29 | #include <linux/mutex.h> | 30 | #include <linux/mutex.h> |
@@ -49,7 +50,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */ | |||
49 | static const unsigned char days_in_month[] = | 50 | static const unsigned char days_in_month[] = |
50 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; | 51 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; |
51 | 52 | ||
52 | int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); | 53 | static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); |
53 | 54 | ||
54 | /* Cache VL bit value read at driver init since writing the RTC_SECOND | 55 | /* Cache VL bit value read at driver init since writing the RTC_SECOND |
55 | * register clears the VL status. | 56 | * register clears the VL status. |
@@ -57,8 +58,8 @@ int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); | |||
57 | static int voltage_low; | 58 | static int voltage_low; |
58 | 59 | ||
59 | static const struct file_operations pcf8563_fops = { | 60 | static const struct file_operations pcf8563_fops = { |
60 | .owner = THIS_MODULE, | 61 | .owner = THIS_MODULE, |
61 | .ioctl = pcf8563_ioctl | 62 | .unlocked_ioctl = pcf8563_unlocked_ioctl, |
62 | }; | 63 | }; |
63 | 64 | ||
64 | unsigned char | 65 | unsigned char |
@@ -208,8 +209,7 @@ pcf8563_exit(void) | |||
208 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because | 209 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because |
209 | * POSIX says so! | 210 | * POSIX says so! |
210 | */ | 211 | */ |
211 | int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | 212 | static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
212 | unsigned long arg) | ||
213 | { | 213 | { |
214 | /* Some sanity checks. */ | 214 | /* Some sanity checks. */ |
215 | if (_IOC_TYPE(cmd) != RTC_MAGIC) | 215 | if (_IOC_TYPE(cmd) != RTC_MAGIC) |
@@ -335,6 +335,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
335 | return 0; | 335 | return 0; |
336 | } | 336 | } |
337 | 337 | ||
338 | static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | ||
339 | { | ||
340 | int ret; | ||
341 | |||
342 | lock_kernel(); | ||
343 | return pcf8563_ioctl(filp, cmd, arg); | ||
344 | unlock_kernel(); | ||
345 | |||
346 | return ret; | ||
347 | } | ||
348 | |||
338 | static int __init pcf8563_register(void) | 349 | static int __init pcf8563_register(void) |
339 | { | 350 | { |
340 | if (pcf8563_init() < 0) { | 351 | if (pcf8563_init() < 0) { |
diff --git a/arch/cris/arch-v32/kernel/crisksyms.c b/arch/cris/arch-v32/kernel/crisksyms.c index 64933e2c0f5b..bde8d1a10cad 100644 --- a/arch/cris/arch-v32/kernel/crisksyms.c +++ b/arch/cris/arch-v32/kernel/crisksyms.c | |||
@@ -24,5 +24,5 @@ EXPORT_SYMBOL(crisv32_io_get_name); | |||
24 | EXPORT_SYMBOL(crisv32_io_get); | 24 | EXPORT_SYMBOL(crisv32_io_get); |
25 | 25 | ||
26 | /* Functions masking/unmasking interrupts */ | 26 | /* Functions masking/unmasking interrupts */ |
27 | EXPORT_SYMBOL(mask_irq); | 27 | EXPORT_SYMBOL(crisv32_mask_irq); |
28 | EXPORT_SYMBOL(unmask_irq); | 28 | EXPORT_SYMBOL(crisv32_unmask_irq); |
diff --git a/arch/cris/arch-v32/kernel/irq.c b/arch/cris/arch-v32/kernel/irq.c index b6241198fb98..0b1febe44aa3 100644 --- a/arch/cris/arch-v32/kernel/irq.c +++ b/arch/cris/arch-v32/kernel/irq.c | |||
@@ -280,8 +280,7 @@ out: | |||
280 | return cpu; | 280 | return cpu; |
281 | } | 281 | } |
282 | 282 | ||
283 | void | 283 | void crisv32_mask_irq(int irq) |
284 | mask_irq(int irq) | ||
285 | { | 284 | { |
286 | int cpu; | 285 | int cpu; |
287 | 286 | ||
@@ -289,8 +288,7 @@ mask_irq(int irq) | |||
289 | block_irq(irq, cpu); | 288 | block_irq(irq, cpu); |
290 | } | 289 | } |
291 | 290 | ||
292 | void | 291 | void crisv32_unmask_irq(int irq) |
293 | unmask_irq(int irq) | ||
294 | { | 292 | { |
295 | unblock_irq(irq, irq_cpu(irq)); | 293 | unblock_irq(irq, irq_cpu(irq)); |
296 | } | 294 | } |
@@ -298,23 +296,23 @@ unmask_irq(int irq) | |||
298 | 296 | ||
299 | static unsigned int startup_crisv32_irq(unsigned int irq) | 297 | static unsigned int startup_crisv32_irq(unsigned int irq) |
300 | { | 298 | { |
301 | unmask_irq(irq); | 299 | crisv32_unmask_irq(irq); |
302 | return 0; | 300 | return 0; |
303 | } | 301 | } |
304 | 302 | ||
305 | static void shutdown_crisv32_irq(unsigned int irq) | 303 | static void shutdown_crisv32_irq(unsigned int irq) |
306 | { | 304 | { |
307 | mask_irq(irq); | 305 | crisv32_mask_irq(irq); |
308 | } | 306 | } |
309 | 307 | ||
310 | static void enable_crisv32_irq(unsigned int irq) | 308 | static void enable_crisv32_irq(unsigned int irq) |
311 | { | 309 | { |
312 | unmask_irq(irq); | 310 | crisv32_unmask_irq(irq); |
313 | } | 311 | } |
314 | 312 | ||
315 | static void disable_crisv32_irq(unsigned int irq) | 313 | static void disable_crisv32_irq(unsigned int irq) |
316 | { | 314 | { |
317 | mask_irq(irq); | 315 | crisv32_mask_irq(irq); |
318 | } | 316 | } |
319 | 317 | ||
320 | static void ack_crisv32_irq(unsigned int irq) | 318 | static void ack_crisv32_irq(unsigned int irq) |
diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c index 058adddf4e4b..84fed3b4b079 100644 --- a/arch/cris/arch-v32/kernel/smp.c +++ b/arch/cris/arch-v32/kernel/smp.c | |||
@@ -168,8 +168,8 @@ void __init smp_callin(void) | |||
168 | 168 | ||
169 | /* Enable IRQ and idle */ | 169 | /* Enable IRQ and idle */ |
170 | REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask); | 170 | REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask); |
171 | unmask_irq(IPI_INTR_VECT); | 171 | crisv32_unmask_irq(IPI_INTR_VECT); |
172 | unmask_irq(TIMER0_INTR_VECT); | 172 | crisv32_unmask_irq(TIMER0_INTR_VECT); |
173 | preempt_disable(); | 173 | preempt_disable(); |
174 | notify_cpu_starting(cpu); | 174 | notify_cpu_starting(cpu); |
175 | local_irq_enable(); | 175 | local_irq_enable(); |
diff --git a/arch/cris/include/arch-v10/arch/irq.h b/arch/cris/include/arch-v10/arch/irq.h index 6248004eca1c..7d345947b3ee 100644 --- a/arch/cris/include/arch-v10/arch/irq.h +++ b/arch/cris/include/arch-v10/arch/irq.h | |||
@@ -93,15 +93,16 @@ void set_break_vector(int n, irqvectptr addr); | |||
93 | "push $r10\n\t" /* push orig_r10 */ \ | 93 | "push $r10\n\t" /* push orig_r10 */ \ |
94 | "clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */ | 94 | "clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */ |
95 | 95 | ||
96 | /* BLOCK_IRQ and UNBLOCK_IRQ do the same as mask_irq and unmask_irq */ | 96 | /* BLOCK_IRQ and UNBLOCK_IRQ do the same as |
97 | * crisv10_mask_irq and crisv10_unmask_irq */ | ||
97 | 98 | ||
98 | #define BLOCK_IRQ(mask,nr) \ | 99 | #define BLOCK_IRQ(mask,nr) \ |
99 | "move.d " #mask ",$r0\n\t" \ | 100 | "move.d " #mask ",$r0\n\t" \ |
100 | "move.d $r0,[0xb00000d8]\n\t" | 101 | "move.d $r0,[0xb00000d8]\n\t" |
101 | 102 | ||
102 | #define UNBLOCK_IRQ(mask) \ | 103 | #define UNBLOCK_IRQ(mask) \ |
103 | "move.d " #mask ",$r0\n\t" \ | 104 | "move.d " #mask ",$r0\n\t" \ |
104 | "move.d $r0,[0xb00000dc]\n\t" | 105 | "move.d $r0,[0xb00000dc]\n\t" |
105 | 106 | ||
106 | #define IRQ_NAME2(nr) nr##_interrupt(void) | 107 | #define IRQ_NAME2(nr) nr##_interrupt(void) |
107 | #define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr) | 108 | #define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr) |
diff --git a/arch/cris/include/arch-v32/arch/irq.h b/arch/cris/include/arch-v32/arch/irq.h index 9e4c9fbdfddf..b31e9984f849 100644 --- a/arch/cris/include/arch-v32/arch/irq.h +++ b/arch/cris/include/arch-v32/arch/irq.h | |||
@@ -23,8 +23,8 @@ struct etrax_interrupt_vector { | |||
23 | 23 | ||
24 | extern struct etrax_interrupt_vector *etrax_irv; /* head.S */ | 24 | extern struct etrax_interrupt_vector *etrax_irv; /* head.S */ |
25 | 25 | ||
26 | void mask_irq(int irq); | 26 | void crisv32_mask_irq(int irq); |
27 | void unmask_irq(int irq); | 27 | void crisv32_unmask_irq(int irq); |
28 | 28 | ||
29 | void set_exception_vector(int n, irqvectptr addr); | 29 | void set_exception_vector(int n, irqvectptr addr); |
30 | 30 | ||
diff --git a/arch/cris/include/asm/param.h b/arch/cris/include/asm/param.h index 0e47994e40be..484fcf8667c0 100644 --- a/arch/cris/include/asm/param.h +++ b/arch/cris/include/asm/param.h | |||
@@ -2,22 +2,9 @@ | |||
2 | #define _ASMCRIS_PARAM_H | 2 | #define _ASMCRIS_PARAM_H |
3 | 3 | ||
4 | /* Currently we assume that HZ=100 is good for CRIS. */ | 4 | /* Currently we assume that HZ=100 is good for CRIS. */ |
5 | #ifdef __KERNEL__ | ||
6 | # define HZ CONFIG_HZ /* Internal kernel timer frequency */ | ||
7 | # define USER_HZ 100 /* .. some user interfaces are in "ticks" */ | ||
8 | # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ | ||
9 | #endif | ||
10 | |||
11 | #ifndef HZ | ||
12 | #define HZ 100 | ||
13 | #endif | ||
14 | 5 | ||
15 | #define EXEC_PAGESIZE 8192 | 6 | #define EXEC_PAGESIZE 8192 |
16 | 7 | ||
17 | #ifndef NOGROUP | 8 | #include <asm-generic/param.h> |
18 | #define NOGROUP (-1) | ||
19 | #endif | ||
20 | |||
21 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | ||
22 | 9 | ||
23 | #endif | 10 | #endif /* _ASMCRIS_PARAM_H */ |
diff --git a/arch/cris/include/asm/scatterlist.h b/arch/cris/include/asm/scatterlist.h index faff53ad1f96..249a7842ff5f 100644 --- a/arch/cris/include/asm/scatterlist.h +++ b/arch/cris/include/asm/scatterlist.h | |||
@@ -1,22 +1,7 @@ | |||
1 | #ifndef __ASM_CRIS_SCATTERLIST_H | 1 | #ifndef __ASM_CRIS_SCATTERLIST_H |
2 | #define __ASM_CRIS_SCATTERLIST_H | 2 | #define __ASM_CRIS_SCATTERLIST_H |
3 | 3 | ||
4 | struct scatterlist { | 4 | #include <asm-generic/scatterlist.h> |
5 | #ifdef CONFIG_DEBUG_SG | ||
6 | unsigned long sg_magic; | ||
7 | #endif | ||
8 | char * address; /* Location data is to be transferred to */ | ||
9 | unsigned int length; | ||
10 | |||
11 | /* The following is i386 highmem junk - not used by us */ | ||
12 | unsigned long page_link; | ||
13 | unsigned int offset;/* for highmem, page offset */ | ||
14 | |||
15 | }; | ||
16 | |||
17 | #define sg_dma_address(sg) ((sg)->address) | ||
18 | #define sg_dma_len(sg) ((sg)->length) | ||
19 | /* i386 junk */ | ||
20 | 5 | ||
21 | #define ISA_DMA_THRESHOLD (0x1fffffff) | 6 | #define ISA_DMA_THRESHOLD (0x1fffffff) |
22 | 7 | ||