Amber-Lite is a new model of network interface card launched by Wangxun. It comes in two types: one supports 10g/25g rates, and the other supports 10g/40g rates.
Signed-off-by: Zaiyu Wang <zaiyuw...@trustnetic.com> --- drivers/net/txgbe/base/txgbe_devids.h | 9 +++++++ drivers/net/txgbe/base/txgbe_hw.c | 17 +++++++++++++ drivers/net/txgbe/base/txgbe_regs.h | 4 ++- drivers/net/txgbe/base/txgbe_type.h | 3 +++ drivers/net/txgbe/txgbe_ethdev.c | 35 ++++++++++++++++++++------- 5 files changed, 58 insertions(+), 10 deletions(-) diff --git a/drivers/net/txgbe/base/txgbe_devids.h b/drivers/net/txgbe/base/txgbe_devids.h index a3f26eabf6..b7133c7d54 100644 --- a/drivers/net/txgbe/base/txgbe_devids.h +++ b/drivers/net/txgbe/base/txgbe_devids.h @@ -19,6 +19,15 @@ #define TXGBE_DEV_ID_WX1820 0x2001 #define TXGBE_DEV_ID_SP1000_VF 0x1000 #define TXGBE_DEV_ID_WX1820_VF 0x2000 +#define TXGBE_DEV_ID_AML 0x5000 +#define TXGBE_DEV_ID_AML5025 0x5025 +#define TXGBE_DEV_ID_AML5125 0x5125 +#define TXGBE_DEV_ID_AML5040 0x5040 +#define TXGBE_DEV_ID_AML5140 0x5140 + +#define TXGBE_DEV_ID_AML_VF 0x5001 +#define TXGBE_DEV_ID_AML5024_VF 0x5024 +#define TXGBE_DEV_ID_AML5124_VF 0x5124 /* * Subsystem IDs diff --git a/drivers/net/txgbe/base/txgbe_hw.c b/drivers/net/txgbe/base/txgbe_hw.c index dd5d3ea1fe..85dbbc5eff 100644 --- a/drivers/net/txgbe/base/txgbe_hw.c +++ b/drivers/net/txgbe/base/txgbe_hw.c @@ -2469,6 +2469,8 @@ s32 txgbe_init_shared_code(struct txgbe_hw *hw) txgbe_init_ops_dummy(hw); switch (hw->mac.type) { case txgbe_mac_raptor: + case txgbe_mac_aml: + case txgbe_mac_aml40: status = txgbe_init_ops_pf(hw); break; case txgbe_mac_raptor_vf: @@ -2506,11 +2508,26 @@ s32 txgbe_set_mac_type(struct txgbe_hw *hw) case TXGBE_DEV_ID_WX1820: hw->mac.type = txgbe_mac_raptor; break; + case TXGBE_DEV_ID_AML: + case TXGBE_DEV_ID_AML5025: + case TXGBE_DEV_ID_AML5125: + hw->mac.type = txgbe_mac_aml; + break; + case TXGBE_DEV_ID_AML5040: + case TXGBE_DEV_ID_AML5140: + hw->mac.type = txgbe_mac_aml40; + break; case TXGBE_DEV_ID_SP1000_VF: case TXGBE_DEV_ID_WX1820_VF: hw->phy.media_type = txgbe_media_type_virtual; hw->mac.type = txgbe_mac_raptor_vf; break; + case TXGBE_DEV_ID_AML_VF: + case TXGBE_DEV_ID_AML5024_VF: + case TXGBE_DEV_ID_AML5124_VF: + hw->phy.media_type = txgbe_media_type_virtual; + hw->mac.type = txgbe_mac_aml_vf; + break; default: err = TXGBE_ERR_DEVICE_NOT_SUPPORTED; DEBUGOUT("Unsupported device id: %x", hw->device_id); diff --git a/drivers/net/txgbe/base/txgbe_regs.h b/drivers/net/txgbe/base/txgbe_regs.h index 7a9ba6976f..a27860ac84 100644 --- a/drivers/net/txgbe/base/txgbe_regs.h +++ b/drivers/net/txgbe/base/txgbe_regs.h @@ -97,7 +97,9 @@ #define TXGBE_LINK_SPEED_2_5GB_FULL 0x0400 #define TXGBE_LINK_SPEED_5GB_FULL 0x0800 #define TXGBE_LINK_SPEED_10GB_FULL 0x0080 -#define TXGBE_LINK_SPEED_40GB_FULL 0x0100 +#define TXGBE_LINK_SPEED_25GB_FULL 0x0100 +#define TXGBE_LINK_SPEED_40GB_FULL 0x0040 +#define TXGBE_LINK_SPEED_50GB_FULL 0x0200 #define TXGBE_AUTOC_AUTONEG MS64(63, 0x1) diff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h index 4371876649..1a5e4326a7 100644 --- a/drivers/net/txgbe/base/txgbe_type.h +++ b/drivers/net/txgbe/base/txgbe_type.h @@ -148,7 +148,10 @@ enum txgbe_eeprom_type { enum txgbe_mac_type { txgbe_mac_unknown = 0, txgbe_mac_raptor, + txgbe_mac_aml, + txgbe_mac_aml40, txgbe_mac_raptor_vf, + txgbe_mac_aml_vf, txgbe_num_macs }; diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c index ea9faba2c0..2431057485 100644 --- a/drivers/net/txgbe/txgbe_ethdev.c +++ b/drivers/net/txgbe/txgbe_ethdev.c @@ -145,6 +145,11 @@ static void txgbe_l2_tunnel_conf(struct rte_eth_dev *dev); static const struct rte_pci_id pci_id_txgbe_map[] = { { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_SP1000) }, { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_WX1820) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML5025) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML5125) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML5040) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_AML5140) }, { .vendor_id = 0, /* sentinel */ }, }; @@ -1829,8 +1834,13 @@ txgbe_dev_start(struct rte_eth_dev *dev) if (err) goto error; - allowed_speeds = RTE_ETH_LINK_SPEED_100M | RTE_ETH_LINK_SPEED_1G | - RTE_ETH_LINK_SPEED_10G; + if (hw->mac.type == txgbe_mac_aml40) + allowed_speeds = RTE_ETH_LINK_SPEED_40G; + else if (hw->mac.type == txgbe_mac_aml) + allowed_speeds = RTE_ETH_LINK_SPEED_10G | RTE_ETH_LINK_SPEED_25G; + else + allowed_speeds = RTE_ETH_LINK_SPEED_100M | RTE_ETH_LINK_SPEED_1G | + RTE_ETH_LINK_SPEED_10G; link_speeds = &dev->data->dev_conf.link_speeds; if (((*link_speeds) >> 1) & ~(allowed_speeds >> 1)) { @@ -1840,17 +1850,24 @@ txgbe_dev_start(struct rte_eth_dev *dev) speed = 0x0; if (*link_speeds == RTE_ETH_LINK_SPEED_AUTONEG) { - speed = (TXGBE_LINK_SPEED_100M_FULL | - TXGBE_LINK_SPEED_1GB_FULL | - TXGBE_LINK_SPEED_10GB_FULL); + if (hw->mac.type == txgbe_mac_aml40) { + speed = TXGBE_LINK_SPEED_40GB_FULL; + } else if (hw->mac.type == txgbe_mac_aml) { + speed = (TXGBE_LINK_SPEED_10GB_FULL | + TXGBE_LINK_SPEED_25GB_FULL); + } else { + speed = (TXGBE_LINK_SPEED_100M_FULL | + TXGBE_LINK_SPEED_1GB_FULL | + TXGBE_LINK_SPEED_10GB_FULL); + } hw->autoneg = true; } else { + if (*link_speeds & RTE_ETH_LINK_SPEED_40G) + speed |= TXGBE_LINK_SPEED_40GB_FULL; + if (*link_speeds & RTE_ETH_LINK_SPEED_25G) + speed |= TXGBE_LINK_SPEED_25GB_FULL; if (*link_speeds & RTE_ETH_LINK_SPEED_10G) speed |= TXGBE_LINK_SPEED_10GB_FULL; - if (*link_speeds & RTE_ETH_LINK_SPEED_5G) - speed |= TXGBE_LINK_SPEED_5GB_FULL; - if (*link_speeds & RTE_ETH_LINK_SPEED_2_5G) - speed |= TXGBE_LINK_SPEED_2_5GB_FULL; if (*link_speeds & RTE_ETH_LINK_SPEED_1G) speed |= TXGBE_LINK_SPEED_1GB_FULL; if (*link_speeds & RTE_ETH_LINK_SPEED_100M) -- 2.21.0.windows.1