Module Name: xsrc
Committed By: snj
Date: Fri Jan 23 08:25:08 UTC 2015
Modified Files:
xsrc/external/mit/libdrm/dist: xf86drmMode.h
xsrc/external/mit/libdrm/dist/intel: intel_bufmgr_gem.c
xsrc/external/mit/libdrm/dist/radeon: radeon_surface.c
xsrc/external/mit/libdrm/dist/tests/modetest: modetest.c
Log Message:
merge libdrm-2.4.59
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/libdrm/dist/xf86drmMode.h
cvs rdiff -u -r1.9 -r1.10 \
xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c
cvs rdiff -u -r1.5 -r1.6 \
xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c
cvs rdiff -u -r1.5 -r1.6 \
xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/libdrm/dist/xf86drmMode.h
diff -u xsrc/external/mit/libdrm/dist/xf86drmMode.h:1.3 xsrc/external/mit/libdrm/dist/xf86drmMode.h:1.4
--- xsrc/external/mit/libdrm/dist/xf86drmMode.h:1.3 Sat Dec 13 21:39:07 2014
+++ xsrc/external/mit/libdrm/dist/xf86drmMode.h Fri Jan 23 08:25:08 2015
@@ -240,6 +240,15 @@ typedef struct _drmModeProperty {
uint32_t *blob_ids; /* store the blob IDs */
} drmModePropertyRes, *drmModePropertyPtr;
+static inline int drm_property_type_is(drmModePropertyPtr property,
+ uint32_t type)
+{
+ /* instanceof for props.. handles extended type vs original types: */
+ if (property->flags & DRM_MODE_PROP_EXTENDED_TYPE)
+ return (property->flags & DRM_MODE_PROP_EXTENDED_TYPE) == type;
+ return property->flags & type;
+}
+
typedef struct _drmModeCrtc {
uint32_t crtc_id;
uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
Index: xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c
diff -u xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.9 xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.10
--- xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.9 Sat Dec 13 21:39:07 2014
+++ xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c Fri Jan 23 08:25:08 2015
@@ -760,15 +760,16 @@ retry:
bo_gem->swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
bo_gem->stride = 0;
+ /* drm_intel_gem_bo_free calls DRMLISTDEL() for an uninitialized
+ list (vma_list), so better set the list head here */
+ DRMINITLISTHEAD(&bo_gem->name_list);
+ DRMINITLISTHEAD(&bo_gem->vma_list);
if (drm_intel_gem_bo_set_tiling_internal(&bo_gem->bo,
tiling_mode,
stride)) {
drm_intel_gem_bo_free(&bo_gem->bo);
return NULL;
}
-
- DRMINITLISTHEAD(&bo_gem->name_list);
- DRMINITLISTHEAD(&bo_gem->vma_list);
}
bo_gem->name = name;
@@ -1810,6 +1811,14 @@ do_bo_emit_reloc(drm_intel_bo *bo, uint3
assert(offset <= bo->size - 4);
assert((write_domain & (write_domain - 1)) == 0);
+ /* An object needing a fence is a tiled buffer, so it won't have
+ * relocs to other buffers.
+ */
+ if (need_fence) {
+ assert(target_bo_gem->reloc_count == 0);
+ target_bo_gem->reloc_tree_fences = 1;
+ }
+
/* Make sure that we're not adding a reloc to something whose size has
* already been accounted for.
*/
@@ -1817,13 +1826,8 @@ do_bo_emit_reloc(drm_intel_bo *bo, uint3
if (target_bo_gem != bo_gem) {
target_bo_gem->used_as_reloc_target = true;
bo_gem->reloc_tree_size += target_bo_gem->reloc_tree_size;
+ bo_gem->reloc_tree_fences += target_bo_gem->reloc_tree_fences;
}
- /* An object needing a fence is a tiled buffer, so it won't have
- * relocs to other buffers.
- */
- if (need_fence)
- target_bo_gem->reloc_tree_fences = 1;
- bo_gem->reloc_tree_fences += target_bo_gem->reloc_tree_fences;
bo_gem->relocs[bo_gem->reloc_count].offset = offset;
bo_gem->relocs[bo_gem->reloc_count].delta = target_offset;
@@ -3177,7 +3181,8 @@ drm_intel_bufmgr_gem_set_aub_dump(drm_in
/* Set up the GTT. The max we can handle is 256M */
aub_out(bufmgr_gem, CMD_AUB_TRACE_HEADER_BLOCK | ((bufmgr_gem->gen >= 8 ? 6 : 5) - 2));
- aub_out(bufmgr_gem, AUB_TRACE_MEMTYPE_NONLOCAL | 0 | AUB_TRACE_OP_DATA_WRITE);
+ /* Need to use GTT_ENTRY type for recent emulator */
+ aub_out(bufmgr_gem, AUB_TRACE_MEMTYPE_GTT_ENTRY | 0 | AUB_TRACE_OP_DATA_WRITE);
aub_out(bufmgr_gem, 0); /* subtype */
aub_out(bufmgr_gem, 0); /* offset */
aub_out(bufmgr_gem, gtt_size); /* size */
@@ -3479,6 +3484,8 @@ drm_intel_bufmgr_gem_init(int fd, int ba
bufmgr_gem->gen = 7;
else if (IS_GEN8(bufmgr_gem->pci_device))
bufmgr_gem->gen = 8;
+ else if (IS_GEN9(bufmgr_gem->pci_device))
+ bufmgr_gem->gen = 9;
else {
free(bufmgr_gem);
bufmgr_gem = NULL;
Index: xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c
diff -u xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c:1.5 xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c:1.6
--- xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c:1.5 Sat Dec 13 21:39:07 2014
+++ xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c Fri Jan 23 08:25:08 2015
@@ -366,6 +366,8 @@ static int r6_surface_init_2d(struct rad
xalign = (surf_man->hw_info.group_bytes * surf_man->hw_info.num_banks) /
(tilew * surf->bpe * surf->nsamples);
xalign = MAX2(tilew * surf_man->hw_info.num_banks, xalign);
+ if (surf->flags & RADEON_SURF_FMASK)
+ xalign = MAX2(128, xalign);
yalign = tilew * surf_man->hw_info.num_pipes;
if (surf->flags & RADEON_SURF_SCANOUT) {
xalign = MAX2((surf->bpe == 1) ? 64 : 32, xalign);
@@ -595,7 +597,7 @@ static void eg_surf_minify(struct radeon
mtile_ps = (mtile_pr * surflevel->nblk_y) / mtileh;
surflevel->offset = offset;
- surflevel->pitch_bytes = surflevel->nblk_x * bpe * slice_pt;
+ surflevel->pitch_bytes = surflevel->nblk_x * bpe * surf->nsamples;
surflevel->slice_size = mtile_ps * mtileb * slice_pt;
surf->bo_size = offset + surflevel->slice_size * surflevel->nblk_z * surf->array_size;
@@ -1498,7 +1500,7 @@ static void si_surf_minify_2d(struct rad
/* macro tile per slice */
mtile_ps = (mtile_pr * surflevel->nblk_y) / yalign;
surflevel->offset = offset;
- surflevel->pitch_bytes = surflevel->nblk_x * bpe * slice_pt;
+ surflevel->pitch_bytes = surflevel->nblk_x * bpe * surf->nsamples;
surflevel->slice_size = mtile_ps * mtileb * slice_pt;
surf->bo_size = offset + surflevel->slice_size * surflevel->nblk_z * surf->array_size;
Index: xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c
diff -u xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.5 xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.6
--- xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.5 Sat Dec 13 21:39:07 2014
+++ xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c Fri Jan 23 08:25:08 2015
@@ -57,7 +57,6 @@
#include "xf86drm.h"
#include "xf86drmMode.h"
#include "drm_fourcc.h"
-#include "libkms.h"
#include "buffers.h"
#include "cursor.h"
@@ -104,18 +103,21 @@ struct device {
int fd;
struct resources *resources;
- struct kms_driver *kms;
struct {
unsigned int width;
unsigned int height;
unsigned int fb_id;
- struct kms_bo *bo;
+ struct bo *bo;
} mode;
};
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
+static inline int64_t U642I64(uint64_t val)
+{
+ return (int64_t)*((int64_t *)&val);
+}
struct type_name {
int type;
@@ -264,8 +266,10 @@ static void dump_blob(struct device *dev
drmModePropertyBlobPtr blob;
blob = drmModeGetPropertyBlob(dev->fd, blob_id);
- if (!blob)
+ if (!blob) {
+ printf("\n");
return;
+ }
blob_data = blob->data;
@@ -294,32 +298,43 @@ static void dump_prop(struct device *dev
printf("\t\tflags:");
if (prop->flags & DRM_MODE_PROP_PENDING)
printf(" pending");
- if (prop->flags & DRM_MODE_PROP_RANGE)
- printf(" range");
if (prop->flags & DRM_MODE_PROP_IMMUTABLE)
printf(" immutable");
- if (prop->flags & DRM_MODE_PROP_ENUM)
+ if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE))
+ printf(" signed range");
+ if (drm_property_type_is(prop, DRM_MODE_PROP_RANGE))
+ printf(" range");
+ if (drm_property_type_is(prop, DRM_MODE_PROP_ENUM))
printf(" enum");
- if (prop->flags & DRM_MODE_PROP_BITMASK)
+ if (drm_property_type_is(prop, DRM_MODE_PROP_BITMASK))
printf(" bitmask");
- if (prop->flags & DRM_MODE_PROP_BLOB)
+ if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB))
printf(" blob");
+ if (drm_property_type_is(prop, DRM_MODE_PROP_OBJECT))
+ printf(" object");
printf("\n");
- if (prop->flags & DRM_MODE_PROP_RANGE) {
+ if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE)) {
+ printf("\t\tvalues:");
+ for (i = 0; i < prop->count_values; i++)
+ printf(" %"PRId64, U642I64(prop->values[i]));
+ printf("\n");
+ }
+
+ if (drm_property_type_is(prop, DRM_MODE_PROP_RANGE)) {
printf("\t\tvalues:");
for (i = 0; i < prop->count_values; i++)
printf(" %"PRIu64, prop->values[i]);
printf("\n");
}
- if (prop->flags & DRM_MODE_PROP_ENUM) {
+ if (drm_property_type_is(prop, DRM_MODE_PROP_ENUM)) {
printf("\t\tenums:");
for (i = 0; i < prop->count_enums; i++)
printf(" %s=%llu", prop->enums[i].name,
prop->enums[i].value);
printf("\n");
- } else if (prop->flags & DRM_MODE_PROP_BITMASK) {
+ } else if (drm_property_type_is(prop, DRM_MODE_PROP_BITMASK)) {
printf("\t\tvalues:");
for (i = 0; i < prop->count_enums; i++)
printf(" %s=0x%llx", prop->enums[i].name,
@@ -329,7 +344,7 @@ static void dump_prop(struct device *dev
assert(prop->count_enums == 0);
}
- if (prop->flags & DRM_MODE_PROP_BLOB) {
+ if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB)) {
printf("\t\tblobs:\n");
for (i = 0; i < prop->count_blobs; i++)
dump_blob(dev, prop->blob_ids[i]);
@@ -339,7 +354,7 @@ static void dump_prop(struct device *dev
}
printf("\t\tvalue:");
- if (prop->flags & DRM_MODE_PROP_BLOB)
+ if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB))
dump_blob(dev, value);
else
printf(" %"PRIu64"\n", value);
@@ -545,6 +560,8 @@ static struct resources *get_resources(s
memset(res, 0, sizeof *res);
+ drmSetClientCap(dev->fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
+
res->res = drmModeGetResources(dev->fd);
if (!res->res) {
fprintf(stderr, "drmModeGetResources failed: %s\n",
@@ -949,7 +966,7 @@ static int set_plane(struct device *dev,
drmModePlane *ovr;
uint32_t handles[4], pitches[4], offsets[4] = {0}; /* we only use [0] */
uint32_t plane_id = 0;
- struct kms_bo *plane_bo;
+ struct bo *plane_bo;
uint32_t plane_flags = 0;
int crtc_x, crtc_y, crtc_w, crtc_h;
struct crtc *crtc = NULL;
@@ -990,8 +1007,8 @@ static int set_plane(struct device *dev,
fprintf(stderr, "testing %dx%d@%s overlay plane %u\n",
p->w, p->h, p->format_str, plane_id);
- plane_bo = create_test_buffer(dev->kms, p->fourcc, p->w, p->h, handles,
- pitches, offsets, PATTERN_TILES);
+ plane_bo = bo_create(dev->fd, p->fourcc, p->w, p->h, handles,
+ pitches, offsets, PATTERN_TILES);
if (plane_bo == NULL)
return -1;
@@ -1031,7 +1048,7 @@ static void set_mode(struct device *dev,
{
uint32_t handles[4], pitches[4], offsets[4] = {0}; /* we only use [0] */
unsigned int fb_id;
- struct kms_bo *bo;
+ struct bo *bo;
unsigned int i;
unsigned int j;
int ret, x;
@@ -1051,9 +1068,8 @@ static void set_mode(struct device *dev,
dev->mode.height = pipe->mode->vdisplay;
}
- bo = create_test_buffer(dev->kms, pipes[0].fourcc,
- dev->mode.width, dev->mode.height,
- handles, pitches, offsets, PATTERN_SMPTE);
+ bo = bo_create(dev->fd, pipes[0].fourcc, dev->mode.width, dev->mode.height,
+ handles, pitches, offsets, PATTERN_SMPTE);
if (bo == NULL)
return;
@@ -1110,7 +1126,7 @@ static void set_planes(struct device *de
static void set_cursors(struct device *dev, struct pipe_arg *pipes, unsigned int count)
{
uint32_t handles[4], pitches[4], offsets[4] = {0}; /* we only use [0] */
- struct kms_bo *bo;
+ struct bo *bo;
unsigned int i;
int ret;
@@ -1121,8 +1137,8 @@ static void set_cursors(struct device *d
/* create cursor bo.. just using PATTERN_PLAIN as it has
* translucent alpha
*/
- bo = create_test_buffer(dev->kms, DRM_FORMAT_ARGB8888,
- cw, ch, handles, pitches, offsets, PATTERN_PLAIN);
+ bo = bo_create(dev->fd, DRM_FORMAT_ARGB8888, cw, ch, handles, pitches,
+ offsets, PATTERN_PLAIN);
if (bo == NULL)
return;
@@ -1151,14 +1167,14 @@ static void test_page_flip(struct device
{
uint32_t handles[4], pitches[4], offsets[4] = {0}; /* we only use [0] */
unsigned int other_fb_id;
- struct kms_bo *other_bo;
+ struct bo *other_bo;
drmEventContext evctx;
unsigned int i;
int ret;
- other_bo = create_test_buffer(dev->kms, pipes[0].fourcc,
- dev->mode.width, dev->mode.height,
- handles, pitches, offsets, PATTERN_PLAIN);
+ other_bo = bo_create(dev->fd, pipes[0].fourcc,
+ dev->mode.width, dev->mode.height,
+ handles, pitches, offsets, PATTERN_PLAIN);
if (other_bo == NULL)
return;
@@ -1233,7 +1249,7 @@ static void test_page_flip(struct device
drmHandleEvent(dev->fd, &evctx);
}
- kms_bo_destroy(&other_bo);
+ bo_destroy(other_bo);
}
#define min(a, b) ((a) < (b) ? (a) : (b))
@@ -1437,7 +1453,7 @@ int main(int argc, char **argv)
int drop_master = 0;
int test_vsync = 0;
int test_cursor = 0;
- const char *modules[] = { "i915", "radeon", "nouveau", "vmwgfx", "omapdrm", "exynos", "tilcdc", "msm", "sti" };
+ const char *modules[] = { "i915", "radeon", "nouveau", "vmwgfx", "omapdrm", "exynos", "tilcdc", "msm", "sti", "tegra" };
char *device = NULL;
char *module = NULL;
unsigned int i;
@@ -1592,10 +1608,11 @@ int main(int argc, char **argv)
set_property(&dev, &prop_args[i]);
if (count || plane_count) {
- ret = kms_create(dev.fd, &dev.kms);
- if (ret) {
- fprintf(stderr, "failed to create kms driver: %s\n",
- strerror(-ret));
+ uint64_t cap = 0;
+
+ ret = drmGetCap(dev.fd, DRM_CAP_DUMB_BUFFER, &cap);
+ if (ret || cap == 0) {
+ fprintf(stderr, "driver doesn't support the dumb buffer API\n");
return 1;
}
@@ -1619,8 +1636,7 @@ int main(int argc, char **argv)
if (test_cursor)
clear_cursors(&dev);
- kms_bo_destroy(&dev.mode.bo);
- kms_destroy(&dev.kms);
+ bo_destroy(dev.mode.bo);
}
free_resources(dev.resources);