lkml.org 
[lkml]   [2009]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 41/87] ide: fix 40-wire cable detection for TSST SH-S202* ATAPI devices (v2)
    2.6.29-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

    commit 8369d5fa63260cc54464b4687aa6a0f78402d98e upstream.

    Since 2.6.26 we support UDMA66 on ATAPI devices requiring IVB quirk:

    commit 8588a2b732928b343233af9b1855705b8286bed4
    ("ide: add SH-S202J to ivb_list[]")

    We also later added support for more such devices in:

    commit e97564f362a93f8c248246c19828895950341252
    ("ide: More TSST drives with broken cable detection")

    and in:

    commit 3ced5c49bd2d1f2c7f769e3a54385883de63a652
    ("ide: add TSSTcorp CDDVDW SH-S202H to ivb_list[]")

    It turns out that such devices lack cable detection altogether
    (which in turn results in incorrect detection of 40-wire cables
    by our current cable detection strategy) so always handle them
    by trusting host-side cable detection only.

    v2:
    Model detection fixup from Martin.

    Reported-and-tested-by: Martin Lottermoser <Martin.Lottermoser@t-online.de>
    Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/ide/ide-iops.c | 21 +++++++++++++++++----
    1 file changed, 17 insertions(+), 4 deletions(-)

    --- a/drivers/ide/ide-iops.c
    +++ b/drivers/ide/ide-iops.c
    @@ -587,8 +587,6 @@ EXPORT_SYMBOL_GPL(ide_in_drive_list);

    /*
    * 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.
    - *
    * Some optical devices with the buggy firmwares have the same problem.
    */
    static const struct drive_list_entry ivb_list[] = {
    @@ -632,10 +630,25 @@ u8 eighty_ninty_three (ide_drive_t *driv
    * - force bit13 (80c cable present) check also for !ivb devices
    * (unless the slave device is pre-ATA3)
    */
    - if ((id[ATA_ID_HW_CONFIG] & 0x4000) ||
    - (ivb && (id[ATA_ID_HW_CONFIG] & 0x2000)))
    + if (id[ATA_ID_HW_CONFIG] & 0x4000)
    return 1;

    + if (ivb) {
    + const char *model = (char *)&id[ATA_ID_PROD];
    +
    + if (strstr(model, "TSSTcorp CDDVDW SH-S202")) {
    + /*
    + * These ATAPI devices always report 80c cable
    + * so we have to depend on the host in this case.
    + */
    + if (hwif->cbl == ATA_CBL_PATA80)
    + return 1;
    + } else {
    + /* Depend on the device side cable detection. */
    + if (id[ATA_ID_HW_CONFIG] & 0x2000)
    + return 1;
    + }
    + }
    no_80w:
    if (drive->dev_flags & IDE_DFLAG_UDMA33_WARNED)
    return 0;



    \
     
     \ /
      Last update: 2009-06-09 12:33    [W:0.027 / U:2.852 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site