Module Name:    src
Committed By:   riastradh
Date:           Thu Apr  3 19:18:29 UTC 2014

Modified Files:
        src/sys/external/bsd/drm2/dist/drm: drm_bufs.c
        src/sys/external/bsd/drm2/dist/include/drm: drmP.h
        src/sys/external/bsd/drm2/i915drm: i915_gem_gtt.c i915_pci.c
        src/sys/external/bsd/drm2/include/drm: bus_dma_hacks.h
        src/sys/external/bsd/drm2/include/linux: pci.h

Log Message:
Miscellaneous fixes for drm2 on i386.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/dist/drm/drm_bufs.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/include/drm/drmP.h
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/i915drm/i915_pci.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/include/drm/bus_dma_hacks.h
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/include/linux/pci.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/dist/drm/drm_bufs.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.3 src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.3	Thu Apr  3 05:48:02 2014
+++ src/sys/external/bsd/drm2/dist/drm/drm_bufs.c	Thu Apr  3 19:18:29 2014
@@ -177,6 +177,7 @@ static int drm_addmap_core(struct drm_de
 	switch (map->type) {
 	case _DRM_REGISTERS:
 	case _DRM_FRAME_BUFFER:
+#ifndef __NetBSD__		/* XXX No idea what this is for...  */
 #if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) && !defined(__powerpc64__) && !defined(__x86_64__) && !defined(__arm__)
 		if (map->offset + (map->size-1) < map->offset ||
 		    map->offset < virt_to_phys(high_memory)) {
@@ -184,6 +185,7 @@ static int drm_addmap_core(struct drm_de
 			return -EINVAL;
 		}
 #endif
+#endif
 		/* Some drivers preinitialize some maps, without the X Server
 		 * needing to be aware of it.  Therefore, we just return success
 		 * when the server tries to create a duplicate map.

Index: src/sys/external/bsd/drm2/dist/include/drm/drmP.h
diff -u src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.2 src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.3
--- src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.2	Tue Mar 18 18:20:42 2014
+++ src/sys/external/bsd/drm2/dist/include/drm/drmP.h	Thu Apr  3 19:18:29 2014
@@ -2110,11 +2110,26 @@ DRM_READ32(struct drm_local_map *map, bu
 static inline uint64_t
 DRM_READ64(struct drm_local_map *map, bus_size_t offset)
 {
-	if (DRM_IS_BUS_SPACE(map))
+	if (DRM_IS_BUS_SPACE(map)) {
+#if _LP64			/* XXX How to detect bus_space_read_8?  */
 		return bus_space_read_8(map->lm_data.bus_space.bst,
 		    map->lm_data.bus_space.bsh, offset);
-	else
+#elif _BYTE_ORDER == _LITTLE_ENDIAN
+		/* XXX Yes, this is sketchy.  */
+		return bus_space_read_4(map->lm_data.bus_space.bst,
+		    map->lm_data.bus_space.bsh, offset) |
+		    ((uint64_t)bus_space_read_4(map->lm_data.bus_space.bst,
+			map->lm_data.bus_space.bsh, (offset + 4)) << 32);
+#else
+		/* XXX Yes, this is sketchy.  */
+		return bus_space_read_4(map->lm_data.bus_space.bst,
+		    map->lm_data.bus_space.bsh, (offset + 4)) |
+		    ((uint64_t)bus_space_read_4(map->lm_data.bus_space.bst,
+			map->lm_data.bus_space.bsh, offset) << 32);
+#endif
+	} else {
 		return *(volatile uint64_t *)((vaddr_t)map->handle + offset);
+	}
 }
 
 static inline void
@@ -2150,11 +2165,25 @@ DRM_WRITE32(struct drm_local_map *map, b
 static inline void
 DRM_WRITE64(struct drm_local_map *map, bus_size_t offset, uint64_t value)
 {
-	if (DRM_IS_BUS_SPACE(map))
+	if (DRM_IS_BUS_SPACE(map)) {
+#if _LP64			/* XXX How to detect bus_space_write_8?  */
 		bus_space_write_8(map->lm_data.bus_space.bst,
 		    map->lm_data.bus_space.bsh, offset, value);
-	else
+#elif _BYTE_ORDER == _LITTLE_ENDIAN
+		bus_space_write_4(map->lm_data.bus_space.bst,
+		    map->lm_data.bus_space.bsh, offset, (value & 0xffffffffU));
+		bus_space_write_4(map->lm_data.bus_space.bst,
+		    map->lm_data.bus_space.bsh, (offset + 4), (value >> 32));
+#else
+		bus_space_write_4(map->lm_data.bus_space.bst,
+		    map->lm_data.bus_space.bsh, offset, (value >> 32));
+		bus_space_write_4(map->lm_data.bus_space.bst,
+		    map->lm_data.bus_space.bsh, (offset + 4),
+		    (value & 0xffffffffU));
+#endif
+	} else {
 		*(volatile uint64_t *)((vaddr_t)map->handle + offset) = value;
+	}
 }
 #endif	/* defined(__NetBSD__) */
 

Index: src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c
diff -u src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c:1.2 src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c:1.3
--- src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c:1.2	Tue Mar 18 18:20:42 2014
+++ src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c	Thu Apr  3 19:18:29 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_gtt.c,v 1.2 2014/03/18 18:20:42 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_gtt.c,v 1.3 2014/04/03 19:18:29 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_gtt.c,v 1.2 2014/03/18 18:20:42 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_gtt.c,v 1.3 2014/04/03 19:18:29 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -91,9 +91,11 @@ i915_gem_gtt_init(struct drm_device *dev
 	 * XXX pci_set_dma_mask?  pci_set_consistent_dma_mask?
 	 */
 	if (INTEL_INFO(dev)->gen < 4)
-		drm_limit_dma_space(dev, 0, 0x00000000ffffffffULL);
+		drm_limit_dma_space(dev, 0,
+		    MIN(__type_max(resource_size_t), 0x00000000ffffffffULL));
 	else
-		drm_limit_dma_space(dev, 0, 0x0000000fffffffffULL);
+		drm_limit_dma_space(dev, 0,
+		    MIN(__type_max(resource_size_t), 0x0000000fffffffffULL));
 
 	/* Success!  */
 	DRM_INFO("Memory usable by graphics device = %dM\n",
@@ -507,7 +509,15 @@ typedef uint32_t gtt_pte_t;
 static uint32_t
 gen6_pte_addr_encode(bus_addr_t addr)
 {
+	/*
+	 * XXX `#ifdef __x86_64__' is a horrible way to work around a
+	 * completely stupid GCC warning that encourages unsafe,
+	 * nonportable code and has no obvious way to be selectively
+	 * suppressed.
+	 */
+#if __x86_64__
 	KASSERT(addr <= __BITS(39, 0));
+#endif
 	return (addr | ((addr >> 28) & 0xff0));
 }
 
@@ -585,8 +595,8 @@ gen6_gtt_init(struct drm_device *dev)
 		sizeof(gtt_pte_t))) {
 		DRM_ERROR("BAR0 too small for GTT: 0x%"PRIxMAX" < 0x%"PRIxMAX
 		    "\n",
-		    dev->bus_maps[0].bm_size,
-		    (gtt->gtt_total_entries * sizeof(gtt_pte_t)));
+		    (uintmax_t)dev->bus_maps[0].bm_size,
+		    (uintmax_t)(gtt->gtt_total_entries * sizeof(gtt_pte_t)));
 		ret = -ENODEV;
 		goto fail0;
 	}

Index: src/sys/external/bsd/drm2/i915drm/i915_pci.c
diff -u src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.3 src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.4
--- src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.3	Thu Apr  3 14:45:44 2014
+++ src/sys/external/bsd/drm2/i915drm/i915_pci.c	Thu Apr  3 19:18:29 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_pci.c,v 1.3 2014/04/03 14:45:44 riastradh Exp $	*/
+/*	$NetBSD: i915_pci.c,v 1.4 2014/04/03 19:18:29 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.3 2014/04/03 14:45:44 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.4 2014/04/03 19:18:29 riastradh Exp $");
 
 #include <sys/types.h>
 #ifndef _MODULE
@@ -422,8 +422,9 @@ i915drm_fb_probe(struct drm_fb_helper *f
 	prop_dictionary_set_uint8(dict, "depth", sizes->surface_bpp);
 	prop_dictionary_set_uint16(dict, "linebytes", mode_cmd.pitches[0]);
 	prop_dictionary_set_uint32(dict, "address", 0); /* XXX >32-bit */
+	CTASSERT(sizeof(uintptr_t) <= sizeof(uint64_t));
 	prop_dictionary_set_uint64(dict, "virtual_address",
-	    (uint64_t)bus_space_vaddr(dev->bst, sc->sc_fb_bsh));
+	    (uint64_t)(uintptr_t)bus_space_vaddr(dev->bst, sc->sc_fb_bsh));
 	sc->sc_genfb.sc_dev = sc->sc_dev;
 	genfb_init(&sc->sc_genfb);
 

