Hi,

On Sunday 22 July 2007, Sergei Shtylyov wrote:
> Bartlomiej Zolnierkiewicz wrote:
> 
> > Use ->set_pio_mode method to program PIO modes in ide_set_xfer_rate()
> > (the only place which used ->speedproc to program PIO modes) and remove
> > handling of PIO modes from all ->speedproc implementations.
> 
> > There should be no functionality changes caused by this patch.
> 
>     Does a missing printk(KERN_ERR, ...) in the cs5520.c count as a 
> functionality change? ;-)

Psst. ;-)

> > Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
> > ---
> >  drivers/ide/cris/ide-cris.c   |    5 -----
> >  drivers/ide/pci/alim15x3.c    |    5 -----
> >  drivers/ide/pci/atiixp.c      |    5 -----
> >  drivers/ide/pci/cmd64x.c      |    8 --------
> >  drivers/ide/pci/cs5530.c      |    7 -------
> >  drivers/ide/pci/it8213.c      |    5 -----
> >  drivers/ide/pci/it821x.c      |    9 ---------
> >  drivers/ide/pci/piix.c        |    5 -----
> >  drivers/ide/pci/sc1200.c      |   10 ----------
> >  drivers/ide/pci/scc_pata.c    |    7 -------
> >  drivers/ide/pci/serverworks.c |    5 -----
> >  drivers/ide/pci/siimage.c     |    7 -------
> >  drivers/ide/pci/sis5513.c     |   12 ++----------
> >  drivers/ide/pci/sl82c105.c    |    8 --------
> >  drivers/ide/pci/slc90e66.c    |    5 -----
> 
>     These don't need their *_tune_pio() as a separate item anymore, however 
> it 
> should be OK as gcc will inline them...

Removal of redundant *_tune_pio() is WIP.

> > Index: b/drivers/ide/ide-lib.c
> > ===================================================================
> > --- a/drivers/ide/ide-lib.c
> > +++ b/drivers/ide/ide-lib.c
> > @@ -398,6 +398,18 @@ int ide_set_xfer_rate(ide_drive_t *drive
> >  
> >     rate = ide_rate_filter(drive, rate);
> >  
> > +   if (rate >= XFER_PIO_0 && rate <= XFER_PIO_5) {
> > +           if (hwif->set_pio_mode)
> > +                   hwif->set_pio_mode(drive, rate - XFER_PIO_0);
> > +
> > +           /*
> > +            * FIXME: this incorrect to return zero here but
> 
>     Missing "is" before "this"...

Fixed, thanks.

> > +            * since all users of ide_set_xfer_rate() ignore
> > +            * the return value it is not a problem currently
> > +            */
> > +           return 0;
> > +   }
> > +
> >     return hwif->speedproc(drive, rate);
> >  }
> 
>     Erm, what if there's no DMA mode support an therefore no speedproc() 
> method, only set_pio_mode()?  I guess that moving the (speedproc() == NULL) 
> check in a prior patch was somewhat rash...

Quite the contrary, it was intended... :)

Few old host drivers have only ->set_pio_mode and they don't set ->autotune
so not checking for ->speedproc would be a major change in behavior for them
while this patch was meant to be as non-intrusive and simple as possible.

> > Index: b/drivers/ide/pci/cs5520.c
> > ===================================================================
> > --- a/drivers/ide/pci/cs5520.c
> > +++ b/drivers/ide/pci/cs5520.c
> > @@ -66,30 +66,13 @@ static struct pio_clocks cs5520_pio_cloc
> >     {1, 2, 1}
> >  };
> >  
> > -static int cs5520_tune_chipset(ide_drive_t *drive, const u8 speed)
> > +static void cs5520_set_pio_mode(ide_drive_t *drive, const u8 pio)
> >  {
> >     ide_hwif_t *hwif = HWIF(drive);
> >     struct pci_dev *pdev = hwif->pci_dev;
> > -   int pio = speed;
> > -   u8 reg;
> >     int controller = drive->dn > 1 ? 1 : 0;
> 
>     Wouldn't hwif->channel be enough?

Agreed.

> > +   u8 reg;
> >  
> > -   switch(speed)
> > -   {
> > -           case XFER_PIO_4:
> > -           case XFER_PIO_3:
> > -           case XFER_PIO_2:
> > -           case XFER_PIO_1:
> > -           case XFER_PIO_0:
> > -                   pio -= XFER_PIO_0;
> > -                   break;
> > -           default:
> > -                   pio = 0;
> > -                   printk(KERN_ERR "cs55x0: bad ide timing.\n");
> > -   }
> > -   
> > -   printk("PIO clocking = %d\n", pio);
> > -   
> >     /* FIXME: if DMA = 1 do we need to set the DMA bit here ? */
> 
>     Indeed?  Guess not. :-)
> 
> >     /* 8bit CAT/CRT - 8bit command timing for channel */
> > @@ -114,12 +97,21 @@ static int cs5520_tune_chipset(ide_drive
> >     reg |= 1<<((drive->dn&1)+5);
> >     outb(reg, hwif->dma_base + 0x02 + 8*controller);
> 
>     That should go...

-ENOPATCH :)

> > -   return ide_config_drive_speed(drive, speed);
> > +   (void)ide_config_drive_speed(drive, XFER_PIO_0 + pio);
> >  }
> >  
> > -static void cs5520_set_pio_mode(ide_drive_t *drive, const u8 pio)
> > +static int cs5520_tune_chipset(ide_drive_t *drive, const u8 speed)
> >  {
> > -   cs5520_tune_chipset(drive, XFER_PIO_0 + pio);
> > +   printk(KERN_ERR "cs55x0: bad ide timing.\n");
> > +
> > +   cs5520_set_pio_mode(drive, 0);
> 
>     Huh?

Yes, this needs fixing but not in this patch.

"There should be no functionality changes caused by this patch."

> > +
> > +   /*
> > +    * FIXME: this incorrect to return zero here but
> 
>     Again, no "is" before "this"...

Fixed.

> > +    * since all users of ide_set_xfer_rate() ignore
> > +    * the return value it is not a problem currently
> > +    */
> > +   return 0;
> >  }
> 
>     The question is why we have to leave the speedproc() handler to be in 
> this 
> driver that doesn't support DMA modes per se?

"There should be no functionality changes caused by this patch."

However prior or incremental patches are of course welcomed.

Thanks,
Bart
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to