kern/121521: commit references a PR

dfilter service dfilter at FreeBSD.ORG
Tue Jan 19 13:30:12 UTC 2010


The following reply was made to PR kern/121521; it has been noted by GNATS.

From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: kern/121521: commit references a PR
Date: Tue, 19 Jan 2010 13:24:27 +0000 (UTC)

 Author: mav
 Date: Tue Jan 19 13:24:11 2010
 New Revision: 202619
 URL: http://svn.freebsd.org/changeset/base/202619
 
 Log:
   MFC r200754:
   Add VIA CX700/VX800 chipsets SATA/PATA support.
   
   PR:             kern/121521
 
 Modified:
   stable/8/sys/dev/ata/ata-pci.h
   stable/8/sys/dev/ata/chipsets/ata-via.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)
 
 Modified: stable/8/sys/dev/ata/ata-pci.h
 ==============================================================================
 --- stable/8/sys/dev/ata/ata-pci.h	Tue Jan 19 13:21:25 2010	(r202618)
 +++ stable/8/sys/dev/ata/ata-pci.h	Tue Jan 19 13:24:11 2010	(r202619)
 @@ -482,6 +482,11 @@ struct ata_pci_controller {
  #define ATA_VIA6410             0x31641106
  #define ATA_VIA6420             0x31491106
  #define ATA_VIA6421             0x32491106
 +#define ATA_VIACX700IDE         0x05811106
 +#define ATA_VIACX700            0x83241106
 +#define ATA_VIASATAIDE          0x53241106
 +#define ATA_VIAVX800            0x83531106
 +#define ATA_VIAVX855            0x84091106
  
  /* global prototypes ata-pci.c */
  int ata_pci_probe(device_t dev);
 
 Modified: stable/8/sys/dev/ata/chipsets/ata-via.c
 ==============================================================================
 --- stable/8/sys/dev/ata/chipsets/ata-via.c	Tue Jan 19 13:21:25 2010	(r202618)
 +++ stable/8/sys/dev/ata/chipsets/ata-via.c	Tue Jan 19 13:24:11 2010	(r202619)
 @@ -59,6 +59,9 @@ static void ata_via_reset(device_t dev);
  static int ata_via_old_setmode(device_t dev, int target, int mode);
  static void ata_via_southbridge_fixup(device_t dev);
  static int ata_via_new_setmode(device_t dev, int target, int mode);
 +static int ata_via_sata_ch_attach(device_t dev);
 +static int ata_via_sata_getrev(device_t dev, int target);
 +static int ata_via_sata_setmode(device_t dev, int target, int mode);
  
  /* misc defines */
  #define VIA33           0
 @@ -70,6 +73,7 @@ static int ata_via_new_setmode(device_t 
  #define VIABUG          0x02
  #define VIABAR          0x04
  #define VIAAHCI         0x08
 +#define VIASATA         0x10
  
  
  /*
 @@ -98,6 +102,9 @@ ata_via_probe(device_t dev)
       { ATA_VIA8237_5372, 0x00, VIA133, 0x00, ATA_UDMA6, "8237" },
       { ATA_VIA8237_7372, 0x00, VIA133, 0x00, ATA_UDMA6, "8237" },
       { ATA_VIA8251,   0x00, VIA133, 0x00,    ATA_UDMA6, "8251" },
 +     { ATA_VIACX700,  0x00, VIA133, VIASATA, ATA_SA150, "CX700" },
 +     { ATA_VIAVX800,  0x00, VIA133, VIASATA, ATA_SA150, "VX800" },
 +     { ATA_VIAVX855,  0x00, VIA133, 0x00,    ATA_UDMA6, "VX855" },
       { 0, 0, 0, 0, 0, 0 }};
      static struct ata_chip_id new_ids[] =
      {{ ATA_VIA6410,   0x00, 0,      0x00,    ATA_UDMA6, "6410" },
 @@ -113,7 +120,9 @@ ata_via_probe(device_t dev)
      if (pci_get_vendor(dev) != ATA_VIA_ID)
  	return ENXIO;
  
 -    if (pci_get_devid(dev) == ATA_VIA82C571) {
 +    if (pci_get_devid(dev) == ATA_VIA82C571 ||
 +	pci_get_devid(dev) == ATA_VIACX700IDE ||
 +	pci_get_devid(dev) == ATA_VIASATAIDE) {
  	if (!(ctlr->chip = ata_find_chip(dev, ids, -99))) 
  	    return ENXIO;
      }
 @@ -134,12 +143,21 @@ ata_via_chipinit(device_t dev)
  
      if (ata_setup_interrupt(dev, ata_generic_intr))
  	return ENXIO;
 -    
 -    if (ctlr->chip->max_dma >= ATA_SA150) {
 -	/* do we have AHCI capability ? */
 -	if ((ctlr->chip->cfg2 == VIAAHCI) && ata_ahci_chipinit(dev) != ENXIO)
 -	    return 0;
  
 +    /* AHCI SATA */
 +    if (ctlr->chip->cfg2 & VIAAHCI) {
 +	if (ata_ahci_chipinit(dev) != ENXIO)
 +	    return (0);
 +    }
 +    /* 2 SATA without SATA registers on first channel + 1 PATA on second */
 +    if (ctlr->chip->cfg2 & VIASATA) {
 +	ctlr->ch_attach = ata_via_sata_ch_attach;
 +	ctlr->setmode = ata_via_sata_setmode;
 +	ctlr->getrev = ata_via_sata_getrev;
 +	return 0;
 +    }
 +    /* Legacy SATA/SATA+PATA with SATA registers in BAR(5). */
 +    if (ctlr->chip->max_dma >= ATA_SA150) {
  	ctlr->r_type2 = SYS_RES_IOPORT;
  	ctlr->r_rid2 = PCIR_BAR(5);
  	if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2,
 @@ -148,7 +166,6 @@ ata_via_chipinit(device_t dev)
  	    ctlr->ch_detach = ata_via_ch_detach;
  	    ctlr->reset = ata_via_reset;
  	}
 -
  	if (ctlr->chip->cfg2 & VIABAR) {
  	    ctlr->channels = 3;
  	    ctlr->setmode = ata_via_new_setmode;
 @@ -365,5 +382,37 @@ ata_via_southbridge_fixup(device_t dev)
      free(children, M_TEMP);
  }
  
 +static int
 +ata_via_sata_ch_attach(device_t dev)
 +{
 +	struct ata_channel *ch = device_get_softc(dev);
 +
 +	if (ata_pci_ch_attach(dev))
 +		return ENXIO;
 +	if (ch->unit == 0)
 +		ch->flags |= ATA_SATA;
 +	return (0);
 +}
 +
 +static int
 +ata_via_sata_getrev(device_t dev, int target)
 +{
 +	struct ata_channel *ch = device_get_softc(dev);
 +
 +	if (ch->unit == 0)
 +		return (1);
 +	return (0);
 +}
 +
 +static int
 +ata_via_sata_setmode(device_t dev, int target, int mode)
 +{
 +	struct ata_channel *ch = device_get_softc(dev);
 +
 +	if (ch->unit == 0)
 +		return (mode);
 +	return (ata_via_old_setmode(dev, target, mode));
 +}
 +
  ATA_DECLARE_DRIVER(ata_via);
  MODULE_DEPEND(ata_via, ata_ahci, 1, 1, 1);
 _______________________________________________
 svn-src-all at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
 


More information about the freebsd-bugs mailing list