A simple helper that asserts a given port is not busy processing any commands via the TFD, Command Issue and SACT registers.
Signed-off-by: John Snow <js...@redhat.com> --- tests/ahci-test.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/ahci-test.c b/tests/ahci-test.c index 315e6e9..b7bfd86 100644 --- a/tests/ahci-test.c +++ b/tests/ahci-test.c @@ -1328,6 +1328,24 @@ static void port_check_interrupts(AHCIState *ahci, uint8_t px, g_assert_cmphex(PX_RREG(px, AHCI_PX_IS), ==, 0); } +static void port_check_nonbusy(AHCIState *ahci, uint8_t px, uint8_t cx) +{ + uint32_t reg; + + /* Assert that the command slot is no longer busy (NCQ) */ + reg = PX_RREG(px, AHCI_PX_SACT); + ASSERT_BIT_CLEAR(reg, (1 << cx)); + + /* Non-NCQ */ + reg = PX_RREG(px, AHCI_PX_CI); + ASSERT_BIT_CLEAR(reg, (1 << cx)); + + /* And assert that we are generally not busy. */ + reg = PX_RREG(px, AHCI_PX_TFD); + ASSERT_BIT_CLEAR(reg, AHCI_PX_TFD_STS_BSY); + ASSERT_BIT_CLEAR(reg, AHCI_PX_TFD_STS_DRQ); +} + /* Get the #cx'th command of port #px. */ static void get_command_header(AHCIState *ahci, uint8_t px, uint8_t cx, AHCICommand *cmd) @@ -1580,6 +1598,7 @@ static void ahci_test_identify(AHCIState *ahci) port_check_error(ahci, i); /* BUG: we expect AHCI_PX_IS_DPS to be set. */ port_check_interrupts(ahci, i, AHCI_PX_IS_DHRS | AHCI_PX_IS_PSS); + port_check_nonbusy(ahci, i, cx); /* Investigate the CMD, assert that we read 512 bytes */ get_command_header(ahci, i, cx, &cmd); -- 1.9.3