diff options
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/pci/hpt366.c | 149 |
1 files changed, 29 insertions, 120 deletions
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index 7534171c2c61..51f40f2db772 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c | |||
@@ -67,6 +67,10 @@ | |||
67 | * - add support for HPT302N and HPT371N clocking (the same as for HPT372N) | 67 | * - add support for HPT302N and HPT371N clocking (the same as for HPT372N) |
68 | * - HPT371/N are single channel chips, so avoid touching the primary channel | 68 | * - HPT371/N are single channel chips, so avoid touching the primary channel |
69 | * which exists only virtually (there's no pins for it) | 69 | * which exists only virtually (there's no pins for it) |
70 | * - fix/remove bad/unused timing tables: HPT370/A 66 MHz tables weren't really | ||
71 | * needed and had many modes over- and underclocked, HPT372 33 MHz table was | ||
72 | * for 66 MHz and 50 MHz table missed UltraDMA mode 6, HPT374 33 MHz table was | ||
73 | * really for 50 MHz; switch to using HPT372 tables for HPT374... | ||
70 | * <source@mvista.com> | 74 | * <source@mvista.com> |
71 | * | 75 | * |
72 | */ | 76 | */ |
@@ -264,26 +268,6 @@ static struct chipset_bus_clock_list_entry thirty_three_base_hpt370[] = { | |||
264 | { 0, 0x06514e57 } | 268 | { 0, 0x06514e57 } |
265 | }; | 269 | }; |
266 | 270 | ||
267 | static struct chipset_bus_clock_list_entry sixty_six_base_hpt370[] = { | ||
268 | { XFER_UDMA_5, 0x14846231 }, | ||
269 | { XFER_UDMA_4, 0x14886231 }, | ||
270 | { XFER_UDMA_3, 0x148c6231 }, | ||
271 | { XFER_UDMA_2, 0x148c6231 }, | ||
272 | { XFER_UDMA_1, 0x14906231 }, | ||
273 | { XFER_UDMA_0, 0x14986231 }, | ||
274 | |||
275 | { XFER_MW_DMA_2, 0x26514e21 }, | ||
276 | { XFER_MW_DMA_1, 0x26514e33 }, | ||
277 | { XFER_MW_DMA_0, 0x26514e97 }, | ||
278 | |||
279 | { XFER_PIO_4, 0x06514e21 }, | ||
280 | { XFER_PIO_3, 0x06514e22 }, | ||
281 | { XFER_PIO_2, 0x06514e33 }, | ||
282 | { XFER_PIO_1, 0x06914e43 }, | ||
283 | { XFER_PIO_0, 0x06914e57 }, | ||
284 | { 0, 0x06514e57 } | ||
285 | }; | ||
286 | |||
287 | /* these are the current (4 sep 2001) timings from highpoint */ | 271 | /* these are the current (4 sep 2001) timings from highpoint */ |
288 | static struct chipset_bus_clock_list_entry thirty_three_base_hpt370a[] = { | 272 | static struct chipset_bus_clock_list_entry thirty_three_base_hpt370a[] = { |
289 | { XFER_UDMA_5, 0x12446231 }, | 273 | { XFER_UDMA_5, 0x12446231 }, |
@@ -305,27 +289,6 @@ static struct chipset_bus_clock_list_entry thirty_three_base_hpt370a[] = { | |||
305 | { 0, 0x06814ea7 } | 289 | { 0, 0x06814ea7 } |
306 | }; | 290 | }; |
307 | 291 | ||
308 | /* 2x 33MHz timings */ | ||
309 | static struct chipset_bus_clock_list_entry sixty_six_base_hpt370a[] = { | ||
310 | { XFER_UDMA_5, 0x1488e673 }, | ||
311 | { XFER_UDMA_4, 0x1488e673 }, | ||
312 | { XFER_UDMA_3, 0x1498e673 }, | ||
313 | { XFER_UDMA_2, 0x1490e673 }, | ||
314 | { XFER_UDMA_1, 0x1498e677 }, | ||
315 | { XFER_UDMA_0, 0x14a0e73f }, | ||
316 | |||
317 | { XFER_MW_DMA_2, 0x2480fa73 }, | ||
318 | { XFER_MW_DMA_1, 0x2480fa77 }, | ||
319 | { XFER_MW_DMA_0, 0x2480fb3f }, | ||
320 | |||
321 | { XFER_PIO_4, 0x0c82be73 }, | ||
322 | { XFER_PIO_3, 0x0c82be95 }, | ||
323 | { XFER_PIO_2, 0x0c82beb7 }, | ||
324 | { XFER_PIO_1, 0x0d02bf37 }, | ||
325 | { XFER_PIO_0, 0x0d02bf5f }, | ||
326 | { 0, 0x0d02bf5f } | ||
327 | }; | ||
328 | |||
329 | static struct chipset_bus_clock_list_entry fifty_base_hpt370a[] = { | 292 | static struct chipset_bus_clock_list_entry fifty_base_hpt370a[] = { |
330 | { XFER_UDMA_5, 0x12848242 }, | 293 | { XFER_UDMA_5, 0x12848242 }, |
331 | { XFER_UDMA_4, 0x12ac8242 }, | 294 | { XFER_UDMA_4, 0x12ac8242 }, |
@@ -347,27 +310,28 @@ static struct chipset_bus_clock_list_entry fifty_base_hpt370a[] = { | |||
347 | }; | 310 | }; |
348 | 311 | ||
349 | static struct chipset_bus_clock_list_entry thirty_three_base_hpt372[] = { | 312 | static struct chipset_bus_clock_list_entry thirty_three_base_hpt372[] = { |
350 | { XFER_UDMA_6, 0x1c81dc62 }, | 313 | { XFER_UDMA_6, 0x12446231 }, /* 0x12646231 ?? */ |
351 | { XFER_UDMA_5, 0x1c6ddc62 }, | 314 | { XFER_UDMA_5, 0x12446231 }, |
352 | { XFER_UDMA_4, 0x1c8ddc62 }, | 315 | { XFER_UDMA_4, 0x12446231 }, |
353 | { XFER_UDMA_3, 0x1c8edc62 }, /* checkme */ | 316 | { XFER_UDMA_3, 0x126c6231 }, |
354 | { XFER_UDMA_2, 0x1c91dc62 }, | 317 | { XFER_UDMA_2, 0x12486231 }, |
355 | { XFER_UDMA_1, 0x1c9adc62 }, /* checkme */ | 318 | { XFER_UDMA_1, 0x124c6233 }, |
356 | { XFER_UDMA_0, 0x1c82dc62 }, /* checkme */ | 319 | { XFER_UDMA_0, 0x12506297 }, |
357 | |||
358 | { XFER_MW_DMA_2, 0x2c829262 }, | ||
359 | { XFER_MW_DMA_1, 0x2c829266 }, /* checkme */ | ||
360 | { XFER_MW_DMA_0, 0x2c82922e }, /* checkme */ | ||
361 | 320 | ||
362 | { XFER_PIO_4, 0x0c829c62 }, | 321 | { XFER_MW_DMA_2, 0x22406c31 }, |
363 | { XFER_PIO_3, 0x0c829c84 }, | 322 | { XFER_MW_DMA_1, 0x22406c33 }, |
364 | { XFER_PIO_2, 0x0c829ca6 }, | 323 | { XFER_MW_DMA_0, 0x22406c97 }, |
365 | { XFER_PIO_1, 0x0d029d26 }, | 324 | |
366 | { XFER_PIO_0, 0x0d029d5e }, | 325 | { XFER_PIO_4, 0x06414e31 }, |
367 | { 0, 0x0d029d5e } | 326 | { XFER_PIO_3, 0x06414e42 }, |
327 | { XFER_PIO_2, 0x06414e53 }, | ||
328 | { XFER_PIO_1, 0x06814e93 }, | ||
329 | { XFER_PIO_0, 0x06814ea7 }, | ||
330 | { 0, 0x06814ea7 } | ||
368 | }; | 331 | }; |
369 | 332 | ||
370 | static struct chipset_bus_clock_list_entry fifty_base_hpt372[] = { | 333 | static struct chipset_bus_clock_list_entry fifty_base_hpt372[] = { |
334 | { XFER_UDMA_6, 0x12848242 }, | ||
371 | { XFER_UDMA_5, 0x12848242 }, | 335 | { XFER_UDMA_5, 0x12848242 }, |
372 | { XFER_UDMA_4, 0x12ac8242 }, | 336 | { XFER_UDMA_4, 0x12ac8242 }, |
373 | { XFER_UDMA_3, 0x128c8242 }, | 337 | { XFER_UDMA_3, 0x128c8242 }, |
@@ -389,7 +353,7 @@ static struct chipset_bus_clock_list_entry fifty_base_hpt372[] = { | |||
389 | 353 | ||
390 | static struct chipset_bus_clock_list_entry sixty_six_base_hpt372[] = { | 354 | static struct chipset_bus_clock_list_entry sixty_six_base_hpt372[] = { |
391 | { XFER_UDMA_6, 0x1c869c62 }, | 355 | { XFER_UDMA_6, 0x1c869c62 }, |
392 | { XFER_UDMA_5, 0x1cae9c62 }, | 356 | { XFER_UDMA_5, 0x1cae9c62 }, /* 0x1c8a9c62 */ |
393 | { XFER_UDMA_4, 0x1c8a9c62 }, | 357 | { XFER_UDMA_4, 0x1c8a9c62 }, |
394 | { XFER_UDMA_3, 0x1c8e9c62 }, | 358 | { XFER_UDMA_3, 0x1c8e9c62 }, |
395 | { XFER_UDMA_2, 0x1c929c62 }, | 359 | { XFER_UDMA_2, 0x1c929c62 }, |
@@ -408,50 +372,6 @@ static struct chipset_bus_clock_list_entry sixty_six_base_hpt372[] = { | |||
408 | { 0, 0x0d029d26 } | 372 | { 0, 0x0d029d26 } |
409 | }; | 373 | }; |
410 | 374 | ||
411 | static struct chipset_bus_clock_list_entry thirty_three_base_hpt374[] = { | ||
412 | { XFER_UDMA_6, 0x12808242 }, | ||
413 | { XFER_UDMA_5, 0x12848242 }, | ||
414 | { XFER_UDMA_4, 0x12ac8242 }, | ||
415 | { XFER_UDMA_3, 0x128c8242 }, | ||
416 | { XFER_UDMA_2, 0x120c8242 }, | ||
417 | { XFER_UDMA_1, 0x12148254 }, | ||
418 | { XFER_UDMA_0, 0x121882ea }, | ||
419 | |||
420 | { XFER_MW_DMA_2, 0x22808242 }, | ||
421 | { XFER_MW_DMA_1, 0x22808254 }, | ||
422 | { XFER_MW_DMA_0, 0x228082ea }, | ||
423 | |||
424 | { XFER_PIO_4, 0x0a81f442 }, | ||
425 | { XFER_PIO_3, 0x0a81f443 }, | ||
426 | { XFER_PIO_2, 0x0a81f454 }, | ||
427 | { XFER_PIO_1, 0x0ac1f465 }, | ||
428 | { XFER_PIO_0, 0x0ac1f48a }, | ||
429 | { 0, 0x06814e93 } | ||
430 | }; | ||
431 | |||
432 | /* FIXME: 50MHz timings for HPT374 */ | ||
433 | |||
434 | #if 0 | ||
435 | static struct chipset_bus_clock_list_entry sixty_six_base_hpt374[] = { | ||
436 | { XFER_UDMA_6, 0x12406231 }, /* checkme */ | ||
437 | { XFER_UDMA_5, 0x12446231 }, /* 0x14846231 */ | ||
438 | { XFER_UDMA_4, 0x16814ea7 }, /* 0x14886231 */ | ||
439 | { XFER_UDMA_3, 0x16814ea7 }, /* 0x148c6231 */ | ||
440 | { XFER_UDMA_2, 0x16814ea7 }, /* 0x148c6231 */ | ||
441 | { XFER_UDMA_1, 0x16814ea7 }, /* 0x14906231 */ | ||
442 | { XFER_UDMA_0, 0x16814ea7 }, /* 0x14986231 */ | ||
443 | { XFER_MW_DMA_2, 0x16814ea7 }, /* 0x26514e21 */ | ||
444 | { XFER_MW_DMA_1, 0x16814ea7 }, /* 0x26514e97 */ | ||
445 | { XFER_MW_DMA_0, 0x16814ea7 }, /* 0x26514e97 */ | ||
446 | { XFER_PIO_4, 0x06814ea7 }, /* 0x06514e21 */ | ||
447 | { XFER_PIO_3, 0x06814ea7 }, /* 0x06514e22 */ | ||
448 | { XFER_PIO_2, 0x06814ea7 }, /* 0x06514e33 */ | ||
449 | { XFER_PIO_1, 0x06814ea7 }, /* 0x06914e43 */ | ||
450 | { XFER_PIO_0, 0x06814ea7 }, /* 0x06914e57 */ | ||
451 | { 0, 0x06814ea7 } | ||
452 | }; | ||
453 | #endif | ||
454 | |||
455 | #define HPT366_DEBUG_DRIVE_INFO 0 | 375 | #define HPT366_DEBUG_DRIVE_INFO 0 |
456 | #define HPT374_ALLOW_ATA133_6 0 | 376 | #define HPT374_ALLOW_ATA133_6 0 |
457 | #define HPT371_ALLOW_ATA133_6 0 | 377 | #define HPT371_ALLOW_ATA133_6 0 |
@@ -1211,9 +1131,7 @@ static void __devinit hpt37x_clocking(ide_hwif_t *hwif) | |||
1211 | pll = F_LOW_PCI_66; | 1131 | pll = F_LOW_PCI_66; |
1212 | 1132 | ||
1213 | if (pll == F_LOW_PCI_33) { | 1133 | if (pll == F_LOW_PCI_33) { |
1214 | if (info->revision >= 8) | 1134 | if (info->revision >= 5) |
1215 | info->speed = thirty_three_base_hpt374; | ||
1216 | else if (info->revision >= 5) | ||
1217 | info->speed = thirty_three_base_hpt372; | 1135 | info->speed = thirty_three_base_hpt372; |
1218 | else if (info->revision >= 4) | 1136 | else if (info->revision >= 4) |
1219 | info->speed = thirty_three_base_hpt370a; | 1137 | info->speed = thirty_three_base_hpt370a; |
@@ -1223,26 +1141,17 @@ static void __devinit hpt37x_clocking(ide_hwif_t *hwif) | |||
1223 | } else if (pll == F_LOW_PCI_40) { | 1141 | } else if (pll == F_LOW_PCI_40) { |
1224 | /* Unsupported */ | 1142 | /* Unsupported */ |
1225 | } else if (pll == F_LOW_PCI_50) { | 1143 | } else if (pll == F_LOW_PCI_50) { |
1226 | if (info->revision >= 8) | 1144 | if (info->revision >= 5) |
1227 | info->speed = fifty_base_hpt370a; | ||
1228 | else if (info->revision >= 5) | ||
1229 | info->speed = fifty_base_hpt372; | 1145 | info->speed = fifty_base_hpt372; |
1230 | else if (info->revision >= 4) | ||
1231 | info->speed = fifty_base_hpt370a; | ||
1232 | else | 1146 | else |
1233 | info->speed = fifty_base_hpt370a; | 1147 | info->speed = fifty_base_hpt370a; |
1234 | printk(KERN_DEBUG "HPT37X: using 50MHz PCI clock\n"); | 1148 | printk(KERN_DEBUG "HPT37X: using 50MHz PCI clock\n"); |
1235 | } else { | 1149 | } else { |
1236 | if (info->revision >= 8) { | 1150 | if (info->revision >= 5) { |
1237 | printk(KERN_ERR "HPT37x: 66MHz timings are not supported.\n"); | ||
1238 | } | ||
1239 | else if (info->revision >= 5) | ||
1240 | info->speed = sixty_six_base_hpt372; | 1151 | info->speed = sixty_six_base_hpt372; |
1241 | else if (info->revision >= 4) | 1152 | printk(KERN_DEBUG "HPT37X: using 66MHz PCI clock\n"); |
1242 | info->speed = sixty_six_base_hpt370a; | 1153 | } else |
1243 | else | 1154 | printk(KERN_ERR "HPT37x: 66MHz timings not supported.\n"); |
1244 | info->speed = sixty_six_base_hpt370; | ||
1245 | printk(KERN_DEBUG "HPT37X: using 66MHz PCI clock\n"); | ||
1246 | } | 1155 | } |
1247 | } | 1156 | } |
1248 | 1157 | ||