Module Name: xsrc Committed By: mrg Date: Tue Aug 29 06:31:24 UTC 2017
Modified Files: xsrc/external/mit/libdrm/dist: xf86drm.c xf86drm.h xf86drmMode.c xsrc/external/mit/libdrm/dist/include/drm: drm.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 Removed Files: xsrc/external/mit/libdrm/dist/amdgpu: amdgpu_asic_id.h xsrc/external/mit/libdrm/dist/tests/amdgpu: uvd_messages.h Log Message: merge libdrm-2.4.83. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 xsrc/external/mit/libdrm/dist/xf86drm.c cvs rdiff -u -r1.7 -r1.8 xsrc/external/mit/libdrm/dist/xf86drm.h cvs rdiff -u -r1.11 -r1.12 xsrc/external/mit/libdrm/dist/xf86drmMode.c cvs rdiff -u -r1.1.1.1 -r0 \ xsrc/external/mit/libdrm/dist/amdgpu/amdgpu_asic_id.h cvs rdiff -u -r1.7 -r1.8 xsrc/external/mit/libdrm/dist/include/drm/drm.h cvs rdiff -u -r1.13 -r1.14 \ xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c cvs rdiff -u -r1.9 -r1.10 \ xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c cvs rdiff -u -r1.1.1.1 -r0 \ xsrc/external/mit/libdrm/dist/tests/amdgpu/uvd_messages.h cvs rdiff -u -r1.9 -r1.10 \ 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/xf86drm.c diff -u xsrc/external/mit/libdrm/dist/xf86drm.c:1.14 xsrc/external/mit/libdrm/dist/xf86drm.c:1.15 --- xsrc/external/mit/libdrm/dist/xf86drm.c:1.14 Sat Mar 4 23:22:48 2017 +++ xsrc/external/mit/libdrm/dist/xf86drm.c Tue Aug 29 06:31:24 2017 @@ -867,8 +867,6 @@ drmVersionPtr drmGetVersion(int fd) drmVersionPtr retval; drm_version_t *version = drmMalloc(sizeof(*version)); - memclear(*version); - if (drmIoctl(fd, DRM_IOCTL_VERSION, version)) { drmFreeKernelVersion(version); return NULL; @@ -995,8 +993,10 @@ char *drmGetBusid(int fd) if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u)) return NULL; u.unique = drmMalloc(u.unique_len + 1); - if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u)) + if (drmIoctl(fd, DRM_IOCTL_GET_UNIQUE, &u)) { + drmFree(u.unique); return NULL; + } u.unique[u.unique_len] = '\0'; return u.unique; @@ -1524,14 +1524,12 @@ drm_context_t *drmGetReservedContextList if (!(list = drmMalloc(res.count * sizeof(*list)))) return NULL; - if (!(retval = drmMalloc(res.count * sizeof(*retval)))) { - drmFree(list); - return NULL; - } + if (!(retval = drmMalloc(res.count * sizeof(*retval)))) + goto err_free_list; res.contexts = list; if (drmIoctl(fd, DRM_IOCTL_RES_CTX, &res)) - return NULL; + goto err_free_context; for (i = 0; i < res.count; i++) retval[i] = list[i].handle; @@ -1539,6 +1537,12 @@ drm_context_t *drmGetReservedContextList *count = res.count; return retval; + +err_free_list: + drmFree(list); +err_free_context: + drmFree(retval); + return NULL; } void drmFreeReservedContextList(drm_context_t *pt) @@ -3024,32 +3028,32 @@ static int drmParsePciBusInfo(int maj, i #endif } -static int drmCompareBusInfo(drmDevicePtr a, drmDevicePtr b) +int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b) { if (a == NULL || b == NULL) - return -1; + return 0; if (a->bustype != b->bustype) - return -1; + return 0; switch (a->bustype) { case DRM_BUS_PCI: - return memcmp(a->businfo.pci, b->businfo.pci, sizeof(drmPciBusInfo)); + return memcmp(a->businfo.pci, b->businfo.pci, sizeof(drmPciBusInfo)) == 0; case DRM_BUS_USB: - return memcmp(a->businfo.usb, b->businfo.usb, sizeof(drmUsbBusInfo)); + return memcmp(a->businfo.usb, b->businfo.usb, sizeof(drmUsbBusInfo)) == 0; case DRM_BUS_PLATFORM: - return memcmp(a->businfo.platform, b->businfo.platform, sizeof(drmPlatformBusInfo)); + return memcmp(a->businfo.platform, b->businfo.platform, sizeof(drmPlatformBusInfo)) == 0; case DRM_BUS_HOST1X: - return memcmp(a->businfo.host1x, b->businfo.host1x, sizeof(drmHost1xBusInfo)); + return memcmp(a->businfo.host1x, b->businfo.host1x, sizeof(drmHost1xBusInfo)) == 0; default: break; } - return -1; + return 0; } static int drmGetNodeType(const char *name) @@ -3664,7 +3668,7 @@ static void drmFoldDuplicatedDevices(drm for (i = 0; i < count; i++) { for (j = i + 1; j < count; j++) { - if (drmCompareBusInfo(local_devices[i], local_devices[j]) == 0) { + if (drmDevicesEqual(local_devices[i], local_devices[j])) { local_devices[i]->available_nodes |= local_devices[j]->available_nodes; node_type = log2(local_devices[j]->available_nodes); memcpy(local_devices[i]->nodes[node_type], @@ -3986,7 +3990,7 @@ int drmGetDevices2(uint32_t flags, drmDe ret = drmProcessUsbDevice(&device, node, node_type, maj, min, devices != NULL, flags); if (ret) - goto free_devices; + continue; break; @@ -3994,7 +3998,7 @@ int drmGetDevices2(uint32_t flags, drmDe ret = drmProcessPlatformDevice(&device, node, node_type, maj, min, devices != NULL, flags); if (ret) - goto free_devices; + continue; break; @@ -4002,7 +4006,7 @@ int drmGetDevices2(uint32_t flags, drmDe ret = drmProcessHost1xDevice(&device, node, node_type, maj, min, devices != NULL, flags); if (ret) - goto free_devices; + continue; break; @@ -4141,3 +4145,84 @@ char *drmGetDeviceNameFromFd2(int fd) return strdup(node); #endif } + +int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle) +{ + struct drm_syncobj_create args; + int ret; + + memclear(args); + args.flags = flags; + args.handle = 0; + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &args); + if (ret) + return ret; + *handle = args.handle; + return 0; +} + +int drmSyncobjDestroy(int fd, uint32_t handle) +{ + struct drm_syncobj_destroy args; + + memclear(args); + args.handle = handle; + return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &args); +} + +int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd) +{ + struct drm_syncobj_handle args; + int ret; + + memclear(args); + args.fd = -1; + args.handle = handle; + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); + if (ret) + return ret; + *obj_fd = args.fd; + return 0; +} + +int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle) +{ + struct drm_syncobj_handle args; + int ret; + + memclear(args); + args.fd = obj_fd; + args.handle = 0; + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); + if (ret) + return ret; + *handle = args.handle; + return 0; +} + +int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd) +{ + struct drm_syncobj_handle args; + + memclear(args); + args.fd = sync_file_fd; + args.handle = handle; + args.flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE; + return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); +} + +int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd) +{ + struct drm_syncobj_handle args; + int ret; + + memclear(args); + args.fd = -1; + args.handle = handle; + args.flags = DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE; + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); + if (ret) + return ret; + *sync_file_fd = args.fd; + return 0; +} Index: xsrc/external/mit/libdrm/dist/xf86drm.h diff -u xsrc/external/mit/libdrm/dist/xf86drm.h:1.7 xsrc/external/mit/libdrm/dist/xf86drm.h:1.8 --- xsrc/external/mit/libdrm/dist/xf86drm.h:1.7 Sat Mar 4 23:22:48 2017 +++ xsrc/external/mit/libdrm/dist/xf86drm.h Tue Aug 29 06:31:24 2017 @@ -737,7 +737,7 @@ extern void drmMsg(const char *format, . extern int drmSetMaster(int fd); extern int drmDropMaster(int fd); -#define DRM_EVENT_CONTEXT_VERSION 2 +#define DRM_EVENT_CONTEXT_VERSION 3 typedef struct _drmEventContext { @@ -757,6 +757,13 @@ typedef struct _drmEventContext { unsigned int tv_usec, void *user_data); + void (*page_flip_handler2)(int fd, + unsigned int sequence, + unsigned int tv_sec, + unsigned int tv_usec, + unsigned int crtc_id, + void *user_data); + } drmEventContext, *drmEventContextPtr; extern int drmHandleEvent(int fd, drmEventContextPtr evctx); @@ -853,6 +860,16 @@ extern void drmFreeDevices(drmDevicePtr extern int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device); extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices); +extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); + +extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); +extern int drmSyncobjDestroy(int fd, uint32_t handle); +extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); +extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); + +extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); +extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); + #if defined(__cplusplus) } #endif Index: xsrc/external/mit/libdrm/dist/xf86drmMode.c diff -u xsrc/external/mit/libdrm/dist/xf86drmMode.c:1.11 xsrc/external/mit/libdrm/dist/xf86drmMode.c:1.12 --- xsrc/external/mit/libdrm/dist/xf86drmMode.c:1.11 Sat Mar 4 23:22:48 2017 +++ xsrc/external/mit/libdrm/dist/xf86drmMode.c Tue Aug 29 06:31:24 2017 @@ -902,6 +902,7 @@ int drmHandleEvent(int fd, drmEventConte int len, i; struct drm_event *e; struct drm_event_vblank *vblank; + void *user_data; /* The DRM read semantics guarantees that we always get only * complete events. */ @@ -928,15 +929,22 @@ int drmHandleEvent(int fd, drmEventConte U642VOID (vblank->user_data)); break; case DRM_EVENT_FLIP_COMPLETE: - if (evctx->version < 2 || - evctx->page_flip_handler == NULL) - break; vblank = (struct drm_event_vblank *) e; - evctx->page_flip_handler(fd, - vblank->sequence, - vblank->tv_sec, - vblank->tv_usec, - U642VOID (vblank->user_data)); + user_data = U642VOID (vblank->user_data); + + if (evctx->version >= 3 && evctx->page_flip_handler2) + evctx->page_flip_handler2(fd, + vblank->sequence, + vblank->tv_sec, + vblank->tv_usec, + vblank->crtc_id, + user_data); + else if (evctx->version >= 2 && evctx->page_flip_handler) + evctx->page_flip_handler(fd, + vblank->sequence, + vblank->tv_sec, + vblank->tv_usec, + user_data); break; default: break; Index: xsrc/external/mit/libdrm/dist/include/drm/drm.h diff -u xsrc/external/mit/libdrm/dist/include/drm/drm.h:1.7 xsrc/external/mit/libdrm/dist/include/drm/drm.h:1.8 --- xsrc/external/mit/libdrm/dist/include/drm/drm.h:1.7 Sat Mar 4 23:22:48 2017 +++ xsrc/external/mit/libdrm/dist/include/drm/drm.h Tue Aug 29 06:31:24 2017 @@ -641,6 +641,8 @@ struct drm_gem_open { #define DRM_CAP_CURSOR_HEIGHT 0x9 #define DRM_CAP_ADDFB2_MODIFIERS 0x10 #define DRM_CAP_PAGE_FLIP_TARGET 0x11 +#define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 +#define DRM_CAP_SYNCOBJ 0x13 /** DRM_IOCTL_GET_CAP ioctl argument type */ struct drm_get_cap { @@ -690,6 +692,26 @@ struct drm_prime_handle { __s32 fd; }; +struct drm_syncobj_create { + __u32 handle; + __u32 flags; +}; + +struct drm_syncobj_destroy { + __u32 handle; + __u32 pad; +}; + +#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) +#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) +struct drm_syncobj_handle { + __u32 handle; + __u32 flags; + + __s32 fd; + __u32 pad; +}; + #if defined(__cplusplus) } #endif @@ -808,6 +830,11 @@ extern "C" { #define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) #define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) +#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) +#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) +#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) +#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) + /** * Device specific ioctls should only be in their respective headers * The device specific ioctl range is from 0x40 to 0x9f. @@ -845,7 +872,7 @@ struct drm_event_vblank { __u32 tv_sec; __u32 tv_usec; __u32 sequence; - __u32 reserved; + __u32 crtc_id; /* 0 on older kernels that do not support this */ }; /* typedef area */ Index: xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c diff -u xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.13 xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.14 --- xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.13 Sat Mar 4 23:22:48 2017 +++ xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c Tue Aug 29 06:31:24 2017 @@ -271,20 +271,6 @@ struct _drm_intel_bo_gem { bool is_userptr; /** - * Boolean of whether this buffer can be placed in the full 48-bit - * address range on gen8+. - * - * By default, buffers will be keep in a 32-bit range, unless this - * flag is explicitly set. - */ - bool use_48b_address_range; - - /** - * Whether this buffer is softpinned at offset specified by the user - */ - bool is_softpin; - - /** * Size in bytes of this buffer and its relocation descendents. * * Used to avoid costly tree walking in @@ -439,7 +425,7 @@ drm_intel_gem_dump_validation_list(drm_i if (bo_gem->relocs == NULL && bo_gem->softpin_target == NULL) { DBG("%2d: %d %s(%s)\n", i, bo_gem->gem_handle, - bo_gem->is_softpin ? "*" : "", + bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "", bo_gem->name); continue; } @@ -453,7 +439,7 @@ drm_intel_gem_dump_validation_list(drm_i "%d (%s)@0x%08x %08x + 0x%08x\n", i, bo_gem->gem_handle, - bo_gem->is_softpin ? "*" : "", + bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "", bo_gem->name, upper_32_bits(bo_gem->relocs[j].offset), lower_32_bits(bo_gem->relocs[j].offset), @@ -472,7 +458,7 @@ drm_intel_gem_dump_validation_list(drm_i "%d *(%s)@0x%08x %08x\n", i, bo_gem->gem_handle, - bo_gem->is_softpin ? "*" : "", + bo_gem->kflags & EXEC_OBJECT_PINNED ? "*" : "", bo_gem->name, target_gem->gem_handle, target_gem->name, @@ -542,14 +528,11 @@ drm_intel_add_validate_buffer2(drm_intel drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bo->bufmgr; drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *)bo; int index; - int flags = 0; + unsigned long flags; + flags = 0; if (need_fence) flags |= EXEC_OBJECT_NEEDS_FENCE; - if (bo_gem->use_48b_address_range) - flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS; - if (bo_gem->is_softpin) - flags |= EXEC_OBJECT_PINNED; if (bo_gem->validate_index != -1) { bufmgr_gem->exec2_objects[bo_gem->validate_index].flags |= flags; @@ -580,7 +563,7 @@ drm_intel_add_validate_buffer2(drm_intel bufmgr_gem->exec2_objects[index].relocs_ptr = (uintptr_t)bo_gem->relocs; bufmgr_gem->exec2_objects[index].alignment = bo->align; bufmgr_gem->exec2_objects[index].offset = bo->offset64; - bufmgr_gem->exec2_objects[index].flags = flags | bo_gem->kflags; + bufmgr_gem->exec2_objects[index].flags = bo_gem->kflags | flags; bufmgr_gem->exec2_objects[index].rsvd1 = 0; bufmgr_gem->exec2_objects[index].rsvd2 = 0; bufmgr_gem->exec_bos[index] = bo; @@ -677,7 +660,6 @@ drm_intel_gem_bo_busy(drm_intel_bo *bo) } else { return false; } - return (ret == 0 && busy.busy); } static int @@ -833,6 +815,10 @@ retry: } bo_gem->gem_handle = create.handle; + HASH_ADD(handle_hh, bufmgr_gem->handle_table, + gem_handle, sizeof(bo_gem->gem_handle), + bo_gem); + bo_gem->bo.handle = bo_gem->gem_handle; bo_gem->bo.bufmgr = bufmgr; bo_gem->bo.align = alignment; @@ -845,10 +831,6 @@ retry: tiling_mode, stride)) goto err_free; - - HASH_ADD(handle_hh, bufmgr_gem->handle_table, - gem_handle, sizeof(bo_gem->gem_handle), - bo_gem); } bo_gem->name = name; @@ -858,7 +840,6 @@ retry: bo_gem->used_as_reloc_target = false; bo_gem->has_error = false; bo_gem->reusable = true; - bo_gem->use_48b_address_range = false; drm_intel_bo_gem_set_in_aperture_size(bufmgr_gem, bo_gem, alignment); pthread_mutex_unlock(&bufmgr_gem->lock); @@ -1017,7 +998,6 @@ drm_intel_gem_bo_alloc_userptr(drm_intel bo_gem->used_as_reloc_target = false; bo_gem->has_error = false; bo_gem->reusable = false; - bo_gem->use_48b_address_range = false; drm_intel_bo_gem_set_in_aperture_size(bufmgr_gem, bo_gem, 0); pthread_mutex_unlock(&bufmgr_gem->lock); @@ -1165,7 +1145,6 @@ drm_intel_bo_gem_create_from_name(drm_in bo_gem->bo.handle = open_arg.handle; bo_gem->global_name = handle; bo_gem->reusable = false; - bo_gem->use_48b_address_range = false; HASH_ADD(handle_hh, bufmgr_gem->handle_table, gem_handle, sizeof(bo_gem->gem_handle), bo_gem); @@ -1412,8 +1391,6 @@ drm_intel_gem_bo_unreference_final(drm_i bo_gem->name = NULL; bo_gem->validate_index = -1; - bo_gem->kflags = 0; - DRMLISTADDTAIL(&bo_gem->head, &bucket->head); } else { drm_intel_gem_bo_free(bo); @@ -2053,7 +2030,11 @@ static void drm_intel_gem_bo_use_48b_address_range(drm_intel_bo *bo, uint32_t enable) { drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; - bo_gem->use_48b_address_range = enable; + + if (enable) + bo_gem->kflags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS; + else + bo_gem->kflags &= ~EXEC_OBJECT_SUPPORTS_48B_ADDRESS; } static int @@ -2070,7 +2051,7 @@ drm_intel_gem_bo_add_softpin_target(drm_ return -ENOMEM; } - if (!target_bo_gem->is_softpin) + if (!(target_bo_gem->kflags & EXEC_OBJECT_PINNED)) return -EINVAL; if (target_bo_gem == bo_gem) return -EINVAL; @@ -2102,7 +2083,7 @@ drm_intel_gem_bo_emit_reloc(drm_intel_bo drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bo->bufmgr; drm_intel_bo_gem *target_bo_gem = (drm_intel_bo_gem *)target_bo; - if (target_bo_gem->is_softpin) + if (target_bo_gem->kflags & EXEC_OBJECT_PINNED) return drm_intel_gem_bo_add_softpin_target(bo, target_bo); else return do_bo_emit_reloc(bo, offset, target_bo, target_offset, @@ -2286,7 +2267,7 @@ drm_intel_update_buffer_offsets2 (drm_in /* If we're seeing softpinned object here it means that the kernel * has relocated our object... Indicating a programming error */ - assert(!bo_gem->is_softpin); + assert(!(bo_gem->kflags & EXEC_OBJECT_PINNED)); DBG("BO %d (%s) migrated: 0x%08x %08x -> 0x%08x %08x\n", bo_gem->gem_handle, bo_gem->name, upper_32_bits(bo->offset64), @@ -2642,9 +2623,10 @@ drm_intel_gem_bo_set_softpin_offset(drm_ { drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; - bo_gem->is_softpin = true; bo->offset64 = offset; bo->offset = offset; + bo_gem->kflags |= EXEC_OBJECT_PINNED; + return 0; } @@ -2708,7 +2690,6 @@ drm_intel_bo_gem_create_from_prime(drm_i bo_gem->used_as_reloc_target = false; bo_gem->has_error = false; bo_gem->reusable = false; - bo_gem->use_48b_address_range = false; memclear(get_tiling); get_tiling.handle = bo_gem->gem_handle; @@ -3680,6 +3661,8 @@ drm_intel_bufmgr_gem_init(int fd, int ba bufmgr_gem->gen = 8; else if (IS_GEN9(bufmgr_gem->pci_device)) bufmgr_gem->gen = 9; + else if (IS_GEN10(bufmgr_gem->pci_device)) + bufmgr_gem->gen = 10; 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.9 xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c:1.10 --- xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c:1.9 Sat Mar 4 23:22:48 2017 +++ xsrc/external/mit/libdrm/dist/radeon/radeon_surface.c Tue Aug 29 06:31:24 2017 @@ -2503,6 +2503,7 @@ static int radeon_surface_sanity(struct if (surf->npix_y > 1) { return -EINVAL; } + /* fallthrough */ case RADEON_SURF_TYPE_2D: if (surf->npix_z > 1) { return -EINVAL; Index: xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c diff -u xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.9 xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.10 --- xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.9 Sat Mar 4 23:22:48 2017 +++ xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c Tue Aug 29 06:31:24 2017 @@ -174,6 +174,15 @@ static const char *mode_flag_names[] = { static bit_name_fn(mode_flag) +static void dump_fourcc(uint32_t fourcc) +{ + printf(" %c%c%c%c", + fourcc, + fourcc >> 8, + fourcc >> 16, + fourcc >> 24); +} + static void dump_encoders(struct device *dev) { drmModeEncoder *encoder; @@ -443,7 +452,7 @@ static void dump_planes(struct device *d printf(" formats:"); for (j = 0; j < ovr->count_formats; j++) - printf(" %4.4s", (char *)&ovr->formats[j]); + dump_fourcc(ovr->formats[j]); printf("\n"); if (plane->props) {