From nobody@FreeBSD.org  Thu Jul 17 10:47:05 2008
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 624981065678
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 17 Jul 2008 10:47:05 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 199C18FC12
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 17 Jul 2008 10:47:05 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m6HAl4RM067270
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 17 Jul 2008 10:47:04 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.2/8.14.1/Submit) id m6HAl4UM067269;
	Thu, 17 Jul 2008 10:47:04 GMT
	(envelope-from nobody)
Message-Id: <200807171047.m6HAl4UM067269@www.freebsd.org>
Date: Thu, 17 Jul 2008 10:47:04 GMT
From: "M.R. Fremouw" <maarten@fremouw.nl>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Add support for AHCI on MCP67 chipset
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         125713
>Category:       kern
>Synopsis:       [ata] [patch] add support for AHCI on MCP67 chipset
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    sos
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jul 17 10:50:02 UTC 2008
>Closed-Date:    Wed Mar 25 18:39:35 UTC 2009
>Last-Modified:  Wed Mar 25 18:39:35 UTC 2009
>Originator:     M.R. Fremouw
>Release:        FreeBSD 7.0-STABLE
>Organization:
>Environment:
FreeBSD UberAap.lan 7.0-STABLE FreeBSD 7.0-STABLE #10: Thu Jul 17 09:19:36 UTC 2008     root@UberAap.lan:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
The attached patch adds support for AHCI in combination with the Nvidia MCP67 chipset.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

