mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	"hn.chen" <hn.chen@sunplusit.com>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	Tomasz Figa <tfiga@chromium.org>
Subject: Re: [PATCH RESEND v2 2/8] media: uvc: Allow quirking by entity guid
Date: Tue, 3 Jan 2023 23:16:11 +0200	[thread overview]
Message-ID: <Y7SbG1la3tQtD6Rk@pendragon.ideasonboard.com> (raw)
In-Reply-To: <CANiDSCs_36D5t5FOL+XuSCSz+H8RWQmV8F2TiAqDJTQUh-K2JQ@mail.gmail.com>

Hi Ricardo,

On Tue, Jan 03, 2023 at 04:40:48PM +0100, Ricardo Ribalda wrote:
> On Fri, 30 Dec 2022 at 14:40, Laurent Pinchart wrote:
> > On Fri, Dec 02, 2022 at 06:02:42PM +0100, Ricardo Ribalda wrote:
> > > When an IP is shared by multiple devices its erratas will be shared by
> > > all of them. Instead of creating a long list of device quirks, or
> > > waiting for the users to report errors in their hardware lets add a
> > > routine to add quirks based on the entity guid.
> >
> > I'm not thrilled by this. An entity is not an "IP". Quirks are needed to
> > handle issues with particular firmware versions on particular devices.
> > The same entity GUID can be used by different devices running different
> > firmware versions, some that would require a quirk and some that
> > wouldn't.
> 
> Unfortunately there are ISPs that do not support firmware upgrading
> that have an error on their firmware (or in this particular case a
> different interpretation of the standard).

I recall we've discussed that. I'll stick to the non politically correct
interpretation of the issue, and call it a bug :-)

> Those ISPs are mounted in
> different boards with a VID:PID that is chosen by the module
> manufacturer.
> In those cases we cannot get a list of the devices that are broken, we
> could only get a sublist that we will keep updating indefinitely as
> users keep reporting bugs (if they do so).
> 
> We are lucky enough that SunplusIT has been very active and provided
> us a way to detect what hardware requires quirking.

Is there a guarantee that none of the newer firmware versions that do
not exhibit this bug will *not* use the same XU GUID ?

> In those
> situations where the vendor is on board and there is no upgrade
> mechanism I think that this is a good compromise.

What I'm interested in is how to prevent this kind of issues in the
future. HungNien, would you be interested in engaging with us in order
to test future ISP firmwares against Linux ? I do appreciate that you
have supported Ricardo with handling this issue. We could work on a
publicly available UVC compliance test suite. You can reply about this
privately if you would rather not discuss this topic on public mailing
lists.

> > > Tested-by: HungNien Chen <hn.chen@sunplusit.com>
> > > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> > > ---
> > >  drivers/media/usb/uvc/uvc_driver.c | 25 +++++++++++++++++++++++++
> > >  1 file changed, 25 insertions(+)
> > >
> > > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> > > index 9c05776f11d1..c63ecfd4617d 100644
> > > --- a/drivers/media/usb/uvc/uvc_driver.c
> > > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > > @@ -1493,6 +1493,28 @@ static int uvc_parse_control(struct uvc_device *dev)
> > >       return 0;
> > >  }
> > >
> > > +static const struct uvc_entity_quirk {
> > > +     u8 guid[16];
> > > +     u32 quirks;
> > > +} uvc_entity_quirk[] = {
> > > +};
> > > +
> > > +static void uvc_entity_quirks(struct uvc_device *dev)
> > > +{
> > > +     struct uvc_entity *entity;
> > > +     int i;
> >
> > unsigned int
> >
> > > +
> > > +     list_for_each_entry(entity, &dev->entities, list) {
> > > +             for (i = 0; i < ARRAY_SIZE(uvc_entity_quirk); i++) {
> > > +                     if (memcmp(entity->guid, uvc_entity_quirk[i].guid,
> > > +                                sizeof(entity->guid)) == 0) {
> > > +                             dev->quirks |= uvc_entity_quirk[i].quirks;
> > > +                             break;
> > > +                     }
> > > +             }
> > > +     }
> > > +}
> > > +
> > >  /* -----------------------------------------------------------------------------
> > >   * Privacy GPIO
> > >   */
> > > @@ -2452,6 +2474,9 @@ static int uvc_probe(struct usb_interface *intf,
> > >               goto error;
> > >       }
> > >
> > > +     /* Apply entity based quirks */
> > > +     uvc_entity_quirks(dev);
> > > +
> > >       dev_info(&dev->udev->dev, "Found UVC %u.%02x device %s (%04x:%04x)\n",
> > >                dev->uvc_version >> 8, dev->uvc_version & 0xff,
> > >                udev->product ? udev->product : "<unnamed>",

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2023-01-03 21:16 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-02 17:02 [PATCH RESEND v2 0/8] uvcvideo: Fixes for hw timestamping Ricardo Ribalda
2022-12-02 17:02 ` [PATCH RESEND v2 1/8] media: uvc: Extend documentation of uvc_video_clock_decode() Ricardo Ribalda
2022-12-30 13:36   ` Laurent Pinchart
2022-12-02 17:02 ` [PATCH RESEND v2 2/8] media: uvc: Allow quirking by entity guid Ricardo Ribalda
2022-12-30 13:40   ` Laurent Pinchart
2023-01-03 15:40     ` Ricardo Ribalda
2023-01-03 21:16       ` Laurent Pinchart [this message]
2022-12-02 17:02 ` [PATCH RESEND v2 3/8] media: uvc: Create UVC_QUIRK_IGNORE_EMPTY_TS quirk Ricardo Ribalda
2022-12-30 13:45   ` Laurent Pinchart
2023-01-03 16:00     ` Ricardo Ribalda
2023-01-07  1:16     ` Laurent Pinchart
2022-12-02 17:02 ` [PATCH RESEND v2 4/8] media: uvcvideo: Quirk for invalid dev_sof in Logi C922 Ricardo Ribalda
2022-12-30 14:31   ` Laurent Pinchart
2022-12-02 17:02 ` [PATCH RESEND v2 5/8] media: uvcvideo: Quirk for autosuspend in Logi C910 Ricardo Ribalda
2022-12-30 13:52   ` Laurent Pinchart
2023-01-03 16:13     ` Ricardo Ribalda
2022-12-02 17:02 ` [PATCH RESEND v2 6/8] media: uvcvideo: Allow hw clock updates with buffers not full Ricardo Ribalda
2022-12-30 14:37   ` Laurent Pinchart
2022-12-02 17:02 ` [PATCH RESEND v2 7/8] media: uvcvideo: Refactor clock circular buffer Ricardo Ribalda
2022-12-30 14:39   ` Laurent Pinchart
2022-12-02 17:02 ` [PATCH RESEND v2 8/8] media: uvcvideo: Fix hw timestampt handling for slow FPS Ricardo Ribalda
2022-12-30 14:51   ` Laurent Pinchart
2023-01-03 23:34     ` Ricardo Ribalda
2023-01-07  0:54       ` Laurent Pinchart
2023-01-09  8:13         ` Ricardo Ribalda

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=Y7SbG1la3tQtD6Rk@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=hn.chen@sunplusit.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=ribalda@chromium.org \
    --cc=tfiga@chromium.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®