summaryrefslogtreecommitdiffstats
path: root/recipes-networking/dpdk/files/igb_ethdev_loopback.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-networking/dpdk/files/igb_ethdev_loopback.patch')
-rw-r--r--recipes-networking/dpdk/files/igb_ethdev_loopback.patch96
1 files changed, 96 insertions, 0 deletions
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 @@
1Index: dpdk/lib/librte_pmd_e1000/igb_ethdev.c
2===================================================================
3--- dpdk.orig/lib/librte_pmd_e1000/igb_ethdev.c 2014-03-11 12:35:49.267083184 +0200
4+++ dpdk/lib/librte_pmd_e1000/igb_ethdev.c 2014-03-11 12:36:23.015082260 +0200
5@@ -701,50 +701,67 @@
6 E1000_WRITE_REG(hw, E1000_EITR(0), 0xFFFF);
7 }
8
9- /* Setup link speed and duplex */
10- switch (dev->data->dev_conf.link_speed) {
11- case ETH_LINK_SPEED_AUTONEG:
12+ if (dev->data->dev_conf.lpbk_mode == 1) {
13+ uint32_t reg;
14+
15+ reg = E1000_READ_REG(hw, E1000_RCTL);
16+ reg |= E1000_RCTL_LBM_MAC;
17+ E1000_WRITE_REG(hw, E1000_RCTL, reg);
18+
19+ reg = E1000_READ_REG(hw, E1000_CTRL);
20+ reg |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX | E1000_CTRL_FD |
21+ E1000_CTRL_SPD_1000);
22+ E1000_WRITE_REG(hw, E1000_CTRL, reg);
23+
24+ reg = E1000_READ_REG(hw, E1000_EEER);
25+ reg |= (1 << 28);
26+ E1000_WRITE_REG(hw, E1000_EEER, reg);
27+ } else {
28+ /* Setup link speed and duplex */
29+ switch (dev->data->dev_conf.link_speed) {
30+ case ETH_LINK_SPEED_AUTONEG:
31 if (dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX)
32- hw->phy.autoneg_advertised = E1000_ALL_SPEED_DUPLEX;
33+ hw->phy.autoneg_advertised = E1000_ALL_SPEED_DUPLEX;
34 else if (dev->data->dev_conf.link_duplex == ETH_LINK_HALF_DUPLEX)
35- hw->phy.autoneg_advertised = E1000_ALL_HALF_DUPLEX;
36+ hw->phy.autoneg_advertised = E1000_ALL_HALF_DUPLEX;
37 else if (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX)
38- hw->phy.autoneg_advertised = E1000_ALL_FULL_DUPLEX;
39+ hw->phy.autoneg_advertised = E1000_ALL_FULL_DUPLEX;
40 else
41- goto error_invalid_config;
42+ goto error_invalid_config;
43 break;
44- case ETH_LINK_SPEED_10:
45+ case ETH_LINK_SPEED_10:
46 if (dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX)
47- hw->phy.autoneg_advertised = E1000_ALL_10_SPEED;
48+ hw->phy.autoneg_advertised = E1000_ALL_10_SPEED;
49 else if (dev->data->dev_conf.link_duplex == ETH_LINK_HALF_DUPLEX)
50- hw->phy.autoneg_advertised = ADVERTISE_10_HALF;
51+ hw->phy.autoneg_advertised = ADVERTISE_10_HALF;
52 else if (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX)
53- hw->phy.autoneg_advertised = ADVERTISE_10_FULL;
54+ hw->phy.autoneg_advertised = ADVERTISE_10_FULL;
55 else
56- goto error_invalid_config;
57+ goto error_invalid_config;
58 break;
59- case ETH_LINK_SPEED_100:
60+ case ETH_LINK_SPEED_100:
61 if (dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX)
62- hw->phy.autoneg_advertised = E1000_ALL_100_SPEED;
63+ hw->phy.autoneg_advertised = E1000_ALL_100_SPEED;
64 else if (dev->data->dev_conf.link_duplex == ETH_LINK_HALF_DUPLEX)
65- hw->phy.autoneg_advertised = ADVERTISE_100_HALF;
66+ hw->phy.autoneg_advertised = ADVERTISE_100_HALF;
67 else if (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX)
68- hw->phy.autoneg_advertised = ADVERTISE_100_FULL;
69+ hw->phy.autoneg_advertised = ADVERTISE_100_FULL;
70 else
71- goto error_invalid_config;
72+ goto error_invalid_config;
73 break;
74- case ETH_LINK_SPEED_1000:
75+ case ETH_LINK_SPEED_1000:
76 if ((dev->data->dev_conf.link_duplex == ETH_LINK_AUTONEG_DUPLEX) ||
77- (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX))
78- hw->phy.autoneg_advertised = ADVERTISE_1000_FULL;
79+ (dev->data->dev_conf.link_duplex == ETH_LINK_FULL_DUPLEX))
80+ hw->phy.autoneg_advertised = ADVERTISE_1000_FULL;
81 else
82- goto error_invalid_config;
83+ goto error_invalid_config;
84 break;
85- case ETH_LINK_SPEED_10000:
86- default:
87+ case ETH_LINK_SPEED_10000:
88+ default:
89 goto error_invalid_config;
90+ }
91+ e1000_setup_link(hw);
92 }
93- e1000_setup_link(hw);
94
95 /* check if lsc interrupt feature is enabled */
96 if (dev->data->dev_conf.intr_conf.lsc != 0)