From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Cc: linux-ide@vger.kernel.org
Subject: Re: [PATCH 11/11] ide-pmac: remove pmac_ide_do_setfeature()
Date: Mon, 23 Jul 2007 08:04:37 +1000 [thread overview]
Message-ID: <1185141877.5439.75.camel@localhost.localdomain> (raw)
In-Reply-To: <200707222034.28285.bzolnier@gmail.com>
On Sun, 2007-07-22 at 20:34 +0200, Bartlomiej Zolnierkiewicz wrote:
> 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
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.
> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> ---
> 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
> ===================================================================
> --- a/drivers/ide/ide-iops.c
> +++ b/drivers/ide/ide-iops.c
> @@ -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
> ===================================================================
> --- a/drivers/ide/ppc/pmac.c
> +++ b/drivers/ide/ppc/pmac.c
> @@ -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_dri
> if (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
> ===================================================================
> --- a/include/linux/ide.h
> +++ b/include/linux/ide.h
> @@ -1152,7 +1152,6 @@ extern void SELECT_MASK(ide_drive_t *, i
> extern 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
prev parent reply other threads:[~2007-07-22 22:04 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-22 18:34 [PATCH 11/11] ide-pmac: remove pmac_ide_do_setfeature() Bartlomiej Zolnierkiewicz
2007-07-22 22:04 ` Benjamin Herrenschmidt [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1185141877.5439.75.camel@localhost.localdomain \
--to=benh@kernel.crashing.org \
--cc=bzolnier@gmail.com \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox