diff options
author | mav <mav@FreeBSD.org> | 2013-11-10 23:48:16 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2013-11-10 23:48:16 +0000 |
commit | b5ebe2e35e78b419af1fd73654a125ae8a4b14de (patch) | |
tree | 39fbe7c313bf74e3e4a83d4b4f8b665a5d76d831 /sys/dev/isp/isp_pci.c | |
parent | 963d7e1a2a5801201ee0279e94acdb3d2ab5d308 (diff) | |
download | FreeBSD-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.c | 9 |
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: |