hw/block/pflash_cfi02: Fix command address comparison

Most AMD commands only examine 11 bits of the address. This masks the
addresses used in the comparison to 11 bits. The exceptions are word or
sector addresses which use offset directly rather than the shifted
offset, boff.

Signed-off-by: Stephen Checkoway <stephen.checkoway@oberlin.edu>
Message-Id: <20190426162624.55977-4-stephen.checkoway@oberlin.edu>
Acked-by: Thomas Huth <thuth@redhat.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
Stephen Checkoway 2019-04-26 12:26:17 -04:00 committed by Philippe Mathieu-Daudé
parent aff498cf30
commit 6682bc1ee4
2 changed files with 17 additions and 3 deletions

View file

@ -21,8 +21,8 @@
#define FLASH_WIDTH 2
#define CFI_ADDR (FLASH_WIDTH * 0x55)
#define UNLOCK0_ADDR (FLASH_WIDTH * 0x5555)
#define UNLOCK1_ADDR (FLASH_WIDTH * 0x2AAA)
#define UNLOCK0_ADDR (FLASH_WIDTH * 0x555)
#define UNLOCK1_ADDR (FLASH_WIDTH * 0x2AA)
#define CFI_CMD 0x98
#define UNLOCK0_CMD 0xAA
@ -190,6 +190,14 @@ static void test_flash(void)
g_assert_cmphex(flash_read(6), ==, 0xCDEF);
g_assert_cmphex(flash_read(8), ==, 0xFFFF);
/* Test ignored high order bits of address. */
flash_write(FLASH_WIDTH * 0x5555, UNLOCK0_CMD);
flash_write(FLASH_WIDTH * 0x2AAA, UNLOCK1_CMD);
flash_write(FLASH_WIDTH * 0x5555, AUTOSELECT_CMD);
g_assert_cmpint(flash_read(FLASH_WIDTH * 0x0000), ==, 0x00BF);
g_assert_cmpint(flash_read(FLASH_WIDTH * 0x0001), ==, 0x236D);
reset();
qtest_quit(global_qtest);
}