Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Oct 2007 08:35:59 +0300
From:      "Andrey V. Elsukov" <bu7cher@yandex.ru>
To:        =?KOI8-R?Q?S=F8ren_Schmidt?= <sos@FreeBSD.org>
Cc:        cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/ata ata-pci.c
Message-ID:  <4725713F.5010409@yandex.ru>
In-Reply-To: <200710260857.l9Q8v8HI099233@repoman.freebsd.org>
References:  <200710260857.l9Q8v8HI099233@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------080402060406020200060409
Content-Type: text/plain; charset=KOI8-R; format=flowed
Content-Transfer-Encoding: 8bit

Søren Schmidt wrote:
 >   Modified files:
 >     sys/dev/ata          ata-pci.c
 >   Log:
 >   Fix treating some modern chips (mem mapped) as legacy devices.

Hi, Søren.

Seems that PCIP_STORAGE_IDE_MASTERDEV, PCIP_STORAGE_IDE_MODEPRIM and
PCIP_STORAGE_IDE_MODESEC should be related to the PCIS_STORAGE_IDE
subclass. My Marvell 88SE6141 chip have PCIS_STORAGE_SATA subclass and
PCIP_STORAGE_SATA_AHCI_1_0|PCIS_STORAGE_OTHER programming interface.
And this chip detected as a legacy controller. What you think about
the attached patch?

-- 
WBR, Andrey V. Elsukov

--------------080402060406020200060409
Content-Type: text/plain;
 name="ata-pci.c.diff.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ata-pci.c.diff.txt"

--- /usr/src/sys/dev/ata/ata-pci.c	2007-10-29 08:01:06.000000000 +0300
+++ ata-pci.c	2007-10-29 08:11:20.000000000 +0300
@@ -59,15 +59,17 @@
 int
 ata_legacy(device_t dev)
 {
-    return (((pci_read_config(dev, PCIR_PROGIF, 1)&PCIP_STORAGE_IDE_MASTERDEV)&&
-	     ((pci_read_config(dev, PCIR_PROGIF, 1) &
-	       (PCIP_STORAGE_IDE_MODEPRIM | PCIP_STORAGE_IDE_MODESEC)) !=
+    uint32_t pi, scc;
+    pi = pci_read_config(dev, PCIR_PROGIF, 1);
+    scc = pci_read_config(dev, PCIR_SUBCLASS, 1);
+    return ((scc == PCIS_STORAGE_IDE && (pi & PCIP_STORAGE_IDE_MASTERDEV) &&
+	    ((pi & (PCIP_STORAGE_IDE_MODEPRIM | PCIP_STORAGE_IDE_MODESEC)) !=
 	      (PCIP_STORAGE_IDE_MODEPRIM | PCIP_STORAGE_IDE_MODESEC))) ||
-	    (!pci_read_config(dev, PCIR_BAR(0), 4) &&
-	     !pci_read_config(dev, PCIR_BAR(1), 4) &&
-	     !pci_read_config(dev, PCIR_BAR(2), 4) &&
-	     !pci_read_config(dev, PCIR_BAR(3), 4) &&
-	     !pci_read_config(dev, PCIR_BAR(5), 4)));
+	    (pci_read_config(dev, PCIR_BAR(0), 4) == 0 &&
+	     pci_read_config(dev, PCIR_BAR(1), 4) == 0 &&
+	     pci_read_config(dev, PCIR_BAR(2), 4) == 0 &&
+	     pci_read_config(dev, PCIR_BAR(3), 4) == 0 &&
+	     pci_read_config(dev, PCIR_BAR(5), 4) == 0));
 }
 
 int

--------------080402060406020200060409--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4725713F.5010409>