From: Thomas Zimmermann <tzimmermann@suse.de>
To: airlied@redhat.com, sean@poorly.run, patrik.r.jakobsson@gmail.com
Cc: dri-devel@lists.freedesktop.org, Thomas Zimmermann <tzimmermann@suse.de>
Subject: [PATCH 9/9] drm/udl: Support adapters without firmware descriptor
Date: Tue, 1 Apr 2025 18:12:19 +0200 [thread overview]
Message-ID: <20250401161929.283244-10-tzimmermann@suse.de> (raw)
In-Reply-To: <20250401161929.283244-1-tzimmermann@suse.de>
Set default limit on the number of pixels for adapters without
vendor firmware descriptor. The devices work as expected, they
just don't provide any description.
If parsing the vendor firmware descriptor fails, the device falls
back to the given default limits. Failing to allocate memory is
still an error.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/gpu/drm/udl/udl_main.c | 37 +++++++++++++++++++---------------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c
index b5a6b254a2028..2685608af8cec 100644
--- a/drivers/gpu/drm/udl/udl_main.c
+++ b/drivers/gpu/drm/udl/udl_main.c
@@ -76,6 +76,7 @@ static int udl_parse_vendor_descriptor(struct udl_device *udl)
{
struct drm_device *dev = &udl->drm;
struct usb_device *udev = udl_to_usb_device(udl);
+ bool detected = false;
void *buf;
int ret;
unsigned int len;
@@ -84,16 +85,16 @@ static int udl_parse_vendor_descriptor(struct udl_device *udl)
buf = kzalloc(MAX_VENDOR_DESCRIPTOR_SIZE, GFP_KERNEL);
if (!buf)
- return false;
+ return -ENOMEM;
ret = usb_get_descriptor(udev, 0x5f, /* vendor specific */
0, buf, MAX_VENDOR_DESCRIPTOR_SIZE);
if (ret < 0)
- goto unrecognized;
+ goto out;
len = ret;
if (len < 5)
- goto unrecognized;
+ goto out;
desc = buf;
desc_end = desc + len;
@@ -103,21 +104,20 @@ static int udl_parse_vendor_descriptor(struct udl_device *udl)
(desc[2] != 0x01) || /* version (2 bytes) */
(desc[3] != 0x00) ||
(desc[4] != len - 2)) /* length after type */
- goto unrecognized;
+ goto out;
desc += 5;
+ detected = true;
+
while (desc < desc_end)
desc = udl_parse_key_value_pair(udl, desc, desc_end);
- goto success;
-
-unrecognized:
- /* allow udlfb to load for now even if firmware unrecognized */
- drm_warn(dev, "Unrecognized vendor firmware descriptor\n");
-
-success:
+out:
+ if (!detected)
+ drm_warn(dev, "Unrecognized vendor firmware descriptor\n");
kfree(buf);
- return true;
+
+ return 0;
}
/*
@@ -345,11 +345,16 @@ int udl_init(struct udl_device *udl)
drm_warn(dev, "buffer sharing not supported"); /* not an error */
}
- if (!udl_parse_vendor_descriptor(udl)) {
- ret = -ENODEV;
- DRM_ERROR("firmware not recognized. Assume incompatible device\n");
+ /*
+ * Not all devices provide vendor descriptors with device
+ * information. Initialize to default values from real-world
+ * devices. It is just enough memory for FullHD.
+ */
+ udl->sku_pixel_limit = USL_SKU_PIXEL_LIMIT_DEFAULT;
+
+ ret = udl_parse_vendor_descriptor(udl);
+ if (ret)
goto err;
- }
if (udl_select_std_channel(udl))
DRM_ERROR("Selecting channel failed\n");
--
2.49.0
next prev parent reply other threads:[~2025-04-01 16:23 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-01 16:12 [PATCH 0/9] drm/udl: Support adapters without vendor firmware descriptor Thomas Zimmermann
2025-04-01 16:12 ` [PATCH 1/9] drm/udl: Remove unused field dev from struct udl_device Thomas Zimmermann
2025-04-01 16:12 ` [PATCH 2/9] drm/udl: Remove unused field gem_lock " Thomas Zimmermann
2025-04-01 16:12 ` [PATCH 3/9] drm/udl: Improve type safety when using " Thomas Zimmermann
2025-04-01 16:12 ` [PATCH 4/9] drm/udl: The number of pixels is always positive Thomas Zimmermann
2025-04-01 16:12 ` [PATCH 5/9] drm/udl: Handle errors from usb_get_descriptor() Thomas Zimmermann
2025-04-01 16:12 ` [PATCH 6/9] drm/udl: Return error if vendor descriptor is too short Thomas Zimmermann
2025-04-02 13:16 ` Patrik Jakobsson
2025-04-03 7:28 ` Thomas Zimmermann
2025-04-03 11:06 ` Patrik Jakobsson
2025-04-01 16:12 ` [PATCH 7/9] drm/udl: Treat vendor descriptor as u8 Thomas Zimmermann
2025-04-01 16:12 ` [PATCH 8/9] drm/udl: Validate length in vendor-descriptor parser Thomas Zimmermann
2025-04-01 16:12 ` Thomas Zimmermann [this message]
2025-04-03 11:03 ` [PATCH 9/9] drm/udl: Support adapters without firmware descriptor Patrik Jakobsson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250401161929.283244-10-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=patrik.r.jakobsson@gmail.com \
--cc=sean@poorly.run \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.