return rc;
}
-#if !CONFIG_IS_ENABLED(AHCI)
-static int ahci_init_one(int pdev)
-{
- int rc;
- struct ahci_uc_priv *uc_priv = NULL;
-
- uc_priv = malloc(sizeof(struct ahci_uc_priv));
- if (!uc_priv)
- return -ENOMEM;
-
- memset(uc_priv, 0, sizeof(struct ahci_uc_priv));
- uc_priv->dev = pdev;
-
- 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 *)CONFIG_DWC_AHSATA_BASE_ADDR;
-
- /* initialize adapter */
- rc = ahci_host_init(uc_priv);
- if (rc)
- goto err_out;
-
- ahci_print_info(uc_priv);
-
- /* Save the uc_private struct to block device struct */
- sata_dev_desc[pdev].priv = uc_priv;
-
- return 0;
-
-err_out:
- if (uc_priv)
- free(uc_priv);
- return rc;
-}
-
-int init_sata(int dev)
-{
- struct ahci_uc_priv *uc_priv = NULL;
-
-#if defined(CONFIG_MX6)
- if (!is_mx6dq() && !is_mx6dqp())
- return 1;
-#endif
- if (dev < 0 || dev > (CONFIG_SYS_SATA_MAX_DEVICE - 1)) {
- printf("The sata index %d is out of ranges\n\r", dev);
- return -1;
- }
-
- ahci_init_one(dev);
-
- uc_priv = sata_dev_desc[dev].priv;
-
- return dwc_ahci_start_ports(uc_priv) ? 1 : 0;
-}
-
-int reset_sata(int dev)
-{
- struct ahci_uc_priv *uc_priv;
- struct sata_host_regs *host_mmio;
-
- if (dev < 0 || dev > (CONFIG_SYS_SATA_MAX_DEVICE - 1)) {
- printf("The sata index %d is out of ranges\n\r", dev);
- return -1;
- }
-
- uc_priv = sata_dev_desc[dev].priv;
- if (NULL == uc_priv)
- /* not initialized, so nothing to reset */
- return 0;
-
- host_mmio = uc_priv->mmio_base;
- setbits_le32(&host_mmio->ghc, SATA_HOST_GHC_HR);
- while (readl(&host_mmio->ghc) & SATA_HOST_GHC_HR)
- udelay(100);
-
- free(uc_priv);
- memset(&sata_dev_desc[dev], 0, sizeof(struct blk_desc));
-
- return 0;
-}
-
-int sata_port_status(int dev, int port)
-{
- struct sata_port_regs *port_mmio;
- struct ahci_uc_priv *uc_priv = NULL;
-
- if (dev < 0 || dev > (CONFIG_SYS_SATA_MAX_DEVICE - 1))
- return -EINVAL;
-
- if (sata_dev_desc[dev].priv == NULL)
- return -ENODEV;
-
- uc_priv = sata_dev_desc[dev].priv;
- port_mmio = uc_priv->port[port].port_mmio;
-
- return readl(&port_mmio->ssts) & SATA_PORT_SSTS_DET_MASK;
-}
-
-/*
- * SATA interface between low level driver and command layer
- */
-ulong sata_read(int dev, ulong blknr, lbaint_t blkcnt, void *buffer)
-{
- struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv;
-
- return sata_read_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt,
- buffer);
-}
-
-ulong sata_write(int dev, ulong blknr, lbaint_t blkcnt, const void *buffer)
-{
- struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv;
-
- return sata_write_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt,
- buffer);
-}
-
-int scan_sata(int dev)
-{
- struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv;
- struct blk_desc *pdev = &sata_dev_desc[dev];
-
- return dwc_ahsata_scan_common(uc_priv, pdev);
-}
-#endif /* CONFIG_IS_ENABLED(AHCI) */
-
-#if CONFIG_IS_ENABLED(AHCI)
-
int dwc_ahsata_port_status(struct udevice *dev, int port)
{
struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev);
.probe = dwc_ahsata_probe,
};
#endif
-#endif