]> git.sur5r.net Git - u-boot/blobdiff - drivers/ata/ahci.c
sf: Add support for gd25q32b gigadevice flash
[u-boot] / drivers / ata / ahci.c
index 606347faac049d6e07c65e98cacc65ddef90cc67..c35912bd3341f97423d6bde0ab7ed71b95ed592b 100644 (file)
@@ -1,10 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) Freescale Semiconductor, Inc. 2006.
  * Author: Jason Jin<Jason.jin@freescale.com>
  *         Zhang Wei<wei.zhang@freescale.com>
  *
- * SPDX-License-Identifier:    GPL-2.0+
- *
  * with the reference on libata and ahci drvier in kernel
  *
  * This driver provides a SCSI interface to SATA.
@@ -431,7 +430,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 +934,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 +1025,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 +1034,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 +1157,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,22 +1168,33 @@ 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;
        ret = ahci_start_ports(uc_priv);
        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,