[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V2 3/6] hw/mdio: Never set PHY RST and ANEG_RST bits
From: |
Grant Likely |
Subject: |
[Qemu-devel] [PATCH V2 3/6] hw/mdio: Never set PHY RST and ANEG_RST bits on register write |
Date: |
Wed, 23 Jan 2013 16:15:27 +0000 |
The RST and ANEG_RST bits are commands, not settings. An operating
system will get confused (or at least u-boot does) if those bits remain
set after writing to them. Therefore, mask them out on write.
Cc: Peter Maydell <address@hidden>
Cc: Paul Brook <address@hidden>
Cc: Edgar E. Iglesias <address@hidden>
Cc: Anthony Liguori <address@hidden>
Cc: Andreas Färber <address@hidden>
Signed-off-by: Grant Likely <address@hidden>
---
hw/mdio.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/hw/mdio.c b/hw/mdio.c
index 20d7603..b138efa 100644
--- a/hw/mdio.c
+++ b/hw/mdio.c
@@ -30,6 +30,10 @@
#define D(x)
/* Advertisement control register. */
+#define PHY_CNTL_REG 0
+#define PHY_CNTL_RST 0x8000 /* PHY reset command */
+#define PHY_CNTL_ANEG_RST 0x0200 /* Autonegotiation reset command */
+
#define ADVERTISE_10HALF 0x0020 /* Try for 10mbps half-duplex */
#define ADVERTISE_10FULL 0x0040 /* Try for 10mbps full-duplex */
#define ADVERTISE_100HALF 0x0080 /* Try for 100mbps half-duplex */
@@ -111,6 +115,10 @@ static void tdk_write(struct qemu_phy *phy, unsigned int
req, unsigned int data)
regnum = req & 0x1f;
D(printf("%s reg[%d] = %x\n", __func__, regnum, data));
switch (regnum) {
+ case PHY_CNTL_REG:
+ /* Don't ever store the RST or ANEG_RST bits; they are commands */
+ phy->regs[regnum] = data & ~(PHY_CNTL_RST | PHY_CNTL_ANEG_RST);
+ break;
default:
phy->regs[regnum] = data;
break;
@@ -119,7 +127,7 @@ static void tdk_write(struct qemu_phy *phy, unsigned int
req, unsigned int data)
void tdk_init(struct qemu_phy *phy)
{
- phy->regs[0] = 0x3100;
+ phy->regs[PHY_CNTL_REG] = 0x3100;
/* PHY Id. */
phy->regs[2] = 0x0300;
phy->regs[3] = 0xe400;
--
1.7.10.4
- [Qemu-devel] Generalize MDIO framework, Grant Likely, 2013/01/23
- [Qemu-devel] [PATCH V2 4/6] hw/mdio: Add VMState support, Grant Likely, 2013/01/23
- [Qemu-devel] [PATCH V2 3/6] hw/mdio: Never set PHY RST and ANEG_RST bits on register write,
Grant Likely <=
- [Qemu-devel] [PATCH V2 2/6] hw/mdio: Generalize etraxfs MDIO bitbanging emulation, Grant Likely, 2013/01/23
- [Qemu-devel] [PATCH V2 1/6] trivial: etraxfs_eth: Eliminate checkpatch errors, Grant Likely, 2013/01/23
- [Qemu-devel] [PATCH V2 6/6] hw/mdio: Use bitbang core for smc91c111 network device, Grant Likely, 2013/01/23
- [Qemu-devel] [PATCH V2 5/6] hw/mdio: Move bitbang clock state tracking into core, Grant Likely, 2013/01/23