Module Name:    src
Committed By:   mrg
Date:           Sun Mar 25 03:13:08 UTC 2012

Modified Files:
        src/sys/arch/sparc64/dev: schizo.c schizoreg.h schizovar.h

Log Message:
- save the "version#" in the softc, we will want it later
- enable some more things in the schizo CSR:
        - tomatillo: DMA arbitration enable:
        - tomatillo: prefetch read multiple / one / line
        - schizo: enable parking unless "no-bus-parking" is set
        - schizo: enable streaming buffer interrupts
        - schizo: enable bus arbitration for schizo, not these reseved
          bits for tomatillo

partly from and entirely inspired by freebsd schizo_attach().


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/sparc64/dev/schizo.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/sparc64/dev/schizoreg.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/sparc64/dev/schizovar.h

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/schizo.c
diff -u src/sys/arch/sparc64/dev/schizo.c:1.28 src/sys/arch/sparc64/dev/schizo.c:1.29
--- src/sys/arch/sparc64/dev/schizo.c:1.28	Sun Mar 18 05:26:58 2012
+++ src/sys/arch/sparc64/dev/schizo.c	Sun Mar 25 03:13:08 2012
@@ -1,10 +1,10 @@
-/*	$NetBSD: schizo.c,v 1.28 2012/03/18 05:26:58 mrg Exp $	*/
+/*	$NetBSD: schizo.c,v 1.29 2012/03/25 03:13:08 mrg Exp $	*/
 /*	$OpenBSD: schizo.c,v 1.55 2008/08/18 20:29:37 brad Exp $	*/
 
 /*
  * Copyright (c) 2002 Jason L. Wright (ja...@thought.net)
  * Copyright (c) 2003 Henric Jungheim
- * Copyright (c) 2008, 2009, 2010 Matthew R. Green
+ * Copyright (c) 2008, 2009, 2010, 2012 Matthew R. Green
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: schizo.c,v 1.28 2012/03/18 05:26:58 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: schizo.c,v 1.29 2012/03/25 03:13:08 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -152,6 +152,9 @@ schizo_attach(struct device *parent, str
 	str = prom_getpropstring(ma->ma_node, "compatible");
 	if (strcmp(str, "pci108e,a801") == 0)
 		sc->sc_tomatillo = 1;
+
+	sc->sc_ver = prom_getpropint(sc->sc_node, "version#", 0);
+
 	sc->sc_dev = self;
 	sc->sc_node = ma->ma_node;
 	sc->sc_dmat = ma->ma_dmatag;
@@ -204,9 +207,8 @@ schizo_attach(struct device *parent, str
 		panic("schizo: can't get bus-range");
 
 	aprint_normal(": \"%s\", version %d, ign %x, bus %c %d to %d\n",
-	    sc->sc_tomatillo ? "Tomatillo" : "Schizo",
-	    prom_getpropint(sc->sc_node, "version#", 0), sc->sc_ign,
-	    pbm->sp_bus_a ? 'A' : 'B', busranges[0], busranges[1]);
+	    sc->sc_tomatillo ? "Tomatillo" : "Schizo", sc->sc_ver,
+	    sc->sc_ign, pbm->sp_bus_a ? 'A' : 'B', busranges[0], busranges[1]);
 	aprint_naive("\n");
 
 	if (bus_space_subregion(pbm->sp_regt, sc->sc_ctrlh,
@@ -280,8 +282,20 @@ schizo_attach(struct device *parent, str
 
 	reg = schizo_pbm_read(pbm, SCZ_PCI_CTRL);
 	/* enable/disable error interrupts and arbiter */
-	reg |= SCZ_PCICTRL_EEN | SCZ_PCICTRL_MMU_INT | SCZ_PCICTRL_ARB;
-	reg &= ~SCZ_PCICTRL_SBH_INT;
+	reg |= SCZ_PCICTRL_EEN | SCZ_PCICTRL_MMU_INT;
+	if (sc->sc_tomatillo) {
+		reg &= ~SCZ_PCICTRL_SBH_INT;
+		reg |= TOM_PCICTRL_ARB;
+		reg |= TOM_PCICTRL_PRM | TOM_PCICTRL_PRO |
+		       TOM_PCICTRL_PRL;
+		if (sc->sc_ver <= 1)	/* 2.0 */
+			reg |= TOM_PCICTRL_DTO_INT;
+		else
+			reg |= SCZ_PCICTRL_PTO;
+	} else
+		reg |= SCZ_PCICTRL_SBH_INT | SCZ_PCICTRL_ARB;
+	if (OF_getproplen(sc->sc_node, "no-bus-parking") < 0)
+		reg |= SCZ_PCICTRL_PARK;
 	schizo_pbm_write(pbm, SCZ_PCI_CTRL, reg);
 
 	reg = schizo_pbm_read(pbm, SCZ_PCI_DIAG);
@@ -315,7 +329,6 @@ schizo_attach(struct device *parent, str
 			      TOM_IOCACHE_CSR_PEN_RDM |
 			      TOM_IOCACHE_CSR_PEN_ONE |
 			      TOM_IOCACHE_CSR_PEN_LINE;
-
 		schizo_pbm_write(pbm, SCZ_PCI_IOCACHE_CSR, iocache_csr);
 	}
 
