summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2016-08-18 10:24:31 +0000
committermav <mav@FreeBSD.org>2016-08-18 10:24:31 +0000
commit1e5b478f9dec77d423ad8e1d26e47a1f3f33fdb0 (patch)
tree3c78ceb0d6c86fabb5ad8014205e8bba2f5be376
parent73ac0808be7a2aaac41be7da4aa5f2a2b0c9a405 (diff)
downloadFreeBSD-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.c8
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
OpenPOWER on IntegriCloud