On Mon, Sep 02, 2019 at 04:47:32PM +0200, Stefan Fritsch wrote:
> Tested with a BCM57412
>
> OK?
ok jmatthew@
>
> diff --git a/sys/dev/pci/if_bnxt.c b/sys/dev/pci/if_bnxt.c
> --- a/sys/dev/pci/if_bnxt.c
> +++ b/sys/dev/pci/if_bnxt.c
> @@ -102,6 +102,7 @@
> #define BNXT_FLAG_NPAR 0x0002
> #define BNXT_FLAG_WOL_CAP 0x0004
> #define BNXT_FLAG_SHORT_CMD 0x0008
> +#define BNXT_FLAG_MSIX 0x0010
>
> /* NVRam stuff has a five minute timeout */
> #define BNXT_NVM_TIMEO (5 * 60 * 1000)
> @@ -507,7 +508,9 @@ bnxt_attach(struct device *parent, struct device *self,
> void *aux)
> * devices advertise msi support, but there's no way to tell a
> * completion queue to use msi mode, only legacy or msi-x.
> */
> - if (/*pci_intr_map_msi(pa, &ih) != 0 && */ pci_intr_map(pa, &ih) != 0) {
> + if (pci_intr_map_msix(pa, 0, &ih) == 0) {
> + sc->sc_flags |= BNXT_FLAG_MSIX;
> + } else if (pci_intr_map(pa, &ih) != 0) {
> printf(": unable to map interrupt\n");
> goto free_resp;
> }
> @@ -2658,7 +2661,9 @@ bnxt_hwrm_ring_alloc(struct bnxt_softc *softc, uint8_t
> type,
> req.logical_id = htole16(ring->id);
> req.cmpl_ring_id = htole16(cmpl_ring_id);
> req.queue_id = htole16(softc->sc_q_info[0].id);
> - req.int_mode = 0;
> + req.int_mode = (softc->sc_flags & BNXT_FLAG_MSIX) ?
> + HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX :
> + HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY;
> BNXT_HWRM_LOCK(softc);
> rc = _hwrm_send_message(softc, &req, sizeof(req));
> if (rc)
>