libqos/ahci: edit wait to be ncq aware
The wait command should check to make sure SACT is clear as well as the Command Issue register. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 1435016308-6150-12-git-send-email-jsnow@redhat.com
This commit is contained in:
parent
cb45304108
commit
4de484698b
@ -908,11 +908,15 @@ void ahci_command_wait(AHCIQState *ahci, AHCICommand *cmd)
|
|||||||
/* We can't rely on STS_BSY until the command has started processing.
|
/* We can't rely on STS_BSY until the command has started processing.
|
||||||
* Therefore, we also use the Command Issue bit as indication of
|
* Therefore, we also use the Command Issue bit as indication of
|
||||||
* a command in-flight. */
|
* a command in-flight. */
|
||||||
while (BITSET(ahci_px_rreg(ahci, cmd->port, AHCI_PX_TFD),
|
|
||||||
AHCI_PX_TFD_STS_BSY) ||
|
#define RSET(REG, MASK) (BITSET(ahci_px_rreg(ahci, cmd->port, (REG)), (MASK)))
|
||||||
BITSET(ahci_px_rreg(ahci, cmd->port, AHCI_PX_CI), (1 << cmd->slot))) {
|
|
||||||
|
while (RSET(AHCI_PX_TFD, AHCI_PX_TFD_STS_BSY) ||
|
||||||
|
RSET(AHCI_PX_CI, 1 << cmd->slot) ||
|
||||||
|
(cmd->props->ncq && RSET(AHCI_PX_SACT, 1 << cmd->slot))) {
|
||||||
usleep(50);
|
usleep(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ahci_command_issue(AHCIQState *ahci, AHCICommand *cmd)
|
void ahci_command_issue(AHCIQState *ahci, AHCICommand *cmd)
|
||||||
|
Loading…
Reference in New Issue
Block a user