[PATCH] NatSemi SCx200 IDE support needs testing

Christer Weinigel (wingel@acolyte.hack.org)
Tue, 26 Feb 2002 02:59:24 +0100 (CET)


Hi,

The National Semiconductor SCx200 CPUs are a descendant of the Cyrix
MediaGX/National Geode CPU and CS5530 companion chip. After reading
the datasheets I belive that the same driver that is used for the
CS5530 should work with the SCx200. I have added the SCx200 PCI IDs
to the IDE driver so that the CS5530 support will be turned on.

This works fine for me, although I don't see all that much of a
performance difference. I would very much like other people to test
this patch do see if it works fine or if there is a difference and the
patch will eat the disks. So, if you feel adventurous, please apply
this patch and tell me if it works.

This patch requires the other SCx200 patch I posted a few minutes
ago. If you can't find that patch, the only things needed are the PCI
ID definitions, so just add the following to include/linux/pci_ids.h
and it should work ok:

#define PCI_DEVICE_ID_NS_SCx200_BRIDGE 0x0500
#define PCI_DEVICE_ID_NS_SCx200_IDE 0x0502

/Christer

diff -urN linux.orig/drivers/ide/cs5530.c linux/drivers/ide/cs5530.c
--- linux.orig/drivers/ide/cs5530.c Tue Feb 26 01:16:58 2002
+++ linux/drivers/ide/cs5530.c Tue Feb 26 01:16:58 2002
@@ -276,6 +276,13 @@
break;
}
}
+ if (dev->vendor == PCI_VENDOR_ID_NS) {
+ switch (dev->device) {
+ case PCI_DEVICE_ID_NS_SCx200_BRIDGE:
+ cs5530_0 = dev;
+ break;
+ }
+ }
}
if (!master_0) {
printk("%s: unable to locate PCI MASTER function\n", name);
diff -urN linux.orig/drivers/ide/ide-pci.c linux/drivers/ide/ide-pci.c
--- linux.orig/drivers/ide/ide-pci.c Tue Feb 26 01:16:58 2002
+++ linux/drivers/ide/ide-pci.c Tue Feb 26 01:16:58 2002
@@ -76,6 +76,7 @@
#define DEVID_CY82C693 ((ide_pci_devid_t){PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693})
#define DEVID_HINT ((ide_pci_devid_t){0x3388, 0x8013})
#define DEVID_CS5530 ((ide_pci_devid_t){PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE})
+#define DEVID_SCx200 ((ide_pci_devid_t){PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_IDE})
#define DEVID_AMD7401 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7401})
#define DEVID_AMD7409 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7409})
#define DEVID_AMD7411 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411})
@@ -434,6 +435,7 @@
{DEVID_CY82C693,"CY82C693", PCI_CY82C693, NULL, INIT_CY82C693, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
{DEVID_HINT, "HINT_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
{DEVID_CS5530, "CS5530", PCI_CS5530, NULL, INIT_CS5530, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_SCx200, "SCx200", PCI_CS5530, NULL, INIT_CS5530, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
{DEVID_AMD7401, "AMD7401", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
{DEVID_AMD7409, "AMD7409", PCI_AMD74XX, ATA66_AMD74XX, INIT_AMD74XX, DMA_AMD74XX, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0 },
{DEVID_AMD7411, "AMD7411", PCI_AMD74XX, ATA66_AMD74XX, INIT_AMD74XX, DMA_AMD74XX, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0 },
@@ -781,6 +783,7 @@
IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT34X) ||
IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT366) ||
IDE_PCI_DEVID_EQ(d->devid, DEVID_CS5530) ||
+ IDE_PCI_DEVID_EQ(d->devid, DEVID_SCx200) ||
IDE_PCI_DEVID_EQ(d->devid, DEVID_CY82C693) ||
IDE_PCI_DEVID_EQ(d->devid, DEVID_CMD646) ||
IDE_PCI_DEVID_EQ(d->devid, DEVID_CMD648) ||
@@ -792,7 +795,8 @@
/*
* Set up BM-DMA capability (PnP BIOS should have done this)
*/
- if (!IDE_PCI_DEVID_EQ(d->devid, DEVID_CS5530))
+ if (!IDE_PCI_DEVID_EQ(d->devid, DEVID_CS5530)
+ && !IDE_PCI_DEVID_EQ(d->devid, DEVID_SCx200))
hwif->autodma = 0; /* default DMA off if we had to configure it here */
(void) pci_write_config_word(dev, PCI_COMMAND, pcicmd | PCI_COMMAND_MASTER);
if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd) || !(pcicmd & PCI_COMMAND_MASTER)) {
diff -urN linux.orig/drivers/mtd/maps/Config.in linux/drivers/mtd/maps/Config.in

-- 
"Just how much can I get away with and still go to heaven?"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/