Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Nov 2017 22:09:59 +0000 (UTC)
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r325453 - head/sys/powerpc/mpc85xx
Message-ID:  <201711052209.vA5M9xPD098533@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhibbits
Date: Sun Nov  5 22:09:59 2017
New Revision: 325453
URL: https://svnweb.freebsd.org/changeset/base/325453

Log:
  Fix an off-by-one error missed in the initial commit of this driver
  
  When the segment count is > 16 it spills into an 'indirect descriptor list',
  which immediately follows the main table, but the indirect list is entry 15, so
  needs to be skipped for the general list.

Modified:
  head/sys/powerpc/mpc85xx/fsl_sata.c

Modified: head/sys/powerpc/mpc85xx/fsl_sata.c
==============================================================================
--- head/sys/powerpc/mpc85xx/fsl_sata.c	Sun Nov  5 22:00:54 2017	(r325452)
+++ head/sys/powerpc/mpc85xx/fsl_sata.c	Sun Nov  5 22:09:59 2017	(r325453)
@@ -988,11 +988,12 @@ fsl_sata_dmasetprd(void *arg, bus_dma_segment_t *segs,
 			prd[j].dba = FSL_SATA_CTP_BUS(ch, slot) +
 				     FSL_SATA_PRD_OFFSET(j+1);
 			j++;
+			extlen = 0;
 		}
 		len = segs[i].ds_len;
 		len = roundup2(len, sizeof(uint32_t));
-		prd[i].dba = htole32((uint32_t)segs[i].ds_addr);
-		prd[i].dwc_flg = htole32(FSL_SATA_PRD_SNOOP | len);
+		prd[j].dba = htole32((uint32_t)segs[i].ds_addr);
+		prd[j].dwc_flg = htole32(FSL_SATA_PRD_SNOOP | len);
 		slot->ttl += len;
 		if (j > FSL_SATA_PRD_MAX_DIRECT)
 			extlen += len;



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