• Alan Cox's avatar
    [PATCH] ide: backport piix fixes from libata into the legacy driver · 5ac24697
    Alan Cox authored
    There are three flags being set by default by the PIIX driver for speeds >
    PIO 1, and one not being cleared properly on fallback to PIO0.  The most
    important one is the prefetch/post write control which only works for ATA
    and can do bad things with ATAPI.
    
    The patch does its best to set the flags correctly for drivers/ide.  Its
    not 100% perfect but its closer than the original.  100% perfect requires
    proper IORDY handling but this isn't critical (and its not right in libata
    either ..  yet)
    
    Sergei Shtylyov <sshtylyov@ru.mvista.com> said:
    
    > +					{ 0, 0 },
    > +					{ 0, 0 },
    > +					{ 1, 0 },
    > +					{ 2, 1 },
    > +					{ 2, 3 }, };
    >
    >  	pio = ide_get_best_pio_mode(drive, pio, 5, NULL);
    
        BTW, there's quite obvious error here which leads to access outside of
    timings[] if somebody passes PIO mode 5 (or autotuning code finds out that
    drive supports PIO mode 5). Could have been fixed while at it... Those drives
    should be rare, though...
    
    > +		}
    >  		master_data = master_data | (timings[pio][0] << 12) | (timings[pio][1] << 8);
    >  	}
    >  	pci_write_config_word(dev, master_port, master_data);
    
        Actually, there's one more serious issue with piix_tune_drive() -- it
    doesn't actually set the drive's own transfer mode.
    Signed-off-by: default avatarAlan Cox <alan@redhat.com>
    Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
    Cc: Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    5ac24697
piix.c 20.6 KB