summaryrefslogtreecommitdiff
path: root/drivers/ata/ahci.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-06-14 21:28:36 -0600
committerSimon Glass <sjg@chromium.org>2017-07-11 10:08:19 -0600
commit62b4ec8e302c7d616e37f2c2c2836edfea712309 (patch)
tree10653f21cea36ce63fe4ba1cfadb3ea6b4368fe7 /drivers/ata/ahci.c
parent099c239d687cd48cc05f372b9f354ffcfeeba83c (diff)
dm: ahci: Move common code for starting ports into a function
This code is duplicated. Create a ahci_start_ports() function to handle this and call it from both places. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'drivers/ata/ahci.c')
-rw-r--r--drivers/ata/ahci.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 2e51b49790..4830bcdca0 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -971,6 +971,25 @@ int scsi_exec(struct scsi_cmd *pccb)
}
+static int ahci_start_ports(struct ahci_uc_priv *uc_priv)
+{
+ u32 linkmap;
+ int i;
+
+ linkmap = uc_priv->link_port_map;
+
+ for (i = 0; i < CONFIG_SYS_SCSI_MAX_SCSI_ID; i++) {
+ if (((linkmap >> i) & 0x01)) {
+ if (ahci_port_start(uc_priv, (u8) i)) {
+ printf("Can not start port %d\n", i);
+ continue;
+ }
+ }
+ }
+
+ return 0;
+}
+
#if defined(CONFIG_DM_SCSI)
void scsi_low_level_init(int busdevfunc, struct udevice *dev)
#else
@@ -978,8 +997,6 @@ void scsi_low_level_init(int busdevfunc)
#endif
{
struct ahci_uc_priv *uc_priv;
- int i;
- u32 linkmap;
#ifndef CONFIG_SCSI_AHCI_PLAT
# if defined(CONFIG_DM_PCI)
@@ -998,24 +1015,14 @@ void scsi_low_level_init(int busdevfunc)
#endif
uc_priv = probe_ent;
- linkmap = uc_priv->link_port_map;
-
- for (i = 0; i < CONFIG_SYS_SCSI_MAX_SCSI_ID; i++) {
- if (((linkmap >> i) & 0x01)) {
- if (ahci_port_start(uc_priv, (u8) i)) {
- printf("Can not start port %d\n", i);
- continue;
- }
- }
- }
+ ahci_start_ports(uc_priv);
}
#ifdef CONFIG_SCSI_AHCI_PLAT
int ahci_init(void __iomem *base)
{
struct ahci_uc_priv *uc_priv;
- int i, rc = 0;
- u32 linkmap;
+ int rc = 0;
probe_ent = malloc(sizeof(struct ahci_uc_priv));
if (!probe_ent) {
@@ -1043,16 +1050,8 @@ int ahci_init(void __iomem *base)
ahci_print_info(uc_priv);
- linkmap = uc_priv->link_port_map;
+ rc = ahci_start_ports(uc_priv);
- for (i = 0; i < CONFIG_SYS_SCSI_MAX_SCSI_ID; i++) {
- if (((linkmap >> i) & 0x01)) {
- if (ahci_port_start(uc_priv, (u8) i)) {
- printf("Can not start port %d\n", i);
- continue;
- }
- }
- }
err_out:
return rc;
}