Re: [PATCH] etnaviv: Restore some id values

From: Christian Gmeiner
Date: Fri Mar 01 2024 - 08:31:54 EST


Hi Lucas,

>
> prefix for etnaviv kernel patches should be "drm/etnaviv: ..."

Ah yeah .. corrected in v2.

>
> Am Donnerstag, dem 29.02.2024 um 20:55 +0100 schrieb Christian Gmeiner:
> > From: Christian Gmeiner <cgmeiner@xxxxxxxxxx>
> >
> > The hwdb selection logic as a feature that allows it to mark some fields
> > as 'don't care'. If we match with such a field we memcpy(..)
> > the current etnaviv_chip_identity into ident.
> >
> > This step can overwrite some id values read from the GPU with the
> > 'don't care' value.
> >
> > Fix this issue by restoring the affected values after the memcpy(..).
> >
> > As this is crucial for user space to know when this feature works as
> > expected increment the minor version too.
>
> Uh, right. Lying to userspace about the GPU identity doesn't seem like
> a good idea.
>
> >
> > Fixes: 4078a1186dd3 ("drm/etnaviv: update hwdb selection logic")
> > Cc: stable@xxxxxxxxxxxxxxx
> > Signed-off-by: Christian Gmeiner <cgmeiner@xxxxxxxxxx>
> > ---
> > drivers/gpu/drm/etnaviv/etnaviv_drv.c | 2 +-
> > drivers/gpu/drm/etnaviv/etnaviv_hwdb.c | 14 ++++++++++++++
> > 2 files changed, 15 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> > index 6228ce603248..9a2965741dab 100644
> > --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> > +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> > @@ -494,7 +494,7 @@ static const struct drm_driver etnaviv_drm_driver = {
> > .desc = "etnaviv DRM",
> > .date = "20151214",
> > .major = 1,
> > - .minor = 3,
> > + .minor = 4,
> > };
> >
> > /*
> > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c b/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> > index 67201242438b..1e38d66702f1 100644
> > --- a/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> > +++ b/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c
> > @@ -265,6 +265,9 @@ static const struct etnaviv_chip_identity etnaviv_chip_identities[] = {
> > bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu)
> > {
> > struct etnaviv_chip_identity *ident = &gpu->identity;
> > + const u32 product_id = ident->product_id;
> > + const u32 customer_id = ident->customer_id;
> > + const u32 eco_id = ident->eco_id;
> > int i;
> >
> > for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) {
> > @@ -278,6 +281,17 @@ bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu)
> > etnaviv_chip_identities[i].eco_id == ~0U)) {
> > memcpy(ident, &etnaviv_chip_identities[i],
> > sizeof(*ident));
> > +
> > + /* Restore some id values if ~0U aka 'don't care' is used. */
> > + if (etnaviv_chip_identities[i].product_id == ~0U)
>
> You can drop all those if clauses. Either the hwdb value is an exact
> match and the value is the same or it's the don't care value and you
> want to restore it, so a simple unconditional assignment would make
> this a bit more compact.
>

Makes sense - thanks for your review!

--
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info/privacypolicy