提交 5d57d1e2 编写于 作者: C Chiqijun 提交者: Yang Yingliang

net/hinic: Add support for X86 Arch

driver inclusion
category: feature
bugzilla: 4472

-----------------------------------------------------------------------

Add support for X86 Arch.
Add the best default interrupt aggregation parameter and LRO parameter on
 x86 platform.
Signed-off-by: NChiqijun <chiqijun@huawei.com>
Reviewed-by: NZengweiliang <zengweiliang.zengweiliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 e95c23a0
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
config NET_VENDOR_HUAWEI config NET_VENDOR_HUAWEI
bool "Huawei devices" bool "Huawei devices"
default y default y
depends on ARM64
---help--- ---help---
If you have a network (Ethernet) card belonging to this class, say Y. If you have a network (Ethernet) card belonging to this class, say Y.
Note that the answer to this question doesn't directly affect the Note that the answer to this question doesn't directly affect the
......
...@@ -368,7 +368,12 @@ void hinic_free_db_addr(void *hwdev, void __iomem *db_base, ...@@ -368,7 +368,12 @@ void hinic_free_db_addr(void *hwdev, void __iomem *db_base,
hwif = ((struct hinic_hwdev *)hwdev)->hwif; hwif = ((struct hinic_hwdev *)hwdev)->hwif;
idx = DB_IDX(db_base, hwif->db_base); idx = DB_IDX(db_base, hwif->db_base);
#if defined(__aarch64__)
/* No need to unmap */ /* No need to unmap */
#else
if (dwqe_base && hwif->chip_mode == CHIP_MODE_NORMAL)
io_mapping_unmap(dwqe_base);
#endif
free_db_idx(hwif, idx); free_db_idx(hwif, idx);
} }
...@@ -398,7 +403,12 @@ int hinic_alloc_db_addr(void *hwdev, void __iomem **db_base, ...@@ -398,7 +403,12 @@ int hinic_alloc_db_addr(void *hwdev, void __iomem **db_base,
offset = ((u64)idx) << PAGE_SHIFT; offset = ((u64)idx) << PAGE_SHIFT;
#if defined(__aarch64__)
*dwqe_base = hwif->dwqe_mapping + offset; *dwqe_base = hwif->dwqe_mapping + offset;
#else
*dwqe_base = io_mapping_map_wc(hwif->dwqe_mapping, offset,
HINIC_DB_PAGE_SIZE);
#endif
if (!(*dwqe_base)) { if (!(*dwqe_base)) {
hinic_free_db_addr(hwdev, *db_base, NULL); hinic_free_db_addr(hwdev, *db_base, NULL);
......
...@@ -58,7 +58,11 @@ struct hinic_hwif { ...@@ -58,7 +58,11 @@ struct hinic_hwif {
u64 db_base_phy; u64 db_base_phy;
u8 __iomem *db_base; u8 __iomem *db_base;
#if defined(__aarch64__)
void __iomem *dwqe_mapping; void __iomem *dwqe_mapping;
#else
struct io_mapping *dwqe_mapping;
#endif
struct hinic_free_db_area free_db_area; struct hinic_free_db_area free_db_area;
struct hinic_func_attr attr; struct hinic_func_attr attr;
......
...@@ -114,7 +114,11 @@ struct hinic_pcidev { ...@@ -114,7 +114,11 @@ struct hinic_pcidev {
u64 db_base_phy; u64 db_base_phy;
void __iomem *db_base; void __iomem *db_base;
#if defined(__aarch64__)
void __iomem *dwqe_mapping; void __iomem *dwqe_mapping;
#else
struct io_mapping *dwqe_mapping;
#endif
/* lock for attach/detach uld */ /* lock for attach/detach uld */
struct mutex pdev_mutex; struct mutex pdev_mutex;
struct hinic_sriov_info sriov_info; struct hinic_sriov_info sriov_info;
...@@ -1874,9 +1878,15 @@ static int mapping_bar(struct pci_dev *pdev, struct hinic_pcidev *pci_adapter) ...@@ -1874,9 +1878,15 @@ static int mapping_bar(struct pci_dev *pdev, struct hinic_pcidev *pci_adapter)
dwqe_addr = pci_adapter->db_base_phy + db_dwqe_size; dwqe_addr = pci_adapter->db_base_phy + db_dwqe_size;
#if defined(__aarch64__)
/* arm do not support call ioremap_wc() */ /* arm do not support call ioremap_wc() */
pci_adapter->dwqe_mapping = __ioremap(dwqe_addr, db_dwqe_size, pci_adapter->dwqe_mapping = __ioremap(dwqe_addr, db_dwqe_size,
__pgprot(PROT_DEVICE_nGnRnE)); __pgprot(PROT_DEVICE_nGnRnE));
#else
pci_adapter->dwqe_mapping = io_mapping_create_wc(dwqe_addr,
db_dwqe_size);
#endif
if (!pci_adapter->dwqe_mapping) { if (!pci_adapter->dwqe_mapping) {
sdk_err(&pci_adapter->pcidev->dev, "Failed to io_mapping_create_wc\n"); sdk_err(&pci_adapter->pcidev->dev, "Failed to io_mapping_create_wc\n");
goto mapping_dwqe_err; goto mapping_dwqe_err;
...@@ -1898,8 +1908,13 @@ static int mapping_bar(struct pci_dev *pdev, struct hinic_pcidev *pci_adapter) ...@@ -1898,8 +1908,13 @@ static int mapping_bar(struct pci_dev *pdev, struct hinic_pcidev *pci_adapter)
static void unmapping_bar(struct hinic_pcidev *pci_adapter) static void unmapping_bar(struct hinic_pcidev *pci_adapter)
{ {
if (pci_adapter->chip_mode == CHIP_MODE_NORMAL) if (pci_adapter->chip_mode == CHIP_MODE_NORMAL) {
#if defined(__aarch64__)
iounmap(pci_adapter->dwqe_mapping); iounmap(pci_adapter->dwqe_mapping);
#else
io_mapping_free(pci_adapter->dwqe_mapping);
#endif
}
iounmap(pci_adapter->db_base); iounmap(pci_adapter->db_base);
iounmap(pci_adapter->intr_reg_base); iounmap(pci_adapter->intr_reg_base);
......
...@@ -2908,7 +2908,13 @@ static void adaptive_configuration_init(struct hinic_nic_dev *nic_dev) ...@@ -2908,7 +2908,13 @@ static void adaptive_configuration_init(struct hinic_nic_dev *nic_dev)
nic_dev->env_info.os = HINIC_OS_HUAWEI; nic_dev->env_info.os = HINIC_OS_HUAWEI;
#if defined(__aarch64__)
nic_dev->env_info.cpu = HINIC_CPU_ARM_GENERIC; nic_dev->env_info.cpu = HINIC_CPU_ARM_GENERIC;
#elif defined(__x86_64__)
nic_dev->env_info.cpu = HINIC_CPU_X86_GENERIC;
#else
nic_dev->env_info.cpu = HINIC_CPU_UNKNOWN;
#endif
nic_info(&nic_dev->pdev->dev, nic_info(&nic_dev->pdev->dev,
"Board type %u, OS type %u, CPU type %u\n", "Board type %u, OS type %u, CPU type %u\n",
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
#define HINIC_LRO_RX_TIMER_DEFAULT_PG_10GE 10 #define HINIC_LRO_RX_TIMER_DEFAULT_PG_10GE 10
#define HINIC_LRO_RX_TIMER_DEFAULT_PG_100GE 8 #define HINIC_LRO_RX_TIMER_DEFAULT_PG_100GE 8
#if defined(__aarch64__)
#define HINIC_LOWEST_LATENCY 1 #define HINIC_LOWEST_LATENCY 1
#define HINIC_RX_RATE_LOW 400000 #define HINIC_RX_RATE_LOW 400000
#define HINIC_RX_COAL_TIME_LOW 20 #define HINIC_RX_COAL_TIME_LOW 20
...@@ -67,6 +68,19 @@ ...@@ -67,6 +68,19 @@
#define HINIC_TX_RATE_THRESH 35000 #define HINIC_TX_RATE_THRESH 35000
#define HINIC_RX_RATE_LOW_VM 400000 #define HINIC_RX_RATE_LOW_VM 400000
#define HINIC_RX_PENDING_LIMIT_HIGH_VM 50 #define HINIC_RX_PENDING_LIMIT_HIGH_VM 50
#else
#define HINIC_LOWEST_LATENCY 1
#define HINIC_RX_RATE_LOW 400000
#define HINIC_RX_COAL_TIME_LOW 16
#define HINIC_RX_PENDING_LIMIT_LOW 2
#define HINIC_RX_RATE_HIGH 1000000
#define HINIC_RX_COAL_TIME_HIGH 225
#define HINIC_RX_PENDING_LIMIT_HIGH 8
#define HINIC_RX_RATE_THRESH 50000
#define HINIC_TX_RATE_THRESH 50000
#define HINIC_RX_RATE_LOW_VM 100000
#define HINIC_RX_PENDING_LIMIT_HIGH_VM 87
#endif
enum hinic_board_type { enum hinic_board_type {
HINIC_BOARD_UNKNOWN = 0, HINIC_BOARD_UNKNOWN = 0,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册