ata: dwc_ahsata: Add ahci driver model support
authorSoeren Moch <smoch@web.de>
Fri, 1 Mar 2019 12:10:59 +0000 (13:10 +0100)
committerStefano Babic <sbabic@denx.de>
Sat, 13 Apr 2019 18:30:09 +0000 (20:30 +0200)
Disable this support for cm_fx6 to avoid breakage.

Signed-off-by: Soeren Moch <smoch@web.de>
configs/cm_fx6_defconfig
drivers/ata/Kconfig
drivers/ata/dwc_ahsata.c

index 6156ac2bee4bb620b7ec61dfd17d5ef50343cba2..2178170c5a29976575419cbf9714831ab1415c13 100644 (file)
@@ -51,6 +51,7 @@ CONFIG_DEFAULT_DEVICE_TREE="imx6q-cm-fx6"
 CONFIG_ENV_IS_IN_SPI_FLASH=y
 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
 CONFIG_DWC_AHSATA=y
+# CONFIG_DWC_AHSATA_AHCI is not set
 CONFIG_DM_KEYBOARD=y
 CONFIG_DM_MMC=y
 CONFIG_FSL_ESDHC=y
index 7ebee75c0a5ba82c4befa854f6d8488c148ce70e..593e9cbc1f2ceea403e1034044c4f9d650a58e08 100644 (file)
@@ -66,6 +66,14 @@ config DWC_AHSATA
          Enable this driver to support the DWC AHSATA SATA controller found
          in i.MX5 and i.MX6 SoCs.
 
+config DWC_AHSATA_AHCI
+       bool "Enable DWC AHSATA AHCI driver support"
+       depends on DWC_AHSATA
+       depends on AHCI
+       default y
+       help
+         Enable this option unless you need your private ahci implementation
+
 config FSL_SATA
        bool "Enable Freescale SATA controller driver support"
        select LIBATA
index 6fe5641dd9dc902916f9c1b5213b223c57344d77..afced8e7e3f8aa9d7fccb053335985bc9f74ae9f 100644 (file)
@@ -16,6 +16,7 @@
 #include <asm/io.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/sys_proto.h>
+#include <asm/mach-imx/sata.h>
 #include <linux/bitops.h>
 #include <linux/ctype.h>
 #include <linux/errno.h>
@@ -1020,6 +1021,9 @@ int dwc_ahsata_probe(struct udevice *dev)
        struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev);
        int ret;
 
+#if defined(CONFIG_MX6)
+       setup_sata();
+#endif
        uc_priv->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
                        ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | ATA_FLAG_NO_ATAPI;
        uc_priv->mmio_base = (void __iomem *)dev_read_addr(dev);
@@ -1067,4 +1071,24 @@ U_BOOT_DRIVER(dwc_ahsata_blk) = {
        .ops            = &dwc_ahsata_blk_ops,
 };
 
+#if CONFIG_IS_ENABLED(DWC_AHSATA_AHCI)
+struct ahci_ops dwc_ahsata_ahci_ops = {
+       .port_status = dwc_ahsata_port_status,
+       .reset       = dwc_ahsata_bus_reset,
+       .scan        = dwc_ahsata_scan,
+};
+
+static const struct udevice_id dwc_ahsata_ahci_ids[] = {
+       { .compatible = "fsl,imx6q-ahci" },
+       { }
+};
+
+U_BOOT_DRIVER(dwc_ahsata_ahci) = {
+       .name     = "dwc_ahsata_ahci",
+       .id       = UCLASS_AHCI,
+       .of_match = dwc_ahsata_ahci_ids,
+       .ops      = &dwc_ahsata_ahci_ops,
+       .probe    = dwc_ahsata_probe,
+};
+#endif
 #endif