nvme: fix CMB endianness confusion
The CMB is marked as DEVICE_LITTLE_ENDIAN, so the data must be read/written as if it was little-endian output (in the case of big endian, we get two swaps, one in the memory core and one in nvme.c). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Tested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
2067d39e5e
commit
71a86ddece
@ -1177,16 +1177,13 @@ static void nvme_cmb_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
unsigned size)
|
||||
{
|
||||
NvmeCtrl *n = (NvmeCtrl *)opaque;
|
||||
memcpy(&n->cmbuf[addr], &data, size);
|
||||
stn_le_p(&n->cmbuf[addr], size, data);
|
||||
}
|
||||
|
||||
static uint64_t nvme_cmb_read(void *opaque, hwaddr addr, unsigned size)
|
||||
{
|
||||
uint64_t val;
|
||||
NvmeCtrl *n = (NvmeCtrl *)opaque;
|
||||
|
||||
memcpy(&val, &n->cmbuf[addr], size);
|
||||
return val;
|
||||
return ldn_le_p(&n->cmbuf[addr], size);
|
||||
}
|
||||
|
||||
static const MemoryRegionOps nvme_cmb_ops = {
|
||||
|
Loading…
Reference in New Issue
Block a user