Index: src/sys/external/bsd/drm2/include/drm/bus_dma_hacks.h
diff -u src/sys/external/bsd/drm2/include/drm/bus_dma_hacks.h:1.2 src/sys/external/bsd/drm2/include/drm/bus_dma_hacks.h:1.3
--- src/sys/external/bsd/drm2/include/drm/bus_dma_hacks.h:1.2	Tue Mar 18 18:20:43 2014
+++ src/sys/external/bsd/drm2/include/drm/bus_dma_hacks.h	Thu Apr  3 19:18:29 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_dma_hacks.h,v 1.2 2014/03/18 18:20:43 riastradh Exp $	*/
+/*	$NetBSD: bus_dma_hacks.h,v 1.3 2014/04/03 19:18:29 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -52,7 +52,16 @@ bus_dmamem_wire_uvm_object(bus_dma_tag_t
 	unsigned int i;
 	int error;
 
+	/*
+	 * XXX `#ifdef __x86_64__' is a horrible way to work around a
+	 * completely stupid GCC warning that encourages unsafe,
+	 * nonportable code and has no obvious way to be selectively
+	 * suppressed.
+	 */
+#if __x86_64__
 	KASSERT(size <= __type_max(off_t));
+#endif
+
 	KASSERT(start <= (__type_max(off_t) - size));
 	KASSERT(alignment == PAGE_SIZE); /* XXX */
 	KASSERT(0 < nsegs);

