[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 09/14] dp8393x: Use long-word-aligned RRA pointers in 32-bit m
From: |
Finn Thain |
Subject: |
[PATCH v4 09/14] dp8393x: Use long-word-aligned RRA pointers in 32-bit mode |
Date: |
Wed, 29 Jan 2020 20:27:49 +1100 |
Section 3.4.1 of the datasheet says,
The alignment of the RRA is confined to either word or long word
boundaries, depending upon the data width mode. In 16-bit mode,
the RRA must be aligned to a word boundary (A0 is always zero)
and in 32-bit mode, the RRA is aligned to a long word boundary
(A0 and A1 are always zero).
This constraint has been implemented for 16-bit mode; implement it
for 32-bit mode too.
Signed-off-by: Finn Thain <address@hidden>
Tested-by: Laurent Vivier <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
---
hw/net/dp8393x.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c
index 947ceef37c..b052e2c854 100644
--- a/hw/net/dp8393x.c
+++ b/hw/net/dp8393x.c
@@ -663,12 +663,16 @@ static void dp8393x_write(void *opaque, hwaddr addr,
uint64_t data,
qemu_flush_queued_packets(qemu_get_queue(s->nic));
}
break;
- /* Ignore least significant bit */
+ /* The guest is required to store aligned pointers here */
case SONIC_RSA:
case SONIC_REA:
case SONIC_RRP:
case SONIC_RWP:
- s->regs[reg] = val & 0xfffe;
+ if (s->regs[SONIC_DCR] & SONIC_DCR_DW) {
+ s->regs[reg] = val & 0xfffc;
+ } else {
+ s->regs[reg] = val & 0xfffe;
+ }
break;
/* Invert written value for some registers */
case SONIC_CRCT:
--
2.24.1
- [PATCH v4 00/14] Fixes for DP8393X SONIC device emulation, Finn Thain, 2020/01/29
- [PATCH v4 08/14] dp8393x: Don't clobber packet checksum, Finn Thain, 2020/01/29
- [PATCH v4 06/14] dp8393x: Clear RRRA command register bit only when appropriate, Finn Thain, 2020/01/29
- [PATCH v4 04/14] dp8393x: Have dp8393x_receive() return the packet size, Finn Thain, 2020/01/29
- [PATCH v4 10/14] dp8393x: Pad frames to word or long word boundary, Finn Thain, 2020/01/29
- [PATCH v4 09/14] dp8393x: Use long-word-aligned RRA pointers in 32-bit mode,
Finn Thain <=
- [PATCH v4 02/14] dp8393x: Always use 32-bit accesses, Finn Thain, 2020/01/29
- [PATCH v4 14/14] dp8393x: Don't stop reception upon RBE interrupt assertion, Finn Thain, 2020/01/29
- [PATCH v4 05/14] dp8393x: Update LLFA and CRDA registers from rx descriptor, Finn Thain, 2020/01/29
- [PATCH v4 07/14] dp8393x: Implement packet size limit and RBAE interrupt, Finn Thain, 2020/01/29
- [PATCH v4 11/14] dp8393x: Clear descriptor in_use field to release packet, Finn Thain, 2020/01/29
- [PATCH v4 13/14] dp8393x: Don't reset Silicon Revision register, Finn Thain, 2020/01/29
- [PATCH v4 01/14] dp8393x: Mask EOL bit from descriptor addresses, Finn Thain, 2020/01/29
- [PATCH v4 03/14] dp8393x: Clean up endianness hacks, Finn Thain, 2020/01/29