Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/alpha The Tsunami / Typhoon chipsets have a static ...
details: https://anonhg.NetBSD.org/src/rev/cef187264bbe
branches: trunk
changeset: 379332:cef187264bbe
user: thorpej <thorpej%NetBSD.org@localhost>
date: Thu May 27 22:11:31 2021 +0000
description:
The Tsunami / Typhoon chipsets have a static "monster window" for DMA
that allows for up to 32GB of RAM to be direct-mapped if the PCI device
can issue a 64-bit address (the monster window lives at 0x10000000000).
Enable this window and provide this to the PCI bus as a "dmat64".
diffstat:
sys/arch/alpha/include/pci_machdep.h | 3 +-
sys/arch/alpha/pci/tsc.c | 6 +-
sys/arch/alpha/pci/tsp_dma.c | 119 +++++++++++++++++++++++++---------
sys/arch/alpha/pci/tsreg.h | 25 +++++++-
sys/arch/alpha/pci/tsvar.h | 3 +-
5 files changed, 117 insertions(+), 39 deletions(-)
diffs (253 lines):
diff -r 42222e867d4c -r cef187264bbe sys/arch/alpha/include/pci_machdep.h
--- a/sys/arch/alpha/include/pci_machdep.h Thu May 27 22:05:24 2021 +0000
+++ b/sys/arch/alpha/include/pci_machdep.h Thu May 27 22:11:31 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_machdep.h,v 1.21 2020/09/26 21:07:48 thorpej Exp $ */
+/* $NetBSD: pci_machdep.h,v 1.22 2021/05/27 22:11:31 thorpej Exp $ */
/*
* Copyright (c) 1996 Carnegie-Mellon University.
@@ -36,6 +36,7 @@
* Machine-specific definitions for PCI autoconfiguration.
*/
#define __HAVE_PCIIDE_MACHDEP_COMPAT_INTR_ESTABLISH
+#define _PCI_HAVE_DMA64
/*
* Types provided to machine-independent PCI code
diff -r 42222e867d4c -r cef187264bbe sys/arch/alpha/pci/tsc.c
--- a/sys/arch/alpha/pci/tsc.c Thu May 27 22:05:24 2021 +0000
+++ b/sys/arch/alpha/pci/tsc.c Thu May 27 22:11:31 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tsc.c,v 1.25 2021/04/24 23:36:23 thorpej Exp $ */
+/* $NetBSD: tsc.c,v 1.26 2021/05/27 22:11:31 thorpej Exp $ */
/*-
* Copyright (c) 1999 by Ross Harvey. All rights reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tsc.c,v 1.25 2021/04/24 23:36:23 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tsc.c,v 1.26 2021/05/27 22:11:31 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -231,7 +231,7 @@ tspattach(device_t parent, device_t self
pba.pba_memt = &pcp->pc_memt;
pba.pba_dmat =
alphabus_dma_get_tag(&pcp->pc_dmat_direct, ALPHA_BUS_PCI);
- pba.pba_dmat64 = NULL;
+ pba.pba_dmat64 = &pcp->pc_dmat64_direct;
pba.pba_pc = &pcp->pc_pc;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
diff -r 42222e867d4c -r cef187264bbe sys/arch/alpha/pci/tsp_dma.c
--- a/sys/arch/alpha/pci/tsp_dma.c Thu May 27 22:05:24 2021 +0000
+++ b/sys/arch/alpha/pci/tsp_dma.c Thu May 27 22:11:31 2021 +0000
@@ -1,4 +1,34 @@
-/* $NetBSD: tsp_dma.c,v 1.16 2021/05/05 02:15:18 thorpej Exp $ */
+/* $NetBSD: tsp_dma.c,v 1.17 2021/05/27 22:11:31 thorpej Exp $ */
+
+/*-
+ * Copyright (c) 1997, 1998, 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
+ * NASA Ames Research Center.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
/*-
* Copyright (c) 1999 by Ross Harvey. All rights reserved.
@@ -28,41 +58,10 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
- */
-
-/*-
- * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
- * NASA Ames Research Center.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tsp_dma.c,v 1.16 2021/05/05 02:15:18 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tsp_dma.c,v 1.17 2021/05/27 22:11:31 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -108,6 +107,31 @@ static void tsp_tlb_invalidate(struct ts
*/
#define TSP_SGMAP_PFTHRESH 256
+/*
+ * Quoting the 21272 programmer's reference manual:
+ *
+ * <quote>
+ * 10.1.4.4 Monster Window DMA Address Translation
+ *
+ * In case of a PCI dual-address cycle command, the high-order PCI address
+ * bits <63:40> are compared to the constant value 0x0000_01 (that is, bit
+ * <40> = 1; all other bits = 0). If these bits match, a monster window hit
+ * has occurred and the low-order PCI address bits <34:0> are used unchanged
+ * as the system address bits <34:0>. PCI address bits <39:35> are ignored.
+ * The high-order 32 PCI address bits are available on b_ad<31:0> in the
+ * second cycle of a DAC, and also on b_ad<63:32> in the first cycle of a
+ * DAC if b_req64_l is asserted.
+ * </quote>
+ *
+ * This means that we can address up to 32GB of RAM using a direct-mapped
+ * 64-bit DMA tag. This leaves us possibly having to fall back on SGMAP
+ * DMA on a Titan system (those support up to 64GB of RAM), and we may have
+ * to address that with an additional large SGMAP DAC window at another
+ * time.
+ */
+#define TSP_MONSTER_DMA_WINDOW_BASE 0x100##00000000UL
+#define TSP_MONSTER_DMA_WINDOW_SIZE 0x008##00000000UL
+
void
tsp_dma_init(struct tsp_config *pcp)
{
@@ -137,9 +161,38 @@ tsp_dma_init(struct tsp_config *pcp)
pccsr->tsp_wsba[i].tsg_r = premap[i].base | premap[i].enables;
pccsr->tsp_wsm[i].tsg_r = premap[i].mask;
}
+
+ /* Ensure the Monster Window is enabled. */
+ pccsr->tsp_pctl.tsg_r |= PCTL_MWIN;
alpha_mb();
/*
+ * Initialize the DMA tag used for direct-mapped 64-bit DMA.
+ */
+ t = &pcp->pc_dmat64_direct;
+ t->_cookie = pcp;
+ t->_wbase = TSP_MONSTER_DMA_WINDOW_BASE;
+ t->_wsize = TSP_MONSTER_DMA_WINDOW_SIZE;
+ t->_next_window = &pcp->pc_dmat_sgmap;
+ t->_boundary = 0;
+ t->_sgmap = NULL;
+ t->_get_tag = tsp_dma_get_tag;
+ t->_dmamap_create = _bus_dmamap_create;
+ t->_dmamap_destroy = _bus_dmamap_destroy;
+ t->_dmamap_load = _bus_dmamap_load_direct;
+ t->_dmamap_load_mbuf = _bus_dmamap_load_mbuf_direct;
+ t->_dmamap_load_uio = _bus_dmamap_load_uio_direct;
+ t->_dmamap_load_raw = _bus_dmamap_load_raw_direct;
+ t->_dmamap_unload = _bus_dmamap_unload;
+ t->_dmamap_sync = _bus_dmamap_sync;
+
+ t->_dmamem_alloc = _bus_dmamem_alloc;
+ t->_dmamem_free = _bus_dmamem_free;
+ t->_dmamem_map = _bus_dmamem_map;
+ t->_dmamem_unmap = _bus_dmamem_unmap;
+ t->_dmamem_mmap = _bus_dmamem_mmap;
+
+ /*
* Initialize the DMA tag used for direct-mapped DMA.
*/
t = &pcp->pc_dmat_direct;
diff -r 42222e867d4c -r cef187264bbe sys/arch/alpha/pci/tsreg.h
--- a/sys/arch/alpha/pci/tsreg.h Thu May 27 22:05:24 2021 +0000
+++ b/sys/arch/alpha/pci/tsreg.h Thu May 27 22:11:31 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tsreg.h,v 1.8 2020/09/23 00:46:17 thorpej Exp $ */
+/* $NetBSD: tsreg.h,v 1.9 2021/05/27 22:11:31 thorpej Exp $ */
/*-
* Copyright (c) 1999 by Ross Harvey. All rights reserved.
@@ -167,6 +167,29 @@
#define P_TBA3 0x02c0
#define P_PCTL 0x0300
+
+#define PCTL_FDSC __BIT(0) /* fast discard enable */
+#define PCTL_FBTB __BIT(1) /* fast back-to-back enable */
+#define PCTL_THDIS __BIT(2) /* disable TLB anti-thrash (debug) */
+#define PCTL_CHAINDIS __BIT(3) /* disable chaining */
+#define PCTL_TGTLAT __BIT(4) /* target latency timers enable */
+#define PCTL_HOLE __BIT(5) /* 512KB->1M hole enable */
+#define PCTL_MWIN __BIT(6) /* monster window enable */
+#define PCTL_PRIGRP __BITS(8,14) /* arbiter priority group */
+#define PCTL_PPRI __BIT(15) /* arbiter priority group for Pchip */
+#define PCTL_ECCEN __BIT(18) /* ECC enable for DMA and SGTE */
+#define PCTL_PADM __BIT(19) /* PADbus mode */
+#define PCTL_CDQMAX __BITS(20,23) /* see manual */
+#define PCTL_REV __BITS(24,31) /* Pchip revision */
+#define PCTL_CRQMAX __BITS(32,35) /* see manual */
+#define PCTL_PTPMAX __BITS(36,39) /* see manual */
+#define PCTL_PCLKX __BITS(40,41) /* PCI clock freq multipler */
+#define PCTL_FDSDIS __BIT(42) /* fast DMA start and SGTE disable */
+#define PCTL_FDWDIS __BIT(43) /* fast DMA read cache block disable */
+#define PCTL_PTEVRFY __BIT(44) /* PTE verify for DMA read */
+#define PCTL_RPP __BIT(45) /* remote Pchip present */
+#define PCTL_PID __BITS(46,47) /* Pchip ID */
+
#define P_PLAT 0x0340
/* reserved 0x0380 */
#define P_PERROR 0x03c0
diff -r 42222e867d4c -r cef187264bbe sys/arch/alpha/pci/tsvar.h
--- a/sys/arch/alpha/pci/tsvar.h Thu May 27 22:05:24 2021 +0000
+++ b/sys/arch/alpha/pci/tsvar.h Thu May 27 22:11:31 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tsvar.h,v 1.14 2020/06/17 03:50:04 thorpej Exp $ */
+/* $NetBSD: tsvar.h,v 1.15 2021/05/27 22:11:31 thorpej Exp $ */
/*-
* Copyright (c) 1999 by Ross Harvey. All rights reserved.
@@ -51,6 +51,7 @@ struct tsp_config {
struct alpha_bus_space pc_iot, pc_memt;
struct alpha_pci_chipset pc_pc;
+ struct alpha_bus_dma_tag pc_dmat64_direct;
struct alpha_bus_dma_tag pc_dmat_direct;
struct alpha_bus_dma_tag pc_dmat_sgmap;
Home |
Main Index |
Thread Index |
Old Index