* - add support for HPT302N and HPT371N clocking (the same as for HPT372N)
  * - HPT371/N are single channel chips, so avoid touching the primary channel
  *   which exists only virtually (there's no pins for it)
+ * - fix/remove bad/unused timing tables: HPT370/A  66 MHz tables weren't really
+ *   needed and had many modes over- and  underclocked,  HPT372 33 MHz table was
+ *   for 66 MHz and 50 MHz table missed UltraDMA mode 6, HPT374 33 MHz table was
+ *   really for 50 MHz; switch to using HPT372 tables for HPT374...
  *             <source@mvista.com>
  *
  */
        {       0,              0x06514e57      }
 };
 
-static struct chipset_bus_clock_list_entry sixty_six_base_hpt370[] = {
-       {       XFER_UDMA_5,    0x14846231      },
-       {       XFER_UDMA_4,    0x14886231      },
-       {       XFER_UDMA_3,    0x148c6231      },
-       {       XFER_UDMA_2,    0x148c6231      },
-       {       XFER_UDMA_1,    0x14906231      },
-       {       XFER_UDMA_0,    0x14986231      },
-
-       {       XFER_MW_DMA_2,  0x26514e21      },
-       {       XFER_MW_DMA_1,  0x26514e33      },
-       {       XFER_MW_DMA_0,  0x26514e97      },
-
-       {       XFER_PIO_4,     0x06514e21      },
-       {       XFER_PIO_3,     0x06514e22      },
-       {       XFER_PIO_2,     0x06514e33      },
-       {       XFER_PIO_1,     0x06914e43      },
-       {       XFER_PIO_0,     0x06914e57      },
-       {       0,              0x06514e57      }
-};
-
 /* these are the current (4 sep 2001) timings from highpoint */
 static struct chipset_bus_clock_list_entry thirty_three_base_hpt370a[] = {
        {       XFER_UDMA_5,    0x12446231      },
        {       0,              0x06814ea7      }
 };
 
