[openwrt/openwrt] ipq40xx: refresh ess driver and phy with new api

LEDE Commits lede-commits at lists.infradead.org
Sat Apr 30 22:05:30 PDT 2022


mans0n pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/7c692f685bcb73530620f0250d7d2197475a0277

commit 7c692f685bcb73530620f0250d7d2197475a0277
Author: Ansuel Smith <ansuelsmth at gmail.com>
AuthorDate: Sat Nov 20 23:10:20 2021 +0100

    ipq40xx: refresh ess driver and phy with new api
    
    Kernel 5.15 have some new api for ethtool and phy.
    Add ifdef to fix compilation error.
    
    Signed-off-by: Ansuel Smith <ansuelsmth at gmail.com>
    Reviewed-by: Robert Marko <robert.marko at sartura.hr>
---
 .../net/ethernet/qualcomm/essedma/edma_ethtool.c   | 12 ++++++++
 .../linux/ipq40xx/files/drivers/net/phy/qca807x.c  | 36 ++++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c
index f84cd5aa62..65706cfae1 100644
--- a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c
+++ b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c
@@ -244,8 +244,14 @@ static int edma_set_settings(struct net_device *netdev,
 /* edma_get_coalesce
  *	get interrupt mitigation
  */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,15,0)
+static int edma_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec,
+			     struct kernel_ethtool_coalesce *kernel_coal,
+			     struct netlink_ext_ack *extack)
+#else
 static int edma_get_coalesce(struct net_device *netdev,
 			     struct ethtool_coalesce *ec)
+#endif
 {
 	u32 reg_val;
 
@@ -266,8 +272,14 @@ static int edma_get_coalesce(struct net_device *netdev,
 /* edma_set_coalesce
  *	set interrupt mitigation
  */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,15,0)
+static int edma_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec,
+			     struct kernel_ethtool_coalesce *kernel_coal,
+			     struct netlink_ext_ack *extack)
+#else
 static int edma_set_coalesce(struct net_device *netdev,
 			     struct ethtool_coalesce *ec)
+#endif
 {
 	if (ec->tx_coalesce_usecs)
 		edma_change_tx_coalesce(ec->tx_coalesce_usecs);
diff --git a/target/linux/ipq40xx/files/drivers/net/phy/qca807x.c b/target/linux/ipq40xx/files/drivers/net/phy/qca807x.c
index 16d7a80455..8d523548e5 100644
--- a/target/linux/ipq40xx/files/drivers/net/phy/qca807x.c
+++ b/target/linux/ipq40xx/files/drivers/net/phy/qca807x.c
@@ -610,6 +610,7 @@ static int qca807x_config_intr(struct phy_device *phydev)
 	return ret;
 }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,12,0)
 static int qca807x_ack_intr(struct phy_device *phydev)
 {
 	int ret;
@@ -618,6 +619,33 @@ static int qca807x_ack_intr(struct phy_device *phydev)
 
 	return (ret < 0) ? ret : 0;
 }
+#else
+static irqreturn_t qca807x_handle_interrupt(struct phy_device *phydev)
+{
+	int irq_status, int_enabled;
+
+	irq_status = phy_read(phydev, QCA807X_INTR_STATUS);
+	if (irq_status < 0) {
+		phy_error(phydev);
+		return IRQ_NONE;
+	}
+
+	/* Read the current enabled interrupts */
+	int_enabled = phy_read(phydev, QCA807X_INTR_ENABLE);
+	if (int_enabled < 0) {
+		phy_error(phydev);
+		return IRQ_NONE;
+	}
+
+	/* See if this was one of our enabled interrupts */
+	if (!(irq_status & int_enabled))
+		return IRQ_NONE;
+
+	phy_trigger_machine(phydev);
+
+	return IRQ_HANDLED;
+}
+#endif
 
 static int qca807x_led_config(struct phy_device *phydev)
 {
@@ -779,7 +807,11 @@ static struct phy_driver qca807x_drivers[] = {
 		.config_init	= qca807x_config,
 		.read_status	= qca807x_read_status,
 		.config_intr	= qca807x_config_intr,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,12,0)
 		.ack_interrupt	= qca807x_ack_intr,
+#else
+		.handle_interrupt = qca807x_handle_interrupt,
+#endif
 		.soft_reset	= genphy_soft_reset,
 		.get_tunable	= qca807x_get_tunable,
 		.set_tunable	= qca807x_set_tunable,
@@ -799,7 +831,11 @@ static struct phy_driver qca807x_drivers[] = {
 		.config_init	= qca807x_config,
 		.read_status	= qca807x_read_status,
 		.config_intr	= qca807x_config_intr,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,12,0)
 		.ack_interrupt	= qca807x_ack_intr,
+#else
+		.handle_interrupt = qca807x_handle_interrupt,
+#endif
 		.soft_reset	= genphy_soft_reset,
 		.get_tunable	= qca807x_get_tunable,
 		.set_tunable	= qca807x_set_tunable,




More information about the lede-commits mailing list