Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: src/sys/dev



Module Name:    src
Committed By:   thorpej
Date:           Sun Jul 26 23:43:27 UTC 2026

Modified Files:
        src/sys/dev/ic: isp_netbsd.h
        src/sys/dev/pci: isp_pci.c

Log Message:
It has been observed in the wild that some individual instances of
ISP10[24]0 controllers don't seem to like getting a 64-bit DMA address
from our driver (at least, there seems to be some sort of incorrect
handling vis a vis the RQSTYPE_A64 message in isp_intr()).

Upon inspection, it was noted that in isp_pci_dmasetup(), the decision
to use RQSTYPE_T3RQS vs RQSTYPE_T2RQS was conditional on sizeof(bus_addr_t)
being larger than sizeof(uint32_t).

However, this isn't the correct predicate; instead, the choice should
be dependent on what the largest value that bus_addr_t will have.  As
it happans, the PCI layer makes a distinction between 32-bit and 64-bit
DMA windows, and isp_pci's use of the regular "pa->pa_dmat" would ensure
that the DMA address always fits within 32-bits.  Therefore, there was
never a reason to use RQSTYPE_T3RQS, regardless of the size of bus_addr_t.

As such, we tweak the code to depend explicitly on a new isp_use_dma64
flag, which is initialized by the bus front-end according to the DMA
window selection that's been made.

Along those lines, add code to correctly determine if a 64-bit DMA
window should be used, but leave it disabled for now, until we can
sort out the issue with RQSTYPE_A64.


To generate a diff of this commit:
cvs rdiff -u -r1.76 -r1.77 src/sys/dev/ic/isp_netbsd.h
cvs rdiff -u -r1.122 -r1.123 src/sys/dev/pci/isp_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.




Home | Main Index | Thread Index | Old Index