Index: src/sys/external/bsd/drm2/include/linux/pci.h
diff -u src/sys/external/bsd/drm2/include/linux/pci.h:1.2 src/sys/external/bsd/drm2/include/linux/pci.h:1.3
--- src/sys/external/bsd/drm2/include/linux/pci.h:1.2	Tue Mar 18 18:20:43 2014
+++ src/sys/external/bsd/drm2/include/linux/pci.h	Thu Apr  3 19:18:29 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci.h,v 1.2 2014/03/18 18:20:43 riastradh Exp $	*/
+/*	$NetBSD: pci.h,v 1.3 2014/04/03 19:18:29 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -34,6 +34,7 @@
 
 #include <sys/types.h>
 #include <sys/bus.h>
+#include <sys/cdefs.h>
 #include <sys/kmem.h>
 #include <sys/systm.h>
 
@@ -251,7 +252,7 @@ pci_bus_alloc_resource(struct pci_bus *b
 	}
 
 	resource->r_bst = bst;
-	error = bus_space_alloc(bst, start, 0xffffffffffffffffULL /* XXX */,
+	error = bus_space_alloc(bst, start, __type_max(bus_addr_t),
 	    size, align, 0, 0, &resource->start, &resource->r_bsh);
 	if (error)
 		return error;

Reply via email to