diff options
| author | Adrian Chadd <adrian@FreeBSD.org> | 2012-10-22 22:32:52 +0000 |
|---|---|---|
| committer | Adrian Chadd <adrian@FreeBSD.org> | 2012-10-22 22:32:52 +0000 |
| commit | 68629cc4f116e30d2e741ebfbb3096cff4bb6508 (patch) | |
| tree | d3a786cac987b56b345db8534f061df7a3a01689 /sys/dev/etherswitch | |
| parent | 2da19515833d32891e4944a5ee77e271c985c249 (diff) | |
Notes
Diffstat (limited to 'sys/dev/etherswitch')
| -rw-r--r-- | sys/dev/etherswitch/arswitch/arswitch_reg.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/sys/dev/etherswitch/arswitch/arswitch_reg.c b/sys/dev/etherswitch/arswitch/arswitch_reg.c index 4a2fa6a977ad..4ec71ba661ce 100644 --- a/sys/dev/etherswitch/arswitch/arswitch_reg.c +++ b/sys/dev/etherswitch/arswitch/arswitch_reg.c @@ -72,10 +72,17 @@ arswitch_split_setpage(device_t dev, uint32_t addr, uint16_t *phy, *phy = (((addr) >> 6) & 0x07) | 0x10; *reg = ((addr) >> 1) & 0x1f; - if (sc->page != page) { - MDIO_WRITEREG(device_get_parent(dev), 0x18, 0, page); - sc->page = page; - } + /* + * The earlier code would only switch the page + * over if the page were different. Experiments have + * shown that this is unstable. + * + * Hence, the page is always set here. + * + * See PR kern/172968 + */ + MDIO_WRITEREG(device_get_parent(dev), 0x18, 0, page); + sc->page = page; } /* |
