Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Dec 2009 13:10:10 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r200291 - head/sys/dev/siis
Message-ID:  <200912091310.nB9DAAMG026005@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Wed Dec  9 13:10:10 2009
New Revision: 200291
URL: http://svn.freebsd.org/changeset/base/200291

Log:
  Increase Max Read Request Size for PCIe chips from 512 to 1024 bytes.
  It gives those beasts additional 10% of write bandwidth.

Modified:
  head/sys/dev/siis/siis.c

Modified: head/sys/dev/siis/siis.c
==============================================================================
--- head/sys/dev/siis/siis.c	Wed Dec  9 11:00:00 2009	(r200290)
+++ head/sys/dev/siis/siis.c	Wed Dec  9 13:10:10 2009	(r200291)
@@ -231,7 +231,20 @@ static int
 siis_resume(device_t dev)
 {
 	struct siis_controller *ctlr = device_get_softc(dev);
+	int cap;
+	uint16_t val;
 
+	/* Set PCIe max read request size to at least 1024 bytes */
+	if (pci_find_extcap(dev, PCIY_EXPRESS, &cap) == 0) {
+		val = pci_read_config(dev,
+		    cap + PCIR_EXPRESS_DEVICE_CTL, 2);
+		if ((val & PCIM_EXP_CTL_MAX_READ_REQUEST) < 0x3000) {
+			val &= ~PCIM_EXP_CTL_MAX_READ_REQUEST;
+			val |= 0x3000;
+			pci_write_config(dev,
+			    cap + PCIR_EXPRESS_DEVICE_CTL, val, 2);
+		}
+	}
 	/* Put controller into reset state. */
 	ctlr->gctl |= SIIS_GCTL_GRESET;
 	ATA_OUTL(ctlr->r_gmem, SIIS_GCTL, ctlr->gctl);



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