aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/ahci.c26
-rw-r--r--drivers/ata/dwc_ahci.c6
-rw-r--r--drivers/ata/sata_ceva.c3
-rw-r--r--drivers/scsi/scsi-uclass.c8
-rw-r--r--include/ahci.h14
-rw-r--r--include/scsi.h4
6 files changed, 42 insertions, 19 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 4830bcd..e986765 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -6,6 +6,8 @@
* SPDX-License-Identifier: GPL-2.0+
*
* with the reference on libata and ahci drvier in kernel
+ *
+ * This driver provides a SCSI interface to SATA.
*/
#include <common.h>
@@ -990,11 +992,8 @@ static int ahci_start_ports(struct ahci_uc_priv *uc_priv)
return 0;
}
-#if defined(CONFIG_DM_SCSI)
-void scsi_low_level_init(int busdevfunc, struct udevice *dev)
-#else
+#ifndef CONFIG_DM_SCSI
void scsi_low_level_init(int busdevfunc)
-#endif
{
struct ahci_uc_priv *uc_priv;
@@ -1007,8 +1006,6 @@ void scsi_low_level_init(int busdevfunc)
if (ret)
return;
ahci_init_one(dev);
-# elif defined(CONFIG_DM_SCSI)
- ahci_init_one(dev);
# else
ahci_init_one(busdevfunc);
# endif
@@ -1017,6 +1014,23 @@ void scsi_low_level_init(int busdevfunc)
ahci_start_ports(uc_priv);
}
+#endif
+
+#ifndef CONFIG_SCSI_AHCI_PLAT
+# if defined(CONFIG_DM_PCI) || defined(CONFIG_DM_SCSI)
+int achi_init_one_dm(struct udevice *dev)
+{
+ return ahci_init_one(dev);
+}
+#endif
+#endif
+
+int achi_start_ports_dm(struct udevice *dev)
+{
+ struct ahci_uc_priv *uc_priv = probe_ent;
+
+ return ahci_start_ports(uc_priv);
+}
#ifdef CONFIG_SCSI_AHCI_PLAT
int ahci_init(void __iomem *base)
diff --git a/drivers/ata/dwc_ahci.c b/drivers/ata/dwc_ahci.c
index e634df5..eadd779 100644
--- a/drivers/ata/dwc_ahci.c
+++ b/drivers/ata/dwc_ahci.c
@@ -81,7 +81,11 @@ static int dwc_ahci_probe(struct udevice *dev)
writel(val, priv->wrapper_base + TI_SATA_SYSCONFIG);
}
- return ahci_init(priv->base);
+ ret = ahci_init(priv->base);
+ if (ret)
+ return ret;
+
+ return achi_start_ports_dm(dev);
}
static const struct udevice_id dwc_ahci_ids[] = {
diff --git a/drivers/ata/sata_ceva.c b/drivers/ata/sata_ceva.c
index f55ba59..7d61a54 100644
--- a/drivers/ata/sata_ceva.c
+++ b/drivers/ata/sata_ceva.c
@@ -116,7 +116,8 @@ static int sata_ceva_probe(struct udevice *dev)
struct scsi_platdata *plat = dev_get_uclass_platdata(dev);
ceva_init_sata(plat->base);
- return 0;
+
+ return achi_init_one_dm(dev);
}
static const struct udevice_id sata_ceva_ids[] = {
diff --git a/drivers/scsi/scsi-uclass.c b/drivers/scsi/scsi-uclass.c
index e4ee44b..40c5044 100644
--- a/drivers/scsi/scsi-uclass.c
+++ b/drivers/scsi/scsi-uclass.c
@@ -13,16 +13,8 @@
#include <dm.h>
#include <scsi.h>
-static int scsi_post_probe(struct udevice *dev)
-{
- debug("%s: device %p\n", __func__, dev);
- scsi_low_level_init(0, dev);
- return 0;
-}
-
UCLASS_DRIVER(scsi) = {
.id = UCLASS_SCSI,
.name = "scsi",
- .post_probe = scsi_post_probe,
.per_device_platdata_auto_alloc_size = sizeof(struct scsi_platdata),
};
diff --git a/include/ahci.h b/include/ahci.h
index 4262ab7..ec5b0c7 100644
--- a/include/ahci.h
+++ b/include/ahci.h
@@ -179,4 +179,18 @@ struct ahci_uc_priv {
int ahci_init(void __iomem *base);
int ahci_reset(void __iomem *base);
+/**
+ * achi_init_one_dm() - set up a single AHCI port
+ *
+ * @dev: Controller to init
+ */
+int achi_init_one_dm(struct udevice *dev);
+
+/**
+ * achi_start_ports_dm() - start all AHCI ports for a controller
+ *
+ * @dev: Controller containing ports to start
+ */
+int achi_start_ports_dm(struct udevice *dev);
+
#endif
diff --git a/include/scsi.h b/include/scsi.h
index bc5be97..cd1b240 100644
--- a/include/scsi.h
+++ b/include/scsi.h
@@ -171,9 +171,7 @@ struct scsi_platdata {
unsigned long max_id;
};
-#if defined(CONFIG_DM_SCSI)
-void scsi_low_level_init(int busdevfunc, struct udevice *dev);
-#else
+#ifndef CONFIG_DM_SCSI
void scsi_low_level_init(int busdevfunc);
void scsi_init(void);
#endif