From: kernel test robot <lkp@intel.com>
To: chenchangcheng <ccc194101@163.com>,
laurent.pinchart@ideasonboard.com, hdegoede@redhat.com,
mchehab@kernel.org
Cc: llvm@lists.linux.dev, 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 12:03:45 +0800 [thread overview]
Message-ID: <202503191124.azEOPRHh-lkp@intel.com> (raw)
In-Reply-To: <20250318085724.1151547-1-ccc194101@163.com>
Hi chenchangcheng,
kernel test robot noticed the following build warnings:
[auto build test WARNING 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: i386-buildonly-randconfig-006-20250319 (https://download.01.org/0day-ci/archive/20250319/202503191124.azEOPRHh-lkp@intel.com/config)
compiler: clang version 20.1.0 (https://github.com/llvm/llvm-project 24a30daaa559829ad079f2ff7f73eb4e18095f88)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250319/202503191124.azEOPRHh-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/202503191124.azEOPRHh-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/media/usb/uvc/uvc_video.c:269:3: error: call to undeclared function 'uvc_printk'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
269 | uvc_printk(KERN_WARNING, "the max payload transmission size [%d]
| ^
>> drivers/media/usb/uvc/uvc_video.c:269:28: warning: missing terminating '"' character [-Winvalid-pp-token]
269 | uvc_printk(KERN_WARNING, "the max payload transmission size [%d]
| ^
drivers/media/usb/uvc/uvc_video.c:269:28: error: expected expression
drivers/media/usb/uvc/uvc_video.c:271:45: warning: missing terminating '"' character [-Winvalid-pp-token]
271 | use the default value of 1024 bytes.\n",
| ^
2 warnings and 2 errors generated.
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
next prev parent reply other threads:[~2025-03-19 4:03 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 [this message]
2025-03-19 5:28 ` kernel test robot
2025-03-19 5:50 ` kernel test robot
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=202503191124.azEOPRHh-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=llvm@lists.linux.dev \
--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.