]> git.sur5r.net Git - u-boot/blobdiff - drivers/ata/ahci.c
rockchip: sdhci: support 8bit bus-width
[u-boot] / drivers / ata / ahci.c
index 6da412d178cc65a3b0a0d67b2a487c2a9589abdc..690d35c890d2d871e9d92a254f1cf386b0c8077c 100644 (file)
@@ -431,7 +431,7 @@ static void ahci_print_info(struct ahci_uc_priv *uc_priv)
               cap2 & (1 << 0) ? "boh " : "");
 }
 
-#ifndef CONFIG_SCSI_AHCI_PLAT
+#if defined(CONFIG_DM_SCSI) || !defined(CONFIG_SCSI_AHCI_PLAT)
 # if defined(CONFIG_DM_PCI) || defined(CONFIG_DM_SCSI)
 static int ahci_init_one(struct ahci_uc_priv *uc_priv, struct udevice *dev)
 # else
@@ -935,7 +935,7 @@ static int ahci_scsi_exec(struct udevice *dev, struct scsi_cmd *pccb)
 {
        struct ahci_uc_priv *uc_priv;
 #ifdef CONFIG_DM_SCSI
-       uc_priv = dev_get_uclass_priv(dev);
+       uc_priv = dev_get_uclass_priv(dev->parent);
 #else
        uc_priv = probe_ent;
 #endif
@@ -1026,7 +1026,7 @@ void scsi_low_level_init(int busdevfunc)
 
 #ifndef CONFIG_SCSI_AHCI_PLAT
 # if defined(CONFIG_DM_PCI) || defined(CONFIG_DM_SCSI)
-int achi_init_one_dm(struct udevice *dev)
+int ahci_init_one_dm(struct udevice *dev)
 {
        struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev);
 
@@ -1035,7 +1035,7 @@ int achi_init_one_dm(struct udevice *dev)
 #endif
 #endif
 
-int achi_start_ports_dm(struct udevice *dev)
+int ahci_start_ports_dm(struct udevice *dev)
 {
        struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev);
 
@@ -1158,11 +1158,8 @@ int ahci_bind_scsi(struct udevice *ahci_dev, struct udevice **devp)
        return 0;
 }
 
-int ahci_probe_scsi(struct udevice *ahci_dev)
+int ahci_probe_scsi(struct udevice *ahci_dev, ulong base)
 {
-#ifdef CONFIG_SCSI_AHCI_PLAT
-       return -ENOSYS;  /* TODO(sjg@chromium.org): Support non-PCI AHCI */
-#else
        struct ahci_uc_priv *uc_priv;
        struct scsi_platdata *uc_plat;
        struct udevice *dev;
@@ -1172,11 +1169,11 @@ int ahci_probe_scsi(struct udevice *ahci_dev)
        if (!dev)
                return -ENODEV;
        uc_plat = dev_get_uclass_platdata(dev);
-       uc_plat->base = (ulong)dm_pci_map_bar(ahci_dev, PCI_BASE_ADDRESS_5,
-                                             PCI_REGION_MEM);
+       uc_plat->base = base;
        uc_plat->max_lun = 1;
        uc_plat->max_id = 2;
-       uc_priv = dev_get_uclass_priv(dev);
+
+       uc_priv = dev_get_uclass_priv(ahci_dev);
        ret = ahci_init_one(uc_priv, dev);
        if (ret)
                return ret;
@@ -1184,15 +1181,21 @@ int ahci_probe_scsi(struct udevice *ahci_dev)
        if (ret)
                return ret;
 
-       debug("Scanning %s\n", dev->name);
-       ret = scsi_scan_dev(dev, true);
-       if (ret)
-               return ret;
-#endif
-
        return 0;
 }
 
+#ifdef CONFIG_DM_PCI
+int ahci_probe_scsi_pci(struct udevice *ahci_dev)
+{
+       ulong base;
+
+       base = (ulong)dm_pci_map_bar(ahci_dev, PCI_BASE_ADDRESS_5,
+                                    PCI_REGION_MEM);
+
+       return ahci_probe_scsi(ahci_dev, base);
+}
+#endif
+
 struct scsi_ops scsi_ops = {
        .exec           = ahci_scsi_exec,
        .bus_reset      = ahci_scsi_bus_reset,