diff options
Diffstat (limited to 'drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c')
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 55 |
1 files changed, 23 insertions, 32 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c index 5c8afe1a5ccb..ec8c738af726 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c @@ -126,7 +126,7 @@ void hns_mac_adjust_link(struct hns_mac_cb *mac_cb, int speed, int duplex) (enum mac_speed)speed, duplex); if (ret) { dev_err(mac_cb->dev, - "adjust_link failed,%s mac%d ret = %#x!\n", + "adjust_link failed, %s mac%d ret = %#x!\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id, ret); return; @@ -141,15 +141,16 @@ void hns_mac_adjust_link(struct hns_mac_cb *mac_cb, int speed, int duplex) *@port_num:port number * */ -static int hns_mac_get_inner_port_num(struct hns_mac_cb *mac_cb, - u8 vmid, u8 *port_num) +int hns_mac_get_inner_port_num(struct hns_mac_cb *mac_cb, u8 vmid, u8 *port_num) { + int q_num_per_vf, vf_num_per_port; + int vm_queue_id; u8 tmp_port; if (mac_cb->dsaf_dev->dsaf_mode <= DSAF_MODE_ENABLE) { if (mac_cb->mac_id != DSAF_MAX_PORT_NUM) { dev_err(mac_cb->dev, - "input invalid,%s mac%d vmid%d !\n", + "input invalid, %s mac%d vmid%d !\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id, vmid); return -EINVAL; @@ -157,23 +158,29 @@ static int hns_mac_get_inner_port_num(struct hns_mac_cb *mac_cb, } else if (mac_cb->dsaf_dev->dsaf_mode < DSAF_MODE_MAX) { if (mac_cb->mac_id >= DSAF_MAX_PORT_NUM) { dev_err(mac_cb->dev, - "input invalid,%s mac%d vmid%d!\n", + "input invalid, %s mac%d vmid%d!\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id, vmid); return -EINVAL; } } else { - dev_err(mac_cb->dev, "dsaf mode invalid,%s mac%d!\n", + dev_err(mac_cb->dev, "dsaf mode invalid, %s mac%d!\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id); return -EINVAL; } if (vmid >= mac_cb->dsaf_dev->rcb_common[0]->max_vfn) { - dev_err(mac_cb->dev, "input invalid,%s mac%d vmid%d !\n", + dev_err(mac_cb->dev, "input invalid, %s mac%d vmid%d !\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id, vmid); return -EINVAL; } + q_num_per_vf = mac_cb->dsaf_dev->rcb_common[0]->max_q_per_vf; + vf_num_per_port = mac_cb->dsaf_dev->rcb_common[0]->max_vfn; + + vm_queue_id = vmid * q_num_per_vf + + vf_num_per_port * q_num_per_vf * mac_cb->mac_id; + switch (mac_cb->dsaf_dev->dsaf_mode) { case DSAF_MODE_ENABLE_FIX: tmp_port = 0; @@ -193,10 +200,10 @@ static int hns_mac_get_inner_port_num(struct hns_mac_cb *mac_cb, case DSAF_MODE_DISABLE_6PORT_2VM: case DSAF_MODE_DISABLE_6PORT_4VM: case DSAF_MODE_DISABLE_6PORT_16VM: - tmp_port = vmid; + tmp_port = vm_queue_id; break; default: - dev_err(mac_cb->dev, "dsaf mode invalid,%s mac%d!\n", + dev_err(mac_cb->dev, "dsaf mode invalid, %s mac%d!\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id); return -EINVAL; } @@ -275,7 +282,7 @@ int hns_mac_set_multi(struct hns_mac_cb *mac_cb, ret = hns_dsaf_add_mac_mc_port(dsaf_dev, &mac_entry); if (ret) { dev_err(dsaf_dev->dev, - "set mac mc port failed,%s mac%d ret = %#x!\n", + "set mac mc port failed, %s mac%d ret = %#x!\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id, ret); return ret; @@ -305,7 +312,7 @@ int hns_mac_del_mac(struct hns_mac_cb *mac_cb, u32 vfn, char *mac) old_mac = &mac_cb->addr_entry_idx[vfn]; } else { dev_err(mac_cb->dev, - "vf queue is too large,%s mac%d queue = %#x!\n", + "vf queue is too large, %s mac%d queue = %#x!\n", mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id, vfn); return -EINVAL; } @@ -547,7 +554,7 @@ int hns_mac_set_autoneg(struct hns_mac_cb *mac_cb, u8 enable) struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb); if (mac_cb->phy_if == PHY_INTERFACE_MODE_XGMII && enable) { - dev_err(mac_cb->dev, "enable autoneg is not allowed!"); + dev_err(mac_cb->dev, "enabling autoneg is not allowed!\n"); return -ENOTSUPP; } @@ -571,7 +578,7 @@ int hns_mac_set_pauseparam(struct hns_mac_cb *mac_cb, u32 rx_en, u32 tx_en) if (mac_cb->mac_type == HNAE_PORT_DEBUG) { if (is_ver1 && (tx_en || rx_en)) { - dev_err(mac_cb->dev, "macv1 cann't enable tx/rx_pause!"); + dev_err(mac_cb->dev, "macv1 can't enable tx/rx_pause!\n"); return -EINVAL; } } @@ -644,21 +651,6 @@ hns_mac_phy_parse_addr(struct device *dev, struct fwnode_handle *fwnode) return addr; } -static int hns_mac_phydev_match(struct device *dev, void *fwnode) -{ - return dev->fwnode == fwnode; -} - -static struct -platform_device *hns_mac_find_platform_device(struct fwnode_handle *fwnode) -{ - struct device *dev; - - dev = bus_find_device(&platform_bus_type, NULL, - fwnode, hns_mac_phydev_match); - return dev ? to_platform_device(dev) : NULL; -} - static int hns_mac_register_phydev(struct mii_bus *mdio, struct hns_mac_cb *mac_cb, u32 addr) @@ -684,8 +676,7 @@ hns_mac_register_phydev(struct mii_bus *mdio, struct hns_mac_cb *mac_cb, if (!phy || IS_ERR(phy)) return -EIO; - if (mdio->irq) - phy->irq = mdio->irq[addr]; + phy->irq = mdio->irq[addr]; /* All data is now stored in the phy struct; * register it @@ -725,7 +716,7 @@ static void hns_mac_register_phy(struct hns_mac_cb *mac_cb) return; /* dev address in adev */ - pdev = hns_mac_find_platform_device(acpi_fwnode_handle(args.adev)); + pdev = hns_dsaf_find_platform_device(acpi_fwnode_handle(args.adev)); mii_bus = platform_get_drvdata(pdev); rc = hns_mac_register_phydev(mii_bus, mac_cb, addr); if (!rc) @@ -942,7 +933,7 @@ int hns_mac_get_cfg(struct dsaf_device *dsaf_dev, struct hns_mac_cb *mac_cb) ret = hns_mac_get_mode(mac_cb->phy_if); if (ret < 0) { dev_err(dsaf_dev->dev, - "hns_mac_get_mode failed,mac%d ret = %#x!\n", + "hns_mac_get_mode failed, mac%d ret = %#x!\n", mac_cb->mac_id, ret); return ret; } |