Lines 91-97
enum {
Link Here
|
91 |
controller_kl_ata3, /* KeyLargo ATA-3 */ |
91 |
controller_kl_ata3, /* KeyLargo ATA-3 */ |
92 |
controller_kl_ata4, /* KeyLargo ATA-4 */ |
92 |
controller_kl_ata4, /* KeyLargo ATA-4 */ |
93 |
controller_un_ata6, /* UniNorth2 ATA-6 */ |
93 |
controller_un_ata6, /* UniNorth2 ATA-6 */ |
94 |
controller_k2_ata6 /* K2 ATA-6 */ |
94 |
controller_k2_ata6, /* K2 ATA-6 */ |
|
|
95 |
controller_sh_ata6, /* Shasta ATA-6 */ |
95 |
}; |
96 |
}; |
96 |
|
97 |
|
97 |
static const char* model_name[] = { |
98 |
static const char* model_name[] = { |
Lines 101-106
static const char* model_name[] = {
Link Here
|
101 |
"KeyLargo ATA-4", /* KeyLargo ATA-4 (UDMA/66) */ |
102 |
"KeyLargo ATA-4", /* KeyLargo ATA-4 (UDMA/66) */ |
102 |
"UniNorth ATA-6", /* UniNorth2 ATA-6 (UDMA/100) */ |
103 |
"UniNorth ATA-6", /* UniNorth2 ATA-6 (UDMA/100) */ |
103 |
"K2 ATA-6", /* K2 ATA-6 (UDMA/100) */ |
104 |
"K2 ATA-6", /* K2 ATA-6 (UDMA/100) */ |
|
|
105 |
"Shasta ATA-6", /* Shasta ATA-6 (UDMA/133) */ |
104 |
}; |
106 |
}; |
105 |
|
107 |
|
106 |
/* |
108 |
/* |
Lines 549-555
pmac_ide_do_update_timings(ide_drive_t *
Link Here
|
549 |
if (pmif == NULL) |
551 |
if (pmif == NULL) |
550 |
return; |
552 |
return; |
551 |
|
553 |
|
552 |
if (pmif->kind == controller_un_ata6 || pmif->kind == controller_k2_ata6) |
554 |
if (pmif->kind == controller_sh_ata6 || pmif->kind == controller_un_ata6 || pmif->kind == controller_k2_ata6) |
553 |
pmac_ide_kauai_selectproc(drive); |
555 |
pmac_ide_kauai_selectproc(drive); |
554 |
else |
556 |
else |
555 |
pmac_ide_selectproc(drive); |
557 |
pmac_ide_selectproc(drive); |
Lines 667-672
pmac_ide_tuneproc(ide_drive_t *drive, u8
Link Here
|
667 |
pio = ide_get_best_pio_mode(drive, pio, 4, &d); |
669 |
pio = ide_get_best_pio_mode(drive, pio, 4, &d); |
668 |
|
670 |
|
669 |
switch (pmif->kind) { |
671 |
switch (pmif->kind) { |
|
|
672 |
case controller_sh_ata6: |
673 |
/* XXX: 133Mhz cell may use other timings ? */ |
670 |
case controller_un_ata6: |
674 |
case controller_un_ata6: |
671 |
case controller_k2_ata6: { |
675 |
case controller_k2_ata6: { |
672 |
/* 100Mhz cell */ |
676 |
/* 100Mhz cell */ |
Lines 805-810
set_timings_mdma(ide_drive_t *drive, int
Link Here
|
805 |
cycleTime = 150; |
809 |
cycleTime = 150; |
806 |
/* Get the proper timing array for this controller */ |
810 |
/* Get the proper timing array for this controller */ |
807 |
switch(intf_type) { |
811 |
switch(intf_type) { |
|
|
812 |
case controller_sh_ata6: |
808 |
case controller_un_ata6: |
813 |
case controller_un_ata6: |
809 |
case controller_k2_ata6: |
814 |
case controller_k2_ata6: |
810 |
break; |
815 |
break; |
Lines 838-843
set_timings_mdma(ide_drive_t *drive, int
Link Here
|
838 |
#endif |
843 |
#endif |
839 |
} |
844 |
} |
840 |
switch(intf_type) { |
845 |
switch(intf_type) { |
|
|
846 |
case controller_sh_ata6: |
841 |
case controller_un_ata6: |
847 |
case controller_un_ata6: |
842 |
case controller_k2_ata6: { |
848 |
case controller_k2_ata6: { |
843 |
/* 100Mhz cell */ |
849 |
/* 100Mhz cell */ |
Lines 934-940
pmac_ide_tune_chipset (ide_drive_t *driv
Link Here
|
934 |
#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC |
940 |
#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC |
935 |
case XFER_UDMA_5: |
941 |
case XFER_UDMA_5: |
936 |
if (pmif->kind != controller_un_ata6 && |
942 |
if (pmif->kind != controller_un_ata6 && |
937 |
pmif->kind != controller_k2_ata6) |
943 |
pmif->kind != controller_k2_ata6 && |
|
|
944 |
pmif->kind != controller_sh_ata6) |
938 |
return 1; |
945 |
return 1; |
939 |
case XFER_UDMA_4: |
946 |
case XFER_UDMA_4: |
940 |
case XFER_UDMA_3: |
947 |
case XFER_UDMA_3: |
Lines 946-952
pmac_ide_tune_chipset (ide_drive_t *driv
Link Here
|
946 |
if (pmif->kind == controller_kl_ata4) |
953 |
if (pmif->kind == controller_kl_ata4) |
947 |
ret = set_timings_udma_ata4(timings, speed); |
954 |
ret = set_timings_udma_ata4(timings, speed); |
948 |
else if (pmif->kind == controller_un_ata6 |
955 |
else if (pmif->kind == controller_un_ata6 |
949 |
|| pmif->kind == controller_k2_ata6) |
956 |
|| pmif->kind == controller_k2_ata6 |
|
|
957 |
|| pmif->kind == controller_sh_ata6) |
950 |
ret = set_timings_udma_ata6(timings, timings2, speed); |
958 |
ret = set_timings_udma_ata6(timings, timings2, speed); |
951 |
else |
959 |
else |
952 |
ret = 1; |
960 |
ret = 1; |
Lines 996-1001
sanitize_timings(pmac_ide_hwif_t *pmif)
Link Here
|
996 |
switch(pmif->kind) { |
1004 |
switch(pmif->kind) { |
997 |
case controller_un_ata6: |
1005 |
case controller_un_ata6: |
998 |
case controller_k2_ata6: |
1006 |
case controller_k2_ata6: |
|
|
1007 |
case controller_sh_ata6: |
999 |
value = 0x08618a92; |
1008 |
value = 0x08618a92; |
1000 |
value2 = 0x00002921; |
1009 |
value2 = 0x00002921; |
1001 |
break; |
1010 |
break; |
Lines 1144-1149
pmac_ide_setup_device(pmac_ide_hwif_t *p
Link Here
|
1144 |
|
1153 |
|
1145 |
pmif->cable_80 = 0; |
1154 |
pmif->cable_80 = 0; |
1146 |
pmif->broken_dma = pmif->broken_dma_warn = 0; |
1155 |
pmif->broken_dma = pmif->broken_dma_warn = 0; |
|
|
1156 |
if (device_is_compatible(np, "shasta-ata")) |
1157 |
pmif->kind = controller_sh_ata6; |
1147 |
if (device_is_compatible(np, "kauai-ata")) |
1158 |
if (device_is_compatible(np, "kauai-ata")) |
1148 |
pmif->kind = controller_un_ata6; |
1159 |
pmif->kind = controller_un_ata6; |
1149 |
else if (device_is_compatible(np, "K2-UATA")) |
1160 |
else if (device_is_compatible(np, "K2-UATA")) |
Lines 1165-1171
pmac_ide_setup_device(pmac_ide_hwif_t *p
Link Here
|
1165 |
|
1176 |
|
1166 |
/* Get cable type from device-tree */ |
1177 |
/* Get cable type from device-tree */ |
1167 |
if (pmif->kind == controller_kl_ata4 || pmif->kind == controller_un_ata6 |
1178 |
if (pmif->kind == controller_kl_ata4 || pmif->kind == controller_un_ata6 |
1168 |
|| pmif->kind == controller_k2_ata6) { |
1179 |
|| pmif->kind == controller_k2_ata6 |
|
|
1180 |
|| pmif->kind == controller_sh_ata6) { |
1169 |
char* cable = get_property(np, "cable-type", NULL); |
1181 |
char* cable = get_property(np, "cable-type", NULL); |
1170 |
if (cable && !strncmp(cable, "80-", 3)) |
1182 |
if (cable && !strncmp(cable, "80-", 3)) |
1171 |
pmif->cable_80 = 1; |
1183 |
pmif->cable_80 = 1; |
Lines 1219-1225
pmac_ide_setup_device(pmac_ide_hwif_t *p
Link Here
|
1219 |
hwif->drives[0].unmask = 1; |
1231 |
hwif->drives[0].unmask = 1; |
1220 |
hwif->drives[1].unmask = 1; |
1232 |
hwif->drives[1].unmask = 1; |
1221 |
hwif->tuneproc = pmac_ide_tuneproc; |
1233 |
hwif->tuneproc = pmac_ide_tuneproc; |
1222 |
if (pmif->kind == controller_un_ata6 || pmif->kind == controller_k2_ata6) |
1234 |
if (pmif->kind == controller_un_ata6 |
|
|
1235 |
|| pmif->kind == controller_k2_ata6 |
1236 |
|| pmif->kind == controller_sh_ata6) |
1223 |
hwif->selectproc = pmac_ide_kauai_selectproc; |
1237 |
hwif->selectproc = pmac_ide_kauai_selectproc; |
1224 |
else |
1238 |
else |
1225 |
hwif->selectproc = pmac_ide_selectproc; |
1239 |
hwif->selectproc = pmac_ide_selectproc; |
Lines 1444-1454
pmac_ide_pci_attach(struct pci_dev *pdev
Link Here
|
1444 |
pmif->dma_regs = base + 0x1000; |
1458 |
pmif->dma_regs = base + 0x1000; |
1445 |
#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ |
1459 |
#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ |
1446 |
|
1460 |
|
1447 |
/* We use the OF node irq mapping */ |
|
|
1448 |
if (np->n_intrs == 0) |
1449 |
pmif->irq = pdev->irq; |
1461 |
pmif->irq = pdev->irq; |
1450 |
else |
|
|
1451 |
pmif->irq = np->intrs[0].line; |
1452 |
|
1462 |
|
1453 |
pci_set_drvdata(pdev, hwif); |
1463 |
pci_set_drvdata(pdev, hwif); |
1454 |
|
1464 |
|
Lines 1532-1537
static struct pci_device_id pmac_ide_pci
Link Here
|
1532 |
{ PCI_VENDOR_ID_APPLE, PCI_DEVIEC_ID_APPLE_UNI_N_ATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
1542 |
{ PCI_VENDOR_ID_APPLE, PCI_DEVIEC_ID_APPLE_UNI_N_ATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
1533 |
{ PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_IPID_ATA100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
1543 |
{ PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_IPID_ATA100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
1534 |
{ PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_K2_ATA100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
1544 |
{ PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_K2_ATA100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
|
|
1545 |
{ PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_SH_ATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, |
1535 |
}; |
1546 |
}; |
1536 |
|
1547 |
|
1537 |
static struct pci_driver pmac_ide_pci_driver = { |
1548 |
static struct pci_driver pmac_ide_pci_driver = { |
Lines 1792-1798
pmac_ide_udma_enable(ide_drive_t *drive,
Link Here
|
1792 |
timing_local[1] = *timings2; |
1803 |
timing_local[1] = *timings2; |
1793 |
|
1804 |
|
1794 |
/* Calculate timings for interface */ |
1805 |
/* Calculate timings for interface */ |
1795 |
if (pmif->kind == controller_un_ata6 || pmif->kind == controller_k2_ata6) |
1806 |
if (pmif->kind == controller_un_ata6 |
|
|
1807 |
|| pmif->kind == controller_k2_ata6 |
1808 |
|| pmif->kind == controller_sh_ata6) |
1796 |
ret = set_timings_udma_ata6( &timing_local[0], |
1809 |
ret = set_timings_udma_ata6( &timing_local[0], |
1797 |
&timing_local[1], |
1810 |
&timing_local[1], |
1798 |
mode); |
1811 |
mode); |
Lines 1847-1859
pmac_ide_dma_check(ide_drive_t *drive)
Link Here
|
1847 |
|
1860 |
|
1848 |
map = XFER_MWDMA; |
1861 |
map = XFER_MWDMA; |
1849 |
if (pmif->kind == controller_kl_ata4 || pmif->kind == controller_un_ata6 |
1862 |
if (pmif->kind == controller_kl_ata4 || pmif->kind == controller_un_ata6 |
1850 |
|| pmif->kind == controller_k2_ata6) { |
1863 |
|| pmif->kind == controller_k2_ata6 |
|
|
1864 |
|| pmif->kind == controller_sh_ata6) { |
1851 |
map |= XFER_UDMA; |
1865 |
map |= XFER_UDMA; |
1852 |
if (pmif->cable_80) { |
1866 |
if (pmif->cable_80) { |
1853 |
map |= XFER_UDMA_66; |
1867 |
map |= XFER_UDMA_66; |
1854 |
if (pmif->kind == controller_un_ata6 || |
1868 |
if (pmif->kind == controller_un_ata6 || |
1855 |
pmif->kind == controller_k2_ata6) |
1869 |
pmif->kind == controller_k2_ata6 || |
|
|
1870 |
pmif->kind == controller_sh_ata6) |
1856 |
map |= XFER_UDMA_100; |
1871 |
map |= XFER_UDMA_100; |
|
|
1872 |
if (pmif->kind == controller_sh_ata6) |
1873 |
map |= XFER_UDMA_133; |
1857 |
} |
1874 |
} |
1858 |
} |
1875 |
} |
1859 |
mode = ide_find_best_mode(drive, map); |
1876 |
mode = ide_find_best_mode(drive, map); |
Lines 2093-2098
pmac_ide_setup_dma(pmac_ide_hwif_t *pmif
Link Here
|
2093 |
switch(pmif->kind) { |
2110 |
switch(pmif->kind) { |
2094 |
case controller_un_ata6: |
2111 |
case controller_un_ata6: |
2095 |
case controller_k2_ata6: |
2112 |
case controller_k2_ata6: |
|
|
2113 |
case controller_sh_ata6: |
2096 |
hwif->ultra_mask = pmif->cable_80 ? 0x3f : 0x07; |
2114 |
hwif->ultra_mask = pmif->cable_80 ? 0x3f : 0x07; |
2097 |
hwif->mwdma_mask = 0x07; |
2115 |
hwif->mwdma_mask = 0x07; |
2098 |
hwif->swdma_mask = 0x00; |
2116 |
hwif->swdma_mask = 0x00; |