Skip to content
Snippets Groups Projects
Commit e81058c0 authored by Gabe Black's avatar Gabe Black Committed by Tom Rini
Browse files

ahci: Make sending the SETFEATURES_XFER command optional


This command doesn't really do anything when talking to a SATA device, and
sending it confuses some of them. This change makes sending the command
optional, and defaults to not. The situations where it should be sent are not
the common case.

With the standard SSD in the machine, here are some times with the option
turned off:
1. 8277
2. 8273
3. 8050

And turned on:
1. 8303
2. 8155
3. 8276

Sending that command seems to have no meaningful effect on performance.

This fixes problems with an SSD marked Toshiba NV6424, Taiwan 11159AE P
and TC58NVG5D2FTA10.

Signed-off-by: default avatarGabe Black <gabeblack@chromium.org>
Signed-off-by: default avatarTaylor Hutt <thutt@chromium.org>
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 4e422bce
No related branches found
No related tags found
No related merge requests found
...@@ -373,6 +373,7 @@ static void ahci_fill_cmd_slot(struct ahci_ioports *pp, u32 opts) ...@@ -373,6 +373,7 @@ static void ahci_fill_cmd_slot(struct ahci_ioports *pp, u32 opts)
} }
#ifdef CONFIG_AHCI_SETFEATURES_XFER
static void ahci_set_feature(u8 port) static void ahci_set_feature(u8 port)
{ {
struct ahci_ioports *pp = &(probe_ent->port[port]); struct ahci_ioports *pp = &(probe_ent->port[port]);
...@@ -397,6 +398,7 @@ static void ahci_set_feature(u8 port) ...@@ -397,6 +398,7 @@ static void ahci_set_feature(u8 port)
printf("set feature error on port %d!\n", port); printf("set feature error on port %d!\n", port);
} }
} }
#endif
static int ahci_port_start(u8 port) static int ahci_port_start(u8 port)
...@@ -743,7 +745,9 @@ void scsi_low_level_init(int busdevfunc) ...@@ -743,7 +745,9 @@ void scsi_low_level_init(int busdevfunc)
printf("Can not start port %d\n", i); printf("Can not start port %d\n", i);
continue; continue;
} }
#ifdef CONFIG_AHCI_SETFEATURES_XFER
ahci_set_feature((u8) i); ahci_set_feature((u8) i);
#endif
} }
} }
} }
...@@ -784,7 +788,9 @@ int ahci_init(u32 base) ...@@ -784,7 +788,9 @@ int ahci_init(u32 base)
printf("Can not start port %d\n", i); printf("Can not start port %d\n", i);
continue; continue;
} }
#ifdef CONFIG_AHCI_SETFEATURES_XFER
ahci_set_feature((u8) i); ahci_set_feature((u8) i);
#endif
} }
} }
err_out: err_out:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment