Commit 34370d24 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

bnxt_en: Set up the chip specific RSS table size.

Currently, we allocate one page for the hardware DMA RSS indirection
table.  While the size is currently big enough for all chips, future
chip variations may support bigger sizes, so it is better to calculate
and store the chip specific size and allocate accordingly.
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e80a07b2
...@@ -3538,7 +3538,7 @@ static void bnxt_free_vnic_attributes(struct bnxt *bp) ...@@ -3538,7 +3538,7 @@ static void bnxt_free_vnic_attributes(struct bnxt *bp)
} }
if (vnic->rss_table) { if (vnic->rss_table) {
dma_free_coherent(&pdev->dev, PAGE_SIZE, dma_free_coherent(&pdev->dev, vnic->rss_table_size,
vnic->rss_table, vnic->rss_table,
vnic->rss_table_dma_addr); vnic->rss_table_dma_addr);
vnic->rss_table = NULL; vnic->rss_table = NULL;
...@@ -3603,7 +3603,13 @@ static int bnxt_alloc_vnic_attributes(struct bnxt *bp) ...@@ -3603,7 +3603,13 @@ static int bnxt_alloc_vnic_attributes(struct bnxt *bp)
continue; continue;
/* Allocate rss table and hash key */ /* Allocate rss table and hash key */
vnic->rss_table = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, size = L1_CACHE_ALIGN(HW_HASH_INDEX_SIZE * sizeof(u16));
if (bp->flags & BNXT_FLAG_CHIP_P5)
size = L1_CACHE_ALIGN(BNXT_MAX_RSS_TABLE_SIZE_P5);
vnic->rss_table_size = size + HW_HASH_KEY_SIZE;
vnic->rss_table = dma_alloc_coherent(&pdev->dev,
vnic->rss_table_size,
&vnic->rss_table_dma_addr, &vnic->rss_table_dma_addr,
GFP_KERNEL); GFP_KERNEL);
if (!vnic->rss_table) { if (!vnic->rss_table) {
...@@ -3611,8 +3617,6 @@ static int bnxt_alloc_vnic_attributes(struct bnxt *bp) ...@@ -3611,8 +3617,6 @@ static int bnxt_alloc_vnic_attributes(struct bnxt *bp)
goto out; goto out;
} }
size = L1_CACHE_ALIGN(HW_HASH_INDEX_SIZE * sizeof(u16));
vnic->rss_hash_key = ((void *)vnic->rss_table) + size; vnic->rss_hash_key = ((void *)vnic->rss_table) + size;
vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr + size; vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr + size;
} }
......
...@@ -1017,6 +1017,13 @@ struct bnxt_vnic_info { ...@@ -1017,6 +1017,13 @@ struct bnxt_vnic_info {
__le16 *rss_table; __le16 *rss_table;
dma_addr_t rss_hash_key_dma_addr; dma_addr_t rss_hash_key_dma_addr;
u64 *rss_hash_key; u64 *rss_hash_key;
int rss_table_size;
#define BNXT_RSS_TABLE_ENTRIES_P5 64
#define BNXT_RSS_TABLE_SIZE_P5 (BNXT_RSS_TABLE_ENTRIES_P5 * 4)
#define BNXT_RSS_TABLE_MAX_TBL_P5 8
#define BNXT_MAX_RSS_TABLE_SIZE_P5 \
(BNXT_RSS_TABLE_SIZE_P5 * BNXT_RSS_TABLE_MAX_TBL_P5)
u32 rx_mask; u32 rx_mask;
u8 *mc_list; u8 *mc_list;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment