Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 01:35:11 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/i915drm: intel_gtt.c
        src/sys/external/bsd/drm2/include/drm: intel-gtt.h

Log Message:
Update intel gtt API.

TODO: Find where the stolen memory base is in agp_i810.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/drm2/i915drm/intel_gtt.c
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/include/drm/intel-gtt.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/external/bsd/drm2/i915drm/intel_gtt.c
diff -u src/sys/external/bsd/drm2/i915drm/intel_gtt.c:1.11 src/sys/external/bsd/drm2/i915drm/intel_gtt.c:1.12
--- src/sys/external/bsd/drm2/i915drm/intel_gtt.c:1.11	Mon Aug 27 16:15:23 2018
+++ src/sys/external/bsd/drm2/i915drm/intel_gtt.c	Sun Dec 19 01:35:10 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_gtt.c,v 1.11 2018/08/27 16:15:23 riastradh Exp $	*/
+/*	$NetBSD: intel_gtt.c,v 1.12 2021/12/19 01:35:10 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 /* Intel GTT stubs */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_gtt.c,v 1.11 2018/08/27 16:15:23 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_gtt.c,v 1.12 2021/12/19 01:35:10 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/bus.h>
@@ -53,15 +53,15 @@ static struct {
 	bus_dmamap_t		scratch_map;
 } intel_gtt;
 
+struct resource intel_graphics_stolen_res;
+
 void
-intel_gtt_get(uint64_t *va_size, size_t *stolen_size, bus_addr_t *aper_base,
-    uint64_t *aper_size)
+intel_gtt_get(uint64_t *va_size, bus_addr_t *aper_base, uint64_t *aper_size)
 {
 	struct agp_softc *const sc = agp_i810_sc;
 
 	if (sc == NULL) {
 		*va_size = 0;
-		*stolen_size = 0;
 		*aper_base = 0;
 		*aper_size = 0;
 		return;
@@ -69,9 +69,13 @@ intel_gtt_get(uint64_t *va_size, size_t 
 
 	struct agp_i810_softc *const isc = sc->as_chipc;
 	*va_size = ((size_t)(isc->gtt_size/sizeof(uint32_t)) << PAGE_SHIFT);
-	*stolen_size = ((size_t)isc->stolen << PAGE_SHIFT);
 	*aper_base = sc->as_apaddr;
 	*aper_size = sc->as_apsize;
+
+#ifdef notyet
+	intel_graphics_stolen_res.base = ...;
+	intel_graphics_stolen_res.size = isc->stolen;
+#endif
 }
 
 int
@@ -143,21 +147,11 @@ intel_gtt_chipset_flush(void)
 	agp_i810_chipset_flush(agp_i810_sc->as_chipc);
 }
 
-void
-intel_gtt_insert_sg_entries(bus_dmamap_t dmamap, unsigned va_page,
-    unsigned flags)
+static int
+intel_gtt_flags(unsigned flags)
 {
-	struct agp_i810_softc *const isc = agp_i810_sc->as_chipc;
-	off_t va = (va_page << PAGE_SHIFT);
-	unsigned seg;
-	int gtt_flags = 0;
-	int error;
+	int gtt_flags = AGP_I810_GTT_VALID;
 
-	KASSERT(0 <= va);
-	KASSERT((va >> PAGE_SHIFT) == va_page);
-	KASSERT(0 < dmamap->dm_nsegs);
-
-	gtt_flags |= AGP_I810_GTT_VALID;
 	switch (flags) {
 	case AGP_USER_MEMORY:
 		break;
@@ -168,6 +162,42 @@ intel_gtt_insert_sg_entries(bus_dmamap_t
 		panic("invalid intel gtt flags: %x", flags);
 	}
 
+	return gtt_flags;
+}
+
+void
+intel_gtt_insert_page(bus_addr_t addr, unsigned va_page, unsigned flags)
+{
+	struct agp_i810_softc *const isc = agp_i810_sc->as_chipc;
+	off_t va = (off_t)va_page << PAGE_SHIFT;
+	int gtt_flags = intel_gtt_flags(flags);
+	int error;
+
+	error = agp_i810_write_gtt_entry(isc, va, addr, gtt_flags);
+	if (error)
+		device_printf(agp_i810_sc->as_dev,
+		    "write gtt entry"
+		    " %"PRIxMAX" -> %"PRIxMAX" (flags=%x) failed: %d\n",
+		    (uintmax_t)va, (uintmax_t)addr, flags,
+		    error);
+	agp_i810_post_gtt_entry(isc, va);
+	intel_gtt_chipset_flush();
+}
+
+void
+intel_gtt_insert_sg_entries(bus_dmamap_t dmamap, unsigned va_page,
+    unsigned flags)
+{
+	struct agp_i810_softc *const isc = agp_i810_sc->as_chipc;
+	off_t va = (off_t)va_page << PAGE_SHIFT;
+	unsigned seg;
+	int gtt_flags = intel_gtt_flags(flags);
+	int error;
+
+	KASSERT(0 <= va);
+	KASSERT((va >> PAGE_SHIFT) == va_page);
+	KASSERT(0 < dmamap->dm_nsegs);
+
 	for (seg = 0; seg < dmamap->dm_nsegs; seg++) {
 		const bus_addr_t addr = dmamap->dm_segs[seg].ds_addr;
 		bus_size_t len;
@@ -175,14 +205,14 @@ intel_gtt_insert_sg_entries(bus_dmamap_t
 		for (len = dmamap->dm_segs[seg].ds_len;
 		     len >= PAGE_SIZE;
 		     len -= PAGE_SIZE, va += PAGE_SIZE) {
-			/* XXX Respect flags.  */
 			error = agp_i810_write_gtt_entry(isc, va, addr,
 			    gtt_flags);
 			if (error)
 				device_printf(agp_i810_sc->as_dev,
 				    "write gtt entry"
-				    " %"PRIxMAX" -> %"PRIxMAX" failed: %d\n",
-				    (uintmax_t)va, (uintmax_t)(addr | 1),
+				    " %"PRIxMAX" -> %"PRIxMAX" (flags=%x)"
+				    " failed: %d\n",
+				    (uintmax_t)va, (uintmax_t)addr, flags,
 				    error);
 		}
 		KASSERTMSG(len == 0,

Index: src/sys/external/bsd/drm2/include/drm/intel-gtt.h
diff -u src/sys/external/bsd/drm2/include/drm/intel-gtt.h:1.7 src/sys/external/bsd/drm2/include/drm/intel-gtt.h:1.8
--- src/sys/external/bsd/drm2/include/drm/intel-gtt.h:1.7	Mon Aug 27 16:15:09 2018
+++ src/sys/external/bsd/drm2/include/drm/intel-gtt.h	Sun Dec 19 01:35:10 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel-gtt.h,v 1.7 2018/08/27 16:15:09 riastradh Exp $	*/
+/*	$NetBSD: intel-gtt.h,v 1.8 2021/12/19 01:35:10 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,11 +35,12 @@
 #include <sys/types.h>
 #include <sys/bus.h>
 
+#include <linux/ioport.h>
+
 struct pci_dev;
 struct agp_bridge_data;
 
 void	intel_gtt_get(uint64_t * /* GPU VA size in bytes */,
-	    size_t * /* graphics stolen memory in bytes */,
 	    bus_addr_t * /* aperture base */,
 	    uint64_t * /* aperture size in bytes */);
 int	intel_gmch_probe(struct pci_dev *, struct pci_dev *,
@@ -47,12 +48,14 @@ int	intel_gmch_probe(struct pci_dev *, s
 void	intel_gmch_remove(void);
 bool	intel_enable_gtt(void);
 void	intel_gtt_chipset_flush(void);
+void	intel_gtt_insert_page(bus_addr_t, unsigned, unsigned);
 void	intel_gtt_insert_sg_entries(bus_dmamap_t, unsigned, unsigned);
 void	intel_gtt_clear_range(unsigned, unsigned);
 
 #define	AGP_USER_MEMORY		1
 #define	AGP_USER_CACHED_MEMORY	2
 
-extern int	intel_iommu_gfx_mapped;
+extern int		intel_iommu_gfx_mapped;
+extern struct resource	intel_graphics_stolen_res;
 
 #endif  /* _DRM_INTEL_GTT_H_ */

Reply via email to