-/* 2x 33MHz timings */
-static struct chipset_bus_clock_list_entry sixty_six_base_hpt370a[] = {
-       {       XFER_UDMA_5,    0x1488e673      },
-       {       XFER_UDMA_4,    0x1488e673      },
-       {       XFER_UDMA_3,    0x1498e673      },
-       {       XFER_UDMA_2,    0x1490e673      },
-       {       XFER_UDMA_1,    0x1498e677      },
-       {       XFER_UDMA_0,    0x14a0e73f      },
-
-       {       XFER_MW_DMA_2,  0x2480fa73      },
-       {       XFER_MW_DMA_1,  0x2480fa77      }, 
-       {       XFER_MW_DMA_0,  0x2480fb3f      },
-
-       {       XFER_PIO_4,     0x0c82be73      },
-       {       XFER_PIO_3,     0x0c82be95      },
-       {       XFER_PIO_2,     0x0c82beb7      },
-       {       XFER_PIO_1,     0x0d02bf37      },
-       {       XFER_PIO_0,     0x0d02bf5f      },
-       {       0,              0x0d02bf5f      }
-};
-
 static struct chipset_bus_clock_list_entry fifty_base_hpt370a[] = {
        {       XFER_UDMA_5,    0x12848242      },
        {       XFER_UDMA_4,    0x12ac8242      },
 };
 
 static struct chipset_bus_clock_list_entry thirty_three_base_hpt372[] = {
-       {       XFER_UDMA_6,    0x1c81dc62      },
-       {       XFER_UDMA_5,    0x1c6ddc62      },
-       {       XFER_UDMA_4,    0x1c8ddc62      },
-       {       XFER_UDMA_3,    0x1c8edc62      },      /* checkme */
-       {       XFER_UDMA_2,    0x1c91dc62      },
-       {       XFER_UDMA_1,    0x1c9adc62      },      /* checkme */
-       {       XFER_UDMA_0,    0x1c82dc62      },      /* checkme */
-
-       {       XFER_MW_DMA_2,  0x2c829262      },
-       {       XFER_MW_DMA_1,  0x2c829266      },      /* checkme */
-       {       XFER_MW_DMA_0,  0x2c82922e      },      /* checkme */
+       {       XFER_UDMA_6,    0x12446231      },      /* 0x12646231 ?? */
+       {       XFER_UDMA_5,    0x12446231      },
+       {       XFER_UDMA_4,    0x12446231      },
+       {       XFER_UDMA_3,    0x126c6231      },
+       {       XFER_UDMA_2,    0x12486231      },
+       {       XFER_UDMA_1,    0x124c6233      },
+       {       XFER_UDMA_0,    0x12506297      },
 
-       {       XFER_PIO_4,     0x0c829c62      },
-       {       XFER_PIO_3,     0x0c829c84      },
-       {       XFER_PIO_2,     0x0c829ca6      },
-       {       XFER_PIO_1,     0x0d029d26      },
-       {       XFER_PIO_0,     0x0d029d5e      },
-       {       0,              0x0d029d5e      }
+       {       XFER_MW_DMA_2,  0x22406c31      },
+       {       XFER_MW_DMA_1,  0x22406c33      },
+       {       XFER_MW_DMA_0,  0x22406c97      },
+
+       {       XFER_PIO_4,     0x06414e31      },
+       {       XFER_PIO_3,     0x06414e42      },
+       {       XFER_PIO_2,     0x06414e53      },
+       {       XFER_PIO_1,     0x06814e93      },
+       {       XFER_PIO_0,     0x06814ea7      },
+       {       0,              0x06814ea7      }
 };
 
 static struct chipset_bus_clock_list_entry fifty_base_hpt372[] = {
+       {       XFER_UDMA_6,    0x12848242      },
        {       XFER_UDMA_5,    0x12848242      },
        {       XFER_UDMA_4,    0x12ac8242      },
        {       XFER_UDMA_3,    0x128c8242      },
 
 static struct chipset_bus_clock_list_entry sixty_six_base_hpt372[] = {
        {       XFER_UDMA_6,    0x1c869c62      },
-       {       XFER_UDMA_5,    0x1cae9c62      },
+       {       XFER_UDMA_5,    0x1cae9c62      },      /* 0x1c8a9c62 */
        {       XFER_UDMA_4,    0x1c8a9c62      },
        {       XFER_UDMA_3,    0x1c8e9c62      },
        {       XFER_UDMA_2,    0x1c929c62      },
        {       0,              0x0d029d26      }
 };
 
-static struct chipset_bus_clock_list_entry thirty_three_base_hpt374[] = {
-       {       XFER_UDMA_6,    0x12808242      },
-       {       XFER_UDMA_5,    0x12848242      },
-       {       XFER_UDMA_4,    0x12ac8242      },
-       {       XFER_UDMA_3,    0x128c8242      },
-       {       XFER_UDMA_2,    0x120c8242      },
-       {       XFER_UDMA_1,    0x12148254      },
-       {       XFER_UDMA_0,    0x121882ea      },
-
-       {       XFER_MW_DMA_2,  0x22808242      },
-       {       XFER_MW_DMA_1,  0x22808254      },
-       {       XFER_MW_DMA_0,  0x228082ea      },
-
-       {       XFER_PIO_4,     0x0a81f442      },
-       {       XFER_PIO_3,     0x0a81f443      },
-       {       XFER_PIO_2,     0x0a81f454      },
-       {       XFER_PIO_1,     0x0ac1f465      },
-       {       XFER_PIO_0,     0x0ac1f48a      },
-       {       0,              0x06814e93      }
-};
-
-/* FIXME: 50MHz timings for HPT374 */
-
-#if 0
-static struct chipset_bus_clock_list_entry sixty_six_base_hpt374[] = {
-       {       XFER_UDMA_6,    0x12406231      },      /* checkme */
-       {       XFER_UDMA_5,    0x12446231      },      /* 0x14846231 */
-       {       XFER_UDMA_4,    0x16814ea7      },      /* 0x14886231 */
-       {       XFER_UDMA_3,    0x16814ea7      },      /* 0x148c6231 */
-       {       XFER_UDMA_2,    0x16814ea7      },      /* 0x148c6231 */
-       {       XFER_UDMA_1,    0x16814ea7      },      /* 0x14906231 */
-       {       XFER_UDMA_0,    0x16814ea7      },      /* 0x14986231 */
-       {       XFER_MW_DMA_2,  0x16814ea7      },      /* 0x26514e21 */
-       {       XFER_MW_DMA_1,  0x16814ea7      },      /* 0x26514e97 */
-       {       XFER_MW_DMA_0,  0x16814ea7      },      /* 0x26514e97 */
-       {       XFER_PIO_4,     0x06814ea7      },      /* 0x06514e21 */
-       {       XFER_PIO_3,     0x06814ea7      },      /* 0x06514e22 */
-       {       XFER_PIO_2,     0x06814ea7      },      /* 0x06514e33 */
-       {       XFER_PIO_1,     0x06814ea7      },      /* 0x06914e43 */
-       {       XFER_PIO_0,     0x06814ea7      },      /* 0x06914e57 */
-       {       0,              0x06814ea7      }
-};
-#endif
-
 #define HPT366_DEBUG_DRIVE_INFO                0
 #define HPT374_ALLOW_ATA133_6          0
 #define HPT371_ALLOW_ATA133_6          0
                        pll = F_LOW_PCI_66;
        
                if (pll == F_LOW_PCI_33) {
-                       if (info->revision >= 8)
-                               info->speed = thirty_three_base_hpt374;
-                       else if (info->revision >= 5)
+                       if (info->revision >= 5)
                                info->speed = thirty_three_base_hpt372;
                        else if (info->revision >= 4)
                                info->speed = thirty_three_base_hpt370a;
                } else if (pll == F_LOW_PCI_40) {
                        /* Unsupported */
                } else if (pll == F_LOW_PCI_50) {
-                       if (info->revision >= 8)
-                               info->speed = fifty_base_hpt370a;
-                       else if (info->revision >= 5)
+                       if (info->revision >= 5)
                                info->speed = fifty_base_hpt372;
-                       else if (info->revision >= 4)
-                               info->speed = fifty_base_hpt370a;
                        else
                                info->speed = fifty_base_hpt370a;
                        printk(KERN_DEBUG "HPT37X: using 50MHz PCI clock\n");
                } else {
-                       if (info->revision >= 8) {
-                               printk(KERN_ERR "HPT37x: 66MHz timings are not supported.\n");
-                       }
-                       else if (info->revision >= 5)
+                       if (info->revision >= 5) {
                                info->speed = sixty_six_base_hpt372;
-                       else if (info->revision >= 4)
-                               info->speed = sixty_six_base_hpt370a;
-                       else
-                               info->speed = sixty_six_base_hpt370;
-                       printk(KERN_DEBUG "HPT37X: using 66MHz PCI clock\n");
+                               printk(KERN_DEBUG "HPT37X: using 66MHz PCI clock\n");
+                       } else
+                               printk(KERN_ERR "HPT37x: 66MHz timings not supported.\n");
                }
        }