(replying to an old thread, as a I just discovered it)

On Wed, Jun 08, 2005 at 11:14:45AM +0200, Bartlomiej Zolnierkiewicz wrote:
> Second look into sis5513.c and another problem turns out - patch breaks 
> support for IDE controllers integrated into 961 and 961B South Bridges
> (ATA_133 is used instead of ATA_100 and ATA133a).
> 
> For unknown Host Bridges driver checks for presence of 961/961B/962/963
> South Bridges by checking true device ID (please see sis5513.c for details) 
> and assigns 'chipset_family' accordingly (ATA_100/ATA_133a or ATA_133).
> 
> You have 965L South Bridge so probably it has newer true device ID 
> and  may also require different programming sequence.
I also have an ASUS K8S-MX with a SiS 760GX/SiS 965L as in this thread.
The attached patch, modified from one for the 964L by Arnaud Patard/Uwe
Koziolek, against 2.6.13-rc6-mm2, works for me and should do things properly.

I've been running it for the last couple of days with a bit of heavy I/O
(testing) and have seen no problems as yet.

If anyone out there has one of these mb/chipset combos and could try to
see if it fixes anything, or if anyone has feedback, I'd be happy to
adjust the patch, etc.
--- drivers/ide/pci/sis5513.c.orig      2005-08-27 12:37:26.000000000 +1000
+++ drivers/ide/pci/sis5513.c   2005-08-27 11:11:54.000000000 +1000
@@ -42,7 +42,7 @@
  * Fortunately the 5513 can be 'unmasked' by fiddling with some config space
  * bits, changing its device id to the true one - 5517 for 961 and 5518 for
  * 962/963.
- */
+ */ 
 
 #include <linux/config.h>
 #include <linux/types.h>
@@ -726,7 +726,7 @@
 */
 
 /* Chip detection and general config */
-static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const 
char *name)
+static unsigned int __init init_chipset_sis5513 (struct pci_dev *dev, const 
char *name)
 {
        struct pci_dev *host;
        int i = 0;
@@ -778,6 +778,15 @@
                                        printk(KERN_INFO "SIS5513: Switching to 
5513 register mapping\n");
                                }
                        }
+                       else if (trueid == 0x180) { /* sis965L */
+                               u16 pci_command;
+                               pci_read_config_word(dev, PCI_COMMAND, 
&pci_command);
+                               pci_command &= ~PCI_COMMAND_INTX_DISABLE;
+                               pci_write_config_word(dev, PCI_COMMAND, 
pci_command);
+                               chipset_family = ATA_133;
+                               printk(KERN_INFO "SIS5513: SiS 965 IDE UDMA133 
controller\n");
+                       }
+
        }
 
        if (!chipset_family) { /* Belongs to pci-quirks */
@@ -879,7 +888,7 @@
        return 0;
 }
 
-static unsigned int __devinit ata66_sis5513 (ide_hwif_t *hwif)
+static unsigned int __init ata66_sis5513 (ide_hwif_t *hwif)
 {
        u8 ata66 = 0;
 
@@ -897,7 +906,7 @@
         return ata66;
 }
 
-static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif)
+static void __init init_hwif_sis5513 (ide_hwif_t *hwif)
 {
        hwif->autodma = 0;
 
@@ -952,6 +961,7 @@
 static struct pci_device_id sis5513_pci_tbl[] = {
        { PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, PCI_ANY_ID, PCI_ANY_ID, 0, 
0, 0},
        { PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5518, PCI_ANY_ID, PCI_ANY_ID, 0, 
0, 0},
+        { PCI_VENDOR_ID_SI, 0x180,                 PCI_ANY_ID, PCI_ANY_ID, 0, 
0, 0},
        { 0, },
 };
 MODULE_DEVICE_TABLE(pci, sis5513_pci_tbl);

Reply via email to