Module Name: src
Committed By: mrg
Date: Sun Mar 20 20:48:36 UTC 2011
Modified Files:
src/sys/arch/sparc64/dev: pyro.c
Log Message:
remove pyro_xir(). we don't have the MD support for it (yet?).
clean up some debug code. clean up the DPRINTF() code, and expand
the interrupt mapping debug code to match schizo and psycho.
set IOMMU_TSBSIZE_IN_PTSB, and if oberon, IOMMU_FLUSH_CACHE.
disable the STC explicitly.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/sparc64/dev/pyro.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/sparc64/dev/pyro.c
diff -u src/sys/arch/sparc64/dev/pyro.c:1.2 src/sys/arch/sparc64/dev/pyro.c:1.3
--- src/sys/arch/sparc64/dev/pyro.c:1.2 Tue Mar 15 11:42:03 2011
+++ src/sys/arch/sparc64/dev/pyro.c Sun Mar 20 20:48:36 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: pyro.c,v 1.2 2011/03/15 11:42:03 mrg Exp $ */
+/* $NetBSD: pyro.c,v 1.3 2011/03/20 20:48:36 mrg Exp $ */
/* from: $OpenBSD: pyro.c,v 1.20 2010/12/05 15:15:14 kettenis Exp $ */
/*
@@ -118,12 +118,6 @@
int pyro_dmamap_create(bus_dma_tag_t, bus_size_t, int,
bus_size_t, bus_size_t, int, bus_dmamap_t *);
-#if 0
-#ifdef DDB
-void pyro_xir(void *, int);
-#endif
-#endif
-
int
pyro_match(struct device *parent, struct cfdata *match, void *aux)
{
@@ -219,7 +213,6 @@
if (bus_space_map(pbm->pp_cfgt, 0, 0x10000000, 0, &pbm->pp_cfgh))
panic("pyro: can't map config space");
-printf("cfgh: _ptr %p _asi %x _sasi %x\n", (void *)pbm->pp_cfgh._ptr, pbm->pp_cfgh._asi, pbm->pp_cfgh._sasi);
pbm->pp_pc = pyro_alloc_chipset(pbm, sc->sc_node, &_sparc_pci_chipset);
pbm->pp_pc->spc_busmax = busranges[1];
@@ -244,12 +237,6 @@
free(busranges, M_DEVBUF);
-#if 0
-#ifdef DDB
- db_register_xir(pyro_xir, sc);
-#endif
-#endif
-
config_found(&sc->sc_dv, &pba, pyro_print);
}
@@ -269,16 +256,17 @@
panic("pyro: unable to create iommu handle");
}
-#if 0
- is->is_sb[0] = &pbm->pp_sb;
- is->is_sb[0]->sb_bustag = is->is_bustag;
-#endif
+ /* We have no STC. */
+ is->is_sb[0] = NULL;
name = (char *)malloc(32, M_DEVBUF, M_NOWAIT);
if (name == NULL)
panic("couldn't malloc iommu name");
snprintf(name, 32, "%s dvma", sc->sc_dv.dv_xname);
+ /* Tell iommu how to set the TSB size. */
+ is->is_flags = IOMMU_TSBSIZE_IN_PTSB;
+
/* On Oberon, we need to flush the cache. */
if (sc->sc_oberon)
is->is_flags |= IOMMU_FLUSH_CACHE;
@@ -294,14 +282,6 @@
return (QUIET);
}
-#if 0 /* XXXMRG */
-int
-pyro_conf_size(pci_chipset_tag_t pc, pcitag_t tag)
-{
- return PCIE_CONFIG_SPACE_SIZE;
-}
-#endif
-
pcireg_t
pyro_conf_read(pci_chipset_tag_t pc, pcitag_t tag, int reg)
{
@@ -347,7 +327,7 @@
if (*ihp != (pci_intr_handle_t)-1) {
*ihp |= sc->sc_ign;
- DPRINTF(PDB_INTR, ("%s: not -1 -> ih %lx", __func__, (u_long)*ihp));
+ DPRINTF(PDB_INTR, ("%s: not -1 -> ih %lx\n", __func__, (u_long)*ihp));
return (0);
}
@@ -359,7 +339,7 @@
*/
if (pa->pa_intrpin == 0) {
- DPRINTF(PDB_INTR, ("%s: no intrpen", __func__));
+ DPRINTF(PDB_INTR, ("%s: no intrpen\n", __func__));
return (-1);
}
@@ -373,7 +353,7 @@
*ihp |= (dev << 2) & INTMAP_PCISLOT;
*ihp |= sc->sc_ign;
- DPRINTF(PDB_INTR, ("%s: weird hack -> ih %lx", __func__, (u_long)*ihp));
+ DPRINTF(PDB_INTR, ("%s: weird hack -> ih %lx\n", __func__, (u_long)*ihp));
return (0);
}
@@ -561,7 +541,7 @@
struct pyro_softc *sc = pbm->pp_sc;
struct intrhand *ih = NULL;
volatile u_int64_t *intrmapptr = NULL, *intrclrptr = NULL;
- u_int64_t *imap, *iclr;
+ u_int64_t *imapbase, *iclrbase;
int ino;
ino = INTINO(ihandle);
@@ -574,11 +554,11 @@
level = 2;
}
- imap = (uint64_t *)((uintptr_t)bus_space_vaddr(sc->sc_bustag, sc->sc_csrh) + 0x1000);
- iclr = (uint64_t *)((uintptr_t)bus_space_vaddr(sc->sc_bustag, sc->sc_csrh) + 0x1400);
- intrmapptr = &imap[ino];
- intrclrptr = &iclr[ino];
- DPRINTF(PDB_INTR, (" imap %p iclr %p mapptr %p clrptr %p", imap, iclr, intrmapptr, intrclrptr));
+ imapbase = (uint64_t *)((uintptr_t)bus_space_vaddr(sc->sc_bustag, sc->sc_csrh) + 0x1000);
+ iclrbase = (uint64_t *)((uintptr_t)bus_space_vaddr(sc->sc_bustag, sc->sc_csrh) + 0x1400);
+ intrmapptr = &imapbase[ino];
+ intrclrptr = &iclrbase[ino];
+ DPRINTF(PDB_INTR, (" imapbase %p iclrbase %p mapptr %p clrptr %p\n", imapbase, iclrbase, intrmapptr, intrclrptr));
ino |= INTVEC(ihandle);
ih = malloc(sizeof *ih, M_DEVBUF, M_NOWAIT);
@@ -597,30 +577,38 @@
intr_establish(ih->ih_pil, level != IPL_VM, ih);
if (intrmapptr != NULL) {
- u_int64_t ival;
+ u_int64_t imap;
- ival = *intrmapptr;
- ival &= ~FIRE_INTRMAP_INT_CNTRL_NUM_MASK;
- ival |= FIRE_INTRMAP_INT_CNTRL_NUM0;
+ imap = *intrmapptr;
+ DPRINTF(PDB_INTR, ("%s: read intrmap = %016qx", __func__,
+ (unsigned long long)imap));
+ imap &= ~FIRE_INTRMAP_INT_CNTRL_NUM_MASK;
+ imap |= FIRE_INTRMAP_INT_CNTRL_NUM0;
+ DPRINTF(PDB_INTR, ("; set intr group intrmap = %016qx",
+ (unsigned long long)imap));
if (sc->sc_oberon) {
- ival &= ~OBERON_INTRMAP_T_DESTID_MASK;
- ival |= CPU_JUPITERID <<
+ imap &= ~OBERON_INTRMAP_T_DESTID_MASK;
+ imap |= CPU_JUPITERID <<
OBERON_INTRMAP_T_DESTID_SHIFT;
} else {
- ival &= ~FIRE_INTRMAP_T_JPID_MASK;
- ival |= CPU_UPAID << FIRE_INTRMAP_T_JPID_SHIFT;
+ imap &= ~FIRE_INTRMAP_T_JPID_MASK;
+ imap |= CPU_UPAID << FIRE_INTRMAP_T_JPID_SHIFT;
}
- ival |= INTMAP_V;
- *intrmapptr = ival;
- ival = *intrmapptr;
- ih->ih_number |= ival & INTMAP_INR;
+ DPRINTF(PDB_INTR, ("; set cpuid num intrmap = %016qx",
+ (unsigned long long)imap));
+ imap |= INTMAP_V;
+ *intrmapptr = imap;
+ DPRINTF(PDB_INTR, ("; writing intrmap = %016qx",
+ (unsigned long long)imap));
+ imap = *intrmapptr;
+ DPRINTF(PDB_INTR, ("; reread intrmap = %016qx\n",
+ (unsigned long long)imap));
+ ih->ih_number |= imap & INTMAP_INR;
}
-#if 0 /* XXXMRG? do this? our schizo does. */
if (intrclrptr) {
/* set state to IDLE */
*intrclrptr = 0;
}
-#endif
return (ih);
}
@@ -632,22 +620,9 @@
void *cookie;
struct pyro_pbm *pbm = (struct pyro_pbm *)pc->cookie;
- DPRINTF(PDB_INTR, ("%s: ih %lx; level %d", __func__, (u_long)ih, level));
+ DPRINTF(PDB_INTR, ("%s: ih %lx; level %d\n", __func__, (u_long)ih, level));
cookie = bus_intr_establish(pbm->pp_memt, ih, level, func, arg);
- DPRINTF(PDB_INTR, ("; returning handle %p\n", cookie));
+ DPRINTF(PDB_INTR, ("%s: returning handle %p\n", __func__, cookie));
return (cookie);
}
-
-#if 0
-#ifdef DDB
-void
-pyro_xir(void *arg, int cpu)
-{
- struct pyro_softc *sc = arg;
-
- bus_space_write_8(sc->sc_bustag, sc->sc_xbch, FIRE_RESET_GEN,
- FIRE_RESET_GEN_XIR);
-}
-#endif
-#endif