mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
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:
parent
aff498cf30
commit
6682bc1ee4
2 changed files with 17 additions and 3 deletions
|
@ -281,11 +281,13 @@ static void pflash_write(void *opaque, hwaddr offset, uint64_t value,
|
|||
}
|
||||
offset &= pfl->chip_len - 1;
|
||||
|
||||
boff = offset & (pfl->sector_len - 1);
|
||||
boff = offset;
|
||||
if (pfl->width == 2)
|
||||
boff = boff >> 1;
|
||||
else if (pfl->width == 4)
|
||||
boff = boff >> 2;
|
||||
/* Only the least-significant 11 bits are used in most cases. */
|
||||
boff &= 0x7FF;
|
||||
switch (pfl->wcycle) {
|
||||
case 0:
|
||||
/* Set the device in I/O access mode if required */
|
||||
|
@ -538,6 +540,10 @@ static void pflash_cfi02_realize(DeviceState *dev, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
/* Only 11 bits are used in the comparison. */
|
||||
pfl->unlock_addr0 &= 0x7FF;
|
||||
pfl->unlock_addr1 &= 0x7FF;
|
||||
|
||||
pflash_setup_mappings(pfl);
|
||||
pfl->rom_mode = 1;
|
||||
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &pfl->mem);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue