diff -ruN qt-everywhere-enterprise-src-5.3.2_orig/qtbase/src/plugins/platforms/kms/qkmscursor.cpp qt-everywhere-enterprise-src-5.3.2/qtbase/src/plugins/platforms/kms/qkmscursor.cpp
--- qt-everywhere-enterprise-src-5.3.2_orig/qtbase/src/plugins/platforms/kms/qkmscursor.cpp	2014-09-17 12:01:47.565643201 +0200
+++ qt-everywhere-enterprise-src-5.3.2/qtbase/src/plugins/platforms/kms/qkmscursor.cpp	2014-09-22 14:55:10.306027922 +0200
@@ -43,16 +43,53 @@
 #include "qkmsscreen.h"
 #include "qkmsdevice.h"
 
+
 QT_BEGIN_NAMESPACE
 
+// see, e.g. http://lxr.free-electrons.com/source/include/uapi/drm/drm.h#L632
+// and http://cgit.freedesktop.org/xorg/driver/xf86-video-modesetting/commit/?id=677935b2d20f54f21c645b5eb386b6c9485fee5f
+#ifndef DRM_CAP_CURSOR_WIDTH
+#define DRM_CAP_CURSOR_WIDTH 0x8
+#endif
+
+#ifndef DRM_CAP_CURSOR_HEIGHT
+#define DRM_CAP_CURSOR_HEIGHT 0x9
+#endif
+
 QKmsCursor::QKmsCursor(QKmsScreen *screen)
     : m_screen(screen),
       m_graphicsBufferManager(screen->device()->gbmDevice()),
-      m_cursorBufferObject(gbm_bo_create(m_graphicsBufferManager, 64, 64, GBM_FORMAT_ARGB8888,
-                                         GBM_BO_USE_CURSOR_64X64|GBM_BO_USE_WRITE)),
+      m_cursorBufferObject(0),
       m_cursorImage(new QPlatformCursorImage(0, 0, 0, 0, 0, 0)),
-      m_moved(false)
+      m_moved(false),
+      m_cursor_width(64),
+      m_cursor_height(64)
 {
+    uint64_t value = 0;
+    // NOTE: http://qt-project.org/doc/qt-5/qtglobal.html#qulonglong-typedef
+    //          qulonglong [...] is the same as quint64
+    // but function names use longlong:
+    value = qgetenv("QT_CURSOR_WIDTH").toULongLong();
+    if (value) {
+        m_cursor_width = value;
+    } else {
+        int ret = drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_WIDTH, &value);
+        if (!ret) {
+            m_cursor_width = value > 32 ? value : 32;
+        } // else: the default, 64
+    }
+    value = qgetenv("QT_CURSOR_HEIGHT").toULongLong();
+    if (value) {
+        m_cursor_width = value;
+    } else {
+        int ret = drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_HEIGHT, &value);
+        if (!ret) {
+            m_cursor_height = value > 32 ? value : 32;
+        } // else: the default, 64
+    }
+
+    m_cursorBufferObject = gbm_bo_create(m_graphicsBufferManager, m_cursor_width, m_cursor_height, GBM_FORMAT_ARGB8888,
+                                         GBM_BO_USE_CURSOR_64X64|GBM_BO_USE_WRITE);
 }
 
 QKmsCursor::~QKmsCursor()
@@ -89,16 +126,16 @@
                            windowCursor->hotSpot().y());
     }
 
-    if ((m_cursorImage->image()->width() > 64) || (m_cursorImage->image()->width() > 64))
-        qWarning("Warning: cursor larger than 64x64; only 64x64 pixels will be shown.");
+    if ((uint64_t(m_cursorImage->image()->width()) > m_cursor_width) || (uint64_t(m_cursorImage->image()->height()) > m_cursor_height))
+        qWarning() << QString("Warning: cursor larger than %1x%2; only %3x%4 pixels will be shown.").arg(m_cursor_width).arg(m_cursor_height).arg(m_cursor_width).arg(m_cursor_height);
 
     QImage cursorImage = m_cursorImage->image()->
-            convertToFormat(QImage::Format_ARGB32).copy(0, 0, 64, 64);
+            convertToFormat(QImage::Format_ARGB32).copy(0, 0, m_cursor_width, m_cursor_height);
     gbm_bo_write(m_cursorBufferObject, cursorImage.constBits(), cursorImage.byteCount());
 
     quint32 handle = gbm_bo_get_handle(m_cursorBufferObject).u32;
     int status = drmModeSetCursor(m_screen->device()->fd(),
-                                  m_screen->crtcId(), handle, 64, 64);
+                                  m_screen->crtcId(), handle, m_cursor_width, m_cursor_height);
 
     if (status) {
         qWarning("failed to set cursor: %d", status);
diff -ruN qt-everywhere-enterprise-src-5.3.2_orig/qtbase/src/plugins/platforms/kms/qkmscursor.h qt-everywhere-enterprise-src-5.3.2/qtbase/src/plugins/platforms/kms/qkmscursor.h
--- qt-everywhere-enterprise-src-5.3.2_orig/qtbase/src/plugins/platforms/kms/qkmscursor.h	2014-09-17 12:01:47.545643449 +0200
+++ qt-everywhere-enterprise-src-5.3.2/qtbase/src/plugins/platforms/kms/qkmscursor.h	2014-09-17 16:03:53.630974125 +0200
@@ -66,6 +66,9 @@
     gbm_bo *m_cursorBufferObject;
     QPlatformCursorImage *m_cursorImage;
     bool m_moved;
+    
+    uint64_t m_cursor_width; // FIXME: maybe this could be derived from some properties of QPlatformCursor? but it is not there directly...
+    uint64_t m_cursor_height;
 };
 
 QT_END_NAMESPACE
