diff options
author | mav <mav@FreeBSD.org> | 2016-08-18 10:24:31 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2016-08-18 10:24:31 +0000 |
commit | 1e5b478f9dec77d423ad8e1d26e47a1f3f33fdb0 (patch) | |
tree | 3c78ceb0d6c86fabb5ad8014205e8bba2f5be376 | |
parent | 73ac0808be7a2aaac41be7da4aa5f2a2b0c9a405 (diff) | |
download | FreeBSD-src-1e5b478f9dec77d423ad8e1d26e47a1f3f33fdb0.zip FreeBSD-src-1e5b478f9dec77d423ad8e1d26e47a1f3f33fdb0.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.
-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 b757f01..fc2024f 100644 --- a/sys/dev/ntb/ntb_hw/ntb_hw.c +++ b/sys/dev/ntb/ntb_hw/ntb_hw.c @@ -1688,8 +1688,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 |