Module Name: src Committed By: mrg Date: Sun Jan 2 10:43:19 UTC 2011
Modified Files: src/sys/arch/sparc64/dev: schizo.c schizoreg.h Log Message: now that it's optional, kill schizo_pci_find_ino(). prepare to enable the tomatillo iocache. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/sparc64/dev/schizo.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/sparc64/dev/schizoreg.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.16 src/sys/arch/sparc64/dev/schizo.c:1.17 --- src/sys/arch/sparc64/dev/schizo.c:1.16 Thu Mar 11 03:54:56 2010 +++ src/sys/arch/sparc64/dev/schizo.c Sun Jan 2 10:43:18 2011 @@ -1,9 +1,10 @@ -/* $NetBSD: schizo.c,v 1.16 2010/03/11 03:54:56 mrg Exp $ */ +/* $NetBSD: schizo.c,v 1.17 2011/01/02 10:43:18 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 * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -102,7 +103,6 @@ static int schizo_pci_intr_map(struct pci_attach_args *, pci_intr_handle_t *); static void *schizo_pci_intr_establish(pci_chipset_tag_t, pci_intr_handle_t, int, int (*)(void *), void *); -static int schizo_pci_find_ino(struct pci_attach_args *, pci_intr_handle_t *); static int schizo_dmamap_create(bus_dma_tag_t, bus_size_t, int, bus_size_t, bus_size_t, int, bus_dmamap_t *); @@ -141,6 +141,7 @@ uint64_t reg, eccctrl; int *busranges = NULL, nranges; char *str; + bool no_sc; aprint_normal(": addr %" PRIx64, ma->ma_reg[0].ur_paddr); str = prom_getpropstring(ma->ma_node, "compatible"); @@ -213,7 +214,10 @@ is = &pbm->sp_is; pbm->sp_sb.sb_is = is; - if (prom_getproplen(sc->sc_node, "no-streaming-cache") < 0) { + no_sc = prom_getproplen(sc->sc_node, "no-streaming-cache") >= 0; + if (no_sc) + aprint_debug("%s: no streaming buffers\n", sc->sc_dv.dv_xname); + else { vaddr_t va = (vaddr_t)&pbm->sp_flush[0x40]; /* @@ -227,8 +231,6 @@ bus_space_subregion(pbm->sp_regt, pbm->sp_regh, offsetof(struct schizo_pbm_regs, strbuf), sizeof(struct iommu_strbuf), &is->is_sb[0]->sb_sb); - } else { - aprint_debug("%s: no streaming buffers\n", sc->sc_dv.dv_xname); } aprint_normal("%s: ", sc->sc_dv.dv_xname); @@ -297,6 +299,22 @@ schizo_set_intr(sc, pbm, PIL_HIGH, schizo_safari_error, sc, SCZ_SERR_INO, "safari"); +#if 0 + if (sc->sc_tomatillo) { + /* + * We should enable the IOCACHE here. + */ + uint64_t iocache_csr; + char bits[128]; + + iocache_csr = schizo_pbm_read(pbm, SCZ_PCI_IOCACHE_CSR); + + snprintb(bits, sizeof(bits), TOM_IOCACHE_CSR_BITS, iocache_csr); + printf("IOCACHE_CSR=%s\n", bits); + printf("IOCACHE_CSR=%" PRIx64 "\n", iocache_csr); + } +#endif + config_found(&sc->sc_dv, &pba, schizo_print); } @@ -605,7 +623,7 @@ npc->spc_conf_write = schizo_conf_write; npc->spc_intr_map = schizo_pci_intr_map; npc->spc_intr_establish = schizo_pci_intr_establish; - npc->spc_find_ino = schizo_pci_find_ino; + npc->spc_find_ino = NULL; return (npc); } @@ -814,54 +832,3 @@ DPRINTF(SDB_INTR, ("; returning handle %p\n", cookie)); return (cookie); } - -static int -schizo_pci_find_ino(struct pci_attach_args *pa, pci_intr_handle_t *ihp) -{ -#if 0 - struct schizo_pbm *pbm = pa->pa_pc->cookie; - struct schizo_softc *sc = pbm->sp_sc; - u_int bus; - u_int dev; - u_int pin; -#endif - - DPRINTF(SDB_INTMAP, ("pci_find_ino: pa_tag: node %x, %d:%d:%d\n", - PCITAG_NODE(pa->pa_tag), (int)PCITAG_BUS(pa->pa_tag), - (int)PCITAG_DEV(pa->pa_tag), - (int)PCITAG_FUN(pa->pa_tag))); - DPRINTF(SDB_INTMAP, - ("pci_find_ino: intrswiz %d, intrpin %d, intrline %d, rawintrpin %d\n", - pa->pa_intrswiz, pa->pa_intrpin, pa->pa_intrline, pa->pa_rawintrpin)); - DPRINTF(SDB_INTMAP, ("pci_find_ino: pa_intrtag: node %x, %d:%d:%d\n", - PCITAG_NODE(pa->pa_intrtag), - (int)PCITAG_BUS(pa->pa_intrtag), - (int)PCITAG_DEV(pa->pa_intrtag), - (int)PCITAG_FUN(pa->pa_intrtag))); - -#if 0 - bus = (pp->pp_id == PSYCHO_PBM_B); - /* - * If we are on a ppb, use the devno on the underlying bus when forming - * the ivec. - */ - if (pa->pa_intrswiz != 0 && PCITAG_NODE(pa->pa_intrtag) != 0) - dev = PCITAG_DEV(pa->pa_intrtag); - else - dev = pa->pa_device; - dev--; - - if (sc->sc_mode == PSYCHO_MODE_PSYCHO && - pp->pp_id == PSYCHO_PBM_B) - dev--; - - pin = pa->pa_intrpin - 1; - DPRINTF(SDB_INTMAP, ("pci_find_ino: mode %d, pbm %d, dev %d, pin %d\n", - sc->sc_mode, pp->pp_id, dev, pin)); - - *ihp = sc->sc_ign | ((bus << 4) & INTMAP_PCIBUS) | - ((dev << 2) & INTMAP_PCISLOT) | (pin & INTMAP_PCIINT); -#endif - - return (0); -} Index: src/sys/arch/sparc64/dev/schizoreg.h diff -u src/sys/arch/sparc64/dev/schizoreg.h:1.6 src/sys/arch/sparc64/dev/schizoreg.h:1.7 --- src/sys/arch/sparc64/dev/schizoreg.h:1.6 Sat Feb 13 11:55:48 2010 +++ src/sys/arch/sparc64/dev/schizoreg.h Sun Jan 2 10:43:18 2011 @@ -1,8 +1,9 @@ -/* $NetBSD: schizoreg.h,v 1.6 2010/02/13 11:55:48 nakayama Exp $ */ +/* $NetBSD: schizoreg.h,v 1.7 2011/01/02 10:43:18 mrg Exp $ */ /* $OpenBSD: schizoreg.h,v 1.20 2008/07/12 13:08:04 kettenis Exp $ */ /* * Copyright (c) 2002 Jason L. Wright (ja...@thought.net) + * Copyright (c) 2010 Matthew R. Green * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -129,6 +130,9 @@ #define SCZ_PCI_AFAR 0x02018 #define SCZ_PCI_DIAG 0x02020 #define SCZ_PCI_ESTAR 0x02028 +#define SCZ_PCI_IOCACHE_CSR 0x02248 +#define SCZ_PCI_IOCACHE_TAG_DIAG_BASE 0x02250 +#define SCZ_PCI_IOCACHE_TAG_DATA_BASE 0x02290 #define SCZ_PCI_STRBUF_CTRL 0x02800 #define SCZ_PCI_STRBUF_FLUSH 0x02808 #define SCZ_PCI_STRBUF_FSYNC 0x02810 @@ -251,6 +255,30 @@ #define SCZ_PCIDIAG_I_PIODPAR (1UL << 2UL) /* invert pio data parity */ #define SCZ_PCIDIAG_I_PIOAPAR (1UL << 1UL) /* invert pio addr parity */ +/* Enable prefetch bits */ +#define TOM_IOCACHE_CSR_WRT_PEN (1UL << 19UL) /* for partial line writes */ +#define TOM_IOCACHE_CSR_NCP_RDM (1UL << 18UL) /* memory read multiple (NC) */ +#define TOM_IOCACHE_CSR_NCP_ONE (1UL << 17UL) /* memory read (NC) */ +#define TOM_IOCACHE_CSR_NCP_LINE (1UL << 16UL) /* memory read line (NC) */ +#define TOM_IOCACHE_CSR_PEN_RDM (1UL << 2UL) /* memory read multiple */ +#define TOM_IOCACHE_CSR_PEN_ONE (1UL << 1UL) /* memory read */ +#define TOM_IOCACHE_CSR_PEN_LINE (1UL << 0UL) /* memory read line */ +/* Prefetch lines selection 0x0 = 1, 0x3 = 4 */ +#define TOM_IOCACHE_CSR_PLEN_RDM_MASK 0x000000000000c000UL /* read multiple */ +#define TOM_IOCACHE_CSR_PLEN_RDM_SHIFT 14 +#define TOM_IOCACHE_CSR_PLEN_ONE_MASK 0x0000000000003000UL /* read one */ +#define TOM_IOCACHE_CSR_PLEN_ONE_SHIFT 12 +#define TOM_IOCACHE_CSR_PLEN_LINE_MASK 0x0000000000000c00UL /* read line */ +#define TOM_IOCACHE_CSR_PLEN_LINE_SHIFT 10 +/* Prefetch offset selection 0x00 = 1, 0x7e = 127, 0x7f = invalid */ +#define TOM_IOCACHE_CSR_POFFSET_MASK 0x00000000000003f8UL + +#define TOM_IOCACHE_CSR_BITS "\177\020" \ + "b\19WRT_PEN\0b\18NCP_RDM\0b17NCP_ONE\0b\16NCP_LINE\0" \ + "f\14\2PLEN_RDM\0f\12\2PEN_ONE\0f\10\2PEN_LINE\0" \ + "f\3\7POFFSET\0" \ + "b\2PEN_RDM\0b\1PEN_ONE\0b\0PEN_LINE\0\0" + #define TOM_IOMMU_ERR (1UL << 24) #define TOM_IOMMU_ERR_MASK (3UL << 25) #define TOM_IOMMU_PROT_ERR (0UL << 25)