Only zero MVGBE_MTU on Orion platforms.
This commit is contained in:
parent
2a5f867d29
commit
2f0663d472
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: if_mvgbe.c,v 1.12 2011/09/01 14:46:23 jakllsch Exp $ */
|
/* $NetBSD: if_mvgbe.c,v 1.13 2011/09/06 19:38:23 rjs Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007, 2008 KIYOHARA Takashi
|
* Copyright (c) 2007, 2008 KIYOHARA Takashi
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: if_mvgbe.c,v 1.12 2011/09/01 14:46:23 jakllsch Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: if_mvgbe.c,v 1.13 2011/09/06 19:38:23 rjs Exp $");
|
||||||
|
|
||||||
#include "rnd.h"
|
#include "rnd.h"
|
||||||
|
|
||||||
|
@ -190,7 +190,7 @@ struct mvgbec_softc {
|
||||||
|
|
||||||
kmutex_t sc_mtx;
|
kmutex_t sc_mtx;
|
||||||
|
|
||||||
int sc_fix_tqtb;
|
int sc_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mvgbe_softc {
|
struct mvgbe_softc {
|
||||||
|
@ -286,6 +286,7 @@ struct mvgbe_port {
|
||||||
int irqs[3];
|
int irqs[3];
|
||||||
int flags;
|
int flags;
|
||||||
#define FLAGS_FIX_TQTB (1 << 0)
|
#define FLAGS_FIX_TQTB (1 << 0)
|
||||||
|
#define FLAGS_FIX_MTU (1 << 1)
|
||||||
} mvgbe_ports[] = {
|
} mvgbe_ports[] = {
|
||||||
{ MARVELL_DISCOVERY_II, 0, 3, { 32, 33, 34 }, 0 },
|
{ MARVELL_DISCOVERY_II, 0, 3, { 32, 33, 34 }, 0 },
|
||||||
{ MARVELL_DISCOVERY_III, 0, 3, { 32, 33, 34 }, 0 },
|
{ MARVELL_DISCOVERY_III, 0, 3, { 32, 33, 34 }, 0 },
|
||||||
|
@ -294,13 +295,13 @@ struct mvgbe_port {
|
||||||
{ MARVELL_DISCOVERY_V, 0, ?, { }, 0 },
|
{ MARVELL_DISCOVERY_V, 0, ?, { }, 0 },
|
||||||
{ MARVELL_DISCOVERY_VI, 0, ?, { }, 0 },
|
{ MARVELL_DISCOVERY_VI, 0, ?, { }, 0 },
|
||||||
#endif
|
#endif
|
||||||
{ MARVELL_ORION_1_88F5082, 0, 1, { 21 }, 0 },
|
{ MARVELL_ORION_1_88F5082, 0, 1, { 21 }, FLAGS_FIX_MTU },
|
||||||
{ MARVELL_ORION_1_88F5180N, 0, 1, { 21 }, 0 },
|
{ MARVELL_ORION_1_88F5180N, 0, 1, { 21 }, FLAGS_FIX_MTU },
|
||||||
{ MARVELL_ORION_1_88F5181, 0, 1, { 21 }, 0 },
|
{ MARVELL_ORION_1_88F5181, 0, 1, { 21 }, FLAGS_FIX_MTU },
|
||||||
{ MARVELL_ORION_1_88F5182, 0, 1, { 21 }, 0 },
|
{ MARVELL_ORION_1_88F5182, 0, 1, { 21 }, FLAGS_FIX_MTU },
|
||||||
{ MARVELL_ORION_2_88F5281, 0, 1, { 21 }, 0 },
|
{ MARVELL_ORION_2_88F5281, 0, 1, { 21 }, FLAGS_FIX_MTU },
|
||||||
{ MARVELL_ORION_1_88F6082, 0, 1, { 21 }, 0 },
|
{ MARVELL_ORION_1_88F6082, 0, 1, { 21 }, FLAGS_FIX_MTU },
|
||||||
{ MARVELL_ORION_1_88W8660, 0, 1, { 21 }, 0 },
|
{ MARVELL_ORION_1_88W8660, 0, 1, { 21 }, FLAGS_FIX_MTU },
|
||||||
|
|
||||||
{ MARVELL_KIRKWOOD_88F6180, 0, 1, { 11 }, FLAGS_FIX_TQTB },
|
{ MARVELL_KIRKWOOD_88F6180, 0, 1, { 11 }, FLAGS_FIX_TQTB },
|
||||||
{ MARVELL_KIRKWOOD_88F6192, 0, 1, { 11 }, FLAGS_FIX_TQTB },
|
{ MARVELL_KIRKWOOD_88F6192, 0, 1, { 11 }, FLAGS_FIX_TQTB },
|
||||||
|
@ -380,7 +381,7 @@ mvgbec_attach(device_t parent, device_t self, void *aux)
|
||||||
mvgbe_ports[i].unit != mva->mva_unit)
|
mvgbe_ports[i].unit != mva->mva_unit)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
sc->sc_fix_tqtb = mvgbe_ports[i].flags & FLAGS_FIX_TQTB;
|
sc->sc_flags = mvgbe_ports[i].flags;
|
||||||
|
|
||||||
for (j = 0; j < mvgbe_ports[i].ports; j++) {
|
for (j = 0; j < mvgbe_ports[i].ports; j++) {
|
||||||
gbea.mva_name = "mvgbe";
|
gbea.mva_name = "mvgbe";
|
||||||
|
@ -980,6 +981,7 @@ mvgbe_init(struct ifnet *ifp)
|
||||||
return ENOBUFS;
|
return ENOBUFS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (csc->sc_flags & FLAGS_FIX_MTU)
|
||||||
MVGBE_WRITE(sc, MVGBE_MTU, 0); /* hw reset value is wrong */
|
MVGBE_WRITE(sc, MVGBE_MTU, 0); /* hw reset value is wrong */
|
||||||
MVGBE_WRITE(sc, MVGBE_PSC,
|
MVGBE_WRITE(sc, MVGBE_PSC,
|
||||||
MVGBE_PSC_ANFC | /* Enable Auto-Neg Flow Ctrl */
|
MVGBE_PSC_ANFC | /* Enable Auto-Neg Flow Ctrl */
|
||||||
|
@ -996,7 +998,7 @@ mvgbe_init(struct ifnet *ifp)
|
||||||
MVGBE_WRITE(sc, MVGBE_CRDP(0), MVGBE_RX_RING_ADDR(sc, 0));
|
MVGBE_WRITE(sc, MVGBE_CRDP(0), MVGBE_RX_RING_ADDR(sc, 0));
|
||||||
MVGBE_WRITE(sc, MVGBE_TCQDP, MVGBE_TX_RING_ADDR(sc, 0));
|
MVGBE_WRITE(sc, MVGBE_TCQDP, MVGBE_TX_RING_ADDR(sc, 0));
|
||||||
|
|
||||||
if (csc->sc_fix_tqtb) {
|
if (csc->sc_flags & FLAGS_FIX_TQTB) {
|
||||||
/*
|
/*
|
||||||
* Queue 0 (offset 0x72700) must be programmed to 0x3fffffff.
|
* Queue 0 (offset 0x72700) must be programmed to 0x3fffffff.
|
||||||
* And offset 0x72704 must be programmed to 0x03ffffff.
|
* And offset 0x72704 must be programmed to 0x03ffffff.
|
||||||
|
|
Loading…
Reference in New Issue