ungate DMA clock on >= tgp to avoid packet loss on Alder Lake
authorjsg <jsg@openbsd.org>
Thu, 23 Jun 2022 09:47:04 +0000 (09:47 +0000)
committerjsg <jsg@openbsd.org>
Thu, 23 Jun 2022 09:47:04 +0000 (09:47 +0000)
chicken bit set in linux but not documented anywhere I can find
ok claudio@

sys/dev/pci/if_em_hw.c

index 727c431..6d23058 100644 (file)
@@ -31,7 +31,7 @@
 
 *******************************************************************************/
 
-/* $OpenBSD: if_em_hw.c,v 1.115 2022/06/23 09:38:28 jsg Exp $ */
+/* $OpenBSD: if_em_hw.c,v 1.116 2022/06/23 09:47:04 jsg Exp $ */
 /*
  * if_em_hw.c Shared functions for accessing and configuring the MAC
  */
@@ -1846,6 +1846,13 @@ em_init_hw(struct em_softc *sc)
                em_set_pci_ex_no_snoop(hw, snoop);
        }
 
+       /* ungate DMA clock to avoid packet loss */
+       if (hw->mac_type >= em_pch_tgp) {
+               uint32_t fflt_dbg = E1000_READ_REG(hw, FFLT_DBG);
+               fflt_dbg |= (1 << 12);
+               E1000_WRITE_REG(hw, FFLT_DBG, fflt_dbg);
+       }
+
        if (hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER ||
            hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3) {
                ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);