From 1b6242fc583a6b871304fb995af6dc211b58f69b Mon Sep 17 00:00:00 2001 From: Adrian Dudau Date: Thu, 26 Jun 2014 13:48:23 +0200 Subject: initial commit for Enea Linux 4.0 Migrated from the internal git server on the daisy-enea branch Signed-off-by: Adrian Dudau --- .../dpdk/files/igb_ethdev_loopback.patch | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 recipes-networking/dpdk/files/igb_ethdev_loopback.patch (limited to 'recipes-networking/dpdk/files/igb_ethdev_loopback.patch') diff --git a/recipes-networking/dpdk/files/igb_ethdev_loopback.patch b/recipes-networking/dpdk/files/igb_ethdev_loopback.patch new file mode 100644 index 0000000..6b979ca --- /dev/null +++ b/recipes-networking/dpdk/files/igb_ethdev_loopback.patch @@ -0,0 +1,96 @@ +Index: dpdk/lib/librte_pmd_e1000/igb_ethdev.c +=================================================================== +--- dpdk.orig/lib/librte_pmd_e1000/igb_ethdev.c 2014-03-11 12:35:49.267083184 +0200 ++++ dpdk/lib/librte_pmd_e1000/igb_ethdev.c 2014-03-11 12:36:23.015082260 +0200 +@@ -701,50 +701,67 @@ + E1000_WRITE_REG(hw, E1000_EITR(0), 0xFFFF); + } + +- /* Setup link speed and duplex */ +- switch (dev->data->dev_conf.link_speed) { +- case ETH_LINK_SPEED_AUTONEG: ++ if (dev->data->dev_conf.lpbk_mode == 1) { ++ uint32_t reg; ++ ++ reg = E1000_READ_REG(hw, E1000_RCTL); ++ reg |= E1000_RCTL_LBM_MAC; ++ E1000_WRITE_REG(hw, E1000_RCTL, reg); ++ ++ reg = E1000_READ_REG(hw, E1000_CTRL); ++ reg |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX | E1000_CTRL_FD | ++ E1000_CTRL_SPD_1000); ++ E1000_WRITE_REG(hw, E1000_CTRL, reg); ++ ++ reg = E1000_READ_REG(hw, E1000_EEER); ++ reg |= (1 << 28); ++ E1000_WRITE_REG(hw, E1000_EEER, reg); ++ } else { ++ /* Setup link speed and duplex */ ++ switch (dev->data->dev_conf.link_speed) { ++ case ETH_LINK_SPEED_AUTONEG: + if (dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX) +- hw->phy.autoneg_advertised = E1000_ALL_SPEED_DUPLEX; ++ hw->phy.autoneg_advertised = E1000_ALL_SPEED_DUPLEX; + else if (dev->data->dev_conf.link_duplex == ETH_LINK_HALF_DUPLEX) +- hw->phy.autoneg_advertised = E1000_ALL_HALF_DUPLEX; ++ hw->phy.autoneg_advertised = E1000_ALL_HALF_DUPLEX; + else if (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX) +- hw->phy.autoneg_advertised = E1000_ALL_FULL_DUPLEX; ++ hw->phy.autoneg_advertised = E1000_ALL_FULL_DUPLEX; + else +- goto error_invalid_config; ++ goto error_invalid_config; + break; +- case ETH_LINK_SPEED_10: ++ case ETH_LINK_SPEED_10: + if (dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX) +- hw->phy.autoneg_advertised = E1000_ALL_10_SPEED; ++ hw->phy.autoneg_advertised = E1000_ALL_10_SPEED; + else if (dev->data->dev_conf.link_duplex == ETH_LINK_HALF_DUPLEX) +- hw->phy.autoneg_advertised = ADVERTISE_10_HALF; ++ hw->phy.autoneg_advertised = ADVERTISE_10_HALF; + else if (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX) +- hw->phy.autoneg_advertised = ADVERTISE_10_FULL; ++ hw->phy.autoneg_advertised = ADVERTISE_10_FULL; + else +- goto error_invalid_config; ++ goto error_invalid_config; + break; +- case ETH_LINK_SPEED_100: ++ case ETH_LINK_SPEED_100: + if (dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX) +- hw->phy.autoneg_advertised = E1000_ALL_100_SPEED; ++ hw->phy.autoneg_advertised = E1000_ALL_100_SPEED; + else if (dev->data->dev_conf.link_duplex == ETH_LINK_HALF_DUPLEX) +- hw->phy.autoneg_advertised = ADVERTISE_100_HALF; ++ hw->phy.autoneg_advertised = ADVERTISE_100_HALF; + else if (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX) +- hw->phy.autoneg_advertised = ADVERTISE_100_FULL; ++ hw->phy.autoneg_advertised = ADVERTISE_100_FULL; + else +- goto error_invalid_config; ++ goto error_invalid_config; + break; +- case ETH_LINK_SPEED_1000: ++ case ETH_LINK_SPEED_1000: + if ((dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX) || +- (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX)) +- hw->phy.autoneg_advertised = ADVERTISE_1000_FULL; ++ (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX)) ++ hw->phy.autoneg_advertised = ADVERTISE_1000_FULL; + else +- goto error_invalid_config; ++ goto error_invalid_config; + break; +- case ETH_LINK_SPEED_10000: +- default: ++ case ETH_LINK_SPEED_10000: ++ default: + goto error_invalid_config; ++ } ++ e1000_setup_link(hw); + } +- e1000_setup_link(hw); + + /* check if lsc interrupt feature is enabled */ + if (dev->data->dev_conf.intr_conf.lsc != 0) -- cgit v1.2.3-54-g00ecf