From owner-svn-src-all@FreeBSD.ORG Sun Feb 14 19:28:45 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 77D611065679; Sun, 14 Feb 2010 19:28:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 63CB98FC13; Sun, 14 Feb 2010 19:28:45 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1EJSjH1063269; Sun, 14 Feb 2010 19:28:45 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1EJSj1A063264; Sun, 14 Feb 2010 19:28:45 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201002141928.o1EJSj1A063264@svn.freebsd.org> From: Alexander Motin Date: Sun, 14 Feb 2010 19:28:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r203888 - in stable/8/sys/dev: ahci ata ata/chipsets X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Feb 2010 19:28:45 -0000 Author: mav Date: Sun Feb 14 19:28:45 2010 New Revision: 203888 URL: http://svn.freebsd.org/changeset/base/203888 Log: MFC r203030: Add support for SATA part of Marvell 88SE912x controllers to ahci(4). Limit early revisions from 6Gb/s to 3Gb/s by default, or they negotiate only 1.5Gb/s, when 3Gb/s devices connected. Add dummy driver for PATA part of these controllers, preventing generic driver attach them. It causes system freeze when SATA controller used after PATA was touched. Modified: stable/8/sys/dev/ahci/ahci.c stable/8/sys/dev/ata/ata-pci.c stable/8/sys/dev/ata/ata-pci.h stable/8/sys/dev/ata/chipsets/ata-marvell.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) stable/8/sys/netinet/ (props changed) Modified: stable/8/sys/dev/ahci/ahci.c ============================================================================== --- stable/8/sys/dev/ahci/ahci.c Sun Feb 14 19:23:05 2010 (r203887) +++ stable/8/sys/dev/ahci/ahci.c Sun Feb 14 19:28:45 2010 (r203888) @@ -98,6 +98,7 @@ MALLOC_DEFINE(M_AHCI, "AHCI driver", "AH static struct { uint32_t id; + uint8_t rev; const char *name; int quirks; #define AHCI_Q_NOFORCE 1 @@ -107,135 +108,138 @@ static struct { #define AHCI_Q_2CH 16 #define AHCI_Q_4CH 32 #define AHCI_Q_EDGEIS 64 +#define AHCI_Q_SATA2 128 } ahci_ids[] = { - {0x43801002, "ATI IXP600", 0}, - {0x43901002, "ATI IXP700", 0}, - {0x43911002, "ATI IXP700", 0}, - {0x43921002, "ATI IXP700", 0}, - {0x43931002, "ATI IXP700", 0}, - {0x43941002, "ATI IXP800", 0}, - {0x43951002, "ATI IXP800", 0}, - {0x26528086, "Intel ICH6", AHCI_Q_NOFORCE}, - {0x26538086, "Intel ICH6M", AHCI_Q_NOFORCE}, - {0x26818086, "Intel ESB2", 0}, - {0x26828086, "Intel ESB2", 0}, - {0x26838086, "Intel ESB2", 0}, - {0x27c18086, "Intel ICH7", 0}, - {0x27c38086, "Intel ICH7", 0}, - {0x27c58086, "Intel ICH7M", 0}, - {0x27c68086, "Intel ICH7M", 0}, - {0x28218086, "Intel ICH8", 0}, - {0x28228086, "Intel ICH8", 0}, - {0x28248086, "Intel ICH8", 0}, - {0x28298086, "Intel ICH8M", 0}, - {0x282a8086, "Intel ICH8M", 0}, - {0x29228086, "Intel ICH9", 0}, - {0x29238086, "Intel ICH9", 0}, - {0x29248086, "Intel ICH9", 0}, - {0x29258086, "Intel ICH9", 0}, - {0x29278086, "Intel ICH9", 0}, - {0x29298086, "Intel ICH9M", 0}, - {0x292a8086, "Intel ICH9M", 0}, - {0x292b8086, "Intel ICH9M", 0}, - {0x292c8086, "Intel ICH9M", 0}, - {0x292f8086, "Intel ICH9M", 0}, - {0x294d8086, "Intel ICH9", 0}, - {0x294e8086, "Intel ICH9M", 0}, - {0x3a058086, "Intel ICH10", 0}, - {0x3a228086, "Intel ICH10", 0}, - {0x3a258086, "Intel ICH10", 0}, - {0x3b228086, "Intel PCH", 0}, - {0x3b238086, "Intel PCH", 0}, - {0x3b248086, "Intel PCH", 0}, - {0x3b258086, "Intel PCH", 0}, - {0x3b298086, "Intel PCH", 0}, - {0x3b2b8086, "Intel PCH", 0}, - {0x3b2c8086, "Intel PCH", 0}, - {0x3b2f8086, "Intel PCH", 0}, - {0x2361197b, "JMicron JMB361", AHCI_Q_NOFORCE}, - {0x2363197b, "JMicron JMB363", AHCI_Q_NOFORCE}, - {0x2365197b, "JMicron JMB365", AHCI_Q_NOFORCE}, - {0x2366197b, "JMicron JMB366", AHCI_Q_NOFORCE}, - {0x2368197b, "JMicron JMB368", AHCI_Q_NOFORCE}, - {0x611111ab, "Marvell 88SX6111", AHCI_Q_NOFORCE|AHCI_Q_1CH|AHCI_Q_EDGEIS}, - {0x612111ab, "Marvell 88SX6121", AHCI_Q_NOFORCE|AHCI_Q_2CH|AHCI_Q_EDGEIS}, - {0x614111ab, "Marvell 88SX6141", AHCI_Q_NOFORCE|AHCI_Q_4CH|AHCI_Q_EDGEIS}, - {0x614511ab, "Marvell 88SX6145", AHCI_Q_NOFORCE|AHCI_Q_4CH|AHCI_Q_EDGEIS}, - {0x044c10de, "NVIDIA MCP65", 0}, - {0x044d10de, "NVIDIA MCP65", 0}, - {0x044e10de, "NVIDIA MCP65", 0}, - {0x044f10de, "NVIDIA MCP65", 0}, - {0x045c10de, "NVIDIA MCP65", 0}, - {0x045d10de, "NVIDIA MCP65", 0}, - {0x045e10de, "NVIDIA MCP65", 0}, - {0x045f10de, "NVIDIA MCP65", 0}, - {0x055010de, "NVIDIA MCP67", 0}, - {0x055110de, "NVIDIA MCP67", 0}, - {0x055210de, "NVIDIA MCP67", 0}, - {0x055310de, "NVIDIA MCP67", 0}, - {0x055410de, "NVIDIA MCP67", 0}, - {0x055510de, "NVIDIA MCP67", 0}, - {0x055610de, "NVIDIA MCP67", 0}, - {0x055710de, "NVIDIA MCP67", 0}, - {0x055810de, "NVIDIA MCP67", 0}, - {0x055910de, "NVIDIA MCP67", 0}, - {0x055A10de, "NVIDIA MCP67", 0}, - {0x055B10de, "NVIDIA MCP67", 0}, - {0x058410de, "NVIDIA MCP67", 0}, - {0x07f010de, "NVIDIA MCP73", 0}, - {0x07f110de, "NVIDIA MCP73", 0}, - {0x07f210de, "NVIDIA MCP73", 0}, - {0x07f310de, "NVIDIA MCP73", 0}, - {0x07f410de, "NVIDIA MCP73", 0}, - {0x07f510de, "NVIDIA MCP73", 0}, - {0x07f610de, "NVIDIA MCP73", 0}, - {0x07f710de, "NVIDIA MCP73", 0}, - {0x07f810de, "NVIDIA MCP73", 0}, - {0x07f910de, "NVIDIA MCP73", 0}, - {0x07fa10de, "NVIDIA MCP73", 0}, - {0x07fb10de, "NVIDIA MCP73", 0}, - {0x0ad010de, "NVIDIA MCP77", 0}, - {0x0ad110de, "NVIDIA MCP77", 0}, - {0x0ad210de, "NVIDIA MCP77", 0}, - {0x0ad310de, "NVIDIA MCP77", 0}, - {0x0ad410de, "NVIDIA MCP77", 0}, - {0x0ad510de, "NVIDIA MCP77", 0}, - {0x0ad610de, "NVIDIA MCP77", 0}, - {0x0ad710de, "NVIDIA MCP77", 0}, - {0x0ad810de, "NVIDIA MCP77", 0}, - {0x0ad910de, "NVIDIA MCP77", 0}, - {0x0ada10de, "NVIDIA MCP77", 0}, - {0x0adb10de, "NVIDIA MCP77", 0}, - {0x0ab410de, "NVIDIA MCP79", 0}, - {0x0ab510de, "NVIDIA MCP79", 0}, - {0x0ab610de, "NVIDIA MCP79", 0}, - {0x0ab710de, "NVIDIA MCP79", 0}, - {0x0ab810de, "NVIDIA MCP79", 0}, - {0x0ab910de, "NVIDIA MCP79", 0}, - {0x0aba10de, "NVIDIA MCP79", 0}, - {0x0abb10de, "NVIDIA MCP79", 0}, - {0x0abc10de, "NVIDIA MCP79", 0}, - {0x0abd10de, "NVIDIA MCP79", 0}, - {0x0abe10de, "NVIDIA MCP79", 0}, - {0x0abf10de, "NVIDIA MCP79", 0}, - {0x0d8410de, "NVIDIA MCP89", 0}, - {0x0d8510de, "NVIDIA MCP89", 0}, - {0x0d8610de, "NVIDIA MCP89", 0}, - {0x0d8710de, "NVIDIA MCP89", 0}, - {0x0d8810de, "NVIDIA MCP89", 0}, - {0x0d8910de, "NVIDIA MCP89", 0}, - {0x0d8a10de, "NVIDIA MCP89", 0}, - {0x0d8b10de, "NVIDIA MCP89", 0}, - {0x0d8c10de, "NVIDIA MCP89", 0}, - {0x0d8d10de, "NVIDIA MCP89", 0}, - {0x0d8e10de, "NVIDIA MCP89", 0}, - {0x0d8f10de, "NVIDIA MCP89", 0}, - {0x33491106, "VIA VT8251", 0}, - {0x62871106, "VIA VT8251", 0}, - {0x11841039, "SiS 966", 0}, - {0x11851039, "SiS 968", 0}, - {0x01861039, "SiS 968", 0}, - {0, NULL, 0} + {0x43801002, 0x00, "ATI IXP600", 0}, + {0x43901002, 0x00, "ATI IXP700", 0}, + {0x43911002, 0x00, "ATI IXP700", 0}, + {0x43921002, 0x00, "ATI IXP700", 0}, + {0x43931002, 0x00, "ATI IXP700", 0}, + {0x43941002, 0x00, "ATI IXP800", 0}, + {0x43951002, 0x00, "ATI IXP800", 0}, + {0x26528086, 0x00, "Intel ICH6", AHCI_Q_NOFORCE}, + {0x26538086, 0x00, "Intel ICH6M", AHCI_Q_NOFORCE}, + {0x26818086, 0x00, "Intel ESB2", 0}, + {0x26828086, 0x00, "Intel ESB2", 0}, + {0x26838086, 0x00, "Intel ESB2", 0}, + {0x27c18086, 0x00, "Intel ICH7", 0}, + {0x27c38086, 0x00, "Intel ICH7", 0}, + {0x27c58086, 0x00, "Intel ICH7M", 0}, + {0x27c68086, 0x00, "Intel ICH7M", 0}, + {0x28218086, 0x00, "Intel ICH8", 0}, + {0x28228086, 0x00, "Intel ICH8", 0}, + {0x28248086, 0x00, "Intel ICH8", 0}, + {0x28298086, 0x00, "Intel ICH8M", 0}, + {0x282a8086, 0x00, "Intel ICH8M", 0}, + {0x29228086, 0x00, "Intel ICH9", 0}, + {0x29238086, 0x00, "Intel ICH9", 0}, + {0x29248086, 0x00, "Intel ICH9", 0}, + {0x29258086, 0x00, "Intel ICH9", 0}, + {0x29278086, 0x00, "Intel ICH9", 0}, + {0x29298086, 0x00, "Intel ICH9M", 0}, + {0x292a8086, 0x00, "Intel ICH9M", 0}, + {0x292b8086, 0x00, "Intel ICH9M", 0}, + {0x292c8086, 0x00, "Intel ICH9M", 0}, + {0x292f8086, 0x00, "Intel ICH9M", 0}, + {0x294d8086, 0x00, "Intel ICH9", 0}, + {0x294e8086, 0x00, "Intel ICH9M", 0}, + {0x3a058086, 0x00, "Intel ICH10", 0}, + {0x3a228086, 0x00, "Intel ICH10", 0}, + {0x3a258086, 0x00, "Intel ICH10", 0}, + {0x3b228086, 0x00, "Intel PCH", 0}, + {0x3b238086, 0x00, "Intel PCH", 0}, + {0x3b248086, 0x00, "Intel PCH", 0}, + {0x3b258086, 0x00, "Intel PCH", 0}, + {0x3b298086, 0x00, "Intel PCH", 0}, + {0x3b2b8086, 0x00, "Intel PCH", 0}, + {0x3b2c8086, 0x00, "Intel PCH", 0}, + {0x3b2f8086, 0x00, "Intel PCH", 0}, + {0x2361197b, 0x00, "JMicron JMB361", AHCI_Q_NOFORCE}, + {0x2363197b, 0x00, "JMicron JMB363", AHCI_Q_NOFORCE}, + {0x2365197b, 0x00, "JMicron JMB365", AHCI_Q_NOFORCE}, + {0x2366197b, 0x00, "JMicron JMB366", AHCI_Q_NOFORCE}, + {0x2368197b, 0x00, "JMicron JMB368", AHCI_Q_NOFORCE}, + {0x611111ab, 0x00, "Marvell 88SX6111", AHCI_Q_NOFORCE|AHCI_Q_1CH|AHCI_Q_EDGEIS}, + {0x612111ab, 0x00, "Marvell 88SX6121", AHCI_Q_NOFORCE|AHCI_Q_2CH|AHCI_Q_EDGEIS}, + {0x614111ab, 0x00, "Marvell 88SX6141", AHCI_Q_NOFORCE|AHCI_Q_4CH|AHCI_Q_EDGEIS}, + {0x614511ab, 0x00, "Marvell 88SX6145", AHCI_Q_NOFORCE|AHCI_Q_4CH|AHCI_Q_EDGEIS}, + {0x91231b4b, 0x11, "Marvell 88SE912x", 0}, + {0x91231b4b, 0x00, "Marvell 88SE912x", AHCI_Q_EDGEIS|AHCI_Q_SATA2}, + {0x044c10de, 0x00, "NVIDIA MCP65", 0}, + {0x044d10de, 0x00, "NVIDIA MCP65", 0}, + {0x044e10de, 0x00, "NVIDIA MCP65", 0}, + {0x044f10de, 0x00, "NVIDIA MCP65", 0}, + {0x045c10de, 0x00, "NVIDIA MCP65", 0}, + {0x045d10de, 0x00, "NVIDIA MCP65", 0}, + {0x045e10de, 0x00, "NVIDIA MCP65", 0}, + {0x045f10de, 0x00, "NVIDIA MCP65", 0}, + {0x055010de, 0x00, "NVIDIA MCP67", 0}, + {0x055110de, 0x00, "NVIDIA MCP67", 0}, + {0x055210de, 0x00, "NVIDIA MCP67", 0}, + {0x055310de, 0x00, "NVIDIA MCP67", 0}, + {0x055410de, 0x00, "NVIDIA MCP67", 0}, + {0x055510de, 0x00, "NVIDIA MCP67", 0}, + {0x055610de, 0x00, "NVIDIA MCP67", 0}, + {0x055710de, 0x00, "NVIDIA MCP67", 0}, + {0x055810de, 0x00, "NVIDIA MCP67", 0}, + {0x055910de, 0x00, "NVIDIA MCP67", 0}, + {0x055A10de, 0x00, "NVIDIA MCP67", 0}, + {0x055B10de, 0x00, "NVIDIA MCP67", 0}, + {0x058410de, 0x00, "NVIDIA MCP67", 0}, + {0x07f010de, 0x00, "NVIDIA MCP73", 0}, + {0x07f110de, 0x00, "NVIDIA MCP73", 0}, + {0x07f210de, 0x00, "NVIDIA MCP73", 0}, + {0x07f310de, 0x00, "NVIDIA MCP73", 0}, + {0x07f410de, 0x00, "NVIDIA MCP73", 0}, + {0x07f510de, 0x00, "NVIDIA MCP73", 0}, + {0x07f610de, 0x00, "NVIDIA MCP73", 0}, + {0x07f710de, 0x00, "NVIDIA MCP73", 0}, + {0x07f810de, 0x00, "NVIDIA MCP73", 0}, + {0x07f910de, 0x00, "NVIDIA MCP73", 0}, + {0x07fa10de, 0x00, "NVIDIA MCP73", 0}, + {0x07fb10de, 0x00, "NVIDIA MCP73", 0}, + {0x0ad010de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad110de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad210de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad310de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad410de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad510de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad610de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad710de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad810de, 0x00, "NVIDIA MCP77", 0}, + {0x0ad910de, 0x00, "NVIDIA MCP77", 0}, + {0x0ada10de, 0x00, "NVIDIA MCP77", 0}, + {0x0adb10de, 0x00, "NVIDIA MCP77", 0}, + {0x0ab410de, 0x00, "NVIDIA MCP79", 0}, + {0x0ab510de, 0x00, "NVIDIA MCP79", 0}, + {0x0ab610de, 0x00, "NVIDIA MCP79", 0}, + {0x0ab710de, 0x00, "NVIDIA MCP79", 0}, + {0x0ab810de, 0x00, "NVIDIA MCP79", 0}, + {0x0ab910de, 0x00, "NVIDIA MCP79", 0}, + {0x0aba10de, 0x00, "NVIDIA MCP79", 0}, + {0x0abb10de, 0x00, "NVIDIA MCP79", 0}, + {0x0abc10de, 0x00, "NVIDIA MCP79", 0}, + {0x0abd10de, 0x00, "NVIDIA MCP79", 0}, + {0x0abe10de, 0x00, "NVIDIA MCP79", 0}, + {0x0abf10de, 0x00, "NVIDIA MCP79", 0}, + {0x0d8410de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8510de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8610de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8710de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8810de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8910de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8a10de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8b10de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8c10de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8d10de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8e10de, 0x00, "NVIDIA MCP89", 0}, + {0x0d8f10de, 0x00, "NVIDIA MCP89", 0}, + {0x33491106, 0x00, "VIA VT8251", 0}, + {0x62871106, 0x00, "VIA VT8251", 0}, + {0x11841039, 0x00, "SiS 966", 0}, + {0x11851039, 0x00, "SiS 968", 0}, + {0x01861039, 0x00, "SiS 968", 0}, + {0x00000000, 0x00, NULL, 0} }; static int @@ -244,6 +248,7 @@ ahci_probe(device_t dev) char buf[64]; int i, valid = 0; uint32_t devid = pci_get_devid(dev); + uint8_t revid = pci_get_revid(dev); /* Is this a possible AHCI candidate? */ if (pci_get_class(dev) == PCIC_STORAGE && @@ -253,6 +258,7 @@ ahci_probe(device_t dev) /* Is this a known AHCI chip? */ for (i = 0; ahci_ids[i].id != 0; i++) { if (ahci_ids[i].id == devid && + ahci_ids[i].rev <= revid && (valid || !(ahci_ids[i].quirks & AHCI_Q_NOFORCE))) { /* Do not attach JMicrons with single PCI function. */ if (pci_get_vendor(dev) == 0x197b && @@ -276,12 +282,14 @@ ahci_ata_probe(device_t dev) char buf[64]; int i; uint32_t devid = pci_get_devid(dev); + uint8_t revid = pci_get_revid(dev); if ((intptr_t)device_get_ivars(dev) >= 0) return (ENXIO); /* Is this a known AHCI chip? */ for (i = 0; ahci_ids[i].id != 0; i++) { - if (ahci_ids[i].id == devid) { + if (ahci_ids[i].id == devid && + ahci_ids[i].rev <= revid) { snprintf(buf, sizeof(buf), "%s AHCI SATA controller", ahci_ids[i].name); device_set_desc_copy(dev, buf); @@ -299,11 +307,14 @@ ahci_attach(device_t dev) device_t child; int error, unit, speed, i; uint32_t devid = pci_get_devid(dev); + uint8_t revid = pci_get_revid(dev); u_int32_t version; ctlr->dev = dev; i = 0; - while (ahci_ids[i].id != 0 && ahci_ids[i].id != devid) + while (ahci_ids[i].id != 0 && + (ahci_ids[i].id != devid || + ahci_ids[i].rev > revid)) i++; ctlr->quirks = ahci_ids[i].quirks; resource_int_value(device_get_name(dev), @@ -800,6 +811,8 @@ ahci_ch_attach(device_t dev) pci_get_subdevice(ctlr->dev) == 0x81e4 && ch->unit == 0) sata_rev = 1; + if (ch->quirks & AHCI_Q_SATA2) + sata_rev = 2; resource_int_value(device_get_name(dev), device_get_unit(dev), "sata_rev", &sata_rev); for (i = 0; i < 16; i++) { Modified: stable/8/sys/dev/ata/ata-pci.c ============================================================================== --- stable/8/sys/dev/ata/ata-pci.c Sun Feb 14 19:23:05 2010 (r203887) +++ stable/8/sys/dev/ata/ata-pci.c Sun Feb 14 19:28:45 2010 (r203888) @@ -877,6 +877,7 @@ ata_pcivendor2str(device_t dev) case ATA_ITE_ID: return "ITE"; case ATA_JMICRON_ID: return "JMicron"; case ATA_MARVELL_ID: return "Marvell"; + case ATA_MARVELL2_ID: return "Marvell"; case ATA_NATIONAL_ID: return "National"; case ATA_NETCELL_ID: return "Netcell"; case ATA_NVIDIA_ID: return "nVidia"; Modified: stable/8/sys/dev/ata/ata-pci.h ============================================================================== --- stable/8/sys/dev/ata/ata-pci.h Sun Feb 14 19:23:05 2010 (r203887) +++ stable/8/sys/dev/ata/ata-pci.h Sun Feb 14 19:28:45 2010 (r203888) @@ -234,6 +234,7 @@ struct ata_pci_controller { #define ATA_M88SX6121 0x612111ab #define ATA_M88SX6141 0x614111ab #define ATA_M88SX6145 0x614511ab +#define ATA_MARVELL2_ID 0x1b4b #define ATA_MICRON_ID 0x1042 #define ATA_MICRON_RZ1000 0x10001042 Modified: stable/8/sys/dev/ata/chipsets/ata-marvell.c ============================================================================== --- stable/8/sys/dev/ata/chipsets/ata-marvell.c Sun Feb 14 19:23:05 2010 (r203887) +++ stable/8/sys/dev/ata/chipsets/ata-marvell.c Sun Feb 14 19:28:45 2010 (r203888) @@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$"); static int ata_marvell_chipinit(device_t dev); static int ata_marvell_ch_attach(device_t dev); static int ata_marvell_setmode(device_t dev, int target, int mode); +static int ata_marvell_dummy_chipinit(device_t dev); static int ata_marvell_edma_ch_attach(device_t dev); static int ata_marvell_edma_ch_detach(device_t dev); static int ata_marvell_edma_status(device_t dev); @@ -70,7 +71,7 @@ static void ata_marvell_edma_dmainit(dev #define MV_6042 62 #define MV_7042 72 #define MV_61XX 61 - +#define MV_91XX 91 /* * Marvell chipset support functions @@ -113,9 +114,11 @@ ata_marvell_probe(device_t dev) { ATA_M88SX6121, 0, 2, MV_61XX, ATA_UDMA6, "88SX6121" }, { ATA_M88SX6141, 0, 4, MV_61XX, ATA_UDMA6, "88SX6141" }, { ATA_M88SX6145, 0, 4, MV_61XX, ATA_UDMA6, "88SX6145" }, + { 0x91a41b4b, 0, 0, MV_91XX, ATA_UDMA6, "88SE912x" }, { 0, 0, 0, 0, 0, 0}}; - if (pci_get_vendor(dev) != ATA_MARVELL_ID) + if (pci_get_vendor(dev) != ATA_MARVELL_ID && + pci_get_vendor(dev) != ATA_MARVELL2_ID) return ENXIO; if (!(ctlr->chip = ata_match_chip(dev, ids))) @@ -133,6 +136,9 @@ ata_marvell_probe(device_t dev) case MV_61XX: ctlr->chipinit = ata_marvell_chipinit; break; + case MV_91XX: + ctlr->chipinit = ata_marvell_dummy_chipinit; + break; } return (BUS_PROBE_DEFAULT); } @@ -190,6 +196,15 @@ ata_marvell_setmode(device_t dev, int ta return (mode); } +static int +ata_marvell_dummy_chipinit(device_t dev) +{ + struct ata_pci_controller *ctlr = device_get_softc(dev); + + ctlr->channels = 0; + return (0); +} + int ata_marvell_edma_chipinit(device_t dev) {