diff options
author | mav <mav@FreeBSD.org> | 2016-08-18 09:16:59 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2016-08-18 09:16:59 +0000 |
commit | 9e98ad7c6697802dd5c7af27d5939938b6ec269c (patch) | |
tree | 57134ccdd71c082e9555efc5bd25400e62de27bc /sys/dev/ntb | |
parent | 39af2303dc1bb5b28987b1730c0e28d40b98717b (diff) | |
download | FreeBSD-src-9e98ad7c6697802dd5c7af27d5939938b6ec269c.zip FreeBSD-src-9e98ad7c6697802dd5c7af27d5939938b6ec269c.tar.gz |
MFC r302482: Fix NTB_SDOORBELL_LOCKUP workaround.
Since SBARxSZ register can be write-once, it can be unusable for disabling
the SBAR. For such case also set SBARxBASE to zero to not intersect with
config BAR.
Diffstat (limited to 'sys/dev/ntb')
-rw-r--r-- | sys/dev/ntb/ntb_hw/ntb_hw.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/dev/ntb/ntb_hw/ntb_hw.c b/sys/dev/ntb/ntb_hw/ntb_hw.c index c1381f0..bfa3559 100644 --- a/sys/dev/ntb/ntb_hw/ntb_hw.c +++ b/sys/dev/ntb/ntb_hw/ntb_hw.c @@ -1673,8 +1673,12 @@ xeon_set_sbar_base_and_limit(struct ntb_softc *ntb, uint64_t bar_addr, uint32_t base_reg, lmt_reg; bar_get_xlat_params(ntb, idx, &base_reg, NULL, &lmt_reg); - if (idx == regbar) - bar_addr += ntb->b2b_off; + if (idx == regbar) { + if (ntb->b2b_off) + bar_addr += ntb->b2b_off; + else + bar_addr = 0; + } /* * Set limit registers first to avoid an errata where setting the base |