On Tuesday 24 July 2007, Sergei Shtylyov wrote:
> Hello.
> 
> Bartlomiej Zolnierkiewicz wrote:
> 
> > [PATCH] ide: add cable detection for early UDMA66 devices
> 
> > * Move ide_in_drive_list() from ide-dma.c to ide-iops.c.
> 
> > * Add ivb_list[] table for listening early UDMA66 devices which don't 
> > conform
> >   to ATA4 standard wrt cable detection (bit14 is zero, only bit13 is valid)
> >   and use only device side cable detection for them since host side cable
> >   detection may be unreliable.
> 
> > * Add model "QUANTUM FIREBALLlct10 05" with firwmare "A03.0900" to the list
> >   (from Craig's bugreport).
> 
> > Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
> 
> > Index: b/drivers/ide/ide-iops.c
> > ===================================================================
> > --- a/drivers/ide/ide-iops.c
> > +++ b/drivers/ide/ide-iops.c
> > @@ -565,6 +565,34 @@ int ide_wait_stat (ide_startstop_t *star
> >  
> >  EXPORT_SYMBOL(ide_wait_stat);
> >  
> > +/**
> > + * ide_in_drive_list       -       look for drive in black/white list
> > + * @id: drive identifier
> > + * @drive_table: list to inspect
> > + *
> > + * Look for a drive in the blacklist and the whitelist tables
> > + * Returns 1 if the drive is found in the table.
> > + */
> > +
> > +int ide_in_drive_list(struct hd_driveid *id, const struct drive_list_entry 
> > *drive_table)
> > +{
> > +   for ( ; drive_table->id_model ; drive_table++)
> > +           if ((!strcmp(drive_table->id_model, id->model)) &&
> > +               (!drive_table->id_firmware ||
> > +                strstr(id->fw_rev, drive_table->id_firmware)))
> > +                   return 1;
> > +   return 0;
> > +}
> > +
> > +/*
> > + * Early UDMA66 devices don't set bit14 to 1, only bit13 is valid.
> > + * We list them here and depend on the device side cable detection for 
> > them.
> > + */
> > +static const struct drive_list_entry ivb_list[] = {
> > +   { "QUANTUM FIREBALLlct10 05"    , "A03.0900"    },
> > +   { NULL                          , NULL          }
> > +};
> > +
> >  /*
> >   *  All hosts that use the 80c ribbon must use!
> >   *  The name is derived from upper byte of word 93 and the 80c ribbon.
> > @@ -573,11 +601,16 @@ u8 eighty_ninty_three (ide_drive_t *driv
> >  {
> >     ide_hwif_t *hwif = drive->hwif;
> >     struct hd_driveid *id = drive->id;
> > +   int ivb = ide_in_drive_list(id, ivb_list);
> > +
> > +   if (ivb)
> > +           printk(KERN_DEBUG "%s: enabling IVB cable detection quirk\n",
> > +                             drive->name);
> 
>     Wound't more explicit message, something like "ignoring word 93 validity 
> check" be better?

It would, fixed in take 2.

> >  
> >     if (hwif->cbl == ATA_CBL_PATA40_SHORT)
> >             return 1;
> >  
> > -   if (hwif->cbl != ATA_CBL_PATA80)
> > +   if (hwif->cbl != ATA_CBL_PATA80 && !ivb)
> >             goto no_80w;
> >  
> >     /* Check for SATA but only if we are ATA5 or higher */
> > @@ -587,11 +620,11 @@ u8 eighty_ninty_three (ide_drive_t *driv
> >     /*
> >      * FIXME:
> >      * - change master/slave IDENTIFY order
> > -    * - force bit13 (80c cable present) check
> > +    * - force bit13 (80c cable present) check also for !ivb devices
> >      *   (unless the slave device is pre-ATA3)
> >      */
> >  #ifndef CONFIG_IDEDMA_IVB
> > -   if (id->hw_config & 0x4000)
> > +   if ((id->hw_config & 0x4000) || (ivb && (id->hw_config & 0x2000)))
> 
>     I take it that change renders CONFIG_IDEDMA_IVB basically unneeded -- 
> unless for the user which wants to see if his drive needs to be added to the 
> list.  Bbut then, the host side cable check may fail, so this doesn't seem a 
> reliable test anyway -- so, this code either needs to be changed to behave as 
> if the drive was foundin the list or removed completely, shouldn't it?

CONFIG_IDEDMA_IVB removal was on my TODO, just haven't got a time to do it.

Done... see the other mail. :)

> >  #else
> >     if (id->hw_config & 0x6000)
> >  #endif
> 
>     BTW, shouldn't ide_ata66_check() also be changed?

Nowadays ide_ata66_check() uses eighty_ninty_three() internally.

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