From e0059c8883944605d1f5c4dc9c60a881c4b3be39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Tue, 1 Sep 2020 14:21:50 +0200 Subject: [PATCH] ftgmac100: Improve software reset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The software reset of the MAC needs a finer granularity. Some settings in MACCR are kept. Cc: Frederic Konrad Fixes: bd44300d1afc ("net: add FTGMAC100 support") Message-Id: <20200819100956.2216690-16-clg@kaod.org> Signed-off-by: Cédric Le Goater --- hw/net/ftgmac100.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/hw/net/ftgmac100.c b/hw/net/ftgmac100.c index 7c9fa720df..782ff192ce 100644 --- a/hw/net/ftgmac100.c +++ b/hw/net/ftgmac100.c @@ -649,10 +649,8 @@ static uint32_t ftgmac100_rxpoll(FTGMAC100State *s) return cnt / div[speed]; } -static void ftgmac100_reset(DeviceState *d) +static void ftgmac100_do_reset(FTGMAC100State *s, bool sw_reset) { - FTGMAC100State *s = FTGMAC100(d); - /* Reset the FTGMAC100 */ s->isr = 0; s->ier = 0; @@ -671,7 +669,12 @@ static void ftgmac100_reset(DeviceState *d) s->fear1 = 0; s->tpafcr = 0xf1; - s->maccr = 0; + if (sw_reset) { + s->maccr &= FTGMAC100_MACCR_GIGA_MODE | FTGMAC100_MACCR_FAST_MODE; + } else { + s->maccr = 0; + } + s->phycr = 0; s->phydata = 0; s->fcr = 0x400; @@ -680,6 +683,11 @@ static void ftgmac100_reset(DeviceState *d) phy_reset(s); } +static void ftgmac100_reset(DeviceState *d) +{ + ftgmac100_do_reset(FTGMAC100(d), false); +} + static uint64_t ftgmac100_read(void *opaque, hwaddr addr, unsigned size) { FTGMAC100State *s = FTGMAC100(opaque); @@ -824,7 +832,7 @@ static void ftgmac100_write(void *opaque, hwaddr addr, case FTGMAC100_MACCR: /* MAC Device control */ s->maccr = value; if (value & FTGMAC100_MACCR_SW_RST) { - ftgmac100_reset(DEVICE(s)); + ftgmac100_do_reset(s, true); } if (ftgmac100_can_receive(qemu_get_queue(s->nic))) {