[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 09/10] dp8393x: fix CAM descriptor entry index
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v2 09/10] dp8393x: fix CAM descriptor entry index |
Date: |
Fri, 25 Jun 2021 07:54:00 +0100 |
Currently when a LOAD CAM command is executed the entries are loaded into the
CAM from memory in order which is incorrect. According to the datasheet the
first entry in the CAM descriptor is the entry index which means that each
descriptor may update any single entry in the CAM rather than the Nth entry.
Decode the CAM entry index and use it store the descriptor in the appropriate
slot in the CAM. This fixes the issue where the MacOS toolbox loads a single
CAM descriptor into the final slot in order to perform a loopback test which
must succeed before the Ethernet port is enabled.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/net/dp8393x.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c
index 6789bcd3af..172fd06694 100644
--- a/hw/net/dp8393x.c
+++ b/hw/net/dp8393x.c
@@ -270,7 +270,7 @@ static void dp8393x_update_irq(dp8393xState *s)
static void dp8393x_do_load_cam(dp8393xState *s)
{
int width, size;
- uint16_t index = 0;
+ uint16_t index;
width = (s->regs[SONIC_DCR] & SONIC_DCR_DW) ? 2 : 1;
size = sizeof(uint16_t) * 4 * width;
@@ -279,6 +279,7 @@ static void dp8393x_do_load_cam(dp8393xState *s)
/* Fill current entry */
address_space_read(&s->as, dp8393x_cdp(s),
MEMTXATTRS_UNSPECIFIED, s->data, size);
+ index = dp8393x_get(s, width, 0) & 0xf;
s->cam[index][0] = dp8393x_get(s, width, 1) & 0xff;
s->cam[index][1] = dp8393x_get(s, width, 1) >> 8;
s->cam[index][2] = dp8393x_get(s, width, 2) & 0xff;
@@ -291,7 +292,6 @@ static void dp8393x_do_load_cam(dp8393xState *s)
/* Move to next entry */
s->regs[SONIC_CDC]--;
s->regs[SONIC_CDP] += size;
- index++;
}
/* Read CAM enable */
--
2.20.1
- [PATCH v2 00/10] dp8393x: fixes for MacOS toolbox ROM, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 03/10] hw/mips/jazz: move PROM and checksum calculation from dp8393x device to board, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 02/10] dp8393x: convert to trace-events, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 04/10] hw/m68k/q800: move PROM and checksum calculation from dp8393x device to board, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 06/10] qemu/bitops.h: add bitrev8 implementation, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 01/10] dp8393x: checkpatch fixes, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 05/10] dp8393x: remove onboard PROM containing MAC address and checksum, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 09/10] dp8393x: fix CAM descriptor entry index,
Mark Cave-Ayland <=
- [PATCH v2 07/10] hw/m68k/q800: fix PROM checksum and MAC address storage, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 08/10] dp8393x: don't force 32-bit register access, Mark Cave-Ayland, 2021/06/25
- [PATCH v2 10/10] hw/mips/jazz: specify correct endian for dp8393x device, Mark Cave-Ayland, 2021/06/25
- Re: [PATCH v2 00/10] dp8393x: fixes for MacOS toolbox ROM, Finn Thain, 2021/06/26