* [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items
@ 2014-08-06 18:07 Gabriel L. Somlo
2014-08-06 18:07 ` [Qemu-devel] [PATCH 1/2] e1000: correctly handle phy_ctrl reserved & self-clearing bits Gabriel L. Somlo
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Gabriel L. Somlo @ 2014-08-06 18:07 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, mst
Michael,
As discussed earlier here are my e1000 phy_ctrl and phy_status
cleanup patches we decided to delay until after the 2.1 release.
Thanks,
Gabriel
Gabriel L. Somlo (2):
e1000: correctly handle phy_ctrl reserved & self-clearing bits
e1000: use symbolic constants to init phy ctrl & status registers
hw/net/e1000.c | 60 ++++++++++++++++++++++++++++++++++++++--------------------
1 file changed, 40 insertions(+), 20 deletions(-)
--
1.9.3
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 1/2] e1000: correctly handle phy_ctrl reserved & self-clearing bits
2014-08-06 18:07 [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items Gabriel L. Somlo
@ 2014-08-06 18:07 ` Gabriel L. Somlo
2014-08-06 18:07 ` [Qemu-devel] [PATCH 2/2] e1000: use symbolic constants to init phy ctrl & status registers Gabriel L. Somlo
2014-08-06 21:25 ` [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items Michael S. Tsirkin
2 siblings, 0 replies; 4+ messages in thread
From: Gabriel L. Somlo @ 2014-08-06 18:07 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, mst
Make phyreg_writeops responsible for actually writing their
respective phy registers, rather than rely on set_mdic() to
do it on their behalf.
The only current instance of phyreg_writeops is set_phy_ctrl();
modify it to write the register on its own, while also correctly
handling reserved and self-clearing bits.
have_autoneg() does not need to check for MII_CR_RESTART_AUTO_NEG,
since the only time the flag comes into play is during set_phy_ctrl(),
and, following this patch, never actually gets written to the phy
control register.
Signed-off-by: Gabriel Somlo <somlo@cmu.edu>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/net/e1000.c | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/hw/net/e1000.c b/hw/net/e1000.c
index 0fc29a0..04c0f91 100644
--- a/hw/net/e1000.c
+++ b/hw/net/e1000.c
@@ -186,21 +186,31 @@ e1000_link_up(E1000State *s)
s->phy_reg[PHY_STATUS] |= MII_SR_LINK_STATUS;
}
+static bool
+have_autoneg(E1000State *s)
+{
+ return (s->compat_flags & E1000_FLAG_AUTONEG) &&
+ (s->phy_reg[PHY_CTRL] & MII_CR_AUTO_NEG_EN);
+}
+
static void
set_phy_ctrl(E1000State *s, int index, uint16_t val)
{
+ /* bits 0-5 reserved; MII_CR_[RESTART_AUTO_NEG,RESET] are self clearing */
+ s->phy_reg[PHY_CTRL] = val & ~(0x3f |
+ MII_CR_RESET |
+ MII_CR_RESTART_AUTO_NEG);
+
/*
* QEMU 1.3 does not support link auto-negotiation emulation, so if we
* migrate during auto negotiation, after migration the link will be
* down.
*/
- if (!(s->compat_flags & E1000_FLAG_AUTONEG)) {
- return;
- }
- if ((val & MII_CR_AUTO_NEG_EN) && (val & MII_CR_RESTART_AUTO_NEG)) {
+ if (have_autoneg(s) && (val & MII_CR_RESTART_AUTO_NEG)) {
e1000_link_down(s);
DBGOUT(PHY, "Start link auto negotiation\n");
- timer_mod(s->autoneg_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500);
+ timer_mod(s->autoneg_timer,
+ qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500);
}
}
@@ -446,8 +456,9 @@ set_mdic(E1000State *s, int index, uint32_t val)
} else {
if (addr < NPHYWRITEOPS && phyreg_writeops[addr]) {
phyreg_writeops[addr](s, index, data);
+ } else {
+ s->phy_reg[addr] = data;
}
- s->phy_reg[addr] = data;
}
}
s->mac_reg[MDIC] = val | E1000_MDIC_READY;
@@ -848,14 +859,6 @@ receive_filter(E1000State *s, const uint8_t *buf, int size)
return 0;
}
-static bool
-have_autoneg(E1000State *s)
-{
- return (s->compat_flags & E1000_FLAG_AUTONEG) &&
- (s->phy_reg[PHY_CTRL] & MII_CR_AUTO_NEG_EN) &&
- (s->phy_reg[PHY_CTRL] & MII_CR_RESTART_AUTO_NEG);
-}
-
static void
e1000_set_link_status(NetClientState *nc)
{
--
1.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 2/2] e1000: use symbolic constants to init phy ctrl & status registers
2014-08-06 18:07 [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items Gabriel L. Somlo
2014-08-06 18:07 ` [Qemu-devel] [PATCH 1/2] e1000: correctly handle phy_ctrl reserved & self-clearing bits Gabriel L. Somlo
@ 2014-08-06 18:07 ` Gabriel L. Somlo
2014-08-06 21:25 ` [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items Michael S. Tsirkin
2 siblings, 0 replies; 4+ messages in thread
From: Gabriel L. Somlo @ 2014-08-06 18:07 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, mst
Signed-off-by: Gabriel Somlo <somlo@cmu.edu>
---
hw/net/e1000.c | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/hw/net/e1000.c b/hw/net/e1000.c
index 04c0f91..a2c4608 100644
--- a/hw/net/e1000.c
+++ b/hw/net/e1000.c
@@ -233,13 +233,30 @@ static const char phy_regcap[0x20] = {
/* PHY_ID2 documented in 8254x_GBe_SDM.pdf, pp. 250 */
static const uint16_t phy_reg_init[] = {
- [PHY_CTRL] = 0x1140,
- [PHY_STATUS] = 0x794d, /* link initially up with not completed autoneg */
- [PHY_ID1] = 0x141, /* [PHY_ID2] configured per DevId, from e1000_reset() */
- [PHY_1000T_CTRL] = 0x0e00, [M88E1000_PHY_SPEC_CTRL] = 0x360,
- [M88E1000_EXT_PHY_SPEC_CTRL] = 0x0d60, [PHY_AUTONEG_ADV] = 0xde1,
- [PHY_LP_ABILITY] = 0x1e0, [PHY_1000T_STATUS] = 0x3c00,
+ [PHY_CTRL] = MII_CR_SPEED_SELECT_MSB |
+ MII_CR_FULL_DUPLEX |
+ MII_CR_AUTO_NEG_EN,
+
+ [PHY_STATUS] = MII_SR_EXTENDED_CAPS |
+ MII_SR_LINK_STATUS | /* link initially up */
+ MII_SR_AUTONEG_CAPS |
+ /* MII_SR_AUTONEG_COMPLETE: initially NOT completed */
+ MII_SR_PREAMBLE_SUPPRESS |
+ MII_SR_EXTENDED_STATUS |
+ MII_SR_10T_HD_CAPS |
+ MII_SR_10T_FD_CAPS |
+ MII_SR_100X_HD_CAPS |
+ MII_SR_100X_FD_CAPS,
+
+ [PHY_ID1] = 0x141,
+ /* [PHY_ID2] configured per DevId, from e1000_reset() */
+ [PHY_AUTONEG_ADV] = 0xde1,
+ [PHY_LP_ABILITY] = 0x1e0,
+ [PHY_1000T_CTRL] = 0x0e00,
+ [PHY_1000T_STATUS] = 0x3c00,
+ [M88E1000_PHY_SPEC_CTRL] = 0x360,
[M88E1000_PHY_SPEC_STATUS] = 0xac00,
+ [M88E1000_EXT_PHY_SPEC_CTRL] = 0x0d60,
};
static const uint32_t mac_reg_init[] = {
--
1.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items
2014-08-06 18:07 [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items Gabriel L. Somlo
2014-08-06 18:07 ` [Qemu-devel] [PATCH 1/2] e1000: correctly handle phy_ctrl reserved & self-clearing bits Gabriel L. Somlo
2014-08-06 18:07 ` [Qemu-devel] [PATCH 2/2] e1000: use symbolic constants to init phy ctrl & status registers Gabriel L. Somlo
@ 2014-08-06 21:25 ` Michael S. Tsirkin
2 siblings, 0 replies; 4+ messages in thread
From: Michael S. Tsirkin @ 2014-08-06 21:25 UTC (permalink / raw)
To: Gabriel L. Somlo; +Cc: qemu-devel, stefanha
On Wed, Aug 06, 2014 at 02:07:09PM -0400, Gabriel L. Somlo wrote:
> Michael,
>
> As discussed earlier here are my e1000 phy_ctrl and phy_status
> cleanup patches we decided to delay until after the 2.1 release.
>
> Thanks,
> Gabriel
Applied, thanks!
> Gabriel L. Somlo (2):
> e1000: correctly handle phy_ctrl reserved & self-clearing bits
> e1000: use symbolic constants to init phy ctrl & status registers
>
> hw/net/e1000.c | 60 ++++++++++++++++++++++++++++++++++++++--------------------
> 1 file changed, 40 insertions(+), 20 deletions(-)
>
> --
> 1.9.3
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-08-06 21:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-06 18:07 [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items Gabriel L. Somlo
2014-08-06 18:07 ` [Qemu-devel] [PATCH 1/2] e1000: correctly handle phy_ctrl reserved & self-clearing bits Gabriel L. Somlo
2014-08-06 18:07 ` [Qemu-devel] [PATCH 2/2] e1000: use symbolic constants to init phy ctrl & status registers Gabriel L. Somlo
2014-08-06 21:25 ` [Qemu-devel] [PATCH 0/2] e1000: post-2.1-freeze cleanup items Michael S. Tsirkin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.