ide-pmac: remove pmac_ide_do_setfeature()
PATCH 11/11 ide-pmac: remove pmac_ide_do_setfeature()
Use ide_config_drive_speed() instead of pmac_ide_do_setfeature() and remove the latter, also ide-iops.c::__ide_wait_stat() could be static again.
Since for IDE PMAC host driver IDE_CONTROL_REG is always true, device's ->quirk_list is always zero and ->ide_dma_host_{on,off} are nops than the only changes in behavior are:
* if PIO mode is set then ->dma_off_queitly is called to disable DMA
* if setting transfer mode fails ide_dump_status() is called to dump status
--- drivers/ide/ide-iops.c | 2 - drivers/ide/ppc/pmac.c | 79 +------------------------------------------------ include/linux/ide.h | 1 3 files changed, 3 insertions(+), 79 deletions(-)
drivers/ide/ide-iops.c +1 -1
@@ -483,7 +483,7 @@ EXPORT_SYMBOL(drive_is_ready);* setting a timer to wake up at half second intervals thereafter, * until timeout is achieved, before timing out. */ -int __ide_wait_stat (ide_drive_t *drive,u8 good,u8 bad,unsigned long timeout,u8 *rstat) +static int __ide_wait_stat (ide_drive_t *drive,u8 good,u8 bad,unsigned long timeout,u8 *rstat) {ide_hwif_t *hwif = drive->hwif;unsigned long flags;
drivers/ide/ppc/pmac.c +2 -77
97 lines not on this page · raw message
include/linux/ide.h +0 -1
@@ -1152,7 +1152,6 @@ extern void SELECT_MASK(ide_drive_t *, iextern void QUIRK_LIST (ide_drive_t *);extern int drive_is_ready (ide_drive_t *); -int __ide_wait_stat (ide_drive_t *,u8 ,u8 ,unsigned long );/* * taskfile io for disks for now...and builds request from ide_ioctl
Quoted 10 lines · Bartlomiej Zolnierkiewicz
Use
ide_config_drive_speed()instead ofpmac_ide_do_setfeature()and remove the latter, also ide-iops.c::__ide_wait_stat() could be static again.Since for IDE PMAC host driver
IDE_CONTROL_REGis always true, device's ->quirk_list is always zero and ->ide_dma_host_{on,off} are nops than the only changes in behavior are:* if PIO mode is set then ->dma_off_queitly is called to disable DMA
* if setting transfer mode fails
ide_dump_status()is called to dump status
This one needs to be on hold for the reason explained before. In the old days, I did use the generic function and triggered the lockup. Things changes and the generic function got several fixes, so it may well be fine now, but I need to verify it.
Quoted 137 lines
Cc Benjamin Herrenschmidt <[email protected]>Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>--- drivers/ide/ide-iops.c | 2 - drivers/ide/ppc/pmac.c | 79 +------------------------------------------------ include/linux/ide.h | 1 3 files changed, 3 insertions(+), 79 deletions(-)Index:
b/drivers/ide/ide-iops.c
===================================================================drivers/ide/ide-iops.c +1
-1@@ -483,7 +483,7 @@ EXPORT_SYMBOL(drive_is_ready);* setting a timer to wake up at half second intervals thereafter, * until timeout is achieved, before timing out. */ -int __ide_wait_stat (ide_drive_t *drive,u8 good,u8 bad,unsigned long timeout,u8 *rstat) +static int __ide_wait_stat (ide_drive_t *drive,u8 good,u8 bad,unsigned long timeout,u8 *rstat) {ide_hwif_t *hwif = drive->hwif;unsigned long flags;Index:
b/drivers/ide/ppc/pmac.c
===================================================================drivers/ide/ppc/pmac.c +2
-77@@ -529,81 +529,6 @@ pmac_outbsync(ide_drive_t *drive, u8 val }/* -* Send the SET_FEATURE IDE command to the drive and update drive->id with -* the new state. We currently don't use the generic routine as it used to -* cause various trouble, especially with older mediabays. -* This code is sometimes triggering a spurrious interrupt though, I need -* to sort that out sooner or later and see if I can finally get the -* common version to work properly in all cases -*/ -static int -pmac_ide_do_setfeature (ide_drive_t *drive,u8 command) -{ -ide_hwif_t *hwif =HWIF (drive); -int result; -u8 stat; - -disable_irq_nosync (hwif->irq); -udelay (1 ); -SELECT_DRIVE (drive); -SELECT_MASK (drive,0 ); -udelay (1 ); - hwif->OUTB (drive->ctl |2 ,IDE_CONTROL_REG ); - hwif->OUTB (command,IDE_NSECTOR_REG ); - hwif->OUTB (SETFEATURES_XFER ,IDE_FEATURE_REG ); - hwif->OUTBSYNC (drive,WIN_SETFEATURES ,IDE_COMMAND_REG ); - result =__ide_wait_stat (drive, drive->ready_stat, -BUSY_STAT |DRQ_STAT |ERR_STAT , -WAIT_CMD , &stat); -if (result) -printk (KERN_ERR "%s: pmac_ide_do_setfeature disk not ready " -"after SET_FEATURE !\n" , drive->name); - -SELECT_MASK (drive,0 ); -if (result ==0 ) { - drive->id->dma_ultra &= ~0xFF00 ; - drive->id->dma_mword &= ~0x0F00 ; - drive->id->dma_1word &= ~0x0F00 ; -switch (command) { -case XFER_UDMA_7 : - drive->id->dma_ultra |=0x8080 ;break ; -case XFER_UDMA_6 : - drive->id->dma_ultra |=0x4040 ;break ; -case XFER_UDMA_5 : - drive->id->dma_ultra |=0x2020 ;break ; -case XFER_UDMA_4 : - drive->id->dma_ultra |=0x1010 ;break ; -case XFER_UDMA_3 : - drive->id->dma_ultra |=0x0808 ;break ; -case XFER_UDMA_2 : - drive->id->dma_ultra |=0x0404 ;break ; -case XFER_UDMA_1 : - drive->id->dma_ultra |=0x0202 ;break ; -case XFER_UDMA_0 : - drive->id->dma_ultra |=0x0101 ;break ; -case XFER_MW_DMA_2 : - drive->id->dma_mword |=0x0404 ;break ; -case XFER_MW_DMA_1 : - drive->id->dma_mword |=0x0202 ;break ; -case XFER_MW_DMA_0 : - drive->id->dma_mword |=0x0101 ;break ; -case XFER_SW_DMA_2 : - drive->id->dma_1word |=0x0404 ;break ; -case XFER_SW_DMA_1 : - drive->id->dma_1word |=0x0202 ;break ; -case XFER_SW_DMA_0 : - drive->id->dma_1word |=0x0101 ;break ; -default :break ; - } -if (!drive->init_speed) - drive->init_speed = command; - drive->current_speed = command; - } -enable_irq (hwif->irq); -return result; -} - -/* * Old tuning functions (called on hdparm -p), sets up drive PIO timings */ static void@@ -684,7 +609,7 @@ pmac_ide_set_pio_mode(ide_drive_t *drive drive->name, pio, *timings);#endif -if (pmac_ide_do_setfeature (drive,XFER_PIO + pio)) +if (ide_config_drive_speed (drive,XFER_PIO + pio))return ;pmac_ide_do_update_timings (drive);@@ -947,7 +872,7 @@ static int pmac_ide_tune_chipset(ide_driif (ret)return ret; - ret =pmac_ide_do_setfeature (drive, speed); + ret =ide_config_drive_speed (drive, speed);if (ret)return ret;Index:
b/include/linux/ide.h
===================================================================include/linux/ide.h +0
-1@@ -1152,7 +1152,6 @@ extern void SELECT_MASK(ide_drive_t *, iextern void QUIRK_LIST (ide_drive_t *);extern int drive_is_ready (ide_drive_t *); -int __ide_wait_stat (ide_drive_t *,u8 ,u8 ,unsigned long );/* * taskfile io for disks for now...and builds request from ide_ioctl