diff -Naur sys.orig/dev/ata/ata-chipset.c sys/dev/ata/ata-chipset.c
--- sys.orig/dev/ata/ata-chipset.c	2008-07-16 16:23:41.000000000 +0000
+++ sys/dev/ata/ata-chipset.c	2008-07-16 16:28:55.000000000 +0000
@@ -3047,6 +3047,8 @@
      { ATA_NFORCE_MCP61_S3, 0, 0,         NV4|NVQ, ATA_SA300, "nForce MCP61" },
      { ATA_NFORCE_MCP65,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP65" },
      { ATA_NFORCE_MCP67,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP67" },
+     { ATA_NFORCE_MCP67_S1, 0, 0,         AHCI,    ATA_SA300, "nForce MCP67" },
+     { ATA_NFORCE_MCP67_S2, 0, 0,         AHCI,    ATA_SA300, "nForce MCP67" }, 
      { ATA_NFORCE_MCP73,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP73" },
      { ATA_NFORCE_MCP77,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP77" },
      { 0, 0, 0, 0, 0, 0}} ;
@@ -3077,6 +3079,9 @@
 						   &ctlr->r_rid2, RF_ACTIVE))) {
 	    int offset = ctlr->chip->cfg2 & NV4 ? 0x0440 : 0x0010;
 
+            if(ctlr->chip->cfg2 == AHCI)
+                return ata_ahci_chipinit(dev);
+
 	    ctlr->allocate = ata_nvidia_allocate;
 	    ctlr->reset = ata_nvidia_reset;
 
diff -Naur sys.orig/dev/ata/ata-pci.h sys/dev/ata/ata-pci.h
--- sys.orig/dev/ata/ata-pci.h	2008-07-16 16:23:42.000000000 +0000
+++ sys/dev/ata/ata-pci.h	2008-07-16 16:26:45.000000000 +0000
@@ -238,6 +238,8 @@
 #define ATA_NFORCE_MCP61_S3     0x03f710de
 #define ATA_NFORCE_MCP65        0x044810de
 #define ATA_NFORCE_MCP67        0x056010de
+#define ATA_NFORCE_MCP67_S1     0x055410de // AHCI
+#define ATA_NFORCE_MCP67_S2     0x058410de // Linux AHCI
 #define ATA_NFORCE_MCP73        0x056c10de
 #define ATA_NFORCE_MCP77        0x075910de
 


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->philip 
Responsible-Changed-By: philip 
Responsible-Changed-When: Fri Oct 17 14:17:55 UTC 2008 
Responsible-Changed-Why:  
I'll take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125713 
Responsible-Changed-From-To: philip->sos 
Responsible-Changed-By: philip 
Responsible-Changed-When: Fri Oct 17 14:27:45 UTC 2008 
Responsible-Changed-Why:  
Since the "modularization", a number of tables changed and moved around 
a bit.  Soren can probably adapt and modify this patch to the new world 
order in no time.  Soren...? 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125713 
State-Changed-From-To: open->feedback 
State-Changed-By: mav 
State-Changed-When: Mon Feb 16 23:13:02 UTC 2009 
State-Changed-Why:  
I think this patch is not needed now. According to some pciconf -lv 
outputs I have found on the net, this is usual AHCI controller and 
should be detected without this quirks. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125713 
State-Changed-From-To: feedback->patched 
State-Changed-By: mav 
State-Changed-When: Sun Feb 22 18:35:59 UTC 2009 
State-Changed-Why:  
Alike patch committed to 8-CURRENT. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125713 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/125713: commit references a PR
Date: Wed, 25 Mar 2009 14:26:58 +0000 (UTC)

 Author: mav
 Date: Wed Mar 25 14:26:38 2009
 New Revision: 190414
 URL: http://svn.freebsd.org/changeset/base/190414
 
 Log:
   MFC rev. 188846:
   
   Handle nForce MCP67 and MCP73 SATA controllers as AHCI. They report
   itself as ATA RAID, but generic ATAPCI driver unable to detect drives
   there. AHCI driver reported to handle them fine. Linux does the same.
   
   Submitted by:	Andrey V. Elsukov on stable@
   PR:		kern/125713
   Approved by:	re (kib)
 
 Modified:
   stable/7/sys/   (props changed)
   stable/7/sys/contrib/pf/   (props changed)
   stable/7/sys/dev/ata/ata-chipset.c
   stable/7/sys/dev/ata/ata-pci.h
   stable/7/sys/dev/ath/ath_hal/   (props changed)
   stable/7/sys/dev/cxgb/   (props changed)
 
 Modified: stable/7/sys/dev/ata/ata-chipset.c
 ==============================================================================
 --- stable/7/sys/dev/ata/ata-chipset.c	Wed Mar 25 14:17:08 2009	(r190413)
 +++ stable/7/sys/dev/ata/ata-chipset.c	Wed Mar 25 14:26:38 2009	(r190414)
 @@ -3131,7 +3131,31 @@ ata_nvidia_ident(device_t dev)
       { ATA_NFORCE_MCP61_S3, 0, 0,         NV4|NVQ, ATA_SA300, "nForce MCP61" },
       { ATA_NFORCE_MCP65,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP65" },
       { ATA_NFORCE_MCP67,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A0, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A1, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A2, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A3, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A4, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A5, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A6, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A7, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A8, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_A9, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_AA, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
 +     { ATA_NFORCE_MCP67_AB, 0, NVAHCI,  0, ATA_SA300, "nForce MCP67" },
       { ATA_NFORCE_MCP73,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A0, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A1, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A2, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A3, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A4, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A5, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A6, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A7, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A8, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_A9, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_AA, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
 +     { ATA_NFORCE_MCP73_AB, 0, NVAHCI,  0, ATA_SA300, "nForce MCP73" },
       { ATA_NFORCE_MCP77,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP77" },
       { 0, 0, 0, 0, 0, 0}} ;
  
 @@ -3139,7 +3163,10 @@ ata_nvidia_ident(device_t dev)
  	return ENXIO;
  
      ata_set_desc(dev);
 -    ctlr->chipinit = ata_nvidia_chipinit;
 +    if (ctlr->chip->cfg1 & NVAHCI)
 +    	ctlr->chipinit = ata_ahci_chipinit;
 +    else
 +    	ctlr->chipinit = ata_nvidia_chipinit;
      return 0;
  }
  
 
 Modified: stable/7/sys/dev/ata/ata-pci.h
 ==============================================================================
 --- stable/7/sys/dev/ata/ata-pci.h	Wed Mar 25 14:17:08 2009	(r190413)
 +++ stable/7/sys/dev/ata/ata-pci.h	Wed Mar 25 14:26:38 2009	(r190414)
 @@ -250,8 +250,32 @@ struct ata_connect_task {
  #define ATA_NFORCE_MCP61_S2     0x03f610de
  #define ATA_NFORCE_MCP61_S3     0x03f710de
  #define ATA_NFORCE_MCP65        0x044810de
 +#define ATA_NFORCE_MCP67_A0     0x055010de
 +#define ATA_NFORCE_MCP67_A1     0x055110de
 +#define ATA_NFORCE_MCP67_A2     0x055210de
 +#define ATA_NFORCE_MCP67_A3     0x055310de
 +#define ATA_NFORCE_MCP67_A4     0x055410de
 +#define ATA_NFORCE_MCP67_A5     0x055510de
 +#define ATA_NFORCE_MCP67_A6     0x055610de
 +#define ATA_NFORCE_MCP67_A7     0x055710de
 +#define ATA_NFORCE_MCP67_A8     0x055810de
 +#define ATA_NFORCE_MCP67_A9     0x055910de
 +#define ATA_NFORCE_MCP67_AA     0x055A10de
 +#define ATA_NFORCE_MCP67_AB     0x055B10de
  #define ATA_NFORCE_MCP67        0x056010de
  #define ATA_NFORCE_MCP73        0x056c10de
 +#define ATA_NFORCE_MCP73_A0     0x07f010de
 +#define ATA_NFORCE_MCP73_A1     0x07f110de
 +#define ATA_NFORCE_MCP73_A2     0x07f210de
 +#define ATA_NFORCE_MCP73_A3     0x07f310de
 +#define ATA_NFORCE_MCP73_A4     0x07f410de
 +#define ATA_NFORCE_MCP73_A5     0x07f510de
 +#define ATA_NFORCE_MCP73_A6     0x07f610de
 +#define ATA_NFORCE_MCP73_A7     0x07f710de
 +#define ATA_NFORCE_MCP73_A8     0x07f810de
 +#define ATA_NFORCE_MCP73_A9     0x07f910de
 +#define ATA_NFORCE_MCP73_AA     0x07fa10de
 +#define ATA_NFORCE_MCP73_AB     0x07fb10de
  #define ATA_NFORCE_MCP77        0x075910de
  
  #define ATA_PROMISE_ID          0x105a
 @@ -458,6 +482,7 @@ struct ata_connect_task {
  #define NVIDIA          0x0004
  #define NV4             0x0010
  #define NVQ             0x0020
 +#define NVAHCI          0x0040
  #define VIACLK          0x0100
  #define VIABUG          0x0200
  #define VIABAR          0x0400
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: mav 
State-Changed-When: Wed Mar 25 18:39:08 UTC 2009 
State-Changed-Why:  
Patch merged to 7-STABLE. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=125713 
>Unformatted:
