qlcnic: Simplify DMA setting
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sat, 8 Jan 2022 13:48:59 +0000 (14:48 +0100)
committerJakub Kicinski <kuba@kernel.org>
Mon, 10 Jan 2022 00:52:18 +0000 (16:52 -0800)
As stated in [1], dma_set_mask() with a 64-bit mask will never fail if
dev->dma_mask is non-NULL.
So, if it fails, the 32 bits case will also fail for the same reason.

So qlcnic_set_dma_mask(), (in qlcnic_main.c) can be simplified a lot and
inlined directly in its only caller.

If dma_set_mask_and_coherent() succeeds, 'pci_using_dac' is known to be 1.
So it can be removed from all the calling chain.

qlcnic_setup_netdev() can finally be simplified as-well.

[1]: https://lkml.org/lkml/2021/6/7/398

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/4996ab0337d62ec6a54b2edf234cd5ced4b4d7ad.1641649611.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c

index be7abee160e78851105a5f9ff1916071256df32b..b25102fded7b20b44bc658a432bd00d12f5033b3 100644 (file)
@@ -1698,7 +1698,7 @@ int qlcnic_set_vxlan_port(struct qlcnic_adapter *adapter, u16 port);
 int qlcnic_set_vxlan_parsing(struct qlcnic_adapter *adapter, u16 port);
 int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter);
 int qlcnic_read_mac_addr(struct qlcnic_adapter *);
-int qlcnic_setup_netdev(struct qlcnic_adapter *, struct net_device *, int);
+int qlcnic_setup_netdev(struct qlcnic_adapter *, struct net_device *);
 void qlcnic_set_netdev_features(struct qlcnic_adapter *,
                                struct qlcnic_esw_func_cfg *);
 void qlcnic_sriov_vf_set_multi(struct net_device *);
index 6f1d9c1fd1b0de64258fd9f09c63e4d1efc64785..23cd47d588e53fb25e2346d97121c531f202bf6c 100644 (file)
@@ -609,7 +609,7 @@ int qlcnic_83xx_read_flash_descriptor_table(struct qlcnic_adapter *);
 int qlcnic_83xx_flash_read32(struct qlcnic_adapter *, u32, u8 *, int);
 int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *,
                                      u32, u8 *, int);
-int qlcnic_83xx_init(struct qlcnic_adapter *, int);
+int qlcnic_83xx_init(struct qlcnic_adapter *);
 int qlcnic_83xx_idc_ready_state_entry(struct qlcnic_adapter *);
 void qlcnic_83xx_idc_poll_dev_state(struct work_struct *);
 void qlcnic_83xx_idc_exit(struct qlcnic_adapter *);
index 27dffa299ca6f45dac1dcc6851e0378046334bff..dbb800769cb63e1794293950b8671eaf7cda4d63 100644 (file)
@@ -2432,7 +2432,7 @@ static void qlcnic_83xx_init_rings(struct qlcnic_adapter *adapter)
        qlcnic_set_sds_ring_count(adapter, rx_cnt);
 }
 
-int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
+int qlcnic_83xx_init(struct qlcnic_adapter *adapter)
 {
        struct qlcnic_hardware_context *ahw = adapter->ahw;
        int err = 0;
@@ -2466,7 +2466,7 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
                goto exit;
 
        if (qlcnic_sriov_vf_check(adapter)) {
-               err = qlcnic_sriov_vf_init(adapter, pci_using_dac);
+               err = qlcnic_sriov_vf_init(adapter);
                if (err)
                        goto detach_mbx;
                else
index ed84f0f97623053b87d3ea87916dba4392a4870f..d320567b2cca70e0e03b88042494611c96f3643a 100644 (file)
@@ -2258,8 +2258,7 @@ static int qlcnic_set_real_num_queues(struct qlcnic_adapter *adapter,
 }
 
 int
-qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev,
-                   int pci_using_dac)
+qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev)
 {
        int err;
        struct pci_dev *pdev = adapter->pdev;
@@ -2278,20 +2277,15 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev,
 
        netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
                             NETIF_F_IPV6_CSUM | NETIF_F_GRO |
-                            NETIF_F_HW_VLAN_CTAG_RX);
+                            NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HIGHDMA);
        netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM |
-                                 NETIF_F_IPV6_CSUM);
+                                 NETIF_F_IPV6_CSUM | NETIF_F_HIGHDMA);
 
        if (QLCNIC_IS_TSO_CAPABLE(adapter)) {
                netdev->features |= (NETIF_F_TSO | NETIF_F_TSO6);
                netdev->vlan_features |= (NETIF_F_TSO | NETIF_F_TSO6);
        }
 
-       if (pci_using_dac) {
-               netdev->features |= NETIF_F_HIGHDMA;
-               netdev->vlan_features |= NETIF_F_HIGHDMA;
-       }
-
        if (qlcnic_vlan_tx_check(adapter))
                netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX);
 
