From: kernel test robot <lkp@intel.com>
To: chenchangcheng <ccc194101@163.com>,
laurent.pinchart@ideasonboard.com, hdegoede@redhat.com,
mchehab@kernel.org
Cc: oe-kbuild-all@lists.linux.dev, linux-media@vger.kernel.org,
linux-kernel@vger.kernel.org,
chenchangcheng <chenchangcheng@kylinos.cn>
Subject: Re: [PATCH v2] media: uvcvideo: Fix bandwidth issue for Alcor camera
Date: Wed, 19 Mar 2025 13:50:51 +0800 [thread overview]
Message-ID: <202503191330.AveQs7tb-lkp@intel.com> (raw)
In-Reply-To: <20250318085724.1151547-1-ccc194101@163.com>
Hi chenchangcheng,
kernel test robot noticed the following build errors:
[auto build test ERROR on 4701f33a10702d5fc577c32434eb62adde0a1ae1]
url: https://github.com/intel-lab-lkp/linux/commits/chenchangcheng/media-uvcvideo-Fix-bandwidth-issue-for-Alcor-camera/20250318-165843
base: 4701f33a10702d5fc577c32434eb62adde0a1ae1
patch link: https://lore.kernel.org/r/20250318085724.1151547-1-ccc194101%40163.com
patch subject: [PATCH v2] media: uvcvideo: Fix bandwidth issue for Alcor camera
config: sparc-randconfig-r072-20250319 (https://download.01.org/0day-ci/archive/20250319/202503191330.AveQs7tb-lkp@intel.com/config)
compiler: sparc-linux-gcc (GCC) 13.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250319/202503191330.AveQs7tb-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503191330.AveQs7tb-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/media/usb/uvc/uvc_video.c: In function 'uvc_fixup_video_ctrl':
>> drivers/media/usb/uvc/uvc_video.c:269:17: error: implicit declaration of function 'uvc_printk'; did you mean '_printk'? [-Werror=implicit-function-declaration]
269 | uvc_printk(KERN_WARNING, "the max payload transmission size [%d]
| ^~~~~~~~~~
| _printk
drivers/media/usb/uvc/uvc_video.c:269:42: warning: missing terminating " character
269 | uvc_printk(KERN_WARNING, "the max payload transmission size [%d]
| ^
>> drivers/media/usb/uvc/uvc_video.c:269:42: error: missing terminating " character
269 | uvc_printk(KERN_WARNING, "the max payload transmission size [%d]
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/media/usb/uvc/uvc_video.c:270:28: error: 'exceededs' undeclared (first use in this function)
270 | exceededs the size of the ep max packet.
| ^~~~~~~~~
drivers/media/usb/uvc/uvc_video.c:270:28: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/media/usb/uvc/uvc_video.c:270:37: error: expected ')' before 'the'
270 | exceededs the size of the ep max packet.
| ^~~~
| )
drivers/media/usb/uvc/uvc_video.c:269:27: note: to match this '('
269 | uvc_printk(KERN_WARNING, "the max payload transmission size [%d]
| ^
>> drivers/media/usb/uvc/uvc_video.c:271:64: error: stray '\' in program
271 | use the default value of 1024 bytes.\n",
| ^
drivers/media/usb/uvc/uvc_video.c:271:66: warning: missing terminating " character
271 | use the default value of 1024 bytes.\n",
| ^
drivers/media/usb/uvc/uvc_video.c:271:66: error: missing terminating " character
271 | use the default value of 1024 bytes.\n",
| ^~
cc1: some warnings being treated as errors
vim +269 drivers/media/usb/uvc/uvc_video.c
162
163 static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
164 struct uvc_streaming_control *ctrl)
165 {
166 const struct uvc_format *format = NULL;
167 const struct uvc_frame *frame = NULL;
168 unsigned int i;
169
170 /*
171 * The response of the Elgato Cam Link 4K is incorrect: The second byte
172 * contains bFormatIndex (instead of being the second byte of bmHint).
173 * The first byte is always zero. The third byte is always 1.
174 *
175 * The UVC 1.5 class specification defines the first five bits in the
176 * bmHint bitfield. The remaining bits are reserved and should be zero.
177 * Therefore a valid bmHint will be less than 32.
178 *
179 * Latest Elgato Cam Link 4K firmware as of 2021-03-23 needs this fix.
180 * MCU: 20.02.19, FPGA: 67
181 */
182 if (usb_match_one_id(stream->dev->intf, &elgato_cam_link_4k) &&
183 ctrl->bmHint > 255) {
184 u8 corrected_format_index = ctrl->bmHint >> 8;
185
186 uvc_dbg(stream->dev, VIDEO,
187 "Correct USB video probe response from {bmHint: 0x%04x, bFormatIndex: %u} to {bmHint: 0x%04x, bFormatIndex: %u}\n",
188 ctrl->bmHint, ctrl->bFormatIndex,
189 1, corrected_format_index);
190 ctrl->bmHint = 1;
191 ctrl->bFormatIndex = corrected_format_index;
192 }
193
194 for (i = 0; i < stream->nformats; ++i) {
195 if (stream->formats[i].index == ctrl->bFormatIndex) {
196 format = &stream->formats[i];
197 break;
198 }
199 }
200
201 if (format == NULL)
202 return;
203
204 for (i = 0; i < format->nframes; ++i) {
205 if (format->frames[i].bFrameIndex == ctrl->bFrameIndex) {
206 frame = &format->frames[i];
207 break;
208 }
209 }
210
211 if (frame == NULL)
212 return;
213
214 if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) ||
215 (ctrl->dwMaxVideoFrameSize == 0 &&
216 stream->dev->uvc_version < 0x0110))
217 ctrl->dwMaxVideoFrameSize =
218 frame->dwMaxVideoFrameBufferSize;
219
220 /*
221 * The "TOSHIBA Web Camera - 5M" Chicony device (04f2:b50b) seems to
222 * compute the bandwidth on 16 bits and erroneously sign-extend it to
223 * 32 bits, resulting in a huge bandwidth value. Detect and fix that
224 * condition by setting the 16 MSBs to 0 when they're all equal to 1.
225 */
226 if ((ctrl->dwMaxPayloadTransferSize & 0xffff0000) == 0xffff0000)
227 ctrl->dwMaxPayloadTransferSize &= ~0xffff0000;
228
229 if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) &&
230 stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH &&
231 stream->intf->num_altsetting > 1) {
232 u32 interval;
233 u32 bandwidth;
234
235 interval = (ctrl->dwFrameInterval > 100000)
236 ? ctrl->dwFrameInterval
237 : frame->dwFrameInterval[0];
238
239 /*
240 * Compute a bandwidth estimation by multiplying the frame
241 * size by the number of video frames per second, divide the
242 * result by the number of USB frames (or micro-frames for
243 * high- and super-speed devices) per second and add the UVC
244 * header size (assumed to be 12 bytes long).
245 */
246 bandwidth = frame->wWidth * frame->wHeight / 8 * format->bpp;
247 bandwidth *= 10000000 / interval + 1;
248 bandwidth /= 1000;
249 if (stream->dev->udev->speed >= USB_SPEED_HIGH)
250 bandwidth /= 8;
251 bandwidth += 12;
252
253 /*
254 * The bandwidth estimate is too low for many cameras. Don't use
255 * maximum packet sizes lower than 1024 bytes to try and work
256 * around the problem. According to measurements done on two
257 * different camera models, the value is high enough to get most
258 * resolutions working while not preventing two simultaneous
259 * VGA streams at 15 fps.
260 */
261 bandwidth = max_t(u32, bandwidth, 1024);
262
263 ctrl->dwMaxPayloadTransferSize = bandwidth;
264 }
265
266 if (format->flags & UVC_FMT_FLAG_COMPRESSED &&
267 stream->dev->quirks & UVC_QUIRK_OVERFLOW_BANDWIDTH &&
268 ctrl->dwMaxPayloadTransferSize > stream->maxpsize) {
> 269 uvc_printk(KERN_WARNING, "the max payload transmission size [%d]
> 270 exceededs the size of the ep max packet.
> 271 use the default value of 1024 bytes.\n",
272 ctrl->dwMaxPayloadTransferSize);
273 ctrl->dwMaxPayloadTransferSize = 1024;
274 }
275 }
276
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
prev parent reply other threads:[~2025-03-19 5:51 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-18 8:57 [PATCH v2] media: uvcvideo: Fix bandwidth issue for Alcor camera chenchangcheng
2025-03-19 4:03 ` kernel test robot
2025-03-19 5:28 ` kernel test robot
2025-03-19 5:50 ` kernel test robot [this message]
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=202503191330.AveQs7tb-lkp@intel.com \
--to=lkp@intel.com \
--cc=ccc194101@163.com \
--cc=chenchangcheng@kylinos.cn \
--cc=hdegoede@redhat.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
/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.