Read the correct error status register on SBus cards.
Don't set infinite burst on SBus cards. Changes based on information in the `Sbus GEM Specification': http://mediacast.sun.com/users/Barton808/media/gem_sbus-1.pdf SBus-based GEM cards (i.e. Sun X1140A) now work! Tested with a X1140A card in a U1 and in a U2. Thanks for martin@ for testing.
This commit is contained in:
parent
4bd69c5b5b
commit
102e2c2e6b
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: gem.c,v 1.77 2008/05/04 17:16:27 xtraeme Exp $ */
|
/* $NetBSD: gem.c,v 1.78 2008/09/15 19:50:28 jdc Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: gem.c,v 1.77 2008/05/04 17:16:27 xtraeme Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: gem.c,v 1.78 2008/09/15 19:50:28 jdc Exp $");
|
||||||
|
|
||||||
#include "opt_inet.h"
|
#include "opt_inet.h"
|
||||||
#include "bpfilter.h"
|
#include "bpfilter.h"
|
||||||
|
@ -1234,7 +1234,8 @@ gem_init_regs(struct gem_softc *sc)
|
||||||
*/
|
*/
|
||||||
bus_space_write_4(t, h, GEM_CONFIG,
|
bus_space_write_4(t, h, GEM_CONFIG,
|
||||||
GEM_CONFIG_TXDMA_LIMIT | GEM_CONFIG_RXDMA_LIMIT |
|
GEM_CONFIG_TXDMA_LIMIT | GEM_CONFIG_RXDMA_LIMIT |
|
||||||
GEM_CONFIG_BURST_INF | (GEM_IS_APPLE(sc) ?
|
((sc->sc_flags & GEM_PCI) ?
|
||||||
|
GEM_CONFIG_BURST_INF : GEM_CONFIG_BURST_64) | (GEM_IS_APPLE(sc) ?
|
||||||
GEM_CONFIG_RONPAULBIT | GEM_CONFIG_BUG2FIX : 0));
|
GEM_CONFIG_RONPAULBIT | GEM_CONFIG_BUG2FIX : 0));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1978,7 +1979,7 @@ int
|
||||||
gem_eint(struct gem_softc *sc, u_int status)
|
gem_eint(struct gem_softc *sc, u_int status)
|
||||||
{
|
{
|
||||||
char bits[128];
|
char bits[128];
|
||||||
u_int32_t v;
|
u_int32_t r, v;
|
||||||
|
|
||||||
if ((status & GEM_INTR_MIF) != 0) {
|
if ((status & GEM_INTR_MIF) != 0) {
|
||||||
printf("%s: XXXlink status changed\n", device_xname(&sc->sc_dev));
|
printf("%s: XXXlink status changed\n", device_xname(&sc->sc_dev));
|
||||||
|
@ -1991,9 +1992,12 @@ gem_eint(struct gem_softc *sc, u_int status)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status & GEM_INTR_BERR) {
|
if (status & GEM_INTR_BERR) {
|
||||||
bus_space_read_4(sc->sc_bustag, sc->sc_h2, GEM_ERROR_STATUS);
|
if (sc->sc_flags & GEM_PCI)
|
||||||
v = bus_space_read_4(sc->sc_bustag, sc->sc_h2,
|
r = GEM_ERROR_STATUS;
|
||||||
GEM_ERROR_STATUS);
|
else
|
||||||
|
r = GEM_SBUS_ERROR_STATUS;
|
||||||
|
bus_space_read_4(sc->sc_bustag, sc->sc_h2, r);
|
||||||
|
v = bus_space_read_4(sc->sc_bustag, sc->sc_h2, r);
|
||||||
aprint_error_dev(&sc->sc_dev, "bus error interrupt: 0x%02x\n",
|
aprint_error_dev(&sc->sc_dev, "bus error interrupt: 0x%02x\n",
|
||||||
v);
|
v);
|
||||||
return (1);
|
return (1);
|
||||||
|
|
Loading…
Reference in New Issue