@@ -547,22 +560,19 @@ schizo_set_intr(struct schizo_softc *sc,
 bus_space_tag_t
 schizo_alloc_mem_tag(struct schizo_pbm *sp)
 {
-	return (schizo_alloc_bus_tag(sp, "mem",
-	    PCI_MEMORY_BUS_SPACE));
+	return (schizo_alloc_bus_tag(sp, "mem", PCI_MEMORY_BUS_SPACE));
 }
 
 bus_space_tag_t
 schizo_alloc_io_tag(struct schizo_pbm *sp)
 {
-	return (schizo_alloc_bus_tag(sp, "io",
-	    PCI_IO_BUS_SPACE));
+	return (schizo_alloc_bus_tag(sp, "io", PCI_IO_BUS_SPACE));
 }
 
 bus_space_tag_t
 schizo_alloc_config_tag(struct schizo_pbm *sp)
 {
-	return (schizo_alloc_bus_tag(sp, "cfg",
-	    PCI_CONFIG_BUS_SPACE));
+	return (schizo_alloc_bus_tag(sp, "cfg", PCI_CONFIG_BUS_SPACE));
 }
 
 bus_space_tag_t

Index: src/sys/arch/sparc64/dev/schizoreg.h
diff -u src/sys/arch/sparc64/dev/schizoreg.h:1.8 src/sys/arch/sparc64/dev/schizoreg.h:1.9
--- src/sys/arch/sparc64/dev/schizoreg.h:1.8	Sun Mar 20 20:43:34 2011
+++ src/sys/arch/sparc64/dev/schizoreg.h	Sun Mar 25 03:13:08 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: schizoreg.h,v 1.8 2011/03/20 20:43:34 mrg Exp $	*/
+/*	$NetBSD: schizoreg.h,v 1.9 2012/03/25 03:13:08 mrg Exp $	*/
 /*	$OpenBSD: schizoreg.h,v 1.20 2008/07/12 13:08:04 kettenis Exp $	*/
 
 /*
@@ -203,12 +203,16 @@ struct schizo_regs {
 #define	SCZ_PCICTRL_SBH_ERR		(1ULL << 35UL)		/* pci strm hole */
 #define	SCZ_PCICTRL_SERR		(1ULL << 34UL)		/* pci serr# sampled */
 #define	SCZ_PCICTRL_PCISPD		(1ULL << 33UL)		/* speed (0=clk/2,1=clk) */
+#define	TOM_PCICTRL_PRM			(1ULL << 30UL)		/* prefetch read multiple */
+#define	TOM_PCICTRL_PRO			(1ULL << 29UL)		/* prefetch read one */
+#define	TOM_PCICTRL_PRL			(1ULL << 28UL)		/* prefetch read line */
 #define	SCZ_PCICTRL_PTO			(3UL << 24UL)		/* pci timeout interval */
 #define	SCZ_PCICTRL_MMU_INT		(1UL << 19UL)		/* mmu intr en */
 #define	SCZ_PCICTRL_SBH_INT		(1UL << 18UL)		/* strm byte hole intr en */
 #define	SCZ_PCICTRL_EEN			(1UL << 17UL)		/* error intr en */
 #define	SCZ_PCICTRL_PARK		(1UL << 16UL)		/* bus parked */
 #define	SCZ_PCICTRL_PCIRST		(1UL <<  8UL)		/* pci reset */
+#define	TOM_PCICTRL_ARB			(0xffUL << 0UL)		/* dma arb enables, tomatillo */
 #define	SCZ_PCICTRL_ARB			(0x3fUL << 0UL)		/* dma arb enables */
 #define SCZ_PCICTRL_BITS "\20\277UNUS\276DTO\275DTO_INT\263ESLCK\246TTO\245RTRY\244MMU\243SBH\242SERR\241SPD\223MMU_INT\222SBH_INT\221EEN\220PARK\210PCIRST"
 

Index: src/sys/arch/sparc64/dev/schizovar.h
diff -u src/sys/arch/sparc64/dev/schizovar.h:1.5 src/sys/arch/sparc64/dev/schizovar.h:1.6
--- src/sys/arch/sparc64/dev/schizovar.h:1.5	Fri Jun  3 02:58:07 2011
+++ src/sys/arch/sparc64/dev/schizovar.h	Sun Mar 25 03:13:08 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: schizovar.h,v 1.5 2011/06/03 02:58:07 christos Exp $	*/
+/*	$NetBSD: schizovar.h,v 1.6 2012/03/25 03:13:08 mrg Exp $	*/
 /*	$OpenBSD: schizovar.h,v 1.10 2007/01/14 16:19:49 kettenis Exp $	*/
 
 /*
@@ -63,6 +63,7 @@ struct schizo_softc {
 
 	int sc_busa;
 	int sc_tomatillo;
+	uint32_t sc_ver;
 };
 
 #define	schizo_read(sc,r) \

Reply via email to