ramips: ralink-eth: add support for 5.4 kernel
Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
This commit is contained in:
@@ -88,8 +88,13 @@ int fe_connect_phy_node(struct fe_priv *priv, struct device_node *phy_node, int
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0)
|
||||||
phydev->supported &= PHY_GBIT_FEATURES;
|
phydev->supported &= PHY_GBIT_FEATURES;
|
||||||
phydev->advertising = phydev->supported;
|
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;
|
phydev->no_auto_carrier_off = 1;
|
||||||
|
|
||||||
dev_info(priv->dev,
|
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->autoneg = AUTONEG_ENABLE;
|
||||||
phy->speed = 0;
|
phy->speed = 0;
|
||||||
phy->duplex = 0;
|
phy->duplex = 0;
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0)
|
||||||
phy->supported &= IS_ENABLED(CONFIG_NET_RALINK_MDIO_MT7620) ?
|
phy->supported &= IS_ENABLED(CONFIG_NET_RALINK_MDIO_MT7620) ?
|
||||||
PHY_GBIT_FEATURES : PHY_BASIC_FEATURES;
|
PHY_GBIT_FEATURES : PHY_BASIC_FEATURES;
|
||||||
phy->advertising = phy->supported | ADVERTISED_Autoneg;
|
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);
|
phy_start_aneg(phy);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -715,11 +715,19 @@ next_frag:
|
|||||||
/* TX SG offload */
|
/* TX SG offload */
|
||||||
nr_frags = skb_shinfo(skb)->nr_frags;
|
nr_frags = skb_shinfo(skb)->nr_frags;
|
||||||
for (i = 0; i < nr_frags; i++) {
|
for (i = 0; i < nr_frags; i++) {
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0)
|
||||||
struct skb_frag_struct *frag;
|
struct skb_frag_struct *frag;
|
||||||
|
#else
|
||||||
|
skb_frag_t *frag;
|
||||||
|
#endif
|
||||||
|
|
||||||
frag = &skb_shinfo(skb)->frags[i];
|
frag = &skb_shinfo(skb)->frags[i];
|
||||||
if (fe_tx_dma_map_page(ring, &st, skb_frag_page(frag),
|
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)))
|
frag->page_offset, skb_frag_size(frag)))
|
||||||
|
#else
|
||||||
|
skb_frag_off(frag), skb_frag_size(frag)))
|
||||||
|
#endif
|
||||||
goto err_dma;
|
goto err_dma;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -754,7 +762,11 @@ next_frag:
|
|||||||
netif_wake_queue(dev);
|
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)
|
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);
|
fe_reg_w32(ring->tx_next_idx, FE_REG_TX_CTX_IDX0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -813,14 +825,22 @@ static inline int fe_cal_txd_req(struct sk_buff *skb)
|
|||||||
{
|
{
|
||||||
struct sk_buff *head = skb;
|
struct sk_buff *head = skb;
|
||||||
int i, nfrags = 0;
|
int i, nfrags = 0;
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0)
|
||||||
struct skb_frag_struct *frag;
|
struct skb_frag_struct *frag;
|
||||||
|
#else
|
||||||
|
skb_frag_t *frag;
|
||||||
|
#endif
|
||||||
|
|
||||||
next_frag:
|
next_frag:
|
||||||
nfrags++;
|
nfrags++;
|
||||||
if (skb_is_gso(skb)) {
|
if (skb_is_gso(skb)) {
|
||||||
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
|
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
|
||||||
frag = &skb_shinfo(skb)->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);
|
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 {
|
} else {
|
||||||
nfrags += skb_shinfo(skb)->nr_frags;
|
nfrags += skb_shinfo(skb)->nr_frags;
|
||||||
|
|||||||
Reference in New Issue
Block a user