summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormatt <matt@NetBSD.org>2009-12-14 00:52:04 +0000
committermatt <matt@NetBSD.org>2009-12-14 00:52:04 +0000
commit320e681fce76955ff02e4b760f6d0abf0dcf82ee (patch)
treeac0ddf2e3b57dc86ac9094308e543acbf147a52b /sys/dev
parent95fa9f87c8512a3d8cfb91f2ea1f558097f14f22 (diff)
Only tick mii if the phy had a status change.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/if_msk.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/dev/pci/if_msk.c b/sys/dev/pci/if_msk.c
index a4a9c6dc39c..ae88b0a2c55 100644
--- a/sys/dev/pci/if_msk.c
+++ b/sys/dev/pci/if_msk.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_msk.c,v 1.28 2009/09/05 14:09:55 tsutsui Exp $ */
+/* $NetBSD: if_msk.c,v 1.29 2009/12/14 00:52:04 matt Exp $ */
/* $OpenBSD: if_msk.c,v 1.42 2007/01/17 02:43:02 krw Exp $ */
/*
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.28 2009/09/05 14:09:55 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.29 2009/12/14 00:52:04 matt Exp $");
#include "bpfilter.h"
#include "rnd.h"
@@ -1219,8 +1219,9 @@ mskc_attach(device_t parent, device_t self, void *aux)
case PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_64BIT:
if (pci_mapreg_map(pa, SK_PCI_LOMEM,
memtype, 0, &sc->sk_btag, &sc->sk_bhandle,
- NULL, &size) == 0)
+ NULL, &size) == 0) {
break;
+ }
default:
aprint_error(": can't map mem space\n");
return;
@@ -1821,10 +1822,15 @@ msk_tick(void *xsc_if)
{
struct sk_if_softc *sc_if = xsc_if;
struct mii_data *mii = &sc_if->sk_mii;
+ uint16_t gpsr;
int s;
s = splnet();
- mii_tick(mii);
+ gpsr = SK_YU_READ_2(sc_if, YUKON_GPSR);
+ if ((gpsr & YU_GPSR_MII_PHY_STC) != 0) {
+ SK_YU_WRITE_2(sc_if, YUKON_GPSR, YU_GPSR_MII_PHY_STC);
+ mii_tick(mii);
+ }
splx(s);
callout_schedule(&sc_if->sk_tick_ch, hz);