return 0;
 }
 
+static void set_default_llq_configurations(struct ena_llq_configurations *llq_config)
+{
+       llq_config->llq_header_location = ENA_ADMIN_INLINE_HEADER;
+       llq_config->llq_stride_ctrl = ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY;
+       llq_config->llq_num_decs_before_header = ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2;
+       llq_config->llq_ring_entry_size = ENA_ADMIN_LIST_ENTRY_SIZE_128B;
+       llq_config->llq_ring_entry_size_value = 128;
+}
+
+static int ena_set_queues_placement_policy(struct pci_dev *pdev,
+                                          struct ena_com_dev *ena_dev,
+                                          struct ena_admin_feature_llq_desc *llq,
+                                          struct ena_llq_configurations *llq_default_configurations)
+{
+       int rc;
+       u32 llq_feature_mask;
+
+       llq_feature_mask = 1 << ENA_ADMIN_LLQ;
+       if (!(ena_dev->supported_features & llq_feature_mask)) {
+               dev_err(&pdev->dev,
+                       "LLQ is not supported Fallback to host mode policy.\n");
+               ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;
+               return 0;
+       }
+
+       rc = ena_com_config_dev_mode(ena_dev, llq, llq_default_configurations);
+       if (unlikely(rc)) {
+               dev_err(&pdev->dev,
+                       "Failed to configure the device mode.  Fallback to host mode policy.\n");
+               ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;
+       }
+
+       return 0;
+}
+
+static int ena_map_llq_mem_bar(struct pci_dev *pdev, struct ena_com_dev *ena_dev,
+                              int bars)
+{
+       bool has_mem_bar = !!(bars & BIT(ENA_MEM_BAR));
+
+       if (!has_mem_bar) {
+               if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_DEV) {
+                       dev_err(&pdev->dev,
+                               "ENA device does not expose LLQ bar. Fallback to host mode policy.\n");
+                       ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;
+               }
+
+               return 0;
+       }
+
+       ena_dev->mem_bar = devm_ioremap_wc(&pdev->dev,
+                                          pci_resource_start(pdev, ENA_MEM_BAR),
+                                          pci_resource_len(pdev, ENA_MEM_BAR));
+
+       if (!ena_dev->mem_bar)
+               return -EFAULT;
+
+       return 0;
+}
+
 static int ena_device_init(struct ena_com_dev *ena_dev, struct pci_dev *pdev,
                           struct ena_com_dev_get_features_ctx *get_feat_ctx,
                           bool *wd_state)
 {
+       struct ena_llq_configurations llq_config;
        struct device *dev = &pdev->dev;
        bool readless_supported;
        u32 aenq_groups;
 
        *wd_state = !!(aenq_groups & BIT(ENA_ADMIN_KEEP_ALIVE));
 
+       set_default_llq_configurations(&llq_config);
+
+       rc = ena_set_queues_placement_policy(pdev, ena_dev, &get_feat_ctx->llq,
+                                            &llq_config);
+       if (rc) {
+               dev_err(&pdev->dev, "ena device init failed\n");
+               goto err_admin_init;
+       }
+
        return 0;
 
 err_admin_init:
        return max_num_io_queues;
 }
 
-static int ena_set_queues_placement_policy(struct pci_dev *pdev,
-                                          struct ena_com_dev *ena_dev,
-                                          struct ena_admin_feature_llq_desc *llq,
-                                          struct ena_llq_configurations *llq_default_configurations)
-{
-       bool has_mem_bar;
-       int rc;
-       u32 llq_feature_mask;
-
-       llq_feature_mask = 1 << ENA_ADMIN_LLQ;
-       if (!(ena_dev->supported_features & llq_feature_mask)) {
-               dev_err(&pdev->dev,
-                       "LLQ is not supported Fallback to host mode policy.\n");
-               ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;
-               return 0;
-       }
-
-       has_mem_bar = pci_select_bars(pdev, IORESOURCE_MEM) & BIT(ENA_MEM_BAR);
-
-       rc = ena_com_config_dev_mode(ena_dev, llq, llq_default_configurations);
-       if (unlikely(rc)) {
-               dev_err(&pdev->dev,
-                       "Failed to configure the device mode.  Fallback to host mode policy.\n");
-               ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;
-               return 0;
-       }
-
-       /* Nothing to config, exit */
-       if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_HOST)
-               return 0;
-
-       if (!has_mem_bar) {
-               dev_err(&pdev->dev,
-                       "ENA device does not expose LLQ bar. Fallback to host mode policy.\n");
-               ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;
-               return 0;
-       }
-
-       ena_dev->mem_bar = devm_ioremap_wc(&pdev->dev,
-                                          pci_resource_start(pdev, ENA_MEM_BAR),
-                                          pci_resource_len(pdev, ENA_MEM_BAR));
-
-       if (!ena_dev->mem_bar)
-               return -EFAULT;
-
-       return 0;
-}
-
 static void ena_set_dev_offloads(struct ena_com_dev_get_features_ctx *feat,
                                 struct net_device *netdev)
 {
        pci_release_selected_regions(pdev, release_bars);
 }
 
-static void set_default_llq_configurations(struct ena_llq_configurations *llq_config)
-{
-       llq_config->llq_header_location = ENA_ADMIN_INLINE_HEADER;
-       llq_config->llq_ring_entry_size = ENA_ADMIN_LIST_ENTRY_SIZE_128B;
-       llq_config->llq_stride_ctrl = ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY;
-       llq_config->llq_num_decs_before_header = ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2;
-       llq_config->llq_ring_entry_size_value = 128;
-}
 
 static int ena_calc_io_queue_size(struct ena_calc_queue_size_ctx *ctx)
 {
 {
        struct ena_calc_queue_size_ctx calc_queue_ctx = { 0 };
        struct ena_com_dev_get_features_ctx get_feat_ctx;
-       struct ena_llq_configurations llq_config;
        struct ena_com_dev *ena_dev = NULL;
        struct ena_adapter *adapter;
        struct net_device *netdev;
                goto err_free_region;
        }
 
-       set_default_llq_configurations(&llq_config);
-
-       rc = ena_set_queues_placement_policy(pdev, ena_dev, &get_feat_ctx.llq,
-                                            &llq_config);
+       rc = ena_map_llq_mem_bar(pdev, ena_dev, bars);
        if (rc) {
-               dev_err(&pdev->dev, "ena device init failed\n");
-               goto err_device_destroy;
+               dev_err(&pdev->dev, "ena llq bar mapping failed\n");
+               goto err_free_ena_dev;
        }
 
        calc_queue_ctx.ena_dev = ena_dev;