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:
parent
6364a5d4bd
commit
745a94f352
@ -236,7 +236,7 @@ static int bd82x6x_sata_probe(struct udevice *dev)
|
||||
bd82x6x_sata_enable(dev);
|
||||
else {
|
||||
bd82x6x_sata_init(dev, pch);
|
||||
ret = ahci_probe_scsi(dev);
|
||||
ret = ahci_probe_scsi_pci(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
@ -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
|
||||
@ -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,22 +1169,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,
|
||||
|
@ -218,8 +218,20 @@ int ahci_bind_scsi(struct udevice *ahci_dev, struct udevice **devp);
|
||||
* devices it finds.
|
||||
*
|
||||
* @ahci_dev: AHCI parent device
|
||||
* @base: Base address of AHCI port
|
||||
* @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
|
||||
|
Loading…
Reference in New Issue
Block a user