Commit b3f064e9 authored by Shannon Nelson's avatar Shannon Nelson Committed by David S. Miller

ionic: add support for device id 0x1004

Add support for the management port device id.  This is to
capture the device and set it up for devlink use, but not set
it up for network operations.  We still use a netdev object
in order to use the napi infrasucture for processing adminq
and notifyq messages, we just don't register the netdev.
Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c220e523
...@@ -18,6 +18,7 @@ struct ionic_lif; ...@@ -18,6 +18,7 @@ struct ionic_lif;
#define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_PF 0x1002 #define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_PF 0x1002
#define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_VF 0x1003 #define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_VF 0x1003
#define PCI_DEVICE_ID_PENSANDO_IONIC_ETH_MGMT 0x1004
#define DEVCMD_TIMEOUT 10 #define DEVCMD_TIMEOUT 10
...@@ -42,6 +43,7 @@ struct ionic { ...@@ -42,6 +43,7 @@ struct ionic {
struct dentry *dentry; struct dentry *dentry;
struct ionic_dev_bar bars[IONIC_BARS_MAX]; struct ionic_dev_bar bars[IONIC_BARS_MAX];
unsigned int num_bars; unsigned int num_bars;
bool is_mgmt_nic;
struct ionic_identity ident; struct ionic_identity ident;
struct list_head lifs; struct list_head lifs;
struct ionic_lif *master_lif; struct ionic_lif *master_lif;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
static const struct pci_device_id ionic_id_table[] = { static const struct pci_device_id ionic_id_table[] = {
{ PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_PF) }, { PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_PF) },
{ PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_VF) }, { PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_VF) },
{ PCI_VDEVICE(PENSANDO, PCI_DEVICE_ID_PENSANDO_IONIC_ETH_MGMT) },
{ 0, } /* end of table */ { 0, } /* end of table */
}; };
MODULE_DEVICE_TABLE(pci, ionic_id_table); MODULE_DEVICE_TABLE(pci, ionic_id_table);
...@@ -224,6 +225,9 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -224,6 +225,9 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_set_drvdata(pdev, ionic); pci_set_drvdata(pdev, ionic);
mutex_init(&ionic->dev_cmd_lock); mutex_init(&ionic->dev_cmd_lock);
ionic->is_mgmt_nic =
ent->device == PCI_DEVICE_ID_PENSANDO_IONIC_ETH_MGMT;
/* Query system for DMA addressing limitation for the device. */ /* Query system for DMA addressing limitation for the device. */
err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(IONIC_ADDR_LEN)); err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(IONIC_ADDR_LEN));
if (err) { if (err) {
...@@ -248,6 +252,7 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -248,6 +252,7 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
} }
pci_set_master(pdev); pci_set_master(pdev);
if (!ionic->is_mgmt_nic)
pcie_print_link_status(pdev); pcie_print_link_status(pdev);
err = ionic_map_bars(ionic); err = ionic_map_bars(ionic);
......
...@@ -82,7 +82,7 @@ int ionic_devlink_register(struct ionic *ionic) ...@@ -82,7 +82,7 @@ int ionic_devlink_register(struct ionic *ionic)
err = devlink_port_register(dl, &ionic->dl_port, 0); err = devlink_port_register(dl, &ionic->dl_port, 0);
if (err) if (err)
dev_err(ionic->dev, "devlink_port_register failed: %d\n", err); dev_err(ionic->dev, "devlink_port_register failed: %d\n", err);
else else if (!ionic->is_mgmt_nic)
devlink_port_type_eth_set(&ionic->dl_port, devlink_port_type_eth_set(&ionic->dl_port,
ionic->master_lif->netdev); ionic->master_lif->netdev);
......
...@@ -1155,6 +1155,10 @@ static int ionic_init_nic_features(struct ionic_lif *lif) ...@@ -1155,6 +1155,10 @@ static int ionic_init_nic_features(struct ionic_lif *lif)
netdev_features_t features; netdev_features_t features;
int err; int err;
/* no netdev features on the management device */
if (lif->ionic->is_mgmt_nic)
return 0;
/* set up what we expect to support by default */ /* set up what we expect to support by default */
features = NETIF_F_HW_VLAN_CTAG_TX | features = NETIF_F_HW_VLAN_CTAG_TX |
NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_RX |
...@@ -2383,6 +2387,12 @@ int ionic_lifs_register(struct ionic *ionic) ...@@ -2383,6 +2387,12 @@ int ionic_lifs_register(struct ionic *ionic)
{ {
int err; int err;
/* the netdev is not registered on the management device, it is
* only used as a vehicle for napi operations on the adminq
*/
if (ionic->is_mgmt_nic)
return 0;
INIT_WORK(&ionic->nb_work, ionic_lif_notify_work); INIT_WORK(&ionic->nb_work, ionic_lif_notify_work);
ionic->nb.notifier_call = ionic_lif_notify; ionic->nb.notifier_call = ionic_lif_notify;
......
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