@@ -2341,20 +2335,6 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, struct net_device *netdev,
        return 0;
 }
 
-static int qlcnic_set_dma_mask(struct pci_dev *pdev, int *pci_using_dac)
-{
-       if (!dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)))
-               *pci_using_dac = 1;
-       else if (!dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)))
-               *pci_using_dac = 0;
-       else {
-               dev_err(&pdev->dev, "Unable to set DMA mask, aborting\n");
-               return -EIO;
-       }
-
-       return 0;
-}
-
 void qlcnic_free_tx_rings(struct qlcnic_adapter *adapter)
 {
        int ring;
@@ -2441,8 +2421,8 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct net_device *netdev = NULL;
        struct qlcnic_adapter *adapter = NULL;
        struct qlcnic_hardware_context *ahw;
-       int err, pci_using_dac = -1;
        char board_name[QLCNIC_MAX_BOARD_NAME_LEN + 19]; /* MAC + ": " + name */
+       int err;
 
        err = pci_enable_device(pdev);
        if (err)
@@ -2453,9 +2433,11 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                goto err_out_disable_pdev;
        }
 
-       err = qlcnic_set_dma_mask(pdev, &pci_using_dac);
-       if (err)
+       err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
+       if (err) {
+               dev_err(&pdev->dev, "Unable to set DMA mask, aborting\n");
                goto err_out_disable_pdev;
+       }
 
        err = pci_request_regions(pdev, qlcnic_driver_name);
        if (err)
@@ -2569,7 +2551,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        } else if (qlcnic_83xx_check(adapter)) {
                qlcnic_83xx_check_vf(adapter, ent);
                adapter->portnum = adapter->ahw->pci_func;
-               err = qlcnic_83xx_init(adapter, pci_using_dac);
+               err = qlcnic_83xx_init(adapter);
                if (err) {
                        switch (err) {
                        case -ENOTRECOVERABLE:
@@ -2633,7 +2615,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (adapter->portnum == 0)
                qlcnic_set_drv_version(adapter);
 
-       err = qlcnic_setup_netdev(adapter, netdev, pci_using_dac);
+       err = qlcnic_setup_netdev(adapter, netdev);
        if (err)
                goto err_out_disable_mbx_intr;
 
index d0111cb3b40e1c5f1e0804e7d8b5dddcbc863541..c42b99cd58bd704643cc489854c854efa3ee7f8b 100644 (file)
@@ -188,7 +188,7 @@ int qlcnic_sriov_init(struct qlcnic_adapter *, int);
 void qlcnic_sriov_cleanup(struct qlcnic_adapter *);
 void __qlcnic_sriov_cleanup(struct qlcnic_adapter *);
 void qlcnic_sriov_vf_register_map(struct qlcnic_hardware_context *);
-int qlcnic_sriov_vf_init(struct qlcnic_adapter *, int);
+int qlcnic_sriov_vf_init(struct qlcnic_adapter *);
 void qlcnic_sriov_vf_set_ops(struct qlcnic_adapter *);
 int qlcnic_sriov_func_to_index(struct qlcnic_adapter *, u8);
 void qlcnic_sriov_handle_bc_event(struct qlcnic_adapter *, u32);
index 42a44c97572aec68ea0ca3b69cc90b5e7abec43a..9282321c2e7fbb4a622205e7d35c84d5d91190bb 100644 (file)
@@ -525,8 +525,7 @@ static int qlcnic_sriov_vf_init_driver(struct qlcnic_adapter *adapter)
        return 0;
 }
 
-static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter,
-                                int pci_using_dac)
+static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter)
 {
        int err;
 
@@ -571,7 +570,7 @@ static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter,
        if (err)
                goto err_out_send_channel_term;
 
-       err = qlcnic_setup_netdev(adapter, adapter->netdev, pci_using_dac);
+       err = qlcnic_setup_netdev(adapter, adapter->netdev);
        if (err)
                goto err_out_send_channel_term;
 
@@ -614,7 +613,7 @@ static int qlcnic_sriov_check_dev_ready(struct qlcnic_adapter *adapter)
        return 0;
 }
 
-int qlcnic_sriov_vf_init(struct qlcnic_adapter *adapter, int pci_using_dac)
+int qlcnic_sriov_vf_init(struct qlcnic_adapter *adapter)
 {
        struct qlcnic_hardware_context *ahw = adapter->ahw;
        int err;
@@ -631,7 +630,7 @@ int qlcnic_sriov_vf_init(struct qlcnic_adapter *adapter, int pci_using_dac)
        if (err)
                return err;
 
-       err = qlcnic_sriov_setup_vf(adapter, pci_using_dac);
+       err = qlcnic_sriov_setup_vf(adapter);
        if (err)
                return err;