aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorNarendra Sankar <nsankar@broadcom.com>2005-05-25 19:51:00 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-05-25 20:10:58 -0400
commit60bf09a366c873aab36e3b3110ee9f5bd89a1a6d (patch)
tree562796542209980e96c184c2956e33269cff7794 /drivers
parent2a24ab628aa7b190be32f63dfb6d96f3fb61580a (diff)
[PATCH] sata_svw: Add support for new device IDs
BCM5785 (HT1000) is a new southbridge from Serverworks/Broadcom that incorporates 4 SATA ports in a single PCIX function. Functionally these ports are similar to that in older devices like the Apple K2 and the Frodo4/8. This patch adds support for the new PCI device ID along with a blurb on what the various device IDs mean. Additionally in all devices based on this SATA controller, the SATA ports appear as a single PCI function. This is true for older Frodo8 devices as well. Hence the init function should init all the ports present in the detected controller (which could be 4 or 8). Signed-off-by: Narendra Sankar <nsankar@broadcom.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/sata_svw.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c
index 05075bd3a893..116cb3f44cdb 100644
--- a/drivers/scsi/sata_svw.c
+++ b/drivers/scsi/sata_svw.c
@@ -343,6 +343,7 @@ static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
343 void *mmio_base; 343 void *mmio_base;
344 int pci_dev_busy = 0; 344 int pci_dev_busy = 0;
345 int rc; 345 int rc;
346 int i;
346 347
347 if (!printed_version++) 348 if (!printed_version++)
348 printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); 349 printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n");
@@ -420,11 +421,11 @@ static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
420 probe_ent->mwdma_mask = 0x7; 421 probe_ent->mwdma_mask = 0x7;
421 probe_ent->udma_mask = 0x7f; 422 probe_ent->udma_mask = 0x7f;
422 423
423 /* We have 4 ports per PCI function */ 424 /* different controllers have different number of ports - currently 4 or 8 */
424 k2_sata_setup_port(&probe_ent->port[0], base + 0 * K2_SATA_PORT_OFFSET); 425 /* All ports are on the same function. Multi-function device is no
425 k2_sata_setup_port(&probe_ent->port[1], base + 1 * K2_SATA_PORT_OFFSET); 426 * longer available. This should not be seen in any system. */
426 k2_sata_setup_port(&probe_ent->port[2], base + 2 * K2_SATA_PORT_OFFSET); 427 for (i = 0; i < ent->driver_data; i++)
427 k2_sata_setup_port(&probe_ent->port[3], base + 3 * K2_SATA_PORT_OFFSET); 428 k2_sata_setup_port(&probe_ent->port[i], base + i * K2_SATA_PORT_OFFSET);
428 429
429 pci_set_master(pdev); 430 pci_set_master(pdev);
430 431
@@ -444,11 +445,17 @@ err_out:
444 return rc; 445 return rc;
445} 446}
446 447
447 448/* 0x240 is device ID for Apple K2 device
449 * 0x241 is device ID for Serverworks Frodo4
450 * 0x242 is device ID for Serverworks Frodo8
451 * 0x24a is device ID for BCM5785 (aka HT1000) HT southbridge integrated SATA
452 * controller
453 * */
448static struct pci_device_id k2_sata_pci_tbl[] = { 454static struct pci_device_id k2_sata_pci_tbl[] = {
449 { 0x1166, 0x0240, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, 455 { 0x1166, 0x0240, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
450 { 0x1166, 0x0241, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, 456 { 0x1166, 0x0241, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
451 { 0x1166, 0x0242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, 457 { 0x1166, 0x0242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
458 { 0x1166, 0x024a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
452 { } 459 { }
453}; 460};
454 461