From 12f69070c6e46f8adf05063a6c9156a7551c394f Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 2 Oct 2024 11:09:44 -0400 Subject: [PATCH] broadcom570x: Actually use MSIs. We don't need to enable or disable interrupts when using them, which should fix the TODO that lead to them being disabled always. --- .../drivers/network/ether/broadcom570x/dev/bge/if_bge.c | 6 ------ .../kernel/drivers/network/ether/broadcom570x/glue.c | 5 +++++ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/ether/broadcom570x/dev/bge/if_bge.c b/src/add-ons/kernel/drivers/network/ether/broadcom570x/dev/bge/if_bge.c index dfbdce68c6..1bd019a9f8 100644 --- a/src/add-ons/kernel/drivers/network/ether/broadcom570x/dev/bge/if_bge.c +++ b/src/add-ons/kernel/drivers/network/ether/broadcom570x/dev/bge/if_bge.c @@ -3162,12 +3162,6 @@ bge_can_use_msi(struct bge_softc *sc) { int can_use_msi = 0; -#ifdef __HAIKU__ - // temporary workaround, the int disable happens in msi enable through - // setup intr in our case which undoes the re-enabling done by the driver - return 0; -#endif - if (sc->bge_msi == 0) return (0); diff --git a/src/add-ons/kernel/drivers/network/ether/broadcom570x/glue.c b/src/add-ons/kernel/drivers/network/ether/broadcom570x/glue.c index c85868f316..7936e0d8a4 100644 --- a/src/add-ons/kernel/drivers/network/ether/broadcom570x/glue.c +++ b/src/add-ons/kernel/drivers/network/ether/broadcom570x/glue.c @@ -42,6 +42,8 @@ int __haiku_disable_interrupts(device_t dev) { struct bge_softc *sc = device_get_softc(dev); + if (sc->bge_flags & BGE_FLAG_MSI) + return 1; uint32 notInterrupted = pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE, 4) & BGE_PCISTATE_INTR_STATE; @@ -62,6 +64,9 @@ void __haiku_reenable_interrupts(device_t dev) { struct bge_softc *sc = device_get_softc(dev); + if (sc->bge_flags & BGE_FLAG_MSI) + return; + BGE_SETBIT(sc, BGE_PCI_MISC_CTL, BGE_PCIMISCCTL_CLEAR_INTA); BGE_CLRBIT(sc, BGE_PCI_MISC_CTL, BGE_PCIMISCCTL_MASK_PCI_INTR); bge_writembx(sc, BGE_MBX_IRQ0_LO, 0);