diff -Npaur a/src/kcompat.h b/src/kcompat.h
--- a/src/kcompat.h	2019-09-09 14:28:11.384088231 -0400
+++ b/src/kcompat.h	2020-04-20 12:59:11.582750232 -0400
@@ -2818,7 +2818,9 @@
 #define pci_disable_link_state(p, s) _kc_pci_disable_link_state(p, s)
 #else /* < 2.6.26 */
 #define NETDEV_CAN_SET_GSO_MAX_SIZE
-#ifdef HAVE_PCI_ASPM_H
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)
+#include <linux/pci.h>
+#else
 #include <linux/pci-aspm.h>
 #endif
 #define HAVE_NETDEV_VLAN_FEATURES
@@ -7088,4 +7090,10 @@
 #define HAVE_TX_TIMEOUT_TXQUEUE
 #endif /* 5.6.0 */
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)
+#define CPU_LATENCY_QOS
+#define NO_PM_QOS_CPU_DMA_LATENCY
+#define HAVE_PCI_AER_CLEAR
+#endif /* 5.7.0 */
+
 #endif /* _KCOMPAT_H_ */

diff -Npaur a/src/netdev.c b/src/netdev.c
--- a/src/netdev.c	2019-09-09 14:28:11.384088231 -0400
+++ b/src/netdev.c	2020-04-20 12:58:43.630808596 -0400
@@ -3710,26 +3710,13 @@
 
 			ew32(RXDCTL(0), rxdctl | 0x3);
 		}
-#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW
-		pm_qos_update_request(&adapter->pm_qos_req, lat);
-#elif defined(HAVE_PM_QOS_REQUEST_LIST)
-		pm_qos_update_request(&adapter->pm_qos_req, lat);
-#else
-		pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY,
-					  adapter->netdev->name, lat);
-#endif
+
+		dev_info(&adapter->pdev->dev,
+			 "Some CPU C-states have been disabled in order to enable jumbo frames\n");
+		cpu_latency_qos_update_request(&adapter->pm_qos_req, lat);
 	} else {
-#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW
-		pm_qos_update_request(&adapter->pm_qos_req,
-				      PM_QOS_DEFAULT_VALUE);
-#elif defined(HAVE_PM_QOS_REQUEST_LIST)
-		pm_qos_update_request(&adapter->pm_qos_req,
-				      PM_QOS_DEFAULT_VALUE);
-#else
-		pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY,
-					  adapter->netdev->name,
-					  PM_QOS_DEFAULT_VALUE);
-#endif
+		cpu_latency_qos_update_request(&adapter->pm_qos_req,
+					       PM_QOS_DEFAULT_VALUE);
 	}
 
 	/* Enable Receives */
@@ -5185,16 +5172,7 @@
 
 #endif
 	/* DMA latency requirement to workaround jumbo issue */
-#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW
-	pm_qos_add_request(&adapter->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
-			   PM_QOS_DEFAULT_VALUE);
-#elif defined(HAVE_PM_QOS_REQUEST_LIST)
-	pm_qos_add_request(&adapter->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
-			   PM_QOS_DEFAULT_VALUE);
-#else
-	pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, adapter->netdev->name,
-			       PM_QOS_DEFAULT_VALUE);
-#endif
+	cpu_latency_qos_add_request(&adapter->pm_qos_req, PM_QOS_DEFAULT_VALUE);
 
 	/* before we allocate an interrupt, we must be ready to handle it.
 	 * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt
@@ -5239,14 +5217,7 @@
 	return 0;
 
 err_req_irq:
-#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW
-	pm_qos_remove_request(&adapter->pm_qos_req);
-#elif defined(HAVE_PM_QOS_REQUEST_LIST)
-	pm_qos_remove_request(&adapter->pm_qos_req);
-#else
-	pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY,
-				  adapter->netdev->name);
-#endif
+	cpu_latency_qos_remove_request(&adapter->pm_qos_req);
 	e1000e_release_hw_control(adapter);
 	e1000_power_down_phy(adapter);
 	e1000e_free_rx_resources(adapter->rx_ring);
@@ -5254,7 +5225,7 @@
 	e1000e_free_tx_resources(adapter->tx_ring);
 err_setup_tx:
 	e1000e_reset(adapter);
-	pm_runtime_put_sync(pci_dev_to_dev(pdev));
+	pm_runtime_put_sync(&pdev->dev);
 
 	return err;
 }
@@ -5326,16 +5297,9 @@
 	    !test_bit(__E1000_TESTING, &adapter->state))
 		e1000e_release_hw_control(adapter);
 
-#ifdef HAVE_PM_QOS_REQUEST_LIST_NEW
-	pm_qos_remove_request(&adapter->pm_qos_req);
-#elif defined(HAVE_PM_QOS_REQUEST_LIST)
-	pm_qos_remove_request(&adapter->pm_qos_req);
-#else
-	pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY,
-				  adapter->netdev->name);
-#endif
-
-	pm_runtime_put_sync(pci_dev_to_dev(pdev));
+	cpu_latency_qos_remove_request(&adapter->pm_qos_req);
+
+	pm_runtime_put_sync(&pdev->dev);
 
 	return 0;
 }
@@ -6682,7 +6646,7 @@
  * @netdev: network interface device structure
  * @txqueue: txqueue
  **/
-#ifdef HAVE_TX_TIMEOUT_TXQUEUE
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
 static void e1000_tx_timeout(struct net_device *netdev, unsigned int txqueue)
 #else
 static void e1000_tx_timeout(struct net_device *netdev)
@@ -8097,7 +8061,11 @@
 		result = PCI_ERS_RESULT_RECOVERED;
 	}
 
+#ifdef HAVE_PCI_AER_CLEAR
+	pci_aer_clear_nonfatal_status(pdev);
+#else
 	pci_cleanup_aer_uncorrect_error_status(pdev);
+#endif
 
 	return result;
 }

