From e29e2a94845141e5c9758351c7dffa1145c5d3b5 Mon Sep 17 00:00:00 2001 From: Chuanhong Guo Date: Thu, 9 Apr 2020 17:59:09 +0800 Subject: [PATCH] ramips: ralink-eth: add support for 5.4 kernel Signed-off-by: Chuanhong Guo --- .../files/drivers/net/ethernet/ralink/mdio.c | 14 +++++++++++++ .../drivers/net/ethernet/ralink/mtk_eth_soc.c | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/mdio.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/mdio.c index 28c9250162..74babc59a0 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/mdio.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/mdio.c @@ -88,8 +88,13 @@ int fe_connect_phy_node(struct fe_priv *priv, struct device_node *phy_node, int return -ENODEV; } +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) phydev->supported &= PHY_GBIT_FEATURES; phydev->advertising = phydev->supported; +#else + phy_set_max_speed(phydev, SPEED_1000); + linkmode_copy(phydev->advertising, phydev->supported); +#endif phydev->no_auto_carrier_off = 1; dev_info(priv->dev, @@ -110,9 +115,18 @@ static void phy_init(struct fe_priv *priv, struct phy_device *phy) phy->autoneg = AUTONEG_ENABLE; phy->speed = 0; phy->duplex = 0; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) phy->supported &= IS_ENABLED(CONFIG_NET_RALINK_MDIO_MT7620) ? PHY_GBIT_FEATURES : PHY_BASIC_FEATURES; phy->advertising = phy->supported | ADVERTISED_Autoneg; +#else + phy_set_max_speed(phy, IS_ENABLED(CONFIG_NET_RALINK_MDIO_MT7620) ? + SPEED_1000 : + SPEED_100); + linkmode_copy(phy->advertising, phy->supported); + linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phy->advertising); +#endif phy_start_aneg(phy); } diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c index a088fe7fd5..7f09bb10de 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/mtk_eth_soc.c @@ -715,11 +715,19 @@ next_frag: /* TX SG offload */ nr_frags = skb_shinfo(skb)->nr_frags; for (i = 0; i < nr_frags; i++) { +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) struct skb_frag_struct *frag; +#else + skb_frag_t *frag; +#endif frag = &skb_shinfo(skb)->frags[i]; if (fe_tx_dma_map_page(ring, &st, skb_frag_page(frag), +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) frag->page_offset, skb_frag_size(frag))) +#else + skb_frag_off(frag), skb_frag_size(frag))) +#endif goto err_dma; } @@ -754,7 +762,11 @@ next_frag: netif_wake_queue(dev); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 2, 0) if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !head->xmit_more) +#else + if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !netdev_xmit_more()) +#endif fe_reg_w32(ring->tx_next_idx, FE_REG_TX_CTX_IDX0); return 0; @@ -813,14 +825,22 @@ static inline int fe_cal_txd_req(struct sk_buff *skb) { struct sk_buff *head = skb; int i, nfrags = 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) struct skb_frag_struct *frag; +#else + skb_frag_t *frag; +#endif next_frag: nfrags++; if (skb_is_gso(skb)) { for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { frag = &skb_shinfo(skb)->frags[i]; +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0) nfrags += DIV_ROUND_UP(frag->size, TX_DMA_BUF_LEN); +#else + nfrags += DIV_ROUND_UP(skb_frag_size(frag), TX_DMA_BUF_LEN); +#endif } } else { nfrags += skb_shinfo(skb)->nr_frags; -- 2.30.2