Commit 0f180260 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz Committed by Linus Torvalds

[PATCH] ide: sis5513 fix for SiS962 chipset

From: Thomas Gleixner <tglx@linutronix.de>

1. If the fake 5513 id bit is not set by the BIOS we must have the 5518
id in the device table.

2. If the register remapping is not set by the BIOS then the enable bit
check in ide_pci_setup_ports will fail. It's safe to switch to the
remapping mode here. Keeping the not remapped mode would need quite big
changes AFAICS.

Forward ported to 2.6 by me.
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@elka.pw.edu.pl>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent e98403d7
......@@ -788,6 +788,15 @@ static unsigned int __init init_chipset_sis5513 (struct pci_dev *dev, const char
if (trueid == 0x5518) {
printk(KERN_INFO "SIS5513: SiS 962/963 MuTIOL IDE UDMA133 controller\n");
chipset_family = ATA_133;
/* Check for 5513 compability mapping
* We must use this, else the port enabled code will fail,
* as it expects the enablebits at 0x4a.
*/
if ((idemisc & 0x40000000) == 0) {
pci_write_config_dword(dev, 0x54, idemisc | 0x40000000);
printk(KERN_INFO "SIS5513: Switching to 5513 register mapping\n");
}
}
}
......@@ -945,24 +954,31 @@ static void __init init_hwif_sis5513 (ide_hwif_t *hwif)
return;
}
static ide_pci_device_t sis5513_chipset __devinitdata = {
.name = "SIS5513",
.init_chipset = init_chipset_sis5513,
.init_hwif = init_hwif_sis5513,
.channels = 2,
.autodma = NOAUTODMA,
.enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
.bootable = ON_BOARD,
#define DECLARE_SIS_DEV(name_str) \
{ \
.name = name_str, \
.init_chipset = init_chipset_sis5513, \
.init_hwif = init_hwif_sis5513, \
.channels = 2, \
.autodma = NOAUTODMA, \
.enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, \
.bootable = ON_BOARD, \
}
static ide_pci_device_t sis5513_chipsets[] __devinitdata = {
/* 0 */ DECLARE_SIS_DEV("SIS5513"),
/* 1 */ DECLARE_SIS_DEV("SIS5518")
};
static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_device_id *id)
{
ide_setup_pci_device(dev, &sis5513_chipset);
ide_setup_pci_device(dev, &sis5513_chipsets[id->driver_data]);
return 0;
}
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, 1},
{ 0, },
};
MODULE_DEVICE_TABLE(pci, sis5513_pci_tbl);
......
......@@ -1575,6 +1575,7 @@
1039 5513 SiS5513 EIDE Controller (A,B step)
1043 8035 CUSI-FX motherboard
5517 5517
5518 5518 [IDE]
5571 5571
5581 5581 Pentium Chipset
5582 5582
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment