summaryrefslogtreecommitdiffstats
path: root/sys/dev/isp/isp_pci.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2013-11-10 23:48:16 +0000
committermav <mav@FreeBSD.org>2013-11-10 23:48:16 +0000
commitb5ebe2e35e78b419af1fd73654a125ae8a4b14de (patch)
tree39fbe7c313bf74e3e4a83d4b4f8b665a5d76d831 /sys/dev/isp/isp_pci.c
parent963d7e1a2a5801201ee0279e94acdb3d2ab5d308 (diff)
downloadFreeBSD-src-b5ebe2e35e78b419af1fd73654a125ae8a4b14de.zip
FreeBSD-src-b5ebe2e35e78b419af1fd73654a125ae8a4b14de.tar.gz
Use relaxed (write-only) memory barriers when writing some of queue index
registers (for now on ISP2400+). We never read those registers back and AFAIK their semantics does not require any immediate reaction on write.
Diffstat (limited to 'sys/dev/isp/isp_pci.c')
-rw-r--r--sys/dev/isp/isp_pci.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c
index 782178c..86c5a1d 100644
--- a/sys/dev/isp/isp_pci.c
+++ b/sys/dev/isp/isp_pci.c
@@ -1432,6 +1432,15 @@ isp_pci_wr_reg_2400(ispsoftc_t *isp, int regoff, uint32_t val)
case BIU2400_GPIOE:
case BIU2400_HSEMA:
BXW4(isp, IspVirt2Off(isp, regoff), val);
+#ifdef MEMORYBARRIERW
+ if (regoff == BIU2400_REQINP ||
+ regoff == BIU2400_RSPOUTP ||
+ regoff == BIU2400_PRI_REQINP ||
+ regoff == BIU2400_ATIO_RSPOUTP)
+ MEMORYBARRIERW(isp, SYNC_REG,
+ IspVirt2Off(isp, regoff), 4, -1)
+ else
+#endif
MEMORYBARRIER(isp, SYNC_REG, IspVirt2Off(isp, regoff), 4, -1);
break;
default:
OpenPOWER on IntegriCloud