atari_NCR5380: Remove RESET_BOOT, CONFIG_ATARI_SCSI_TOSHIBA_DELAY and CONFIG_ATARI_SCSI_RESET_BOOT
The atari_NCR5380.c core driver now takes care of bus reset upon driver initialization if required (same as NCR5380.c). Move the Toshiba CD-ROM support into the core driver, enabled with a host flag, so that all NCR5380 drivers can make use of it. Drop the RESET_BOOT macros and the ATARI_SCSI_RESET_BOOT and ATARI_SCSI_TOSHIBA_DELAY Kconfig symbols, which are now redundant. Remove the atari_scsi_reset_boot(), mac_scsi_reset_boot() and sun3_scsi_reset_boot() routines. None of this duplicated code is needed now that all drivers can use NCR5380_maybe_reset_bus(). This brings atari_scsi, mac_scsi and sun3_scsi into line with all of the other NCR5380 drivers. The bus reset may raise an interrupt. That would be new behaviour for atari_scsi only when CONFIG_ATARI_SCSI_RESET_BOOT=n. The ST DMA interrupt is not assigned to atari_scsi at this stage, so CONFIG_ATARI_SCSI_RESET_BOOT=y may well be problematic already. Regardless, do_reset() now raises and clears the interrupt within local_irq_save/restore which should avoid problems. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Reviewed-by: Hannes Reinecke <hare@suse.com> Tested-by: Ondrej Zary <linux@rainbow-software.org> Tested-by: Michael Schmitz <schmitzmic@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Martin K. Petersen

vecāks
636b1ec857
revīzija
9c3f0e2b52
@@ -164,15 +164,6 @@ static inline unsigned long SCSI_DMA_GETADR(void)
|
||||
#define HOSTDATA_DMALEN (((struct NCR5380_hostdata *) \
|
||||
(atari_scsi_host->hostdata))->dma_len)
|
||||
|
||||
/* Time (in jiffies) to wait after a reset; the SCSI standard calls for 250ms,
|
||||
* we usually do 0.5s to be on the safe side. But Toshiba CD-ROMs once more
|
||||
* need ten times the standard value... */
|
||||
#ifndef CONFIG_ATARI_SCSI_TOSHIBA_DELAY
|
||||
#define AFTER_RESET_DELAY (HZ/2)
|
||||
#else
|
||||
#define AFTER_RESET_DELAY (5*HZ/2)
|
||||
#endif
|
||||
|
||||
#ifdef REAL_DMA
|
||||
static void atari_scsi_fetch_restbytes(void);
|
||||
#endif
|
||||
@@ -208,12 +199,12 @@ static int setup_cmd_per_lun = -1;
|
||||
module_param(setup_cmd_per_lun, int, 0);
|
||||
static int setup_sg_tablesize = -1;
|
||||
module_param(setup_sg_tablesize, int, 0);
|
||||
#ifdef SUPPORT_TAGS
|
||||
static int setup_use_tagged_queuing = -1;
|
||||
module_param(setup_use_tagged_queuing, int, 0);
|
||||
#endif
|
||||
static int setup_hostid = -1;
|
||||
module_param(setup_hostid, int, 0);
|
||||
static int setup_toshiba_delay = -1;
|
||||
module_param(setup_toshiba_delay, int, 0);
|
||||
|
||||
|
||||
#if defined(REAL_DMA)
|
||||
@@ -488,7 +479,7 @@ static int __init atari_scsi_setup(char *str)
|
||||
* Defaults depend on TT or Falcon, determined at run time.
|
||||
* Negative values mean don't change.
|
||||
*/
|
||||
int ints[6];
|
||||
int ints[8];
|
||||
|
||||
get_options(str, ARRAY_SIZE(ints), ints);
|
||||
|
||||
@@ -504,10 +495,11 @@ static int __init atari_scsi_setup(char *str)
|
||||
setup_sg_tablesize = ints[3];
|
||||
if (ints[0] >= 4)
|
||||
setup_hostid = ints[4];
|
||||
#ifdef SUPPORT_TAGS
|
||||
if (ints[0] >= 5)
|
||||
setup_use_tagged_queuing = ints[5];
|
||||
#endif
|
||||
/* ints[6] (use_pdma) is ignored */
|
||||
if (ints[0] >= 7)
|
||||
setup_toshiba_delay = ints[7];
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -516,38 +508,6 @@ __setup("atascsi=", atari_scsi_setup);
|
||||
#endif /* !MODULE */
|
||||
|
||||
|
||||
#ifdef CONFIG_ATARI_SCSI_RESET_BOOT
|
||||
static void __init atari_scsi_reset_boot(void)
|
||||
{
|
||||
unsigned long end;
|
||||
|
||||
/*
|
||||
* Do a SCSI reset to clean up the bus during initialization. No messing
|
||||
* with the queues, interrupts, or locks necessary here.
|
||||
*/
|
||||
|
||||
printk("Atari SCSI: resetting the SCSI bus...");
|
||||
|
||||
/* get in phase */
|
||||
NCR5380_write(TARGET_COMMAND_REG,
|
||||
PHASE_SR_TO_TCR(NCR5380_read(STATUS_REG)));
|
||||
|
||||
/* assert RST */
|
||||
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST);
|
||||
/* The min. reset hold time is 25us, so 40us should be enough */
|
||||
udelay(50);
|
||||
/* reset RST and interrupt */
|
||||
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
|
||||
NCR5380_read(RESET_PARITY_INTERRUPT_REG);
|
||||
|
||||
end = jiffies + AFTER_RESET_DELAY;
|
||||
while (time_before(jiffies, end))
|
||||
barrier();
|
||||
|
||||
printk(" done\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(REAL_DMA)
|
||||
|
||||
static unsigned long atari_scsi_dma_setup(struct Scsi_Host *instance,
|
||||
@@ -917,17 +877,13 @@ static int __init atari_scsi_probe(struct platform_device *pdev)
|
||||
}
|
||||
atari_scsi_host = instance;
|
||||
|
||||
#ifdef CONFIG_ATARI_SCSI_RESET_BOOT
|
||||
atari_scsi_reset_boot();
|
||||
#endif
|
||||
|
||||
instance->irq = irq->start;
|
||||
|
||||
host_flags |= IS_A_TT() ? 0 : FLAG_LATE_DMA_SETUP;
|
||||
|
||||
#ifdef SUPPORT_TAGS
|
||||
host_flags |= setup_use_tagged_queuing > 0 ? FLAG_TAGGED_QUEUING : 0;
|
||||
#endif
|
||||
host_flags |= setup_toshiba_delay > 0 ? FLAG_TOSHIBA_DELAY : 0;
|
||||
|
||||
NCR5380_init(instance, host_flags);
|
||||
|
||||
@@ -975,6 +931,8 @@ static int __init atari_scsi_probe(struct platform_device *pdev)
|
||||
#endif
|
||||
}
|
||||
|
||||
NCR5380_maybe_reset_bus(instance);
|
||||
|
||||
error = scsi_add_host(instance, NULL);
|
||||
if (error)
|
||||
goto fail_host;
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user