aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/igb/igb_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/igb/igb_main.c')
-rw-r--r--drivers/net/igb/igb_main.c115
1 files changed, 77 insertions, 38 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 4962cdfc507c..9331e5212461 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -231,6 +231,40 @@ static void __exit igb_exit_module(void)
231 231
232module_exit(igb_exit_module); 232module_exit(igb_exit_module);
233 233
234#define Q_IDX_82576(i) (((i & 0x1) << 3) + (i >> 1))
235/**
236 * igb_cache_ring_register - Descriptor ring to register mapping
237 * @adapter: board private structure to initialize
238 *
239 * Once we know the feature-set enabled for the device, we'll cache
240 * the register offset the descriptor ring is assigned to.
241 **/
242static void igb_cache_ring_register(struct igb_adapter *adapter)
243{
244 int i;
245
246 switch (adapter->hw.mac.type) {
247 case e1000_82576:
248 /* The queues are allocated for virtualization such that VF 0
249 * is allocated queues 0 and 8, VF 1 queues 1 and 9, etc.
250 * In order to avoid collision we start at the first free queue
251 * and continue consuming queues in the same sequence
252 */
253 for (i = 0; i < adapter->num_rx_queues; i++)
254 adapter->rx_ring[i].reg_idx = Q_IDX_82576(i);
255 for (i = 0; i < adapter->num_tx_queues; i++)
256 adapter->tx_ring[i].reg_idx = Q_IDX_82576(i);
257 break;
258 case e1000_82575:
259 default:
260 for (i = 0; i < adapter->num_rx_queues; i++)
261 adapter->rx_ring[i].reg_idx = i;
262 for (i = 0; i < adapter->num_tx_queues; i++)
263 adapter->tx_ring[i].reg_idx = i;
264 break;
265 }
266}
267
234/** 268/**
235 * igb_alloc_queues - Allocate memory for all rings 269 * igb_alloc_queues - Allocate memory for all rings
236 * @adapter: board private structure to initialize 270 * @adapter: board private structure to initialize
@@ -272,6 +306,8 @@ static int igb_alloc_queues(struct igb_adapter *adapter)
272 /* set a default napi handler for each rx_ring */ 306 /* set a default napi handler for each rx_ring */
273 netif_napi_add(adapter->netdev, &ring->napi, igb_poll, 64); 307 netif_napi_add(adapter->netdev, &ring->napi, igb_poll, 64);
274 } 308 }
309
310 igb_cache_ring_register(adapter);
275 return 0; 311 return 0;
276} 312}
277 313
@@ -312,36 +348,36 @@ static void igb_assign_vector(struct igb_adapter *adapter, int rx_queue,
312 array_wr32(E1000_MSIXBM(0), msix_vector, msixbm); 348 array_wr32(E1000_MSIXBM(0), msix_vector, msixbm);
313 break; 349 break;
314 case e1000_82576: 350 case e1000_82576:
315 /* The 82576 uses a table-based method for assigning vectors. 351 /* 82576 uses a table-based method for assigning vectors.
316 Each queue has a single entry in the table to which we write 352 Each queue has a single entry in the table to which we write
317 a vector number along with a "valid" bit. Sadly, the layout 353 a vector number along with a "valid" bit. Sadly, the layout
318 of the table is somewhat counterintuitive. */ 354 of the table is somewhat counterintuitive. */
319 if (rx_queue > IGB_N0_QUEUE) { 355 if (rx_queue > IGB_N0_QUEUE) {
320 index = (rx_queue & 0x7); 356 index = (rx_queue >> 1);
321 ivar = array_rd32(E1000_IVAR0, index); 357 ivar = array_rd32(E1000_IVAR0, index);
322 if (rx_queue < 8) { 358 if (rx_queue & 0x1) {
323 /* vector goes into low byte of register */
324 ivar = ivar & 0xFFFFFF00;
325 ivar |= msix_vector | E1000_IVAR_VALID;
326 } else {
327 /* vector goes into third byte of register */ 359 /* vector goes into third byte of register */
328 ivar = ivar & 0xFF00FFFF; 360 ivar = ivar & 0xFF00FFFF;
329 ivar |= (msix_vector | E1000_IVAR_VALID) << 16; 361 ivar |= (msix_vector | E1000_IVAR_VALID) << 16;
362 } else {
363 /* vector goes into low byte of register */
364 ivar = ivar & 0xFFFFFF00;
365 ivar |= msix_vector | E1000_IVAR_VALID;
330 } 366 }
331 adapter->rx_ring[rx_queue].eims_value= 1 << msix_vector; 367 adapter->rx_ring[rx_queue].eims_value= 1 << msix_vector;
332 array_wr32(E1000_IVAR0, index, ivar); 368 array_wr32(E1000_IVAR0, index, ivar);
333 } 369 }
334 if (tx_queue > IGB_N0_QUEUE) { 370 if (tx_queue > IGB_N0_QUEUE) {
335 index = (tx_queue & 0x7); 371 index = (tx_queue >> 1);
336 ivar = array_rd32(E1000_IVAR0, index); 372 ivar = array_rd32(E1000_IVAR0, index);
337 if (tx_queue < 8) { 373 if (tx_queue & 0x1) {
338 /* vector goes into second byte of register */
339 ivar = ivar & 0xFFFF00FF;
340 ivar |= (msix_vector | E1000_IVAR_VALID) << 8;
341 } else {
342 /* vector goes into high byte of register */ 374 /* vector goes into high byte of register */
343 ivar = ivar & 0x00FFFFFF; 375 ivar = ivar & 0x00FFFFFF;
344 ivar |= (msix_vector | E1000_IVAR_VALID) << 24; 376 ivar |= (msix_vector | E1000_IVAR_VALID) << 24;
377 } else {
378 /* vector goes into second byte of register */
379 ivar = ivar & 0xFFFF00FF;
380 ivar |= (msix_vector | E1000_IVAR_VALID) << 8;
345 } 381 }
346 adapter->tx_ring[tx_queue].eims_value= 1 << msix_vector; 382 adapter->tx_ring[tx_queue].eims_value= 1 << msix_vector;
347 array_wr32(E1000_IVAR0, index, ivar); 383 array_wr32(E1000_IVAR0, index, ivar);
@@ -1638,33 +1674,33 @@ static void igb_configure_tx(struct igb_adapter *adapter)
1638 struct e1000_hw *hw = &adapter->hw; 1674 struct e1000_hw *hw = &adapter->hw;
1639 u32 tctl; 1675 u32 tctl;
1640 u32 txdctl, txctrl; 1676 u32 txdctl, txctrl;
1641 int i; 1677 int i, j;
1642 1678
1643 for (i = 0; i < adapter->num_tx_queues; i++) { 1679 for (i = 0; i < adapter->num_tx_queues; i++) {
1644 struct igb_ring *ring = &(adapter->tx_ring[i]); 1680 struct igb_ring *ring = &(adapter->tx_ring[i]);
1645 1681 j = ring->reg_idx;
1646 wr32(E1000_TDLEN(i), 1682 wr32(E1000_TDLEN(j),
1647 ring->count * sizeof(struct e1000_tx_desc)); 1683 ring->count * sizeof(struct e1000_tx_desc));
1648 tdba = ring->dma; 1684 tdba = ring->dma;
1649 wr32(E1000_TDBAL(i), 1685 wr32(E1000_TDBAL(j),
1650 tdba & 0x00000000ffffffffULL); 1686 tdba & 0x00000000ffffffffULL);
1651 wr32(E1000_TDBAH(i), tdba >> 32); 1687 wr32(E1000_TDBAH(j), tdba >> 32);
1652 1688
1653 ring->head = E1000_TDH(i); 1689 ring->head = E1000_TDH(j);
1654 ring->tail = E1000_TDT(i); 1690 ring->tail = E1000_TDT(j);
1655 writel(0, hw->hw_addr + ring->tail); 1691 writel(0, hw->hw_addr + ring->tail);
1656 writel(0, hw->hw_addr + ring->head); 1692 writel(0, hw->hw_addr + ring->head);
1657 txdctl = rd32(E1000_TXDCTL(i)); 1693 txdctl = rd32(E1000_TXDCTL(j));
1658 txdctl |= E1000_TXDCTL_QUEUE_ENABLE; 1694 txdctl |= E1000_TXDCTL_QUEUE_ENABLE;
1659 wr32(E1000_TXDCTL(i), txdctl); 1695 wr32(E1000_TXDCTL(j), txdctl);
1660 1696
1661 /* Turn off Relaxed Ordering on head write-backs. The 1697 /* Turn off Relaxed Ordering on head write-backs. The
1662 * writebacks MUST be delivered in order or it will 1698 * writebacks MUST be delivered in order or it will
1663 * completely screw up our bookeeping. 1699 * completely screw up our bookeeping.
1664 */ 1700 */
1665 txctrl = rd32(E1000_DCA_TXCTRL(i)); 1701 txctrl = rd32(E1000_DCA_TXCTRL(j));
1666 txctrl &= ~E1000_DCA_TXCTRL_TX_WB_RO_EN; 1702 txctrl &= ~E1000_DCA_TXCTRL_TX_WB_RO_EN;
1667 wr32(E1000_DCA_TXCTRL(i), txctrl); 1703 wr32(E1000_DCA_TXCTRL(j), txctrl);
1668 } 1704 }
1669 1705
1670 1706
@@ -1781,7 +1817,7 @@ static void igb_setup_rctl(struct igb_adapter *adapter)
1781 struct e1000_hw *hw = &adapter->hw; 1817 struct e1000_hw *hw = &adapter->hw;
1782 u32 rctl; 1818 u32 rctl;
1783 u32 srrctl = 0; 1819 u32 srrctl = 0;
1784 int i; 1820 int i, j;
1785 1821
1786 rctl = rd32(E1000_RCTL); 1822 rctl = rd32(E1000_RCTL);
1787 1823
@@ -1839,8 +1875,10 @@ static void igb_setup_rctl(struct igb_adapter *adapter)
1839 srrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF; 1875 srrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF;
1840 } 1876 }
1841 1877
1842 for (i = 0; i < adapter->num_rx_queues; i++) 1878 for (i = 0; i < adapter->num_rx_queues; i++) {
1843 wr32(E1000_SRRCTL(i), srrctl); 1879 j = adapter->rx_ring[i].reg_idx;
1880 wr32(E1000_SRRCTL(j), srrctl);
1881 }
1844 1882
1845 wr32(E1000_RCTL, rctl); 1883 wr32(E1000_RCTL, rctl);
1846} 1884}
@@ -1857,7 +1895,7 @@ static void igb_configure_rx(struct igb_adapter *adapter)
1857 struct e1000_hw *hw = &adapter->hw; 1895 struct e1000_hw *hw = &adapter->hw;
1858 u32 rctl, rxcsum; 1896 u32 rctl, rxcsum;
1859 u32 rxdctl; 1897 u32 rxdctl;
1860 int i; 1898 int i, j;
1861 1899
1862 /* disable receives while setting up the descriptors */ 1900 /* disable receives while setting up the descriptors */
1863 rctl = rd32(E1000_RCTL); 1901 rctl = rd32(E1000_RCTL);
@@ -1872,25 +1910,26 @@ static void igb_configure_rx(struct igb_adapter *adapter)
1872 * the Base and Length of the Rx Descriptor Ring */ 1910 * the Base and Length of the Rx Descriptor Ring */
1873 for (i = 0; i < adapter->num_rx_queues; i++) { 1911 for (i = 0; i < adapter->num_rx_queues; i++) {
1874 struct igb_ring *ring = &(adapter->rx_ring[i]); 1912 struct igb_ring *ring = &(adapter->rx_ring[i]);
1913 j = ring->reg_idx;
1875 rdba = ring->dma; 1914 rdba = ring->dma;
1876 wr32(E1000_RDBAL(i), 1915 wr32(E1000_RDBAL(j),
1877 rdba & 0x00000000ffffffffULL); 1916 rdba & 0x00000000ffffffffULL);
1878 wr32(E1000_RDBAH(i), rdba >> 32); 1917 wr32(E1000_RDBAH(j), rdba >> 32);
1879 wr32(E1000_RDLEN(i), 1918 wr32(E1000_RDLEN(j),
1880 ring->count * sizeof(union e1000_adv_rx_desc)); 1919 ring->count * sizeof(union e1000_adv_rx_desc));
1881 1920
1882 ring->head = E1000_RDH(i); 1921 ring->head = E1000_RDH(j);
1883 ring->tail = E1000_RDT(i); 1922 ring->tail = E1000_RDT(j);
1884 writel(0, hw->hw_addr + ring->tail); 1923 writel(0, hw->hw_addr + ring->tail);
1885 writel(0, hw->hw_addr + ring->head); 1924 writel(0, hw->hw_addr + ring->head);
1886 1925
1887 rxdctl = rd32(E1000_RXDCTL(i)); 1926 rxdctl = rd32(E1000_RXDCTL(j));
1888 rxdctl |= E1000_RXDCTL_QUEUE_ENABLE; 1927 rxdctl |= E1000_RXDCTL_QUEUE_ENABLE;
1889 rxdctl &= 0xFFF00000; 1928 rxdctl &= 0xFFF00000;
1890 rxdctl |= IGB_RX_PTHRESH; 1929 rxdctl |= IGB_RX_PTHRESH;
1891 rxdctl |= IGB_RX_HTHRESH << 8; 1930 rxdctl |= IGB_RX_HTHRESH << 8;
1892 rxdctl |= IGB_RX_WTHRESH << 16; 1931 rxdctl |= IGB_RX_WTHRESH << 16;
1893 wr32(E1000_RXDCTL(i), rxdctl); 1932 wr32(E1000_RXDCTL(j), rxdctl);
1894#ifdef CONFIG_IGB_LRO 1933#ifdef CONFIG_IGB_LRO
1895 /* Intitial LRO Settings */ 1934 /* Intitial LRO Settings */
1896 ring->lro_mgr.max_aggr = MAX_LRO_AGGR; 1935 ring->lro_mgr.max_aggr = MAX_LRO_AGGR;
@@ -1920,7 +1959,7 @@ static void igb_configure_rx(struct igb_adapter *adapter)
1920 shift = 6; 1959 shift = 6;
1921 for (j = 0; j < (32 * 4); j++) { 1960 for (j = 0; j < (32 * 4); j++) {
1922 reta.bytes[j & 3] = 1961 reta.bytes[j & 3] =
1923 (j % adapter->num_rx_queues) << shift; 1962 adapter->rx_ring[(j % adapter->num_rx_queues)].reg_idx << shift;
1924 if ((j & 3) == 3) 1963 if ((j & 3) == 3)
1925 writel(reta.dword, 1964 writel(reta.dword,
1926 hw->hw_addr + E1000_RETA(0) + (j & ~3)); 1965 hw->hw_addr + E1000_RETA(0) + (j & ~3));
@@ -3365,7 +3404,7 @@ static void igb_update_rx_dca(struct igb_ring *rx_ring)
3365 struct igb_adapter *adapter = rx_ring->adapter; 3404 struct igb_adapter *adapter = rx_ring->adapter;
3366 struct e1000_hw *hw = &adapter->hw; 3405 struct e1000_hw *hw = &adapter->hw;
3367 int cpu = get_cpu(); 3406 int cpu = get_cpu();
3368 int q = rx_ring - adapter->rx_ring; 3407 int q = rx_ring->reg_idx;
3369 3408
3370 if (rx_ring->cpu != cpu) { 3409 if (rx_ring->cpu != cpu) {
3371 dca_rxctrl = rd32(E1000_DCA_RXCTRL(q)); 3410 dca_rxctrl = rd32(E1000_DCA_RXCTRL(q));
@@ -3392,7 +3431,7 @@ static void igb_update_tx_dca(struct igb_ring *tx_ring)
3392 struct igb_adapter *adapter = tx_ring->adapter; 3431 struct igb_adapter *adapter = tx_ring->adapter;
3393 struct e1000_hw *hw = &adapter->hw; 3432 struct e1000_hw *hw = &adapter->hw;
3394 int cpu = get_cpu(); 3433 int cpu = get_cpu();
3395 int q = tx_ring - adapter->tx_ring; 3434 int q = tx_ring->reg_idx;
3396 3435
3397 if (tx_ring->cpu != cpu) { 3436 if (tx_ring->cpu != cpu) {
3398 dca_txctrl = rd32(E1000_DCA_TXCTRL(q)); 3437 dca_txctrl = rd32(E1000_DCA_TXCTRL(q));