diff options
author | Kars de Jong <jongk@linux-m68k.org> | 2007-06-17 08:47:05 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2007-06-17 17:15:56 -0400 |
commit | 632731345bfb87fd1f4dc509928cc4a7efc12a89 (patch) | |
tree | aa656433bc8bd5b48581d15b3e7614bdcafc8ff0 | |
parent | cc78d30af0823f33069fb4813c47571d4e0675a2 (diff) |
[SCSI] 53c700: m68k support for the 53c700 SCSI core
Add m68k support to the 53c700 SCSI driver
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r-- | drivers/scsi/53c700.c | 20 | ||||
-rw-r--r-- | drivers/scsi/53c700.h | 5 | ||||
-rw-r--r-- | drivers/scsi/Kconfig | 13 |
3 files changed, 20 insertions, 18 deletions
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c index 405d9d6f965..92dd7a6b524 100644 --- a/drivers/scsi/53c700.c +++ b/drivers/scsi/53c700.c | |||
@@ -653,7 +653,6 @@ NCR_700_chip_setup(struct Scsi_Host *host) | |||
653 | { | 653 | { |
654 | struct NCR_700_Host_Parameters *hostdata = | 654 | struct NCR_700_Host_Parameters *hostdata = |
655 | (struct NCR_700_Host_Parameters *)host->hostdata[0]; | 655 | (struct NCR_700_Host_Parameters *)host->hostdata[0]; |
656 | __u32 dcntl_extra = 0; | ||
657 | __u8 min_period; | 656 | __u8 min_period; |
658 | __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP); | 657 | __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP); |
659 | 658 | ||
@@ -678,13 +677,14 @@ NCR_700_chip_setup(struct Scsi_Host *host) | |||
678 | burst_disable = BURST_DISABLE; | 677 | burst_disable = BURST_DISABLE; |
679 | break; | 678 | break; |
680 | } | 679 | } |
681 | dcntl_extra = COMPAT_700_MODE; | 680 | hostdata->dcntl_extra |= COMPAT_700_MODE; |
682 | 681 | ||
683 | NCR_700_writeb(dcntl_extra, host, DCNTL_REG); | 682 | NCR_700_writeb(hostdata->dcntl_extra, host, DCNTL_REG); |
684 | NCR_700_writeb(burst_length | hostdata->dmode_extra, | 683 | NCR_700_writeb(burst_length | hostdata->dmode_extra, |
685 | host, DMODE_710_REG); | 684 | host, DMODE_710_REG); |
686 | NCR_700_writeb(burst_disable | (hostdata->differential ? | 685 | NCR_700_writeb(burst_disable | hostdata->ctest7_extra | |
687 | DIFF : 0), host, CTEST7_REG); | 686 | (hostdata->differential ? DIFF : 0), |
687 | host, CTEST7_REG); | ||
688 | NCR_700_writeb(BTB_TIMER_DISABLE, host, CTEST0_REG); | 688 | NCR_700_writeb(BTB_TIMER_DISABLE, host, CTEST0_REG); |
689 | NCR_700_writeb(FULL_ARBITRATION | ENABLE_PARITY | PARITY | 689 | NCR_700_writeb(FULL_ARBITRATION | ENABLE_PARITY | PARITY |
690 | | AUTO_ATN, host, SCNTL0_REG); | 690 | | AUTO_ATN, host, SCNTL0_REG); |
@@ -719,13 +719,13 @@ NCR_700_chip_setup(struct Scsi_Host *host) | |||
719 | * of spec: sync divider 2, async divider 3 */ | 719 | * of spec: sync divider 2, async divider 3 */ |
720 | DEBUG(("53c700: sync 2 async 3\n")); | 720 | DEBUG(("53c700: sync 2 async 3\n")); |
721 | NCR_700_writeb(SYNC_DIV_2_0, host, SBCL_REG); | 721 | NCR_700_writeb(SYNC_DIV_2_0, host, SBCL_REG); |
722 | NCR_700_writeb(ASYNC_DIV_3_0 | dcntl_extra, host, DCNTL_REG); | 722 | NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG); |
723 | hostdata->sync_clock = hostdata->clock/2; | 723 | hostdata->sync_clock = hostdata->clock/2; |
724 | } else if(hostdata->clock > 50 && hostdata->clock <= 75) { | 724 | } else if(hostdata->clock > 50 && hostdata->clock <= 75) { |
725 | /* sync divider 1.5, async divider 3 */ | 725 | /* sync divider 1.5, async divider 3 */ |
726 | DEBUG(("53c700: sync 1.5 async 3\n")); | 726 | DEBUG(("53c700: sync 1.5 async 3\n")); |
727 | NCR_700_writeb(SYNC_DIV_1_5, host, SBCL_REG); | 727 | NCR_700_writeb(SYNC_DIV_1_5, host, SBCL_REG); |
728 | NCR_700_writeb(ASYNC_DIV_3_0 | dcntl_extra, host, DCNTL_REG); | 728 | NCR_700_writeb(ASYNC_DIV_3_0 | hostdata->dcntl_extra, host, DCNTL_REG); |
729 | hostdata->sync_clock = hostdata->clock*2; | 729 | hostdata->sync_clock = hostdata->clock*2; |
730 | hostdata->sync_clock /= 3; | 730 | hostdata->sync_clock /= 3; |
731 | 731 | ||
@@ -733,18 +733,18 @@ NCR_700_chip_setup(struct Scsi_Host *host) | |||
733 | /* sync divider 1, async divider 2 */ | 733 | /* sync divider 1, async divider 2 */ |
734 | DEBUG(("53c700: sync 1 async 2\n")); | 734 | DEBUG(("53c700: sync 1 async 2\n")); |
735 | NCR_700_writeb(SYNC_DIV_1_0, host, SBCL_REG); | 735 | NCR_700_writeb(SYNC_DIV_1_0, host, SBCL_REG); |
736 | NCR_700_writeb(ASYNC_DIV_2_0 | dcntl_extra, host, DCNTL_REG); | 736 | NCR_700_writeb(ASYNC_DIV_2_0 | hostdata->dcntl_extra, host, DCNTL_REG); |
737 | hostdata->sync_clock = hostdata->clock; | 737 | hostdata->sync_clock = hostdata->clock; |
738 | } else if(hostdata->clock > 25 && hostdata->clock <=37) { | 738 | } else if(hostdata->clock > 25 && hostdata->clock <=37) { |
739 | /* sync divider 1, async divider 1.5 */ | 739 | /* sync divider 1, async divider 1.5 */ |
740 | DEBUG(("53c700: sync 1 async 1.5\n")); | 740 | DEBUG(("53c700: sync 1 async 1.5\n")); |
741 | NCR_700_writeb(SYNC_DIV_1_0, host, SBCL_REG); | 741 | NCR_700_writeb(SYNC_DIV_1_0, host, SBCL_REG); |
742 | NCR_700_writeb(ASYNC_DIV_1_5 | dcntl_extra, host, DCNTL_REG); | 742 | NCR_700_writeb(ASYNC_DIV_1_5 | hostdata->dcntl_extra, host, DCNTL_REG); |
743 | hostdata->sync_clock = hostdata->clock; | 743 | hostdata->sync_clock = hostdata->clock; |
744 | } else { | 744 | } else { |
745 | DEBUG(("53c700: sync 1 async 1\n")); | 745 | DEBUG(("53c700: sync 1 async 1\n")); |
746 | NCR_700_writeb(SYNC_DIV_1_0, host, SBCL_REG); | 746 | NCR_700_writeb(SYNC_DIV_1_0, host, SBCL_REG); |
747 | NCR_700_writeb(ASYNC_DIV_1_0 | dcntl_extra, host, DCNTL_REG); | 747 | NCR_700_writeb(ASYNC_DIV_1_0 | hostdata->dcntl_extra, host, DCNTL_REG); |
748 | /* sync divider 1, async divider 1 */ | 748 | /* sync divider 1, async divider 1 */ |
749 | hostdata->sync_clock = hostdata->clock; | 749 | hostdata->sync_clock = hostdata->clock; |
750 | } | 750 | } |
diff --git a/drivers/scsi/53c700.h b/drivers/scsi/53c700.h index 841e1bb27d5..e06bdfeab42 100644 --- a/drivers/scsi/53c700.h +++ b/drivers/scsi/53c700.h | |||
@@ -177,6 +177,7 @@ struct NCR_700_command_slot { | |||
177 | __u8 state; | 177 | __u8 state; |
178 | #define NCR_700_FLAG_AUTOSENSE 0x01 | 178 | #define NCR_700_FLAG_AUTOSENSE 0x01 |
179 | __u8 flags; | 179 | __u8 flags; |
180 | __u8 pad1[2]; /* Needed for m68k where min alignment is 2 bytes */ | ||
180 | int tag; | 181 | int tag; |
181 | __u32 resume_offset; | 182 | __u32 resume_offset; |
182 | struct scsi_cmnd *cmnd; | 183 | struct scsi_cmnd *cmnd; |
@@ -196,6 +197,8 @@ struct NCR_700_Host_Parameters { | |||
196 | void __iomem *base; /* the base for the port (copied to host) */ | 197 | void __iomem *base; /* the base for the port (copied to host) */ |
197 | struct device *dev; | 198 | struct device *dev; |
198 | __u32 dmode_extra; /* adjustable bus settings */ | 199 | __u32 dmode_extra; /* adjustable bus settings */ |
200 | __u32 dcntl_extra; /* adjustable bus settings */ | ||
201 | __u32 ctest7_extra; /* adjustable bus settings */ | ||
199 | __u32 differential:1; /* if we are differential */ | 202 | __u32 differential:1; /* if we are differential */ |
200 | #ifdef CONFIG_53C700_LE_ON_BE | 203 | #ifdef CONFIG_53C700_LE_ON_BE |
201 | /* This option is for HP only. Set it if your chip is wired for | 204 | /* This option is for HP only. Set it if your chip is wired for |
@@ -352,6 +355,7 @@ struct NCR_700_Host_Parameters { | |||
352 | #define SEL_TIMEOUT_DISABLE 0x10 /* 710 only */ | 355 | #define SEL_TIMEOUT_DISABLE 0x10 /* 710 only */ |
353 | #define DFP 0x08 | 356 | #define DFP 0x08 |
354 | #define EVP 0x04 | 357 | #define EVP 0x04 |
358 | #define CTEST7_TT1 0x02 | ||
355 | #define DIFF 0x01 | 359 | #define DIFF 0x01 |
356 | #define CTEST6_REG 0x1A | 360 | #define CTEST6_REG 0x1A |
357 | #define TEMP_REG 0x1C | 361 | #define TEMP_REG 0x1C |
@@ -385,6 +389,7 @@ struct NCR_700_Host_Parameters { | |||
385 | #define SOFTWARE_RESET 0x01 | 389 | #define SOFTWARE_RESET 0x01 |
386 | #define COMPAT_700_MODE 0x01 | 390 | #define COMPAT_700_MODE 0x01 |
387 | #define SCRPTS_16BITS 0x20 | 391 | #define SCRPTS_16BITS 0x20 |
392 | #define EA_710 0x20 | ||
388 | #define ASYNC_DIV_2_0 0x00 | 393 | #define ASYNC_DIV_2_0 0x00 |
389 | #define ASYNC_DIV_1_5 0x40 | 394 | #define ASYNC_DIV_1_5 0x40 |
390 | #define ASYNC_DIV_1_0 0x80 | 395 | #define ASYNC_DIV_1_0 0x80 |
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index aac9cd9a172..da5e888c49d 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig | |||
@@ -1006,6 +1006,11 @@ config SCSI_STEX | |||
1006 | To compile this driver as a module, choose M here: the | 1006 | To compile this driver as a module, choose M here: the |
1007 | module will be called stex. | 1007 | module will be called stex. |
1008 | 1008 | ||
1009 | config 53C700_BE_BUS | ||
1010 | bool | ||
1011 | depends on M68K | ||
1012 | default y | ||
1013 | |||
1009 | config SCSI_SYM53C8XX_2 | 1014 | config SCSI_SYM53C8XX_2 |
1010 | tristate "SYM53C8XX Version 2 SCSI support" | 1015 | tristate "SYM53C8XX Version 2 SCSI support" |
1011 | depends on PCI && SCSI | 1016 | depends on PCI && SCSI |
@@ -1727,14 +1732,6 @@ config BVME6000_SCSI | |||
1727 | SCSI controller chip. Almost everyone using one of these boards | 1732 | SCSI controller chip. Almost everyone using one of these boards |
1728 | will want to say Y to this question. | 1733 | will want to say Y to this question. |
1729 | 1734 | ||
1730 | config SCSI_NCR53C7xx_FAST | ||
1731 | bool "allow FAST-SCSI [10MHz]" | ||
1732 | depends on SCSI_AMIGA7XX || MVME16x_SCSI || BVME6000_SCSI | ||
1733 | help | ||
1734 | This will enable 10MHz FAST-SCSI transfers with your host | ||
1735 | adapter. Some systems have problems with that speed, so it's safest | ||
1736 | to say N here. | ||
1737 | |||
1738 | config SUN3_SCSI | 1735 | config SUN3_SCSI |
1739 | tristate "Sun3 NCR5380 SCSI" | 1736 | tristate "Sun3 NCR5380 SCSI" |
1740 | depends on SUN3 && SCSI | 1737 | depends on SUN3 && SCSI |