Module Name: xsrc Committed By: mrg Date: Tue Apr 27 03:02:37 UTC 2021
Modified Files: xsrc/external/mit/libdrm/dist: xf86drm.c xf86drm.h xf86drmMode.c xf86drmMode.h xsrc/external/mit/libdrm/dist/intel: intel_bufmgr_gem.c xsrc/external/mit/libdrm/dist/tests/modetest: modetest.c Removed Files: xsrc/external/mit/libdrm/dist/man: drm-kms.xml drm-memory.xml drm.xml drmAvailable.xml drmHandleEvent.xml drmModeGetResources.xml Log Message: merge libdrm 2.4.105. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 xsrc/external/mit/libdrm/dist/xf86drm.c cvs rdiff -u -r1.12 -r1.13 xsrc/external/mit/libdrm/dist/xf86drm.h cvs rdiff -u -r1.16 -r1.17 xsrc/external/mit/libdrm/dist/xf86drmMode.c cvs rdiff -u -r1.10 -r1.11 xsrc/external/mit/libdrm/dist/xf86drmMode.h cvs rdiff -u -r1.19 -r1.20 \ xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c cvs rdiff -u -r1.1.1.3 -r0 xsrc/external/mit/libdrm/dist/man/drm-kms.xml \ xsrc/external/mit/libdrm/dist/man/drm.xml cvs rdiff -u -r1.1.1.2 -r0 xsrc/external/mit/libdrm/dist/man/drm-memory.xml \ xsrc/external/mit/libdrm/dist/man/drmAvailable.xml \ xsrc/external/mit/libdrm/dist/man/drmHandleEvent.xml \ xsrc/external/mit/libdrm/dist/man/drmModeGetResources.xml cvs rdiff -u -r1.14 -r1.15 \ 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.27 xsrc/external/mit/libdrm/dist/xf86drm.c:1.28 --- xsrc/external/mit/libdrm/dist/xf86drm.c:1.27 Sun Nov 1 10:01:30 2020 +++ xsrc/external/mit/libdrm/dist/xf86drm.c Tue Apr 27 03:02:37 2021 @@ -128,6 +128,22 @@ static drmServerInfoPtr drm_server_info; static bool drmNodeIsDRM(int maj, int min); static char *drmGetMinorNameForFD(int fd, int type); +static unsigned log2_int(unsigned x) +{ + unsigned l; + + if (x < 2) { + return 0; + } + for (l = 2; ; l++) { + if ((unsigned)(1 << l) > x) { + return l - 1; + } + } + return 0; +} + + drm_public void drmSetServerInfo(drmServerInfoPtr info) { drm_server_info = info; @@ -700,7 +716,7 @@ static int drmOpenByName(const char *nam int retcode; sprintf(proc_name, "/proc/dri/%d/name", i); - if ((fd = open(proc_name, 0, 0)) >= 0) { + if ((fd = open(proc_name, O_RDONLY, 0)) >= 0) { retcode = read(fd, buf, sizeof(buf)-1); close(fd); if (retcode) { @@ -1339,7 +1355,12 @@ drm_public drmBufInfoPtr drmGetBufInfo(i retval = drmMalloc(sizeof(*retval)); retval->count = info.count; - retval->list = drmMalloc(info.count * sizeof(*retval->list)); + if (!(retval->list = drmMalloc(info.count * sizeof(*retval->list)))) { + drmFree(retval); + drmFree(info.list); + return NULL; + } + for (i = 0; i < info.count; i++) { retval->list[i].count = info.list[i].count; retval->list[i].size = info.list[i].size; @@ -2826,7 +2847,7 @@ static bool drmNodeIsDRM(int maj, int mi snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device/drm", maj, min); return stat(path, &sbuf) == 0; -#elif __FreeBSD__ +#elif defined(__FreeBSD__) char name[SPECNAMELEN]; if (!devname_r(makedev(maj, min), S_IFCHR, name, sizeof(name))) @@ -2939,7 +2960,7 @@ static char *drmGetMinorNameForFD(int fd closedir(sysdir); return NULL; -#elif __FreeBSD__ +#elif defined(__FreeBSD__) struct stat sbuf; char dname[SPECNAMELEN]; const char *mname; @@ -3384,7 +3405,7 @@ static int drmParsePciBusInfo(int maj, i info->func = pinfo.func; return 0; -#elif __FreeBSD__ +#elif defined(__FreeBSD__) return get_sysctl_pci_bus_info(maj, min, info); #else #warning "Missing implementation of drmParsePciBusInfo" @@ -3595,7 +3616,7 @@ out: device->subdevice_id = pinfo.subdevice_id; return 0; -#elif __FreeBSD__ +#elif defined(__FreeBSD__) drmPciBusInfo info; struct pci_conf_io pc; struct pci_match_conf patterns[1]; @@ -4172,7 +4193,7 @@ static void drmFoldDuplicatedDevices(drm for (j = i + 1; j < count; j++) { 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); + node_type = log2_int(local_devices[j]->available_nodes); memcpy(local_devices[i]->nodes[node_type], local_devices[j]->nodes[node_type], drmGetMaxNodeName()); drmFreeDevice(&local_devices[j]); @@ -4427,6 +4448,10 @@ drm_public int drmGetDevices2(uint32_t f } closedir(sysdir); + + if (devices != NULL) + return MIN2(device_count, max_devices); + return device_count; } @@ -4473,7 +4498,7 @@ drm_public char *drmGetDeviceNameFromFd2 free(value); return strdup(path); -#elif __FreeBSD__ +#elif defined(__FreeBSD__) return drmGetDeviceNameFromFd(fd); #else struct stat sbuf; Index: xsrc/external/mit/libdrm/dist/xf86drm.h diff -u xsrc/external/mit/libdrm/dist/xf86drm.h:1.12 xsrc/external/mit/libdrm/dist/xf86drm.h:1.13 --- xsrc/external/mit/libdrm/dist/xf86drm.h:1.12 Sun Nov 1 09:57:37 2020 +++ xsrc/external/mit/libdrm/dist/xf86drm.h Tue Apr 27 03:02:37 2021 @@ -822,6 +822,24 @@ extern char *drmGetDeviceNameFromFd(int extern char *drmGetDeviceNameFromFd2(int fd); extern int drmGetNodeTypeFromFd(int fd); +/* Convert between GEM handles and DMA-BUF file descriptors. + * + * Warning: since GEM handles are not reference-counted and are unique per + * DRM file description, the caller is expected to perform its own reference + * counting. drmPrimeFDToHandle is guaranteed to return the same handle for + * different FDs if they reference the same underlying buffer object. This + * could even be a buffer object originally created on the same DRM FD. + * + * When sharing a DRM FD with an API such as EGL or GBM, the caller must not + * use drmPrimeHandleToFD nor drmPrimeFDToHandle. A single user-space + * reference-counting implementation is necessary to avoid double-closing GEM + * handles. + * + * Two processes can't share the same DRM FD and both use it to create or + * import GEM handles, even when using a single user-space reference-counting + * implementation like GBM, because GBM doesn't share its state between + * processes. + */ extern int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd); extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle); Index: xsrc/external/mit/libdrm/dist/xf86drmMode.c diff -u xsrc/external/mit/libdrm/dist/xf86drmMode.c:1.16 xsrc/external/mit/libdrm/dist/xf86drmMode.c:1.17 --- xsrc/external/mit/libdrm/dist/xf86drmMode.c:1.16 Sun Nov 1 09:57:37 2020 +++ xsrc/external/mit/libdrm/dist/xf86drmMode.c Tue Apr 27 03:02:37 2021 @@ -33,11 +33,6 @@ * */ -/* - * TODO the types we are after are defined in different headers on different - * platforms find which headers to include to get uint32_t - */ - #include <limits.h> #include <stdint.h> #include <stdlib.h> @@ -151,6 +146,16 @@ drm_public void drmModeFreeEncoder(drmMo * ModeSetting functions. */ +drm_public int drmIsKMS(int fd) +{ + struct drm_mode_card_res res = {0}; + + if (drmIoctl(fd, DRM_IOCTL_MODE_GETRESOURCES, &res) != 0) + return 0; + + return res.count_crtcs > 0 && res.count_connectors > 0 && res.count_encoders > 0; +} + drm_public drmModeResPtr drmModeGetResources(int fd) { struct drm_mode_card_res res, counts; @@ -284,8 +289,10 @@ drm_public int drmModeAddFB2WithModifier memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0])); memcpy(f.pitches, pitches, 4 * sizeof(pitches[0])); memcpy(f.offsets, offsets, 4 * sizeof(offsets[0])); - if (modifier) + if (modifier) { + f.flags |= DRM_MODE_FB_MODIFIERS; memcpy(f.modifier, modifier, 4 * sizeof(modifier[0])); + } if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB2, &f))) return ret; Index: xsrc/external/mit/libdrm/dist/xf86drmMode.h diff -u xsrc/external/mit/libdrm/dist/xf86drmMode.h:1.10 xsrc/external/mit/libdrm/dist/xf86drmMode.h:1.11 --- xsrc/external/mit/libdrm/dist/xf86drmMode.h:1.10 Sun Nov 1 09:57:37 2020 +++ xsrc/external/mit/libdrm/dist/xf86drmMode.h Tue Apr 27 03:02:37 2021 @@ -41,15 +41,13 @@ extern "C" { #endif #include <drm.h> +#include <drm_mode.h> #include <stddef.h> #include <stdint.h> /* * This is the interface for modesetting for drm. * - * In order to use this interface you must include either <stdint.h> or another - * header defining uint32_t, int32_t and uint16_t. - * * It aims to provide a randr1.2 compatible interface for modesettings in the * kernel, the interface is also meant to be used by libraries like EGL. * @@ -62,121 +60,6 @@ extern "C" { */ /* - * If we pickup an old version of drm.h which doesn't include drm_mode.h - * we should redefine defines. This is so that builds doesn't breaks with - * new libdrm on old kernels. - */ -#ifndef _DRM_MODE_H - -#define DRM_DISPLAY_INFO_LEN 32 -#define DRM_CONNECTOR_NAME_LEN 32 -#define DRM_DISPLAY_MODE_LEN 32 -#define DRM_PROP_NAME_LEN 32 - -#define DRM_MODE_TYPE_BUILTIN (1<<0) -#define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN) -#define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN) -#define DRM_MODE_TYPE_PREFERRED (1<<3) -#define DRM_MODE_TYPE_DEFAULT (1<<4) -#define DRM_MODE_TYPE_USERDEF (1<<5) -#define DRM_MODE_TYPE_DRIVER (1<<6) - -/* Video mode flags */ -/* bit compatible with the xorg definitions. */ -#define DRM_MODE_FLAG_PHSYNC (1<<0) -#define DRM_MODE_FLAG_NHSYNC (1<<1) -#define DRM_MODE_FLAG_PVSYNC (1<<2) -#define DRM_MODE_FLAG_NVSYNC (1<<3) -#define DRM_MODE_FLAG_INTERLACE (1<<4) -#define DRM_MODE_FLAG_DBLSCAN (1<<5) -#define DRM_MODE_FLAG_CSYNC (1<<6) -#define DRM_MODE_FLAG_PCSYNC (1<<7) -#define DRM_MODE_FLAG_NCSYNC (1<<8) -#define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */ -#define DRM_MODE_FLAG_BCAST (1<<10) -#define DRM_MODE_FLAG_PIXMUX (1<<11) -#define DRM_MODE_FLAG_DBLCLK (1<<12) -#define DRM_MODE_FLAG_CLKDIV2 (1<<13) -#define DRM_MODE_FLAG_3D_MASK (0x1f<<14) -#define DRM_MODE_FLAG_3D_NONE (0<<14) -#define DRM_MODE_FLAG_3D_FRAME_PACKING (1<<14) -#define DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE (2<<14) -#define DRM_MODE_FLAG_3D_LINE_ALTERNATIVE (3<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL (4<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH (5<<14) -#define DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14) -#define DRM_MODE_FLAG_3D_TOP_AND_BOTTOM (7<<14) -#define DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF (8<<14) - -/* DPMS flags */ -/* bit compatible with the xorg definitions. */ -#define DRM_MODE_DPMS_ON 0 -#define DRM_MODE_DPMS_STANDBY 1 -#define DRM_MODE_DPMS_SUSPEND 2 -#define DRM_MODE_DPMS_OFF 3 - -/* Scaling mode options */ -#define DRM_MODE_SCALE_NON_GPU 0 -#define DRM_MODE_SCALE_FULLSCREEN 1 -#define DRM_MODE_SCALE_NO_SCALE 2 -#define DRM_MODE_SCALE_ASPECT 3 - -/* Dithering mode options */ -#define DRM_MODE_DITHERING_OFF 0 -#define DRM_MODE_DITHERING_ON 1 - -#define DRM_MODE_ENCODER_NONE 0 -#define DRM_MODE_ENCODER_DAC 1 -#define DRM_MODE_ENCODER_TMDS 2 -#define DRM_MODE_ENCODER_LVDS 3 -#define DRM_MODE_ENCODER_TVDAC 4 -#define DRM_MODE_ENCODER_VIRTUAL 5 -#define DRM_MODE_ENCODER_DSI 6 -#define DRM_MODE_ENCODER_DPMST 7 -#define DRM_MODE_ENCODER_DPI 8 - -#define DRM_MODE_SUBCONNECTOR_Automatic 0 -#define DRM_MODE_SUBCONNECTOR_Unknown 0 -#define DRM_MODE_SUBCONNECTOR_DVID 3 -#define DRM_MODE_SUBCONNECTOR_DVIA 4 -#define DRM_MODE_SUBCONNECTOR_Composite 5 -#define DRM_MODE_SUBCONNECTOR_SVIDEO 6 -#define DRM_MODE_SUBCONNECTOR_Component 8 -#define DRM_MODE_SUBCONNECTOR_SCART 9 - -#define DRM_MODE_CONNECTOR_Unknown 0 -#define DRM_MODE_CONNECTOR_VGA 1 -#define DRM_MODE_CONNECTOR_DVII 2 -#define DRM_MODE_CONNECTOR_DVID 3 -#define DRM_MODE_CONNECTOR_DVIA 4 -#define DRM_MODE_CONNECTOR_Composite 5 -#define DRM_MODE_CONNECTOR_SVIDEO 6 -#define DRM_MODE_CONNECTOR_LVDS 7 -#define DRM_MODE_CONNECTOR_Component 8 -#define DRM_MODE_CONNECTOR_9PinDIN 9 -#define DRM_MODE_CONNECTOR_DisplayPort 10 -#define DRM_MODE_CONNECTOR_HDMIA 11 -#define DRM_MODE_CONNECTOR_HDMIB 12 -#define DRM_MODE_CONNECTOR_TV 13 -#define DRM_MODE_CONNECTOR_eDP 14 -#define DRM_MODE_CONNECTOR_VIRTUAL 15 -#define DRM_MODE_CONNECTOR_DSI 16 -#define DRM_MODE_CONNECTOR_DPI 17 -#define DRM_MODE_CONNECTOR_WRITEBACK 18 - -#define DRM_MODE_PROP_PENDING (1<<0) -#define DRM_MODE_PROP_RANGE (1<<1) -#define DRM_MODE_PROP_IMMUTABLE (1<<2) -#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */ -#define DRM_MODE_PROP_BLOB (1<<4) - -#define DRM_MODE_CURSOR_BO (1<<0) -#define DRM_MODE_CURSOR_MOVE (1<<1) - -#endif /* _DRM_MODE_H */ - - -/* * Feature defines * * Just because these are defined doesn't mean that the kernel @@ -268,6 +151,11 @@ static __inline int drm_property_type_is return property->flags & type; } +static inline uint32_t drmModeGetPropertyType(const drmModePropertyRes *prop) +{ + return prop->flags & (DRM_MODE_PROP_LEGACY_TYPE | DRM_MODE_PROP_EXTENDED_TYPE); +} + typedef struct _drmModeCrtc { uint32_t crtc_id; uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */ @@ -289,6 +177,18 @@ typedef struct _drmModeEncoder { uint32_t possible_clones; } drmModeEncoder, *drmModeEncoderPtr; +/** + * Describes the connector status. + * + * DRM_MODE_CONNECTED means that the connector has a sink plugged in. + * DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used + * when it could be either. + * + * User-space should first try to enable DRM_MODE_CONNECTED connectors and + * ignore other connectors. If there are no DRM_MODE_CONNECTED connectors, + * user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION + * connectors. + */ typedef enum { DRM_MODE_CONNECTED = 1, DRM_MODE_DISCONNECTED = 2, @@ -365,6 +265,13 @@ extern void drmModeFreePlane( drmModePla extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr); /** + * Check whether the DRM node supports Kernel Mode-Setting. + * + * Returns 1 if suitable for KMS, 0 otherwise. + */ +extern int drmIsKMS(int fd); + +/** * Retrieves all of the resources associated with a card. */ extern drmModeResPtr drmModeGetResources(int fd); @@ -548,14 +455,14 @@ extern int drmModeCreateLease(int fd, co typedef struct drmModeLesseeList { uint32_t count; - uint32_t lessees[0]; + uint32_t lessees[]; } drmModeLesseeListRes, *drmModeLesseeListPtr; extern drmModeLesseeListPtr drmModeListLessees(int fd); typedef struct drmModeObjectList { uint32_t count; - uint32_t objects[0]; + uint32_t objects[]; } drmModeObjectListRes, *drmModeObjectListPtr; extern drmModeObjectListPtr drmModeGetLease(int fd); Index: xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c diff -u xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.19 xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.20 --- xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c:1.19 Sun Nov 1 09:57:38 2020 +++ xsrc/external/mit/libdrm/dist/intel/intel_bufmgr_gem.c Tue Apr 27 03:02:37 2021 @@ -1732,6 +1732,82 @@ drm_intel_gem_bo_unmap_gtt(drm_intel_bo return drm_intel_gem_bo_unmap(bo); } +static bool is_cache_coherent(drm_intel_bo *bo) +{ + drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr; + drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; + struct drm_i915_gem_caching arg = {}; + + arg.handle = bo_gem->gem_handle; + if (drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_GET_CACHING, &arg)) + assert(false); + return arg.caching != I915_CACHING_NONE; +} + +static void set_domain(drm_intel_bo *bo, uint32_t read, uint32_t write) +{ + drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr; + drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; + struct drm_i915_gem_set_domain arg = {}; + + arg.handle = bo_gem->gem_handle; + arg.read_domains = read; + arg.write_domain = write; + if (drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &arg)) + assert(false); +} + +static int mmap_write(drm_intel_bo *bo, unsigned long offset, + unsigned long length, const void *buf) +{ + void *map = NULL; + + if (!length) + return 0; + + if (is_cache_coherent(bo)) { + map = drm_intel_gem_bo_map__cpu(bo); + if (map) + set_domain(bo, I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU); + } + if (!map) { + map = drm_intel_gem_bo_map__wc(bo); + if (map) + set_domain(bo, I915_GEM_DOMAIN_WC, I915_GEM_DOMAIN_WC); + } + + assert(map); + memcpy((char *)map + offset, buf, length); + drm_intel_gem_bo_unmap(bo); + return 0; +} + +static int mmap_read(drm_intel_bo *bo, unsigned long offset, + unsigned long length, void *buf) +{ + drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr; + void *map = NULL; + + if (!length) + return 0; + + if (bufmgr_gem->has_llc || is_cache_coherent(bo)) { + map = drm_intel_gem_bo_map__cpu(bo); + if (map) + set_domain(bo, I915_GEM_DOMAIN_CPU, 0); + } + if (!map) { + map = drm_intel_gem_bo_map__wc(bo); + if (map) + set_domain(bo, I915_GEM_DOMAIN_WC, 0); + } + + assert(map); + memcpy(buf, (char *)map + offset, length); + drm_intel_gem_bo_unmap(bo); + return 0; +} + static int drm_intel_gem_bo_subdata(drm_intel_bo *bo, unsigned long offset, unsigned long size, const void *data) @@ -1752,14 +1828,20 @@ drm_intel_gem_bo_subdata(drm_intel_bo *b ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_PWRITE, &pwrite); - if (ret != 0) { + if (ret) ret = -errno; + + if (ret != 0 && ret != -EOPNOTSUPP) { DBG("%s:%d: Error writing data to buffer %d: (%d %d) %s .\n", __FILE__, __LINE__, bo_gem->gem_handle, (int)offset, (int)size, strerror(errno)); + return ret; } - return ret; + if (ret == -EOPNOTSUPP) + mmap_write(bo, offset, size, data); + + return 0; } static int @@ -1807,14 +1889,20 @@ drm_intel_gem_bo_get_subdata(drm_intel_b ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_PREAD, &pread); - if (ret != 0) { + if (ret) ret = -errno; + + if (ret != 0 && ret != -EOPNOTSUPP) { DBG("%s:%d: Error reading data from buffer %d: (%d %d) %s .\n", __FILE__, __LINE__, bo_gem->gem_handle, (int)offset, (int)size, strerror(errno)); + return ret; } - return ret; + if (ret == -EOPNOTSUPP) + mmap_read(bo, offset, size, data); + + return 0; } /** Waits for all GPU rendering with the object to have completed. */ Index: xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c diff -u xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.14 xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.15 --- xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c:1.14 Sun Nov 1 09:57:40 2020 +++ xsrc/external/mit/libdrm/dist/tests/modetest/modetest.c Tue Apr 27 03:02:37 2021 @@ -457,7 +457,7 @@ static void dump_connectors(struct devic if (connector->count_modes) { printf(" modes:\n"); printf("\tindex name refresh (Hz) hdisp hss hse htot vdisp " - "vss vse vtot)\n"); + "vss vse vtot\n"); for (j = 0; j < connector->count_modes; j++) dump_mode(&connector->modes[j], j); }