From 2fa996ed616232912dfa4c6dee825a1d84b8ff8a Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Mon, 26 Jan 2026 20:58:48 -0300 Subject: [PATCH] kernel: log uvc ep sizing --- scripts/kernel/uvc-debug.patch | 62 ++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/scripts/kernel/uvc-debug.patch b/scripts/kernel/uvc-debug.patch index bf5ffb5..a438aa0 100644 --- a/scripts/kernel/uvc-debug.patch +++ b/scripts/kernel/uvc-debug.patch @@ -1,6 +1,6 @@ --- a/drivers/usb/gadget/function/uvc_video.c +++ b/drivers/usb/gadget/function/uvc_video.c -@@ -503,6 +503,10 @@ +@@ -503,9 +503,17 @@ unsigned int max_req_size, req_size, header_size; unsigned int nreq; @@ -11,7 +11,14 @@ max_req_size = video->max_req_size; if (!usb_endpoint_xfer_isoc(video->ep->desc)) { -@@ -534,6 +538,16 @@ ++ uvcg_info(&uvc->func, ++ "Video prep non-isoc: attrs=0x%x max_req=%u imagesize=%u interval=%u\n", ++ video->ep->desc->bmAttributes, max_req_size, ++ video->imagesize, video->interval); + video->req_size = max_req_size; + video->reqs_per_frame = video->uvc_num_requests = + DIV_ROUND_UP(video->imagesize, max_req_size); +@@ -534,6 +542,16 @@ } video->req_size = req_size; @@ -28,7 +35,19 @@ /* We need to compensate the amount of requests to be * allocated with the maximum amount of zero length requests. * Since it is possible that hw_submit will initially -@@ -764,20 +778,70 @@ +@@ -558,6 +576,11 @@ + */ + uvc_video_prep_requests(video); + ++ uvcg_info(&video->uvc->func, ++ "Video alloc: req_size=%u max_req=%u max_payload=%u uvc_num_requests=%u reqs_per_frame=%u\n", ++ video->req_size, video->max_req_size, video->max_payload_size, ++ video->uvc_num_requests, video->reqs_per_frame); ++ + for (i = 0; i < video->uvc_num_requests; i++) { + ureq = kzalloc(sizeof(struct uvc_request), GFP_KERNEL); + if (ureq == NULL) +@@ -764,20 +787,70 @@ { int ret; @@ -99,3 +118,40 @@ if ((ret = uvcg_queue_enable(&video->queue, 1)) < 0) return ret; +--- a/drivers/usb/gadget/function/f_uvc.c ++++ b/drivers/usb/gadget/function/f_uvc.c +@@ -362,10 +362,34 @@ + return ret; + usb_ep_enable(uvc->video.ep); + ++ if (uvc->video.ep->desc) ++ uvcg_info(f, ++ "UVC ep config: speed=%u addr=0x%02x attrs=0x%02x maxpacket=%u maxburst=%u mult=%u wMaxPacket=0x%04x interval=%u\n", ++ f->config->cdev->gadget->speed, ++ uvc->video.ep->address, ++ uvc->video.ep->desc->bmAttributes, ++ uvc->video.ep->maxpacket, uvc->video.ep->maxburst, ++ uvc->video.ep->mult, ++ le16_to_cpu(uvc->video.ep->desc->wMaxPacketSize), ++ uvc->video.ep->desc->bInterval); ++ else ++ uvcg_err(f, ++ "UVC ep config: missing desc speed=%u maxpacket=%u maxburst=%u mult=%u\n", ++ f->config->cdev->gadget->speed, ++ uvc->video.ep->maxpacket, uvc->video.ep->maxburst, ++ uvc->video.ep->mult); ++ + uvc->video.max_req_size = uvc->video.ep->maxpacket + * max_t(unsigned int, uvc->video.ep->maxburst, 1) + * (uvc->video.ep->mult); + ++ uvcg_info(f, ++ "UVC max_req_size=%u (maxpacket=%u maxburst=%u mult=%u)\n", ++ uvc->video.max_req_size, ++ uvc->video.ep->maxpacket, ++ uvc->video.ep->maxburst, ++ uvc->video.ep->mult); ++ + memset(&v4l2_event, 0, sizeof(v4l2_event)); + v4l2_event.type = UVC_EVENT_STREAMON; + v4l2_event_queue(&uvc->vdev, &v4l2_event);