ipq40xx: refresh ess driver and phy with new api
authorAnsuel Smith <ansuelsmth@gmail.com>
Sat, 20 Nov 2021 22:10:20 +0000 (23:10 +0100)
committerSungbo Eo <mans0n@gorani.run>
Sun, 1 May 2022 04:40:13 +0000 (13:40 +0900)
Kernel 5.15 have some new api for ethtool and phy.
Add ifdef to fix compilation error.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Reviewed-by: Robert Marko <robert.marko@sartura.hr>
target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_ethtool.c
target/linux/ipq40xx/files/drivers/net/phy/qca807x.c

index f84cd5aa62238170769d42ce22be67f74d9ee579..65706cfae12ae80d25c733d8acfc0cce0123f640 100644 (file)
@@ -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);
index 16d7a80455efe7dcb609d95fc85497bb060d323f..8d523548e52fc921c55718e842a2c1953c764b63 100644 (file)
@@ -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,