aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ppc/pmac.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-19 19:31:22 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-19 19:31:22 -0400
commit64fb98fc40738ae1a98bcea9ca3145b89fb71524 (patch)
tree24130f9c56b04638e91969d216db199652470a17 /drivers/ide/ppc/pmac.c
parent5f47c7eac65a45e33d7fe390effe75ec5c74f8bf (diff)
parent89636af25d75d8672aea05d258be357d0dc4bd70 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6: (23 commits) ide: add support for SCSI ioctls to ide-floppy ide: remove stale changelog from setup-pci.c ide: remove stale changelog/comments/TODO from ide.c ide-cris: handle PIO auto-tuning in tune_cris_ide() ide: add PIO masks ide: remove ide_find_best_pio_mode() ide: drop "PIO data" argument from ide_get_best_pio_mode() ide: ide_find_best_pio_mode() fixes (take 2) ide: add ide_pio_cycle_time() helper (take 2) sc1200: remove stale Power Management code ide: ide_start_power_step() fix WRT disabling DMA serverworks: fix DMA serverworks: always tune PIO ide: add ide_pci_device_t.host_flags (take 2) ide: add ide_dev_has_iordy() helper (take 4) ide: make ide_get_best_pio_mode() print info if overriding PIO mode siimage: PIO mode setup fixes (take 2) atiixp: PIO mode setup fixes ide: Stop mapping ROMs IDE: Remove references to dead ETRAX-related variables. ...
Diffstat (limited to 'drivers/ide/ppc/pmac.c')
-rw-r--r--drivers/ide/ppc/pmac.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c
index e46f47206542..33630ad3e794 100644
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -615,24 +615,25 @@ out:
615static void 615static void
616pmac_ide_tuneproc(ide_drive_t *drive, u8 pio) 616pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
617{ 617{
618 ide_pio_data_t d;
619 u32 *timings; 618 u32 *timings;
620 unsigned accessTicks, recTicks; 619 unsigned accessTicks, recTicks;
621 unsigned accessTime, recTime; 620 unsigned accessTime, recTime;
622 pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data; 621 pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
623 622 unsigned int cycle_time;
623
624 if (pmif == NULL) 624 if (pmif == NULL)
625 return; 625 return;
626 626
627 /* which drive is it ? */ 627 /* which drive is it ? */
628 timings = &pmif->timings[drive->select.b.unit & 0x01]; 628 timings = &pmif->timings[drive->select.b.unit & 0x01];
629 629
630 pio = ide_get_best_pio_mode(drive, pio, 4, &d); 630 pio = ide_get_best_pio_mode(drive, pio, 4);
631 cycle_time = ide_pio_cycle_time(drive, pio);
631 632
632 switch (pmif->kind) { 633 switch (pmif->kind) {
633 case controller_sh_ata6: { 634 case controller_sh_ata6: {
634 /* 133Mhz cell */ 635 /* 133Mhz cell */
635 u32 tr = kauai_lookup_timing(shasta_pio_timings, d.cycle_time); 636 u32 tr = kauai_lookup_timing(shasta_pio_timings, cycle_time);
636 if (tr == 0) 637 if (tr == 0)
637 return; 638 return;
638 *timings = ((*timings) & ~TR_133_PIOREG_PIO_MASK) | tr; 639 *timings = ((*timings) & ~TR_133_PIOREG_PIO_MASK) | tr;
@@ -641,7 +642,7 @@ pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
641 case controller_un_ata6: 642 case controller_un_ata6:
642 case controller_k2_ata6: { 643 case controller_k2_ata6: {
643 /* 100Mhz cell */ 644 /* 100Mhz cell */
644 u32 tr = kauai_lookup_timing(kauai_pio_timings, d.cycle_time); 645 u32 tr = kauai_lookup_timing(kauai_pio_timings, cycle_time);
645 if (tr == 0) 646 if (tr == 0)
646 return; 647 return;
647 *timings = ((*timings) & ~TR_100_PIOREG_PIO_MASK) | tr; 648 *timings = ((*timings) & ~TR_100_PIOREG_PIO_MASK) | tr;
@@ -649,7 +650,7 @@ pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
649 } 650 }
650 case controller_kl_ata4: 651 case controller_kl_ata4:
651 /* 66Mhz cell */ 652 /* 66Mhz cell */
652 recTime = d.cycle_time - ide_pio_timings[pio].active_time 653 recTime = cycle_time - ide_pio_timings[pio].active_time
653 - ide_pio_timings[pio].setup_time; 654 - ide_pio_timings[pio].setup_time;
654 recTime = max(recTime, 150U); 655 recTime = max(recTime, 150U);
655 accessTime = ide_pio_timings[pio].active_time; 656 accessTime = ide_pio_timings[pio].active_time;
@@ -665,7 +666,7 @@ pmac_ide_tuneproc(ide_drive_t *drive, u8 pio)
665 default: { 666 default: {
666 /* 33Mhz cell */ 667 /* 33Mhz cell */
667 int ebit = 0; 668 int ebit = 0;
668 recTime = d.cycle_time - ide_pio_timings[pio].active_time 669 recTime = cycle_time - ide_pio_timings[pio].active_time
669 - ide_pio_timings[pio].setup_time; 670 - ide_pio_timings[pio].setup_time;
670 recTime = max(recTime, 150U); 671 recTime = max(recTime, 150U);
671 accessTime = ide_pio_timings[pio].active_time; 672 accessTime = ide_pio_timings[pio].active_time;
@@ -1247,6 +1248,7 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1247 hwif->cbl = pmif->cable_80 ? ATA_CBL_PATA80 : ATA_CBL_PATA40; 1248 hwif->cbl = pmif->cable_80 ? ATA_CBL_PATA80 : ATA_CBL_PATA40;
1248 hwif->drives[0].unmask = 1; 1249 hwif->drives[0].unmask = 1;
1249 hwif->drives[1].unmask = 1; 1250 hwif->drives[1].unmask = 1;
1251 hwif->pio_mask = ATA_PIO4;
1250 hwif->tuneproc = pmac_ide_tuneproc; 1252 hwif->tuneproc = pmac_ide_tuneproc;
1251 if (pmif->kind == controller_un_ata6 1253 if (pmif->kind == controller_un_ata6
1252 || pmif->kind == controller_k2_ata6 1254 || pmif->kind == controller_k2_ata6