}
 static DEVICE_ATTR_RW(intr_coal_count_v3_hw);
 
+static int slave_configure_v3_hw(struct scsi_device *sdev)
+{
+       struct Scsi_Host *shost = dev_to_shost(&sdev->sdev_gendev);
+       struct domain_device *ddev = sdev_to_domain_dev(sdev);
+       struct hisi_hba *hisi_hba = shost_priv(shost);
+       struct device *dev = hisi_hba->dev;
+       int ret = sas_slave_configure(sdev);
+
+       if (ret)
+               return ret;
+       if (!dev_is_sata(ddev))
+               sas_change_queue_depth(sdev, 64);
+
+       if (sdev->type == TYPE_ENCLOSURE)
+               return 0;
+
+       if (!device_link_add(&sdev->sdev_gendev, dev,
+                            DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE)) {
+               if (pm_runtime_enabled(dev)) {
+                       dev_info(dev, "add device link failed, disable runtime PM for the host\n");
+                       pm_runtime_disable(dev);
+               }
+       }
+
+       return 0;
+}
+
 static struct device_attribute *host_attrs_v3_hw[] = {
        &dev_attr_phy_event_threshold,
        &dev_attr_intr_conv_v3_hw,
        .queuecommand           = sas_queuecommand,
        .dma_need_drain         = ata_scsi_dma_need_drain,
        .target_alloc           = sas_target_alloc,
-       .slave_configure        = hisi_sas_slave_configure,
+       .slave_configure        = slave_configure_v3_hw,
        .scan_finished          = hisi_sas_scan_finished,
        .scan_start             = hisi_sas_scan_start,
        .change_queue_depth     = sas_change_queue_depth,