Index: dev/ic/isp_netbsd.h =================================================================== RCS file: /cvsroot/src/sys/dev/ic/isp_netbsd.h,v retrieving revision 1.76 diff -u -p -r1.76 isp_netbsd.h --- dev/ic/isp_netbsd.h 20 Sep 2019 14:20:45 -0000 1.76 +++ dev/ic/isp_netbsd.h 17 Feb 2026 02:32:35 -0000 @@ -86,7 +86,8 @@ struct isposinfo { uint32_t loop_down_limit; uint32_t gone_device_time; unsigned int : 16, - : 8, + : 7, + use_dma64 : 1, gdt_running : 1, loop_checked : 1, mbox_sleeping : 1, @@ -102,6 +103,7 @@ struct isposinfo { uint16_t exec_throttle; struct lwp * thread; }; +#define isp_use_dma64 isp_osinfo.use_dma64 #define isp_dmatag isp_osinfo.dmatag #define isp_rqdmap isp_osinfo.rqdmap #define isp_rsdmap isp_osinfo.rsdmap Index: dev/pci/isp_pci.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/isp_pci.c,v retrieving revision 1.122 diff -u -p -r1.122 isp_pci.c --- dev/pci/isp_pci.c 10 Nov 2019 21:16:36 -0000 1.122 +++ dev/pci/isp_pci.c 17 Feb 2026 02:32:36 -0000 @@ -710,7 +710,18 @@ isp_pci_attach(device_t parent, device_t aprint_normal("%s", dstring); } - isp->isp_dmatag = pa->pa_dmat; + /* + * XXX isp_intr() seems to have some logic error + * XXX with respect to RQSTYPE_A64, so just avoid + * XXX it for now. + */ +#if 0 + if (pci_dma64_available(pa)) { + isp->isp_dmatag = pa->pa_dmat64; + isp->isp_use_dma64 = 1; + } else +#endif + isp->isp_dmatag = pa->pa_dmat; isp->isp_revision = rev; /* @@ -1343,7 +1354,7 @@ isp_pci_dmasetup(struct ispsoftc *isp, s int error; uint32_t flag, flg2; - if (sizeof (bus_addr_t) > 4) { + if (isp->isp_use_dma64) { if (rq->req_header.rqs_entry_type == RQSTYPE_T2RQS) { rq->req_header.rqs_entry_type = RQSTYPE_T3RQS; } else if (rq->req_header.rqs_entry_type == RQSTYPE_REQUEST) {