mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 16:52:14 +02:00
ahci: Support non-PCI controllers
At present the AHCI SCSI driver only supports PCI with driver model. Rename the existing function to indicate this and add support for adding a non-PCI controller . Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Jaehoon Chung
parent
6364a5d4bd
commit
745a94f352
@@ -236,7 +236,7 @@ static int bd82x6x_sata_probe(struct udevice *dev)
|
|||||||
bd82x6x_sata_enable(dev);
|
bd82x6x_sata_enable(dev);
|
||||||
else {
|
else {
|
||||||
bd82x6x_sata_init(dev, pch);
|
bd82x6x_sata_init(dev, pch);
|
||||||
ret = ahci_probe_scsi(dev);
|
ret = ahci_probe_scsi_pci(dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -431,7 +431,7 @@ static void ahci_print_info(struct ahci_uc_priv *uc_priv)
|
|||||||
cap2 & (1 << 0) ? "boh " : "");
|
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)
|
# if defined(CONFIG_DM_PCI) || defined(CONFIG_DM_SCSI)
|
||||||
static int ahci_init_one(struct ahci_uc_priv *uc_priv, struct udevice *dev)
|
static int ahci_init_one(struct ahci_uc_priv *uc_priv, struct udevice *dev)
|
||||||
# else
|
# else
|
||||||
@@ -1158,11 +1158,8 @@ int ahci_bind_scsi(struct udevice *ahci_dev, struct udevice **devp)
|
|||||||
return 0;
|
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 ahci_uc_priv *uc_priv;
|
||||||
struct scsi_platdata *uc_plat;
|
struct scsi_platdata *uc_plat;
|
||||||
struct udevice *dev;
|
struct udevice *dev;
|
||||||
@@ -1172,22 +1169,33 @@ int ahci_probe_scsi(struct udevice *ahci_dev)
|
|||||||
if (!dev)
|
if (!dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
uc_plat = dev_get_uclass_platdata(dev);
|
uc_plat = dev_get_uclass_platdata(dev);
|
||||||
uc_plat->base = (ulong)dm_pci_map_bar(ahci_dev, PCI_BASE_ADDRESS_5,
|
uc_plat->base = base;
|
||||||
PCI_REGION_MEM);
|
|
||||||
uc_plat->max_lun = 1;
|
uc_plat->max_lun = 1;
|
||||||
uc_plat->max_id = 2;
|
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);
|
ret = ahci_init_one(uc_priv, dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = ahci_start_ports(uc_priv);
|
ret = ahci_start_ports(uc_priv);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
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 = {
|
struct scsi_ops scsi_ops = {
|
||||||
.exec = ahci_scsi_exec,
|
.exec = ahci_scsi_exec,
|
||||||
.bus_reset = ahci_scsi_bus_reset,
|
.bus_reset = ahci_scsi_bus_reset,
|
||||||
|
@@ -218,8 +218,20 @@ int ahci_bind_scsi(struct udevice *ahci_dev, struct udevice **devp);
|
|||||||
* devices it finds.
|
* devices it finds.
|
||||||
*
|
*
|
||||||
* @ahci_dev: AHCI parent device
|
* @ahci_dev: AHCI parent device
|
||||||
|
* @base: Base address of AHCI port
|
||||||
* @return 0 if OK, -ve on error
|
* @return 0 if OK, -ve on error
|
||||||
*/
|
*/
|
||||||
int ahci_probe_scsi(struct udevice *ahci_dev);
|
int ahci_probe_scsi(struct udevice *ahci_dev, ulong base);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ahci_probe_scsi_pci() - probe and scan the attached SCSI bus on PCI
|
||||||
|
*
|
||||||
|
* Note that the SCSI device will itself bind block devices for any storage
|
||||||
|
* devices it finds.
|
||||||
|
*
|
||||||
|
* @ahci_dev: AHCI parent device
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int ahci_probe_scsi_pci(struct udevice *ahci_dev);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user