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;