- add debug/verbose functions.

This commit is contained in:
sato 2000-09-25 03:47:37 +00:00
parent 5125b04184
commit 1efb55d0b4
1 changed files with 54 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: vrgiu.c,v 1.13 2000/09/25 01:56:57 sato Exp $ */ /* $NetBSD: vrgiu.c,v 1.14 2000/09/25 03:47:37 sato Exp $ */
/*- /*-
* Copyright (c) 1999 * Copyright (c) 1999
* Shin Takemura and PocketBSD Project. All rights reserved. * Shin Takemura and PocketBSD Project. All rights reserved.
@ -37,8 +37,9 @@
#include <sys/systm.h> #include <sys/systm.h>
#include <sys/device.h> #include <sys/device.h>
#include <sys/malloc.h> #include <sys/malloc.h>
#include <sys/boot_flag.h>
#include <sys/queue.h> #include <sys/queue.h>
#include <sys/boot_flag.h>
#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) #define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
#include <mips/cpuregs.h> #include <mips/cpuregs.h>
@ -87,9 +88,11 @@ int vrgiu_intr __P((void*));
int vrgiu_print __P((void*, const char*)); int vrgiu_print __P((void*, const char*));
void vrgiu_callback __P((struct device*)); void vrgiu_callback __P((struct device*));
void vrgiu_dump_regs(struct vrgiu_softc *sc); void vrgiu_dump_regs __P((struct vrgiu_softc *sc));
void vrgiu_dump_io(struct vrgiu_softc *sc); void vrgiu_dump_io __P((struct vrgiu_softc *sc));
void vrgiu_dump_iosetting(struct vrgiu_softc *sc); void vrgiu_diff_io __P((void));
void vrgiu_dump_iosetting __P((struct vrgiu_softc *sc));
void vrgiu_diff_iosetting __P((void));
u_int32_t vrgiu_regread_4 __P((vrgiu_chipset_tag_t, bus_addr_t)); u_int32_t vrgiu_regread_4 __P((vrgiu_chipset_tag_t, bus_addr_t));
u_int16_t vrgiu_regread __P((vrgiu_chipset_tag_t, bus_addr_t)); u_int16_t vrgiu_regread __P((vrgiu_chipset_tag_t, bus_addr_t));
void vrgiu_regwrite_4 __P((vrgiu_chipset_tag_t, bus_addr_t, u_int32_t)); void vrgiu_regwrite_4 __P((vrgiu_chipset_tag_t, bus_addr_t, u_int32_t));
@ -114,6 +117,8 @@ struct cfattach vrgiu_ca = {
sizeof(struct vrgiu_softc), vrgiu_match, vrgiu_attach sizeof(struct vrgiu_softc), vrgiu_match, vrgiu_attach
}; };
struct vrgiu_softc *this_giu;
int int
vrgiu_match(parent, cf, aux) vrgiu_match(parent, cf, aux)
struct device *parent; struct device *parent;
@ -134,6 +139,7 @@ vrgiu_attach(parent, self, aux)
struct gpbus_attach_args gpa; struct gpbus_attach_args gpa;
int i; int i;
this_giu = sc;
sc->sc_vc = va->va_vc; sc->sc_vc = va->va_vc;
sc->sc_iot = va->va_iot; sc->sc_iot = va->va_iot;
bus_space_map(sc->sc_iot, va->va_addr, va->va_size, bus_space_map(sc->sc_iot, va->va_addr, va->va_size,
@ -229,6 +235,31 @@ vrgiu_dump_iosetting(sc)
((iosel&m) ? 'o' : ((inten&m)?'I':'i'))); ((iosel&m) ? 'o' : ((inten&m)?'I':'i')));
} }
void
vrgiu_diff_iosetting()
{
struct vrgiu_softc *sc = this_giu;
static long oiosel = 0, ointen = 0, ouseupdn = 0, otermupdn = 0;
long iosel, inten, useupdn, termupdn;
u_int32_t m;
iosel= vrgiu_regread_4(sc, GIUIOSEL_REG);
inten= vrgiu_regread_4(sc, GIUINTEN_REG);
useupdn = vrgiu_regread(sc, GIUUSEUPDN_REG_W);
termupdn = vrgiu_regread(sc, GIUTERMUPDN_REG_W);
if (oiosel != iosel || ointen != inten ||
ouseupdn != useupdn || otermupdn != termupdn) {
for (m = 0x80000000; m; m >>=1)
printf ("%c" , (useupdn&m) ?
((termupdn&m) ? 'U' : 'D') :
((iosel&m) ? 'o' : ((inten&m)?'I':'i')));
}
oiosel = iosel;
ointen = inten;
ouseupdn = useupdn;
otermupdn = termupdn;
}
void void
vrgiu_dump_io(sc) vrgiu_dump_io(sc)
struct vrgiu_softc *sc; struct vrgiu_softc *sc;
@ -241,6 +272,24 @@ vrgiu_dump_io(sc)
bitdisp64(preg); bitdisp64(preg);
} }
void
vrgiu_diff_io()
{
struct vrgiu_softc *sc = this_giu;
static u_int32_t opreg[2] = {0, 0};
u_int32_t preg[2];
preg[0] = vrgiu_regread_4(sc, GIUPIOD_REG);
preg[1] = vrgiu_regread_4(sc, GIUPODAT_REG);
if (opreg[0] != preg[0] || opreg[1] != preg[1]) {
printf("giu data: ");
bitdisp64(preg);
}
opreg[0] = preg[0];
opreg[1] = preg[1];
}
void void
vrgiu_dump_regs(sc) vrgiu_dump_regs(sc)
struct vrgiu_softc *sc; struct vrgiu_softc *sc;