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;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to