Re: [Qemu-devel] [PATCH] e1000: Do reset when E1000_CTRL_RST bit is set.
On 9 August 2011 15:10, Anthony PERARD wrote: > On Fri, Aug 5, 2011 at 17:53, Anthony Liguori wrote: >> >> You'll break some GCCs with -Wall -Werror with this. Please do: >> >> if ((val & E1000_CTRL_RST)) { > > :(, I never heard of this. But OK, I will do that. Please don't unless Anthony L can actually demonstrate a compiler which has this property and doesn't already complain about all the existing equivalent code in qemu... -- PMM
Re: [Qemu-devel] [PATCH] e1000: Do reset when E1000_CTRL_RST bit is set.
On Fri, Aug 5, 2011 at 17:53, Anthony Liguori wrote: > > You'll break some GCCs with -Wall -Werror with this. Please do: > > if ((val & E1000_CTRL_RST)) { :(, I never heard of this. But OK, I will do that. -- Anthony PERARD
Re: [Qemu-devel] [PATCH] e1000: Do reset when E1000_CTRL_RST bit is set.
On 5 August 2011 17:53, Anthony Liguori wrote: > You'll break some GCCs with -Wall -Werror with this. Please do: > > if ((val & E1000_CTRL_RST)) { Hmm? There's lots of examples of that in the codebase: $ git grep 'if ([a-zA-Z]* & ' | wc -l 1558 '=' (assignment) needs those extra braces, but logical ops don't AFAIK. -- PMM
Re: [Qemu-devel] [PATCH] e1000: Do reset when E1000_CTRL_RST bit is set.
On 08/05/2011 09:53 AM, Anthony Liguori wrote: >> +if (val& E1000_CTRL_RST) { > > You'll break some GCCs with -Wall -Werror with this. Please do: > > if ((val & E1000_CTRL_RST)) { Err, really? What versions? I don't recall that ever being true. r~
Re: [Qemu-devel] [PATCH] e1000: Do reset when E1000_CTRL_RST bit is set.
On 08/05/2011 09:36 AM, Anthony PERARD wrote: Signed-off-by: Anthony PERARD --- hw/e1000.c | 10 -- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/e1000.c b/hw/e1000.c index 96d84f9..a1388e9 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -150,6 +150,8 @@ static const char phy_regcap[0x20] = { [PHY_ID2] = PHY_R,[M88E1000_PHY_SPEC_STATUS] = PHY_R }; +static void e1000_reset(void *opaque); + static void ioport_map(PCIDevice *pci_dev, int region_num, pcibus_t addr, pcibus_t size, int type) @@ -202,8 +204,12 @@ rxbufsize(uint32_t v) static void set_ctrl(E1000State *s, int index, uint32_t val) { -/* RST is self clearing */ -s->mac_reg[CTRL] = val& ~E1000_CTRL_RST; +DBGOUT(IO, "set ctrl = %08x\n", val); +if (val& E1000_CTRL_RST) { You'll break some GCCs with -Wall -Werror with this. Please do: if ((val & E1000_CTRL_RST)) { Regards, Anthony Liguori +e1000_reset(s); +return; +} +s->mac_reg[CTRL] = val; } static void
[Qemu-devel] [PATCH] e1000: Do reset when E1000_CTRL_RST bit is set.
Signed-off-by: Anthony PERARD --- hw/e1000.c | 10 -- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/e1000.c b/hw/e1000.c index 96d84f9..a1388e9 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -150,6 +150,8 @@ static const char phy_regcap[0x20] = { [PHY_ID2] = PHY_R, [M88E1000_PHY_SPEC_STATUS] = PHY_R }; +static void e1000_reset(void *opaque); + static void ioport_map(PCIDevice *pci_dev, int region_num, pcibus_t addr, pcibus_t size, int type) @@ -202,8 +204,12 @@ rxbufsize(uint32_t v) static void set_ctrl(E1000State *s, int index, uint32_t val) { -/* RST is self clearing */ -s->mac_reg[CTRL] = val & ~E1000_CTRL_RST; +DBGOUT(IO, "set ctrl = %08x\n", val); +if (val & E1000_CTRL_RST) { +e1000_reset(s); +return; +} +s->mac_reg[CTRL] = val; } static void -- Anthony PERARD