Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci Make new sk_unreset_{xmac, yukon}() and use them ...
details: https://anonhg.NetBSD.org/src/rev/25789958a8d4
branches: trunk
changeset: 456967:25789958a8d4
user: msaitoh <msaitoh%NetBSD.org@localhost>
date: Mon Jun 03 15:39:35 2019 +0000
description:
Make new sk_unreset_{xmac,yukon}() and use them in sk_attach().
Fixes PR kern/54267 reported by martin.
diffstat:
sys/dev/pci/if_sk.c | 46 +++++++++++++++++++++++++++++++---------------
1 files changed, 31 insertions(+), 15 deletions(-)
diffs (125 lines):
diff -r ede9e139809f -r 25789958a8d4 sys/dev/pci/if_sk.c
--- a/sys/dev/pci/if_sk.c Mon Jun 03 09:58:31 2019 +0000
+++ b/sys/dev/pci/if_sk.c Mon Jun 03 15:39:35 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_sk.c,v 1.98 2019/05/30 02:32:18 msaitoh Exp $ */
+/* $NetBSD: if_sk.c,v 1.99 2019/06/03 15:39:35 msaitoh Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -115,7 +115,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.98 2019/05/30 02:32:18 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.99 2019/06/03 15:39:35 msaitoh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -168,7 +168,9 @@
void sk_start(struct ifnet *);
int sk_ioctl(struct ifnet *, u_long, void *);
int sk_init(struct ifnet *);
+void sk_unreset_xmac(struct sk_if_softc *);
void sk_init_xmac(struct sk_if_softc *);
+void sk_unreset_yukon(struct sk_if_softc *);
void sk_init_yukon(struct sk_if_softc *);
void sk_stop(struct ifnet *, int);
void sk_watchdog(struct ifnet *);
@@ -1420,12 +1422,12 @@
*/
switch (sc->sk_type) {
case SK_GENESIS:
- sk_init_xmac(sc_if);
+ sk_unreset_xmac(sc_if);
break;
case SK_YUKON:
case SK_YUKON_LITE:
case SK_YUKON_LP:
- sk_init_yukon(sc_if);
+ sk_unreset_yukon(sc_if);
break;
default:
aprint_error_dev(sc->sk_dev, "unknown device type %d\n",
@@ -2429,17 +2431,16 @@
}
void
-sk_init_xmac(struct sk_if_softc *sc_if)
+sk_unreset_xmac(struct sk_if_softc *sc_if)
{
struct sk_softc *sc = sc_if->sk_softc;
- struct ifnet *ifp = &sc_if->sk_ethercom.ec_if;
static const struct sk_bcom_hack bhack[] = {
{ 0x18, 0x0c20 }, { 0x17, 0x0012 }, { 0x15, 0x1104 }, { 0x17, 0x0013 },
{ 0x15, 0x0404 }, { 0x17, 0x8006 }, { 0x15, 0x0132 }, { 0x17, 0x8006 },
{ 0x15, 0x0232 }, { 0x17, 0x800D }, { 0x15, 0x000F }, { 0x18, 0x0420 },
{ 0, 0 } };
- DPRINTFN(1, ("sk_init_xmac\n"));
+ DPRINTFN(1, ("sk_unreset_xmac\n"));
/* Unreset the XMAC. */
SK_IF_WRITE_2(sc_if, 0, SK_TXF1_MACCTL, SK_TXMACCTL_XMAC_UNRESET);
@@ -2495,6 +2496,15 @@
}
}
}
+}
+
+void
+sk_init_xmac(struct sk_if_softc *sc_if)
+{
+ struct sk_softc *sc = sc_if->sk_softc;
+ struct ifnet *ifp = &sc_if->sk_ethercom.ec_if;
+
+ sk_unreset_xmac(sc_if);
/* Set station address */
SK_XM_WRITE_2(sc_if, XM_PAR0,
@@ -2593,14 +2603,13 @@
sc_if->sk_link = 1;
}
-void sk_init_yukon(struct sk_if_softc *sc_if)
+void
+sk_unreset_yukon(struct sk_if_softc *sc_if)
{
uint32_t /*mac, */phy;
- uint16_t reg;
struct sk_softc *sc;
- int i;
-
- DPRINTFN(1, ("sk_init_yukon: start: sk_csr=%#x\n",
+
+ DPRINTFN(1, ("sk_unreset_yukon: start: sk_csr=%#x\n",
CSR_READ_4(sc_if->sk_softc, SK_CSR)));
sc = sc_if->sk_softc;
@@ -2611,7 +2620,6 @@
(sk_win_read_4(sc, SK_GPIO) | SK_GPIO_DIR9) & ~SK_GPIO_DAT9);
}
-
/* GMAC and GPHY Reset */
SK_IF_WRITE_4(sc_if, 0, SK_GPHY_CTRL, SK_GPHY_RESET_SET);
@@ -2651,8 +2659,16 @@
DPRINTFN(3, ("sk_init_yukon: gmac_ctrl=%#x\n",
SK_IF_READ_4(sc_if, 0, SK_GMAC_CTRL)));
-
- DPRINTFN(6, ("sk_init_yukon: 3\n"));
+}
+
+void
+sk_init_yukon(struct sk_if_softc *sc_if)
+{
+ uint16_t reg;
+ int i;
+
+ DPRINTFN(1, ("sk_init_yukon: start\n"));
+ sk_unreset_yukon(sc_if);
/* unused read of the interrupt source register */
DPRINTFN(6, ("sk_init_yukon: 4\n"));
Home |
Main Index |
Thread Index |
Old Index