Skip to content

Commit bf3be85

Browse files
Gatis Peiseniekskuba-moo
authored andcommitted
atl1c: detect NIC type early
To support NICs that allow for more than one tx queue it is required to detect NIC type early during probe. This is moves NIC type detection before netdev_alloc to prepare for that. Signed-off-by: Gatis Peisenieks <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 91b17a4 commit bf3be85

File tree

1 file changed

+27
-29
lines changed

1 file changed

+27
-29
lines changed

drivers/net/ethernet/atheros/atl1c/atl1c_main.c

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -646,41 +646,33 @@ static int atl1c_alloc_queues(struct atl1c_adapter *adapter)
646646
return 0;
647647
}
648648

649-
static void atl1c_set_mac_type(struct atl1c_hw *hw)
649+
static enum atl1c_nic_type atl1c_get_mac_type(struct pci_dev *pdev,
650+
u8 __iomem *hw_addr)
650651
{
651-
u32 magic;
652-
switch (hw->device_id) {
652+
switch (pdev->device) {
653653
case PCI_DEVICE_ID_ATTANSIC_L2C:
654-
hw->nic_type = athr_l2c;
655-
break;
654+
return athr_l2c;
656655
case PCI_DEVICE_ID_ATTANSIC_L1C:
657-
hw->nic_type = athr_l1c;
658-
break;
656+
return athr_l1c;
659657
case PCI_DEVICE_ID_ATHEROS_L2C_B:
660-
hw->nic_type = athr_l2c_b;
661-
break;
658+
return athr_l2c_b;
662659
case PCI_DEVICE_ID_ATHEROS_L2C_B2:
663-
hw->nic_type = athr_l2c_b2;
664-
break;
660+
return athr_l2c_b2;
665661
case PCI_DEVICE_ID_ATHEROS_L1D:
666-
hw->nic_type = athr_l1d;
667-
break;
662+
return athr_l1d;
668663
case PCI_DEVICE_ID_ATHEROS_L1D_2_0:
669-
hw->nic_type = athr_l1d_2;
670-
AT_READ_REG(hw, REG_MT_MAGIC, &magic);
671-
if (magic == MT_MAGIC)
672-
hw->nic_type = athr_mt;
673-
break;
664+
if (readl(hw_addr + REG_MT_MAGIC) == MT_MAGIC)
665+
return athr_mt;
666+
return athr_l1d_2;
674667
default:
675-
break;
668+
return athr_l1c;
676669
}
677670
}
678671

679672
static int atl1c_setup_mac_funcs(struct atl1c_hw *hw)
680673
{
681674
u32 link_ctrl_data;
682675

683-
atl1c_set_mac_type(hw);
684676
AT_READ_REG(hw, REG_LINK_CTRL, &link_ctrl_data);
685677

686678
hw->ctrl_flags = ATL1C_INTR_MODRT_ENABLE |
@@ -2568,7 +2560,8 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
25682560
struct net_device *netdev;
25692561
struct atl1c_adapter *adapter;
25702562
static int cards_found;
2571-
2563+
u8 __iomem *hw_addr;
2564+
enum atl1c_nic_type nic_type;
25722565
int err = 0;
25732566

25742567
/* enable device (incl. PCI PM wakeup and hotplug setup) */
@@ -2602,6 +2595,15 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
26022595

26032596
pci_set_master(pdev);
26042597

2598+
hw_addr = pci_ioremap_bar(pdev, 0);
2599+
if (!hw_addr) {
2600+
err = -EIO;
2601+
dev_err(&pdev->dev, "cannot map device registers\n");
2602+
goto err_ioremap;
2603+
}
2604+
2605+
nic_type = atl1c_get_mac_type(pdev, hw_addr);
2606+
26052607
netdev = alloc_etherdev(sizeof(struct atl1c_adapter));
26062608
if (netdev == NULL) {
26072609
err = -ENOMEM;
@@ -2618,13 +2620,9 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
26182620
adapter->netdev = netdev;
26192621
adapter->pdev = pdev;
26202622
adapter->hw.adapter = adapter;
2623+
adapter->hw.nic_type = nic_type;
26212624
adapter->msg_enable = netif_msg_init(-1, atl1c_default_msg);
2622-
adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
2623-
if (!adapter->hw.hw_addr) {
2624-
err = -EIO;
2625-
dev_err(&pdev->dev, "cannot map device registers\n");
2626-
goto err_ioremap;
2627-
}
2625+
adapter->hw.hw_addr = hw_addr;
26282626

26292627
/* init mii data */
26302628
adapter->mii.dev = netdev;
@@ -2687,11 +2685,11 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
26872685
err_reset:
26882686
err_register:
26892687
err_sw_init:
2690-
iounmap(adapter->hw.hw_addr);
26912688
err_init_netdev:
2692-
err_ioremap:
26932689
free_netdev(netdev);
26942690
err_alloc_etherdev:
2691+
iounmap(hw_addr);
2692+
err_ioremap:
26952693
pci_release_regions(pdev);
26962694
err_pci_reg:
26972695
err_dma:

0 commit comments

Comments
 (0)